@cartanova/qgrid-cli 2.10.2 → 2.10.4
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/application/monit/log-buffer.js +7 -11
- package/bundle/dist/application/monit/monit.frame.js +6 -11
- package/bundle/dist/application/qgrid/oauth.js +2 -2
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +64 -141
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +12 -36
- package/bundle/dist/application/qgrid/qgrid.frame.js +3 -6
- package/bundle/dist/application/qgrid/qgrid.types.js +2 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +4 -7
- package/bundle/dist/application/qgrid/token-window-keepalive.js +3 -2
- package/bundle/dist/application/qgrid/tool-emulation-schema.js +4 -4
- package/bundle/dist/application/qgrid/tool-emulation.js +14 -2
- package/bundle/dist/application/request-log/request-log.model.js +7 -5
- package/bundle/dist/application/setting/setting.model.js +2 -64
- package/bundle/dist/application/setting/setting.store.js +3 -4
- package/bundle/dist/application/setting/setting.types.js +2 -12
- package/bundle/dist/i18n/en.js +1 -3
- package/bundle/dist/i18n/ko.js +1 -3
- package/bundle/dist/sonamu.config.js +6 -6
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +53 -84
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +55 -0
- package/bundle/dist/utils/providers/anthropic/claude-session.js +11 -13
- package/bundle/dist/utils/providers/common/effort.js +1 -1
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +3 -3
- package/bundle/dist/utils/providers/common/thinking.js +12 -0
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +3 -2
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +6 -16
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +89 -78
- package/bundle/src/application/monit/log-buffer.test.ts +3 -4
- package/bundle/src/application/monit/log-buffer.ts +13 -27
- package/bundle/src/application/monit/monit.frame.test.ts +7 -8
- package/bundle/src/application/monit/monit.frame.ts +9 -14
- package/bundle/src/application/qgrid/oauth.ts +1 -1
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +7 -111
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +83 -179
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +62 -1
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +25 -71
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +0 -38
- package/bundle/src/application/qgrid/qgrid.frame.ts +4 -12
- package/bundle/src/application/qgrid/qgrid.types.ts +2 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +8 -18
- package/bundle/src/application/qgrid/token-subscriber.ts +10 -20
- package/bundle/src/application/qgrid/token-window-keepalive.test.ts +2 -2
- package/bundle/src/application/qgrid/token-window-keepalive.ts +2 -1
- package/bundle/src/application/qgrid/tool-emulation-schema.test.ts +6 -3
- package/bundle/src/application/qgrid/tool-emulation-schema.ts +3 -3
- package/bundle/src/application/qgrid/tool-emulation.test.ts +8 -1
- package/bundle/src/application/qgrid/tool-emulation.ts +29 -0
- package/bundle/src/application/request-log/request-log.model.ts +5 -5
- package/bundle/src/application/setting/setting.model.test.ts +1 -101
- package/bundle/src/application/setting/setting.model.ts +1 -74
- package/bundle/src/application/setting/setting.store.ts +2 -3
- package/bundle/src/application/setting/setting.types.ts +0 -12
- package/bundle/src/application/sonamu.generated.http +2 -7
- package/bundle/src/i18n/en.ts +0 -3
- package/bundle/src/i18n/ko.ts +0 -3
- package/bundle/src/sonamu.config.ts +5 -5
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +3 -6
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.test.ts +26 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +70 -148
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.test.ts +36 -0
- package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +84 -0
- package/bundle/src/utils/providers/anthropic/claude-session.test.ts +74 -13
- package/bundle/src/utils/providers/anthropic/claude-session.ts +11 -20
- package/bundle/src/utils/providers/common/effort.ts +1 -1
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +4 -0
- package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -4
- package/bundle/src/utils/providers/common/thinking.ts +10 -0
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +7 -3
- package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +3 -3
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +20 -33
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +97 -6
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +113 -77
- package/bundle/web-dist/client/assets/index-CvG4UB9v.css +1 -0
- package/bundle/web-dist/client/assets/{index-DtRTSTes.js → index-reW8VvJF.js} +4 -4
- package/bundle/web-dist/client/assets/{logs-BhVYDEzC.js → logs-DDIt97D1.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-BxN4JWqK.js → monit-DkABv7PG.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-CBCqRp2o.js → routes-BRmQ4M3-.js} +1 -1
- package/bundle/web-dist/client/assets/services.generated-jnPHYMER.js +51 -0
- package/bundle/web-dist/client/assets/settings-BHvtycEZ.js +1 -0
- package/bundle/web-dist/client/assets/{show-BzYft5N4.js → show-qeTIzgDZ.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-PMybtI8X.js → tokens-5Bep_G-w.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-C51_d6-6.js → use-oauth-login-flow-Cx-QO25M.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-D-Y8OySK.js → use-update-token-mutation-DQCwCYfR.js} +1 -1
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Bj1cPq6x.js → lazyRouteComponent-CUR-kWzI.js} +2 -2
- package/bundle/web-dist/server/assets/{logs-BSk9lOHe.js → logs-CagNGTBj.js} +3 -3
- package/bundle/web-dist/server/assets/{monit-D9W4ioUi.js → monit-DSxs4Jnl.js} +3 -3
- package/bundle/web-dist/server/assets/{plus-CmvbWuDf.js → plus-Bvdj8Pwx.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-BjR1Iaz8.js → react-dom-CyuShs9K.js} +1 -1
- package/bundle/web-dist/server/assets/{refresh-cw-B8U9BL9-.js → refresh-cw-3QAiSWBd.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-C7lB2Q85.js → routes-i-sTqXMX.js} +4 -4
- package/bundle/web-dist/server/assets/{services.generated-BM4X3Ecj.js → services.generated-FPwsG9p3.js} +116 -131
- package/bundle/web-dist/server/assets/{settings-BFVuldch.js → settings-DeHNwoMv.js} +40 -251
- package/bundle/web-dist/server/assets/{show-Cswh_tqs.js → show-C4jk1Hrp.js} +2 -2
- package/bundle/web-dist/server/assets/{tokens-DiTUwUwr.js → tokens-odgS2-9q.js} +4 -4
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-DYKnG4A2.js → use-oauth-login-flow-DTQKdYBO.js} +1 -1
- package/bundle/web-dist/server/assets/{use-update-token-mutation-DqGMopII.js → use-update-token-mutation-xvXbPrCI.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +10 -10
- package/package.json +1 -1
- package/skills/qgrid/SKILL.md +1 -0
- package/skills/qgrid/references/ai-sdk-provider-contract.md +2 -1
- package/skills/qgrid/references/anthropic-claude-code-runtime.md +7 -4
- package/skills/qgrid/references/cli-env-and-server-boot.md +12 -9
- package/skills/qgrid/references/decision-rationale.md +9 -0
- package/skills/qgrid/references/openai-codex-runtime.md +6 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +2 -0
- package/skills/qgrid/references/tool-calling-and-multiturn.md +18 -1
- package/skills/qgrid/references/verification-and-debugging.md +1 -1
- package/bundle/dist/utils/process-supervisor.js +0 -22
- package/bundle/dist/utils/server-restart.js +0 -61
- package/bundle/src/utils/process-supervisor.test.ts +0 -24
- package/bundle/src/utils/process-supervisor.ts +0 -17
- package/bundle/src/utils/server-restart.test.ts +0 -76
- package/bundle/src/utils/server-restart.ts +0 -68
- package/bundle/web-dist/client/assets/index-D_sagzsR.css +0 -1
- package/bundle/web-dist/client/assets/services.generated-Cbvg2sGQ.js +0 -51
- package/bundle/web-dist/client/assets/settings-hBTEC7Ki.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ARGV_SAFE_MAX_UTF8_BYTES, assertAnthropicSchemaArgvSize } from "../common/schema-validation.js";
|
|
2
|
-
import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix, supports1MContext
|
|
3
|
-
import {
|
|
2
|
+
import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix, supports1MContext } from "./anthropic-constants.js";
|
|
3
|
+
import { assertAnthropicThinkingRuntime, resolveAnthropicThinking } from "./anthropic-thinking.js";
|
|
4
4
|
import { createTtftTracker } from "../common/ttft.js";
|
|
5
5
|
import { buildStreamJsonInput, handleStreamJsonLine } from "./stream-json-adapter.js";
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
@@ -65,12 +65,6 @@ function applyOneMillionSuffix(model, needsSuffix) {
|
|
|
65
65
|
function oneMillionEnv(supported) {
|
|
66
66
|
return supported ? {} : { CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" };
|
|
67
67
|
}
|
|
68
|
-
function thinkingEnv(model) {
|
|
69
|
-
return usesAdaptiveThinking(model) ? {} : {
|
|
70
|
-
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
|
|
71
|
-
MAX_THINKING_TOKENS: "0"
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
68
|
function structuredOutputRetriesEnv(raw = process.env.MAX_STRUCTURED_OUTPUT_RETRIES) {
|
|
75
69
|
if (!raw) return { MAX_STRUCTURED_OUTPUT_RETRIES: "1" };
|
|
76
70
|
const parsed = Number.parseInt(raw, 10);
|
|
@@ -82,6 +76,7 @@ function shouldPinStructuredRetries(opts) {
|
|
|
82
76
|
}
|
|
83
77
|
const SYSTEM_PROMPT_ARGV_MAX_BYTES = ARGV_SAFE_MAX_UTF8_BYTES;
|
|
84
78
|
function buildClaudeArgs(opts) {
|
|
79
|
+
const thinking = resolveAnthropicThinking(opts.model, opts.thinking, opts.effort);
|
|
85
80
|
const useStructured = Boolean(opts.jsonSchema && opts.jsonSchema.length > 0);
|
|
86
81
|
if (useStructured) assertAnthropicSchemaArgvSize(opts.jsonSchema);
|
|
87
82
|
const toolArgs = useStructured ? [
|
|
@@ -109,9 +104,9 @@ function buildClaudeArgs(opts) {
|
|
|
109
104
|
"--model",
|
|
110
105
|
applyOneMillionSuffix(opts.model, opts.needsOneMillionSuffix ?? false),
|
|
111
106
|
...systemArgs,
|
|
112
|
-
...
|
|
107
|
+
...thinking.mode ? ["--thinking", thinking.mode] : [],
|
|
113
108
|
"--effort",
|
|
114
|
-
|
|
109
|
+
thinking.effort,
|
|
115
110
|
"--disable-slash-commands",
|
|
116
111
|
"--session-id",
|
|
117
112
|
opts.sessionId
|
|
@@ -126,6 +121,8 @@ function buildClaudeArgs(opts) {
|
|
|
126
121
|
function runClaudeSession(req, onDelta) {
|
|
127
122
|
assertSupportedOneMillionSuffix(req.model);
|
|
128
123
|
const model = canonicalAnthropicModel(req.model);
|
|
124
|
+
const thinking = resolveAnthropicThinking(model, req.thinking, req.effort);
|
|
125
|
+
assertAnthropicThinkingRuntime(thinking.extraBody);
|
|
129
126
|
const supportsOneMillion = supports1MContext(model);
|
|
130
127
|
const needsOneMillionSuffix = needsCli1mSuffix(model);
|
|
131
128
|
const sessionId = randomUUID();
|
|
@@ -142,6 +139,7 @@ function runClaudeSession(req, onDelta) {
|
|
|
142
139
|
system: useSystemPromptFile ? void 0 : req.system,
|
|
143
140
|
systemPromptFile,
|
|
144
141
|
effort: req.effort,
|
|
142
|
+
thinking: req.thinking,
|
|
145
143
|
jsonSchema: req.jsonSchema,
|
|
146
144
|
sessionId,
|
|
147
145
|
needsOneMillionSuffix,
|
|
@@ -169,8 +167,8 @@ function runClaudeSession(req, onDelta) {
|
|
|
169
167
|
TMPDIR: process.env.TMPDIR,
|
|
170
168
|
CLAUDE_CODE_OAUTH_TOKEN: req.token,
|
|
171
169
|
CLAUDE_CONFIG_DIR: configDir,
|
|
170
|
+
...thinking.extraBody ? { CLAUDE_CODE_EXTRA_BODY: thinking.extraBody } : {},
|
|
172
171
|
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
173
|
-
...thinkingEnv(model),
|
|
174
172
|
...oneMillionEnv(supportsOneMillion),
|
|
175
173
|
CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
|
|
176
174
|
CLAUDE_CODE_DISABLE_TERMINAL_TITLE: "1",
|
|
@@ -271,6 +269,6 @@ function runClaudeSession(req, onDelta) {
|
|
|
271
269
|
});
|
|
272
270
|
}
|
|
273
271
|
//#endregion
|
|
274
|
-
export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, shouldPinStructuredRetries, structuredOutputRetriesEnv,
|
|
272
|
+
export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, shouldPinStructuredRetries, structuredOutputRetriesEnv, withSessionLock };
|
|
275
273
|
|
|
276
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZUFudGhyb3BpY0VmZm9ydCB9IGZyb20gXCIuLi9jb21tb24vZWZmb3J0XCI7XG5pbXBvcnQgeyB0eXBlIEpzb25WYWx1ZSwgdHlwZSBUb2tlblVzYWdlQnJlYWtkb3duLCB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItdHlwZXNcIjtcbmltcG9ydCB7XG4gIEFSR1ZfU0FGRV9NQVhfVVRGOF9CWVRFUyxcbiAgYXNzZXJ0QW50aHJvcGljU2NoZW1hQXJndlNpemUsXG59IGZyb20gXCIuLi9jb21tb24vc2NoZW1hLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgYW50aHJvcGljQ29uZmlnRGlyLFxuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LFxuICBjYW5vbmljYWxBbnRocm9waWNNb2RlbCxcbiAgbmVlZHNDbGkxbVN1ZmZpeCxcbiAgc3VwcG9ydHMxTUNvbnRleHQsXG4gIHVzZXNBZGFwdGl2ZVRoaW5raW5nLFxufSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBidWlsZFN0cmVhbUpzb25JbnB1dCxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtSnNvbkxpbmUsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtUmVzdWx0LFxuICBoYW5kbGVTdHJlYW1Kc29uTGluZSxcbn0gZnJvbSBcIi4vc3RyZWFtLWpzb24tYWRhcHRlclwiO1xuXG4vLyDilIDilIAgcGVyLXNlc3Npb24g6529IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBzZXNzaW9uLWlkIOuLqOychCDsp4HroKztmZQgcHJpbWl0aXZlLiDquLDrs7gg6rK966Gc7JeQ7ISc64qUIOunpCDtmLjstpwg7IOIIHV1aWQg6528IOyCrOyLpOyDgSBuby1vcCDsnbTsp4Drp4wsXG4vLyDqsJnsnYAgc2Vzc2lvbi1pZCDrpbwg7KeB7KCRIOyTsOuKlCDtmLjstpzsnpDripQg7Jes7KCE7Z6IIOyngeugrO2ZlCDrs7TsnqXsnYQg67Cb64qU64ukLlxuY29uc3Qgc2Vzc2lvbkNoYWlucyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PigpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFNlc3Npb25Mb2NrPFQ+KHNlc3Npb25JZDogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBwcmV2ID0gc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgLy8g7J207KCEIHR1cm4g7J2YIOyEse2MqOyZgCDrrLTqtIDtlZjqsowg7KeB66CsIOyytOyduOydhCDsnofripTri6QuXG4gIGNvbnN0IG5leHQgPSBwcmV2LnRoZW4oZm4sIGZuKTtcbiAgLy8gdGFpbDog7ISx7YyoIOustOq0gCBzZXR0bGUg65CY64qUIO2VuOuTpC4g7J206rG4IOunteyXkCDrkZDqs6AsIGZpbmFsbHkg7JeQ7IScIFwi7Jes7KCE7Z6IIOuCtOqwgCDrgZ1cIuydvCDrlYzrp4wg7IKt7KCcLlxuICAvLyAoc2V0IOynge2bhCB1bmRlZmluZWQg6rKA7IKs66GcIO2VmOuptCDsoIjrjIAg7IKt7KCcIOyViCDrj7wg7IS47IWYIGlkIOqwgCDriITsiJjrkKgg4oCUIHRhaWwg7J287LmYIOqygOyCrOuhnCDtmoztlLwuKVxuICBjb25zdCB0YWlsID0gbmV4dC50aGVuKFxuICAgICgpID0+IHt9LFxuICAgICgpID0+IHt9LFxuICApO1xuICBzZXNzaW9uQ2hhaW5zLnNldChzZXNzaW9uSWQsIHRhaWwpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXh0O1xuICB9IGZpbmFsbHkge1xuICAgIC8vIOq3uCDsgqzsnbQg64uk66W4IHR1cm4g7J20IOyytOyduOydhCDsnbTslrTrsJvslZjsnLzrqbQgdGFpbCDsnbQg6rWQ7LK064+8IOyeiOuLpCDigJQg6re465WM64qUIOyCreygnO2VmOyngCDslYrripTri6QuXG4gICAgaWYgKHNlc3Npb25DaGFpbnMuZ2V0KHNlc3Npb25JZCkgPT09IHRhaWwpIHNlc3Npb25DaGFpbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8g4pSA4pSAIGNvb3JkIOunpO2VkSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gdG9rZW4g6riw67CYIOyViOyglSB3b3JrZXJJZCDtlanshLEuIEFudGhyb3BpYyDsnYAgd29ya2VyIHBvb2wg7J20IOyXhuycvOuvgOuhnCB0b2tlbklkIOulvCDqt7jrjIDroZwg7JO064ukLlxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VBbnRocm9waWNXb3JrZXJJZCh0b2tlbklkOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdG9rZW5JZDtcbn1cblxuLy8g4pSA4pSAIGVudmVsb3BlIGRlY29yYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBzdHJlYW0tanNvbiDsnoXroKUg65287J247JeQIFNESyBlbnZlbG9wZSDrtoDssKkg7ZuEIOyngeugrO2ZlC4gc2Vzc2lvbiDshozsnKDsnpDsnbgg7Jes6riw7IScIO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShcbiAgbGluZXM6IEFycmF5PENsYXVkZVN0cmVhbUpzb25MaW5lPixcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGxpbmVzXG4gICAgICAubWFwKChsaW5lKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgLi4ubGluZSxcbiAgICAgICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgdXVpZDogcmFuZG9tVVVJRCgpLFxuICAgICAgICAgIHBhcmVudF90b29sX3VzZV9pZDogbnVsbCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKSArIFwiXFxuXCJcbiAgKTtcbn1cblxuLy8g4pSA4pSAIHNwYXduICsgY29uc3VtZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVxdWVzdCB7XG4gIHRva2VuSWQ6IG51bWJlcjtcbiAgdG9rZW46IHN0cmluZzsgLy8gT0F1dGggYWNjZXNzIHRva2VuXG4gIG1vZGVsOiBzdHJpbmc7XG4gIHN5c3RlbT86IHN0cmluZztcbiAganNvblNjaGVtYT86IHN0cmluZzsgLy8g7J6I7Jy866m0IHN0cnVjdHVyZWQgb3V0cHV0XG4gIGVmZm9ydD86IHN0cmluZztcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIGNvbGRIaXN0b3J5PzogQXJyYXk8SnNvblZhbHVlPjtcbiAgaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD47XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXN1bHQgZXh0ZW5kcyBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgd29ya2VySWQ6IG51bWJlcjtcbiAgdHRmdE1zOiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg67O07J6lKOqyqeumrCkuIOqyveuhnCDqt5zsuZnsnYAgYW50aHJvcGljQ29uZmlnRGlyKOyInOyImCDtlajsiJgp7J20IOyGjOycoCDigJRcbi8vIOyXrOq4sOyEoCDqt7gg6rK966Gc7JeQIOu5iCBzZXR0aW5ncyDrpbwg6rmU7JWEIGNsYXVkZS1tZW0gaG9vayDrk7HsnYQg7LCo64uo7ZWc64ukLiAoUjEwIOqyqeumrClcbi8vIOydtCBzZWVkIO2MjOydvOydgCBjbGF1ZGUtbWVtIGhvb2sgLyDsgqzsmqnsnpAg7ISk7KCVIOyYpOyXvCDssKjri6jsnYQg7JyE7ZWcIOqyqeumrCDqsr3qs4Tri6QuIOunpCDtmLjstpzrp4jri6Qg64uk7IucIOyNqOyEnFxuLy8g7Jm467aAIOuzgOyhsMK37IKt7KCcIO2bhOyXkOuPhCDri6TsnYwg7Iuk7ZaJ7JeQ7IScIHNlbGYtaGVhbGluZyDrkJjrj4TroZ0g6riw7KG0IHNlbWFudGljcyDrpbwg7Jyg7KeA7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbmZpZ0Rpcih0b2tlbklkOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBkaXIgPSBhbnRocm9waWNDb25maWdEaXIodG9rZW5JZCk7XG4gIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKGAke2Rpcn0vLmNsYXVkZS5qc29uYCwgXCJ7fVwiKTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9L3NldHRpbmdzLmpzb25gLCBcInt9XCIpO1xuICByZXR1cm4gZGlyO1xufVxuXG5sZXQgY3dkRW5zdXJlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZW5zdXJlQ3dkKCk6IHZvaWQge1xuICBpZiAoY3dkRW5zdXJlZCkgcmV0dXJuO1xuICBta2RpclN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtBTlRIUk9QSUNfQ0xBVURFX0NXRH0vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgY3dkRW5zdXJlZCA9IHRydWU7XG59XG5cbi8vIHNwYXduIGFyZ3Mg6rWs7ISxLiDrqYDti7DthLQv6rKp66asL3N0cnVjdHVyZWQg66qo65OcIOuwmOyYgS5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU9uZU1pbGxpb25TdWZmaXgobW9kZWw6IHN0cmluZywgbmVlZHNTdWZmaXg6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpO1xuICByZXR1cm4gbmVlZHNTdWZmaXggPyBgJHtiYXNlfVsxbV1gIDogYmFzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZU1pbGxpb25FbnYoc3VwcG9ydGVkOiBib29sZWFuKTogeyBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ/OiBcIjFcIiB9IHtcbiAgcmV0dXJuIHN1cHBvcnRlZCA/IHt9IDogeyBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ6IFwiMVwiIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlua2luZ0Vudihtb2RlbDogc3RyaW5nKToge1xuICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HPzogXCIxXCI7XG4gIE1BWF9USElOS0lOR19UT0tFTlM/OiBcIjBcIjtcbn0ge1xuICByZXR1cm4gdXNlc0FkYXB0aXZlVGhpbmtpbmcobW9kZWwpXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HOiBcIjFcIixcbiAgICAgICAgTUFYX1RISU5LSU5HX1RPS0VOUzogXCIwXCIsXG4gICAgICB9O1xufVxuXG4vLyBTT04tNDk1OiBzdHJ1Y3R1cmVkIG91dHB1dCByZXRyeSDrpbwgMSDroZwg6rOg7KCV7ZWc64ukLiBDQyDqsIAgYXR0ZW1wdCDrpbwgcmVqZWN0IO2VmOqzoCByZXRyeSDtlZjrqbRcbi8vIGB7cmVqZWN0ZWR9e2FjY2VwdGVkfWAg64iE7KCB7J20IEFJLVNESyDsnZggSlNPTi5wYXJzZSDrpbwg6rmo65yo66as66+A66GcLCByZXRyeSDsnpDssrTrpbwg66eJ7JWEIOq3uCDqsr3roZzrpbxcbi8vIOybkOyynCDssKjri6jtlZzri6QuIGAwYCDsnYAgQ0MgcXVlcnkgbG9vcChgY2FsbHNUaGlzUXVlcnkgPj0gbWF4UmV0cmllc2Ap6rCAIOyyqyBhdHRlbXB0IGVtaXQg7KCE7JeQXG4vLyDsi6TtjKjsi5ztgqTrr4DroZwoYGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzYCkg7Jm467aAIOqwkuydtCAxIOuvuOunjOydtOyWtOuPhCAxIOuhnCDtgbTrnqjtlITtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYocmF3ID0gcHJvY2Vzcy5lbnYuTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVMpOiB7XG4gIE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBzdHJpbmc7XG59IHtcbiAgaWYgKCFyYXcpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogU3RyaW5nKE1hdGgubWF4KHBhcnNlZCwgMSkpIH07XG59XG5cbi8vIFNPTi00OTUg7J2YIHJldHJ5IOqzoOygleydgCBcIuyKpO2KuOumrOuwjSArIHN0cnVjdHVyZWRcIiDsobDtlakg7ZWc7KCVIOygleyxheydtOuLpC4g7Iqk7Yq466a87JeQ7IScIHJldHJ5IOqwgCDrj4zrqbRcbi8vIHdhbGwtY2xvY2sg7J20IDLrsLDqsIAg65CY7Ja0IOyLpOyaqeyEseydtCDsl4bquLAg65WM66y47J2064ukKOybkCDqsrDsoJUg7IKs7JygKS4g64W87Iqk7Yq466a8IGdlbmVyYXRlIOuKlCDslaDstIjsl5Ag7JmE66OM66W8XG4vLyDquLDri6Trpqzrr4DroZwg6re4IOyCrOycoOqwgCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLiDrsJjrqbQgQ2xhdWRlIOqzhOyXtOydgCBPcGVuQUkg64yA67mEIHN0cnVjdHVyZWQgb3V0cHV0IOykgOyImOycqOydtFxuLy8g64Ku7JWELCDrhbzsiqTtirjrprzquYzsp4AgcmV0cnk9MSDroZwg66y27Jy866m0IDHtmowgcmVqZWN0IOqwgCDqs6frsJTroZxcbi8vIGBlcnJvcl9tYXhfc3RydWN0dXJlZF9vdXRwdXRfcmV0cmllc2Ag66GcIOyngeqysOuQnOuLpCjsi6TsuKE6IGRldGlfcHJvZHVjdGlvbiBvcHVzLTQtOCDsi6TtjKjsnKggMzkuNiUpLlxuLy8g7Iqk7Yq466as67CNIOyXrOu2gOuKlCBgLS1pbmNsdWRlLXBhcnRpYWwtbWVzc2FnZXNgIOulvCDrtpnsnbTripQgZ2VuZXJhdGVTdHJlYW0g6rK966Gc7JeQ7ISc66eMIHRydWUg6rCAIOuQmOuvgOuhnFxuLy8gKGFudGhyb3BpYy1kaXNwYXRjaGVyIOydmCBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDrtoTquLApIOydtOulvCDsi6Tsp4gg6rWs67aE7J6Q66GcIOyTtOuLpC5cbi8vIOu5hOyEseqztSBzdWJ0eXBlIOydhCDtla3sg4EgaXNFcnJvciDroZwg7Jis66as64qUIFNPTi00OTUg7J2YIOuCmOuouOyngCDsoIjrsJjsnYAg6re464yA66GcIOycoOyngOuQnOuLpCDigJQgcmV0cnkg7ZuE7JeQ64+EXG4vLyBkZWdlbmVyYXRlIOy2nOugpeydtOuptCDsobDsmqntnogg7Ya16rO87Iuc7YKk7KeAIOyViuqzoCDsoJXsp4HtlZjqsowg7Iuk7Yyo7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFBpblN0cnVjdHVyZWRSZXRyaWVzKG9wdHM6IHtcbiAgdXNlU3RydWN0dXJlZDogYm9vbGVhbjtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59KTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRzLnVzZVN0cnVjdHVyZWQgJiYgb3B0cy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzID09PSB0cnVlO1xufVxuXG4vLyBMaW51eCDri6jsnbwgYXJndiDsnbjsnpAg7ZWc6rOEKE1BWF9BUkdfU1RSTEVOID0gUEFHRV9TSVpFw5czMiA9IDEyOEtCLCDsu6TrhJAg7ZWY65Oc7L2U65SpIOyDgeyImClcbi8vIOyLnOyKpO2FnCDtlITroaztlITtirjqsIAg7J2066W8IOuEmOycvOuptCBleGVjdmUg6rCAIEUyQklHIOuhnCDqsbDrtoDrkJzri6QuIGRldGkg65OxIOuMgO2YlSDtlITroaztlITtirjripQg7Iuk7LihXG4vLyDtj4nqt6AgMzQzS0LCt+y1nOuMgCA0ODVLQihvcHVzLTQtOCnrnbwg7J287IOB7KCB7Jy866GcIOy0iOqzvO2VnOuLpC4g7ZWc6rOE7J2YIOygiOuwmCg2NEtCKeydhCDsnoTqs4TqsJLsnLzroZwg7J6h7JWEXG4vLyBVVEYtOCDrqYDti7DrsJTsnbTtirjCt+yYiOy4oSDrqrsg7ZWcIOyXrOycoOu2hOq5jOyngCDslYjsoIQg66eI7KeE7J2EIOuRlOuLpC5cbmV4cG9ydCBjb25zdCBTWVNURU1fUFJPTVBUX0FSR1ZfTUFYX0JZVEVTID0gQVJHVl9TQUZFX01BWF9VVEY4X0JZVEVTO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDbGF1ZGVBcmdzKG9wdHM6IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuCDsoITri6zsnYAg7YGs6riw66GcIOu2hOq4sO2VnOuLpCjtmLjstpzrtoDqsIAg6rKw7KCVKTpcbiAgLy8gIC0g7J6R7Jy866m0IHN5c3RlbShpbmxpbmUpIOKGkiAtLXN5c3RlbS1wcm9tcHQgPHRleHQ+ICjtjIzsnbwgSS9PIOyXhuydjCwg6riw7KG0IOqyveuhnClcbiAgLy8gIC0g7YGs66m0IHN5c3RlbVByb21wdEZpbGUo6rK966GcKSDihpIgLS1zeXN0ZW0tcHJvbXB0LWZpbGUgPHBhdGg+IChhcmd2IO2VnOqzhCDtmoztlLwpXG4gIC8vIC0tc3lzdGVtLXByb21wdC1maWxlIOydgCAtLXN5c3RlbS1wcm9tcHQg7JmAIOuPmeydvO2VmOqyjCBkZWZhdWx0IOulvCByZXBsYWNlIO2VnOuLpChhcHBlbmQg7JWE64uYIOKAlFxuICAvLyBSNyDqsqnrpqwg67O07KG0LCDsi6TsuKEg7ZmV7J24KS4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdChkZWZhdWx0IDIzayDso7zsnoUg67Cp7KeAKS5cbiAgc3lzdGVtPzogc3RyaW5nO1xuICBzeXN0ZW1Qcm9tcHRGaWxlPzogc3RyaW5nO1xuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBuZWVkc09uZU1pbGxpb25TdWZmaXg/OiBib29sZWFuO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn0pOiBBcnJheTxzdHJpbmc+IHtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ob3B0cy5qc29uU2NoZW1hICYmIG9wdHMuanNvblNjaGVtYS5sZW5ndGggPiAwKTtcbiAgaWYgKHVzZVN0cnVjdHVyZWQpIGFzc2VydEFudGhyb3BpY1NjaGVtYUFyZ3ZTaXplKG9wdHMuanNvblNjaGVtYSEpO1xuICAvLyAtLXRvb2xzIFwiXCIg66GcIOyghOyytCDssKjri6gsIHN0cnVjdHVyZWQoanNvblNjaGVtYSDsnojsnYwpIOuptCBTdHJ1Y3R1cmVkT3V0cHV0IOunjCDtl4jsmqkuXG4gIGNvbnN0IHRvb2xBcmdzID0gdXNlU3RydWN0dXJlZFxuICAgID8gW1wiLS10b29sc1wiLCBcIlwiLCBcIi0tYWxsb3dlZC10b29sc1wiLCBcIlN0cnVjdHVyZWRPdXRwdXRcIl1cbiAgICA6IFtcIi0tdG9vbHNcIiwgXCJcIl07XG5cbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuDog7YyM7J28IOqyveuhnOqwgCDsmKTrqbQgLS1zeXN0ZW0tcHJvbXB0LWZpbGUsIOyVhOuLiOuptCBpbmxpbmUgLS1zeXN0ZW0tcHJvbXB0LlxuICAvLyAo7Zi47Lac67aA6rCAIO2BrOq4sOuhnCDrtoTquLDtlbQg65GYIOykkSDtlZjrgpjrp4wg7LGE7Jq064ukLiDrkZgg64ukIOyXhuycvOuptCDruYggLS1zeXN0ZW0tcHJvbXB0LilcbiAgY29uc3Qgc3lzdGVtQXJncyA9IG9wdHMuc3lzdGVtUHJvbXB0RmlsZVxuICAgID8gW1wiLS1zeXN0ZW0tcHJvbXB0LWZpbGVcIiwgb3B0cy5zeXN0ZW1Qcm9tcHRGaWxlXVxuICAgIDogW1wiLS1zeXN0ZW0tcHJvbXB0XCIsIG9wdHMuc3lzdGVtID8/IFwiXCJdO1xuXG4gIGNvbnN0IGFyZ3M6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgXCItcFwiLFxuICAgIC4uLnRvb2xBcmdzLFxuICAgIFwiLS1kaXNhbGxvd2VkVG9vbHNcIixcbiAgICAuLi5BTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyxcbiAgICBcIi0taW5wdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS1vdXRwdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS12ZXJib3NlXCIsXG4gICAgLi4uKG9wdHMuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyA/IFtcIi0taW5jbHVkZS1wYXJ0aWFsLW1lc3NhZ2VzXCJdIDogW10pLFxuICAgIFwiLS1wZXJtaXNzaW9uLW1vZGVcIixcbiAgICBcImJ5cGFzc1Blcm1pc3Npb25zXCIsXG4gICAgXCItLXNldHRpbmctc291cmNlc1wiLFxuICAgIFwicHJvamVjdFwiLFxuICAgIFwiLS1tb2RlbFwiLFxuICAgIGFwcGx5T25lTWlsbGlvblN1ZmZpeChvcHRzLm1vZGVsLCBvcHRzLm5lZWRzT25lTWlsbGlvblN1ZmZpeCA/PyBmYWxzZSksXG4gICAgLy8gaW5saW5lIFtTeXN0ZW1dIOq4iOyngCDigJQg7KCV7IudIOyxhOuEkOunjChSNykuIOyDneuetSDsi5wgQ0MgZGVmYXVsdCgyM2spIOyjvOyeheuQmOuvgOuhnCDrsJjrk5zsi5wg66qF7IucLlxuICAgIC8vIO2BrOq4sOyXkCDrlLDrnbwgLS1zeXN0ZW0tcHJvbXB0KOyekeydjCkgLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSjtgbwp66GcIOu2hOq4sChzeXN0ZW1BcmdzKS5cbiAgICAuLi5zeXN0ZW1BcmdzLFxuICAgIC8vIEZhYmxlIDUg64qUIGFkYXB0aXZlIHRoaW5raW5nIOydtCDtlYTsiJjsnbTqs6AsIE9wdXMgNSDripQg6rO17IudIOq4sOuzuCBhZGFwdGl2ZSDrj5nsnpHsnYQg67O07KG07ZWc64ukLlxuICAgIC4uLih1c2VzQWRhcHRpdmVUaGlua2luZyhvcHRzLm1vZGVsKSA/IFtdIDogW1wiLS10aGlua2luZ1wiLCBcImRpc2FibGVkXCJdKSxcbiAgICAvLyBDbGF1ZGUgQ29kZSDslrTtnJgg67CW7J2YIGVmZm9ydChPcGVuQUkg7KCE7JqpIHVsdHJhLCDsmJsgbm9uZS9taW5pbWFsIOuTsSnripQg7KGw7Jqp7Z6IIOuyhOumrOqzoCBxZ3JpZCDquLDrs7jsnYQg7JO064ukLlxuICAgIFwiLS1lZmZvcnRcIixcbiAgICByZXNvbHZlQW50aHJvcGljRWZmb3J0KG9wdHMuZWZmb3J0KSA/PyBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gICAgXCItLWRpc2FibGUtc2xhc2gtY29tbWFuZHNcIixcbiAgICBcIi0tc2Vzc2lvbi1pZFwiLFxuICAgIG9wdHMuc2Vzc2lvbklkLFxuICBdO1xuICBpZiAodXNlU3RydWN0dXJlZCkgYXJncy5wdXNoKFwiLS1qc29uLXNjaGVtYVwiLCBvcHRzLmpzb25TY2hlbWEhKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICogQ2xhdWRlIOyEuOyFmOydhCBzcGF3biDtlbQg7ZWcIHR1cm4g7J2EIOyLpO2Wie2VnOuLpC4gcGVyLXNlc3Npb24g65297Jy866GcIOyngeugrO2ZlOuQnOuLpC5cbiAqIEBwYXJhbSBvbkRlbHRhIOygkOynhCDthY3siqTtirggZGVsdGEoc3RyZWFtVGV4dCkg65iQ64qUIHN0cnVjdHVyZWQg67aA67aEIEpTT04oc3RyZWFtT2JqZWN0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNsYXVkZVNlc3Npb24oXG4gIHJlcTogQ2xhdWRlU2Vzc2lvblJlcXVlc3QsXG4gIG9uRGVsdGE6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+IHtcbiAgLy8g7KCV6rec7ZmUIOq3nOy5meydgCBjYW5vbmljYWxBbnRocm9waWNNb2RlbCDsnbQg64uo64+FIOyGjOycoCDigJQgZGlzcGF0Y2hlciDqsIAg7J2066+4IGNhbm9uaWNhbCDsnYQg64SY6riw7KeA66eMLFxuICAvLyDsp4HsoJEg7Zi47LacKO2FjOyKpO2KuC/rr7jrnpggY2FsbGVyKSDrjIDruYQg67Cp7Ja07KCB7Jy866GcIO2VnCDrsogg642UIO2GteqzvOyLnO2CqOuLpCjsnbTrr7ggY2Fub25pY2FsIOydtOuptCBuby1vcCkuXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgocmVxLm1vZGVsKTtcbiAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChyZXEubW9kZWwpO1xuICBjb25zdCBzdXBwb3J0c09uZU1pbGxpb24gPSBzdXBwb3J0czFNQ29udGV4dChtb2RlbCk7XG4gIGNvbnN0IG5lZWRzT25lTWlsbGlvblN1ZmZpeCA9IG5lZWRzQ2xpMW1TdWZmaXgobW9kZWwpO1xuICBjb25zdCBzZXNzaW9uSWQgPSByYW5kb21VVUlEKCk7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWQgPSBCb29sZWFuKHJlcS5qc29uU2NoZW1hICYmIHJlcS5qc29uU2NoZW1hLmxlbmd0aCA+IDApO1xuICBjb25zdCB3b3JrZXJJZCA9IG1ha2VBbnRocm9waWNXb3JrZXJJZChyZXEudG9rZW5JZCk7XG5cbiAgcmV0dXJuIHdpdGhTZXNzaW9uTG9jayhzZXNzaW9uSWQsICgpID0+IHtcbiAgICBlbnN1cmVDd2QoKTtcbiAgICBjb25zdCBjb25maWdEaXIgPSBlbnN1cmVDb25maWdEaXIocmVxLnRva2VuSWQpO1xuXG4gICAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuOulvCDtgazquLDroZwg67aE6riwOiAxMjhLQihhcmd2IO2VnOqzhCnsnZgg7KCI67CY7J2EIOuEmOycvOuptCDtjIzsnbzroZwg64SY6rKoIEUyQklHIO2ajO2UvC5cbiAgICAvLyDsnpHsnYAg7ZSE66Gs7ZSE7Yq464qUIO2MjOydvCBJL08g7JeG7J20IOq4sOyhtCBpbmxpbmUg6rK966Gc66W8IOq3uOuMgOuhnCDsk7Tri6Qo64yA67aA67aE7J2YIO2YuOy2nCkuXG4gICAgLy8g7Iuk7KCcIO2MjOydvCDsk7DquLDripQgYWJvcnQg7LK07YGsIOydtO2bhChQcm9taXNlIOyViCnroZwg66+466SELCDsnbTrr7gg7Leo7IaM65CcIOyalOyyreyXlCDsk7Dsp4Ag7JWK64qU64ukLlxuICAgIGNvbnN0IHN5c3RlbSA9IHJlcS5zeXN0ZW0gPz8gXCJcIjtcbiAgICBjb25zdCB1c2VTeXN0ZW1Qcm9tcHRGaWxlID0gQnVmZmVyLmJ5dGVMZW5ndGgoc3lzdGVtLCBcInV0ZjhcIikgPiBTWVNURU1fUFJPTVBUX0FSR1ZfTUFYX0JZVEVTO1xuICAgIGNvbnN0IHN5c3RlbVByb21wdEZpbGUgPSB1c2VTeXN0ZW1Qcm9tcHRGaWxlXG4gICAgICA/IGAke2NvbmZpZ0Rpcn0vc3lzdGVtLXByb21wdC0ke3Nlc3Npb25JZH0udHh0YFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhcmdzID0gYnVpbGRDbGF1ZGVBcmdzKHtcbiAgICAgIG1vZGVsLFxuICAgICAgc3lzdGVtOiB1c2VTeXN0ZW1Qcm9tcHRGaWxlID8gdW5kZWZpbmVkIDogcmVxLnN5c3RlbSxcbiAgICAgIHN5c3RlbVByb21wdEZpbGUsXG4gICAgICBlZmZvcnQ6IHJlcS5lZmZvcnQsXG4gICAgICBqc29uU2NoZW1hOiByZXEuanNvblNjaGVtYSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG5lZWRzT25lTWlsbGlvblN1ZmZpeCxcbiAgICAgIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM6IHJlcS5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRMaW5lcyA9IGJ1aWxkU3RyZWFtSnNvbklucHV0KHtcbiAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICBpbnB1dDogcmVxLmlucHV0LFxuICAgIH0pO1xuICAgIGNvbnN0IHN0ZGluUGF5bG9hZCA9IGRlY29yYXRlQW5kU2VyaWFsaXplKGlucHV0TGluZXMsIHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q2xhdWRlU2Vzc2lvblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcS5hYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiYWJvcnRlZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8g64yA7ZiVIOyLnOyKpO2FnCDtlITroaztlITtirjripQgc3Bhd24g7KeB7KCE7JeQIO2MjOydvOuhnCDquLDroZ0oYXJndiBFMkJJRyDtmoztlLwpLiDsooXro4wg7IucIOygleumrO2VnOuLpC5cbiAgICAgIGlmIChzeXN0ZW1Qcm9tcHRGaWxlKSB3cml0ZUZpbGVTeW5jKHN5c3RlbVByb21wdEZpbGUsIHN5c3RlbSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJjbGF1ZGVcIiwgYXJncywge1xuICAgICAgICAvLyBzdGRlcnIg64+EIOy6oeyymDogaW52YWxpZCBPQXV0aCAvIOyemOuqu+uQnCDtlIzrnpjqt7ggLyBDTEkg6rKA7KadIOyLpO2MqOqwgFxuICAgICAgICAvLyBcImNsb3NlZCB3aXRob3V0IHJlc3VsdFwiIOuhnCDrrYnqsJzsp4Dsp4Ag7JWK6rKMIGNsb3NlL2Vycm9yIOyXkCBzdGRlcnIg66W8IOyLpOyWtCDrs7Trgrjri6QuXG4gICAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIGN3ZDogQU5USFJPUElDX0NMQVVERV9DV0QsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgICAgICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU46IHJlcS50b2tlbixcbiAgICAgICAgICBDTEFVREVfQ09ORklHX0RJUjogY29uZmlnRGlyLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQVVUT19NRU1PUlk6IFwiMVwiLFxuICAgICAgICAgIC4uLnRoaW5raW5nRW52KG1vZGVsKSxcbiAgICAgICAgICAuLi5vbmVNaWxsaW9uRW52KHN1cHBvcnRzT25lTWlsbGlvbiksXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9DTEFVREVfTURTOiBcIjFcIixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX1RFUk1JTkFMX1RJVExFOiBcIjFcIixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0JVTkRMRURfU0tJTExTOiBcIjFcIixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX1dPUktGTE9XUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfQVRUUklCVVRJT05fSEVBREVSOiBcIjBcIixcbiAgICAgICAgICAvLyBzdHJ1Y3R1cmVkICsg7Iqk7Yq466as67CN7J28IOuVjOunjCByZXRyeSDrpbwg6rOg7KCV7ZWc64ukKFNPTi00OTUpLiB0ZXh0IOuqqOuTnOyZgCDrhbzsiqTtirjrprxcbiAgICAgICAgICAvLyBnZW5lcmF0ZSDripQgQ0Mg6riw67O4IHJldHJ5IOulvCDqt7jrjIDroZwg7JO064ukLlxuICAgICAgICAgIC4uLihzaG91bGRQaW5TdHJ1Y3R1cmVkUmV0cmllcyh7XG4gICAgICAgICAgICB1c2VTdHJ1Y3R1cmVkLFxuICAgICAgICAgICAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogcmVxLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAgID8gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYoKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBidWZmZXIgPSBcIlwiO1xuICAgICAgY29uc3Qgc3RyZWFtU3RhdGU6IENsYXVkZVN0cmVhbUpzb25TdGF0ZSA9IHt9O1xuICAgICAgY29uc3QgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpO1xuICAgICAgY29uc3Qgb25UcmFja2VkRGVsdGEgPSB0dGZ0VHJhY2tlci53cmFwRGVsdGEob25EZWx0YSk7XG4gICAgICAvLyBib3VuZGVkIHN0ZGVyciDrsoTtjbwo7LWc6re8IH40S0Lrp4wg7Jyg7KeAIOKAlCDrrLTtlZwg64iE7KCBIOuwqeyngCkuXG4gICAgICBsZXQgc3RkZXJyQnVmID0gXCJcIjtcbiAgICAgIGNvbnN0IFNUREVSUl9DQVAgPSA0MDk2O1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBzdGRlcnJCdWYgPSAoc3RkZXJyQnVmICsgZC50b1N0cmluZygpKS5zbGljZSgtU1RERVJSX0NBUCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0ZGVyclN1ZmZpeCA9ICgpID0+IChzdGRlcnJCdWYudHJpbSgpID8gYCDigJQgc3RkZXJyOiAke3N0ZGVyckJ1Zi50cmltKCl9YCA6IFwiXCIpO1xuICAgICAgLy8gc3Bhd24g7IucIOyTtCDsnoTsi5wg7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuCDtjIzsnbwg7KCV66asKO2VnCDrsojrp4wpLiDrqqjrk6Ag7KKF66OMIOqyveuhnOyXkOyEnCDtmLjstpztlZzri6QuXG4gICAgICAvLyDriITrnb3rj7zrj4Qg64uk7J2MIGVuc3VyZUNvbmZpZ0RpciDqsIAg65SU66CJ7Yag66as66W8IOyerOyCrOyaqe2VoCDrv5DsnbTsp4Drp4wsIHNlc3Npb25JZCDrs4Qg7YyM7J287J206528XG4gICAgICAvLyDsjJPsnbTrqbQg65SU7Iqk7YGs6rCAIOywqOuvgOuhnCBzZXR0bGUg7IucIOymieyLnCDsp4DsmrTri6QuXG4gICAgICBjb25zdCBjbGVhbnVwU3Bhd25GaWxlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFzeXN0ZW1Qcm9tcHRGaWxlKSByZXR1cm47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdW5saW5rU3luYyhzeXN0ZW1Qcm9tcHRGaWxlKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8g7J2066+4IOyXhuqxsOuCmCDqtoztlZwg66y47KCc66m0IOustOyLnCDigJQg7KCV66as64qUIGJlc3QtZWZmb3J0LlxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbGV0IGNsZWFudXBBYm9ydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2xhdWRlIHNlc3Npb24gdGltZW91dCBhZnRlciAke3JlcS50aW1lb3V0TXMgLyAxMDAwfXNgKSk7XG4gICAgICB9LCByZXEudGltZW91dE1zKTtcblxuICAgICAgY29uc3QgZmluaXNoID0gKHJlc3VsdDogQ2xhdWRlU3RyZWFtUmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZXNvbHZlKHsgLi4ucmVzdWx0LCBzZXNzaW9uSWQsIHdvcmtlcklkLCB0dGZ0TXM6IHR0ZnRUcmFja2VyLnZhbHVlKCkgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiYWJvcnRlZFwiKSk7XG4gICAgICB9O1xuICAgICAgY2xlYW51cEFib3J0ID0gKCkgPT4gcmVxLmFib3J0U2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICByZXEuYWJvcnRTaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkOiBCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgYnVmZmVyICs9IGQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpID8/IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZVN0cmVhbUpzb25MaW5lKGxpbmUsIG9uVHJhY2tlZERlbHRhLCB7XG4gICAgICAgICAgICBzdHJ1Y3R1cmVkT3V0cHV0OiB1c2VTdHJ1Y3R1cmVkLFxuICAgICAgICAgICAgc3RhdGU6IHN0cmVhbVN0YXRlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZpbmlzaChyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2xhdWRlIHNlc3Npb24gY2xvc2VkIHdpdGhvdXQgcmVzdWx0JHtzdGRlcnJTdWZmaXgoKX1gKSk7XG4gICAgICB9KTtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2xhdWRlIHNlc3Npb24gc3Bhd24gZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHN0ZGluIOycvOuhnCDsnoXroKUgSlNPTkwg7Z2Y66as6rOgIOuLq+uKlOuLpC5cbiAgICAgIHR0ZnRUcmFja2VyLm1hcmtTdGFydCgpO1xuICAgICAgY2hpbGQuc3RkaW4/LndyaXRlKHN0ZGluUGF5bG9hZCk7XG4gICAgICBjaGlsZC5zdGRpbj8uZW5kKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vLyB1c2FnZSDsnqzrhbjstpwo7YWM7Iqk7Yq4IO2OuOydmCkuXG5l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
|
|
274
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUsIHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biwgdHlwZSBVc2VySW5wdXQgfSBmcm9tIFwiLi4vY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQge1xuICBBUkdWX1NBRkVfTUFYX1VURjhfQllURVMsXG4gIGFzc2VydEFudGhyb3BpY1NjaGVtYUFyZ3ZTaXplLFxufSBmcm9tIFwiLi4vY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVUdGZ0VHJhY2tlciB9IGZyb20gXCIuLi9jb21tb24vdHRmdFwiO1xuaW1wb3J0IHtcbiAgQU5USFJPUElDX0NMQVVERV9DV0QsXG4gIGFudGhyb3BpY0NvbmZpZ0RpcixcbiAgQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgsXG4gIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsLFxuICBuZWVkc0NsaTFtU3VmZml4LFxuICBzdXBwb3J0czFNQ29udGV4dCxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lLCByZXNvbHZlQW50aHJvcGljVGhpbmtpbmcgfSBmcm9tIFwiLi9hbnRocm9waWMtdGhpbmtpbmdcIjtcbmltcG9ydCB7XG4gIGJ1aWxkU3RyZWFtSnNvbklucHV0LFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25TdGF0ZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uTGluZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1SZXN1bHQsXG4gIGhhbmRsZVN0cmVhbUpzb25MaW5lLFxufSBmcm9tIFwiLi9zdHJlYW0tanNvbi1hZGFwdGVyXCI7XG5cbi8vIOKUgOKUgCBwZXItc2Vzc2lvbiDrnb0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHNlc3Npb24taWQg64uo7JyEIOyngeugrO2ZlCBwcmltaXRpdmUuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggdXVpZCDrnbwg7IKs7Iuk7IOBIG5vLW9wIOydtOyngOunjCxcbi8vIOqwmeydgCBzZXNzaW9uLWlkIOulvCDsp4HsoJEg7JOw64qUIO2YuOy2nOyekOuKlCDsl6zsoITtnogg7KeB66Cs7ZmUIOuztOyepeydhCDrsJvripTri6QuXG5jb25zdCBzZXNzaW9uQ2hhaW5zID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU2Vzc2lvbkxvY2s8VD4oc2Vzc2lvbklkOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAvLyDsnbTsoIQgdHVybiDsnZgg7ISx7Yyo7JmAIOustOq0gO2VmOqyjCDsp4HroKwg7LK07J247J2EIOyeh+uKlOuLpC5cbiAgY29uc3QgbmV4dCA9IHByZXYudGhlbihmbiwgZm4pO1xuICAvLyB0YWlsOiDshLHtjKgg66y06rSAIHNldHRsZSDrkJjripQg7ZW465OkLiDsnbTqsbgg66e17JeQIOuRkOqzoCwgZmluYWxseSDsl5DshJwgXCLsl6zsoITtnogg64K06rCAIOuBnVwi7J28IOuVjOunjCDsgq3soJwuXG4gIC8vIChzZXQg7KeB7ZuEIHVuZGVmaW5lZCDqsoDsgqzroZwg7ZWY66m0IOygiOuMgCDsgq3soJwg7JWIIOuPvCDshLjshZggaWQg6rCAIOuIhOyImOuQqCDigJQgdGFpbCDsnbzsuZgg6rKA7IKs66GcIO2ajO2UvC4pXG4gIGNvbnN0IHRhaWwgPSBuZXh0LnRoZW4oXG4gICAgKCkgPT4ge30sXG4gICAgKCkgPT4ge30sXG4gICk7XG4gIHNlc3Npb25DaGFpbnMuc2V0KHNlc3Npb25JZCwgdGFpbCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5leHQ7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g6re4IOyCrOydtCDri6TrpbggdHVybiDsnbQg7LK07J247J2EIOydtOyWtOuwm+yVmOycvOuptCB0YWlsIOydtCDqtZDssrTrj7wg7J6I64ukIOKAlCDqt7jrlYzripQg7IKt7KCc7ZWY7KeAIOyViuuKlOuLpC5cbiAgICBpZiAoc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA9PT0gdGFpbCkgc2Vzc2lvbkNoYWlucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyDilIDilIAgY29vcmQg66ek7ZWRIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyB0b2tlbiDquLDrsJgg7JWI7KCVIHdvcmtlcklkIO2VqeyEsS4gQW50aHJvcGljIOydgCB3b3JrZXIgcG9vbCDsnbQg7JeG7Jy866+A66GcIHRva2VuSWQg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFudGhyb3BpY1dvcmtlcklkKHRva2VuSWQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0b2tlbklkO1xufVxuXG4vLyDilIDilIAgZW52ZWxvcGUgZGVjb3JhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHN0cmVhbS1qc29uIOyeheugpSDrnbzsnbjsl5AgU0RLIGVudmVsb3BlIOu2gOywqSDtm4Qg7KeB66Cs7ZmULiBzZXNzaW9uIOyGjOycoOyekOyduCDsl6zquLDshJwg7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlQW5kU2VyaWFsaXplKFxuICBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+LFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgbGluZXNcbiAgICAgIC5tYXAoKGxpbmUpID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi5saW5lLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgcGFyZW50X3Rvb2xfdXNlX2lkOiBudWxsLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuICApO1xufVxuXG4vLyDilIDilIAgc3Bhd24gKyBjb25zdW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXF1ZXN0IHtcbiAgdG9rZW5JZDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nOyAvLyBPQXV0aCBhY2Nlc3MgdG9rZW5cbiAgbW9kZWw6IHN0cmluZztcbiAgc3lzdGVtPzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nOyAvLyDsnojsnLzrqbQgc3RydWN0dXJlZCBvdXRwdXRcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IGJvb2xlYW47XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIGlucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVzdWx0IGV4dGVuZHMgQ2xhdWRlU3RyZWFtUmVzdWx0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdvcmtlcklkOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gcGVyLXRva2VuIENMQVVERV9DT05GSUdfRElSIOuztOyepSjqsqnrpqwpLiDqsr3roZwg6rec7LmZ7J2AIGFudGhyb3BpY0NvbmZpZ0RpcijsiJzsiJgg7ZWo7IiYKeydtCDshozsnKAg4oCUXG4vLyDsl6zquLDshKAg6re4IOqyveuhnOyXkCDruYggc2V0dGluZ3Mg66W8IOq5lOyVhCBjbGF1ZGUtbWVtIGhvb2sg65Ox7J2EIOywqOuLqO2VnOuLpC4gKFIxMCDqsqnrpqwpXG4vLyDsnbQgc2VlZCDtjIzsnbzsnYAgY2xhdWRlLW1lbSBob29rIC8g7IKs7Jqp7J6QIOyEpOyglSDsmKTsl7wg7LCo64uo7J2EIOychO2VnCDqsqnrpqwg6rK96rOE64ukLiDrp6Qg7Zi47Lac66eI64ukIOuLpOyLnCDsjajshJxcbi8vIOyZuOu2gCDrs4DsobDCt+yCreygnCDtm4Tsl5Drj4Qg64uk7J2MIOyLpO2WieyXkOyEnCBzZWxmLWhlYWxpbmcg65CY64+E66GdIOq4sOyhtCBzZW1hbnRpY3Mg66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyID0gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQpO1xuICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9Ly5jbGF1ZGUuanNvbmAsIFwie31cIik7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgcmV0dXJuIGRpcjtcbn1cblxubGV0IGN3ZEVuc3VyZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGVuc3VyZUN3ZCgpOiB2b2lkIHtcbiAgaWYgKGN3ZEVuc3VyZWQpIHJldHVybjtcbiAgbWtkaXJTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbmAsIFwie31cIik7XG4gIGN3ZEVuc3VyZWQgPSB0cnVlO1xufVxuXG4vLyBzcGF3biBhcmdzIOq1rOyEsS4g66mA7Yuw7YS0L+qyqeumrC9zdHJ1Y3R1cmVkIOuqqOuTnCDrsJjsmIEuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPbmVNaWxsaW9uU3VmZml4KG1vZGVsOiBzdHJpbmcsIG5lZWRzU3VmZml4OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKTtcbiAgcmV0dXJuIG5lZWRzU3VmZml4ID8gYCR7YmFzZX1bMW1dYCA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVNaWxsaW9uRW52KHN1cHBvcnRlZDogYm9vbGVhbik6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUPzogXCIxXCIgfSB7XG4gIHJldHVybiBzdXBwb3J0ZWQgPyB7fSA6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIiB9O1xufVxuXG4vLyBTT04tNDk1OiBzdHJ1Y3R1cmVkIG91dHB1dCByZXRyeSDrpbwgMSDroZwg6rOg7KCV7ZWc64ukLiBDQyDqsIAgYXR0ZW1wdCDrpbwgcmVqZWN0IO2VmOqzoCByZXRyeSDtlZjrqbRcbi8vIGB7cmVqZWN0ZWR9e2FjY2VwdGVkfWAg64iE7KCB7J20IEFJLVNESyDsnZggSlNPTi5wYXJzZSDrpbwg6rmo65yo66as66+A66GcLCByZXRyeSDsnpDssrTrpbwg66eJ7JWEIOq3uCDqsr3roZzrpbxcbi8vIOybkOyynCDssKjri6jtlZzri6QuIGAwYCDsnYAgQ0MgcXVlcnkgbG9vcChgY2FsbHNUaGlzUXVlcnkgPj0gbWF4UmV0cmllc2Ap6rCAIOyyqyBhdHRlbXB0IGVtaXQg7KCE7JeQXG4vLyDsi6TtjKjsi5ztgqTrr4DroZwoYGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzYCkg7Jm467aAIOqwkuydtCAxIOuvuOunjOydtOyWtOuPhCAxIOuhnCDtgbTrnqjtlITtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYocmF3ID0gcHJvY2Vzcy5lbnYuTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVMpOiB7XG4gIE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBzdHJpbmc7XG59IHtcbiAgaWYgKCFyYXcpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogU3RyaW5nKE1hdGgubWF4KHBhcnNlZCwgMSkpIH07XG59XG5cbi8vIFNPTi00OTUg7J2YIHJldHJ5IOqzoOygleydgCBcIuyKpO2KuOumrOuwjSArIHN0cnVjdHVyZWRcIiDsobDtlakg7ZWc7KCVIOygleyxheydtOuLpC4g7Iqk7Yq466a87JeQ7IScIHJldHJ5IOqwgCDrj4zrqbRcbi8vIHdhbGwtY2xvY2sg7J20IDLrsLDqsIAg65CY7Ja0IOyLpOyaqeyEseydtCDsl4bquLAg65WM66y47J2064ukKOybkCDqsrDsoJUg7IKs7JygKS4g64W87Iqk7Yq466a8IGdlbmVyYXRlIOuKlCDslaDstIjsl5Ag7JmE66OM66W8XG4vLyDquLDri6Trpqzrr4DroZwg6re4IOyCrOycoOqwgCDshLHrpr3tlZjsp4Ag7JWK64qU64ukLiDrsJjrqbQgQ2xhdWRlIOqzhOyXtOydgCBPcGVuQUkg64yA67mEIHN0cnVjdHVyZWQgb3V0cHV0IOykgOyImOycqOydtFxuLy8g64Ku7JWELCDrhbzsiqTtirjrprzquYzsp4AgcmV0cnk9MSDroZwg66y27Jy866m0IDHtmowgcmVqZWN0IOqwgCDqs6frsJTroZxcbi8vIGBlcnJvcl9tYXhfc3RydWN0dXJlZF9vdXRwdXRfcmV0cmllc2Ag66GcIOyngeqysOuQnOuLpCjsi6TsuKE6IGRldGlfcHJvZHVjdGlvbiBvcHVzLTQtOCDsi6TtjKjsnKggMzkuNiUpLlxuLy8g7Iqk7Yq466as67CNIOyXrOu2gOuKlCBgLS1pbmNsdWRlLXBhcnRpYWwtbWVzc2FnZXNgIOulvCDrtpnsnbTripQgZ2VuZXJhdGVTdHJlYW0g6rK966Gc7JeQ7ISc66eMIHRydWUg6rCAIOuQmOuvgOuhnFxuLy8gKGFudGhyb3BpYy1kaXNwYXRjaGVyIOydmCBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDrtoTquLApIOydtOulvCDsi6Tsp4gg6rWs67aE7J6Q66GcIOyTtOuLpC5cbi8vIOu5hOyEseqztSBzdWJ0eXBlIOydhCDtla3sg4EgaXNFcnJvciDroZwg7Jis66as64qUIFNPTi00OTUg7J2YIOuCmOuouOyngCDsoIjrsJjsnYAg6re464yA66GcIOycoOyngOuQnOuLpCDigJQgcmV0cnkg7ZuE7JeQ64+EXG4vLyBkZWdlbmVyYXRlIOy2nOugpeydtOuptCDsobDsmqntnogg7Ya16rO87Iuc7YKk7KeAIOyViuqzoCDsoJXsp4HtlZjqsowg7Iuk7Yyo7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFBpblN0cnVjdHVyZWRSZXRyaWVzKG9wdHM6IHtcbiAgdXNlU3RydWN0dXJlZDogYm9vbGVhbjtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59KTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRzLnVzZVN0cnVjdHVyZWQgJiYgb3B0cy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzID09PSB0cnVlO1xufVxuXG4vLyBMaW51eCDri6jsnbwgYXJndiDsnbjsnpAg7ZWc6rOEKE1BWF9BUkdfU1RSTEVOID0gUEFHRV9TSVpFw5czMiA9IDEyOEtCLCDsu6TrhJAg7ZWY65Oc7L2U65SpIOyDgeyImClcbi8vIOyLnOyKpO2FnCDtlITroaztlITtirjqsIAg7J2066W8IOuEmOycvOuptCBleGVjdmUg6rCAIEUyQklHIOuhnCDqsbDrtoDrkJzri6QuIGRldGkg65OxIOuMgO2YlSDtlITroaztlITtirjripQg7Iuk7LihXG4vLyDtj4nqt6AgMzQzS0LCt+y1nOuMgCA0ODVLQihvcHVzLTQtOCnrnbwg7J287IOB7KCB7Jy866GcIOy0iOqzvO2VnOuLpC4g7ZWc6rOE7J2YIOygiOuwmCg2NEtCKeydhCDsnoTqs4TqsJLsnLzroZwg7J6h7JWEXG4vLyBVVEYtOCDrqYDti7DrsJTsnbTtirjCt+yYiOy4oSDrqrsg7ZWcIOyXrOycoOu2hOq5jOyngCDslYjsoIQg66eI7KeE7J2EIOuRlOuLpC5cbmV4cG9ydCBjb25zdCBTWVNURU1fUFJPTVBUX0FSR1ZfTUFYX0JZVEVTID0gQVJHVl9TQUZFX01BWF9VVEY4X0JZVEVTO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDbGF1ZGVBcmdzKG9wdHM6IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuCDsoITri6zsnYAg7YGs6riw66GcIOu2hOq4sO2VnOuLpCjtmLjstpzrtoDqsIAg6rKw7KCVKTpcbiAgLy8gIC0g7J6R7Jy866m0IHN5c3RlbShpbmxpbmUpIOKGkiAtLXN5c3RlbS1wcm9tcHQgPHRleHQ+ICjtjIzsnbwgSS9PIOyXhuydjCwg6riw7KG0IOqyveuhnClcbiAgLy8gIC0g7YGs66m0IHN5c3RlbVByb21wdEZpbGUo6rK966GcKSDihpIgLS1zeXN0ZW0tcHJvbXB0LWZpbGUgPHBhdGg+IChhcmd2IO2VnOqzhCDtmoztlLwpXG4gIC8vIC0tc3lzdGVtLXByb21wdC1maWxlIOydgCAtLXN5c3RlbS1wcm9tcHQg7JmAIOuPmeydvO2VmOqyjCBkZWZhdWx0IOulvCByZXBsYWNlIO2VnOuLpChhcHBlbmQg7JWE64uYIOKAlFxuICAvLyBSNyDqsqnrpqwg67O07KG0LCDsi6TsuKEg7ZmV7J24KS4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdChkZWZhdWx0IDIzayDso7zsnoUg67Cp7KeAKS5cbiAgc3lzdGVtPzogc3RyaW5nO1xuICBzeXN0ZW1Qcm9tcHRGaWxlPzogc3RyaW5nO1xuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nPzogYm9vbGVhbjtcbiAganNvblNjaGVtYT86IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG5lZWRzT25lTWlsbGlvblN1ZmZpeD86IGJvb2xlYW47XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufSk6IEFycmF5PHN0cmluZz4ge1xuICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhvcHRzLm1vZGVsLCBvcHRzLnRoaW5raW5nLCBvcHRzLmVmZm9ydCk7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWQgPSBCb29sZWFuKG9wdHMuanNvblNjaGVtYSAmJiBvcHRzLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGlmICh1c2VTdHJ1Y3R1cmVkKSBhc3NlcnRBbnRocm9waWNTY2hlbWFBcmd2U2l6ZShvcHRzLmpzb25TY2hlbWEhKTtcbiAgLy8gLS10b29scyBcIlwiIOuhnCDsoITssrQg7LCo64uoLCBzdHJ1Y3R1cmVkKGpzb25TY2hlbWEg7J6I7J2MKSDrqbQgU3RydWN0dXJlZE91dHB1dCDrp4wg7ZeI7JqpLlxuICBjb25zdCB0b29sQXJncyA9IHVzZVN0cnVjdHVyZWRcbiAgICA/IFtcIi0tdG9vbHNcIiwgXCJcIiwgXCItLWFsbG93ZWQtdG9vbHNcIiwgXCJTdHJ1Y3R1cmVkT3V0cHV0XCJdXG4gICAgOiBbXCItLXRvb2xzXCIsIFwiXCJdO1xuXG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirg6IO2MjOydvCDqsr3roZzqsIAg7Jik66m0IC0tc3lzdGVtLXByb21wdC1maWxlLCDslYTri4jrqbQgaW5saW5lIC0tc3lzdGVtLXByb21wdC5cbiAgLy8gKO2YuOy2nOu2gOqwgCDtgazquLDroZwg67aE6riw7ZW0IOuRmCDspJEg7ZWY64KY66eMIOyxhOyatOuLpC4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdC4pXG4gIGNvbnN0IHN5c3RlbUFyZ3MgPSBvcHRzLnN5c3RlbVByb21wdEZpbGVcbiAgICA/IFtcIi0tc3lzdGVtLXByb21wdC1maWxlXCIsIG9wdHMuc3lzdGVtUHJvbXB0RmlsZV1cbiAgICA6IFtcIi0tc3lzdGVtLXByb21wdFwiLCBvcHRzLnN5c3RlbSA/PyBcIlwiXTtcblxuICBjb25zdCBhcmdzOiBBcnJheTxzdHJpbmc+ID0gW1xuICAgIFwiLXBcIixcbiAgICAuLi50b29sQXJncyxcbiAgICBcIi0tZGlzYWxsb3dlZFRvb2xzXCIsXG4gICAgLi4uQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gICAgXCItLWlucHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tb3V0cHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tdmVyYm9zZVwiLFxuICAgIC4uLihvcHRzLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMgPyBbXCItLWluY2x1ZGUtcGFydGlhbC1tZXNzYWdlc1wiXSA6IFtdKSxcbiAgICBcIi0tcGVybWlzc2lvbi1tb2RlXCIsXG4gICAgXCJieXBhc3NQZXJtaXNzaW9uc1wiLFxuICAgIFwiLS1zZXR0aW5nLXNvdXJjZXNcIixcbiAgICBcInByb2plY3RcIixcbiAgICBcIi0tbW9kZWxcIixcbiAgICBhcHBseU9uZU1pbGxpb25TdWZmaXgob3B0cy5tb2RlbCwgb3B0cy5uZWVkc09uZU1pbGxpb25TdWZmaXggPz8gZmFsc2UpLFxuICAgIC8vIGlubGluZSBbU3lzdGVtXSDquIjsp4Ag4oCUIOygleyLnSDssYTrhJDrp4woUjcpLiDsg53rnrUg7IucIENDIGRlZmF1bHQoMjNrKSDso7zsnoXrkJjrr4DroZwg67CY65Oc7IucIOuqheyLnC5cbiAgICAvLyDtgazquLDsl5Ag65Sw6528IC0tc3lzdGVtLXByb21wdCjsnpHsnYwpIC8gLS1zeXN0ZW0tcHJvbXB0LWZpbGUo7YG8KeuhnCDrtoTquLAoc3lzdGVtQXJncykuXG4gICAgLi4uc3lzdGVtQXJncyxcbiAgICAvLyBPbmUgQ0xJIGNvbnRyb2wgb3ducyB0aGlua2luZzsgbm8gY29tcGV0aW5nIGFkYXB0aXZlL2J1ZGdldCBlbnZpcm9ubWVudCBvdmVycmlkZXMuXG4gICAgLi4uKHRoaW5raW5nLm1vZGUgPyBbXCItLXRoaW5raW5nXCIsIHRoaW5raW5nLm1vZGVdIDogW10pLFxuICAgIFwiLS1lZmZvcnRcIixcbiAgICB0aGlua2luZy5lZmZvcnQsXG4gICAgXCItLWRpc2FibGUtc2xhc2gtY29tbWFuZHNcIixcbiAgICBcIi0tc2Vzc2lvbi1pZFwiLFxuICAgIG9wdHMuc2Vzc2lvbklkLFxuICBdO1xuICBpZiAodXNlU3RydWN0dXJlZCkgYXJncy5wdXNoKFwiLS1qc29uLXNjaGVtYVwiLCBvcHRzLmpzb25TY2hlbWEhKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8qKlxuICogQ2xhdWRlIOyEuOyFmOydhCBzcGF3biDtlbQg7ZWcIHR1cm4g7J2EIOyLpO2Wie2VnOuLpC4gcGVyLXNlc3Npb24g65297Jy866GcIOyngeugrO2ZlOuQnOuLpC5cbiAqIEBwYXJhbSBvbkRlbHRhIOygkOynhCDthY3siqTtirggZGVsdGEoc3RyZWFtVGV4dCkg65iQ64qUIHN0cnVjdHVyZWQg67aA67aEIEpTT04oc3RyZWFtT2JqZWN0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNsYXVkZVNlc3Npb24oXG4gIHJlcTogQ2xhdWRlU2Vzc2lvblJlcXVlc3QsXG4gIG9uRGVsdGE6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+IHtcbiAgLy8g7KCV6rec7ZmUIOq3nOy5meydgCBjYW5vbmljYWxBbnRocm9waWNNb2RlbCDsnbQg64uo64+FIOyGjOycoCDigJQgZGlzcGF0Y2hlciDqsIAg7J2066+4IGNhbm9uaWNhbCDsnYQg64SY6riw7KeA66eMLFxuICAvLyDsp4HsoJEg7Zi47LacKO2FjOyKpO2KuC/rr7jrnpggY2FsbGVyKSDrjIDruYQg67Cp7Ja07KCB7Jy866GcIO2VnCDrsogg642UIO2GteqzvOyLnO2CqOuLpCjsnbTrr7ggY2Fub25pY2FsIOydtOuptCBuby1vcCkuXG4gIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgocmVxLm1vZGVsKTtcbiAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChyZXEubW9kZWwpO1xuICBjb25zdCB0aGlua2luZyA9IHJlc29sdmVBbnRocm9waWNUaGlua2luZyhtb2RlbCwgcmVxLnRoaW5raW5nLCByZXEuZWZmb3J0KTtcbiAgYXNzZXJ0QW50aHJvcGljVGhpbmtpbmdSdW50aW1lKHRoaW5raW5nLmV4dHJhQm9keSk7XG4gIGNvbnN0IHN1cHBvcnRzT25lTWlsbGlvbiA9IHN1cHBvcnRzMU1Db250ZXh0KG1vZGVsKTtcbiAgY29uc3QgbmVlZHNPbmVNaWxsaW9uU3VmZml4ID0gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbCk7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHJhbmRvbVVVSUQoKTtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ocmVxLmpzb25TY2hlbWEgJiYgcmVxLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHdvcmtlcklkID0gbWFrZUFudGhyb3BpY1dvcmtlcklkKHJlcS50b2tlbklkKTtcblxuICByZXR1cm4gd2l0aFNlc3Npb25Mb2NrKHNlc3Npb25JZCwgKCkgPT4ge1xuICAgIGVuc3VyZUN3ZCgpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IGVuc3VyZUNvbmZpZ0RpcihyZXEudG9rZW5JZCk7XG5cbiAgICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq466W8IO2BrOq4sOuhnCDrtoTquLA6IDEyOEtCKGFyZ3Yg7ZWc6rOEKeydmCDsoIjrsJjsnYQg64SY7Jy866m0IO2MjOydvOuhnCDrhJjqsqggRTJCSUcg7ZqM7ZS8LlxuICAgIC8vIOyekeydgCDtlITroaztlITtirjripQg7YyM7J28IEkvTyDsl4bsnbQg6riw7KG0IGlubGluZSDqsr3roZzrpbwg6re464yA66GcIOyTtOuLpCjrjIDrtoDrtoTsnZgg7Zi47LacKS5cbiAgICAvLyDsi6TsoJwg7YyM7J28IOyTsOq4sOuKlCBhYm9ydCDssrTtgawg7J207ZuEKFByb21pc2Ug7JWIKeuhnCDrr7jrpIQsIOydtOuvuCDst6jshozrkJwg7JqU7LKt7JeUIOyTsOyngCDslYrripTri6QuXG4gICAgY29uc3Qgc3lzdGVtID0gcmVxLnN5c3RlbSA/PyBcIlwiO1xuICAgIGNvbnN0IHVzZVN5c3RlbVByb21wdEZpbGUgPSBCdWZmZXIuYnl0ZUxlbmd0aChzeXN0ZW0sIFwidXRmOFwiKSA+IFNZU1RFTV9QUk9NUFRfQVJHVl9NQVhfQllURVM7XG4gICAgY29uc3Qgc3lzdGVtUHJvbXB0RmlsZSA9IHVzZVN5c3RlbVByb21wdEZpbGVcbiAgICAgID8gYCR7Y29uZmlnRGlyfS9zeXN0ZW0tcHJvbXB0LSR7c2Vzc2lvbklkfS50eHRgXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFyZ3MgPSBidWlsZENsYXVkZUFyZ3Moe1xuICAgICAgbW9kZWwsXG4gICAgICBzeXN0ZW06IHVzZVN5c3RlbVByb21wdEZpbGUgPyB1bmRlZmluZWQgOiByZXEuc3lzdGVtLFxuICAgICAgc3lzdGVtUHJvbXB0RmlsZSxcbiAgICAgIGVmZm9ydDogcmVxLmVmZm9ydCxcbiAgICAgIHRoaW5raW5nOiByZXEudGhpbmtpbmcsXG4gICAgICBqc29uU2NoZW1hOiByZXEuanNvblNjaGVtYSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG5lZWRzT25lTWlsbGlvblN1ZmZpeCxcbiAgICAgIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM6IHJlcS5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRMaW5lcyA9IGJ1aWxkU3RyZWFtSnNvbklucHV0KHtcbiAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICBpbnB1dDogcmVxLmlucHV0LFxuICAgIH0pO1xuICAgIGNvbnN0IHN0ZGluUGF5bG9hZCA9IGRlY29yYXRlQW5kU2VyaWFsaXplKGlucHV0TGluZXMsIHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q2xhdWRlU2Vzc2lvblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcS5hYm9ydFNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiYWJvcnRlZFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8g64yA7ZiVIOyLnOyKpO2FnCDtlITroaztlITtirjripQgc3Bhd24g7KeB7KCE7JeQIO2MjOydvOuhnCDquLDroZ0oYXJndiBFMkJJRyDtmoztlLwpLiDsooXro4wg7IucIOygleumrO2VnOuLpC5cbiAgICAgIGlmIChzeXN0ZW1Qcm9tcHRGaWxlKSB3cml0ZUZpbGVTeW5jKHN5c3RlbVByb21wdEZpbGUsIHN5c3RlbSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJjbGF1ZGVcIiwgYXJncywge1xuICAgICAgICAvLyBzdGRlcnIg64+EIOy6oeyymDogaW52YWxpZCBPQXV0aCAvIOyemOuqu+uQnCDtlIzrnpjqt7ggLyBDTEkg6rKA7KadIOyLpO2MqOqwgFxuICAgICAgICAvLyBcImNsb3NlZCB3aXRob3V0IHJlc3VsdFwiIOuhnCDrrYnqsJzsp4Dsp4Ag7JWK6rKMIGNsb3NlL2Vycm9yIOyXkCBzdGRlcnIg66W8IOyLpOyWtCDrs7Trgrjri6QuXG4gICAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIGN3ZDogQU5USFJPUElDX0NMQVVERV9DV0QsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgICAgICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfT0FVVEhfVE9LRU46IHJlcS50b2tlbixcbiAgICAgICAgICBDTEFVREVfQ09ORklHX0RJUjogY29uZmlnRGlyLFxuICAgICAgICAgIC4uLih0aGlua2luZy5leHRyYUJvZHkgPyB7IENMQVVERV9DT0RFX0VYVFJBX0JPRFk6IHRoaW5raW5nLmV4dHJhQm9keSB9IDoge30pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQVVUT19NRU1PUlk6IFwiMVwiLFxuICAgICAgICAgIC4uLm9uZU1pbGxpb25FbnYoc3VwcG9ydHNPbmVNaWxsaW9uKSxcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0NMQVVERV9NRFM6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfVEVSTUlOQUxfVElUTEU6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQlVORExFRF9TS0lMTFM6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfV09SS0ZMT1dTOiBcIjFcIixcbiAgICAgICAgICBDTEFVREVfQ09ERV9BVFRSSUJVVElPTl9IRUFERVI6IFwiMFwiLFxuICAgICAgICAgIC8vIHN0cnVjdHVyZWQgKyDsiqTtirjrpqzrsI3snbwg65WM66eMIHJldHJ5IOulvCDqs6DsoJXtlZzri6QoU09OLTQ5NSkuIHRleHQg66qo65Oc7JmAIOuFvOyKpO2KuOumvFxuICAgICAgICAgIC8vIGdlbmVyYXRlIOuKlCBDQyDquLDrs7ggcmV0cnkg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG4gICAgICAgICAgLi4uKHNob3VsZFBpblN0cnVjdHVyZWRSZXRyaWVzKHtcbiAgICAgICAgICAgIHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiByZXEuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgPyBzdHJ1Y3R1cmVkT3V0cHV0UmV0cmllc0VudigpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnREEsTUFBTSxnQ0FBZ0IsSUFBSSxJQUE4QjtBQUV4RCxlQUFzQixnQkFBbUIsV0FBbUIsSUFBa0M7Q0FHNUYsTUFBTSxRQUZPLGNBQWMsSUFBSSxTQUFTLEtBQUssUUFBUSxRQUFR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
|
|
@@ -48,4 +48,4 @@ function resolveAnthropicEffort(effort) {
|
|
|
48
48
|
//#endregion
|
|
49
49
|
export { ANTHROPIC_EFFORTS, OPENAI_EFFORTS, resolveAnthropicEffort, resolveOpenAIEffort };
|
|
50
50
|
|
|
51
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmb3J0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvY29tbW9uL2VmZm9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBvcGVuYWlNb2RlbE1heEVmZm9ydCB9IGZyb20gXCIuL21vZGVsLWNvc3RcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiZWZmb3J0XCJdKTtcblxuLyoqXG4gKiBwcm92aWRlciDrs4QgcmVhc29uaW5nIGVmZm9ydCDslrTtnJguXG4gKlxuICogU0RLIOqwgCDrs7TrgrggZWZmb3J0IOusuOyekOyXtOydhCDqt7jrjIDroZwgcHJvdmlkZXIg7JeQIOuEmOq4sOyngCDslYrripTri6QuIHByb3ZpZGVyIOuniOuLpCDrsJvripQg6rCS7J20IOuLpOultOqzoCxcbiAqIOuqqOultOuKlCDqsJLsnYQg67Cb7JWY7J2EIOuVjOydmCDrsJjsnZHrj4Qg64uk66W064ukKENvZGV4IOuwseyXlOuTnOuKlCA0MDAg7J20IOyYiOyDgeuQmOqzoCwgQ2xhdWRlIENvZGUg64qUIOqyveqzoOunjFxuICog64Ko6riw6rOgIOuqqOuNuCDquLDrs7ggZWZmb3J0IOuhnCDsi6TtlontlZzri6QpLiDqsIEgcHJvdmlkZXIgZGlzcGF0Y2hlciDqsIAg7JqU7LKt7J2EIOunjOuTpCDrlYwg7Jes6riw7IScIO2MkOygle2VtCxcbiAqIOunnuyngCDslYrripQg6rCS7J2AIOyYpOulmCDsl4bsnbQg67KE66as6rOgIFwi66+47KeA7KCVXCIg6rO8IOqwmeqyjCDst6jquIntlZzri6QuXG4gKi9cblxuLy8gQ29kZXgg6rWs64+
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmb3J0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvY29tbW9uL2VmZm9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBvcGVuYWlNb2RlbE1heEVmZm9ydCB9IGZyb20gXCIuL21vZGVsLWNvc3RcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiZWZmb3J0XCJdKTtcblxuLyoqXG4gKiBwcm92aWRlciDrs4QgcmVhc29uaW5nIGVmZm9ydCDslrTtnJguXG4gKlxuICogU0RLIOqwgCDrs7TrgrggZWZmb3J0IOusuOyekOyXtOydhCDqt7jrjIDroZwgcHJvdmlkZXIg7JeQIOuEmOq4sOyngCDslYrripTri6QuIHByb3ZpZGVyIOuniOuLpCDrsJvripQg6rCS7J20IOuLpOultOqzoCxcbiAqIOuqqOultOuKlCDqsJLsnYQg67Cb7JWY7J2EIOuVjOydmCDrsJjsnZHrj4Qg64uk66W064ukKENvZGV4IOuwseyXlOuTnOuKlCA0MDAg7J20IOyYiOyDgeuQmOqzoCwgQ2xhdWRlIENvZGUg64qUIOqyveqzoOunjFxuICog64Ko6riw6rOgIOuqqOuNuCDquLDrs7ggZWZmb3J0IOuhnCDsi6TtlontlZzri6QpLiDqsIEgcHJvdmlkZXIgZGlzcGF0Y2hlciDqsIAg7JqU7LKt7J2EIOunjOuTpCDrlYwg7Jes6riw7IScIO2MkOygle2VtCxcbiAqIOunnuyngCDslYrripQg6rCS7J2AIOyYpOulmCDsl4bsnbQg67KE66as6rOgIFwi66+47KeA7KCVXCIg6rO8IOqwmeqyjCDst6jquIntlZzri6QuXG4gKi9cblxuLy8gQ29kZXgg6rWs64+FIOuwseyXlOuTnCDrqqjrjbgg7Lm07YOI66Gc6re4KH4vLmNvZGV4L21vZGVsc19jYWNoZS5qc29uKSDsnZggc3VwcG9ydGVkX3JlYXNvbmluZ19sZXZlbHMg7ZWp7KeR7ZWpLlxuLy8gUHVibGljIGVmZm9ydCBvcHRpb25zIGV4Y2x1ZGUgbm9uZS9taW5pbWFsLiB0aGlua2luZzpmYWxzZSBtYXBzIHRvIHdpcmUtbGV2ZWwgbm9uZSBzZXBhcmF0ZWx5LlxuZXhwb3J0IGNvbnN0IE9QRU5BSV9FRkZPUlRTID0gW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiLCBcInhoaWdoXCIsIFwibWF4XCIsIFwidWx0cmFcIl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPcGVuQUlFZmZvcnQgPSAodHlwZW9mIE9QRU5BSV9FRkZPUlRTKVtudW1iZXJdO1xuXG4vLyBDbGF1ZGUgQ29kZSBgLS1lZmZvcnRgIO2XiOyaqeqwki4g66qo642467OEIOyDge2VnCh4aGlnaF9lZmZvcnQgLyBtYXhfZWZmb3J0IGNhcGFiaWxpdHkp7J2AIENsYXVkZSBDb2RlIOqwgFxuLy8g7Iqk7Iqk66GcIOyymOumrO2VmOuvgOuhnCBxZ3JpZCDripQgcHJvdmlkZXIg7KeR7ZWp66eMIOqygOyCrO2VnOuLpC5cbmV4cG9ydCBjb25zdCBBTlRIUk9QSUNfRUZGT1JUUyA9IFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFudGhyb3BpY0VmZm9ydCA9ICh0eXBlb2YgQU5USFJPUElDX0VGRk9SVFMpW251bWJlcl07XG5cbi8vIOyWtO2cmCDslYjsl5Ag7J6I6rOgIOyDge2VnCjsnojri6TrqbQpIOydtO2VmOyduCDqsJLrp4wg7Ya16rO87Iuc7YKo64ukLiDrgpjrqLjsp4DripQgZGVidWcg66Gc6re4IO2bhCDrr7jsp4DsoJUuXG5mdW5jdGlvbiByZXNvbHZlV2l0aGluPFQgZXh0ZW5kcyBzdHJpbmc+KFxuICBsZXZlbHM6IHJlYWRvbmx5IFRbXSxcbiAgZWZmb3J0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1heDogVCB8IHVuZGVmaW5lZCxcbiAgdGFyZ2V0OiBzdHJpbmcsXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGVmZm9ydCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByYW5rID0gbGV2ZWxzLmluZGV4T2YoZWZmb3J0IGFzIFQpO1xuICBpZiAocmFuayA8IDApIHtcbiAgICBsb2dnZXIuZGVidWcoYGlnbm9yaW5nIGVmZm9ydCBcIiR7ZWZmb3J0fVwiIGZvciAke3RhcmdldH06IG5vdCBpbiAke2xldmVscy5qb2luKFwiL1wiKX1gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiByYW5rID4gbGV2ZWxzLmluZGV4T2YobWF4KSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgaWdub3JpbmcgZWZmb3J0IFwiJHtlZmZvcnR9XCIgZm9yICR7dGFyZ2V0fTogbW9kZWwgc3VwcG9ydHMgdXAgdG8gXCIke21heH1cImApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGVmZm9ydCBhcyBUO1xufVxuXG4vKiogY2Fub25pY2FsIE9wZW5BSSBtb2RlbChgb3BlbmFpL2AgcHJlZml4IOygnOqxsCDtm4QpIOq4sOykgOycvOuhnCBlZmZvcnQg66W8IO2MkOygle2VnOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlT3BlbkFJRWZmb3J0KG1vZGVsOiBzdHJpbmcsIGVmZm9ydD86IHN0cmluZyk6IE9wZW5BSUVmZm9ydCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiByZXNvbHZlV2l0aGluKE9QRU5BSV9FRkZPUlRTLCBlZmZvcnQsIG9wZW5haU1vZGVsTWF4RWZmb3J0KG1vZGVsKSwgYG9wZW5haS8ke21vZGVsfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFudGhyb3BpY0VmZm9ydChlZmZvcnQ/OiBzdHJpbmcpOiBBbnRocm9waWNFZmZvcnQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVzb2x2ZVdpdGhpbihBTlRIUk9QSUNfRUZGT1JUUywgZWZmb3J0LCB1bmRlZmluZWQsIFwiYW50aHJvcGljXCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFJQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFhNUMsTUFBYSxpQkFBaUI7Q0FBQztDQUFPO0NBQVU7Q0FBUTtDQUFTO0NBQU87QUFBTztBQUsvRSxNQUFhLG9CQUFvQjtDQUFDO0NBQU87Q0FBVTtDQUFRO0NBQVM7QUFBSztBQUl6RSxTQUFTLGNBQ1AsUUFDQSxRQUNBLEtBQ0EsUUFDZTtDQUNmLElBQUksV0FBVyxRQUFXLE9BQU87Q0FDakMsTUFBTSxPQUFPLE9BQU8sUUFBUSxNQUFXO0NBQ3ZDLElBQUksT0FBTyxHQUFHO0VBQ1osT0FBTyxNQUFNLG9CQUFvQixPQUFPLFFBQVEsT0FBTyxXQUFXLE9BQU8sS0FBSyxHQUFHLEdBQUc7RUFDcEY7Q0FDRjtDQUNBLElBQUksUUFBUSxVQUFhLE9BQU8sT0FBTyxRQUFRLEdBQUcsR0FBRztFQUNuRCxPQUFPLE1BQU0sb0JBQW9CLE9BQU8sUUFBUSxPQUFPLDBCQUEwQixJQUFJLEVBQUU7RUFDdkY7Q0FDRjtDQUNBLE9BQU87QUFDVDs7QUFHQSxTQUFnQixvQkFBb0IsT0FBZSxRQUEyQztDQUM1RixPQUFPLGNBQWMsZ0JBQWdCLFFBQVEscUJBQXFCLEtBQUssR0FBRyxVQUFVLE9BQU87QUFDN0Y7QUFFQSxTQUFnQix1QkFBdUIsUUFBOEM7Q0FDbkYsT0FBTyxjQUFjLG1CQUFtQixRQUFRLFFBQVcsV0FBVztBQUN4RSJ9
|
|
@@ -22,7 +22,7 @@ var SmoothWeightedRoundRobin = class {
|
|
|
22
22
|
let selected = candidates[0];
|
|
23
23
|
let selectedScore = Number.NEGATIVE_INFINITY;
|
|
24
24
|
let totalWeight = 0;
|
|
25
|
-
|
|
25
|
+
candidates.forEach((tokenId) => {
|
|
26
26
|
const weight = this.weights.get(tokenId);
|
|
27
27
|
totalWeight += weight;
|
|
28
28
|
const score = (this.currentScores.get(tokenId) ?? 0) + weight;
|
|
@@ -31,7 +31,7 @@ var SmoothWeightedRoundRobin = class {
|
|
|
31
31
|
selected = tokenId;
|
|
32
32
|
selectedScore = score;
|
|
33
33
|
}
|
|
34
|
-
}
|
|
34
|
+
});
|
|
35
35
|
this.currentScores.set(selected, selectedScore - totalWeight);
|
|
36
36
|
return selected;
|
|
37
37
|
}
|
|
@@ -39,4 +39,4 @@ var SmoothWeightedRoundRobin = class {
|
|
|
39
39
|
//#endregion
|
|
40
40
|
export { SmoothWeightedRoundRobin };
|
|
41
41
|
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21vb3RoLXdlaWdodGVkLXJvdW5kLXJvYmluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvY29tbW9uL3Ntb290aC13ZWlnaHRlZC1yb3VuZC1yb2Jpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluIHtcbiAgcmVhZG9ubHkgd2VpZ2h0cyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRTY29yZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4gIHNldFRva2VuKHRva2VuSWQ6IG51bWJlciwgd2VpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIod2VpZ2h0KSB8fCB3ZWlnaHQgPCAxIHx8IHdlaWdodCA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ3ZWlnaHQgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy53ZWlnaHRzLmdldCh0b2tlbklkKSA9PT0gd2VpZ2h0KSByZXR1cm47XG4gICAgdGhpcy53ZWlnaHRzLnNldCh0b2tlbklkLCB3ZWlnaHQpO1xuICAgIHRoaXMucmVzZXRTY29yZXMoKTtcbiAgfVxuXG4gIHJlbW92ZVRva2VuKHRva2VuSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWlnaHRzLmRlbGV0ZSh0b2tlbklkKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFNjb3Jlcy5kZWxldGUodG9rZW5JZCk7XG4gICAgdGhpcy5yZXNldFNjb3JlcygpO1xuICB9XG5cbiAgcmVzZXRTY29yZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U2NvcmVzLmNsZWFyKCk7XG4gIH1cblxuICBzZWxlY3QoZWxpZ2libGVUb2tlbklkczogUmVhZG9ubHlTZXQ8bnVtYmVyPik6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbLi4uZWxpZ2libGVUb2tlbklkc11cbiAgICAgIC5maWx0ZXIoKHRva2VuSWQpID0+IHRoaXMud2VpZ2h0cy5oYXModG9rZW5JZCkpXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgbGV0IHNlbGVjdGVkID0gY2FuZGlkYXRlc1swXSE7XG4gICAgbGV0IHNlbGVjdGVkU2NvcmUgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IHRvdGFsV2VpZ2h0ID0gMDtcblxuICAgIGNhbmRpZGF0ZXMuZm9yRWFjaCgodG9rZW5JZCkgPT4ge1xuICAgICAgY29uc3Qgd2VpZ2h0ID0gdGhpcy53ZWlnaHRzLmdldCh0b2tlbklkKSE7XG4gICAgICB0b3RhbFdlaWdodCArPSB3ZWlnaHQ7XG4gICAgICBjb25zdCBzY29yZSA9ICh0aGlzLmN1cnJlbnRTY29yZXMuZ2V0KHRva2VuSWQpID8/IDApICsgd2VpZ2h0O1xuICAgICAgdGhpcy5jdXJyZW50U2NvcmVzLnNldCh0b2tlbklkLCBzY29yZSk7XG4gICAgICBpZiAoc2NvcmUgPiBzZWxlY3RlZFNjb3JlKSB7XG4gICAgICAgIHNlbGVjdGVkID0gdG9rZW5JZDtcbiAgICAgICAgc2VsZWN0ZWRTY29yZSA9IHNjb3JlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50U2NvcmVzLnNldChzZWxlY3RlZCwgc2VsZWN0ZWRTY29yZSAtIHRvdGFsV2VpZ2h0KTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLElBQWEsMkJBQWIsTUFBc0M7Q0FDcEMsMEJBQW1CLElBQUksSUFBb0I7Q0FDM0MsZ0NBQXlCLElBQUksSUFBb0I7Q0FFakQsU0FBUyxTQUFpQixRQUFzQjtFQUM5QyxJQUFJLENBQUMsT0FBTyxVQUFVLE1BQU0sS0FBSyxTQUFTLEtBQUssU0FBUyxLQUN0RCxNQUFNLElBQUksV0FBVyw2Q0FBNkM7RUFFcEUsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sUUFBUTtFQUMxQyxLQUFLLFFBQVEsSUFBSSxTQUFTLE1BQU07RUFDaEMsS0FBSyxZQUFZO0NBQ25CO0NBRUEsWUFBWSxTQUF1QjtFQUNqQyxJQUFJLENBQUMsS0FBSyxRQUFRLE9BQU8sT0FBTyxHQUFHO0VBQ25DLEtBQUssY0FBYyxPQUFPLE9BQU87RUFDakMsS0FBSyxZQUFZO0NBQ25CO0NBRUEsY0FBb0I7RUFDbEIsS0FBSyxjQUFjLE1BQU07Q0FDM0I7Q0FFQSxPQUFPLGtCQUFzRDtFQUMzRCxNQUFNLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQ3JDLFFBQVEsWUFBWSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUM5QyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUM7RUFDM0IsSUFBSSxXQUFXLFdBQVcsR0FBRyxPQUFPO0VBRXBDLElBQUksV0FBVyxXQUFXO0VBQzFCLElBQUksZ0JBQWdCLE9BQU87RUFDM0IsSUFBSSxjQUFjO0VBRWxCLFdBQVcsU0FBUyxZQUFZO0dBQzlCLE1BQU0sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPO0dBQ3ZDLGVBQWU7R0FDZixNQUFNLFNBQVMsS0FBSyxjQUFjLElBQUksT0FBTyxLQUFLLEtBQUs7R0FDdkQsS0FBSyxjQUFjLElBQUksU0FBUyxLQUFLO0dBQ3JDLElBQUksUUFBUSxlQUFlO0lBQ3pCLFdBQVc7SUFDWCxnQkFBZ0I7R0FDbEI7RUFDRixDQUFDO0VBRUQsS0FBSyxjQUFjLElBQUksVUFBVSxnQkFBZ0IsV0FBVztFQUM1RCxPQUFPO0NBQ1Q7QUFDRiJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BadRequestException } from "sonamu";
|
|
2
|
+
//#region src/utils/providers/common/thinking.ts
|
|
3
|
+
var ThinkingValidationError = class extends BadRequestException {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "ThinkingValidationError";
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ThinkingValidationError };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhpbmtpbmcuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vdGhpbmtpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuZXhwb3J0IGNsYXNzIFRoaW5raW5nVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQmFkUmVxdWVzdEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UgYXMgTG9jYWxpemVkU3RyaW5nKTtcbiAgICB0aGlzLm5hbWUgPSBcIlRoaW5raW5nVmFsaWRhdGlvbkVycm9yXCI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFJQSxJQUFhLDBCQUFiLGNBQTZDLG9CQUFvQjtDQUMvRCxZQUFZLFNBQWlCO0VBQzNCLE1BQU0sT0FBMEI7RUFDaEMsS0FBSyxPQUFPO0NBQ2Q7QUFDRiJ9
|
|
@@ -123,7 +123,8 @@ function normalizeOpenAIEvent(raw) {
|
|
|
123
123
|
}
|
|
124
124
|
if (type === "response.output_text.delta" && typeof event.delta === "string") return {
|
|
125
125
|
type: "text-delta",
|
|
126
|
-
text: event.delta
|
|
126
|
+
text: event.delta,
|
|
127
|
+
...typeof event.item_id === "string" ? { itemId: event.item_id } : {}
|
|
127
128
|
};
|
|
128
129
|
if ((type === "response.output_item.added" || type === "response.output_item.done") && event.item && typeof event.item === "object") {
|
|
129
130
|
const item = event.item;
|
|
@@ -161,4 +162,4 @@ function normalizeOpenAIEvent(raw) {
|
|
|
161
162
|
//#endregion
|
|
162
163
|
export { CHATGPT_CODEX_RESPONSES_URL, CODEX_CLI_ORIGINATOR, CODEX_CLI_VERSION, OpenAIProtocolError, buildCodexIdentityHeaders, buildOpenAIResponsesRequest, codexCliUserAgent, imageMimeType, normalizeOpenAIEvent };
|
|
163
164
|
|
|
164
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRWZmb3J0IH0gZnJvbSBcIi4uL2NvbW1vbi9lZmZvcnRcIjtcblxuZXhwb3J0IGNvbnN0IENIQVRHUFRfQ09ERVhfUkVTUE9OU0VTX1VSTCA9XG4gIFwiaHR0cHM6Ly9jaGF0Z3B0LmNvbS9iYWNrZW5kLWFwaS9jb2RleC9yZXNwb25zZXNcIiBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPREVYX0NMSV9PUklHSU5BVE9SID0gXCJjb2RleF9jbGlfcnNcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfVkVSU0lPTiA9IFwiMC4xNDcuMFwiIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBvc1R5cGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICB0ZXJtaW5hbDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjb2RleFBsYXRmb3JtKCk6IENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBjb25zdCBuYW1lczogUGFydGlhbDxSZWNvcmQ8Tm9kZUpTLlBsYXRmb3JtLCBzdHJpbmc+PiA9IHtcbiAgICBkYXJ3aW46IFwiTWFjIE9TXCIsXG4gICAgbGludXg6IFwiTGludXhcIixcbiAgICB3aW4zMjogXCJXaW5kb3dzXCIsXG4gIH07XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNO1xuICBjb25zdCB0ZXJtaW5hbFZlcnNpb24gPSBwcm9jZXNzLmVudi5URVJNX1BST0dSQU1fVkVSU0lPTjtcbiAgcmV0dXJuIHtcbiAgICBvc1R5cGU6IG5hbWVzW3Byb2Nlc3MucGxhdGZvcm1dID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgb3NWZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmFyY2gsXG4gICAgdGVybWluYWw6IHRlcm1pbmFsID8gYCR7dGVybWluYWx9JHt0ZXJtaW5hbFZlcnNpb24gPyBgLyR7dGVybWluYWxWZXJzaW9ufWAgOiBcIlwifWAgOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXMgdGhlIHBsYXRmb3JtL3Rlcm1pbmFsIHN1ZmZpeCBlbWl0dGVkIGJ5IHRoZSBwaW5uZWQgUnVzdCBDb2RleCBDTEkuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhDbGlVc2VyQWdlbnQocGxhdGZvcm06IENvZGV4VXNlckFnZW50UGxhdGZvcm0gPSBjb2RleFBsYXRmb3JtKCkpOiBzdHJpbmcge1xuICByZXR1cm4gYGNvZGV4X2NsaV9ycy8ke0NPREVYX0NMSV9WRVJTSU9OfSAoJHtwbGF0Zm9ybS5vc1R5cGV9ICR7cGxhdGZvcm0ub3NWZXJzaW9ufTsgJHtwbGF0Zm9ybS5hcmNoaXRlY3R1cmV9KSAke3BsYXRmb3JtLnRlcm1pbmFsfWA7XG59XG5cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgbnVsbFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbi8qKiBSYXcgUmVzcG9uc2VzIEFQSSBpdGVtcy4gS2VlcGluZyB0aGVzZSBvcGFxdWUgcHJlc2VydmVzIHRoZSBjb21wbGV0ZSBjb252ZXJzYXRpb24gaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSVJlc3BvbnNlSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSU91dHB1dFNjaGVtYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogSnNvblZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc09wdGlvbnMge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk6IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sQ2hvaWNlPzogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbFRvb2xDYWxscz86IGJvb2xlYW47XG4gIHJlYXNvbmluZz86IHtcbiAgICBlZmZvcnQ/OiBPcGVuQUlFZmZvcnQ7XG4gICAgc3VtbWFyeT86IFwiYXV0b1wiIHwgXCJjb25jaXNlXCIgfCBcImRldGFpbGVkXCI7XG4gIH07XG4gIHZlcmJvc2l0eT86IFwibG93XCIgfCBcIm1lZGl1bVwiIHwgXCJoaWdoXCI7XG4gIHNlcnZpY2VUaWVyPzogc3RyaW5nO1xuICBwcm9tcHRDYWNoZUtleT86IHN0cmluZztcbiAgb3V0cHV0U2NoZW1hPzogT3BlbkFJT3V0cHV0U2NoZW1hO1xuICBpbWFnZUdlbmVyYXRpb24/OiBib29sZWFuIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc1JlcXVlc3Qge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGlucHV0OiBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbHM/OiBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbF9jaG9pY2U6IHN0cmluZyB8IE9wZW5BSVJlc3BvbnNlSXRlbTtcbiAgcGFyYWxsZWxfdG9vbF9jYWxsczogYm9vbGVhbjtcbiAgcmVhc29uaW5nOiBPcGVuQUlSZXNwb25zZXNPcHRpb25zW1wicmVhc29uaW5nXCJdIHwgbnVsbDtcbiAgc3RvcmU6IGZhbHNlO1xuICBzdHJlYW06IHRydWU7XG4gIGluY2x1ZGU6IHN0cmluZ1tdO1xuICBzZXJ2aWNlX3RpZXI/OiBzdHJpbmc7XG4gIHByb21wdF9jYWNoZV9rZXk/OiBzdHJpbmc7XG4gIHRleHQ/OiB7XG4gICAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgICBmb3JtYXQ/OiB7XG4gICAgICB0eXBlOiBcImpzb25fc2NoZW1hXCI7XG4gICAgICBzdHJpY3Q6IHRydWU7XG4gICAgICBzY2hlbWE6IEpzb25WYWx1ZTtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcGVuQUlSZXNwb25zZXNSZXF1ZXN0KFxuICBvcHRpb25zOiBPcGVuQUlSZXNwb25zZXNPcHRpb25zLFxuKTogT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIGNvbnN0IHRvb2xzID0gb3B0aW9ucy50b29scyA/IFsuLi5vcHRpb25zLnRvb2xzXSA6IFtdO1xuICBpZiAob3B0aW9ucy5pbWFnZUdlbmVyYXRpb24pIHtcbiAgICB0b29scy5wdXNoKFxuICAgICAgb3B0aW9ucy5pbWFnZUdlbmVyYXRpb24gPT09IHRydWVcbiAgICAgICAgPyB7IHR5cGU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiIH1cbiAgICAgICAgOiB7IHR5cGU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiLCAuLi5vcHRpb25zLmltYWdlR2VuZXJhdGlvbiB9LFxuICAgICk7XG4gIH1cblxuICBjb25zdCB0ZXh0ID1cbiAgICBvcHRpb25zLnZlcmJvc2l0eSB8fCBvcHRpb25zLm91dHB1dFNjaGVtYVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uKG9wdGlvbnMudmVyYm9zaXR5ID8geyB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgIHN0cmljdDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogb3B0aW9ucy5vdXRwdXRTY2hlbWEuc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5vdXRwdXRTY2hlbWEubmFtZSA/PyBcImNvZGV4X291dHB1dF9zY2hlbWFcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAuLi4ob3B0aW9ucy5pbnN0cnVjdGlvbnMgPyB7IGluc3RydWN0aW9uczogb3B0aW9ucy5pbnN0cnVjdGlvbnMgfSA6IHt9KSxcbiAgICAvLyBDb3B5IHRoZSBhcnJheSwgbm90IGl0cyBpdGVtczogcmF3IGl0ZW1zIG11c3QgYXJyaXZlIGJ5dGUtZm9yLWJ5dGUgZXF1aXZhbGVudC5cbiAgICBpbnB1dDogWy4uLm9wdGlvbnMuaGlzdG9yeV0sXG4gICAgLi4uKHRvb2xzLmxlbmd0aCA/IHsgdG9vbHMgfSA6IHt9KSxcbiAgICB0b29sX2Nob2ljZTogb3B0aW9ucy50b29sQ2hvaWNlID8/IFwiYXV0b1wiLFxuICAgIHBhcmFsbGVsX3Rvb2xfY2FsbHM6IG9wdGlvbnMucGFyYWxsZWxUb29sQ2FsbHMgPz8gdHJ1ZSxcbiAgICByZWFzb25pbmc6IG9wdGlvbnMucmVhc29uaW5nID8/IG51bGwsXG4gICAgc3RvcmU6IGZhbHNlLFxuICAgIHN0cmVhbTogdHJ1ZSxcbiAgICBpbmNsdWRlOiBbXCJyZWFzb25pbmcuZW5jcnlwdGVkX2NvbnRlbnRcIl0sXG4gICAgLi4uKG9wdGlvbnMuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VfdGllcjogb3B0aW9ucy5zZXJ2aWNlVGllciB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLnByb21wdENhY2hlS2V5ID8geyBwcm9tcHRfY2FjaGVfa2V5OiBvcHRpb25zLnByb21wdENhY2hlS2V5IH0gOiB7fSksXG4gICAgLi4uKHRleHQgPyB7IHRleHQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMoXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBjb3JyZWxhdGlvbj86IHsgc2Vzc2lvbklkPzogc3RyaW5nOyB0aHJlYWRJZD86IHN0cmluZzsgY2xpZW50UmVxdWVzdElkPzogc3RyaW5nIH0sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICBcIkNoYXRHUFQtQWNjb3VudC1JRFwiOiBhY2NvdW50SWQsXG4gICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgb3JpZ2luYXRvcjogQ09ERVhfQ0xJX09SSUdJTkFUT1IsXG4gICAgXCJVc2VyLUFnZW50XCI6IGNvZGV4Q2xpVXNlckFnZW50KCksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5zZXNzaW9uSWQgPyB7IFwic2Vzc2lvbi1pZFwiOiBjb3JyZWxhdGlvbi5zZXNzaW9uSWQgfSA6IHt9KSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnRocmVhZElkID8geyBcInRocmVhZC1pZFwiOiBjb3JyZWxhdGlvbi50aHJlYWRJZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8uY2xpZW50UmVxdWVzdElkID8geyBcIngtY2xpZW50LXJlcXVlc3QtaWRcIjogY29ycmVsYXRpb24uY2xpZW50UmVxdWVzdElkIH0gOiB7fSksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJVXNhZ2Uge1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgcmVhc29uaW5nVG9rZW5zOiBudW1iZXI7XG4gIHRvdGFsVG9rZW5zOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIE9wZW5BSU5vcm1hbGl6ZWRFdmVudCA9XG4gIHwgeyB0eXBlOiBcImNyZWF0ZWRcIjsgcmVzcG9uc2VJZD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInRleHQtZGVsdGFcIjsgdGV4dDogc3RyaW5nIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImltYWdlXCI7XG4gICAgICBpZD86IHN0cmluZztcbiAgICAgIGJhc2U2NDogc3RyaW5nO1xuICAgICAgbWltZVR5cGU6IFwiaW1hZ2UvcG5nXCIgfCBcImltYWdlL2pwZWdcIiB8IFwiaW1hZ2Uvd2VicFwiO1xuICAgICAgcmV2aXNlZFByb21wdD86IHN0cmluZztcbiAgICAgIGdlbmVyYXRpb24/OiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YTtcbiAgICB9XG4gIHwgeyB0eXBlOiBcIm91dHB1dC1pdGVtXCI7IGl0ZW06IE9wZW5BSVJlc3BvbnNlSXRlbTsgY29tcGxldGVkPzogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcImNvbXBsZXRlZFwiOyByZXNwb25zZUlkOiBzdHJpbmc7IHVzYWdlPzogT3BlbkFJVXNhZ2U7IG1vZGVsPzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgZXJyb3I6IE9wZW5BSVByb3RvY29sRXJyb3IgfTtcblxuZXhwb3J0IGNsYXNzIE9wZW5BSVByb3RvY29sRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29kZT86IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogbnVtYmVyLFxuICAgIHB1YmxpYyByZWFkb25seSByZXRyeUFmdGVyTXM/OiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiT3BlbkFJUHJvdG9jb2xFcnJvclwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVzYWdlRnJvbSh2YWx1ZTogdW5rbm93bik6IE9wZW5BSVVzYWdlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHVzYWdlID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGlucHV0RGV0YWlscyA9ICh1c2FnZS5pbnB1dF90b2tlbnNfZGV0YWlscyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IG91dHB1dERldGFpbHMgPSAodXNhZ2Uub3V0cHV0X3Rva2Vuc19kZXRhaWxzID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFRva2VuczogTnVtYmVyKHVzYWdlLmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogTnVtYmVyKGlucHV0RGV0YWlscy5jYWNoZWRfdG9rZW5zID8/IDApLFxuICAgIG91dHB1dFRva2VuczogTnVtYmVyKHVzYWdlLm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgcmVhc29uaW5nVG9rZW5zOiBOdW1iZXIob3V0cHV0RGV0YWlscy5yZWFzb25pbmdfdG9rZW5zID8/IDApLFxuICAgIHRvdGFsVG9rZW5zOiBOdW1iZXIodXNhZ2UudG90YWxfdG9rZW5zID8/IDApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VNaW1lVHlwZShcbiAgYmFzZTY0OiBzdHJpbmcsXG4gIG91dHB1dEZvcm1hdD86IHVua25vd24sXG4pOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL3dlYnBcIiB7XG4gIC8vIEluc3BlY3Qgb25seSB0aGUgaGVhZGVyLCB3aXRob3V0IGRlY29kaW5nIGEgcG90ZW50aWFsbHkgbGFyZ2UgaW1hZ2UgdHdpY2UuXG4gIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NC5zbGljZSgwLCAyNCksIFwiYmFzZTY0XCIpO1xuICBpZiAoaGVhZGVyLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSlcbiAgICByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgaWYgKGhlYWRlclswXSA9PT0gMjU1ICYmIGhlYWRlclsxXSA9PT0gMjE2ICYmIGhlYWRlclsyXSA9PT0gMjU1KSByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XG4gIGlmIChoZWFkZXIudG9TdHJpbmcoXCJhc2NpaVwiLCAwLCA0KSA9PT0gXCJSSUZGXCIgJiYgaGVhZGVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgOCwgMTIpID09PSBcIldFQlBcIilcbiAgICByZXR1cm4gXCJpbWFnZS93ZWJwXCI7XG4gIGlmIChvdXRwdXRGb3JtYXQgPT09IFwianBlZ1wiKSByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XG4gIGlmIChvdXRwdXRGb3JtYXQgPT09IFwid2VicFwiKSByZXR1cm4gXCJpbWFnZS93ZWJwXCI7XG4gIGlmIChvdXRwdXRGb3JtYXQgPT09IHVuZGVmaW5lZCB8fCBvdXRwdXRGb3JtYXQgPT09IFwicG5nXCIpIHJldHVybiBcImltYWdlL3BuZ1wiO1xuICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihgVW5zdXBwb3J0ZWQgaW1hZ2Ugb3V0cHV0IGZvcm1hdDogJHtTdHJpbmcob3V0cHV0Rm9ybWF0KX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9wZW5BSUV2ZW50KHJhdzogdW5rbm93bik6IE9wZW5BSU5vcm1hbGl6ZWRFdmVudCB8IHVuZGVmaW5lZCB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGV2ZW50ID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB0eXBlID0gU3RyaW5nKGV2ZW50LnR5cGUgPz8gXCJcIik7XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLmNyZWF0ZWRcIikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZXZlbnQucmVzcG9uc2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJjcmVhdGVkXCIsIC4uLihyZXNwb25zZT8uaWQgPyB7IHJlc3BvbnNlSWQ6IFN0cmluZyhyZXNwb25zZS5pZCkgfSA6IHt9KSB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF90ZXh0LmRlbHRhXCIgJiYgdHlwZW9mIGV2ZW50LmRlbHRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJ0ZXh0LWRlbHRhXCIsIHRleHQ6IGV2ZW50LmRlbHRhIH07XG4gIH1cbiAgaWYgKFxuICAgICh0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIpICYmXG4gICAgZXZlbnQuaXRlbSAmJlxuICAgIHR5cGVvZiBldmVudC5pdGVtID09PSBcIm9iamVjdFwiXG4gICkge1xuICAgIGNvbnN0IGl0ZW0gPSBldmVudC5pdGVtIGFzIE9wZW5BSVJlc3BvbnNlSXRlbTtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcImltYWdlX2dlbmVyYXRpb25fY2FsbFwiICYmIHR5cGVvZiBpdGVtLnJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICAuLi4odHlwZW9mIGl0ZW0uaWQgPT09IFwic3RyaW5nXCIgPyB7IGlkOiBpdGVtLmlkIH0gOiB7fSksXG4gICAgICAgIGJhc2U2NDogaXRlbS5yZXN1bHQsXG4gICAgICAgIG1pbWVUeXBlOiBpbWFnZU1pbWVUeXBlKGl0ZW0ucmVzdWx0LCBpdGVtLm91dHB1dF9mb3JtYXQpLFxuICAgICAgICAuLi4odHlwZW9mIGl0ZW0ucmV2aXNlZF9wcm9tcHQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHsgcmV2aXNlZFByb21wdDogaXRlbS5yZXZpc2VkX3Byb21wdCB9XG4gICAgICAgICAgOiB0eXBlb2YgaXRlbS5yZXZpc2VkUHJvbXB0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IHsgcmV2aXNlZFByb21wdDogaXRlbS5yZXZpc2VkUHJvbXB0IH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZTogXCJvdXRwdXQtaXRlbVwiLCBpdGVtLCBjb21wbGV0ZWQ6IHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZVwiIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwicmVzcG9uc2UuY29tcGxldGVkXCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IChldmVudC5yZXNwb25zZSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29tcGxldGVkXCIsXG4gICAgICByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQgPz8gXCJcIiksXG4gICAgICAuLi4ocmVzcG9uc2UudXNhZ2UgPyB7IHVzYWdlOiB1c2FnZUZyb20ocmVzcG9uc2UudXNhZ2UpIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIHJlc3BvbnNlLm1vZGVsID09PSBcInN0cmluZ1wiID8geyBtb2RlbDogcmVzcG9uc2UubW9kZWwgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcImVycm9yXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5mYWlsZWRcIiB8fCB0eXBlID09PSBcInJlc3BvbnNlLmluY29tcGxldGVcIikge1xuICAgIGNvbnN0IHNvdXJjZSA9IChldmVudC5lcnJvciA/PyBldmVudC5yZXNwb25zZSA/PyBldmVudCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgbmVzdGVkID0gKHNvdXJjZS5lcnJvciA/PyBzb3VyY2UpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBlcnJvcjogbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXG4gICAgICAgIFN0cmluZyhuZXN0ZWQubWVzc2FnZSA/PyBgT3BlbkFJIHN0cmVhbSBlbmRlZCB3aXRoICR7dHlwZX1gKSxcbiAgICAgICAgdHlwZW9mIG5lc3RlZC5jb2RlID09PSBcInN0cmluZ1wiID8gbmVzdGVkLmNvZGUgOiB1bmRlZmluZWQsXG4gICAgICApLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFLQSxNQUFhLDhCQUNYO0FBRUYsTUFBYSx1QkFBdUI7QUFDcEMsTUFBYSxvQkFBb0I7QUFTakMsU0FBUyxnQkFBd0M7Q0FDL0MsTUFBTSxRQUFrRDtFQUN0RCxRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87Q0FDVDtDQUNBLE1BQU0sV0FBVyxRQUFRLElBQUk7Q0FDN0IsTUFBTSxrQkFBa0IsUUFBUSxJQUFJO0NBQ3BDLE9BQU87RUFDTCxRQUFRLE1BQU0sUUFBUSxhQUFhLFFBQVE7RUFDM0MsV0FBVyxHQUFHLFFBQVE7RUFDdEIsY0FBYyxRQUFRO0VBQ3RCLFVBQVUsV0FBVyxHQUFHLFdBQVcsa0JBQWtCLElBQUksb0JBQW9CLE9BQU87Q0FDdEY7QUFDRjs7QUFH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
|
|
165
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRWZmb3J0IH0gZnJvbSBcIi4uL2NvbW1vbi9lZmZvcnRcIjtcblxuZXhwb3J0IGNvbnN0IENIQVRHUFRfQ09ERVhfUkVTUE9OU0VTX1VSTCA9XG4gIFwiaHR0cHM6Ly9jaGF0Z3B0LmNvbS9iYWNrZW5kLWFwaS9jb2RleC9yZXNwb25zZXNcIiBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPREVYX0NMSV9PUklHSU5BVE9SID0gXCJjb2RleF9jbGlfcnNcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfVkVSU0lPTiA9IFwiMC4xNDcuMFwiIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBvc1R5cGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICB0ZXJtaW5hbDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjb2RleFBsYXRmb3JtKCk6IENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBjb25zdCBuYW1lczogUGFydGlhbDxSZWNvcmQ8Tm9kZUpTLlBsYXRmb3JtLCBzdHJpbmc+PiA9IHtcbiAgICBkYXJ3aW46IFwiTWFjIE9TXCIsXG4gICAgbGludXg6IFwiTGludXhcIixcbiAgICB3aW4zMjogXCJXaW5kb3dzXCIsXG4gIH07XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNO1xuICBjb25zdCB0ZXJtaW5hbFZlcnNpb24gPSBwcm9jZXNzLmVudi5URVJNX1BST0dSQU1fVkVSU0lPTjtcbiAgcmV0dXJuIHtcbiAgICBvc1R5cGU6IG5hbWVzW3Byb2Nlc3MucGxhdGZvcm1dID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgb3NWZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmFyY2gsXG4gICAgdGVybWluYWw6IHRlcm1pbmFsID8gYCR7dGVybWluYWx9JHt0ZXJtaW5hbFZlcnNpb24gPyBgLyR7dGVybWluYWxWZXJzaW9ufWAgOiBcIlwifWAgOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXMgdGhlIHBsYXRmb3JtL3Rlcm1pbmFsIHN1ZmZpeCBlbWl0dGVkIGJ5IHRoZSBwaW5uZWQgUnVzdCBDb2RleCBDTEkuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhDbGlVc2VyQWdlbnQocGxhdGZvcm06IENvZGV4VXNlckFnZW50UGxhdGZvcm0gPSBjb2RleFBsYXRmb3JtKCkpOiBzdHJpbmcge1xuICByZXR1cm4gYGNvZGV4X2NsaV9ycy8ke0NPREVYX0NMSV9WRVJTSU9OfSAoJHtwbGF0Zm9ybS5vc1R5cGV9ICR7cGxhdGZvcm0ub3NWZXJzaW9ufTsgJHtwbGF0Zm9ybS5hcmNoaXRlY3R1cmV9KSAke3BsYXRmb3JtLnRlcm1pbmFsfWA7XG59XG5cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgbnVsbFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbi8qKiBSYXcgUmVzcG9uc2VzIEFQSSBpdGVtcy4gS2VlcGluZyB0aGVzZSBvcGFxdWUgcHJlc2VydmVzIHRoZSBjb21wbGV0ZSBjb252ZXJzYXRpb24gaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSVJlc3BvbnNlSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSU91dHB1dFNjaGVtYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogSnNvblZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc09wdGlvbnMge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk6IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sQ2hvaWNlPzogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbFRvb2xDYWxscz86IGJvb2xlYW47XG4gIHJlYXNvbmluZz86IHtcbiAgICBlZmZvcnQ/OiBPcGVuQUlFZmZvcnQgfCBcIm5vbmVcIjtcbiAgICBzdW1tYXJ5PzogXCJhdXRvXCIgfCBcImNvbmNpc2VcIiB8IFwiZGV0YWlsZWRcIjtcbiAgfTtcbiAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG4gIHByb21wdENhY2hlS2V5Pzogc3RyaW5nO1xuICBvdXRwdXRTY2hlbWE/OiBPcGVuQUlPdXRwdXRTY2hlbWE7XG4gIGltYWdlR2VuZXJhdGlvbj86IGJvb2xlYW4gfCBPcGVuQUlSZXNwb25zZUl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaW5wdXQ6IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sX2Nob2ljZTogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbF90b29sX2NhbGxzOiBib29sZWFuO1xuICByZWFzb25pbmc6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnNbXCJyZWFzb25pbmdcIl0gfCBudWxsO1xuICBzdG9yZTogZmFsc2U7XG4gIHN0cmVhbTogdHJ1ZTtcbiAgaW5jbHVkZTogc3RyaW5nW107XG4gIHNlcnZpY2VfdGllcj86IHN0cmluZztcbiAgcHJvbXB0X2NhY2hlX2tleT86IHN0cmluZztcbiAgdGV4dD86IHtcbiAgICB2ZXJib3NpdHk/OiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiO1xuICAgIGZvcm1hdD86IHtcbiAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIjtcbiAgICAgIHN0cmljdDogdHJ1ZTtcbiAgICAgIHNjaGVtYTogSnNvblZhbHVlO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gIG9wdGlvbnM6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnMsXG4pOiBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0IHtcbiAgY29uc3QgdG9vbHMgPSBvcHRpb25zLnRvb2xzID8gWy4uLm9wdGlvbnMudG9vbHNdIDogW107XG4gIGlmIChvcHRpb25zLmltYWdlR2VuZXJhdGlvbikge1xuICAgIHRvb2xzLnB1c2goXG4gICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbiA9PT0gdHJ1ZVxuICAgICAgICA/IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIgfVxuICAgICAgICA6IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsIC4uLm9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPVxuICAgIG9wdGlvbnMudmVyYm9zaXR5IHx8IG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICA/IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy52ZXJib3NpdHkgPyB7IHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uX3NjaGVtYVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLm91dHB1dFNjaGVtYS5zY2hlbWEsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLm91dHB1dFNjaGVtYS5uYW1lID8/IFwiY29kZXhfb3V0cHV0X3NjaGVtYVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIC4uLihvcHRpb25zLmluc3RydWN0aW9ucyA/IHsgaW5zdHJ1Y3Rpb25zOiBvcHRpb25zLmluc3RydWN0aW9ucyB9IDoge30pLFxuICAgIC8vIENvcHkgdGhlIGFycmF5LCBub3QgaXRzIGl0ZW1zOiByYXcgaXRlbXMgbXVzdCBhcnJpdmUgYnl0ZS1mb3ItYnl0ZSBlcXVpdmFsZW50LlxuICAgIGlucHV0OiBbLi4ub3B0aW9ucy5oaXN0b3J5XSxcbiAgICAuLi4odG9vbHMubGVuZ3RoID8geyB0b29scyB9IDoge30pLFxuICAgIHRvb2xfY2hvaWNlOiBvcHRpb25zLnRvb2xDaG9pY2UgPz8gXCJhdXRvXCIsXG4gICAgcGFyYWxsZWxfdG9vbF9jYWxsczogb3B0aW9ucy5wYXJhbGxlbFRvb2xDYWxscyA/PyB0cnVlLFxuICAgIHJlYXNvbmluZzogb3B0aW9ucy5yZWFzb25pbmcgPz8gbnVsbCxcbiAgICBzdG9yZTogZmFsc2UsXG4gICAgc3RyZWFtOiB0cnVlLFxuICAgIGluY2x1ZGU6IFtcInJlYXNvbmluZy5lbmNyeXB0ZWRfY29udGVudFwiXSxcbiAgICAuLi4ob3B0aW9ucy5zZXJ2aWNlVGllciA/IHsgc2VydmljZV90aWVyOiBvcHRpb25zLnNlcnZpY2VUaWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IHByb21wdF9jYWNoZV9rZXk6IG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgfSA6IHt9KSxcbiAgICAuLi4odGV4dCA/IHsgdGV4dCB9IDoge30pLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGNvcnJlbGF0aW9uPzogeyBzZXNzaW9uSWQ/OiBzdHJpbmc7IHRocmVhZElkPzogc3RyaW5nOyBjbGllbnRSZXF1ZXN0SWQ/OiBzdHJpbmcgfSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgIFwiQ2hhdEdQVC1BY2NvdW50LUlEXCI6IGFjY291bnRJZCxcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBvcmlnaW5hdG9yOiBDT0RFWF9DTElfT1JJR0lOQVRPUixcbiAgICBcIlVzZXItQWdlbnRcIjogY29kZXhDbGlVc2VyQWdlbnQoKSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnNlc3Npb25JZCA/IHsgXCJzZXNzaW9uLWlkXCI6IGNvcnJlbGF0aW9uLnNlc3Npb25JZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8udGhyZWFkSWQgPyB7IFwidGhyZWFkLWlkXCI6IGNvcnJlbGF0aW9uLnRocmVhZElkIH0gOiB7fSksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5jbGllbnRSZXF1ZXN0SWQgPyB7IFwieC1jbGllbnQtcmVxdWVzdC1pZFwiOiBjb3JyZWxhdGlvbi5jbGllbnRSZXF1ZXN0SWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlVc2FnZSB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJTm9ybWFsaXplZEV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiY3JlYXRlZFwiOyByZXNwb25zZUlkPzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwidGV4dC1kZWx0YVwiOyB0ZXh0OiBzdHJpbmc7IGl0ZW1JZD86IHN0cmluZyB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbWFnZVwiO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBiYXNlNjQ6IHN0cmluZztcbiAgICAgIG1pbWVUeXBlOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL3dlYnBcIjtcbiAgICAgIHJldmlzZWRQcm9tcHQ/OiBzdHJpbmc7XG4gICAgICBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGE7XG4gICAgfVxuICB8IHsgdHlwZTogXCJvdXRwdXQtaXRlbVwiOyBpdGVtOiBPcGVuQUlSZXNwb25zZUl0ZW07IGNvbXBsZXRlZD86IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjb21wbGV0ZWRcIjsgcmVzcG9uc2VJZDogc3RyaW5nOyB1c2FnZT86IE9wZW5BSVVzYWdlOyBtb2RlbD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcImVycm9yXCI7IGVycm9yOiBPcGVuQUlQcm90b2NvbEVycm9yIH07XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlQcm90b2NvbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU/OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlck1zPzogbnVtYmVyLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIk9wZW5BSVByb3RvY29sRXJyb3JcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2FnZUZyb20odmFsdWU6IHVua25vd24pOiBPcGVuQUlVc2FnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB1c2FnZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBpbnB1dERldGFpbHMgPSAodXNhZ2UuaW5wdXRfdG9rZW5zX2RldGFpbHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvdXRwdXREZXRhaWxzID0gKHVzYWdlLm91dHB1dF90b2tlbnNfZGV0YWlscyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaW5wdXRUb2tlbnM6IE51bWJlcih1c2FnZS5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IE51bWJlcihpbnB1dERldGFpbHMuY2FjaGVkX3Rva2VucyA/PyAwKSxcbiAgICBvdXRwdXRUb2tlbnM6IE51bWJlcih1c2FnZS5vdXRwdXRfdG9rZW5zID8/IDApLFxuICAgIHJlYXNvbmluZ1Rva2VuczogTnVtYmVyKG91dHB1dERldGFpbHMucmVhc29uaW5nX3Rva2VucyA/PyAwKSxcbiAgICB0b3RhbFRva2VuczogTnVtYmVyKHVzYWdlLnRvdGFsX3Rva2VucyA/PyAwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlTWltZVR5cGUoXG4gIGJhc2U2NDogc3RyaW5nLFxuICBvdXRwdXRGb3JtYXQ/OiB1bmtub3duLFxuKTogXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS93ZWJwXCIge1xuICAvLyBJbnNwZWN0IG9ubHkgdGhlIGhlYWRlciwgd2l0aG91dCBkZWNvZGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlIHR3aWNlLlxuICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQuc2xpY2UoMCwgMjQpLCBcImJhc2U2NFwiKTtcbiAgaWYgKGhlYWRlci5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpXG4gICAgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gIGlmIChoZWFkZXJbMF0gPT09IDI1NSAmJiBoZWFkZXJbMV0gPT09IDIxNiAmJiBoZWFkZXJbMl0gPT09IDI1NSkgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAoaGVhZGVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiUklGRlwiICYmIGhlYWRlci50b1N0cmluZyhcImFzY2lpXCIsIDgsIDEyKSA9PT0gXCJXRUJQXCIpXG4gICAgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcImpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcIndlYnBcIikgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSB1bmRlZmluZWQgfHwgb3V0cHV0Rm9ybWF0ID09PSBcInBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoYFVuc3VwcG9ydGVkIGltYWdlIG91dHB1dCBmb3JtYXQ6ICR7U3RyaW5nKG91dHB1dEZvcm1hdCl9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcGVuQUlFdmVudChyYXc6IHVua25vd24pOiBPcGVuQUlOb3JtYWxpemVkRXZlbnQgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdHlwZSA9IFN0cmluZyhldmVudC50eXBlID8/IFwiXCIpO1xuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5jcmVhdGVkXCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHR5cGU6IFwiY3JlYXRlZFwiLCAuLi4ocmVzcG9uc2U/LmlkID8geyByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQpIH0gOiB7fSkgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiICYmIHR5cGVvZiBldmVudC5kZWx0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHQtZGVsdGFcIixcbiAgICAgIHRleHQ6IGV2ZW50LmRlbHRhLFxuICAgICAgLi4uKHR5cGVvZiBldmVudC5pdGVtX2lkID09PSBcInN0cmluZ1wiID8geyBpdGVtSWQ6IGV2ZW50Lml0ZW1faWQgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZFwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZVwiKSAmJlxuICAgIGV2ZW50Lml0ZW0gJiZcbiAgICB0eXBlb2YgZXZlbnQuaXRlbSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQuaXRlbSBhcyBPcGVuQUlSZXNwb25zZUl0ZW07XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJpbWFnZV9nZW5lcmF0aW9uX2NhbGxcIiAmJiB0eXBlb2YgaXRlbS5yZXN1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLmlkID09PSBcInN0cmluZ1wiID8geyBpZDogaXRlbS5pZCB9IDoge30pLFxuICAgICAgICBiYXNlNjQ6IGl0ZW0ucmVzdWx0LFxuICAgICAgICBtaW1lVHlwZTogaW1hZ2VNaW1lVHlwZShpdGVtLnJlc3VsdCwgaXRlbS5vdXRwdXRfZm9ybWF0KSxcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnJldmlzZWRfcHJvbXB0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZF9wcm9tcHQgfVxuICAgICAgICAgIDogdHlwZW9mIGl0ZW0ucmV2aXNlZFByb21wdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZFByb21wdCB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFwib3V0cHV0LWl0ZW1cIiwgaXRlbSwgY29tcGxldGVkOiB0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLmNvbXBsZXRlZFwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoZXZlbnQucmVzcG9uc2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbXBsZXRlZFwiLFxuICAgICAgcmVzcG9uc2VJZDogU3RyaW5nKHJlc3BvbnNlLmlkID8/IFwiXCIpLFxuICAgICAgLi4uKHJlc3BvbnNlLnVzYWdlID8geyB1c2FnZTogdXNhZ2VGcm9tKHJlc3BvbnNlLnVzYWdlKSB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiByZXNwb25zZS5tb2RlbCA9PT0gXCJzdHJpbmdcIiA/IHsgbW9kZWw6IHJlc3BvbnNlLm1vZGVsIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJlcnJvclwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2UuZmFpbGVkXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5pbmNvbXBsZXRlXCIpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAoZXZlbnQuZXJyb3IgPz8gZXZlbnQucmVzcG9uc2UgPz8gZXZlbnQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5lc3RlZCA9IChzb3VyY2UuZXJyb3IgPz8gc291cmNlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICBTdHJpbmcobmVzdGVkLm1lc3NhZ2UgPz8gYE9wZW5BSSBzdHJlYW0gZW5kZWQgd2l0aCAke3R5cGV9YCksXG4gICAgICAgIHR5cGVvZiBuZXN0ZWQuY29kZSA9PT0gXCJzdHJpbmdcIiA/IG5lc3RlZC5jb2RlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBS0EsTUFBYSw4QkFDWDtBQUVGLE1BQWEsdUJBQXVCO0FBQ3BDLE1BQWEsb0JBQW9CO0FBU2pDLFNBQVMsZ0JBQXdDO0NBQy9DLE1BQU0sUUFBa0Q7RUFDdEQsUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0NBQ1Q7Q0FDQSxNQUFNLFdBQVcsUUFBUSxJQUFJO0NBQzdCLE1BQU0sa0JBQWtCLFFBQVEsSUFBSTtDQUNwQyxPQUFPO0VBQ0wsUUFBUSxNQUFNLFFBQVEsYUFBYSxRQUFRO0VBQzNDLFdBQVcsR0FBRyxRQUFRO0VBQ3RCLGNBQWMsUUFBUTtFQUN0QixVQUFVLFdBQVcsR0FBRyxXQUFXLGtCQUFrQixJQUFJLG9CQUFvQixPQUFPO0NBQ3RGO0FBQ0Y7O0FBR0EsU0FBZ0Isa0JBQWtCLFdBQW1DLGNBQWMsR0FBVztDQUM1RixPQUFPLGdCQUFnQixrQkFBa0IsSUFBSSxTQUFTLE9BQU8sR0FBRyxTQUFTLFVBQVUsSUFBSSxTQUFTLGFBQWEsSUFBSSxTQUFTO0FBQzVIO0FBNERBLFNBQWdCLDRCQUNkLFNBQ3dCO0NBQ3hCLE1BQU0sUUFBUSxRQUFRLFFBQVEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxJQUFJLENBQUM7Q0FDcEQsSUFBSSxRQUFRLGlCQUNWLE1BQU0sS0FDSixRQUFRLG9CQUFvQixPQUN4QixFQUFFLE1BQU0sbUJBQW1CLElBQzNCO0VBQUUsTUFBTTtFQUFvQixHQUFHLFFBQVE7Q0FBZ0IsQ0FDN0Q7Q0FHRixNQUFNLE9BQ0osUUFBUSxhQUFhLFFBQVEsZUFDekI7RUFDRSxHQUFJLFFBQVEsWUFBWSxFQUFFLFdBQVcsUUFBUSxVQUFVLElBQUksQ0FBQztFQUM1RCxHQUFJLFFBQVEsZUFDUixFQUNFLFFBQVE7R0FDTixNQUFNO0dBQ04sUUFBUTtHQUNSLFFBQVEsUUFBUSxhQUFhO0dBQzdCLE1BQU0sUUFBUSxhQUFhLFFBQVE7RUFDckMsRUFDRixJQUNBLENBQUM7Q0FDUCxJQUNBO0NBRU4sT0FBTztFQUNMLE9BQU8sUUFBUTtFQUNmLEdBQUksUUFBUSxlQUFlLEVBQUUsY0FBYyxRQUFRLGFBQWEsSUFBSSxDQUFDO0VBRXJFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsT0FBTztFQUMxQixHQUFJLE1BQU0sU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0VBQ2hDLGFBQWEsUUFBUSxjQUFjO0VBQ25DLHFCQUFxQixRQUFRLHFCQUFxQjtFQUNsRCxXQUFXLFFBQVEsYUFBYTtFQUNoQyxPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVMsQ0FBQyw2QkFBNkI7RUFDdkMsR0FBSSxRQUFRLGNBQWMsRUFBRSxjQUFjLFFBQVEsWUFBWSxJQUFJLENBQUM7RUFDbkUsR0FBSSxRQUFRLGlCQUFpQixFQUFFLGtCQUFrQixRQUFRLGVBQWUsSUFBSSxDQUFDO0VBQzdFLEdBQUksT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDO0NBQ3pCO0FBQ0Y7QUFFQSxTQUFnQiwwQkFDZCxhQUNBLFdBQ0EsYUFDd0I7Q0FDeEIsT0FBTztFQUNMLFFBQVE7RUFDUixlQUFlLFVBQVU7RUFDekIsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixZQUFZO0VBQ1osY0FBYyxrQkFBa0I7RUFDaEMsR0FBSSxhQUFhLFlBQVksRUFBRSxjQUFjLFlBQVksVUFBVSxJQUFJLENBQUM7RUFDeEUsR0FBSSxhQUFhLFdBQVcsRUFBRSxhQUFhLFlBQVksU0FBUyxJQUFJLENBQUM7RUFDckUsR0FBSSxhQUFhLGtCQUFrQixFQUFFLHVCQUF1QixZQUFZLGdCQUFnQixJQUFJLENBQUM7Q0FDL0Y7QUFDRjtBQXlCQSxJQUFhLHNCQUFiLGNBQXlDLE1BQU07Q0FHM0I7Q0FDQTtDQUNBO0NBSmxCLFlBQ0UsU0FDQSxNQUNBLFFBQ0EsY0FDQTtFQUNBLE1BQU0sT0FBTztFQUpHLEtBQUEsT0FBQTtFQUNBLEtBQUEsU0FBQTtFQUNBLEtBQUEsZUFBQTtFQUdoQixLQUFLLE9BQU87Q0FDZDtBQUNGO0FBRUEsU0FBUyxVQUFVLE9BQXlDO0NBQzFELElBQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDaEQsTUFBTSxRQUFRO0NBQ2QsTUFBTSxlQUFnQixNQUFNLHdCQUF3QixDQUFDO0NBQ3JELE1BQU0sZ0JBQWlCLE1BQU0seUJBQXlCLENBQUM7Q0FDdkQsT0FBTztFQUNMLGFBQWEsT0FBTyxNQUFNLGdCQUFnQixDQUFDO0VBQzNDLG1CQUFtQixPQUFPLGFBQWEsaUJBQWlCLENBQUM7RUFDekQsY0FBYyxPQUFPLE1BQU0saUJBQWlCLENBQUM7RUFDN0MsaUJBQWlCLE9BQU8sY0FBYyxvQkFBb0IsQ0FBQztFQUMzRCxhQUFhLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztDQUM3QztBQUNGO0FBRUEsU0FBZ0IsY0FDZCxRQUNBLGNBQzJDO0NBRTNDLE1BQU0sU0FBUyxPQUFPLEtBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxHQUFHLFFBQVE7Q0FDeEQsSUFBSSxPQUFPLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSztFQUFDO0VBQUs7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUk7Q0FBRSxDQUFDLENBQUMsR0FDN0UsT0FBTztDQUNULElBQUksT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEtBQUssT0FBTztDQUN4RSxJQUFJLE9BQU8sU0FBUyxTQUFTLEdBQUcsQ0FBQyxNQUFNLFVBQVUsT0FBTyxTQUFTLFNBQVMsR0FBRyxFQUFFLE1BQU0sUUFDbkYsT0FBTztDQUNULElBQUksaUJBQWlCLFFBQVEsT0FBTztDQUNwQyxJQUFJLGlCQUFpQixRQUFRLE9BQU87Q0FDcEMsSUFBSSxpQkFBaUIsVUFBYSxpQkFBaUIsT0FBTyxPQUFPO0NBQ2pFLE1BQU0sSUFBSSxvQkFBb0Isb0NBQW9DLE9BQU8sWUFBWSxHQUFHO0FBQzFGO0FBRUEsU0FBZ0IscUJBQXFCLEtBQWlEO0NBQ3BGLElBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxVQUFVLE9BQU87Q0FDNUMsTUFBTSxRQUFRO0NBQ2QsTUFBTSxPQUFPLE9BQU8sTUFBTSxRQUFRLEVBQUU7Q0FDcEMsSUFBSSxTQUFTLG9CQUFvQjtFQUMvQixNQUFNLFdBQVcsTUFBTTtFQUN2QixPQUFPO0dBQUUsTUFBTTtHQUFXLEdBQUksVUFBVSxLQUFLLEVBQUUsWUFBWSxPQUFPLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQztFQUFHO0NBQ3pGO0NBQ0EsSUFBSSxTQUFTLGdDQUFnQyxPQUFPLE1BQU0sVUFBVSxVQUNsRSxPQUFPO0VBQ0wsTUFBTTtFQUNOLE1BQU0sTUFBTTtFQUNaLEdBQUksT0FBTyxNQUFNLFlBQVksV0FBVyxFQUFFLFFBQVEsTUFBTSxRQUFRLElBQUksQ0FBQztDQUN2RTtDQUVGLEtBQ0csU0FBUyxnQ0FBZ0MsU0FBUyxnQ0FDbkQsTUFBTSxRQUNOLE9BQU8sTUFBTSxTQUFTLFVBQ3RCO0VBQ0EsTUFBTSxPQUFPLE1BQU07RUFDbkIsSUFBSSxLQUFLLFNBQVMsMkJBQTJCLE9BQU8sS0FBSyxXQUFXLFVBQ2xFLE9BQU87R0FDTCxNQUFNO0dBQ04sR0FBSSxPQUFPLEtBQUssT0FBTyxXQUFXLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0dBQ3JELFFBQVEsS0FBSztHQUNiLFVBQVUsY0FBYyxLQUFLLFFBQVEsS0FBSyxhQUFhO0dBQ3ZELEdBQUksT0FBTyxLQUFLLG1CQUFtQixXQUMvQixFQUFFLGVBQWUsS0FBSyxlQUFlLElBQ3JDLE9BQU8sS0FBSyxrQkFBa0IsV0FDNUIsRUFBRSxlQUFlLEtBQUssY0FBYyxJQUNwQyxDQUFDO0VBQ1Q7RUFFRixPQUFPO0dBQUUsTUFBTTtHQUFlO0dBQU0sV0FBVyxTQUFTO0VBQTRCO0NBQ3RGO0NBQ0EsSUFBSSxTQUFTLHNCQUFzQjtFQUNqQyxNQUFNLFdBQVksTUFBTSxZQUFZLENBQUM7RUFDckMsT0FBTztHQUNMLE1BQU07R0FDTixZQUFZLE9BQU8sU0FBUyxNQUFNLEVBQUU7R0FDcEMsR0FBSSxTQUFTLFFBQVEsRUFBRSxPQUFPLFVBQVUsU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDO0dBQzdELEdBQUksT0FBTyxTQUFTLFVBQVUsV0FBVyxFQUFFLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztFQUN4RTtDQUNGO0NBQ0EsSUFBSSxTQUFTLFdBQVcsU0FBUyxxQkFBcUIsU0FBUyx1QkFBdUI7RUFDcEYsTUFBTSxTQUFVLE1BQU0sU0FBUyxNQUFNLFlBQVk7RUFDakQsTUFBTSxTQUFVLE9BQU8sU0FBUztFQUNoQyxPQUFPO0dBQ0wsTUFBTTtHQUNOLE9BQU8sSUFBSSxvQkFDVCxPQUFPLE9BQU8sV0FBVyw0QkFBNEIsTUFBTSxHQUMzRCxPQUFPLE9BQU8sU0FBUyxXQUFXLE9BQU8sT0FBTyxNQUNsRDtFQUNGO0NBQ0Y7QUFFRiJ9
|