@cartanova/qgrid-cli 2.10.9 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
- package/bundle/dist/application/monit/log-buffer.js +12 -6
- package/bundle/dist/application/monit/monit.frame.js +11 -3
- package/bundle/dist/application/monit/monit.types.js +1 -1
- package/bundle/dist/application/qgrid/conv-routing.js +9 -6
- package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
- package/bundle/dist/application/qgrid/oauth.js +31 -4
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
- package/bundle/dist/application/qgrid/qgrid-response-format.js +22 -20
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +43 -34
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
- package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
- package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
- package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
- package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
- package/bundle/dist/application/qgrid/token-death.js +1 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
- package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
- package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
- package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
- package/bundle/dist/application/request-log/request-log.model.js +83 -69
- package/bundle/dist/application/request-log/request-log.types.js +8 -2
- package/bundle/dist/application/request-log/zod-code-format.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
- package/bundle/dist/application/setting/setting.constant.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +2 -2
- package/bundle/dist/application/setting/setting.store.js +2 -2
- package/bundle/dist/application/setting/setting.types.js +1 -1
- package/bundle/dist/application/sonamu.generated.js +40 -16
- package/bundle/dist/application/sonamu.generated.sso.js +2 -1
- package/bundle/dist/application/token/token.model.js +26 -9
- package/bundle/dist/application/token/token.types.js +20 -3
- package/bundle/dist/i18n/en.js +15 -1
- package/bundle/dist/i18n/ko.js +15 -1
- package/bundle/dist/i18n/sd.generated.js +2 -1
- package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
- package/bundle/dist/migrations/20261018215031_alter_request_logs_add1_alter1.js +15 -0
- package/bundle/dist/server-bootstrap.js +4 -2
- package/bundle/dist/server-error-handler.js +1 -1
- package/bundle/dist/sonamu.config.js +37 -8
- package/bundle/dist/startup-migrations.js +17 -7
- package/bundle/dist/testing/global.js +1 -1
- package/bundle/dist/testing/schema-bench.js +0 -0
- package/bundle/dist/testing/test-database-name.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
- package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
- package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
- package/bundle/dist/utils/providers/common/credentials.js +5 -1
- package/bundle/dist/utils/providers/common/effort.js +3 -3
- package/bundle/dist/utils/providers/common/model-cost.js +69 -14
- package/bundle/dist/utils/providers/common/provider-types.js +29 -1
- package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
- package/bundle/dist/utils/providers/common/strictifier.js +62 -43
- package/bundle/dist/utils/providers/common/thinking.js +3 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -1
- package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
- package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
- package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
- package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
- package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
- package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
- package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
- package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
- package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
- package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
- package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
- package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
- package/bundle/dist/utils/providers/grok/index.js +11 -0
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
- package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
- package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
- package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
- package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
- package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
- package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
- package/bundle/dist/utils/quiet-hours.js +1 -1
- package/bundle/dist/utils/slack-notify.js +14 -8
- package/bundle/dist/utils/subset-loaders.js +4 -5
- package/bundle/src/application/monit/log-buffer.ts +23 -9
- package/bundle/src/application/monit/monit.frame.ts +22 -5
- package/bundle/src/application/monit/monit.types.ts +6 -0
- package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
- package/bundle/src/application/qgrid/conv-routing.ts +35 -9
- package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
- package/bundle/src/application/qgrid/oauth.ts +51 -15
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +33 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +87 -40
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
- package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
- package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
- package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
- package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
- package/bundle/src/application/qgrid/token-death.ts +4 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
- package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
- package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
- package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
- package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
- package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
- package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
- package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
- package/bundle/src/application/request-log/request-log.entity.json +8 -0
- package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
- package/bundle/src/application/request-log/request-log.model.ts +279 -145
- package/bundle/src/application/request-log/request-log.types.ts +17 -0
- package/bundle/src/application/request-log/zod-code-format.ts +11 -0
- package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
- package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
- package/bundle/src/application/setting/setting.constant.ts +9 -0
- package/bundle/src/application/setting/setting.model.ts +12 -2
- package/bundle/src/application/setting/setting.store.ts +5 -1
- package/bundle/src/application/setting/setting.types.ts +8 -0
- package/bundle/src/application/sonamu.generated.http +135 -0
- package/bundle/src/application/sonamu.generated.sso.ts +3 -0
- package/bundle/src/application/sonamu.generated.ts +29 -0
- package/bundle/src/application/token/token.identity.test.ts +20 -0
- package/bundle/src/application/token/token.model.ts +66 -7
- package/bundle/src/application/token/token.types.ts +24 -1
- package/bundle/src/i18n/en.ts +19 -0
- package/bundle/src/i18n/ko.ts +21 -0
- package/bundle/src/i18n/sd.generated.ts +24 -2
- package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
- package/bundle/src/migrations/20261018215031_alter_request_logs_add1_alter1.ts +15 -0
- package/bundle/src/server-bootstrap.ts +4 -2
- package/bundle/src/server-error-handler.ts +1 -0
- package/bundle/src/sonamu.config.ts +69 -7
- package/bundle/src/startup-migrations.ts +27 -9
- package/bundle/src/testing/global.ts +20 -0
- package/bundle/src/testing/schema-bench.ts +105 -30
- package/bundle/src/testing/test-database-name.ts +2 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
- package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
- package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
- package/bundle/src/utils/providers/common/credentials.ts +8 -0
- package/bundle/src/utils/providers/common/effort.ts +9 -2
- package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
- package/bundle/src/utils/providers/common/model-cost.ts +259 -158
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
- package/bundle/src/utils/providers/common/provider-types.ts +46 -3
- package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
- package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
- package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
- package/bundle/src/utils/providers/common/strictifier.ts +185 -59
- package/bundle/src/utils/providers/common/thinking.ts +2 -2
- package/bundle/src/utils/providers/common/ttft.ts +4 -2
- package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
- package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
- package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
- package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
- package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
- package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
- package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
- package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
- package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
- package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
- package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
- package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
- package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
- package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
- package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
- package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
- package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
- package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
- package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
- package/bundle/src/utils/providers/grok/index.ts +20 -0
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
- package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
- package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
- package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
- package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
- package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
- package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
- package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
- package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
- package/bundle/src/utils/quiet-hours.ts +12 -1
- package/bundle/src/utils/slack-notify.ts +44 -13
- package/bundle/src/utils/subset-loaders.ts +7 -7
- package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
- package/bundle/web-dist/client/assets/index-BA7uQ-6c.js +31 -0
- package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
- package/bundle/web-dist/client/assets/logs-C47OJGEI.js +1 -0
- package/bundle/web-dist/client/assets/monit-BS9no0dU.js +4 -0
- package/bundle/web-dist/client/assets/plus-sdACTfH0.js +1 -0
- package/bundle/web-dist/client/assets/refresh-cw-CY8o_1cT.js +1 -0
- package/bundle/web-dist/client/assets/request-model-BRtFuZvj.js +1 -0
- package/bundle/web-dist/client/assets/routes-kqgkUxE8.js +5 -0
- package/bundle/web-dist/client/assets/{services.generated-BsieU37H.js → services.generated-CefiDXEv.js} +5 -5
- package/bundle/web-dist/client/assets/settings-DNDvFGSw.js +1 -0
- package/bundle/web-dist/client/assets/show-u8Np69q3.js +2 -0
- package/bundle/web-dist/client/assets/tokens-QvP410NW.js +1 -0
- package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
- package/bundle/web-dist/client/assets/use-oauth-login-flow-Bzdh28Ws.js +1 -0
- package/bundle/web-dist/client/assets/use-update-token-mutation-CfJKaxmR.js +1 -0
- package/bundle/web-dist/client/assets/vendor-react-CUFFrVN9.js +244 -0
- package/bundle/web-dist/client/assets/vendor-tanstack-Bf_jag9G.js +1 -0
- package/bundle/web-dist/client/index.html +6 -6
- package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Dtd0NR4r.js → lazyRouteComponent-D8iTIHyn.js} +129 -2
- package/bundle/web-dist/server/assets/logs-B3OTd9hy.js +825 -0
- package/bundle/web-dist/server/assets/{monit-DvzribSE.js → monit-B2hqorPe.js} +385 -126
- package/bundle/web-dist/server/assets/plus-DwG7h9kq.js +28 -0
- package/bundle/web-dist/server/assets/{react-dom-B4a6-uuR.js → react-dom-BIYQzBqG.js} +2 -129
- package/bundle/web-dist/server/assets/refresh-cw-mMBkwOq0.js +44 -0
- package/bundle/web-dist/server/assets/{request-model-CbqfnQOJ.js → request-model-I6OdODSH.js} +15 -6
- package/bundle/web-dist/server/assets/{routes-BAPWTizT.js → routes-B95YlUv2.js} +760 -213
- package/bundle/web-dist/server/assets/{services.generated-CEbGjsI0.js → services.generated-DQATJ6qf.js} +12821 -12194
- package/bundle/web-dist/server/assets/settings-C3gbGk0m.js +830 -0
- package/bundle/web-dist/server/assets/{show-CxVZTAdv.js → show-Bxaj3rhH.js} +1355 -419
- package/bundle/web-dist/server/assets/tokens-CZjH3cB7.js +1038 -0
- package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
- package/bundle/web-dist/server/assets/use-oauth-login-flow-CKDHgc3U.js +2379 -0
- package/bundle/web-dist/server/assets/{use-update-token-mutation-CfYmk_4_.js → use-update-token-mutation-BEbgOzaa.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +4303 -22810
- package/dist/cli.js +9 -9
- package/package.json +4 -11
- package/postinstall.mjs +12 -0
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
- package/skills/qgrid/references/decision-rationale.md +24 -1
- package/skills/qgrid/references/grok-runtime.md +89 -0
- package/skills/qgrid/references/provider-runtime-differences.md +30 -29
- package/skills/qgrid/references/repo-map.md +10 -0
- package/skills/qgrid/references/request-log-run-lifecycle.md +1 -1
- package/skills/qgrid/references/sonamu-api-web-flow.md +1 -1
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
- package/bundle/dist/testing/setup-mocks.js +0 -16
- package/bundle/src/testing/setup-mocks.ts +0 -44
- package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
- package/bundle/web-dist/client/assets/index-CrXKu_J8.js +0 -106
- package/bundle/web-dist/client/assets/logs-B2SmWJXA.js +0 -1
- package/bundle/web-dist/client/assets/monit-D-JwXXoA.js +0 -1
- package/bundle/web-dist/client/assets/plus-B62CuqT8.js +0 -1
- package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +0 -1
- package/bundle/web-dist/client/assets/request-model-CojtinqK.js +0 -1
- package/bundle/web-dist/client/assets/routes-C5r4gTvY.js +0 -5
- package/bundle/web-dist/client/assets/settings-D3tDSAck.js +0 -1
- package/bundle/web-dist/client/assets/show-Cah_kUKC.js +0 -2
- package/bundle/web-dist/client/assets/tokens-DU2Iyxxd.js +0 -1
- package/bundle/web-dist/client/assets/use-oauth-login-flow-D0UaR9_e.js +0 -1
- package/bundle/web-dist/client/assets/use-update-token-mutation-DAq0F8p-.js +0 -1
- package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
- package/bundle/web-dist/client/assets/vendor-tanstack-DJRQAbrY.js +0 -1
- package/bundle/web-dist/server/assets/logs-l91avYif.js +0 -509
- package/bundle/web-dist/server/assets/plus-KZrECewT.js +0 -19
- package/bundle/web-dist/server/assets/refresh-cw-BND93JrF.js +0 -23
- package/bundle/web-dist/server/assets/settings-BZR5HSAL.js +0 -461
- package/bundle/web-dist/server/assets/tokens-D1hb4eKk.js +0 -448
- package/bundle/web-dist/server/assets/use-oauth-login-flow-Cvdy0zF8.js +0 -178
- package/dist/cli.d.ts +0 -10
- /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
- /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
import { monitLogSink } from "./application/monit/log-buffer.js";
|
|
2
|
+
import { REQUEST_BODY_LIMIT_BYTES } from "./application/qgrid/qgrid.types.js";
|
|
2
3
|
import { loadSettings, setSettingChangeHandler } from "./application/setting/setting.store.js";
|
|
3
4
|
import { OpenAIDispatcher } from "./utils/providers/openai/openai-dispatcher.js";
|
|
4
5
|
import { QgridDispatcher } from "./application/qgrid/qgrid.dispatcher.js";
|
|
5
6
|
import { rescheduleExpiredTokenReminder, startExpiredTokenReminder, stopExpiredTokenReminder } from "./application/qgrid/expired-token-reminder.js";
|
|
7
|
+
import { GrokRefreshCoordinator } from "./utils/providers/grok/grok-refresh.js";
|
|
8
|
+
import { GrokDispatcher } from "./utils/providers/grok/grok-dispatcher.js";
|
|
9
|
+
import "./utils/providers/grok/index.js";
|
|
10
|
+
import { GrokMediaClient } from "./utils/providers/grok/grok-media-client.js";
|
|
11
|
+
import { GrokVoiceClient } from "./utils/providers/grok/grok-voice-client.js";
|
|
6
12
|
import { stopOpenAICallbackRelay } from "./utils/providers/openai/openai-callback-relay.js";
|
|
7
|
-
import { QgridFrame } from "./application/qgrid/qgrid.frame.js";
|
|
13
|
+
import { QgridFrame, mapRequestBodyTooLarge, persistGrokCredentials } from "./application/qgrid/qgrid.frame.js";
|
|
8
14
|
import { TokenSubscriber } from "./application/qgrid/token-subscriber.js";
|
|
9
15
|
import { ensureTokensTrigger } from "./application/qgrid/token-trigger-setup.js";
|
|
10
16
|
import { rescheduleTokenWindowKeepalive, startTokenWindowKeepalive, stopTokenWindowKeepalive } from "./application/qgrid/token-window-keepalive.js";
|
|
11
17
|
import { handleServerError } from "./server-error-handler.js";
|
|
12
18
|
import { AnthropicDispatcher } from "./utils/providers/anthropic/anthropic-dispatcher.js";
|
|
19
|
+
import { z } from "zod";
|
|
13
20
|
import { CachePresets, defineConfig } from "sonamu";
|
|
14
21
|
import { getConsoleSink, getLogger } from "@logtape/logtape";
|
|
15
22
|
import { drivers, store } from "sonamu/cache";
|
|
16
23
|
import path from "path";
|
|
17
24
|
import { getPrettyFormatter } from "@logtape/pretty";
|
|
18
25
|
//#region src/sonamu.config.ts
|
|
26
|
+
const oauthCallbackQuerySchema = z.looseObject({
|
|
27
|
+
code: z.string().optional(),
|
|
28
|
+
state: z.string().optional()
|
|
29
|
+
});
|
|
19
30
|
const host = process.env.HOST ?? "localhost";
|
|
20
31
|
const port = Number(process.env.PORT ?? 44900);
|
|
21
32
|
const connConfig = {
|
|
@@ -79,7 +90,7 @@ var sonamu_config_default = defineConfig({
|
|
|
79
90
|
port,
|
|
80
91
|
host
|
|
81
92
|
},
|
|
82
|
-
fastify: { bodyLimit:
|
|
93
|
+
fastify: { bodyLimit: REQUEST_BODY_LIMIT_BYTES },
|
|
83
94
|
plugins: {
|
|
84
95
|
formbody: true,
|
|
85
96
|
qs: true,
|
|
@@ -91,7 +102,7 @@ var sonamu_config_default = defineConfig({
|
|
|
91
102
|
},
|
|
92
103
|
custom: (server) => {
|
|
93
104
|
const oauthCallback = async (request, reply) => {
|
|
94
|
-
const { code, state } = request.query;
|
|
105
|
+
const { code, state } = oauthCallbackQuerySchema.safeParse(request.query).data ?? {};
|
|
95
106
|
if (!code || !state) return reply.redirect("/?oauth=error&reason=missing_params");
|
|
96
107
|
try {
|
|
97
108
|
return QgridFrame.handleOAuthCallback(code, state, reply);
|
|
@@ -136,7 +147,7 @@ var sonamu_config_default = defineConfig({
|
|
|
136
147
|
await ensureTokensTrigger(connConfig);
|
|
137
148
|
} catch (e) {
|
|
138
149
|
triggerReady = false;
|
|
139
|
-
log.warn(`trigger setup failed: ${e.message}`);
|
|
150
|
+
log.warn(`trigger setup failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
140
151
|
}
|
|
141
152
|
const subscriber = new TokenSubscriber(connConfig, QgridDispatcher);
|
|
142
153
|
QgridDispatcher.subscriber = subscriber;
|
|
@@ -148,7 +159,7 @@ var sonamu_config_default = defineConfig({
|
|
|
148
159
|
QgridDispatcher.startupState.openai = "ready";
|
|
149
160
|
} catch (e) {
|
|
150
161
|
QgridDispatcher.startupState.openai = "failed";
|
|
151
|
-
log.warn(`openai dispatcher failed: ${e.message}`);
|
|
162
|
+
log.warn(`openai dispatcher failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
152
163
|
}
|
|
153
164
|
try {
|
|
154
165
|
const anthropicDispatcher = new AnthropicDispatcher();
|
|
@@ -157,7 +168,23 @@ var sonamu_config_default = defineConfig({
|
|
|
157
168
|
QgridDispatcher.startupState.anthropic = "ready";
|
|
158
169
|
} catch (e) {
|
|
159
170
|
QgridDispatcher.startupState.anthropic = "failed";
|
|
160
|
-
log.warn(`anthropic dispatcher failed: ${e.message}`);
|
|
171
|
+
log.warn(`anthropic dispatcher failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
const grokRefresher = new GrokRefreshCoordinator({ persist: persistGrokCredentials });
|
|
175
|
+
const grokDispatcher = new GrokDispatcher({
|
|
176
|
+
refresher: grokRefresher,
|
|
177
|
+
media: new GrokMediaClient(),
|
|
178
|
+
voice: new GrokVoiceClient()
|
|
179
|
+
});
|
|
180
|
+
await grokDispatcher.start();
|
|
181
|
+
QgridFrame.grokRefresher = grokRefresher;
|
|
182
|
+
QgridDispatcher.grokDispatcher = grokDispatcher;
|
|
183
|
+
QgridDispatcher.startupState.grok = "ready";
|
|
184
|
+
await subscriber.reconcile().catch((e) => log.warn(`grok initial reconcile failed: ${e instanceof Error ? e.message : String(e)}`));
|
|
185
|
+
} catch (e) {
|
|
186
|
+
QgridDispatcher.startupState.grok = "failed";
|
|
187
|
+
log.warn(`grok dispatcher failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
161
188
|
}
|
|
162
189
|
subscriber.tokenChangeHandler = () => {
|
|
163
190
|
rescheduleTokenWindowKeepalive();
|
|
@@ -180,11 +207,13 @@ var sonamu_config_default = defineConfig({
|
|
|
180
207
|
if (QgridDispatcher.subscriber) QgridDispatcher.subscriber.tokenChangeHandler = null;
|
|
181
208
|
if (QgridDispatcher.openaiDispatcher) await QgridDispatcher.openaiDispatcher.stop();
|
|
182
209
|
if (QgridDispatcher.anthropicDispatcher) await QgridDispatcher.anthropicDispatcher.stop();
|
|
210
|
+
const grokDispatcher = QgridDispatcher.grokDispatcher;
|
|
211
|
+
if (grokDispatcher instanceof GrokDispatcher) await grokDispatcher.stop();
|
|
183
212
|
if (QgridDispatcher.subscriber) await QgridDispatcher.subscriber.stop();
|
|
184
213
|
log.info("graceful shutdown");
|
|
185
214
|
},
|
|
186
215
|
onError: (error, _request, reply) => {
|
|
187
|
-
handleServerError(error, reply);
|
|
216
|
+
handleServerError(mapRequestBodyTooLarge(error), reply);
|
|
188
217
|
}
|
|
189
218
|
}
|
|
190
219
|
}
|
|
@@ -192,4 +221,4 @@ var sonamu_config_default = defineConfig({
|
|
|
192
221
|
//#endregion
|
|
193
222
|
export { sonamu_config_default as default };
|
|
194
223
|
|
|
195
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmNvbmZpZy5qcyIsIm5hbWVzIjpbImNhY2hlRHJpdmVycyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zb25hbXUuY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGdldENvbnNvbGVTaW5rIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXRQcmV0dHlGb3JtYXR0ZXIgfSBmcm9tIFwiQGxvZ3RhcGUvcHJldHR5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBDYWNoZVByZXNldHMsIGRlZmluZUNvbmZpZyB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGRyaXZlcnMgYXMgY2FjaGVEcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHsgbW9uaXRMb2dTaW5rIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vbW9uaXQvbG9nLWJ1ZmZlclwiO1xuaW1wb3J0IHtcbiAgcmVzY2hlZHVsZUV4cGlyZWRUb2tlblJlbWluZGVyLFxuICBzdGFydEV4cGlyZWRUb2tlblJlbWluZGVyLFxuICBzdG9wRXhwaXJlZFRva2VuUmVtaW5kZXIsXG59IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL2V4cGlyZWQtdG9rZW4tcmVtaW5kZXJcIjtcbmltcG9ydCB7IFFncmlkRGlzcGF0Y2hlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IFFncmlkRnJhbWUgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5mcmFtZVwiO1xuaW1wb3J0IHsgVG9rZW5TdWJzY3JpYmVyIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlclwiO1xuaW1wb3J0IHsgZW5zdXJlVG9rZW5zVHJpZ2dlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLXRyaWdnZXItc2V0dXBcIjtcbmltcG9ydCB7XG4gIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZSxcbiAgc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZSxcbiAgc3RvcFRva2VuV2luZG93S2VlcGFsaXZlLFxufSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC90b2tlbi13aW5kb3cta2VlcGFsaXZlXCI7XG5pbXBvcnQgeyBsb2FkU2V0dGluZ3MsIHNldFNldHRpbmdDaGFuZ2VIYW5kbGVyIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnN0b3JlXCI7XG5pbXBvcnQgeyBoYW5kbGVTZXJ2ZXJFcnJvciB9IGZyb20gXCIuL3NlcnZlci1lcnJvci1oYW5kbGVyXCI7XG5pbXBvcnQgeyBBbnRocm9waWNEaXNwYXRjaGVyIH0gZnJvbSBcIi4vdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9hbnRocm9waWMtZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgc3RvcE9wZW5BSUNhbGxiYWNrUmVsYXkgfSBmcm9tIFwiLi91dGlscy9wcm92aWRlcnMvb3BlbmFpL29wZW5haS1jYWxsYmFjay1yZWxheVwiO1xuaW1wb3J0IHsgT3BlbkFJRGlzcGF0Y2hlciB9IGZyb20gXCIuL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWRpc3BhdGNoZXJcIjtcblxuY29uc3QgaG9zdCA9IHByb2Nlc3MuZW52LkhPU1QgPz8gXCJsb2NhbGhvc3RcIjtcbmNvbnN0IHBvcnQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCA/PyA0NDkwMCk7XG5cbmNvbnN0IGNvbm5Db25maWcgPSB7XG4gIGhvc3Q6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9IT1NUID8/IFwibG9jYWxob3N0XCIsXG4gIHBvcnQ6IE51bWJlcihwcm9jZXNzLmVudi5TT05BTVVfREJfUE9SVCA/PyA1NDMyKSxcbiAgdXNlcjogcHJvY2Vzcy5lbnYuU09OQU1VX0RCX1VTRVIgPz8gXCJwb3N0Z3Jlc1wiLFxuICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuU09OQU1VX0RCX1BBU1NXT1JEID8/IFwicG9zdGdyZXNcIixcbiAgZGF0YWJhc2U6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9OQU1FID8/IFwicWdyaWRcIixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHByb2plY3ROYW1lOiBwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgPz8gXCJRZ3JpZFwiLFxuICBkYXRhYmFzZToge1xuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLmNvbm5Db25maWcsXG4gICAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzOiAxMDAwMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgYXBpOiB7XG4gICAgZGlyOiBcImFwaVwiLFxuICAgIHRpbWV6b25lOiBcIkFzaWEvU2VvdWxcIixcbiAgICByb3V0ZToge1xuICAgICAgcHJlZml4OiBcIi9hcGlcIixcbiAgICB9LFxuICB9LFxuICBpMThuOiB7XG4gICAgZGVmYXVsdExvY2FsZTogXCJrb1wiLFxuICAgIHN1cHBvcnRlZExvY2FsZXM6IFtcImtvXCIsIFwiZW5cIl0sXG4gIH0sXG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBbXCJ3ZWJcIl0sXG4gIH0sXG4gIHRlc3Q6IHtcbiAgICBwYXJhbGxlbDogdHJ1ZSxcbiAgICBtYXhXb3JrZXJzOiA0LFxuICAgIGRldlJ1bm5lcjogeyBlbmFibGVkOiB0cnVlIH0sXG4gIH0sXG4gIGxvZ2dpbmc6IHtcbiAgICBzaW5rczoge1xuICAgICAgY29uc29sZTogZ2V0Q29uc29sZVNpbmsoe1xuICAgICAgICBmb3JtYXR0ZXI6IGdldFByZXR0eUZvcm1hdHRlcih7XG4gICAgICAgICAgdGltZXN0YW1wOiBcInRpbWVcIixcbiAgICAgICAgICBjYXRlZ29yeVdpZHRoOiAyMCxcbiAgICAgICAgICBjYXRlZ29yeVRydW5jYXRlOiBcIm1pZGRsZVwiLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICAgLy8gTW9uaXQg7YOt7JqpIGluLW1lbW9yeSByaW5nIGJ1ZmZlci4g7Y+s66e37J2AIHNpbmsg67OEIOKAlCDsvZjshpQg7Lac66Cl7J2AIOq3uOuMgOuhnOuLpC5cbiAgICAgIG1vbml0OiBtb25pdExvZ1NpbmssXG4gICAgfSxcbiAgICBsb2dnZXJzOiBbXG4gICAgICAvLyBxZ3JpZCDroZzqt7ggKOyalOyyrSDrtoTrsLAsIG9hdXRoL3VzYWdlIEFQSSlcbiAgICAgIHsgY2F0ZWdvcnk6IFtcInFncmlkXCJdLCBzaW5rczogW1wiY29uc29sZVwiLCBcIm1vbml0XCJdLCBsb3dlc3RMZXZlbDogXCJpbmZvXCIgfSxcbiAgICAgIC8vIHNvbmFtdSDroZzqt7jripQgd2FybmluZyDsnbTsg4Hrp4xcbiAgICAgIHsgY2F0ZWdvcnk6IFtcInNvbmFtdVwiXSwgc2lua3M6IFtcImNvbnNvbGVcIiwgXCJtb25pdFwiXSwgbG93ZXN0TGV2ZWw6IFwid2FybmluZ1wiIH0sXG4gICAgICAvLyBmYXN0aWZ5IOuhnOq3uCDssKjri6hcbiAgICAgIHsgY2F0ZWdvcnk6IFtcImZhc3RpZnlcIl0sIHNpbmtzOiBbXSwgbG93ZXN0TGV2ZWw6IFwiZmF0YWxcIiB9LFxuICAgIF0sXG4gIH0sXG4gIHNlcnZlcjoge1xuICAgIGxpc3RlbjogeyBwb3J0LCBob3N0IH0sXG4gICAgZmFzdGlmeToge1xuICAgICAgYm9keUxpbWl0OiAxMCAqIDEwMjQgKiAxMDI0LFxuICAgIH0sXG4gICAgcGx1Z2luczoge1xuICAgICAgZm9ybWJvZHk6IHRydWUsXG4gICAgICBxczogdHJ1ZSxcbiAgICAgIHNzZTogdHJ1ZSxcbiAgICAgIG11bHRpcGFydDogeyBsaW1pdHM6IHsgZmlsZVNpemU6IDEwMjQgKiAxMDI0ICogMzAgfSB9LFxuICAgICAgc3RhdGljOiB7XG4gICAgICAgIHJvb3Q6IHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi8uLi9cIiwgXCJwdWJsaWNcIiksXG4gICAgICAgIHByZWZpeDogXCIvYXBpL3B1YmxpY1wiLFxuICAgICAgfSxcbiAgICAgIGN1c3RvbTogKHNlcnZlcikgPT4ge1xuICAgICAgICBjb25zdCBvYXV0aENhbGxiYWNrID0gYXN5bmMgKHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBzdGF0ZSB9ID0gcmVxdWVzdC5xdWVyeSBhcyB7IGNvZGU/OiBzdHJpbmc7IHN0YXRlPzogc3RyaW5nIH07XG4gICAgICAgICAgaWYgKCFjb2RlIHx8ICFzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KFwiLz9vYXV0aD1lcnJvciZyZWFzb249bWlzc2luZ19wYXJhbXNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUWdyaWRGcmFtZS5oYW5kbGVPQXV0aENhbGxiYWNrKGNvZGUsIHN0YXRlLCByZXBseSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1jYWxsYmFja19mYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXJ2ZXIuZ2V0KFwiL2NhbGxiYWNrXCIsIG9hdXRoQ2FsbGJhY2spO1xuICAgICAgICBzZXJ2ZXIuZ2V0KFwiL2F1dGgvY2FsbGJhY2tcIiwgb2F1dGhDYWxsYmFjayk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgYXBpQ29uZmlnOiB7XG4gICAgICBjb250ZXh0UHJvdmlkZXI6IChkZWZhdWx0Q29udGV4dCwgcmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlZmF1bHRDb250ZXh0LFxuICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBndWFyZEhhbmRsZXI6ICgpID0+IHt9LFxuICAgICAgY2FjaGVDb250cm9sSGFuZGxlcjogKHJlcSkgPT4ge1xuICAgICAgICBpZiAocmVxLnR5cGUgPT09IFwiYXBpXCIpIHJldHVybiBDYWNoZVByZXNldHMubm9DYWNoZTtcbiAgICAgICAgaWYgKHJlcS50eXBlID09PSBcImNzclwiKSByZXR1cm4gQ2FjaGVQcmVzZXRzLnNob3J0TGl2ZWQ7XG4gICAgICAgIC8vIFNvbmFtdSBzZXJ2ZXMgZmluZ2VycHJpbnRlZCBhc3NldHMgd2l0aCBpdHMgZGVmYXVsdCBpbW11dGFibGUgcG9saWN5LlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNhY2hlOiB7XG4gICAgICBkZWZhdWx0OiBcIm1haW5cIixcbiAgICAgIHN0b3Jlczoge1xuICAgICAgICBtYWluOiBzdG9yZSgpLnVzZUwxTGF5ZXIoY2FjaGVEcml2ZXJzLm1lbW9yeSh7IG1heFNpemU6IFwiNTBtYlwiIH0pKSxcbiAgICAgIH0sXG4gICAgICB0dGw6IFwiNW1cIixcbiAgICAgIHByZWZpeDogXCJcIixcbiAgICB9LFxuICAgIGxpZmVjeWNsZToge1xuICAgICAgb25TdGFydDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBsb2cgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzdGFydHVwXCJdKTtcblxuICAgICAgICAvLyBkaXNwYXRjaGVyIOqwgCDsg53shLHsnpDsl5DshJwg7JuM7LukIOyEpOygleydhCDsnb3snLzrr4DroZwg6re4IOyghOyXkCDsmKzroKTslbwg7ZWc64ukLlxuICAgICAgICBhd2FpdCBsb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgLy8g65+w7YOA7J6EIOyEpOyglSDshozruYTsnpDrpbwg7IOB7JyEIOqzhOy4teyXkOyEnCDsl7DqsrDtlbQgc2V0dGluZyDrqqjrk4jsnbQgcWdyaWQg66W8IOyXreywuOyhsO2VmOyngCDslYrqsowg7ZWc64ukLlxuICAgICAgICBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcigoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJzbGFjay5leHBpcnlSZW1pbmRlck1pbnV0ZXNcIiB8fCBrZXkgPT09IFwic2xhY2sucmVtaW5kZXJzRW5hYmxlZFwiKSB7XG4gICAgICAgICAgICByZXNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIikge1xuICAgICAgICAgICAgdm9pZCByZXNjaGVkdWxlVG9rZW5XaW5kb3dLZWVwYWxpdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB0cmlnZ2VyUmVhZHkgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGVuc3VyZVRva2Vuc1RyaWdnZXIoY29ubkNvbmZpZyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cmlnZ2VyUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICBsb2cud2FybihgdHJpZ2dlciBzZXR1cCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gbmV3IFRva2VuU3Vic2NyaWJlcihjb25uQ29uZmlnLCBRZ3JpZERpc3BhdGNoZXIpO1xuICAgICAgICBRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRlZCA9IGF3YWl0IHN1YnNjcmliZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyDquLDrj5kg7IOB7YOc66W8IOuCqOq4tOuLpCDigJQgSFRUUCDripQg7J2066+4IOyXtOugpCDsnojslrTshJwsIOykgOu5hCDsoIQg7JqU7LKt7J20IFwi7J6g7IucIO2bhCDrkJjripTsp4BcIlxuICAgICAgICAvLyBcIuyerOyLnOuPhO2VtOuPhCDslYgg65CY64qU7KeAXCLrpbwg6rWs67aE7ZW0IOydkeuLte2VtOyVvCDtlZzri6QoNTAzIHZzIDUwMCkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3BlbmFpRGlzcGF0Y2hlciA9IG5ldyBPcGVuQUlEaXNwYXRjaGVyKCk7XG4gICAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlci5zdGFydCgpO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyID0gb3BlbmFpRGlzcGF0Y2hlcjtcbiAgICAgICAgICBRZ3JpZERpc3BhdGNoZXIuc3RhcnR1cFN0YXRlLm9wZW5haSA9IFwicmVhZHlcIjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5zdGFydHVwU3RhdGUub3BlbmFpID0gXCJmYWlsZWRcIjtcbiAgICAgICAgICBsb2cud2Fybihgb3BlbmFpIGRpc3BhdGNoZXIgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhbnRocm9waWNEaXNwYXRjaGVyID0gbmV3IEFudGhyb3BpY0Rpc3BhdGNoZXIoKTtcbiAgICAgICAgICBhd2FpdCBhbnRocm9waWNEaXNwYXRjaGVyLnN0YXJ0KCk7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIgPSBhbnRocm9waWNEaXNwYXRjaGVyO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5zdGFydHVwU3RhdGUuYW50aHJvcGljID0gXCJyZWFkeVwiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN0YXJ0dXBTdGF0ZS5hbnRocm9waWMgPSBcImZhaWxlZFwiO1xuICAgICAgICAgIGxvZy53YXJuKGBhbnRocm9waWMgZGlzcGF0Y2hlciBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpYmVyLnRva2VuQ2hhbmdlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICB2b2lkIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZSgpO1xuICAgICAgICB9O1xuICAgICAgICBzdGFydEV4cGlyZWRUb2tlblJlbWluZGVyKCk7XG4gICAgICAgIHZvaWQgc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZSgpO1xuXG4gICAgICAgIGNvbnN0IGFudGhyb3BpY0NvdW50ID0gUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/LnRva2VuUG9vbC5zaXplID8/IDA7XG4gICAgICAgIGNvbnN0IG9wZW5haUNvdW50ID0gUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LmNvdW50QWN0aXZlVG9rZW5zKCkgPz8gMDtcblxuICAgICAgICBsb2cuaW5mbyhgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgICAgICAgbG9nLmluZm8oYGFudGhyb3BpYzogJHthbnRocm9waWNDb3VudH0gdG9rZW5zIHJlYWR5YCk7XG4gICAgICAgIGxvZy5pbmZvKGBvcGVuYWk6ICR7b3BlbmFpQ291bnR9IHRva2VucyByZWFkeWApO1xuICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICBgc3Vic2NyaWJlcjogJHtzdGFydGVkID8gXCJMSVNURU4gYWN0aXZlXCIgOiBcImRlZ3JhZGVkXCJ9JHt0cmlnZ2VyUmVhZHkgPyBcIlwiIDogXCIsIHRyaWdnZXIgZmFpbGVkXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblNodXRkb3duOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInN0YXJ0dXBcIl0pO1xuICAgICAgICBzdG9wRXhwaXJlZFRva2VuUmVtaW5kZXIoKTtcbiAgICAgICAgc3RvcFRva2VuV2luZG93S2VlcGFsaXZlKCk7XG4gICAgICAgIHN0b3BPcGVuQUlDYWxsYmFja1JlbGF5KCk7XG4gICAgICAgIHNldFNldHRpbmdDaGFuZ2VIYW5kbGVyKG51bGwpO1xuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIpIFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyLnRva2VuQ2hhbmdlSGFuZGxlciA9IG51bGw7XG4gICAgICAgIGlmIChRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcikge1xuICAgICAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlci5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyKSB7XG4gICAgICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKFwiZ3JhY2VmdWwgc2h1dGRvd25cIik7XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogKGVycm9yLCBfcmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgaGFuZGxlU2VydmVyRXJyb3IoZXJyb3IsIHJlcGx5KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsTUFBTSxPQUFPLFFBQVEsSUFBSSxRQUFRO0FBQ2pDLE1BQU0s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
|
|
224
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmNvbmZpZy5qcyIsIm5hbWVzIjpbImNhY2hlRHJpdmVycyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zb25hbXUuY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGdldENvbnNvbGVTaW5rIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXRQcmV0dHlGb3JtYXR0ZXIgfSBmcm9tIFwiQGxvZ3RhcGUvcHJldHR5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBDYWNoZVByZXNldHMsIGRlZmluZUNvbmZpZyB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGRyaXZlcnMgYXMgY2FjaGVEcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IG1vbml0TG9nU2luayB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL21vbml0L2xvZy1idWZmZXJcIjtcbmltcG9ydCB7XG4gIHJlc2NoZWR1bGVFeHBpcmVkVG9rZW5SZW1pbmRlcixcbiAgc3RhcnRFeHBpcmVkVG9rZW5SZW1pbmRlcixcbiAgc3RvcEV4cGlyZWRUb2tlblJlbWluZGVyLFxufSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9leHBpcmVkLXRva2VuLXJlbWluZGVyXCI7XG5pbXBvcnQgeyBRZ3JpZERpc3BhdGNoZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQge1xuICBtYXBSZXF1ZXN0Qm9keVRvb0xhcmdlLFxuICBwZXJzaXN0R3Jva0NyZWRlbnRpYWxzLFxuICBRZ3JpZEZyYW1lLFxufSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5mcmFtZVwiO1xuaW1wb3J0IHsgUkVRVUVTVF9CT0RZX0xJTUlUX0JZVEVTIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IFRva2VuU3Vic2NyaWJlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLXN1YnNjcmliZXJcIjtcbmltcG9ydCB7IGVuc3VyZVRva2Vuc1RyaWdnZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC90b2tlbi10cmlnZ2VyLXNldHVwXCI7XG5pbXBvcnQge1xuICByZXNjaGVkdWxlVG9rZW5XaW5kb3dLZWVwYWxpdmUsXG4gIHN0YXJ0VG9rZW5XaW5kb3dLZWVwYWxpdmUsXG4gIHN0b3BUb2tlbldpbmRvd0tlZXBhbGl2ZSxcbn0gZnJvbSBcIi4vYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZVwiO1xuaW1wb3J0IHsgbG9hZFNldHRpbmdzLCBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3NldHRpbmcvc2V0dGluZy5zdG9yZVwiO1xuaW1wb3J0IHsgaGFuZGxlU2VydmVyRXJyb3IgfSBmcm9tIFwiLi9zZXJ2ZXItZXJyb3ItaGFuZGxlclwiO1xuaW1wb3J0IHsgQW50aHJvcGljRGlzcGF0Y2hlciB9IGZyb20gXCIuL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IEdyb2tEaXNwYXRjaGVyLCBHcm9rUmVmcmVzaENvb3JkaW5hdG9yIH0gZnJvbSBcIi4vdXRpbHMvcHJvdmlkZXJzL2dyb2tcIjtcbmltcG9ydCB7IEdyb2tNZWRpYUNsaWVudCB9IGZyb20gXCIuL3V0aWxzL3Byb3ZpZGVycy9ncm9rL2dyb2stbWVkaWEtY2xpZW50XCI7XG5pbXBvcnQgeyBHcm9rVm9pY2VDbGllbnQgfSBmcm9tIFwiLi91dGlscy9wcm92aWRlcnMvZ3Jvay9ncm9rLXZvaWNlLWNsaWVudFwiO1xuaW1wb3J0IHsgc3RvcE9wZW5BSUNhbGxiYWNrUmVsYXkgfSBmcm9tIFwiLi91dGlscy9wcm92aWRlcnMvb3BlbmFpL29wZW5haS1jYWxsYmFjay1yZWxheVwiO1xuaW1wb3J0IHsgT3BlbkFJRGlzcGF0Y2hlciB9IGZyb20gXCIuL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWRpc3BhdGNoZXJcIjtcblxuLy8gUmVwZWF0ZWQgcXVlcnkga2V5cyBhcnJpdmUgYXMgYXJyYXlzOyB0aGUgY2FsbGJhY2sgdGhlbiB0cmVhdHMgdGhlIHJlcXVlc3QgYXMgbWlzc2luZyBwYXJhbXMuXG5jb25zdCBvYXV0aENhbGxiYWNrUXVlcnlTY2hlbWEgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IGhvc3QgPSBwcm9jZXNzLmVudi5IT1NUID8/IFwibG9jYWxob3N0XCI7XG5jb25zdCBwb3J0ID0gTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQgPz8gNDQ5MDApO1xuXG5jb25zdCBjb25uQ29uZmlnID0ge1xuICBob3N0OiBwcm9jZXNzLmVudi5TT05BTVVfREJfSE9TVCA/PyBcImxvY2FsaG9zdFwiLFxuICBwb3J0OiBOdW1iZXIocHJvY2Vzcy5lbnYuU09OQU1VX0RCX1BPUlQgPz8gNTQzMiksXG4gIHVzZXI6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9VU0VSID8/IFwicG9zdGdyZXNcIixcbiAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9QQVNTV09SRCA/PyBcInBvc3RncmVzXCIsXG4gIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5TT05BTVVfREJfTkFNRSA/PyBcInFncmlkXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwcm9qZWN0TmFtZTogcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FID8/IFwiUWdyaWRcIixcbiAgZGF0YWJhc2U6IHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi5jb25uQ29uZmlnLFxuICAgICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICAgIGtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpczogMTAwMDAsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGFwaToge1xuICAgIGRpcjogXCJhcGlcIixcbiAgICB0aW1lem9uZTogXCJBc2lhL1Nlb3VsXCIsXG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogXCIvYXBpXCIsXG4gICAgfSxcbiAgfSxcbiAgaTE4bjoge1xuICAgIGRlZmF1bHRMb2NhbGU6IFwia29cIixcbiAgICBzdXBwb3J0ZWRMb2NhbGVzOiBbXCJrb1wiLCBcImVuXCJdLFxuICB9LFxuICBzeW5jOiB7XG4gICAgdGFyZ2V0czogW1wid2ViXCJdLFxuICB9LFxuICB0ZXN0OiB7XG4gICAgcGFyYWxsZWw6IHRydWUsXG4gICAgbWF4V29ya2VyczogNCxcbiAgICBkZXZSdW5uZXI6IHsgZW5hYmxlZDogdHJ1ZSB9LFxuICB9LFxuICBsb2dnaW5nOiB7XG4gICAgc2lua3M6IHtcbiAgICAgIGNvbnNvbGU6IGdldENvbnNvbGVTaW5rKHtcbiAgICAgICAgZm9ybWF0dGVyOiBnZXRQcmV0dHlGb3JtYXR0ZXIoe1xuICAgICAgICAgIHRpbWVzdGFtcDogXCJ0aW1lXCIsXG4gICAgICAgICAgY2F0ZWdvcnlXaWR0aDogMjAsXG4gICAgICAgICAgY2F0ZWdvcnlUcnVuY2F0ZTogXCJtaWRkbGVcIixcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICAgIC8vIE1vbml0IO2DreyaqSBpbi1tZW1vcnkgcmluZyBidWZmZXIuIO2PrOunt+ydgCBzaW5rIOuzhCDigJQg7L2Y7IaUIOy2nOugpeydgCDqt7jrjIDroZzri6QuXG4gICAgICBtb25pdDogbW9uaXRMb2dTaW5rLFxuICAgIH0sXG4gICAgbG9nZ2VyczogW1xuICAgICAgLy8gcWdyaWQg66Gc6re4ICjsmpTssq0g67aE67CwLCBvYXV0aC91c2FnZSBBUEkpXG4gICAgICB7IGNhdGVnb3J5OiBbXCJxZ3JpZFwiXSwgc2lua3M6IFtcImNvbnNvbGVcIiwgXCJtb25pdFwiXSwgbG93ZXN0TGV2ZWw6IFwiaW5mb1wiIH0sXG4gICAgICAvLyBzb25hbXUg66Gc6re464qUIHdhcm5pbmcg7J207IOB66eMXG4gICAgICB7IGNhdGVnb3J5OiBbXCJzb25hbXVcIl0sIHNpbmtzOiBbXCJjb25zb2xlXCIsIFwibW9uaXRcIl0sIGxvd2VzdExldmVsOiBcIndhcm5pbmdcIiB9LFxuICAgICAgLy8gZmFzdGlmeSDroZzqt7gg7LCo64uoXG4gICAgICB7IGNhdGVnb3J5OiBbXCJmYXN0aWZ5XCJdLCBzaW5rczogW10sIGxvd2VzdExldmVsOiBcImZhdGFsXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZXJ2ZXI6IHtcbiAgICBsaXN0ZW46IHsgcG9ydCwgaG9zdCB9LFxuICAgIGZhc3RpZnk6IHtcbiAgICAgIC8vIEdyb2sgbWVkaWEgaW5wdXQgbGltaXRzIGFyZSBkZXJpdmVkIGZyb20gdGhpczsgc2VlIE1FRElBX01BWF9JTkxJTkVfQllURVMuXG4gICAgICBib2R5TGltaXQ6IFJFUVVFU1RfQk9EWV9MSU1JVF9CWVRFUyxcbiAgICB9LFxuICAgIHBsdWdpbnM6IHtcbiAgICAgIGZvcm1ib2R5OiB0cnVlLFxuICAgICAgcXM6IHRydWUsXG4gICAgICBzc2U6IHRydWUsXG4gICAgICBtdWx0aXBhcnQ6IHsgbGltaXRzOiB7IGZpbGVTaXplOiAxMDI0ICogMTAyNCAqIDMwIH0gfSxcbiAgICAgIHN0YXRpYzoge1xuICAgICAgICByb290OiBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIvLi4vXCIsIFwicHVibGljXCIpLFxuICAgICAgICBwcmVmaXg6IFwiL2FwaS9wdWJsaWNcIixcbiAgICAgIH0sXG4gICAgICBjdXN0b206IChzZXJ2ZXIpID0+IHtcbiAgICAgICAgY29uc3Qgb2F1dGhDYWxsYmFjayA9IGFzeW5jIChyZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgc3RhdGUgfSA9IG9hdXRoQ2FsbGJhY2tRdWVyeVNjaGVtYS5zYWZlUGFyc2UocmVxdWVzdC5xdWVyeSkuZGF0YSA/PyB7fTtcblxuICAgICAgICAgIGlmICghY29kZSB8fCAhc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChcIi8/b2F1dGg9ZXJyb3ImcmVhc29uPW1pc3NpbmdfcGFyYW1zXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gUWdyaWRGcmFtZS5oYW5kbGVPQXV0aENhbGxiYWNrKGNvZGUsIHN0YXRlLCByZXBseSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1jYWxsYmFja19mYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlcnZlci5nZXQoXCIvY2FsbGJhY2tcIiwgb2F1dGhDYWxsYmFjayk7XG4gICAgICAgIHNlcnZlci5nZXQoXCIvYXV0aC9jYWxsYmFja1wiLCBvYXV0aENhbGxiYWNrKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhcGlDb25maWc6IHtcbiAgICAgIGNvbnRleHRQcm92aWRlcjogKGRlZmF1bHRDb250ZXh0LCByZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENvbnRleHQsXG4gICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGd1YXJkSGFuZGxlcjogKCkgPT4ge30sXG4gICAgICBjYWNoZUNvbnRyb2xIYW5kbGVyOiAocmVxKSA9PiB7XG4gICAgICAgIGlmIChyZXEudHlwZSA9PT0gXCJhcGlcIikgcmV0dXJuIENhY2hlUHJlc2V0cy5ub0NhY2hlO1xuXG4gICAgICAgIGlmIChyZXEudHlwZSA9PT0gXCJjc3JcIikgcmV0dXJuIENhY2hlUHJlc2V0cy5zaG9ydExpdmVkO1xuXG4gICAgICAgIC8vIFNvbmFtdSBzZXJ2ZXMgZmluZ2VycHJpbnRlZCBhc3NldHMgd2l0aCBpdHMgZGVmYXVsdCBpbW11dGFibGUgcG9saWN5LlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNhY2hlOiB7XG4gICAgICBkZWZhdWx0OiBcIm1haW5cIixcbiAgICAgIHN0b3Jlczoge1xuICAgICAgICBtYWluOiBzdG9yZSgpLnVzZUwxTGF5ZXIoY2FjaGVEcml2ZXJzLm1lbW9yeSh7IG1heFNpemU6IFwiNTBtYlwiIH0pKSxcbiAgICAgIH0sXG4gICAgICB0dGw6IFwiNW1cIixcbiAgICAgIHByZWZpeDogXCJcIixcbiAgICB9LFxuICAgIGxpZmVjeWNsZToge1xuICAgICAgb25TdGFydDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBsb2cgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzdGFydHVwXCJdKTtcblxuICAgICAgICAvLyBkaXNwYXRjaGVyIOqwgCDsg53shLHsnpDsl5DshJwg7JuM7LukIOyEpOygleydhCDsnb3snLzrr4DroZwg6re4IOyghOyXkCDsmKzroKTslbwg7ZWc64ukLlxuICAgICAgICBhd2FpdCBsb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgLy8g65+w7YOA7J6EIOyEpOyglSDshozruYTsnpDrpbwg7IOB7JyEIOqzhOy4teyXkOyEnCDsl7DqsrDtlbQgc2V0dGluZyDrqqjrk4jsnbQgcWdyaWQg66W8IOyXreywuOyhsO2VmOyngCDslYrqsowg7ZWc64ukLlxuICAgICAgICBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcigoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJzbGFjay5leHBpcnlSZW1pbmRlck1pbnV0ZXNcIiB8fCBrZXkgPT09IFwic2xhY2sucmVtaW5kZXJzRW5hYmxlZFwiKSB7XG4gICAgICAgICAgICByZXNjaGVkdWxlRXhwaXJlZFRva2VuUmVtaW5kZXIoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa2V5ID09PSBcInFncmlkLnRva2VuV2luZG93S2VlcGFsaXZlRW5hYmxlZFwiKSB7XG4gICAgICAgICAgICB2b2lkIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHRyaWdnZXJSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlbnN1cmVUb2tlbnNUcmlnZ2VyKGNvbm5Db25maWcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJpZ2dlclJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgbG9nLndhcm4oYHRyaWdnZXIgc2V0dXAgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBuZXcgVG9rZW5TdWJzY3JpYmVyKGNvbm5Db25maWcsIFFncmlkRGlzcGF0Y2hlcik7XG4gICAgICAgIFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyID0gc3Vic2NyaWJlcjtcblxuICAgICAgICBjb25zdCBzdGFydGVkID0gYXdhaXQgc3Vic2NyaWJlci5zdGFydCgpO1xuXG4gICAgICAgIC8vIOq4sOuPmSDsg4Htg5zrpbwg64Ko6ri064ukIOKAlCBIVFRQIOuKlCDsnbTrr7gg7Je066CkIOyeiOyWtOyEnCwg7KSA67mEIOyghCDsmpTssq3snbQgXCLsnqDsi5wg7ZuEIOuQmOuKlOyngFwiXG4gICAgICAgIC8vIFwi7J6s7Iuc64+E7ZW064+EIOyViCDrkJjripTsp4BcIuulvCDqtazrtoTtlbQg7J2R64u17ZW07JW8IO2VnOuLpCg1MDMgdnMgNTAwKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvcGVuYWlEaXNwYXRjaGVyID0gbmV3IE9wZW5BSURpc3BhdGNoZXIoKTtcbiAgICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyLnN0YXJ0KCk7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIgPSBvcGVuYWlEaXNwYXRjaGVyO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5zdGFydHVwU3RhdGUub3BlbmFpID0gXCJyZWFkeVwiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN0YXJ0dXBTdGF0ZS5vcGVuYWkgPSBcImZhaWxlZFwiO1xuICAgICAgICAgIGxvZy53YXJuKGBvcGVuYWkgZGlzcGF0Y2hlciBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhbnRocm9waWNEaXNwYXRjaGVyID0gbmV3IEFudGhyb3BpY0Rpc3BhdGNoZXIoKTtcbiAgICAgICAgICBhd2FpdCBhbnRocm9waWNEaXNwYXRjaGVyLnN0YXJ0KCk7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIgPSBhbnRocm9waWNEaXNwYXRjaGVyO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5zdGFydHVwU3RhdGUuYW50aHJvcGljID0gXCJyZWFkeVwiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN0YXJ0dXBTdGF0ZS5hbnRocm9waWMgPSBcImZhaWxlZFwiO1xuICAgICAgICAgIGxvZy53YXJuKGBhbnRocm9waWMgZGlzcGF0Y2hlciBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBncm9rUmVmcmVzaGVyID0gbmV3IEdyb2tSZWZyZXNoQ29vcmRpbmF0b3IoeyBwZXJzaXN0OiBwZXJzaXN0R3Jva0NyZWRlbnRpYWxzIH0pO1xuXG4gICAgICAgICAgY29uc3QgZ3Jva0Rpc3BhdGNoZXIgPSBuZXcgR3Jva0Rpc3BhdGNoZXIoe1xuICAgICAgICAgICAgcmVmcmVzaGVyOiBncm9rUmVmcmVzaGVyLFxuICAgICAgICAgICAgbWVkaWE6IG5ldyBHcm9rTWVkaWFDbGllbnQoKSxcbiAgICAgICAgICAgIHZvaWNlOiBuZXcgR3Jva1ZvaWNlQ2xpZW50KCksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCBncm9rRGlzcGF0Y2hlci5zdGFydCgpO1xuICAgICAgICAgIFFncmlkRnJhbWUuZ3Jva1JlZnJlc2hlciA9IGdyb2tSZWZyZXNoZXI7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLmdyb2tEaXNwYXRjaGVyID0gZ3Jva0Rpc3BhdGNoZXI7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN0YXJ0dXBTdGF0ZS5ncm9rID0gXCJyZWFkeVwiO1xuICAgICAgICAgIC8vIFRoZSBzdWJzY3JpYmVyJ3Mgc3RhcnR1cCByZWNvbmNpbGUgcmFuIGJlZm9yZSB0aGlzIGRpc3BhdGNoZXIgZXhpc3RlZDsgYSBmYWlsdXJlIGhlcmVcbiAgICAgICAgICAvLyBpcyByZXRyaWVkIGJ5IHRoZSBwZXJpb2RpYyByZWNvbmNpbGUgYW5kIGRvZXMgbm90IG1ha2UgdGhlIHJ1bnRpbWUgdW51c2FibGUuXG4gICAgICAgICAgYXdhaXQgc3Vic2NyaWJlclxuICAgICAgICAgICAgLnJlY29uY2lsZSgpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+XG4gICAgICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgICAgIGBncm9rIGluaXRpYWwgcmVjb25jaWxlIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBRZ3JpZERpc3BhdGNoZXIuc3RhcnR1cFN0YXRlLmdyb2sgPSBcImZhaWxlZFwiO1xuICAgICAgICAgIGxvZy53YXJuKGBncm9rIGRpc3BhdGNoZXIgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmliZXIudG9rZW5DaGFuZ2VIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgIHZvaWQgcmVzY2hlZHVsZVRva2VuV2luZG93S2VlcGFsaXZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3RhcnRFeHBpcmVkVG9rZW5SZW1pbmRlcigpO1xuICAgICAgICB2b2lkIHN0YXJ0VG9rZW5XaW5kb3dLZWVwYWxpdmUoKTtcblxuICAgICAgICBjb25zdCBhbnRocm9waWNDb3VudCA9IFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy50b2tlblBvb2wuc2l6ZSA/PyAwO1xuICAgICAgICBjb25zdCBvcGVuYWlDb3VudCA9IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5jb3VudEFjdGl2ZVRva2VucygpID8/IDA7XG5cbiAgICAgICAgbG9nLmluZm8oYGxpc3RlbmluZyBvbiBodHRwOi8vJHtob3N0fToke3BvcnR9YCk7XG4gICAgICAgIGxvZy5pbmZvKGBhbnRocm9waWM6ICR7YW50aHJvcGljQ291bnR9IHRva2VucyByZWFkeWApO1xuICAgICAgICBsb2cuaW5mbyhgb3BlbmFpOiAke29wZW5haUNvdW50fSB0b2tlbnMgcmVhZHlgKTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYHN1YnNjcmliZXI6ICR7c3RhcnRlZCA/IFwiTElTVEVOIGFjdGl2ZVwiIDogXCJkZWdyYWRlZFwifSR7dHJpZ2dlclJlYWR5ID8gXCJcIiA6IFwiLCB0cmlnZ2VyIGZhaWxlZFwifWAsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25TaHV0ZG93bjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBsb2cgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzdGFydHVwXCJdKTtcbiAgICAgICAgc3RvcEV4cGlyZWRUb2tlblJlbWluZGVyKCk7XG4gICAgICAgIHN0b3BUb2tlbldpbmRvd0tlZXBhbGl2ZSgpO1xuICAgICAgICBzdG9wT3BlbkFJQ2FsbGJhY2tSZWxheSgpO1xuICAgICAgICBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcihudWxsKTtcblxuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIpIFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyLnRva2VuQ2hhbmdlSGFuZGxlciA9IG51bGw7XG5cbiAgICAgICAgaWYgKFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3Jva0Rpc3BhdGNoZXIgPSBRZ3JpZERpc3BhdGNoZXIuZ3Jva0Rpc3BhdGNoZXI7XG5cbiAgICAgICAgaWYgKGdyb2tEaXNwYXRjaGVyIGluc3RhbmNlb2YgR3Jva0Rpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBncm9rRGlzcGF0Y2hlci5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIpIHtcbiAgICAgICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlci5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2cuaW5mbyhcImdyYWNlZnVsIHNodXRkb3duXCIpO1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IChlcnJvciwgX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGhhbmRsZVNlcnZlckVycm9yKG1hcFJlcXVlc3RCb2R5VG9vTGFyZ2UoZXJyb3IpLCByZXBseSk7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdDQSxNQUFNLDJCQUEyQixFQUFFLFlBQVk7Q0FDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDN0IsQ0FBQztBQUVELE1BQU0sT0FBTyxRQUFRLElBQUksUUFBUTtBQUNqQyxNQUFNLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLO0FBRTdDLE1BQU0sYUFBYTtDQUNqQixNQUFNLFFBQVEsSUFBSSxrQkFBa0I7Q0FDcEMsTUFBTSxPQUFPLFFBQVEsSUFBSSxrQkFBa0IsSUFBSTtDQUMvQyxNQUFNLFFBQVEsSUFBSSxrQkFBa0I7Q0FDcEMsVUFBVSxRQUFRLElBQUksc0JBQXNCO0NBQzVDLFVBQVUsUUFBUSxJQUFJLGtCQUFrQjtBQUMxQztBQUVBLElBQUEsd0JBQWUsYUFBYTtDQUMxQixhQUFhLFFBQVEsSUFBSSxnQkFBZ0I7Q0FDekMsVUFBVSxFQUNSLGdCQUFnQixFQUNkLFlBQVk7RUFDVixHQUFHO0VBQ0gsV0FBVztFQUNYLDZCQUE2QjtDQUMvQixFQUNGLEVBQ0Y7Q0FDQSxLQUFLO0VBQ0gsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPLEVBQ0wsUUFBUSxPQUNWO0NBQ0Y7Q0FDQSxNQUFNO0VBQ0osZUFBZTtFQUNmLGtC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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TokenModel } from "./application/token/token.model.js";
|
|
2
|
+
import { z } from "zod";
|
|
2
3
|
import { getLogger } from "@logtape/logtape";
|
|
3
4
|
import { existsSync } from "node:fs";
|
|
4
5
|
import { readdir } from "node:fs/promises";
|
|
@@ -12,6 +13,14 @@ function resolveStartupMigrationDirs(moduleDir = import.meta.dirname) {
|
|
|
12
13
|
};
|
|
13
14
|
}
|
|
14
15
|
const MIGRATION_FILE_RE = /^\d{14}_.+\.ts$/;
|
|
16
|
+
const migrationFunctionSchema = z.function({
|
|
17
|
+
input: [z.unknown()],
|
|
18
|
+
output: z.unknown()
|
|
19
|
+
});
|
|
20
|
+
const migrationModuleSchema = z.object({
|
|
21
|
+
up: migrationFunctionSchema,
|
|
22
|
+
down: migrationFunctionSchema.optional()
|
|
23
|
+
});
|
|
15
24
|
/**
|
|
16
25
|
* 패키지된 CLI 는 `bundle/dist` 에서 실행되는데, knex 기본 FsMigrations 에 `../src/migrations` 를
|
|
17
26
|
* 넘기면 pending migration 을 `.ts` 로 import 하다 "Unknown file extension .ts" 로 죽는다(2.9.0 사고).
|
|
@@ -31,29 +40,30 @@ function createStartupMigrationSource(dirs) {
|
|
|
31
40
|
const compiled = path.join(dirs.compiledDir, name.replace(/\.ts$/, ".js"));
|
|
32
41
|
const source = path.join(dirs.sourceDir, name);
|
|
33
42
|
const target = existsSync(compiled) ? compiled : source;
|
|
34
|
-
const module = await import(pathToFileURL(target).href);
|
|
35
|
-
if (
|
|
43
|
+
const module = migrationModuleSchema.safeParse(await import(pathToFileURL(target).href));
|
|
44
|
+
if (!module.success) throw new Error(`migration ${name} has no up() export (${target})`);
|
|
45
|
+
const { up, down } = module.data;
|
|
36
46
|
return {
|
|
37
|
-
up:
|
|
38
|
-
down:
|
|
47
|
+
up: async (knex) => up(knex),
|
|
48
|
+
down: async (knex) => down?.(knex)
|
|
39
49
|
};
|
|
40
50
|
}
|
|
41
51
|
};
|
|
42
52
|
}
|
|
43
53
|
async function runRequiredMigrations(dirs = resolveStartupMigrationDirs(), deps = {
|
|
44
54
|
getKnex: () => TokenModel.getDB("w"),
|
|
45
|
-
exit: process.exit
|
|
55
|
+
exit: (code) => process.exit(code)
|
|
46
56
|
}) {
|
|
47
57
|
const log = getLogger(["qgrid", "startup"]);
|
|
48
58
|
try {
|
|
49
59
|
const [batch, migrations] = await deps.getKnex().migrate.latest({ migrationSource: createStartupMigrationSource(dirs) });
|
|
50
60
|
if (migrations.length > 0) log.info(`migration: ${migrations.length} applied (batch ${batch})`);
|
|
51
61
|
} catch (error) {
|
|
52
|
-
log.error(`migration failed: ${error.message}`);
|
|
62
|
+
log.error(`migration failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
63
|
deps.exit(1);
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
//#endregion
|
|
57
67
|
export { createStartupMigrationSource, resolveStartupMigrationDirs, runRequiredMigrations };
|
|
58
68
|
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnR1cC1taWdyYXRpb25zLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFydHVwLW1pZ3JhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZWFkZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vdG9rZW4vdG9rZW4ubW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cE1pZ3JhdGlvbkRpcnMgPSB7XG4gIC8qKiBTb25hbXUg6rCAIG1pZ3JhdGlvbiDsnYQg7IOd7ISxwrfquLDroZ3tlZjripQg7JuQ67O4IOuUlOugie2EsOumrC4gYGtuZXhfbWlncmF0aW9ucy5uYW1lYCDsnYAg7J20IO2MjOydvOuqhShgLnRzYCnsnbTri6QuICovXG4gIHNvdXJjZURpcjogc3RyaW5nO1xuICAvKiog67mM65OcIOyCsOy2nOusvCDrlJTroInthLDrpqwuIGRpc3Qg7JeQ7IScIOyLpO2WiSDspJHsnbTrqbQg6rCZ7J2AIOydtOumhOydmCBgLmpzYCDqsIAg7Jes6riwIOyeiOuLpC4gKi9cbiAgY29tcGlsZWREaXI6IHN0cmluZztcbn07XG5cbi8vIGltcG9ydC5tZXRhLmRpcm5hbWUg7J2AIOyGjOyKpCDsi6TtlokodHMgbG9hZGVyKeyXkOyEnOuKlCBgc3JjL2AsIO2MqO2CpOyngOuQnCBDTEkg7JeQ7ISc64qUIGBidW5kbGUvZGlzdC9gIOuLpC5cbi8vIOuRkCDqsr3smrAg66qo65GQIGAuLi9zcmMvbWlncmF0aW9uc2Ag6rCAIOydtOumhOydmCDsoJXrs7jsnbTqs6AgYC4vbWlncmF0aW9uc2Ag6rCAIOy7tO2MjOydvCDsgrDstpzrrLwg7JyE7LmY64ukLlxuLy8g7IaM7IqkIOyLpO2WieyXkOyEnOuKlCDrkZjsnbQg6rCZ7J2AIOuUlOugie2EsOumrOudvCDsu7TtjIzsnbwg7YyM7J287J20IOyXhuqzoCwgYC50c2Ag66W8IGxvYWRlciDqsIAg7KeB7KCRIOydveuKlOuLpC5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RhcnR1cE1pZ3JhdGlvbkRpcnMoXG4gIG1vZHVsZURpcjogc3RyaW5nID0gaW1wb3J0Lm1ldGEuZGlybmFtZSxcbik6IFN0YXJ0dXBNaWdyYXRpb25EaXJzIHtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2VEaXI6IHBhdGguam9pbihtb2R1bGVEaXIsIFwiLi4vc3JjL21pZ3JhdGlvbnNcIiksXG4gICAgY29tcGlsZWREaXI6IHBhdGguam9pbihtb2R1bGVEaXIsIFwibWlncmF0aW9uc1wiKSxcbiAgfTtcbn1cblxuLy8gU29uYW11IOqwgCDrp4zrk5zripQg7YyM7J2866qFIOq3nOy5mTogYFlZWVlNTURESEhtbXNzXzx0aXRsZT4udHNgLiDtg4DsnoUg7ISg7Ja47J2064KYIFJFQURNRSDripQg7KCc7Jm47ZWc64ukLlxuY29uc3QgTUlHUkFUSU9OX0ZJTEVfUkUgPSAvXlxcZHsxNH1fLitcXC50cyQvO1xuXG4vLyB6LmZ1bmN0aW9uKCkgY2hlY2tzIGNhbGxhYmlsaXR5OyBnZXRNaWdyYXRpb24gd3JhcHMgdGhlIGNhbGxzIGluIGtuZXgncyBtaWdyYXRpb24gY29udHJhY3QuXG5jb25zdCBtaWdyYXRpb25GdW5jdGlvblNjaGVtYSA9IHouZnVuY3Rpb24oeyBpbnB1dDogW3oudW5rbm93bigpXSwgb3V0cHV0OiB6LnVua25vd24oKSB9KTtcblxuY29uc3QgbWlncmF0aW9uTW9kdWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICB1cDogbWlncmF0aW9uRnVuY3Rpb25TY2hlbWEsXG4gIGRvd246IG1pZ3JhdGlvbkZ1bmN0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiDtjKjtgqTsp4DrkJwgQ0xJIOuKlCBgYnVuZGxlL2Rpc3RgIOyXkOyEnCDsi6TtlonrkJjripTrjbAsIGtuZXgg6riw67O4IEZzTWlncmF0aW9ucyDsl5AgYC4uL3NyYy9taWdyYXRpb25zYCDrpbxcbiAqIOuEmOq4sOuptCBwZW5kaW5nIG1pZ3JhdGlvbiDsnYQgYC50c2Ag66GcIGltcG9ydCDtlZjri6QgXCJVbmtub3duIGZpbGUgZXh0ZW5zaW9uIC50c1wiIOuhnCDso73ripTri6QoMi45LjAg7IKs6rOgKS5cbiAqIOuwmOuMgOuhnCDrlJTroInthLDrpqzrpbwgYGRpc3QvbWlncmF0aW9uc2Ag66GcIOuwlOq+uOuptCBga25leF9taWdyYXRpb25zYCDsl5AgYC50c2Ag7J2066aE7Jy866GcIOq4sOuhneuQnCDqs7zqsbBcbiAqIG1pZ3JhdGlvbiDsnbQg7KCE67aAIHBlbmRpbmcg7Jy866GcIOuztOyduOuLpC4g6re4656Y7IScIOydtOumhOydgCBgc3JjL21pZ3JhdGlvbnNgIOydmCBgLnRzYCDtjIzsnbzrqoXsnYQg6re464yA66GcXG4gKiDsk7Dqs6AsIOuqqOuTiOunjCDsu7TtjIzsnbzrkJwgYC5qc2Ag6rCAIOyeiOycvOuptCDqt7jqsoPsnYQg66Gc65Oc7ZWc64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RhcnR1cE1pZ3JhdGlvblNvdXJjZShcbiAgZGlyczogU3RhcnR1cE1pZ3JhdGlvbkRpcnMsXG4pOiBLbmV4Lk1pZ3JhdGlvblNvdXJjZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXRNaWdyYXRpb25zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoZGlycy5zb3VyY2VEaXIpO1xuXG4gICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICAuZmlsdGVyKChuYW1lKSA9PiBNSUdSQVRJT05fRklMRV9SRS50ZXN0KG5hbWUpICYmICFuYW1lLmVuZHNXaXRoKFwiLmQudHNcIikpXG4gICAgICAgIC50b1NvcnRlZCgpO1xuICAgIH0sXG4gICAgZ2V0TWlncmF0aW9uTmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuICAgIGFzeW5jIGdldE1pZ3JhdGlvbihuYW1lKSB7XG4gICAgICBjb25zdCBjb21waWxlZCA9IHBhdGguam9pbihkaXJzLmNvbXBpbGVkRGlyLCBuYW1lLnJlcGxhY2UoL1xcLnRzJC8sIFwiLmpzXCIpKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbihkaXJzLnNvdXJjZURpciwgbmFtZSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBleGlzdHNTeW5jKGNvbXBpbGVkKSA/IGNvbXBpbGVkIDogc291cmNlO1xuICAgICAgY29uc3QgbW9kdWxlID0gbWlncmF0aW9uTW9kdWxlU2NoZW1hLnNhZmVQYXJzZShhd2FpdCBpbXBvcnQocGF0aFRvRmlsZVVSTCh0YXJnZXQpLmhyZWYpKTtcblxuICAgICAgaWYgKCFtb2R1bGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pZ3JhdGlvbiAke25hbWV9IGhhcyBubyB1cCgpIGV4cG9ydCAoJHt0YXJnZXR9KWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHVwLCBkb3duIH0gPSBtb2R1bGUuZGF0YTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXA6IGFzeW5jIChrbmV4OiBLbmV4KSA9PiB1cChrbmV4KSxcbiAgICAgICAgZG93bjogYXN5bmMgKGtuZXg6IEtuZXgpID0+IGRvd24/LihrbmV4KSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhcnR1cE1pZ3JhdGlvbkRlcHMgPSB7XG4gIGdldEtuZXg6ICgpID0+IFBpY2s8S25leCwgXCJtaWdyYXRlXCI+O1xuICBleGl0OiAoY29kZTogbnVtYmVyKSA9PiBuZXZlcjtcbn07XG5cbi8vIO2FjOyKpO2KuOuKlCBkZXBzIOulvCDso7zsnoXtlZzri6QuIOuqqOuTiCDrqqnsnLzroZwgVG9rZW5Nb2RlbCDsnYQg67CU6r6464qUIOuwqeyLneydgCDsoITssrQg7Iqk7JyE7Yq47JeQ7IScIOuqqeydtCDsg4jrqbRcbi8vIOyLpOygnCBwcm9jZXNzLmV4aXQoMSkg7J20IHdvcmtlciDrpbwg7KO97JesIOuCqOydgCDthYzsiqTtirjqsIAg7KGw7Jqp7Z6IIHBlbmRpbmcg7Jy866GcIOu5oOynhOuLpC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5SZXF1aXJlZE1pZ3JhdGlvbnMoXG4gIGRpcnM6IFN0YXJ0dXBNaWdyYXRpb25EaXJzID0gcmVzb2x2ZVN0YXJ0dXBNaWdyYXRpb25EaXJzKCksXG4gIGRlcHM6IFN0YXJ0dXBNaWdyYXRpb25EZXBzID0ge1xuICAgIGdldEtuZXg6ICgpID0+IFRva2VuTW9kZWwuZ2V0REIoXCJ3XCIpLFxuICAgIGV4aXQ6IChjb2RlKSA9PiBwcm9jZXNzLmV4aXQoY29kZSksXG4gIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbG9nID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3RhcnR1cFwiXSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBrbmV4ID0gZGVwcy5nZXRLbmV4KCk7XG5cbiAgICBjb25zdCBbYmF0Y2gsIG1pZ3JhdGlvbnNdID0gYXdhaXQga25leC5taWdyYXRlLmxhdGVzdCh7XG4gICAgICBtaWdyYXRpb25Tb3VyY2U6IGNyZWF0ZVN0YXJ0dXBNaWdyYXRpb25Tb3VyY2UoZGlycyksXG4gICAgfSk7XG5cbiAgICBpZiAobWlncmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cuaW5mbyhgbWlncmF0aW9uOiAke21pZ3JhdGlvbnMubGVuZ3RofSBhcHBsaWVkIChiYXRjaCAke2JhdGNofSlgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKGBtaWdyYXRpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICBkZXBzLmV4aXQoMSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFxQkEsU0FBZ0IsNEJBQ2QsWUFBb0IsT0FBTyxLQUFLLFNBQ1Y7Q0FDdEIsT0FBTztFQUNMLFdBQVcsS0FBSyxLQUFLLFdBQVcsbUJBQW1CO0VBQ25ELGFBQWEsS0FBSyxLQUFLLFdBQVcsWUFBWTtDQUNoRDtBQUNGO0FBR0EsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSwwQkFBMEIsRUFBRSxTQUFTO0NBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDO0NBQUcsUUFBUSxFQUFFLFFBQVE7QUFBRSxDQUFDO0FBRXhGLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztDQUNyQyxJQUFJO0NBQ0osTUFBTSx3QkFBd0IsU0FBUztBQUN6QyxDQUFDOzs7Ozs7OztBQVNELFNBQWdCLDZCQUNkLE1BQzhCO0NBQzlCLE9BQU87RUFDTCxNQUFNLGdCQUFnQjtHQUdwQixRQUFPLE1BRmUsUUFBUSxLQUFLLFNBQVMsRUFFckMsQ0FDSixRQUFRLFNBQVMsa0JBQWtCLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxTQUFTLE9BQU8sQ0FBQyxDQUFDLENBQ3pFLFNBQVM7RUFDZDtFQUNBLGlCQUFpQixNQUFNO0dBQ3JCLE9BQU87RUFDVDtFQUNBLE1BQU0sYUFBYSxNQUFNO0dBQ3ZCLE1BQU0sV0FBVyxLQUFLLEtBQUssS0FBSyxhQUFhLEtBQUssUUFBUSxTQUFTLEtBQUssQ0FBQztHQUN6RSxNQUFNLFNBQVMsS0FBSyxLQUFLLEtBQUssV0FBVyxJQUFJO0dBQzdDLE1BQU0sU0FBUyxXQUFXLFFBQVEsSUFBSSxXQUFXO0dBQ2pELE1BQU0sU0FBUyxzQkFBc0IsVUFBVSxNQUFNLE9BQU8sY0FBYyxNQUFNLENBQUMsQ0FBQyxLQUFLO0dBRXZGLElBQUksQ0FBQyxPQUFPLFNBQ1YsTUFBTSxJQUFJLE1BQU0sYUFBYSxLQUFLLHVCQUF1QixPQUFPLEVBQUU7R0FHcEUsTUFBTSxFQUFFLElBQUksU0FBUyxPQUFPO0dBRTVCLE9BQU87SUFDTCxJQUFJLE9BQU8sU0FBZSxHQUFHLElBQUk7SUFDakMsTUFBTSxPQUFPLFNBQWUsT0FBTyxJQUFJO0dBQ3pDO0VBQ0Y7Q0FDRjtBQUNGO0FBU0EsZUFBc0Isc0JBQ3BCLE9BQTZCLDRCQUE0QixHQUN6RCxPQUE2QjtDQUMzQixlQUFlLFdBQVcsTUFBTSxHQUFHO0NBQ25DLE9BQU8sU0FBUyxRQUFRLEtBQUssSUFBSTtBQUNuQyxHQUNlO0NBQ2YsTUFBTSxNQUFNLFVBQVUsQ0FBQyxTQUFTLFNBQVMsQ0FBQztDQUUxQyxJQUFJO0VBR0YsTUFBTSxDQUFDLE9BQU8sY0FBYyxNQUZmLEtBQUssUUFFZ0IsQ0FBQSxDQUFLLFFBQVEsT0FBTyxFQUNwRCxpQkFBaUIsNkJBQTZCLElBQUksRUFDcEQsQ0FBQztFQUVELElBQUksV0FBVyxTQUFTLEdBQ3RCLElBQUksS0FBSyxjQUFjLFdBQVcsT0FBTyxrQkFBa0IsTUFBTSxFQUFFO0NBRXZFLFNBQVMsT0FBTztFQUNkLElBQUksTUFBTSxxQkFBcUIsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSyxHQUFHO0VBQ3ZGLEtBQUssS0FBSyxDQUFDO0NBQ2I7QUFDRiJ9
|
|
@@ -96,4 +96,4 @@ async function setup(project) {
|
|
|
96
96
|
//#endregion
|
|
97
97
|
export { dropWorkerDatabases, provisionWorkerDatabases, recreateWorkerDatabases, resolveMaxWorkers, setup };
|
|
98
98
|
|
|
99
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2dsb2JhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJwZ1wiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmNvbnN0IE1BWF9XT1JLRVJTID0gNDtcbmNvbnN0IFRFTVBMQVRFX0RCID0gcHJvY2Vzcy5lbnYuUUdSSURfVEVTVF9EQl9OQU1FID8/
|
|
99
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2dsb2JhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJwZ1wiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmNvbnN0IE1BWF9XT1JLRVJTID0gNDtcbmNvbnN0IFRFTVBMQVRFX0RCID0gcHJvY2Vzcy5lbnYuUUdSSURfVEVTVF9EQl9OQU1FID8/IFwicWdyaWRfdGVzdFwiO1xuXG50eXBlIFF1ZXJ5Q2xpZW50ID0gUGljazxDbGllbnQsIFwicXVlcnlcIj47XG5cbnR5cGUgQWRtaW5DbGllbnQgPSBQaWNrPENsaWVudCwgXCJjb25uZWN0XCIgfCBcImVuZFwiIHwgXCJxdWVyeVwiPjtcblxudHlwZSBBZG1pbkNsaWVudEZhY3RvcnkgPSAoKSA9PiBBZG1pbkNsaWVudDtcblxudHlwZSBWaXRlc3RQcm9qZWN0ID0geyBjb25maWc/OiB7IG1heFdvcmtlcnM/OiBudW1iZXIgfSB9O1xuXG5mdW5jdGlvbiBxdW90ZUlkZW50aWZpZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghL15bQS1aYS16MC05X10rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGF0YWJhc2UgaWRlbnRpZmllcjogJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbn1cblxuZnVuY3Rpb24gd29ya2VyRGF0YWJhc2VOYW1lcyh0ZW1wbGF0ZURiOiBzdHJpbmcsIG1heFdvcmtlcnM6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IG1heFdvcmtlcnMgfSwgKF8sIGluZGV4KSA9PiBgJHt0ZW1wbGF0ZURifV8ke2luZGV4ICsgMX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQ29ubmVjdGlvbnMoY2xpZW50OiBRdWVyeUNsaWVudCwgZGF0YWJhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBjbGllbnQucXVlcnkoXG4gICAgYFxuICAgICAgU0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBpZClcbiAgICAgIEZST00gcGdfc3RhdF9hY3Rpdml0eVxuICAgICAgV0hFUkUgZGF0bmFtZSA9ICQxXG4gICAgICAgIEFORCBwaWQgPD4gcGdfYmFja2VuZF9waWQoKVxuICAgIGAsXG4gICAgW2RhdGFiYXNlXSxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY3JlYXRlV29ya2VyRGF0YWJhc2VzKFxuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuICB0ZW1wbGF0ZURiOiBzdHJpbmcsXG4gIHJ1bkRhdGFiYXNlOiBzdHJpbmcsXG4gIG1heFdvcmtlcnM6IG51bWJlcixcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgd29ya2VycyA9IHdvcmtlckRhdGFiYXNlTmFtZXMocnVuRGF0YWJhc2UsIG1heFdvcmtlcnMpO1xuXG4gIGZvciAoY29uc3QgZGF0YWJhc2Ugb2YgWy4uLndvcmtlcnMsIHRlbXBsYXRlRGJdKSB7XG4gICAgYXdhaXQgdGVybWluYXRlQ29ubmVjdGlvbnMoY2xpZW50LCBkYXRhYmFzZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFiYXNlIG9mIHdvcmtlcnMpIHtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7cXVvdGVJZGVudGlmaWVyKGRhdGFiYXNlKX1gKTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoXG4gICAgICBgQ1JFQVRFIERBVEFCQVNFICR7cXVvdGVJZGVudGlmaWVyKGRhdGFiYXNlKX0gVEVNUExBVEUgJHtxdW90ZUlkZW50aWZpZXIodGVtcGxhdGVEYil9IFNUUkFURUdZIEZJTEVfQ09QWWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJvcFdvcmtlckRhdGFiYXNlcyhcbiAgY2xpZW50OiBRdWVyeUNsaWVudCxcbiAgdGVtcGxhdGVEYjogc3RyaW5nLFxuICBtYXhXb3JrZXJzOiBudW1iZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGRhdGFiYXNlIG9mIHdvcmtlckRhdGFiYXNlTmFtZXModGVtcGxhdGVEYiwgbWF4V29ya2VycykpIHtcbiAgICBhd2FpdCB0ZXJtaW5hdGVDb25uZWN0aW9ucyhjbGllbnQsIGRhdGFiYXNlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9KTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7cXVvdGVJZGVudGlmaWVyKGRhdGFiYXNlKX1gKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNsZWFudXBFcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFwiZmFpbGVkIHRvIGNsZWFuIG9uZSBvciBtb3JlIHRlc3QgZGF0YWJhc2VzXCIsIHtcbiAgICAgIGNhdXNlOiBlcnJvcnNbMF0sXG4gICAgfSk7XG5cbiAgICB0aHJvdyBjbGVhbnVwRXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQWRtaW5DbGllbnQoKTogQ2xpZW50IHtcbiAgcmV0dXJuIG5ldyBDbGllbnQoe1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9IT1NUID8/IFwibG9jYWxob3N0XCIsXG4gICAgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlNPTkFNVV9EQl9QT1JUID8/IDU0MzIpLFxuICAgIHVzZXI6IHByb2Nlc3MuZW52LlNPTkFNVV9EQl9VU0VSID8/IFwicG9zdGdyZXNcIixcbiAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuU09OQU1VX0RCX1BBU1NXT1JEID8/IFwicG9zdGdyZXNcIixcbiAgICBkYXRhYmFzZTogXCJwb3N0Z3Jlc1wiLFxuICAgIGFwcGxpY2F0aW9uX25hbWU6IFwicWdyaWQtdml0ZXN0LWdsb2JhbC1zZXR1cFwiLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNYXhXb3JrZXJzKHByb2plY3Q/OiBWaXRlc3RQcm9qZWN0KTogbnVtYmVyIHtcbiAgY29uc3QgbWF4V29ya2VycyA9IHByb2plY3Q/LmNvbmZpZz8ubWF4V29ya2VycztcblxuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtYXhXb3JrZXJzKSAmJiBtYXhXb3JrZXJzICE9PSB1bmRlZmluZWQgJiYgbWF4V29ya2VycyA+IDBcbiAgICA/IG1heFdvcmtlcnNcbiAgICA6IE1BWF9XT1JLRVJTO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmlzaW9uV29ya2VyRGF0YWJhc2VzKFxuICBjcmVhdGVDbGllbnQ6IEFkbWluQ2xpZW50RmFjdG9yeSxcbiAgdGVtcGxhdGVEYjogc3RyaW5nLFxuICBydW5EYXRhYmFzZTogc3RyaW5nLFxuICBtYXhXb3JrZXJzOiBudW1iZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KCk7XG4gIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZWNyZWF0ZVdvcmtlckRhdGFiYXNlcyhjbGllbnQsIHRlbXBsYXRlRGIsIHJ1bkRhdGFiYXNlLCBtYXhXb3JrZXJzKTtcbiAgfSBjYXRjaCAoc2V0dXBFcnJvcikge1xuICAgIGF3YWl0IGNsaWVudC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgY29uc3QgY2xlYW51cENsaWVudCA9IGNyZWF0ZUNsaWVudCgpO1xuICAgIGxldCBjbGVhbnVwRXJyb3I6IHVua25vd247XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xlYW51cENsaWVudC5jb25uZWN0KCk7XG4gICAgICBhd2FpdCBkcm9wV29ya2VyRGF0YWJhc2VzKGNsZWFudXBDbGllbnQsIHJ1bkRhdGFiYXNlLCBtYXhXb3JrZXJzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2xlYW51cEVycm9yID0gZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFudXBDbGllbnQuZW5kKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNsZWFudXBFcnJvciA/Pz0gZXJyb3I7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYW51cEVycm9yKSB7XG4gICAgICBjb25zdCBjb21iaW5lZEVycm9yID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICBbc2V0dXBFcnJvciwgY2xlYW51cEVycm9yXSxcbiAgICAgICAgXCJ0ZXN0IGRhdGFiYXNlIHNldHVwIGFuZCBjbGVhbnVwIGJvdGggZmFpbGVkXCIsXG4gICAgICAgIHsgY2F1c2U6IHNldHVwRXJyb3IgfSxcbiAgICAgICk7XG5cbiAgICAgIHRocm93IGNvbWJpbmVkRXJyb3I7XG4gICAgfVxuXG4gICAgdGhyb3cgc2V0dXBFcnJvcjtcbiAgfVxuXG4gIGF3YWl0IGNsaWVudC5lbmQoKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q/OiBWaXRlc3RQcm9qZWN0KTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGNvbnN0IHJ1bkRhdGFiYXNlID0gcHJvY2Vzcy5lbnYuUUdSSURfVEVTVF9SVU5fREI7XG5cbiAgaWYgKCFydW5EYXRhYmFzZSB8fCBwcm9jZXNzLmVudi5TT05BTVVfREJfTkFNRSAhPT0gcnVuRGF0YWJhc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJWaXRlc3QgdGVzdCBkYXRhYmFzZSBuYW1lIHdhcyBub3QgY29uZmlndXJlZCBjb25zaXN0ZW50bHlcIik7XG4gIH1cblxuICBjb25zdCBtYXhXb3JrZXJzID0gcmVzb2x2ZU1heFdvcmtlcnMocHJvamVjdCk7XG4gIGF3YWl0IHByb3Zpc2lvbldvcmtlckRhdGFiYXNlcyhjcmVhdGVBZG1pbkNsaWVudCwgVEVNUExBVEVfREIsIHJ1bkRhdGFiYXNlLCBtYXhXb3JrZXJzKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRlYXJkb3duQ2xpZW50ID0gY3JlYXRlQWRtaW5DbGllbnQoKTtcbiAgICBhd2FpdCB0ZWFyZG93bkNsaWVudC5jb25uZWN0KCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZHJvcFdvcmtlckRhdGFiYXNlcyh0ZWFyZG93bkNsaWVudCwgcnVuRGF0YWJhc2UsIG1heFdvcmtlcnMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0ZWFyZG93bkNsaWVudC5lbmQoKTtcbiAgICB9XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUdBLE9BQU8sT0FBTztBQUVkLE1BQU0sY0FBYztBQUNwQixNQUFNLGNBQWMsUUFBUSxJQUFJLHNCQUFzQjtBQVV0RCxTQUFTLGdCQUFnQixPQUF1QjtDQUM5QyxJQUFJLENBQUMsa0JBQWtCLEtBQUssS0FBSyxHQUMvQixNQUFNLElBQUksTUFBTSxnQ0FBZ0MsT0FBTztDQUd6RCxPQUFPLElBQUksTUFBTTtBQUNuQjtBQUVBLFNBQVMsb0JBQW9CLFlBQW9CLFlBQThCO0NBQzdFLE9BQU8sTUFBTSxLQUFLLEVBQUUsUUFBUSxXQUFXLElBQUksR0FBRyxVQUFVLEdBQUcsV0FBVyxHQUFHLFFBQVEsR0FBRztBQUN0RjtBQUVBLGVBQWUscUJBQXFCLFFBQXFCLFVBQWlDO0NBQ3hGLE1BQU0sT0FBTyxNQUNYOzs7OztPQU1BLENBQUMsUUFBUSxDQUNYO0FBQ0Y7QUFFQSxlQUFzQix3QkFDcEIsUUFDQSxZQUNBLGFBQ0EsWUFDbUI7Q0FDbkIsTUFBTSxVQUFVLG9CQUFvQixhQUFhLFVBQVU7Q0FF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
|
|
Binary file
|
|
@@ -16,4 +16,4 @@ function configureTestRunDatabaseName() {
|
|
|
16
16
|
//#endregion
|
|
17
17
|
export { configureTestRunDatabaseName, createTestRunDatabaseName };
|
|
18
18
|
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kYXRhYmFzZS1uYW1lLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QtZGF0YWJhc2UtbmFtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmxldCBjb25maWd1cmVkUnVuRGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRlc3RSdW5EYXRhYmFzZU5hbWUocHJlZml4OiBzdHJpbmcsIGVudHJvcHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhZmVQcmVmaXggPSBwcmVmaXgucmVwbGFjZUFsbCgvW15BLVphLXowLTlfXS9nLCBcIl9cIik7XG4gIGNvbnN0IHNhZmVFbnRyb3B5ID0gZW50cm9weS5yZXBsYWNlQWxsKC9bXkEtWmEtejAtOV9dL2csIFwiX1wiKTtcbiAgY29uc3QgbWF4UHJlZml4TGVuZ3RoID0gNjMgLSBzYWZlRW50cm9weS5sZW5ndGggLSAxO1xuXG4gIHJldHVybiBgJHtzYWZlUHJlZml4LnNsaWNlKDAsIG1heFByZWZpeExlbmd0aCl9XyR7c2FmZUVudHJvcHl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVRlc3RSdW5EYXRhYmFzZU5hbWUoKTogc3RyaW5nIHtcbiAgaWYgKCFjb25maWd1cmVkUnVuRGF0YWJhc2UpIHtcbiAgICBjb25zdCBwcmVmaXggPSBwcm9jZXNzLmVudi5RR1JJRF9URVNUX1JVTl9EQiA/PyBcInFncmlkX3Rlc3RcIjtcbiAgICBjb25zdCBlbnRyb3B5ID0gYCR7cHJvY2Vzcy5waWR9XyR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9XyR7cmFuZG9tVVVJRCgpLnNsaWNlKDAsIDgpfWA7XG4gICAgY29uZmlndXJlZFJ1bkRhdGFiYXNlID0gY3JlYXRlVGVzdFJ1bkRhdGFiYXNlTmFtZShwcmVmaXgsIGVudHJvcHkpO1xuICB9XG5cbiAgcHJvY2Vzcy5lbnYuUUdSSURfVEVTVF9SVU5fREIgPSBjb25maWd1cmVkUnVuRGF0YWJhc2U7XG4gIHByb2Nlc3MuZW52LlNPTkFNVV9EQl9OQU1FID0gY29uZmlndXJlZFJ1bkRhdGFiYXNlO1xuXG4gIHJldHVybiBjb25maWd1cmVkUnVuRGF0YWJhc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBRUEsSUFBSTtBQUVKLFNBQWdCLDBCQUEwQixRQUFnQixTQUF5QjtDQUNqRixNQUFNLGFBQWEsT0FBTyxXQUFXLGtCQUFrQixHQUFHO0NBQzFELE1BQU0sY0FBYyxRQUFRLFdBQVcsa0JBQWtCLEdBQUc7Q0FDNUQsTUFBTSxrQkFBa0IsS0FBSyxZQUFZLFNBQVM7Q0FFbEQsT0FBTyxHQUFHLFdBQVcsTUFBTSxHQUFHLGVBQWUsRUFBRSxHQUFHO0FBQ3BEO0FBRUEsU0FBZ0IsK0JBQXVDO0NBQ3JELElBQUksQ0FBQyx1QkFHSCx3QkFBd0IsMEJBRlQsUUFBUSxJQUFJLHFCQUFxQixjQUVVLEdBRHZDLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUNuQjtDQUduRSxRQUFRLElBQUksb0JBQW9CO0NBQ2hDLFFBQVEsSUFBSSxpQkFBaUI7Q0FFN0IsT0FBTztBQUNUIn0=
|
|
@@ -70,4 +70,4 @@ function assertSupportedOneMillionSuffix(model) {
|
|
|
70
70
|
//#endregion
|
|
71
71
|
export { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_CONFIG_DIR_BASE, ANTHROPIC_DEFAULT_EFFORT, ANTHROPIC_DEFAULT_MODEL, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, hasOneMillionSuffix, isFableFamilyModel, needsCli1mSuffix, supports1MContext, usesAdaptiveThinking };
|
|
72
72
|
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWNvbnN0YW50cy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9hbnRocm9waWMtY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW50aHJvcGljKENsYXVkZSkgcHJvdmlkZXIg7IOB7IiYLlxuICpcbiAqIENsYXVkZSBDb2RlIENMSSDtlIzrnpjqt7gvZW52IOqzhOyVveydhCBBbnRocm9waWMgZGlzcGF0Y2hlciDsmqnsnLzroZwg6rOg7KCV7ZWc64ukOlxuICogIC0gYC0tbm8tc2Vzc2lvbi1wZXJzaXN0ZW5jZWAg7KCc6rGwICjrqYDti7DthLQg7ZWE7IiYKS5cbiAqICAtIGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmAg7LaU6rCAIChzdGRpbiDsnLzroZwg7J6F66ClIOyWtOuMke2EsCBKU09OTCDtnZjrprwpLlxuICogIC0gQW50aHJvcGljIOqyveuhnOuKlCDrp6Qg7Zi47LacIGAtLXNlc3Npb24taWRgIOuhnCBmcmVzaCBzZXNzaW9uIOydhCDrsJzquIntlZzri6QuXG4gKi9cblxuLy8gQ0MgLS1tb2RlbCDtlIzrnpjqt7jqsIAg67Cb64qUIG9mZmljaWFsIG1vZGVsIGlkIChhbGlhcyBcInNvbm5ldFwiIOqwgCDslYTri4jrnbwg7KCV7ZmV7ZWcIOyLneuzhOyekOuhnCDqs6DsoJUpLlxuLy8gY2xhdWRlLWFwaSDsiqTtgqwg7ZmV7J24OiBTb25uZXQgNC42IG9mZmljaWFsIGlkID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiICjrgqDsp5wgc3VmZml4IOyXhuydjCkuXG4vLyBtb2RlbC1jb3N0IO2FjOydtOu4lOyXkOuPhCBcImNsYXVkZS1zb25uZXQtNC02XCIg7YKkIOyhtOyerFxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiO1xuLy8gT3BlbkFJIHByb3ZpZGVyIOq4sOuzuOqwkihvcGVuYWktZGlzcGF0Y2hlciBERUZBVUxUX0VGRk9SVCnqs7wg66ee7LaY64ukLiDtgbTrnbzqsIAgZWZmb3J0IOuvuOyngOyglSDsi5wg7JWI7KCE66edLlxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX0VGRk9SVCA9IFwibG93XCI7XG4vLyBwcm9qZWN0IHNjb3BlIGN3ZCAoc2V0dGluZ3MuanNvbiDqsqnrpqwpLiDthqDtgbDrs4Qg6rKp66as64qUIENMQVVERV9DT05GSUdfRElSIOuhnCDtlZzri6QuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NMQVVERV9DV0QgPSBcIi90bXAvcWdyaWQtYW50aHJvcGljXCI7XG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg7J2YIOuyoOydtOyKpC4g7Iuk7KCcIOqyveuhnOuKlCBgJHtCQVNFfS8ke3Rva2VuSWR9YCAoUjEwIOqyqeumrCkuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NPTkZJR19ESVJfQkFTRSA9IFwiL3RtcC9xZ3JpZC1hbnRocm9waWMtY29uZmlnXCI7XG4vLyBDQyDqsIAg7J6Q64+ZIO2ZnOyEse2ZlO2VmOuKlCBkZWZlcnJlZCDrj4Tqtawg4oCUIO2GoO2BsCDstZzsoIHtmZQg7JyE7ZW0IGRpc3BhdGNoZXIg6rK966Gc7JeQ7IScIOywqOuLqC5cbmV4cG9ydCBjb25zdCBBTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyA9IFtcIk1vbml0b3JcIiwgXCJQdXNoTm90aWZpY2F0aW9uXCIsIFwiUmVtb3RlVHJpZ2dlclwiXSBhcyBjb25zdDtcbmNvbnN0IE9ORV9NSUxMSU9OX1NVRkZJWF9SRSA9IC9cXFsxbVxcXSQvaTtcblxuLy8g7Yag7YGw67OEIENMQVVERV9DT05GSUdfRElSIOqyveuhnCDqt5zsuZkoUjEwIOqyqeumrCDqs4Tslb0pLiB0b2tlbklkIOuzhOuhnCDrtoTrpqzrkJjslrQsIOqwmeydgCBjbGF1ZGUgc2Vzc2lvbi1pZFxuLy8g652864+EIOuLpOuluCDthqDtgbDsnbTrqbQg64uk66W4IGNvbmZpZyBkaXIg4oaSIHRyYW5zY3JpcHQg6rCAIOyEnuydtOyngCDslYrripTri6QuIOu2gOyImO2aqOqzvCDsl4bripQg7Iic7IiYIO2VqOyImOudvFxuLy8g6rKp66asIOqzhOyVveydhCDri6jsnIQg7YWM7Iqk7Yq466GcIOqzoOygle2VoCDsiJgg7J6I64ukKFU2IFIxMCDqtazsobAg6rKA7KadKS4g7Iuk7KCcIGRpciDsg53shLHsnYAgZW5zdXJlQ29uZmlnRGlyIOqwgCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtBTlRIUk9QSUNfQ09ORklHX0RJUl9CQVNFfS8ke3Rva2VuSWR9YDtcbn1cblxuLy8gbW9kZWwgaWQg66W8IGNhbm9uaWNhbChwcm92aWRlciBwcmVmaXgg7JeG64qUIENMSS9jb3N0IO2CpCkg66GcIOygleq3nO2ZlFxuLy8gYWktc2RrIOuKlCAnYW50aHJvcGljL2NsYXVkZS0qJyDtmJXtg5zroZwg67O064K064qU642wLCBwcmVmaXgg6rCAIGNhbGN1bGF0ZUNvc3RVc2Qg7JeQIOyDiOuptCBjb3N0IOqwgFxuLy8gZGVmYXVsdCDri6jqsIDroZwg7Jik6rOE7IKw65Cc64ukLiBgWzFtXWAgc3VmZml4IOuPhCBDTEkgZW1pdCDsoITsmqnsnbTrnbxcbi8vIGJhc2UgY2Fub25pY2FsIOyXkOyEnOuKlCDsoJzqsbDtlZzri6QuIOuvuOyngOygleydtOuptCBkZWZhdWx0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gbW9kZWwgfHwgQU5USFJPUElDX0RFRkFVTFRfTU9ERUw7XG4gIGNvbnN0IHdpdGhvdXRQcm92aWRlciA9IHJhdy5pbmNsdWRlcyhcIi9cIikgPyByYXcuc3BsaXQoXCIvXCIpLnBvcCgpISA6IHJhdztcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKE9ORV9NSUxMSU9OX1NVRkZJWF9SRSwgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPbmVNaWxsaW9uU3VmZml4KG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2RlbCAhPT0gdW5kZWZpbmVkICYmIE9ORV9NSUxMSU9OX1NVRkZJWF9SRS50ZXN0KG1vZGVsKTtcbn1cblxuLy8gMU0g7KeA7JuQIOyXrOu2gOuKlCBDbGF1ZGUgQ29kZSDrgrTrtoDsnZgg6rSR67KU7JyE7ZWcIHByZWZpeCDtjJDsoJXsnbQg7JWE64uI6528IHFncmlk7JeQ7IScIO2ZleyduO2VnCBleGFjdCBzZXQg7Jy866GcXG4vLyDqs6DsoJXtlZzri6QuIG9wdXMtNC03IOydgCDsi6TsuKEg7KCE6rmM7KeAIOuvuO2PrO2VqC4g7IOIIOuqqOuNuCDstpTqsIAg7IucIOqzteyLnSDsgqzslpHqs7wg7Iuk7KCcIENMSSDrj5nsnpHsnYQg7ZmV7J247ZWc64ukLlxuY29uc3QgT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMgPSBuZXcgU2V0KFtcbiAgXCJjbGF1ZGUtZmFibGUtNS0xXCIsXG4gIFwiY2xhdWRlLWZhYmxlLTVcIixcbiAgXCJjbGF1ZGUtb3B1cy01XCIsXG4gIFwiY2xhdWRlLW9wdXMtNS01XCIsXG4gIFwiY2xhdWRlLXNvbm5ldC01LTVcIixcbiAgXCJjbGF1ZGUtc29ubmV0LTVcIixcbiAgXCJjbGF1ZGUtaGFpa3UtNS01XCIsXG4gIFwiY2xhdWRlLXNvbm5ldC00LTZcIixcbiAgXCJjbGF1ZGUtb3B1cy00LTZcIixcbiAgXCJjbGF1ZGUtb3B1cy00LThcIixcbl0pO1xuXG5jb25zdCBDTElfT05FX01JTExJT05fU1VGRklYX01PREVMUyA9IG5ldyBTZXQoW1wiY2xhdWRlLXNvbm5ldC00LTZcIiwgXCJjbGF1ZGUtb3B1cy00LTZcIl0pO1xuLy8gUHJlc2VydmUgdGhlc2UgZGVmYXVsdHMgd2hlbiB0aGlua2luZyBpcyBvbWl0dGVkLiBUaGlzIGlzIG5vdCBhbiBvZmYtY2FwYWJpbGl0eSBsaXN0OlxuLy8gZXhwbGljaXQgZmFsc2Ugc3VwcG9ydHMgT3B1cyA1LCBhbmQgbmF0aXZlIGV4dHJhLWJvZHkgZGVsaXZlcnkgc3VwcG9ydHMgSGFpa3UgNS41XG4vLyAoZGlzYWJsZWQpIGFuZCBTb25uZXQgNS41IChiZXR3ZWVuX3Rvb2xzKS4gU2VlIGFudGhyb3BpYy10aGlua2luZy50cy5cbmNvbnN0IEFEQVBUSVZFX1RISU5LSU5HX01PREVMUyA9IG5ldyBTZXQoW1xuICBcImNsYXVkZS1mYWJsZS01LTFcIixcbiAgXCJjbGF1ZGUtZmFibGUtNVwiLFxuICBcImNsYXVkZS1vcHVzLTVcIixcbiAgXCJjbGF1ZGUtb3B1cy01LTVcIixcbiAgXCJjbGF1ZGUtc29ubmV0LTUtNVwiLFxuICBcImNsYXVkZS1oYWlrdS01LTVcIixcbl0pO1xuXG4vLyBGYWJsZSDqs4Tsl7Q6IOq1rOuPhSDtlIzrnpzsl5DshJwgdXNhZ2UgY3JlZGl0cyDqsIAg7ZWE7JqU7ZWcIOy1nOyDgeychCDti7DslrQuIOq1rOuPhSB1c2FnZSBBUEkg7J2YXG4vLyBgc2V2ZW5fZGF5X292ZXJhZ2VfaW5jbHVkZWRgIOuyhO2Ct+ydgCDsnbQg6rOE7Je07JeQ66eMIOyggeyaqeuQmOuvgOuhnCBxdW90YSB0aHJlc2hvbGQg7YyQ7KCV7J20IOywuOyhsO2VnOuLpC5cbi8vIE15dGhvcyDripQgUHJvamVjdCBHbGFzc3dpbmcg7KGw7KeBIOyghOyaqeydtOudvCDqtazrj4Ug7Yag7YGwIOqyveuhnOyXkOyEnCDrj4Tri6ztlaAg7IiYIOyXhuyWtCDtj6ztlajtlZjsp4Ag7JWK64qU64ukLlxuY29uc3QgRkFCTEVfRkFNSUxZX01PREVMUyA9IG5ldyBTZXQoW1wiY2xhdWRlLWZhYmxlLTUtMVwiLCBcImNsYXVkZS1mYWJsZS01XCJdKTtcblxuLy8g67aI67OAIOqzhOyVvTogc3VmZml4IOqwgCDtlYTsmpTtlZwg66qo64247J2AIOuwmOuTnOyLnCAxTSDsp4Dsm5Ag66qo64247J2YIOu2gOu2hOynke2VqeydtOyWtOyVvCDtlZzri6QuIOyXreuwqe2WpSDrtojsnbzsuZgoc3VmZml4XG4vLyDrjIDsg4HsnbjrjbAg7KeA7JuQIOynke2VqeyXlCDsl4bsnYwp66m0IG5lZWRzQ2xpMW1TdWZmaXg9dHJ1ZcK3c3VwcG9ydHMxTUNvbnRleHQ9ZmFsc2Ug6rCAIOuPmeyLnOyXkCDrgpjshJxcbi8vIGAtLW1vZGVsIFsxbV1gIOqzvCBESVNBQkxFXzFNIGVudiDqsIAg66qo7Iic65CY6rKMIOu2meuKlOuLpC4g7IOIIOuqqOuNuOydhCDtlZzsqr0gU2V0IOyXkOunjCDrhKPripQg7Iuk7IiY66W8IOuqqOuTiFxuLy8g66Gc65OcIOyLnOygkOyXkCDsnqHripTri6QuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIENMSV9PTkVfTUlMTElPTl9TVUZGSVhfTU9ERUxTKSB7XG4gIGlmICghT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMuaGFzKG1vZGVsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW2ludmFyaWFudF0gQ0xJIDFNIHN1ZmZpeCBtb2RlbCBub3QgaW4gY29udGV4dCBzZXQ6ICR7bW9kZWx9YCk7XG4gIH1cbn1cbi8vIEZhYmxlIOqzhOyXtOydgCDqs7Xsi50g7IKs7JaR7IOBIDFNIOq4sOuzuCDsu6jthY3siqTtirggKyBhZGFwdGl2ZSB0aGlua2luZyDtlYTsiJjri6QuIOyDiCBGYWJsZSDrsoTsoITsnYQg6rOE7Je0IFNldFxuLy8g7JeQ66eMIOuEo+qzoCDrgpjrqLjsp4Drpbwg67mg65yo66as64qUIOyLpOyImOulvCDqsJnsnYAg67Cp7Iud7Jy866GcIOuqqOuTiCDroZzrk5wg7Iuc7KCQ7JeQIOyeoeuKlOuLpC5cbmZvciAoY29uc3QgbW9kZWwgb2YgRkFCTEVfRkFNSUxZX01PREVMUykge1xuICBpZiAoIU9ORV9NSUxMSU9OX0NPTlRFWFRfTU9ERUxTLmhhcyhtb2RlbCkgfHwgIUFEQVBUSVZFX1RISU5LSU5HX01PREVMUy5oYXMobW9kZWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbaW52YXJpYW50XSBGYWJsZSBmYW1pbHkgbW9kZWwgbWlzc2luZyBmcm9tIDFNL2FkYXB0aXZlIHNldDogJHttb2RlbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHMxTUNvbnRleHQobW9kZWw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9ORV9NSUxMSU9OX0NPTlRFWFRfTU9ERUxTLmhhcyhjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ0xJX09ORV9NSUxMSU9OX1NVRkZJWF9NT0RFTFMuaGFzKGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKSk7XG59XG5cbi8vIHFncmlkIOqwgCBhZGFwdGl2ZSB0aGlua2luZyDsnYQg67O07KG07ZWY64qUIOuqqOuNuOyduOyngCDtjJDrs4TtlZzri6QuIOuCmOuouOyngCDrqqjrjbjsnYAg6riw7KG0XG4vLyDsoIDruYTsmqkv67mE7LaU66GgIOqyveuhnOulvCDsnKDsp4DtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gdXNlc0FkYXB0aXZlVGhpbmtpbmcobW9kZWw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFEQVBUSVZFX1RISU5LSU5HX01PREVMUy5oYXMoY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpKTtcbn1cblxuLy8g6rWs64+FIHVzYWdlIOydmCBGYWJsZSDsoITsmqkgN+ydvCDrsoTtgrfsnYQgcXVvdGEg7YyQ7KCV7JeQIO2PrO2VqO2VoOyngCDqsrDsoJXtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gaXNGYWJsZUZhbWlseU1vZGVsKG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBGQUJMRV9GQU1JTFlfTU9ERUxTLmhhcyhjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChtb2RlbD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoIWhhc09uZU1pbGxpb25TdWZmaXgobW9kZWwpKSByZXR1cm47XG4gIGNvbnN0IGNhbm9uaWNhbCA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKTtcbiAgaWYgKCFzdXBwb3J0czFNQ29udGV4dChjYW5vbmljYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBbnRocm9waWMgMU0gbW9kZWwgc3VmZml4OiAke21vZGVsfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBLE1BQWEsMEJBQTBCO0FBRXZDLE1BQWEsMkJBQTJCO0FBRXhDLE1BQWEsdUJBQXVCO0FBRXBDLE1BQWEsNEJBQTRCO0FBRXpDLE1BQWEsNkJBQTZCO0NBQUM7Q0FBVztDQUFvQjtBQUFlO0FBQ3pGLE1BQU0sd0JBQXdCO0FBSzlCLFNBQWdCLG1CQUFtQixTQUF5QjtDQUMxRCxPQUFPLEdBQUcsMEJBQTBCLEdBQUc7QUFDekM7QUFNQSxTQUFnQix3QkFBd0IsT0FBd0I7Q0FDOUQsTUFBTSxNQUFNLFNBQUE7Q0FFWixRQUR3QixJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUssSUFDN0QsQ0FBZ0IsUUFBUSx1QkFBdUIsRUFBRTtBQUMxRDtBQUVBLFNBQWdCLG9CQUFvQixPQUF5QjtDQUMzRCxPQUFPLFVBQVUsVUFBYSxzQkFBc0IsS0FBSyxLQUFLO0FBQ2hFO0FBSUEsTUFBTSw2Q0FBNkIsSUFBSSxJQUFJO0NBQ3pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0YsQ0FBQztBQUVELE1BQU0sZ0RBQWdDLElBQUksSUFBSSxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQztBQUl0RixNQUFNLDJDQUEyQixJQUFJLElBQUk7Q0FDdkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0YsQ0FBQztBQUtELE1BQU0sc0NBQXNCLElBQUksSUFBSSxDQUFDLG9CQUFvQixnQkFBZ0IsQ0FBQztBQU0xRSxLQUFLLE1BQU0sU0FBUywrQkFDbEIsSUFBSSxDQUFDLDJCQUEyQixJQUFJLEtBQUssR0FDdkMsTUFBTSxJQUFJLE1BQU0sdURBQXVELE9BQU87QUFLbEYsS0FBSyxNQUFNLFNBQVMscUJBQ2xCLElBQUksQ0FBQywyQkFBMkIsSUFBSSxLQUFLLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxLQUFLLEdBQy9FLE1BQU0sSUFBSSxNQUFNLGdFQUFnRSxPQUFPO0FBSTNGLFNBQWdCLGtCQUFrQixPQUF5QjtDQUN6RCxPQUFPLDJCQUEyQixJQUFJLHdCQUF3QixLQUFLLENBQUM7QUFDdEU7QUFFQSxTQUFnQixpQkFBaUIsT0FBeUI7Q0FDeEQsT0FBTyw4QkFBOEIsSUFBSSx3QkFBd0IsS0FBSyxDQUFDO0FBQ3pFO0FBSUEsU0FBZ0IscUJBQXFCLE9BQXlCO0NBQzVELE9BQU8seUJBQXlCLElBQUksd0JBQXdCLEtBQUssQ0FBQztBQUNwRTtBQUdBLFNBQWdCLG1CQUFtQixPQUF5QjtDQUMxRCxPQUFPLG9CQUFvQixJQUFJLHdCQUF3QixLQUFLLENBQUM7QUFDL0Q7QUFFQSxTQUFnQixnQ0FBZ0MsT0FBc0I7Q0FDcEUsSUFBSSxDQUFDLG9CQUFvQixLQUFLLEdBQUc7Q0FFakMsSUFBSSxDQUFDLGtCQURhLHdCQUF3QixLQUNuQixDQUFTLEdBQzlCLE1BQU0sSUFBSSxNQUFNLDBDQUEwQyxPQUFPO0FBRXJFIn0=
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWNvbnN0YW50cy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9hbnRocm9waWMtY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW50aHJvcGljKENsYXVkZSkgcHJvdmlkZXIg7IOB7IiYLlxuICpcbiAqIENsYXVkZSBDb2RlIENMSSDtlIzrnpjqt7gvZW52IOqzhOyVveydhCBBbnRocm9waWMgZGlzcGF0Y2hlciDsmqnsnLzroZwg6rOg7KCV7ZWc64ukOlxuICogIC0gYC0tbm8tc2Vzc2lvbi1wZXJzaXN0ZW5jZWAg7KCc6rGwICjrqYDti7DthLQg7ZWE7IiYKS5cbiAqICAtIGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmAg7LaU6rCAIChzdGRpbiDsnLzroZwg7J6F66ClIOyWtOuMke2EsCBKU09OTCDtnZjrprwpLlxuICogIC0gQW50aHJvcGljIOqyveuhnOuKlCDrp6Qg7Zi47LacIGAtLXNlc3Npb24taWRgIOuhnCBmcmVzaCBzZXNzaW9uIOydhCDrsJzquIntlZzri6QuXG4gKi9cblxuLy8gQ0MgLS1tb2RlbCDtlIzrnpjqt7jqsIAg67Cb64qUIG9mZmljaWFsIG1vZGVsIGlkIChhbGlhcyBcInNvbm5ldFwiIOqwgCDslYTri4jrnbwg7KCV7ZmV7ZWcIOyLneuzhOyekOuhnCDqs6DsoJUpLlxuLy8gY2xhdWRlLWFwaSDsiqTtgqwg7ZmV7J24OiBTb25uZXQgNC42IG9mZmljaWFsIGlkID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiICjrgqDsp5wgc3VmZml4IOyXhuydjCkuXG4vLyBtb2RlbC1jb3N0IO2FjOydtOu4lOyXkOuPhCBcImNsYXVkZS1zb25uZXQtNC02XCIg7YKkIOyhtOyerFxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiO1xuXG4vLyBPcGVuQUkgcHJvdmlkZXIg6riw67O46rCSKG9wZW5haS1kaXNwYXRjaGVyIERFRkFVTFRfRUZGT1JUKeqzvCDrp57stpjri6QuIO2BtOudvOqwgCBlZmZvcnQg66+47KeA7KCVIOyLnCDslYjsoITrp50uXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0RFRkFVTFRfRUZGT1JUID0gXCJsb3dcIjtcblxuLy8gcHJvamVjdCBzY29wZSBjd2QgKHNldHRpbmdzLmpzb24g6rKp66asKS4g7Yag7YGw67OEIOqyqeumrOuKlCBDTEFVREVfQ09ORklHX0RJUiDroZwg7ZWc64ukLlxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19DTEFVREVfQ1dEID0gXCIvdG1wL3FncmlkLWFudGhyb3BpY1wiO1xuXG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg7J2YIOuyoOydtOyKpC4g7Iuk7KCcIOqyveuhnOuKlCBgJHtCQVNFfS8ke3Rva2VuSWR9YCAoUjEwIOqyqeumrCkuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NPTkZJR19ESVJfQkFTRSA9IFwiL3RtcC9xZ3JpZC1hbnRocm9waWMtY29uZmlnXCI7XG5cbi8vIENDIOqwgCDsnpDrj5kg7Zmc7ISx7ZmU7ZWY64qUIGRlZmVycmVkIOuPhOq1rCDigJQg7Yag7YGwIOy1nOygge2ZlCDsnITtlbQgZGlzcGF0Y2hlciDqsr3roZzsl5DshJwg7LCo64uoLlxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTID0gW1wiTW9uaXRvclwiLCBcIlB1c2hOb3RpZmljYXRpb25cIiwgXCJSZW1vdGVUcmlnZ2VyXCJdIGFzIGNvbnN0O1xuY29uc3QgT05FX01JTExJT05fU1VGRklYX1JFID0gL1xcWzFtXFxdJC9pO1xuXG4vLyDthqDtgbDrs4QgQ0xBVURFX0NPTkZJR19ESVIg6rK966GcIOq3nOy5mShSMTAg6rKp66asIOqzhOyVvSkuIHRva2VuSWQg67OE66GcIOu2hOumrOuQmOyWtCwg6rCZ7J2AIGNsYXVkZSBzZXNzaW9uLWlkXG4vLyDrnbzrj4Qg64uk66W4IO2GoO2BsOydtOuptCDri6TrpbggY29uZmlnIGRpciDihpIgdHJhbnNjcmlwdCDqsIAg7ISe7J207KeAIOyViuuKlOuLpC4g67aA7IiY7Zqo6rO8IOyXhuuKlCDsiJzsiJgg7ZWo7IiY6528XG4vLyDqsqnrpqwg6rOE7JW97J2EIOuLqOychCDthYzsiqTtirjroZwg6rOg7KCV7ZWgIOyImCDsnojri6QoVTYgUjEwIOq1rOyhsCDqsoDspp0pLiDsi6TsoJwgZGlyIOyDneyEseydgCBlbnN1cmVDb25maWdEaXIg6rCAIO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBhbnRocm9waWNDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0FOVEhST1BJQ19DT05GSUdfRElSX0JBU0V9LyR7dG9rZW5JZH1gO1xufVxuXG4vLyBtb2RlbCBpZCDrpbwgY2Fub25pY2FsKHByb3ZpZGVyIHByZWZpeCDsl4bripQgQ0xJL2Nvc3Qg7YKkKSDroZwg7KCV6rec7ZmUXG4vLyBhaS1zZGsg64qUICdhbnRocm9waWMvY2xhdWRlLSonIO2Yle2DnOuhnCDrs7TrgrTripTrjbAsIHByZWZpeCDqsIAgY2FsY3VsYXRlQ29zdFVzZCDsl5Ag7IOI66m0IGNvc3Qg6rCAXG4vLyBkZWZhdWx0IOuLqOqwgOuhnCDsmKTqs4TsgrDrkJzri6QuIGBbMW1dYCBzdWZmaXgg64+EIENMSSBlbWl0IOyghOyaqeydtOudvFxuLy8gYmFzZSBjYW5vbmljYWwg7JeQ7ISc64qUIOygnOqxsO2VnOuLpC4g66+47KeA7KCV7J2066m0IGRlZmF1bHQuXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByYXcgPSBtb2RlbCB8fCBBTlRIUk9QSUNfREVGQVVMVF9NT0RFTDtcbiAgY29uc3Qgd2l0aG91dFByb3ZpZGVyID0gcmF3LmluY2x1ZGVzKFwiL1wiKSA/IHJhdy5zcGxpdChcIi9cIikucG9wKCkhIDogcmF3O1xuXG4gIHJldHVybiB3aXRob3V0UHJvdmlkZXIucmVwbGFjZShPTkVfTUlMTElPTl9TVUZGSVhfUkUsIFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzT25lTWlsbGlvblN1ZmZpeChtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kZWwgIT09IHVuZGVmaW5lZCAmJiBPTkVfTUlMTElPTl9TVUZGSVhfUkUudGVzdChtb2RlbCk7XG59XG5cbi8vIDFNIOyngOybkCDsl6zrtoDripQgQ2xhdWRlIENvZGUg64K067aA7J2YIOq0keuylOychO2VnCBwcmVmaXgg7YyQ7KCV7J20IOyVhOuLiOudvCBxZ3JpZOyXkOyEnCDtmZXsnbjtlZwgZXhhY3Qgc2V0IOycvOuhnFxuLy8g6rOg7KCV7ZWc64ukLiBvcHVzLTQtNyDsnYAg7Iuk7LihIOyghOq5jOyngCDrr7jtj6ztlaguIOyDiCDrqqjrjbgg7LaU6rCAIOyLnCDqs7Xsi50g7IKs7JaR6rO8IOyLpOygnCBDTEkg64+Z7J6R7J2EIO2ZleyduO2VnOuLpC5cbmNvbnN0IE9ORV9NSUxMSU9OX0NPTlRFWFRfTU9ERUxTID0gbmV3IFNldChbXG4gIFwiY2xhdWRlLWZhYmxlLTUtMVwiLFxuICBcImNsYXVkZS1mYWJsZS01XCIsXG4gIFwiY2xhdWRlLW9wdXMtNVwiLFxuICBcImNsYXVkZS1vcHVzLTUtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNS01XCIsXG4gIFwiY2xhdWRlLXNvbm5ldC01XCIsXG4gIFwiY2xhdWRlLWhhaWt1LTUtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNC02XCIsXG4gIFwiY2xhdWRlLW9wdXMtNC02XCIsXG4gIFwiY2xhdWRlLW9wdXMtNC04XCIsXG5dKTtcblxuY29uc3QgQ0xJX09ORV9NSUxMSU9OX1NVRkZJWF9NT0RFTFMgPSBuZXcgU2V0KFtcImNsYXVkZS1zb25uZXQtNC02XCIsIFwiY2xhdWRlLW9wdXMtNC02XCJdKTtcblxuLy8gUHJlc2VydmUgdGhlc2UgZGVmYXVsdHMgd2hlbiB0aGlua2luZyBpcyBvbWl0dGVkLiBUaGlzIGlzIG5vdCBhbiBvZmYtY2FwYWJpbGl0eSBsaXN0OlxuLy8gZXhwbGljaXQgZmFsc2Ugc3VwcG9ydHMgT3B1cyA1LCBhbmQgbmF0aXZlIGV4dHJhLWJvZHkgZGVsaXZlcnkgc3VwcG9ydHMgSGFpa3UgNS41XG4vLyAoZGlzYWJsZWQpIGFuZCBTb25uZXQgNS41IChiZXR3ZWVuX3Rvb2xzKS4gU2VlIGFudGhyb3BpYy10aGlua2luZy50cy5cbmNvbnN0IEFEQVBUSVZFX1RISU5LSU5HX01PREVMUyA9IG5ldyBTZXQoW1xuICBcImNsYXVkZS1mYWJsZS01LTFcIixcbiAgXCJjbGF1ZGUtZmFibGUtNVwiLFxuICBcImNsYXVkZS1vcHVzLTVcIixcbiAgXCJjbGF1ZGUtb3B1cy01LTVcIixcbiAgXCJjbGF1ZGUtc29ubmV0LTUtNVwiLFxuICBcImNsYXVkZS1oYWlrdS01LTVcIixcbl0pO1xuXG4vLyBGYWJsZSDqs4Tsl7Q6IOq1rOuPhSDtlIzrnpzsl5DshJwgdXNhZ2UgY3JlZGl0cyDqsIAg7ZWE7JqU7ZWcIOy1nOyDgeychCDti7DslrQuIOq1rOuPhSB1c2FnZSBBUEkg7J2YXG4vLyBgc2V2ZW5fZGF5X292ZXJhZ2VfaW5jbHVkZWRgIOuyhO2Ct+ydgCDsnbQg6rOE7Je07JeQ66eMIOyggeyaqeuQmOuvgOuhnCBxdW90YSB0aHJlc2hvbGQg7YyQ7KCV7J20IOywuOyhsO2VnOuLpC5cbi8vIE15dGhvcyDripQgUHJvamVjdCBHbGFzc3dpbmcg7KGw7KeBIOyghOyaqeydtOudvCDqtazrj4Ug7Yag7YGwIOqyveuhnOyXkOyEnCDrj4Tri6ztlaAg7IiYIOyXhuyWtCDtj6ztlajtlZjsp4Ag7JWK64qU64ukLlxuY29uc3QgRkFCTEVfRkFNSUxZX01PREVMUyA9IG5ldyBTZXQoW1wiY2xhdWRlLWZhYmxlLTUtMVwiLCBcImNsYXVkZS1mYWJsZS01XCJdKTtcblxuLy8g67aI67OAIOqzhOyVvTogc3VmZml4IOqwgCDtlYTsmpTtlZwg66qo64247J2AIOuwmOuTnOyLnCAxTSDsp4Dsm5Ag66qo64247J2YIOu2gOu2hOynke2VqeydtOyWtOyVvCDtlZzri6QuIOyXreuwqe2WpSDrtojsnbzsuZgoc3VmZml4XG4vLyDrjIDsg4HsnbjrjbAg7KeA7JuQIOynke2VqeyXlCDsl4bsnYwp66m0IG5lZWRzQ2xpMW1TdWZmaXg9dHJ1ZcK3c3VwcG9ydHMxTUNvbnRleHQ9ZmFsc2Ug6rCAIOuPmeyLnOyXkCDrgpjshJxcbi8vIGAtLW1vZGVsIFsxbV1gIOqzvCBESVNBQkxFXzFNIGVudiDqsIAg66qo7Iic65CY6rKMIOu2meuKlOuLpC4g7IOIIOuqqOuNuOydhCDtlZzsqr0gU2V0IOyXkOunjCDrhKPripQg7Iuk7IiY66W8IOuqqOuTiFxuLy8g66Gc65OcIOyLnOygkOyXkCDsnqHripTri6QuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIENMSV9PTkVfTUlMTElPTl9TVUZGSVhfTU9ERUxTKSB7XG4gIGlmICghT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMuaGFzKG1vZGVsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW2ludmFyaWFudF0gQ0xJIDFNIHN1ZmZpeCBtb2RlbCBub3QgaW4gY29udGV4dCBzZXQ6ICR7bW9kZWx9YCk7XG4gIH1cbn1cblxuLy8gRmFibGUg6rOE7Je07J2AIOqzteyLnSDsgqzslpHsg4EgMU0g6riw67O4IOy7qO2FjeyKpO2KuCArIGFkYXB0aXZlIHRoaW5raW5nIO2VhOyImOuLpC4g7IOIIEZhYmxlIOuyhOyghOydhCDqs4Tsl7QgU2V0XG4vLyDsl5Drp4wg64Sj6rOgIOuCmOuouOyngOulvCDruaDrnKjrpqzripQg7Iuk7IiY66W8IOqwmeydgCDrsKnsi53snLzroZwg66qo65OIIOuhnOuTnCDsi5zsoJDsl5Ag7J6h64qU64ukLlxuZm9yIChjb25zdCBtb2RlbCBvZiBGQUJMRV9GQU1JTFlfTU9ERUxTKSB7XG4gIGlmICghT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMuaGFzKG1vZGVsKSB8fCAhQURBUFRJVkVfVEhJTktJTkdfTU9ERUxTLmhhcyhtb2RlbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFtpbnZhcmlhbnRdIEZhYmxlIGZhbWlseSBtb2RlbCBtaXNzaW5nIGZyb20gMU0vYWRhcHRpdmUgc2V0OiAke21vZGVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0czFNQ29udGV4dChtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMuaGFzKGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc0NsaTFtU3VmZml4KG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDTElfT05FX01JTExJT05fU1VGRklYX01PREVMUy5oYXMoY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpKTtcbn1cblxuLy8gcWdyaWQg6rCAIGFkYXB0aXZlIHRoaW5raW5nIOydhCDrs7TsobTtlZjripQg66qo64247J247KeAIO2MkOuzhO2VnOuLpC4g64KY66i47KeAIOuqqOuNuOydgCDquLDsobRcbi8vIOyggOu5hOyaqS/ruYTstpTroaAg6rK966Gc66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiB1c2VzQWRhcHRpdmVUaGlua2luZyhtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQURBUFRJVkVfVEhJTktJTkdfTU9ERUxTLmhhcyhjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCkpO1xufVxuXG4vLyDqtazrj4UgdXNhZ2Ug7J2YIEZhYmxlIOyghOyaqSA37J28IOuyhO2Ct+ydhCBxdW90YSDtjJDsoJXsl5Ag7Y+s7ZWo7ZWg7KeAIOqysOygle2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZhYmxlRmFtaWx5TW9kZWwobW9kZWw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEZBQkxFX0ZBTUlMWV9NT0RFTFMuaGFzKGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KG1vZGVsPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghaGFzT25lTWlsbGlvblN1ZmZpeChtb2RlbCkpIHJldHVybjtcbiAgY29uc3QgY2Fub25pY2FsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpO1xuXG4gIGlmICghc3VwcG9ydHMxTUNvbnRleHQoY2Fub25pY2FsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQW50aHJvcGljIDFNIG1vZGVsIHN1ZmZpeDogJHttb2RlbH1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxNQUFhLDBCQUEwQjtBQUd2QyxNQUFhLDJCQUEyQjtBQUd4QyxNQUFhLHVCQUF1QjtBQUdwQyxNQUFhLDRCQUE0QjtBQUd6QyxNQUFhLDZCQUE2QjtDQUFDO0NBQVc7Q0FBb0I7QUFBZTtBQUN6RixNQUFNLHdCQUF3QjtBQUs5QixTQUFnQixtQkFBbUIsU0FBeUI7Q0FDMUQsT0FBTyxHQUFHLDBCQUEwQixHQUFHO0FBQ3pDO0FBTUEsU0FBZ0Isd0JBQXdCLE9BQXdCO0NBQzlELE1BQU0sTUFBTSxTQUFBO0NBR1osUUFGd0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFLLElBRTdELENBQWdCLFFBQVEsdUJBQXVCLEVBQUU7QUFDMUQ7QUFFQSxTQUFnQixvQkFBb0IsT0FBeUI7Q0FDM0QsT0FBTyxVQUFVLFVBQWEsc0JBQXNCLEtBQUssS0FBSztBQUNoRTtBQUlBLE1BQU0sNkNBQTZCLElBQUksSUFBSTtDQUN6QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNGLENBQUM7QUFFRCxNQUFNLGdEQUFnQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsaUJBQWlCLENBQUM7QUFLdEYsTUFBTSwyQ0FBMkIsSUFBSSxJQUFJO0NBQ3ZDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNGLENBQUM7QUFLRCxNQUFNLHNDQUFzQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsZ0JBQWdCLENBQUM7QUFNMUUsS0FBSyxNQUFNLFNBQVMsK0JBQ2xCLElBQUksQ0FBQywyQkFBMkIsSUFBSSxLQUFLLEdBQ3ZDLE1BQU0sSUFBSSxNQUFNLHVEQUF1RCxPQUFPO0FBTWxGLEtBQUssTUFBTSxTQUFTLHFCQUNsQixJQUFJLENBQUMsMkJBQTJCLElBQUksS0FBSyxLQUFLLENBQUMseUJBQXlCLElBQUksS0FBSyxHQUMvRSxNQUFNLElBQUksTUFBTSxnRUFBZ0UsT0FBTztBQUkzRixTQUFnQixrQkFBa0IsT0FBeUI7Q0FDekQsT0FBTywyQkFBMkIsSUFBSSx3QkFBd0IsS0FBSyxDQUFDO0FBQ3RFO0FBRUEsU0FBZ0IsaUJBQWlCLE9BQXlCO0NBQ3hELE9BQU8sOEJBQThCLElBQUksd0JBQXdCLEtBQUssQ0FBQztBQUN6RTtBQUlBLFNBQWdCLHFCQUFxQixPQUF5QjtDQUM1RCxPQUFPLHlCQUF5QixJQUFJLHdCQUF3QixLQUFLLENBQUM7QUFDcEU7QUFHQSxTQUFnQixtQkFBbUIsT0FBeUI7Q0FDMUQsT0FBTyxvQkFBb0IsSUFBSSx3QkFBd0IsS0FBSyxDQUFDO0FBQy9EO0FBRUEsU0FBZ0IsZ0NBQWdDLE9BQXNCO0NBQ3BFLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxHQUFHO0NBR2pDLElBQUksQ0FBQyxrQkFGYSx3QkFBd0IsS0FFbkIsQ0FBUyxHQUM5QixNQUFNLElBQUksTUFBTSwwQ0FBMEMsT0FBTztBQUVyRSJ9
|
|
@@ -3,6 +3,7 @@ import { serializeAndValidateDispatchSchema } from "../common/schema-validation.
|
|
|
3
3
|
import { QuotaThresholdExceededError } from "../../../application/qgrid/qgrid.types.js";
|
|
4
4
|
import { TokenModel } from "../../../application/token/token.model.js";
|
|
5
5
|
import { SmoothWeightedRoundRobin } from "../common/smooth-weighted-round-robin.js";
|
|
6
|
+
import { AnthropicCredentials } from "../../../application/token/token.types.js";
|
|
6
7
|
import { invalidateAnthropicQuotaUsage } from "../../../application/qgrid/oauth.js";
|
|
7
8
|
import { assertSupportedOneMillionSuffix, canonicalAnthropicModel } from "./anthropic-constants.js";
|
|
8
9
|
import { readAnthropicQuotaUsage } from "./anthropic-quota.js";
|
|
@@ -23,10 +24,15 @@ var AnthropicDispatcher = class {
|
|
|
23
24
|
inFlight = 0;
|
|
24
25
|
async start() {
|
|
25
26
|
(await TokenModel.findActiveByProvider("A", "anthropic")).forEach((t) => {
|
|
27
|
+
const credentials = AnthropicCredentials.safeParse(t.credentials);
|
|
28
|
+
if (!credentials.success) {
|
|
29
|
+
logger.warn(`skipping token ${t.name}: credentials are not Anthropic OAuth credentials`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
26
32
|
this.tokenPool.set(t.id, {
|
|
27
33
|
id: t.id,
|
|
28
34
|
name: t.name,
|
|
29
|
-
credentials:
|
|
35
|
+
credentials: credentials.data,
|
|
30
36
|
quotaThreshold: t.quota_threshold,
|
|
31
37
|
weight: t.weight
|
|
32
38
|
});
|
|
@@ -101,7 +107,7 @@ var AnthropicDispatcher = class {
|
|
|
101
107
|
eligible: rows,
|
|
102
108
|
overThresholdTokens: []
|
|
103
109
|
};
|
|
104
|
-
const eligibleIds = new Set(rows.
|
|
110
|
+
const eligibleIds = new Set(rows.flatMap((token) => this.hasQuotaThreshold(token) ? [] : [token.id]));
|
|
105
111
|
const overThresholdTokens = [];
|
|
106
112
|
(await Promise.allSettled(thresholded.map(async (token) => ({
|
|
107
113
|
token,
|
|
@@ -160,7 +166,7 @@ var AnthropicDispatcher = class {
|
|
|
160
166
|
cb.onThreadId?.(result.threadCoord.threadId);
|
|
161
167
|
cb.onComplete(result);
|
|
162
168
|
} catch (e) {
|
|
163
|
-
cb.onError(e);
|
|
169
|
+
cb.onError(e instanceof Error ? e : new Error(String(e)));
|
|
164
170
|
}
|
|
165
171
|
}
|
|
166
172
|
async run(req, onDelta, opts) {
|
|
@@ -184,7 +190,7 @@ var AnthropicDispatcher = class {
|
|
|
184
190
|
credentials: token.credentials
|
|
185
191
|
});
|
|
186
192
|
} catch (e) {
|
|
187
|
-
logger.warn(`refresh failed for ${token.name}: ${e.message}`);
|
|
193
|
+
logger.warn(`refresh failed for ${token.name}: ${e instanceof Error ? e.message : String(e)}`);
|
|
188
194
|
}
|
|
189
195
|
logger.info(`→ ${token.name} (model: ${model})`);
|
|
190
196
|
const session = await runClaudeSession({
|
|
@@ -236,4 +242,4 @@ var AnthropicDispatcher = class {
|
|
|
236
242
|
//#endregion
|
|
237
243
|
export { AnthropicDispatcher };
|
|
238
244
|
|
|
239
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDsmpTssq3rp4jri6Qg7IOIIENsYXVkZSDtlITroZzshLjsiqTsl5Ag7KCE7LK0IOuMgO2ZlCDsnbTroKXsnYQg7KCE64us7ZWc64ukLlxuICog67CY7ZmY7ZWcIHRocmVhZENvb3Jk64qUIOuLpOydjCDsmpTssq3snZgg7IS47IWYIOyerOyCrOyaqeydtOuCmCDthqDtgbAg7ISg7YOd7JeQIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyBnZXRFeHBpcmVzQXQsIGdldFJlZnJlc2hUb2tlbiB9IGZyb20gXCIuLi9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXF1ZXN0LFxuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzLFxuICB0eXBlIFByb3ZpZGVyRGlzcGF0Y2hlcixcbn0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVBbmRWYWxpZGF0ZURpc3BhdGNoU2NoZW1hIH0gZnJvbSBcIi4uL2NvbW1vbi9zY2hlbWEtdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluIH0gZnJvbSBcIi4uL2NvbW1vbi9zbW9vdGgtd2VpZ2h0ZWQtcm91bmQtcm9iaW5cIjtcbmltcG9ydCB7IGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgsIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsIH0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgaW52YWxpZGF0ZUFudGhyb3BpY1F1b3RhVXNhZ2UsIHJlYWRBbnRocm9waWNRdW90YVVzYWdlIH0gZnJvbSBcIi4vYW50aHJvcGljLXF1b3RhXCI7XG5pbXBvcnQgeyBhc3NlcnRBbnRocm9waWNUaGlua2luZ1J1bnRpbWUsIHJlc29sdmVBbnRocm9waWNUaGlua2luZyB9IGZyb20gXCIuL2FudGhyb3BpYy10aGlua2luZ1wiO1xuaW1wb3J0IHsgbWFrZUFudGhyb3BpY1dvcmtlcklkLCBydW5DbGF1ZGVTZXNzaW9uIH0gZnJvbSBcIi4vY2xhdWRlLXNlc3Npb25cIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiYW50aHJvcGljLWRpc3BhdGNoZXJcIl0pO1xuXG4vLyAxTSBjb250ZXh0IOyDneyEseydgCAxMDDstIgg7J207IOBIOqxuOumtCDsiJgg7J6I64ukLlxuY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gMjQwXzAwMDtcbmNvbnN0IFJFRlJFU0hfU0FGRVRZX01TID0gNjBfMDAwO1xuXG5pbnRlcmZhY2UgUG9vbGVkVG9rZW4ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscztcbiAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsO1xuICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEFudGhyb3BpY0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBQcm92aWRlckRpc3BhdGNoZXIge1xuICB0b2tlblBvb2wgPSBuZXcgTWFwPG51bWJlciwgUG9vbGVkVG9rZW4+KCk7XG4gIHJlYWRvbmx5IHdlaWdodGVkU2VsZWN0b3IgPSBuZXcgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluKCk7XG4gIGluRmxpZ2h0ID0gMDtcblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBOT1RJRlnripQg6riw7KG0IO2GoO2BsOydhCDsnqzsoITshqHtlZjsp4Ag7JWK7Jy866+A66GcIOyLnOyekSDsi5wgRELsl5DshJwg7J2964qU64ukLlxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpO1xuICAgIHRva2Vucy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0aGlzLnRva2VuUG9vbC5zZXQodC5pZCwge1xuICAgICAgICBpZDogdC5pZCxcbiAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogdC5jcmVkZW50aWFscyBhcyBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHQucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHQud2VpZ2h0LFxuICAgICAgfSk7XG4gICAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4odC5pZCwgdC53ZWlnaHQpO1xuICAgICAgbG9nZ2VyLmluZm8oYHdvcmtlciBzcGF3bmVkOiAke3QubmFtZX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbLi4udGhpcy50b2tlblBvb2wua2V5cygpXTtcbiAgICB0b2tlbklkcy5mb3JFYWNoKChpZCkgPT4gdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKSk7XG4gICAgdGhpcy50b2tlblBvb2wuY2xlYXIoKTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVzZXRTY29yZXMoKTtcbiAgfVxuXG4gIC8vIExJU1RFTi9OT1RJRlkg7Jew6rKw7J20IOuBiuq4tCDrj5nslYgg64aT7LmcIOuzgOqyveydhCBEQiDquLDspIDsnLzroZwg66ee7LaY64ukLlxuICByZXBsYWNlVG9rZW5zKFxuICAgIHJvd3M6IEFycmF5PHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gICAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGw7XG4gICAgICB3ZWlnaHQ6IG51bWJlcjtcbiAgICB9PixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBTZXQocm93cy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICAvLyDsgq3soJztlaAg7YKk64qUIOyInO2ajCDsoITsl5Ag7Iqk64OF7IO37ZWc64ukLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5Qb29sLmtleXMoKSk7XG4gICAgY3VycmVudElkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgaWYgKCFuZXh0LmhhcyhpZCkpIHRoaXMub25Ub2tlblJlbW92ZWQoaWQpO1xuICAgIH0pO1xuICAgIHJvd3MuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKHRoaXMudG9rZW5Qb29sLmhhcyhyLmlkKSkge1xuICAgICAgICB0aGlzLm9uVG9rZW5VcGRhdGVkKHIuaWQsIHIubmFtZSwgci5jcmVkZW50aWFscywgci5xdW90YVRocmVzaG9sZCwgci53ZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vblRva2VuQWRkZWQoci5pZCwgci5uYW1lLCByLmNyZWRlbnRpYWxzLCByLnF1b3RhVGhyZXNob2xkLCByLndlaWdodCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblRva2VuQWRkZWQoXG4gICAgaWQ6IG51bWJlcixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHM6IEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbCxcbiAgICB3ZWlnaHQgPSAxLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuUG9vbC5zZXQoaWQsIHsgaWQsIG5hbWUsIGNyZWRlbnRpYWxzLCBxdW90YVRocmVzaG9sZCwgd2VpZ2h0IH0pO1xuICAgIHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZXRUb2tlbihpZCwgd2VpZ2h0KTtcbiAgfVxuXG4gIG9uVG9rZW5VcGRhdGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuUmVtb3ZlZChpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuZGVsZXRlKGlkKTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVtb3ZlVG9rZW4oaWQpO1xuICB9XG5cbiAgLy8g7KeA7KCVIOyalOyyreydgCDtlbTri7kg7Yag7YGw66eMIHF1b3RhIO2MkOygle2VmOqzoCB3ZWlnaHRlZCDsg4Htg5zrpbwg6rG065Oc66as7KeAIOyViuuKlOuLpC5cbiAgLy8g66+47KeA7KCVIOyalOyyreunjCBxdW90YSDthrXqs7wg7ZuE67O066GcIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDsnYQg7KeE7ZaJ7ZWc64ukLlxuICBhc3luYyBzZWxlY3RUb2tlbihtb2RlbDogc3RyaW5nLCBwcmVmZXJyZWRUb2tlbklkPzogbnVtYmVyKTogUHJvbWlzZTxQb29sZWRUb2tlbiB8IG51bGw+IHtcbiAgICBjb25zdCBwcmVmZXJyZWQgPVxuICAgICAgcHJlZmVycmVkVG9rZW5JZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy50b2tlblBvb2wuZ2V0KHByZWZlcnJlZFRva2VuSWQpO1xuICAgIGlmIChwcmVmZXJyZWRUb2tlbklkICE9PSB1bmRlZmluZWQgJiYgIXByZWZlcnJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcmVmZXJyZWQgYW50aHJvcGljIHRva2VuICR7cHJlZmVycmVkVG9rZW5JZH0gaXMgbm90IGF2YWlsYWJsZWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSBwcmVmZXJyZWQgPyBbcHJlZmVycmVkXSA6IFsuLi50aGlzLnRva2VuUG9vbC52YWx1ZXMoKV07XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IGVsaWdpYmxlLCBvdmVyVGhyZXNob2xkVG9rZW5zIH0gPSBhd2FpdCB0aGlzLmZpbHRlckVsaWdpYmxlVG9rZW5zKHJvd3MsIG1vZGVsKTtcbiAgICBpZiAoZWxpZ2libGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIud2FybihcInF1b3RhX3RocmVzaG9sZCBnYXRlOiBhbGxfZXhjZWVkZWRcIiwge1xuICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgdG9rZW5Db3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgIHRocmVzaG9sZGVkVG9rZW5Db3VudDogcm93cy5maWx0ZXIoKHIpID0+IHRoaXMuaGFzUXVvdGFUaHJlc2hvbGQocikpLmxlbmd0aCxcbiAgICAgICAgb3ZlclRocmVzaG9sZFRva2VucyxcbiAgICAgICAgcmVhc29uOiBcImFsbF9leGNlZWRlZFwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gb3ZlclRocmVzaG9sZFRva2Vuc1xuICAgICAgICAubWFwKCh0b2tlbikgPT4gYCR7dG9rZW4udG9rZW5OYW1lfSAodGhyZXNob2xkICR7dG9rZW4udGhyZXNob2xkfSUpYClcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIHRocm93IG5ldyBRdW90YVRocmVzaG9sZEV4Y2VlZGVkRXJyb3IoXG4gICAgICAgIGRldGFpbHNcbiAgICAgICAgICA/IGBBbGwgYW50aHJvcGljIHRva2VucyBleGNlZWRlZCBxdW90YSB0aHJlc2hvbGQ6ICR7ZGV0YWlsc31gXG4gICAgICAgICAgOiBcIkFsbCBhbnRocm9waWMgdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJlZmVycmVkKSByZXR1cm4gcHJlZmVycmVkO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZWxlY3QobmV3IFNldChlbGlnaWJsZS5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCkpKTtcbiAgICBpZiAoc2VsZWN0ZWRJZCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLmdldChzZWxlY3RlZElkKSA/PyBudWxsO1xuICB9XG5cbiAgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMoXG4gICAgcm93czogUG9vbGVkVG9rZW5bXSxcbiAgICBtb2RlbDogc3RyaW5nLFxuICApOiBQcm9taXNlPHtcbiAgICBlbGlnaWJsZTogUG9vbGVkVG9rZW5bXTtcbiAgICBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PjtcbiAgfT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZGVkID0gcm93cy5maWx0ZXIoKHRva2VuKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHRva2VuKSk7XG4gICAgaWYgKHRocmVzaG9sZGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgZWxpZ2libGU6IHJvd3MsIG92ZXJUaHJlc2hvbGRUb2tlbnM6IFtdIH07XG5cbiAgICBjb25zdCBlbGlnaWJsZUlkcyA9IG5ldyBTZXQoXG4gICAgICByb3dzLmZpbHRlcigodG9rZW4pID0+ICF0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHRva2VuKSkubWFwKCh0b2tlbikgPT4gdG9rZW4uaWQpLFxuICAgICk7XG4gICAgY29uc3Qgb3ZlclRocmVzaG9sZFRva2VuczogQXJyYXk8eyB0b2tlbk5hbWU6IHN0cmluZzsgdGhyZXNob2xkOiBudW1iZXIgfT4gPSBbXTtcbiAgICBjb25zdCBjaGVja3MgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICB0aHJlc2hvbGRlZC5tYXAoYXN5bmMgKHRva2VuKSA9PiAoe1xuICAgICAgICB0b2tlbixcbiAgICAgICAgcmVzdWx0OiBhd2FpdCByZWFkQW50aHJvcGljUXVvdGFVc2FnZSh0b2tlbi5jcmVkZW50aWFscy5hY2Nlc3NUb2tlbiwgbW9kZWwpLFxuICAgICAgfSkpLFxuICAgICk7XG5cbiAgICBjaGVja3MuZm9yRWFjaCgoY2hlY2ssIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0b2tlbiA9IGNoZWNrLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiID8gdGhyZXNob2xkZWRbaW5kZXhdIDogY2hlY2sudmFsdWUudG9rZW47XG4gICAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBjaGVjay5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCJcbiAgICAgICAgICA/IGNoZWNrLnZhbHVlLnJlc3VsdFxuICAgICAgICAgIDogeyBraW5kOiBcImxvb2t1cF9mYWlsZWRcIiBhcyBjb25zdCwgcmVhc29uOiBTdHJpbmcoY2hlY2sucmVhc29uKSB9O1xuICAgICAgaWYgKHJlc3VsdC5raW5kID09PSBcImxvb2t1cF9mYWlsZWRcIikge1xuICAgICAgICBsb2dnZXIud2FybihcInF1b3RhX3RocmVzaG9sZCBnYXRlOiBsb29rdXBfZmFpbF9vcGVuXCIsIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgICAgdGhyZXNob2xkOiB0b2tlbi5xdW90YVRocmVzaG9sZCxcbiAgICAgICAgICByZWFzb246IFwibG9va3VwX2ZhaWxfb3BlblwiLFxuICAgICAgICAgIGxvb2t1cFJlYXNvbjogcmVzdWx0LnJlYXNvbixcbiAgICAgICAgfSk7XG4gICAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcInF1b3RhX3RocmVzaG9sZCBnYXRlOiBvdmVyX3RocmVzaG9sZFwiLCB7XG4gICAgICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICAgICAgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICAgIHByb3ZpZGVyOiBcImFudGhyb3BpY1wiLFxuICAgICAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICAgICAgY2FjaGVkVXRpbGl6YXRpb246IHJlc3VsdC51dGlsaXphdGlvblBjdCxcbiAgICAgICAgICBjYWNoZUFnZTogcmVzdWx0LmNhY2hlQWdlTXMsXG4gICAgICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBvdmVyVGhyZXNob2xkVG9rZW5zLnB1c2goeyB0b2tlbk5hbWU6IHRva2VuLm5hbWUsIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxpZ2libGVJZHMuYWRkKHRva2VuLmlkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGVsaWdpYmxlOiByb3dzLmZpbHRlcigodG9rZW4pID0+IGVsaWdpYmxlSWRzLmhhcyh0b2tlbi5pZCkpLCBvdmVyVGhyZXNob2xkVG9rZW5zIH07XG4gIH1cblxuICBoYXNRdW90YVRocmVzaG9sZCh0b2tlbjogUG9vbGVkVG9rZW4pOiB0b2tlbiBpcyBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdG9rZW4ucXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlKHJlcTogR2VuZXJhdGVSZXF1ZXN0KTogUHJvbWlzZTxHZW5lcmF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJ1bihyZXEsICgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlU3RyZWFtKHJlcTogR2VuZXJhdGVSZXF1ZXN0LCBjYjogR2VuZXJhdGVTdHJlYW1DYWxsYmFja3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ydW4ocmVxLCBjYi5vbkRlbHRhLCB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM6IHRydWUgfSk7XG4gICAgICBjYi5vblRocmVhZElkPy4ocmVzdWx0LnRocmVhZENvb3JkLnRocmVhZElkKTtcbiAgICAgIGNiLm9uQ29tcGxldGUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjYi5vbkVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJ1bihcbiAgICByZXE6IEdlbmVyYXRlUmVxdWVzdCxcbiAgICBvbkRlbHRhOiAodDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9wdHM/OiB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICB0aGlzLmluRmxpZ2h0Kys7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImltYWdlIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgQW50aHJvcGljIHJvdXRlXCIpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICAgICAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChyZXEubW9kZWwpO1xuICAgICAgY29uc3QgdGhpbmtpbmcgPSByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcobW9kZWwsIHJlcS50aGlua2luZywgcmVxLmVmZm9ydCk7XG4gICAgICBhc3NlcnRBbnRocm9waWNUaGlua2luZ1J1bnRpbWUodGhpbmtpbmcuZXh0cmFCb2R5KTtcbiAgICAgIGNvbnN0IGpzb25TY2hlbWEgPSBzZXJpYWxpemVBbmRWYWxpZGF0ZURpc3BhdGNoU2NoZW1hKHJlcS5vdXRwdXRTY2hlbWEsIFwiYW50aHJvcGljXCIpO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuc2VsZWN0VG9rZW4obW9kZWwsIHJlcS5wcmVmZXJyZWRUb2tlbklkKTtcbiAgICAgIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcihcIk5vIGFudGhyb3BpYyB0b2tlbnMgYXZhaWxhYmxlXCIpO1xuXG4gICAgICAvLyDrp4zro4wg7KeB7KCE7JeQIOqwseyLoO2VmOuQmCDsi6TtjKjtlZjrqbQg6riw7KG0IO2GoO2BsOycvOuhnCDsp4TtlontlZzri6QuXG4gICAgICBsZXQgYWNjZXNzVG9rZW4gPSB0b2tlbi5jcmVkZW50aWFscy5hY2Nlc3NUb2tlbjtcbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IGdldEV4cGlyZXNBdCh0b2tlbi5jcmVkZW50aWFscyk7XG4gICAgICBpZiAoXG4gICAgICAgIGV4cGlyZXNBdCAmJlxuICAgICAgICBleHBpcmVzQXQgLSBEYXRlLm5vdygpIDwgUkVGUkVTSF9TQUZFVFlfTVMgJiZcbiAgICAgICAgZ2V0UmVmcmVzaFRva2VuKHRva2VuLmNyZWRlbnRpYWxzKVxuICAgICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBRZ3JpZEZyYW1lIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5mcmFtZVwiKTtcbiAgICAgICAgICAvLyBwcm92aWRlciDrpbwg67CY65Oc7IucIOyxhOybjOyVvCByZWZyZXNoVG9rZW4g64K067aAIFRva2VuTW9kZWwuc2F2ZSDqsIAg7ISx6rO17ZWc64ukLlxuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgUWdyaWRGcmFtZS5yZWZyZXNoVG9rZW4oe1xuICAgICAgICAgICAgaWQ6IHRva2VuLmlkLFxuICAgICAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgICAgICBuYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHRva2VuLmNyZWRlbnRpYWxzLFxuICAgICAgICAgIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgUWdyaWRGcmFtZS5yZWZyZXNoVG9rZW4+WzBdKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhg4oaSICR7dG9rZW4ubmFtZX0gKG1vZGVsOiAke21vZGVsfSlgKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBydW5DbGF1ZGVTZXNzaW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICAgICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIHN5c3RlbTogcmVxLnN5c3RlbVByb21wdCxcbiAgICAgICAgICBqc29uU2NoZW1hLFxuICAgICAgICAgIGVmZm9ydDogcmVxLmVmZm9ydCxcbiAgICAgICAgICB0aGlua2luZzogcmVxLnRoaW5raW5nLFxuICAgICAgICAgIHRpbWVvdXRNczogcmVxLnRpbWVvdXRNcyA/PyBERUZBVUxUX1RJTUVPVVRfTVMsXG4gICAgICAgICAgY29sZEhpc3Rvcnk6IHJlcS5jb2xkSGlzdG9yeSxcbiAgICAgICAgICBpbnB1dDogcmVxLmNvbGRJbnB1dCxcbiAgICAgICAgICBhYm9ydFNpZ25hbDogcmVxLmFib3J0U2lnbmFsLFxuICAgICAgICAgIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM6IG9wdHM/LmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMsXG4gICAgICAgIH0sXG4gICAgICAgIG9uRGVsdGEsXG4gICAgICApO1xuXG4gICAgICBpZiAoc2Vzc2lvbi5xdW90YUV4aGF1c3RlZCkge1xuICAgICAgICBpbnZhbGlkYXRlQW50aHJvcGljUXVvdGFVc2FnZSh0b2tlbi5jcmVkZW50aWFscy5hY2Nlc3NUb2tlbik7XG4gICAgICAgIGlmIChhY2Nlc3NUb2tlbiAhPT0gdG9rZW4uY3JlZGVudGlhbHMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICBpbnZhbGlkYXRlQW50aHJvcGljUXVvdGFVc2FnZShhY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdW90YSBleGhhdXN0ZWQgKCR7dG9rZW4ubmFtZX0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Vzc2lvbi5pc0Vycm9yKSB7XG4gICAgICAgIC8vIOyiheujjCDsgqzsnKDrpbwg66i87KCAIO2RnOyLnO2VmOqzoCDsnZHri7Ug67O466y47J2AIOynhOuLqOyXkCDtlYTsmpTtlZwg66eM7YG866eMIOuCqOq4tOuLpC5cbiAgICAgICAgY29uc3QgcmVhc29uID1cbiAgICAgICAgICBzZXNzaW9uLnN1YnR5cGUgPz8gc2Vzc2lvbi50ZXJtaW5hbFJlYXNvbiA/PyAoc2Vzc2lvbi5pc0Vycm9yID8gXCJpc19lcnJvclwiIDogXCJ1bmtub3duXCIpO1xuICAgICAgICBjb25zdCBib2R5ID0gc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgPyBzZXNzaW9uLnRleHQubGVuZ3RoID4gNTAwXG4gICAgICAgICAgICA/IGAke3Nlc3Npb24udGV4dC5zbGljZSgwLCA1MDApfeKApigke3Nlc3Npb24udGV4dC5sZW5ndGh9IGNoYXJzKWBcbiAgICAgICAgICAgIDogc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgOiBgZW1wdHkgdGV4dCwgb3V0cHV0VG9rZW5zPSR7c2Vzc2lvbi51c2FnZS5vdXRwdXRUb2tlbnN9YDtcbiAgICAgICAgY29uc3QgcmVmdXNhbCA9IHNlc3Npb24ucmVmdXNhbCA/IGAgcmVmdXNhbD0ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24ucmVmdXNhbCl9YCA6IFwiXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xhdWRlIGVycm9yICgke3Rva2VuLm5hbWV9KSBbJHtyZWFzb259XTogJHtib2R5fSR7cmVmdXNhbH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogc2Vzc2lvbi50ZXh0LFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgIHVzYWdlOiBzZXNzaW9uLnVzYWdlLFxuICAgICAgICBkdXJhdGlvbk1zOiBzZXNzaW9uLmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRNczogc2Vzc2lvbi50dGZ0TXMsXG4gICAgICAgIGNvc3RVc2Q6IHNlc3Npb24uY29zdFVzZCxcbiAgICAgICAgLy8gQ2xhdWRlIENvZGXsnZgg66qo6424IGZhbGxiYWNr7J2EIOu5hOyaqcK36rCQ7IKsIOuhnOq3uOyXkCDrsJjsmIHtlZzri6QuXG4gICAgICAgIG1vZGVsOiBzZXNzaW9uLnNlcnZlZE1vZGVsID8/IG1vZGVsLFxuICAgICAgICByZXF1ZXN0ZWRNb2RlbDogbW9kZWwsXG4gICAgICAgIG1vZGVsRmFsbGJhY2tzOiBzZXNzaW9uLm1vZGVsRmFsbGJhY2tzLFxuICAgICAgICB0aHJlYWRDb29yZDoge1xuICAgICAgICAgIHdvcmtlcklkOiBtYWtlQW50aHJvcGljV29ya2VySWQodG9rZW4uaWQpLFxuICAgICAgICAgIHRocmVhZElkOiBzZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgICAgICBlcG9jaDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaW5GbGlnaHQtLTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsc0JBQXNCLENBQUM7QUFHMUQsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxvQkFBb0I7QUFVMUIsSUFBYSxzQkFBYixNQUErRDtDQUM3RCw0QkFBWSxJQUFJLElBQXlCO0NBQ3pDLG1CQUE0QixJQUFJLHlCQUF5QjtDQUN6RCxXQUFXO0NBRVgsTUFBTSxRQUF1QjtFQUczQixPQURxQixXQUFXLHFCQUFxQixLQUFLLFdBQVcsRUFDckUsQ0FBTyxTQUFTLE1BQU07R0FDcEIsS0FBSyxVQUFVLElBQUksRUFBRSxJQUFJO0lBQ3ZCLElBQUksRUFBRTtJQUNOLE1BQU0sRUFBRTtJQUNSLGFBQWEsRUFBRTtJQUNmLGdCQUFnQixFQUFFO0lBQ2xCLFFBQVEsRUFBRTtHQUNaLENBQUM7R0FDRCxLQUFLLGlCQUFpQixTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU07R0FDN0MsT0FBTyxLQUFLLG1CQUFtQixFQUFFLE1BQU07RUFDekMsQ0FBQztDQUNIO0NBRUEsTUFBTSxPQUFzQjtFQUUxQixDQURrQixHQUFHLEtBQUssVUFBVSxLQUFLLENBQ3pDLENBQUEsQ0FBUyxTQUFTLE9BQU8sS0FBSyxpQkFB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
|
|
245
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDsmpTssq3rp4jri6Qg7IOIIENsYXVkZSDtlITroZzshLjsiqTsl5Ag7KCE7LK0IOuMgO2ZlCDsnbTroKXsnYQg7KCE64us7ZWc64ukLlxuICog67CY7ZmY7ZWcIHRocmVhZENvb3Jk64qUIOuLpOydjCDsmpTssq3snZgg7IS47IWYIOyerOyCrOyaqeydtOuCmCDthqDtgbAg7ISg7YOd7JeQIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyBBbnRocm9waWNDcmVkZW50aWFscyB9IGZyb20gXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi90b2tlbi90b2tlbi50eXBlc1wiO1xuaW1wb3J0IHsgZ2V0RXhwaXJlc0F0LCBnZXRSZWZyZXNoVG9rZW4gfSBmcm9tIFwiLi4vY29tbW9uL2NyZWRlbnRpYWxzXCI7XG5pbXBvcnQge1xuICB0eXBlIEdlbmVyYXRlUmVxdWVzdCxcbiAgdHlwZSBHZW5lcmF0ZVJlc3VsdCxcbiAgdHlwZSBHZW5lcmF0ZVN0cmVhbUNhbGxiYWNrcyxcbiAgdHlwZSBQcm92aWRlckRpc3BhdGNoZXIsXG59IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQW5kVmFsaWRhdGVEaXNwYXRjaFNjaGVtYSB9IGZyb20gXCIuLi9jb21tb24vc2NoZW1hLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFNtb290aFdlaWdodGVkUm91bmRSb2JpbiB9IGZyb20gXCIuLi9jb21tb24vc21vb3RoLXdlaWdodGVkLXJvdW5kLXJvYmluXCI7XG5pbXBvcnQgeyBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LCBjYW5vbmljYWxBbnRocm9waWNNb2RlbCB9IGZyb20gXCIuL2FudGhyb3BpYy1jb25zdGFudHNcIjtcbmltcG9ydCB7IGludmFsaWRhdGVBbnRocm9waWNRdW90YVVzYWdlLCByZWFkQW50aHJvcGljUXVvdGFVc2FnZSB9IGZyb20gXCIuL2FudGhyb3BpYy1xdW90YVwiO1xuaW1wb3J0IHsgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lLCByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcgfSBmcm9tIFwiLi9hbnRocm9waWMtdGhpbmtpbmdcIjtcbmltcG9ydCB7IG1ha2VBbnRocm9waWNXb3JrZXJJZCwgcnVuQ2xhdWRlU2Vzc2lvbiB9IGZyb20gXCIuL2NsYXVkZS1zZXNzaW9uXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcImFudGhyb3BpYy1kaXNwYXRjaGVyXCJdKTtcblxuLy8gMU0gY29udGV4dCDsg53shLHsnYAgMTAw7LSIIOydtOyDgSDqsbjrprQg7IiYIOyeiOuLpC5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDI0MF8wMDA7XG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuaW50ZXJmYWNlIFBvb2xlZFRva2VuIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBbnRocm9waWNEaXNwYXRjaGVyIGltcGxlbWVudHMgUHJvdmlkZXJEaXNwYXRjaGVyIHtcbiAgdG9rZW5Qb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZFRva2VuPigpO1xuICByZWFkb25seSB3ZWlnaHRlZFNlbGVjdG9yID0gbmV3IFNtb290aFdlaWdodGVkUm91bmRSb2JpbigpO1xuICBpbkZsaWdodCA9IDA7XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTk9USUZZ64qUIOq4sOyhtCDthqDtgbDsnYQg7J6s7KCE7Iah7ZWY7KeAIOyViuycvOuvgOuhnCDsi5zsnpEg7IucIERC7JeQ7IScIOydveuKlOuLpC5cbiAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRBY3RpdmVCeVByb3ZpZGVyKFwiQVwiLCBcImFudGhyb3BpY1wiKTtcbiAgICB0b2tlbnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBBbnRocm9waWNDcmVkZW50aWFscy5zYWZlUGFyc2UodC5jcmVkZW50aWFscyk7XG5cbiAgICAgIGlmICghY3JlZGVudGlhbHMuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIud2Fybihgc2tpcHBpbmcgdG9rZW4gJHt0Lm5hbWV9OiBjcmVkZW50aWFscyBhcmUgbm90IEFudGhyb3BpYyBPQXV0aCBjcmVkZW50aWFsc2ApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b2tlblBvb2wuc2V0KHQuaWQsIHtcbiAgICAgICAgaWQ6IHQuaWQsXG4gICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLmRhdGEsXG4gICAgICAgIHF1b3RhVGhyZXNob2xkOiB0LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgd2VpZ2h0OiB0LndlaWdodCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKHQuaWQsIHQud2VpZ2h0KTtcbiAgICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgc3Bhd25lZDogJHt0Lm5hbWV9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuSWRzID0gWy4uLnRoaXMudG9rZW5Qb29sLmtleXMoKV07XG4gICAgdG9rZW5JZHMuZm9yRWFjaCgoaWQpID0+IHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5yZW1vdmVUb2tlbihpZCkpO1xuICAgIHRoaXMudG9rZW5Qb29sLmNsZWFyKCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlc2V0U2NvcmVzKCk7XG4gIH1cblxuICAvLyBMSVNURU4vTk9USUZZIOyXsOqysOydtCDrgYrquLQg64+Z7JWIIOuGk+y5nCDrs4Dqsr3snYQgREIg6riw7KSA7Jy866GcIOunnuy2mOuLpC5cbiAgcmVwbGFjZVRva2VucyhcbiAgICByb3dzOiBBcnJheTx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgY3JlZGVudGlhbHM6IEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgfT4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHJvd3MubWFwKChyKSA9PiByLmlkKSk7XG4gICAgLy8g7IKt7KCc7ZWgIO2CpOuKlCDsiJztmowg7KCE7JeQIOyKpOuDheyDt+2VnOuLpC5cbiAgICBjb25zdCBjdXJyZW50SWRzID0gQXJyYXkuZnJvbSh0aGlzLnRva2VuUG9vbC5rZXlzKCkpO1xuICAgIGN1cnJlbnRJZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgIGlmICghbmV4dC5oYXMoaWQpKSB0aGlzLm9uVG9rZW5SZW1vdmVkKGlkKTtcbiAgICB9KTtcbiAgICByb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLnRva2VuUG9vbC5oYXMoci5pZCkpIHtcbiAgICAgICAgdGhpcy5vblRva2VuVXBkYXRlZChyLmlkLCByLm5hbWUsIHIuY3JlZGVudGlhbHMsIHIucXVvdGFUaHJlc2hvbGQsIHIud2VpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25Ub2tlbkFkZGVkKHIuaWQsIHIubmFtZSwgci5jcmVkZW50aWFscywgci5xdW90YVRocmVzaG9sZCwgci53ZWlnaHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25Ub2tlbkFkZGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuVXBkYXRlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodCA9IDEsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLnNldChpZCwgeyBpZCwgbmFtZSwgY3JlZGVudGlhbHMsIHF1b3RhVGhyZXNob2xkLCB3ZWlnaHQgfSk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKGlkLCB3ZWlnaHQpO1xuICB9XG5cbiAgb25Ub2tlblJlbW92ZWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLmRlbGV0ZShpZCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKTtcbiAgfVxuXG4gIC8vIOyngOyglSDsmpTssq3snYAg7ZW064u5IO2GoO2BsOunjCBxdW90YSDtjJDsoJXtlZjqs6Agd2VpZ2h0ZWQg7IOB7YOc66W8IOqxtOuTnOumrOyngCDslYrripTri6QuXG4gIC8vIOuvuOyngOyglSDsmpTssq3rp4wgcXVvdGEg7Ya16rO8IO2bhOuztOuhnCBzbW9vdGggd2VpZ2h0ZWQgcm91bmQtcm9iaW4g7J2EIOynhO2Wie2VnOuLpC5cbiAgYXN5bmMgc2VsZWN0VG9rZW4obW9kZWw6IHN0cmluZywgcHJlZmVycmVkVG9rZW5JZD86IG51bWJlcik6IFByb21pc2U8UG9vbGVkVG9rZW4gfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZmVycmVkID1cbiAgICAgIHByZWZlcnJlZFRva2VuSWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMudG9rZW5Qb29sLmdldChwcmVmZXJyZWRUb2tlbklkKTtcblxuICAgIGlmIChwcmVmZXJyZWRUb2tlbklkICE9PSB1bmRlZmluZWQgJiYgIXByZWZlcnJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcmVmZXJyZWQgYW50aHJvcGljIHRva2VuICR7cHJlZmVycmVkVG9rZW5JZH0gaXMgbm90IGF2YWlsYWJsZWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSBwcmVmZXJyZWQgPyBbcHJlZmVycmVkXSA6IFsuLi50aGlzLnRva2VuUG9vbC52YWx1ZXMoKV07XG5cbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZWxpZ2libGUsIG92ZXJUaHJlc2hvbGRUb2tlbnMgfSA9IGF3YWl0IHRoaXMuZmlsdGVyRWxpZ2libGVUb2tlbnMocm93cywgbW9kZWwpO1xuXG4gICAgaWYgKGVsaWdpYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogYWxsX2V4Y2VlZGVkXCIsIHtcbiAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgIHRva2VuQ291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICB0aHJlc2hvbGRlZFRva2VuQ291bnQ6IHJvd3MuZmlsdGVyKChyKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHIpKS5sZW5ndGgsXG4gICAgICAgIG92ZXJUaHJlc2hvbGRUb2tlbnMsXG4gICAgICAgIHJlYXNvbjogXCJhbGxfZXhjZWVkZWRcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZXRhaWxzID0gb3ZlclRocmVzaG9sZFRva2Vuc1xuICAgICAgICAubWFwKCh0b2tlbikgPT4gYCR7dG9rZW4udG9rZW5OYW1lfSAodGhyZXNob2xkICR7dG9rZW4udGhyZXNob2xkfSUpYClcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcblxuICAgICAgdGhyb3cgbmV3IFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvcihcbiAgICAgICAgZGV0YWlsc1xuICAgICAgICAgID8gYEFsbCBhbnRocm9waWMgdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZDogJHtkZXRhaWxzfWBcbiAgICAgICAgICA6IFwiQWxsIGFudGhyb3BpYyB0b2tlbnMgZXhjZWVkZWQgcXVvdGEgdGhyZXNob2xkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcmVmZXJyZWQpIHJldHVybiBwcmVmZXJyZWQ7XG5cbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNlbGVjdChuZXcgU2V0KGVsaWdpYmxlLm1hcCgodG9rZW4pID0+IHRva2VuLmlkKSkpO1xuXG4gICAgaWYgKHNlbGVjdGVkSWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLmdldChzZWxlY3RlZElkKSA/PyBudWxsO1xuICB9XG5cbiAgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMoXG4gICAgcm93czogUG9vbGVkVG9rZW5bXSxcbiAgICBtb2RlbDogc3RyaW5nLFxuICApOiBQcm9taXNlPHtcbiAgICBlbGlnaWJsZTogUG9vbGVkVG9rZW5bXTtcbiAgICBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PjtcbiAgfT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZGVkID0gcm93cy5maWx0ZXIoKHRva2VuKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHRva2VuKSk7XG5cbiAgICBpZiAodGhyZXNob2xkZWQubGVuZ3RoID09PSAwKSByZXR1cm4geyBlbGlnaWJsZTogcm93cywgb3ZlclRocmVzaG9sZFRva2VuczogW10gfTtcblxuICAgIGNvbnN0IGVsaWdpYmxlSWRzID0gbmV3IFNldChcbiAgICAgIHJvd3MuZmxhdE1hcCgodG9rZW4pID0+ICh0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHRva2VuKSA/IFtdIDogW3Rva2VuLmlkXSkpLFxuICAgICk7XG5cbiAgICBjb25zdCBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PiA9IFtdO1xuXG4gICAgY29uc3QgY2hlY2tzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgdGhyZXNob2xkZWQubWFwKGFzeW5jICh0b2tlbikgPT4gKHtcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIHJlc3VsdDogYXdhaXQgcmVhZEFudGhyb3BpY1F1b3RhVXNhZ2UodG9rZW4uY3JlZGVudGlhbHMuYWNjZXNzVG9rZW4sIG1vZGVsKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgY2hlY2tzLmZvckVhY2goKGNoZWNrLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBjaGVjay5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIiA/IHRocmVzaG9sZGVkW2luZGV4XSA6IGNoZWNrLnZhbHVlLnRva2VuO1xuXG4gICAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgIGNoZWNrLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIlxuICAgICAgICAgID8gY2hlY2sudmFsdWUucmVzdWx0XG4gICAgICAgICAgOiB7IGtpbmQ6IFwibG9va3VwX2ZhaWxlZFwiIGFzIGNvbnN0LCByZWFzb246IFN0cmluZyhjaGVjay5yZWFzb24pIH07XG5cbiAgICAgIGlmIChyZXN1bHQua2luZCA9PT0gXCJsb29rdXBfZmFpbGVkXCIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogbG9va3VwX2ZhaWxfb3BlblwiLCB7XG4gICAgICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICAgICAgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICAgIHByb3ZpZGVyOiBcImFudGhyb3BpY1wiLFxuICAgICAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICAgICAgcmVhc29uOiBcImxvb2t1cF9mYWlsX29wZW5cIixcbiAgICAgICAgICBsb29rdXBSZWFzb246IHJlc3VsdC5yZWFzb24sXG4gICAgICAgIH0pO1xuICAgICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcInF1b3RhX3RocmVzaG9sZCBnYXRlOiBvdmVyX3RocmVzaG9sZFwiLCB7XG4gICAgICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICAgICAgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICAgIHByb3ZpZGVyOiBcImFudGhyb3BpY1wiLFxuICAgICAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICAgICAgY2FjaGVkVXRpbGl6YXRpb246IHJlc3VsdC51dGlsaXphdGlvblBjdCxcbiAgICAgICAgICBjYWNoZUFnZTogcmVzdWx0LmNhY2hlQWdlTXMsXG4gICAgICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBvdmVyVGhyZXNob2xkVG9rZW5zLnB1c2goeyB0b2tlbk5hbWU6IHRva2VuLm5hbWUsIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgZWxpZ2libGU6IHJvd3MuZmlsdGVyKCh0b2tlbikgPT4gZWxpZ2libGVJZHMuaGFzKHRva2VuLmlkKSksIG92ZXJUaHJlc2hvbGRUb2tlbnMgfTtcbiAgfVxuXG4gIGhhc1F1b3RhVGhyZXNob2xkKHRva2VuOiBQb29sZWRUb2tlbik6IHRva2VuIGlzIFBvb2xlZFRva2VuICYgeyBxdW90YVRocmVzaG9sZDogbnVtYmVyIH0ge1xuICAgIHJldHVybiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkICYmIHRva2VuLnF1b3RhVGhyZXNob2xkICE9PSBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGUocmVxOiBHZW5lcmF0ZVJlcXVlc3QpOiBQcm9taXNlPEdlbmVyYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucnVuKHJlcSwgKCkgPT4ge30pO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVTdHJlYW0ocmVxOiBHZW5lcmF0ZVJlcXVlc3QsIGNiOiBHZW5lcmF0ZVN0cmVhbUNhbGxiYWNrcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJ1bihyZXEsIGNiLm9uRGVsdGEsIHsgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogdHJ1ZSB9KTtcbiAgICAgIGNiLm9uVGhyZWFkSWQ/LihyZXN1bHQudGhyZWFkQ29vcmQudGhyZWFkSWQpO1xuICAgICAgY2Iub25Db21wbGV0ZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNiLm9uRXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZSA6IG5ldyBFcnJvcihTdHJpbmcoZSkpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBydW4oXG4gICAgcmVxOiBHZW5lcmF0ZVJlcXVlc3QsXG4gICAgb25EZWx0YTogKHQ6IHN0cmluZykgPT4gdm9pZCxcbiAgICBvcHRzPzogeyBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPEdlbmVyYXRlUmVzdWx0PiB7XG4gICAgdGhpcy5pbkZsaWdodCsrO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImltYWdlIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgQW50aHJvcGljIHJvdXRlXCIpO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KHJlcS5tb2RlbCk7XG4gICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKHJlcS5tb2RlbCk7XG4gICAgICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhtb2RlbCwgcmVxLnRoaW5raW5nLCByZXEuZWZmb3J0KTtcbiAgICAgIGFzc2VydEFudGhyb3BpY1RoaW5raW5nUnVudGltZSh0aGlua2luZy5leHRyYUJvZHkpO1xuICAgICAgY29uc3QganNvblNjaGVtYSA9IHNlcmlhbGl6ZUFuZFZhbGlkYXRlRGlzcGF0Y2hTY2hlbWEocmVxLm91dHB1dFNjaGVtYSwgXCJhbnRocm9waWNcIik7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5zZWxlY3RUb2tlbihtb2RlbCwgcmVxLnByZWZlcnJlZFRva2VuSWQpO1xuXG4gICAgICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBhbnRocm9waWMgdG9rZW5zIGF2YWlsYWJsZVwiKTtcblxuICAgICAgLy8g66eM66OMIOyngeyghOyXkCDqsLHsi6DtlZjrkJgg7Iuk7Yyo7ZWY66m0IOq4sOyhtCDthqDtgbDsnLzroZwg7KeE7ZaJ7ZWc64ukLlxuICAgICAgbGV0IGFjY2Vzc1Rva2VuID0gdG9rZW4uY3JlZGVudGlhbHMuYWNjZXNzVG9rZW47XG4gICAgICBjb25zdCBleHBpcmVzQXQgPSBnZXRFeHBpcmVzQXQodG9rZW4uY3JlZGVudGlhbHMpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGV4cGlyZXNBdCAmJlxuICAgICAgICBleHBpcmVzQXQgLSBEYXRlLm5vdygpIDwgUkVGUkVTSF9TQUZFVFlfTVMgJiZcbiAgICAgICAgZ2V0UmVmcmVzaFRva2VuKHRva2VuLmNyZWRlbnRpYWxzKVxuICAgICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBRZ3JpZEZyYW1lIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5mcmFtZVwiKTtcbiAgICAgICAgICAvLyBwcm92aWRlciDrpbwg67CY65Oc7IucIOyxhOybjOyVvCByZWZyZXNoVG9rZW4g64K067aAIFRva2VuTW9kZWwuc2F2ZSDqsIAg7ISx6rO17ZWc64ukLlxuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgUWdyaWRGcmFtZS5yZWZyZXNoVG9rZW4oe1xuICAgICAgICAgICAgaWQ6IHRva2VuLmlkLFxuICAgICAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgICAgICBuYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHRva2VuLmNyZWRlbnRpYWxzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgcmVmcmVzaCBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhg4oaSICR7dG9rZW4ubmFtZX0gKG1vZGVsOiAke21vZGVsfSlgKTtcblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJ1bkNsYXVkZVNlc3Npb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgc3lzdGVtOiByZXEuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgICAgIHRoaW5raW5nOiByZXEudGhpbmtpbmcsXG4gICAgICAgICAgdGltZW91dE1zOiByZXEudGltZW91dE1zID8/IERFRkFVTFRfVElNRU9VVF9NUyxcbiAgICAgICAgICBjb2xkSGlzdG9yeTogcmVxLmNvbGRIaXN0b3J5LFxuICAgICAgICAgIGlucHV0OiByZXEuY29sZElucHV0LFxuICAgICAgICAgIGFib3J0U2lnbmFsOiByZXEuYWJvcnRTaWduYWwsXG4gICAgICAgICAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogb3B0cz8uaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICAgICAgfSxcbiAgICAgICAgb25EZWx0YSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzZXNzaW9uLnF1b3RhRXhoYXVzdGVkKSB7XG4gICAgICAgIGludmFsaWRhdGVBbnRocm9waWNRdW90YVVzYWdlKHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKTtcblxuICAgICAgICBpZiAoYWNjZXNzVG9rZW4gIT09IHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgaW52YWxpZGF0ZUFudGhyb3BpY1F1b3RhVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdW90YSBleGhhdXN0ZWQgKCR7dG9rZW4ubmFtZX0pYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uLmlzRXJyb3IpIHtcbiAgICAgICAgLy8g7KKF66OMIOyCrOycoOulvCDrqLzsoIAg7ZGc7Iuc7ZWY6rOgIOydkeuLtSDrs7jrrLjsnYAg7KeE64uo7JeQIO2VhOyalO2VnCDrp4ztgbzrp4wg64Ko6ri064ukLlxuICAgICAgICBjb25zdCByZWFzb24gPVxuICAgICAgICAgIHNlc3Npb24uc3VidHlwZSA/PyBzZXNzaW9uLnRlcm1pbmFsUmVhc29uID8/IChzZXNzaW9uLmlzRXJyb3IgPyBcImlzX2Vycm9yXCIgOiBcInVua25vd25cIik7XG5cbiAgICAgICAgY29uc3QgYm9keSA9IHNlc3Npb24udGV4dFxuICAgICAgICAgID8gc2Vzc2lvbi50ZXh0Lmxlbmd0aCA+IDUwMFxuICAgICAgICAgICAgPyBgJHtzZXNzaW9uLnRleHQuc2xpY2UoMCwgNTAwKX3igKYoJHtzZXNzaW9uLnRleHQubGVuZ3RofSBjaGFycylgXG4gICAgICAgICAgICA6IHNlc3Npb24udGV4dFxuICAgICAgICAgIDogYGVtcHR5IHRleHQsIG91dHB1dFRva2Vucz0ke3Nlc3Npb24udXNhZ2Uub3V0cHV0VG9rZW5zfWA7XG5cbiAgICAgICAgY29uc3QgcmVmdXNhbCA9IHNlc3Npb24ucmVmdXNhbCA/IGAgcmVmdXNhbD0ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24ucmVmdXNhbCl9YCA6IFwiXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xhdWRlIGVycm9yICgke3Rva2VuLm5hbWV9KSBbJHtyZWFzb259XTogJHtib2R5fSR7cmVmdXNhbH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogc2Vzc2lvbi50ZXh0LFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgIHVzYWdlOiBzZXNzaW9uLnVzYWdlLFxuICAgICAgICBkdXJhdGlvbk1zOiBzZXNzaW9uLmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRNczogc2Vzc2lvbi50dGZ0TXMsXG4gICAgICAgIGNvc3RVc2Q6IHNlc3Npb24uY29zdFVzZCxcbiAgICAgICAgLy8gQ2xhdWRlIENvZGXsnZgg66qo6424IGZhbGxiYWNr7J2EIOu5hOyaqcK36rCQ7IKsIOuhnOq3uOyXkCDrsJjsmIHtlZzri6QuXG4gICAgICAgIG1vZGVsOiBzZXNzaW9uLnNlcnZlZE1vZGVsID8/IG1vZGVsLFxuICAgICAgICByZXF1ZXN0ZWRNb2RlbDogbW9kZWwsXG4gICAgICAgIG1vZGVsRmFsbGJhY2tzOiBzZXNzaW9uLm1vZGVsRmFsbGJhY2tzLFxuICAgICAgICB0aHJlYWRDb29yZDoge1xuICAgICAgICAgIHdvcmtlcklkOiBtYWtlQW50aHJvcGljV29ya2VySWQodG9rZW4uaWQpLFxuICAgICAgICAgIHRocmVhZElkOiBzZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgICAgICBlcG9jaDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaW5GbGlnaHQtLTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLHNCQUFzQixDQUFDO0FBRzFELE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sb0JBQW9CO0FBVTFCLElBQWEsc0JBQWIsTUFBK0Q7Q0FDN0QsNEJBQVksSUFBSSxJQUF5QjtDQUN6QyxtQkFBNEIsSUFBSSx5QkFBeUI7Q0FDekQsV0FBVztDQUVYLE1BQU0sUUFBdUI7RUFHM0IsT0FEcUIsV0FBVyxxQkFBcUIsS0FBSyxXQUFXLEVBQ3JFLENBQU8sU0FBUyxNQUFN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
|