@cartanova/qgrid-cli 2.4.6 → 2.4.8
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/qgrid/qgrid-run-lifecycle.js +15 -1
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +12 -4
- package/bundle/dist/application/qgrid/qgrid.frame.js +20 -1
- package/bundle/dist/application/qgrid/qgrid.types.js +38 -2
- package/bundle/dist/application/request-log/request-log.model.js +49 -22
- package/bundle/dist/application/request-log-step/request-log-step.types.js +8 -1
- package/bundle/dist/application/sonamu.generated.js +37 -1
- package/bundle/dist/application/sonamu.generated.sso.js +25 -1
- package/bundle/dist/i18n/sd.generated.js +13 -1
- package/bundle/dist/migrations/20260718180824_alter_request_logs_add5_alter1.js +20 -0
- package/bundle/dist/migrations/20260718180825_alter_request_log_steps_add7_alter1.js +22 -0
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +8 -2
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +6 -3
- package/bundle/dist/utils/providers/anthropic/claude-session.js +11 -7
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +117 -7
- package/bundle/dist/utils/providers/common/model-cost.js +45 -98
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +68 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +14 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +81 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +16 -9
- package/bundle/src/application/qgrid/qgrid.frame.ts +19 -0
- package/bundle/src/application/qgrid/qgrid.types.ts +36 -0
- package/bundle/src/application/qgrid/tool-emulation.test.ts +1 -0
- package/bundle/src/application/request-log/request-log.entity.json +42 -0
- package/bundle/src/application/request-log/request-log.model.test.ts +58 -0
- package/bundle/src/application/request-log/request-log.model.ts +107 -18
- package/bundle/src/application/request-log-step/request-log-step.entity.json +54 -0
- package/bundle/src/application/request-log-step/request-log-step.types.ts +7 -0
- package/bundle/src/application/sonamu.generated.http +26 -0
- package/bundle/src/application/sonamu.generated.sso.ts +24 -0
- package/bundle/src/application/sonamu.generated.ts +48 -0
- package/bundle/src/i18n/sd.generated.ts +12 -0
- package/bundle/src/migrations/20260718180824_alter_request_logs_add5_alter1.ts +25 -0
- package/bundle/src/migrations/20260718180825_alter_request_log_steps_add7_alter1.ts +29 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.test.ts +15 -0
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +11 -2
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +7 -2
- package/bundle/src/utils/providers/anthropic/claude-session.test.ts +26 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +16 -4
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +131 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +194 -11
- package/bundle/src/utils/providers/common/model-cost.test.ts +136 -2
- package/bundle/src/utils/providers/common/model-cost.ts +76 -99
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +18 -0
- package/bundle/web-dist/client/assets/{index-BOXhNo0k.js → index-CmuPjbCl.js} +3 -3
- package/bundle/web-dist/client/assets/{logs-BShH_sut.js → logs-cXOsDli3.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-CoEAp5S0.js → monit-B5Edhvy-.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-Dr3cGnV3.js → routes-UPWScORY.js} +1 -1
- package/bundle/web-dist/client/assets/{sd.generated-D2Y9QeiN.js → sd.generated-DYuKzBY6.js} +1 -1
- package/bundle/web-dist/client/assets/{services.generated-CmxXl220.js → services.generated-D_SkWOo-.js} +1 -1
- package/bundle/web-dist/client/assets/show-pRp-eZIK.js +30 -0
- package/bundle/web-dist/client/assets/{tokens-hP1NecIg.js → tokens-DJlttxCM.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-6J1T9U2-.js → use-update-token-mutation-CpFGLWUl.js} +1 -1
- package/bundle/web-dist/client/index.html +2 -2
- package/bundle/web-dist/server/assets/{lazyRouteComponent-BlfOh9S3.js → lazyRouteComponent-Cu6IkL8A.js} +1 -1
- package/bundle/web-dist/server/assets/{logs-DYly4ipQ.js → logs-Dx2knN2T.js} +10 -7
- package/bundle/web-dist/server/assets/{monit-CYyY2S2f.js → monit-DU6PLatf.js} +2 -2
- package/bundle/web-dist/server/assets/{routes-Dqu3osXt.js → routes-CTco1oJZ.js} +3 -3
- package/bundle/web-dist/server/assets/{sd.generated-CE6D5clm.js → sd.generated-qzuRe35X.js} +12 -0
- package/bundle/web-dist/server/assets/{services.generated-DyZUzXiq.js → services.generated-C8q1M41a.js} +1 -1
- package/bundle/web-dist/server/assets/{show-BDul8xLb.js → show-B3q8_GDh.js} +47 -4
- package/bundle/web-dist/server/assets/{tokens-fzMW4G74.js → tokens-Bvjn15h9.js} +3 -3
- package/bundle/web-dist/server/assets/{use-update-token-mutation-BejUW5sw.js → use-update-token-mutation-BlZo6swF.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +8 -8
- package/package.json +2 -2
- package/skills/qgrid/SKILL.md +4 -0
- package/skills/qgrid/references/ai-sdk-provider-contract.md +30 -2
- package/skills/qgrid/references/anthropic-claude-code-runtime.md +43 -5
- package/skills/qgrid/references/decision-rationale.md +2 -0
- package/skills/qgrid/references/prompt-cache-and-usage.md +4 -1
- package/skills/qgrid/references/request-log-run-lifecycle.md +6 -2
- package/skills/qgrid/references/sonamu-api-web-flow.md +13 -0
- package/bundle/web-dist/client/assets/show-CXII6Iy7.js +0 -30
|
@@ -105,21 +105,38 @@ const QueryInput = z.object({
|
|
|
105
105
|
imageGeneration: z.boolean().optional(),
|
|
106
106
|
imageGenerationOptions: ImageGenerationOptions.optional()
|
|
107
107
|
});
|
|
108
|
+
const ModelFallback = z.object({
|
|
109
|
+
trigger: z.literal("refusal"),
|
|
110
|
+
fromModel: z.string(),
|
|
111
|
+
toModel: z.string(),
|
|
112
|
+
category: z.string().optional(),
|
|
113
|
+
explanation: z.string().optional()
|
|
114
|
+
});
|
|
115
|
+
const CostSource = z.enum([
|
|
116
|
+
"provider",
|
|
117
|
+
"pricing_table",
|
|
118
|
+
"mixed"
|
|
119
|
+
]);
|
|
108
120
|
const QueryOutput = z.object({
|
|
109
121
|
text: z.string(),
|
|
110
122
|
content: z.array(QgridContent),
|
|
111
123
|
finishReason: FinishReason,
|
|
112
124
|
tokenName: z.string().optional(),
|
|
113
125
|
model: z.string().optional(),
|
|
126
|
+
requestedModel: z.string().optional(),
|
|
127
|
+
modelFallbacks: z.array(ModelFallback).optional(),
|
|
114
128
|
usage: z.object({
|
|
115
129
|
input_tokens: z.number(),
|
|
116
130
|
output_tokens: z.number(),
|
|
117
131
|
cache_creation_input_tokens: z.number(),
|
|
132
|
+
cache_creation_5m_input_tokens: z.number().optional(),
|
|
133
|
+
cache_creation_1h_input_tokens: z.number().optional(),
|
|
118
134
|
cache_read_input_tokens: z.number()
|
|
119
135
|
}),
|
|
120
136
|
durationMs: z.number(),
|
|
121
137
|
ttftMs: z.number(),
|
|
122
138
|
costUsd: z.number(),
|
|
139
|
+
costSource: CostSource,
|
|
123
140
|
runContext: QgridRunContext.optional()
|
|
124
141
|
});
|
|
125
142
|
const StreamEvents = z.object({
|
|
@@ -132,17 +149,22 @@ const StreamEvents = z.object({
|
|
|
132
149
|
done: z.object({
|
|
133
150
|
text: z.string(),
|
|
134
151
|
model: z.string().optional(),
|
|
152
|
+
requestedModel: z.string().optional(),
|
|
153
|
+
modelFallbacks: z.array(ModelFallback).optional(),
|
|
135
154
|
tokenName: z.string().optional(),
|
|
136
155
|
finishReason: FinishReason,
|
|
137
156
|
usage: z.object({
|
|
138
157
|
input_tokens: z.number(),
|
|
139
158
|
output_tokens: z.number(),
|
|
140
159
|
cache_creation_input_tokens: z.number(),
|
|
160
|
+
cache_creation_5m_input_tokens: z.number().optional(),
|
|
161
|
+
cache_creation_1h_input_tokens: z.number().optional(),
|
|
141
162
|
cache_read_input_tokens: z.number()
|
|
142
163
|
}),
|
|
143
164
|
durationMs: z.number(),
|
|
144
165
|
ttftMs: z.number(),
|
|
145
166
|
costUsd: z.number(),
|
|
167
|
+
costSource: CostSource,
|
|
146
168
|
content: z.array(QgridContent),
|
|
147
169
|
runContext: QgridRunContext.optional()
|
|
148
170
|
}),
|
|
@@ -160,10 +182,17 @@ const AppendStepInput = z.object({
|
|
|
160
182
|
requestLogId: z.number(),
|
|
161
183
|
stepIndex: z.number(),
|
|
162
184
|
type: z.enum(["generate", "tool_call"]),
|
|
185
|
+
modelName: z.string().optional(),
|
|
186
|
+
requestedModelName: z.string().optional(),
|
|
187
|
+
fallbackCount: z.number().optional(),
|
|
163
188
|
inputTokens: z.number().optional(),
|
|
164
189
|
outputTokens: z.number().optional(),
|
|
165
190
|
cacheReadTokens: z.number().optional(),
|
|
166
191
|
cacheCreationTokens: z.number().optional(),
|
|
192
|
+
cacheCreation5mTokens: z.number().optional(),
|
|
193
|
+
cacheCreation1hTokens: z.number().optional(),
|
|
194
|
+
costUsd: z.number().optional(),
|
|
195
|
+
costSource: CostSource.optional(),
|
|
167
196
|
durationMs: z.number().optional(),
|
|
168
197
|
ttftMs: z.number().nullable().optional(),
|
|
169
198
|
finishReason: z.string().optional(),
|
|
@@ -186,10 +215,17 @@ const FinishRunInput = z.object({
|
|
|
186
215
|
]),
|
|
187
216
|
response: z.string().optional(),
|
|
188
217
|
tokenName: z.string().optional(),
|
|
218
|
+
modelName: z.string().optional(),
|
|
219
|
+
requestedModelName: z.string().optional(),
|
|
220
|
+
fallbackCount: z.number().optional(),
|
|
189
221
|
totalInputTokens: z.number().optional(),
|
|
190
222
|
totalOutputTokens: z.number().optional(),
|
|
191
223
|
totalCacheReadTokens: z.number().optional(),
|
|
192
224
|
totalCacheCreationTokens: z.number().optional(),
|
|
225
|
+
totalCacheCreation5mTokens: z.number().optional(),
|
|
226
|
+
totalCacheCreation1hTokens: z.number().optional(),
|
|
227
|
+
costUsd: z.number().optional(),
|
|
228
|
+
costSource: CostSource.optional(),
|
|
193
229
|
totalDurationMs: z.number().optional(),
|
|
194
230
|
history: z.string().optional(),
|
|
195
231
|
errorMessage: z.string().optional()
|
|
@@ -244,6 +280,6 @@ function maskToken(token) {
|
|
|
244
280
|
return token.length > 4 ? `...${token.slice(-4)}` : token;
|
|
245
281
|
}
|
|
246
282
|
//#endregion
|
|
247
|
-
export { AddTokenInput, AppendStepInput, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, OAuthStartResult, ProcessError, QgridContent, QgridInputPart, QgridLogMode, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QuotaError, QuotaThresholdExceededError, ReasoningSummary, RemoveTokenInput, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
|
|
283
|
+
export { AddTokenInput, AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, ModelFallback, OAuthStartResult, ProcessError, QgridContent, QgridInputPart, QgridLogMode, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QuotaError, QuotaThresholdExceededError, ReasoningSummary, RemoveTokenInput, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
|
|
248
284
|
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFFncmlkTG9nTW9kZSA9IHouZW51bShbXCJhdXRvXCIsIFwicnVuXCIsIFwibm9uZVwiXSk7XG5leHBvcnQgdHlwZSBRZ3JpZExvZ01vZGUgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZExvZ01vZGU+O1xuXG4vLyBjb2RleCB0aHJlYWQg7KKM7ZGcLiB0aHJlYWQg7J6s7IKs7Jqp7Jy866GcIGNvbnZlcnNhdGlvbl9pZCg9cHJvbXB0X2NhY2hlX2tleSnrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIGNvZGV4IGNvbnZlcnNhdGlvbl9pZCA9IHByb21wdF9jYWNoZV9rZXlcbiAgZXBvY2g6IHoubnVtYmVyKCksIC8vIHdvcmtlciBzcGF3biDsubTsmrTthLAuIHJlc3RhcnQg66GcIHRocmVhZCDspp3rsJwg6rCQ7KeAXG4gIHN5c3RlbUhhc2g6IHouc3RyaW5nKCksIC8vIHN5c3RlbV9wcm9tcHQg7ZW07IucLiDri6Trpbgg64yA7ZmUIOyYpOygkeyGjSDrsKnsp4Bcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUaHJlYWRDb29yZCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVGhyZWFkQ29vcmQ+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRSdW5Db250ZXh0ID0gei5vYmplY3Qoe1xuICAvLyBydW4gbGlmZWN5Y2xlKGxvZ01vZGU9XCJydW5cIikg7JeQ7ISc66eMIOuwnOq4iS4gYXV0byDrqqjrk5wo7JiIOiBJRinripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lm9iamVjdCh7XG4gIHN5c3RlbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9tcHQ6IHouc3RyaW5nKCksXG4gIGlucHV0OiB6LmFycmF5KFFncmlkSW5wdXRQYXJ0KS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aW1lb3V0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpc1N0ZXA6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGxvZ01vZGU6IFFncmlkTG9nTW9kZS5vcHRpb25hbCgpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdHM6IHouYXJyYXkoUWdyaWRUb29sUmVzdWx0SW5wdXQpLm9wdGlvbmFsKCksXG4gIC8vIGNvZGV4IOuCtOyepSBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpChPcGVuQUkg6rK966GcIOyghOyaqSwgb3B0LWluLCBub24tc3RyZWFtKS5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBxZ3JpZCDqsIDqsqkg7LaU7KCVIOuwjyBDb2RleCDsnbTrr7jsp4Ag7JqU7LKtIO2ejO2KuC4g7J2066+47KeAIOuqqOuNuOydgCBncHQtaW1hZ2UtMiDroZwg6rOg7KCVIOqwgOygle2VnOuLpC5cbiAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uLFxuICAgIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gICAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIH0pLFxuICBlcnJvcjogei5vYmplY3QoeyBtZXNzYWdlOiB6LnN0cmluZygpIH0pLFxufSk7XG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgQ3JlYXRlUnVuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQXBwZW5kU3RlcElucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJbmRleDogei5udW1iZXIoKSxcbiAgdHlwZTogei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG90YWxJbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEFkZFRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBBZGRUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgQWRkVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVUb2tlbklucHV0ID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVG9rZW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIFJlbW92ZVRva2VuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICByZXF1ZXN0czogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdGF0cyA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3RhdHM+O1xuXG4vLyDilIDilIDilIAgT0F1dGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBPQXV0aFN0YXJ0UmVzdWx0ID0gei5vYmplY3Qoe1xuICBhdXRoVXJsOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVIb3VyOiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG4gIHNldmVuRGF5OiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN1YnNjcmliZXJTdGF0dXMgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3RlZDogei5ib29sZWFuKCksXG4gIGNvbm5lY3RlZEF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBsYXN0UmVjb25jaWxlQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGF0dGVtcHQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfVEhSRVNIT0xEX0VYQ0VFREVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJUSU1FT1VUXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUHJvY2Vzc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJQUk9DRVNTX0VSUk9SXCIgYXMgY29uc3Q7XG59XG5cbi8vIOKUgOKUgOKUgCBVdGlscyDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG1hc2tUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRva2VuLmxlbmd0aCA+IDQgPyBgLi4uJHt0b2tlbi5zbGljZSgtNCl9YCA6IHRva2VuO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFJQSxNQUFhLFNBQVMsRUFBRSxLQUFLO0NBQUM7Q0FBTztDQUFVO0NBQU8sQ0FBQztBQUd2RCxNQUFhLFlBQVksRUFBRSxPQUFPO0NBQ2hDLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNsQyxhQUFhLEVBQUUsU0FBUztDQUN6QixDQUFDO0FBR0YsTUFBYSxlQUFlLEVBQUUsbUJBQW1CLFFBQVE7Q0FDdkQsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsT0FBTztFQUN2QixNQUFNLEVBQUUsUUFBUTtFQUNqQixDQUFDO0NBQ0YsRUFBRSxPQUFPO0VBQ1AsTUFBTSxF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
|
|
285
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFFncmlkTG9nTW9kZSA9IHouZW51bShbXCJhdXRvXCIsIFwicnVuXCIsIFwibm9uZVwiXSk7XG5leHBvcnQgdHlwZSBRZ3JpZExvZ01vZGUgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZExvZ01vZGU+O1xuXG4vLyBjb2RleCB0aHJlYWQg7KKM7ZGcLiB0aHJlYWQg7J6s7IKs7Jqp7Jy866GcIGNvbnZlcnNhdGlvbl9pZCg9cHJvbXB0X2NhY2hlX2tleSnrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIGNvZGV4IGNvbnZlcnNhdGlvbl9pZCA9IHByb21wdF9jYWNoZV9rZXlcbiAgZXBvY2g6IHoubnVtYmVyKCksIC8vIHdvcmtlciBzcGF3biDsubTsmrTthLAuIHJlc3RhcnQg66GcIHRocmVhZCDspp3rsJwg6rCQ7KeAXG4gIHN5c3RlbUhhc2g6IHouc3RyaW5nKCksIC8vIHN5c3RlbV9wcm9tcHQg7ZW07IucLiDri6Trpbgg64yA7ZmUIOyYpOygkeyGjSDrsKnsp4Bcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUaHJlYWRDb29yZCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVGhyZWFkQ29vcmQ+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRSdW5Db250ZXh0ID0gei5vYmplY3Qoe1xuICAvLyBydW4gbGlmZWN5Y2xlKGxvZ01vZGU9XCJydW5cIikg7JeQ7ISc66eMIOuwnOq4iS4gYXV0byDrqqjrk5wo7JiIOiBJRinripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lm9iamVjdCh7XG4gIHN5c3RlbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9tcHQ6IHouc3RyaW5nKCksXG4gIGlucHV0OiB6LmFycmF5KFFncmlkSW5wdXRQYXJ0KS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aW1lb3V0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpc1N0ZXA6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGxvZ01vZGU6IFFncmlkTG9nTW9kZS5vcHRpb25hbCgpLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgdG9vbFJlc3VsdHM6IHouYXJyYXkoUWdyaWRUb29sUmVzdWx0SW5wdXQpLm9wdGlvbmFsKCksXG4gIC8vIGNvZGV4IOuCtOyepSBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpChPcGVuQUkg6rK966GcIOyghOyaqSwgb3B0LWluLCBub24tc3RyZWFtKS5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBxZ3JpZCDqsIDqsqkg7LaU7KCVIOuwjyBDb2RleCDsnbTrr7jsp4Ag7JqU7LKtIO2ejO2KuC4g7J2066+47KeAIOuqqOuNuOydgCBncHQtaW1hZ2UtMiDroZwg6rOg7KCVIOqwgOygle2VnOuLpC5cbiAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBNb2RlbEZhbGxiYWNrID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LmxpdGVyYWwoXCJyZWZ1c2FsXCIpLFxuICBmcm9tTW9kZWw6IHouc3RyaW5nKCksXG4gIHRvTW9kZWw6IHouc3RyaW5nKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4cGxhbmF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1vZGVsRmFsbGJhY2sgPSB6LmluZmVyPHR5cGVvZiBNb2RlbEZhbGxiYWNrPjtcblxuZXhwb3J0IGNvbnN0IENvc3RTb3VyY2UgPSB6LmVudW0oW1wicHJvdmlkZXJcIiwgXCJwcmljaW5nX3RhYmxlXCIsIFwibWl4ZWRcIl0pO1xuZXhwb3J0IHR5cGUgQ29zdFNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIENvc3RTb3VyY2U+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlPdXRwdXQgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgfSksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gIHR0ZnRNczogei5udW1iZXIoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5T3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgU3RyZWFtIEV2ZW50cyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN0cmVhbUV2ZW50cyA9IHoub2JqZWN0KHtcbiAgZGVsdGE6IHoub2JqZWN0KHsgdGV4dDogei5zdHJpbmcoKSB9KSxcbiAgdG9vbENhbGw6IHoub2JqZWN0KHtcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgZG9uZTogei5vYmplY3Qoe1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1vZGVsRmFsbGJhY2tzOiB6LmFycmF5KE1vZGVsRmFsbGJhY2spLm9wdGlvbmFsKCksXG4gICAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gICAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRmluaXNoUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSdW5JbnB1dD47XG5cbi8vIOKUgOKUgOKUgCBUb2tlbiBNYW5hZ2VtZW50IOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQWRkVG9rZW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIEFkZFRva2VuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBBZGRUb2tlbklucHV0PjtcblxuZXhwb3J0IGNvbnN0IFJlbW92ZVRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBSZW1vdmVUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgUmVtb3ZlVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZVdpbmRvdyA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICByZXNldHNBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpbmRvd0R1cmF0aW9uTWluczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZUhvdXI6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbiAgc2V2ZW5EYXk6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlclN0YXR1cyA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGVkOiB6LmJvb2xlYW4oKSxcbiAgY29ubmVjdGVkQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGxhc3RSZWNvbmNpbGVBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgYXR0ZW1wdDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlclN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFN1YnNjcmliZXJTdGF0dXM+O1xuXG5leHBvcnQgY29uc3QgSGVhbHRoUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5zdHJpbmcoKSxcbiAgYWN0aXZlVG9rZW5zOiB6Lm51bWJlcigpLFxuICBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyU3RhdHVzLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIEhlYWx0aFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgSGVhbHRoUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgRXJyb3JzIOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgUXVvdGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfRVhIQVVTVEVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7Q0FBTyxDQUFDO0FBR3ZELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLGFBQWEsRUFBRSxTQUFTO0NBQ3pCLENBQUM7QUFHRixNQUFhLGVBQWUsRUFBRSxtQkFBbUIsUUFBUTtDQUN2RCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0VBQ3ZCLE1BQU0sRUFBRSxRQUFRO0VBQ2pCLENBQUM7Q0FDRixFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxZQUFZO0VBQzVCLFlBQVksRUFBRSxRQUFRO0VBQ3RCLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLE9BQU8sRUFBRSxRQUFRO0VBQ2xCLENBQUM7Q0FDRixFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxRQUFRO0VBRXhCLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUztFQUNwQyxDQUFDO0NBQ0gsQ0FBQztBQUdGLE1BQWEsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRLGFBQWEsQ0FBQztBQUcxRCxNQUFhLFlBQVksRUFBRSxLQUFLO0NBQUM7Q0FBTztDQUFVO0NBQU8sQ0FBQztB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
|
|
@@ -23,10 +23,13 @@ function normalizedUsageForCost(row) {
|
|
|
23
23
|
inputTokens: legacyAnthropicSplitInput ? storedInput + cacheRead + cacheCreation : storedInput,
|
|
24
24
|
outputTokens: row.output_tokens,
|
|
25
25
|
cachedInputTokens: cacheRead,
|
|
26
|
-
cacheCreationInputTokens: cacheCreation
|
|
26
|
+
cacheCreationInputTokens: cacheCreation,
|
|
27
|
+
...row.cache_creation_5m_tokens !== null && row.cache_creation_5m_tokens !== void 0 ? { cacheCreationInputTokens5m: row.cache_creation_5m_tokens } : {},
|
|
28
|
+
...row.cache_creation_1h_tokens !== null && row.cache_creation_1h_tokens !== void 0 ? { cacheCreationInputTokens1h: row.cache_creation_1h_tokens } : {}
|
|
27
29
|
};
|
|
28
30
|
}
|
|
29
31
|
function normalizeLegacyAnthropicRow(row) {
|
|
32
|
+
if (row.cost_source) return row;
|
|
30
33
|
const usage = normalizedUsageForCost(row);
|
|
31
34
|
if (usage.inputTokens === row.input_tokens) return row;
|
|
32
35
|
const normalized = {
|
|
@@ -144,7 +147,14 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
144
147
|
"output_tokens",
|
|
145
148
|
"cache_read_tokens",
|
|
146
149
|
"cache_creation_tokens",
|
|
150
|
+
"cache_creation_5m_tokens",
|
|
151
|
+
"cache_creation_1h_tokens",
|
|
147
152
|
"duration_ms",
|
|
153
|
+
"requested_model_name",
|
|
154
|
+
"model_name",
|
|
155
|
+
"fallback_count",
|
|
156
|
+
"cost_usd",
|
|
157
|
+
"cost_source",
|
|
148
158
|
"error_message",
|
|
149
159
|
"tool_call_count",
|
|
150
160
|
"image_cost_usd",
|
|
@@ -152,24 +162,30 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
152
162
|
]) if (params[key] !== void 0) update[key] = params[key];
|
|
153
163
|
if (params.history !== void 0) update.history = params.history;
|
|
154
164
|
update.ttft_ms = await this.firstGenerateStepTtft(requestLogId) ?? 0;
|
|
155
|
-
if (params.input_tokens !== void 0 && params.output_tokens !== void 0) {
|
|
165
|
+
if (params.cost_usd === void 0 && params.input_tokens !== void 0 && params.output_tokens !== void 0) {
|
|
156
166
|
const [row] = await this.getDB("r")("request_logs").select("model_name").where("id", requestLogId).limit(1);
|
|
157
|
-
|
|
158
|
-
|
|
167
|
+
const effectiveModelName = params.model_name ?? row?.model_name;
|
|
168
|
+
if (effectiveModelName) {
|
|
169
|
+
const model = canonicalModelName(effectiveModelName);
|
|
159
170
|
const usage = normalizedUsageForCost({
|
|
160
171
|
token_name: params.token_name,
|
|
161
|
-
model_name:
|
|
172
|
+
model_name: effectiveModelName,
|
|
162
173
|
input_tokens: params.input_tokens,
|
|
163
174
|
output_tokens: params.output_tokens,
|
|
164
175
|
cache_read_tokens: params.cache_read_tokens ?? 0,
|
|
165
|
-
cache_creation_tokens: params.cache_creation_tokens ?? 0
|
|
176
|
+
cache_creation_tokens: params.cache_creation_tokens ?? 0,
|
|
177
|
+
cache_creation_5m_tokens: params.cache_creation_5m_tokens,
|
|
178
|
+
cache_creation_1h_tokens: params.cache_creation_1h_tokens
|
|
166
179
|
});
|
|
167
180
|
update.cost_usd = Math.round(calculateCostUsd(model, {
|
|
168
181
|
inputTokens: usage.inputTokens,
|
|
169
182
|
outputTokens: usage.outputTokens,
|
|
170
183
|
cachedInputTokens: usage.cachedInputTokens,
|
|
171
|
-
cacheCreationInputTokens: usage.cacheCreationInputTokens
|
|
184
|
+
cacheCreationInputTokens: usage.cacheCreationInputTokens,
|
|
185
|
+
cacheCreationInputTokens5m: usage.cacheCreationInputTokens5m,
|
|
186
|
+
cacheCreationInputTokens1h: usage.cacheCreationInputTokens1h
|
|
172
187
|
}) * 1e6);
|
|
188
|
+
update.cost_source = "pricing_table";
|
|
173
189
|
}
|
|
174
190
|
}
|
|
175
191
|
const wdb = this.getPuri("w");
|
|
@@ -183,19 +199,27 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
183
199
|
return row?.ttft_ms === null || row?.ttft_ms === void 0 ? null : Number(row.ttft_ms);
|
|
184
200
|
}
|
|
185
201
|
async aggregateStepUsage(requestLogId) {
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
202
|
+
const rows = await this.getDB("r")("request_log_steps").select("input_tokens", "output_tokens", "cache_read_tokens", "cache_creation_tokens", "cache_creation_5m_tokens", "cache_creation_1h_tokens", "duration_ms", "requested_model_name", "model_name", "fallback_count", "cost_usd", "cost_source").where("request_log_id", requestLogId).where("type", "generate");
|
|
203
|
+
const sum = (field) => rows.reduce((total, row) => total + Number(row[field] ?? 0), 0);
|
|
204
|
+
const optionalSum = (field) => rows.some((row) => row[field] !== null && row[field] !== void 0) ? sum(field) : void 0;
|
|
205
|
+
const collapse = (field) => {
|
|
206
|
+
const values = [...new Set(rows.map((row) => row[field]).filter((value) => typeof value === "string" && value.length > 0))];
|
|
207
|
+
if (values.length === 0) return void 0;
|
|
208
|
+
return values.length === 1 ? values[0] : "mixed";
|
|
209
|
+
};
|
|
193
210
|
return {
|
|
194
|
-
input_tokens:
|
|
195
|
-
output_tokens:
|
|
196
|
-
cache_read_tokens:
|
|
197
|
-
cache_creation_tokens:
|
|
198
|
-
|
|
211
|
+
input_tokens: sum("input_tokens"),
|
|
212
|
+
output_tokens: sum("output_tokens"),
|
|
213
|
+
cache_read_tokens: sum("cache_read_tokens"),
|
|
214
|
+
cache_creation_tokens: sum("cache_creation_tokens"),
|
|
215
|
+
cache_creation_5m_tokens: optionalSum("cache_creation_5m_tokens"),
|
|
216
|
+
cache_creation_1h_tokens: optionalSum("cache_creation_1h_tokens"),
|
|
217
|
+
duration_ms: sum("duration_ms"),
|
|
218
|
+
requested_model_name: collapse("requested_model_name"),
|
|
219
|
+
model_name: collapse("model_name"),
|
|
220
|
+
fallback_count: sum("fallback_count"),
|
|
221
|
+
cost_usd: sum("cost_usd"),
|
|
222
|
+
cost_source: collapse("cost_source")
|
|
199
223
|
};
|
|
200
224
|
}
|
|
201
225
|
async findStaleRunningIds(thresholdMs, limit = 10) {
|
|
@@ -219,14 +243,17 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
219
243
|
async totalCost(params = {}) {
|
|
220
244
|
const qb = this.getDB("r")("request_logs");
|
|
221
245
|
if (params.token_name) qb.where("token_name", params.token_name);
|
|
222
|
-
return (await qb.select("model_name", "input_tokens", "output_tokens", "cache_read_tokens", "cache_creation_tokens", "cost_usd")).reduce((sum, row) => {
|
|
246
|
+
return (await qb.select("model_name", "input_tokens", "output_tokens", "cache_read_tokens", "cache_creation_tokens", "cache_creation_5m_tokens", "cache_creation_1h_tokens", "cost_usd", "cost_source")).reduce((sum, row) => {
|
|
247
|
+
if (row.cost_source && row.cost_usd !== null) return sum + Math.max(row.cost_usd, 0) / MICRO_USD;
|
|
223
248
|
const usage = normalizedUsageForCost(row);
|
|
224
249
|
if (!usage.model) return sum + Math.max(row.cost_usd ?? 0, 0) / MICRO_USD;
|
|
225
250
|
return sum + calculateCostUsd(usage.model, {
|
|
226
251
|
inputTokens: usage.inputTokens,
|
|
227
252
|
outputTokens: usage.outputTokens,
|
|
228
253
|
cachedInputTokens: usage.cachedInputTokens,
|
|
229
|
-
cacheCreationInputTokens: usage.cacheCreationInputTokens
|
|
254
|
+
cacheCreationInputTokens: usage.cacheCreationInputTokens,
|
|
255
|
+
cacheCreationInputTokens5m: usage.cacheCreationInputTokens5m,
|
|
256
|
+
cacheCreationInputTokens1h: usage.cacheCreationInputTokens1h
|
|
230
257
|
});
|
|
231
258
|
}, 0);
|
|
232
259
|
}
|
|
@@ -283,4 +310,4 @@ const RequestLogModel = new RequestLogModelClass();
|
|
|
283
310
|
//#endregion
|
|
284
311
|
export { MICRO_USD, RequestLogModel };
|
|
285
312
|
|
|
286
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbnR5cGUgUmVxdWVzdExvZ1VzYWdlUm93ID0ge1xuICB0b2tlbl9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xufSB7XG4gIGNvbnN0IGNhY2hlUmVhZCA9IHJvdy5jYWNoZV9yZWFkX3Rva2VucztcbiAgY29uc3QgY2FjaGVDcmVhdGlvbiA9IHJvdy5jYWNoZV9jcmVhdGlvbl90b2tlbnM7XG4gIGNvbnN0IHN0b3JlZElucHV0ID0gcm93LmlucHV0X3Rva2VucztcbiAgY29uc3QgbGVnYWN5QW50aHJvcGljU3BsaXRJbnB1dCA9XG4gICAgaXNBbnRocm9waWNVc2FnZVJvdyhyb3cpICYmIHN0b3JlZElucHV0IDwgY2FjaGVSZWFkICsgY2FjaGVDcmVhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICBtb2RlbDogcm93Lm1vZGVsX25hbWUgPyBjYW5vbmljYWxNb2RlbE5hbWUocm93Lm1vZGVsX25hbWUpIDogbnVsbCxcbiAgICBpbnB1dFRva2VuczogbGVnYWN5QW50aHJvcGljU3BsaXRJbnB1dCA/IHN0b3JlZElucHV0ICsgY2FjaGVSZWFkICsgY2FjaGVDcmVhdGlvbiA6IHN0b3JlZElucHV0LFxuICAgIG91dHB1dFRva2Vuczogcm93Lm91dHB1dF90b2tlbnMsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IGNhY2hlUmVhZCxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IGNhY2hlQ3JlYXRpb24sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1JvdzxUIGV4dGVuZHMgUmVxdWVzdExvZ1VzYWdlUm93Pihyb3c6IFQpOiBUIHtcbiAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gIGlmICh1c2FnZS5pbnB1dFRva2VucyA9PT0gcm93LmlucHV0X3Rva2VucykgcmV0dXJuIHJvdztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93LCBpbnB1dF90b2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zIH07XG4gIGlmICh1c2FnZS5tb2RlbCkge1xuICAgIG5vcm1hbGl6ZWQuY29zdF91c2QgPSBNYXRoLnJvdW5kKGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHVzYWdlKSAqIE1JQ1JPX1VTRCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICBpc19pbWFnZV9nZW5lcmF0aW9uPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsi53rs4QoUjEzKS4gcnVuIOqyveuhnCh0b29scytpbWFnZSDsobDtlakp64+EIGF1dG8g6rK966Gc7JmAIOuPmeydvO2VmOqyjCDrp4jtgrkuXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBwYXJhbXMuaXNfaW1hZ2VfZ2VuZXJhdGlvbiA/PyBmYWxzZSxcbiAgICAgIC4uLihwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkID8geyBoaXN0b3J5OiBwYXJhbXMuaGlzdG9yeSBhcyB7IHR5cGU6IHN0cmluZyB9W10gfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQ6IG51bWJlciwgc3RlcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiLCB7IHJlcXVlc3RfbG9nX2lkOiByZXF1ZXN0TG9nSWQsIC4uLnN0ZXAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKTtcbiAgICAgIGlmIChzdGVwLnR5cGUgPT09IFwidG9vbF9jYWxsXCIpIHtcbiAgICAgICAgYXdhaXQgdHJ4LmZyb20oXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpLmluY3JlbWVudChcInRvb2xfY2FsbF9jb3VudFwiLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHBhcmFtczoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICByZXNwb25zZT86IHN0cmluZztcbiAgICAgIHRva2VuX25hbWU/OiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBvdXRwdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfcmVhZF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM/OiBudW1iZXI7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgICAgZXJyb3JfbWVzc2FnZT86IHN0cmluZztcbiAgICAgIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgICAgIGltYWdlX2Nvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGltYWdlX2Nvc3RfbWV0aG9kPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLnN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIiAmJiAhcGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRva2VuTmFtZSBpcyByZXF1aXJlZCBmb3Igc3VjY2VlZGVkIHJ1bnNcIik7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiByZXF1ZXN0TG9nSWQsIHN0YXR1czogcGFyYW1zLnN0YXR1cyB9O1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIFwicmVzcG9uc2VcIixcbiAgICAgIFwidG9rZW5fbmFtZVwiLFxuICAgICAgXCJpbnB1dF90b2tlbnNcIixcbiAgICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkcykge1xuICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHVwZGF0ZVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkKSB1cGRhdGUuaGlzdG9yeSA9IHBhcmFtcy5oaXN0b3J5O1xuICAgIHVwZGF0ZS50dGZ0X21zID0gKGF3YWl0IHRoaXMuZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZCkpID8/IDA7XG5cbiAgICBpZiAocGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5vdXRwdXRfdG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAgIC5zZWxlY3QoXCJtb2RlbF9uYW1lXCIpXG4gICAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLmxpbWl0KDEpO1xuICAgICAgaWYgKHJvdz8ubW9kZWxfbmFtZSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSk7XG4gICAgICAgIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdCh7XG4gICAgICAgICAgdG9rZW5fbmFtZTogcGFyYW1zLnRva2VuX25hbWUsXG4gICAgICAgICAgbW9kZWxfbmFtZTogcm93Lm1vZGVsX25hbWUsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiBwYXJhbXMuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHBhcmFtcy5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBwYXJhbXMuY2FjaGVfcmVhZF90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl90b2tlbnMgPz8gMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3VzZCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgY2FsY3VsYXRlQ29zdFVzZChtb2RlbCwge1xuICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICB9KSAqIDFfMDAwXzAwMCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHVwZGF0ZSk7XG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgY29uc3QgW3Jvd10gPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFwidHRmdF9tc1wiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmVOb3ROdWxsKFwidHRmdF9tc1wiKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAubGltaXQoMSk7XG4gICAgcmV0dXJuIHJvdz8udHRmdF9tcyA9PT0gbnVsbCB8fCByb3c/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIocm93LnR0ZnRfbXMpO1xuICB9XG5cbiAgYXN5bmMgYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gICAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgfT4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgY29uc3QgW3Jvd10gPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC5zdW0oe1xuICAgICAgICBpbnB1dF90b2tlbnM6IFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogXCJjYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICAgIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRfdG9rZW5zOiBOdW1iZXIocm93Py5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiBOdW1iZXIocm93Py5vdXRwdXRfdG9rZW5zID8/IDApLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IE51bWJlcihyb3c/LmNhY2hlX3JlYWRfdG9rZW5zID8/IDApLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBOdW1iZXIocm93Py5jYWNoZV9jcmVhdGlvbl90b2tlbnMgPz8gMCksXG4gICAgICBkdXJhdGlvbl9tczogTnVtYmVyKHJvdz8uZHVyYXRpb25fbXMgPz8gMCksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRTdGFsZVJ1bm5pbmdJZHModGhyZXNob2xkTXM6IG51bWJlciwgbGltaXQ6IG51bWJlciA9IDEwKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgY29uc3QgdGhyZXNob2xkID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIHRocmVzaG9sZE1zKTtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgZGIoXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoXCJpZFwiKVxuICAgICAgLndoZXJlKFwic3RhdHVzXCIsIFwicnVubmluZ1wiKVxuICAgICAgLndoZXJlKFwiY3JlYXRlZF9hdFwiLCBcIjxcIiwgdGhyZXNob2xkKVxuICAgICAgLmxpbWl0KGxpbWl0KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHI6IHsgaWQ6IG51bWJlciB9KSA9PiByLmlkKTtcbiAgfVxuXG4gIGFzeW5jIGdldE5leHRTdGVwSW5kZXgocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgY29uc3QgW3Jvd10gPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAubWF4KFwic3RlcF9pbmRleCBhcyBtYXhTdGVwXCIpO1xuICAgIHJldHVybiAoKHJvdyBhcyB7IG1heFN0ZXA6IG51bWJlciB8IG51bGwgfSk/Lm1heFN0ZXAgPz8gLTEpICsgMTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlVG9vbENhbGwoXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdG9vbENhbGxJZDogc3RyaW5nLFxuICAgIHBhcmFtczogeyB0b29sX3Jlc3VsdD86IHN0cmluZzsgdG9vbF9kdXJhdGlvbl9tcz86IG51bWJlcjsgZXJyb3I/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHRyeFxuICAgICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLndoZXJlKFwidG9vbF9jYWxsX2lkXCIsIHRvb2xDYWxsSWQpXG4gICAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgICAgLnVwZGF0ZSh7XG4gICAgICAgICAgLi4uKHBhcmFtcy50b29sX3Jlc3VsdCAhPT0gdW5kZWZpbmVkID8geyB0b29sX3Jlc3VsdDogcGFyYW1zLnRvb2xfcmVzdWx0IH0gOiB7fSksXG4gICAgICAgICAgLi4uKHBhcmFtcy50b29sX2R1cmF0aW9uX21zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8geyB0b29sX2R1cmF0aW9uX21zOiBwYXJhbXMudG9vbF9kdXJhdGlvbl9tcyB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLmVycm9yICE9PSB1bmRlZmluZWQgPyB7IGVycm9yOiBwYXJhbXMuZXJyb3IgfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBmaW5kTWFueeuKlCBzdWJzZXQg7KCE7LK0IOy7rOufvCh0ZXh0IO2PrO2VqCnsnYQg7Y6Y7LmY7ZW07IScIGFnZ3JlZ2F0ZeyXlCDrhIjrrLQg66y06rGw7JuAIOKGkiByYXcgc3VtIOyCrOyaqS5cbiAgYXN5bmMgdG90YWxDb3N0KHBhcmFtczogeyB0b2tlbl9uYW1lPzogc3RyaW5nIH0gPSB7fSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgcWIgPSB0aGlzLmdldERCKFwiclwiKShcInJlcXVlc3RfbG9nc1wiKTtcbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwidG9rZW5fbmFtZVwiLCBwYXJhbXMudG9rZW5fbmFtZSk7XG4gICAgfVxuICAgIC8vIOq4sOyhtCBjb3N0X3VzZCDsl5DripQg6rO86rGwIEFudGhyb3BpYyBjYWNoZSDqs4TsgrAg67KE6re466GcIOydjOyImOqwgCDsoIDsnqXrkJwgcm93IOqwgCDsnojsnYQg7IiYIOyeiOuLpC5cbiAgICAvLyDtmZTrqbQg7KeR6rOE64qUIOyggOyepeqwkiBzdW0g7J20IOyVhOuLiOudvCDtmITsnqwg6rOE7IKw7Iud7Jy866GcIHVzYWdlIOulvCDsnqzqs4TsgrDtlbQg6rO86rGwIOuhnOq3uOuPhCDsponsi5wg67O07KCV7ZWc64ukLlxuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcWIuc2VsZWN0KFxuICAgICAgXCJtb2RlbF9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjb3N0X3VzZFwiLFxuICAgICkpIGFzIEFycmF5PHtcbiAgICAgIG1vZGVsX25hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIG91dHB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNvc3RfdXNkOiBudW1iZXIgfCBudWxsO1xuICAgIH0+O1xuXG4gICAgcmV0dXJuIHJvd3MucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gICAgICBpZiAoIXVzYWdlLm1vZGVsKSByZXR1cm4gc3VtICsgTWF0aC5tYXgocm93LmNvc3RfdXNkID8/IDAsIDApIC8gTUlDUk9fVVNEO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3VtICtcbiAgICAgICAgY2FsY3VsYXRlQ29zdFVzZCh1c2FnZS5tb2RlbCwge1xuICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RQcm9qZWN0TmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmRpc3RpbmN0KFwicHJvamVjdF9uYW1lXCIpXG4gICAgICAud2hlcmUoXCJwcm9qZWN0X25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJwcm9qZWN0X25hbWVcIiwgXCJhc2NcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBwcm9qZWN0X25hbWU6IFwicHJvamVjdF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIucHJvamVjdF9uYW1lISk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgZGVsKGlkczogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cnhcbiAgICAgICAgLnRhYmxlKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiLCBpZHMpXG4gICAgICAgIC5kZWxldGUoKTtcbiAgICAgIHJldHVybiB0cngudGFibGUoXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBpZHMpLmRlbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkcy5sZW5ndGg7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dNb2RlbCA9IG5ldyBSZXF1ZXN0TG9nTW9kZWxDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWlCQSxNQUFhLFlBQVk7QUFZekIsU0FBUyxvQkFBb0IsS0FBcUU7QUFDaEcsUUFDRSxJQUFJLFlBQVksV0FBVyxhQUFhLEtBQUssUUFDN0MsSUFBSSxZQUFZLFdBQVcsVUFBVSxLQUFLLFFBQzFDLElBQUksWUFBWSxXQUFXLG9CQUFvQixLQUFLOztBQUl4RCxTQUFTLG1CQUFtQixXQUEyQjtBQUNyRCxRQUFPLFVBQVUsU0FBUyxJQUFJLEdBQUcsVUFBVSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUk7O0FBR2pFLFNBQVMsdUJBQXVCLEtBTTlCO0NBQ0EsTUFBTSxZQUFZLElBQUk7Q0FDdEIsTUFBTSxnQkFBZ0IsSUFBSTtDQUMxQixNQUFNLGNBQWMsSUFBSTtDQUN4QixNQUFNLDRCQUNKLG9CQUFvQixJQUFJLElBQUksY0FBYyxZQUFZO0FBQ3hELFFBQU87RUFDTCxPQUFPLElBQUksYUFBYSxtQkFBbUIsSUFBSSxXQUFXLEdBQUc7RUFDN0QsYUFBYSw0QkFBNEIsY0FBYyxZQUFZLGdCQUFnQjtFQUNuRixjQUFjLElBQUk7RUFDbEIsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjs7QUFHSCxTQUFTLDRCQUEwRCxLQUFXO0NBQzVFLE1BQU0sUUFBUSx1QkFBdUIsSUFBSTtBQUN6QyxLQUFJLE1BQU0sZ0JBQWdCLElBQUksYUFBYyxRQUFPO0NBQ25ELE1BQU0sYUFBYTtFQUFFLEdBQUc7RUFBSyxjQUFjLE1BQU07RUFBYTtBQUM5RCxLQUFJ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
|
|
313
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zIH0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5cbnR5cGUgUmVxdWVzdExvZ1VzYWdlUm93ID0ge1xuICB0b2tlbl9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGlzQW50aHJvcGljVXNhZ2VSb3cocm93OiBQaWNrPFJlcXVlc3RMb2dVc2FnZVJvdywgXCJ0b2tlbl9uYW1lXCIgfCBcIm1vZGVsX25hbWVcIj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByb3cudG9rZW5fbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImNsYXVkZS1cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9jbGF1ZGUtXCIpID09PSB0cnVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbE1vZGVsTmFtZShtb2RlbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbE5hbWUuaW5jbHVkZXMoXCIvXCIpID8gbW9kZWxOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSEgOiBtb2RlbE5hbWU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93OiBSZXF1ZXN0TG9nVXNhZ2VSb3cpOiB7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVkSW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbn0ge1xuICBjb25zdCBjYWNoZVJlYWQgPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb24gPSByb3cuY2FjaGVfY3JlYXRpb25fdG9rZW5zO1xuICBjb25zdCBzdG9yZWRJbnB1dCA9IHJvdy5pbnB1dF90b2tlbnM7XG4gIGNvbnN0IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPVxuICAgIGlzQW50aHJvcGljVXNhZ2VSb3cocm93KSAmJiBzdG9yZWRJbnB1dCA8IGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb247XG4gIHJldHVybiB7XG4gICAgbW9kZWw6IHJvdy5tb2RlbF9uYW1lID8gY2Fub25pY2FsTW9kZWxOYW1lKHJvdy5tb2RlbF9uYW1lKSA6IG51bGwsXG4gICAgaW5wdXRUb2tlbnM6IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPyBzdG9yZWRJbnB1dCArIGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb24gOiBzdG9yZWRJbnB1dCxcbiAgICBvdXRwdXRUb2tlbnM6IHJvdy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiBjYWNoZVJlYWQsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBjYWNoZUNyZWF0aW9uLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3c8VCBleHRlbmRzIFJlcXVlc3RMb2dVc2FnZVJvdz4ocm93OiBUKTogVCB7XG4gIC8vIOyDiCByb3cg64qUIOuLueyLnOydmCBwcm92aWRlci/qsIDqsqntkZwg67mE7Jqp7J2EIO2ZleyglSDsoIDsnqXtlZzri6QuIO2YhOyerCDqsIDqsqntkZzroZwg642u7Ja07JOw7KeAIOyViuuKlOuLpC5cbiAgaWYgKHJvdy5jb3N0X3NvdXJjZSkgcmV0dXJuIHJvdztcbiAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gIGlmICh1c2FnZS5pbnB1dFRva2VucyA9PT0gcm93LmlucHV0X3Rva2VucykgcmV0dXJuIHJvdztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93LCBpbnB1dF90b2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zIH07XG4gIGlmICh1c2FnZS5tb2RlbCkge1xuICAgIG5vcm1hbGl6ZWQuY29zdF91c2QgPSBNYXRoLnJvdW5kKGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHVzYWdlKSAqIE1JQ1JPX1VTRCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImlkLWRlc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aGF1c3RpdmUocGFyYW1zLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICBpc19pbWFnZV9nZW5lcmF0aW9uPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IHBhcmFtcy5tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsi53rs4QoUjEzKS4gcnVuIOqyveuhnCh0b29scytpbWFnZSDsobDtlakp64+EIGF1dG8g6rK966Gc7JmAIOuPmeydvO2VmOqyjCDrp4jtgrkuXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBwYXJhbXMuaXNfaW1hZ2VfZ2VuZXJhdGlvbiA/PyBmYWxzZSxcbiAgICAgIC4uLihwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkID8geyBoaXN0b3J5OiBwYXJhbXMuaGlzdG9yeSBhcyB7IHR5cGU6IHN0cmluZyB9W10gfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQ6IG51bWJlciwgc3RlcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiLCB7IHJlcXVlc3RfbG9nX2lkOiByZXF1ZXN0TG9nSWQsIC4uLnN0ZXAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKTtcbiAgICAgIGlmIChzdGVwLnR5cGUgPT09IFwidG9vbF9jYWxsXCIpIHtcbiAgICAgICAgYXdhaXQgdHJ4LmZyb20oXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpLmluY3JlbWVudChcInRvb2xfY2FsbF9jb3VudFwiLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHBhcmFtczoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICByZXNwb25zZT86IHN0cmluZztcbiAgICAgIHRva2VuX25hbWU/OiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBvdXRwdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfcmVhZF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGR1cmF0aW9uX21zPzogbnVtYmVyO1xuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgICBmYWxsYmFja19jb3VudD86IG51bWJlciB8IG51bGw7XG4gICAgICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gICAgICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgICBpbWFnZV9jb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gICAgICBpbWFnZV9jb3N0X21ldGhvZD86IHN0cmluZyB8IG51bGw7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICAgIFwibW9kZWxfbmFtZVwiLFxuICAgICAgXCJmYWxsYmFja19jb3VudFwiLFxuICAgICAgXCJjb3N0X3VzZFwiLFxuICAgICAgXCJjb3N0X3NvdXJjZVwiLFxuICAgICAgXCJlcnJvcl9tZXNzYWdlXCIsXG4gICAgICBcInRvb2xfY2FsbF9jb3VudFwiLFxuICAgICAgXCJpbWFnZV9jb3N0X3VzZFwiLFxuICAgICAgXCJpbWFnZV9jb3N0X21ldGhvZFwiLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRzKSB7XG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkgdXBkYXRlW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQpIHVwZGF0ZS5oaXN0b3J5ID0gcGFyYW1zLmhpc3Rvcnk7XG4gICAgdXBkYXRlLnR0ZnRfbXMgPSAoYXdhaXQgdGhpcy5maXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkKSkgPz8gMDtcblxuICAgIC8vIOyEnOuyhCBydW4g6rK966Gc64qUIHN0ZXAg7JeQ7IScIO2Zleygle2VnCBleGFjdCBjb3N0IOulvCDrhJjquLTri6QuIOyZuOu2gC9sZWdhY3kgY2FsbGVyIOqwgCDruYTsmqnsnYRcbiAgICAvLyDsg53rnrXtlZwg6rK97Jqw7JeQ66eMIOyggOyepeuQnCDrqqjrjbgrdXNhZ2Ug66GcIOqzhOyCsO2VnOuLpC5cbiAgICBpZiAoXG4gICAgICBwYXJhbXMuY29zdF91c2QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMub3V0cHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJyXCIpO1xuICAgICAgY29uc3QgW3Jvd10gPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgICAuc2VsZWN0KFwibW9kZWxfbmFtZVwiKVxuICAgICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC5saW1pdCgxKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1vZGVsTmFtZSA9IHBhcmFtcy5tb2RlbF9uYW1lID8/IHJvdz8ubW9kZWxfbmFtZTtcbiAgICAgIGlmIChlZmZlY3RpdmVNb2RlbE5hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxNb2RlbE5hbWUoZWZmZWN0aXZlTW9kZWxOYW1lKTtcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHtcbiAgICAgICAgICB0b2tlbl9uYW1lOiBwYXJhbXMudG9rZW5fbmFtZSxcbiAgICAgICAgICBtb2RlbF9uYW1lOiBlZmZlY3RpdmVNb2RlbE5hbWUsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiBwYXJhbXMuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHBhcmFtcy5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBwYXJhbXMuY2FjaGVfcmVhZF90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICAgIH0pICogMV8wMDBfMDAwLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGUuY29zdF9zb3VyY2UgPSBcInByaWNpbmdfdGFibGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHVwZGF0ZSk7XG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcInJcIik7XG4gICAgY29uc3QgW3Jvd10gPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFwidHRmdF9tc1wiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmVOb3ROdWxsKFwidHRmdF9tc1wiKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAubGltaXQoMSk7XG4gICAgcmV0dXJuIHJvdz8udHRmdF9tcyA9PT0gbnVsbCB8fCByb3c/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIocm93LnR0ZnRfbXMpO1xuICB9XG5cbiAgYXN5bmMgYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyO1xuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nO1xuICAgIG1vZGVsX25hbWU/OiBzdHJpbmc7XG4gICAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgICBjb3N0X3VzZDogbnVtYmVyO1xuICAgIGNvc3Rfc291cmNlPzogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCByb3dzID0gKGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICAgIFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICAgICAgXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgICAgXCJmYWxsYmFja19jb3VudFwiLFxuICAgICAgICBcImNvc3RfdXNkXCIsXG4gICAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKSkgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gICAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICAgIHJvd3MucmVkdWNlKCh0b3RhbCwgcm93KSA9PiB0b3RhbCArIE51bWJlcihyb3dbZmllbGRdID8/IDApLCAwKTtcbiAgICBjb25zdCBvcHRpb25hbFN1bSA9IChmaWVsZDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+XG4gICAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb2xsYXBzZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICByb3dzXG4gICAgICAgICAgICAubWFwKChyb3cpID0+IHJvd1tmaWVsZF0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc1swXSA6IFwibWl4ZWRcIjtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dF90b2tlbnM6IHN1bShcImlucHV0X3Rva2Vuc1wiKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHN1bShcIm91dHB1dF90b2tlbnNcIiksXG4gICAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHN1bShcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogb3B0aW9uYWxTdW0oXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIiksXG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgICAgZHVyYXRpb25fbXM6IHN1bShcImR1cmF0aW9uX21zXCIpLFxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IGNvbGxhcHNlKFwicmVxdWVzdGVkX21vZGVsX25hbWVcIiksXG4gICAgICBtb2RlbF9uYW1lOiBjb2xsYXBzZShcIm1vZGVsX25hbWVcIiksXG4gICAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgICBjb3N0X3VzZDogc3VtKFwiY29zdF91c2RcIiksXG4gICAgICBjb3N0X3NvdXJjZTogY29sbGFwc2UoXCJjb3N0X3NvdXJjZVwiKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlUnVubmluZ0lkcyh0aHJlc2hvbGRNczogbnVtYmVyLCBsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkYihcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdChcImlkXCIpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgocjogeyBpZDogbnVtYmVyIH0pID0+IHIuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TmV4dFN0ZXBJbmRleChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBbcm93XSA9IGF3YWl0IGRiKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5tYXgoXCJzdGVwX2luZGV4IGFzIG1heFN0ZXBcIik7XG4gICAgcmV0dXJuICgocm93IGFzIHsgbWF4U3RlcDogbnVtYmVyIHwgbnVsbCB9KT8ubWF4U3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVUb29sQ2FsbChcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IHRvb2xfcmVzdWx0Pzogc3RyaW5nOyB0b29sX2R1cmF0aW9uX21zPzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdHJ4XG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgdG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHtcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfcmVzdWx0ICE9PSB1bmRlZmluZWQgPyB7IHRvb2xfcmVzdWx0OiBwYXJhbXMudG9vbF9yZXN1bHQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocGFyYW1zLnRvb2xfZHVyYXRpb25fbXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHRvb2xfZHVyYXRpb25fbXM6IHBhcmFtcy50b29sX2R1cmF0aW9uX21zIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihwYXJhbXMuZXJyb3IgIT09IHVuZGVmaW5lZCA/IHsgZXJyb3I6IHBhcmFtcy5lcnJvciB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU29uYW11IGZpbmRNYW5564qUIHN1YnNldCDsoITssrQg7Lus65+8KHRleHQg7Y+s7ZWoKeydhCDtjpjsuZjtlbTshJwgYWdncmVnYXRl7JeUIOuEiOustCDrrLTqsbDsm4Ag4oaSIHJhdyBzdW0g7IKs7JqpLlxuICBhc3luYyB0b3RhbENvc3QocGFyYW1zOiB7IHRva2VuX25hbWU/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxYiA9IHRoaXMuZ2V0REIoXCJyXCIpKFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJ0b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG4gICAgLy8g6riw7KG0IGNvc3RfdXNkIOyXkOuKlCDqs7zqsbAgQW50aHJvcGljIGNhY2hlIOqzhOyCsCDrsoTqt7jroZwg7J2M7IiY6rCAIOyggOyepeuQnCByb3cg6rCAIOyeiOydhCDsiJgg7J6I64ukLlxuICAgIC8vIO2ZlOuptCDsp5Hqs4TripQg7KCA7J6l6rCSIHN1bSDsnbQg7JWE64uI6528IO2YhOyerCDqs4TsgrDsi53snLzroZwgdXNhZ2Ug66W8IOyerOqzhOyCsO2VtCDqs7zqsbAg66Gc6re464+EIOymieyLnCDrs7TsoJXtlZzri6QuXG4gICAgY29uc3Qgcm93cyA9IChhd2FpdCBxYi5zZWxlY3QoXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICApKSBhcyBBcnJheTx7XG4gICAgICBtb2RlbF9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IG51bWJlciB8IG51bGw7XG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG51bWJlciB8IG51bGw7XG4gICAgICBjb3N0X3VzZDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3Rfc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIH0+O1xuXG4gICAgcmV0dXJuIHJvd3MucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgLy8gY29zdF9zb3VyY2Ug6rCAIOyeiOycvOuptCDsg4gg6rOE7JW97Jy866GcIO2ZleyglSDsoIDsnqXrkJwg6rCS7J2064ukLiDtlITroZzrqqjshZgv6rCA6rKpIOuzgOqyvSDsnbTtm4Tsl5Drj4RcbiAgICAgIC8vIOuLueyLnCDruYTsmqnsnYQg7Jyg7KeA7ZWc64ukLiBOVUxM7J24IGxlZ2FjeSByb3cg66eMIO2YhOyerCDqsIDqsqntkZzroZwg67O07KCV7ZWc64ukLlxuICAgICAgaWYgKHJvdy5jb3N0X3NvdXJjZSAmJiByb3cuY29zdF91c2QgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1bSArIE1hdGgubWF4KHJvdy5jb3N0X3VzZCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICB9XG4gICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93KTtcbiAgICAgIGlmICghdXNhZ2UubW9kZWwpIHJldHVybiBzdW0gKyBNYXRoLm1heChyb3cuY29zdF91c2QgPz8gMCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdW0gK1xuICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB7XG4gICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0UHJvamVjdE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcInByb2plY3RfbmFtZVwiKVxuICAgICAgLndoZXJlKFwicHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwicHJvamVjdF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcHJvamVjdF9uYW1lOiBcInByb2plY3RfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLnByb2plY3RfbmFtZSEpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGRlbChpZHM6IG51bWJlcltdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4XG4gICAgICAgIC50YWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZUluKFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIiwgaWRzKVxuICAgICAgICAuZGVsZXRlKCk7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nTW9kZWwgPSBuZXcgUmVxdWVzdExvZ01vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFpQkEsTUFBYSxZQUFZO0FBZXpCLFNBQVMsb0JBQW9CLEtBQXFFO0FBQ2hHLFFBQ0UsSUFBSSxZQUFZLFdBQVcsYUFBYSxLQUFLLFFBQzdDLElBQUksWUFBWSxXQUFXLFVBQVUsS0FBSyxRQUMxQyxJQUFJLFlBQVksV0FBVyxvQkFBb0IsS0FBSzs7QUFJeEQsU0FBUyxtQkFBbUIsV0FBMkI7QUFDckQsUUFBTyxVQUFVLFNBQVMsSUFBSSxHQUFHLFVBQVUsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFJOztBQUdq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
|
|
@@ -6,10 +6,17 @@ const RequestLogStepSaveParams = RequestLogStepBaseSchema.partial({
|
|
|
6
6
|
id: true,
|
|
7
7
|
created_at: true,
|
|
8
8
|
request_log_id: true,
|
|
9
|
+
model_name: true,
|
|
10
|
+
requested_model_name: true,
|
|
11
|
+
fallback_count: true,
|
|
9
12
|
input_tokens: true,
|
|
10
13
|
output_tokens: true,
|
|
11
14
|
cache_read_tokens: true,
|
|
12
15
|
cache_creation_tokens: true,
|
|
16
|
+
cache_creation_5m_tokens: true,
|
|
17
|
+
cache_creation_1h_tokens: true,
|
|
18
|
+
cost_usd: true,
|
|
19
|
+
cost_source: true,
|
|
13
20
|
duration_ms: true,
|
|
14
21
|
finish_reason: true,
|
|
15
22
|
reasoning_text: true,
|
|
@@ -25,4 +32,4 @@ const RequestLogStepSaveParams = RequestLogStepBaseSchema.partial({
|
|
|
25
32
|
//#endregion
|
|
26
33
|
export { RequestLogStepListParams, RequestLogStepSaveParams };
|
|
27
34
|
|
|
28
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2ctc3RlcC50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcmVxdWVzdC1sb2ctc3RlcC9yZXF1ZXN0LWxvZy1zdGVwLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgUmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hLCBSZXF1ZXN0TG9nU3RlcEJhc2VMaXN0UGFyYW1zIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcblxuLy8gUmVxdWVzdExvZ1N0ZXAgLSBMaXN0UGFyYW1zXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBMaXN0UGFyYW1zID0gUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcztcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwTGlzdFBhcmFtcz47XG5cbi8vIFJlcXVlc3RMb2dTdGVwIC0gU2F2ZVBhcmFtc1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU2F2ZVBhcmFtcyA9IFJlcXVlc3RMb2dTdGVwQmFzZVNjaGVtYS5wYXJ0aWFsKHtcbiAgaWQ6IHRydWUsXG4gIGNyZWF0ZWRfYXQ6IHRydWUsXG4gIHJlcXVlc3RfbG9nX2lkOiB0cnVlLFxuICBtb2RlbF9uYW1lOiB0cnVlLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogdHJ1ZSxcbiAgZmFsbGJhY2tfY291bnQ6IHRydWUsXG4gIGlucHV0X3Rva2VuczogdHJ1ZSxcbiAgb3V0cHV0X3Rva2VuczogdHJ1ZSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHRydWUsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogdHJ1ZSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB0cnVlLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHRydWUsXG4gIGNvc3RfdXNkOiB0cnVlLFxuICBjb3N0X3NvdXJjZTogdHJ1ZSxcbiAgZHVyYXRpb25fbXM6IHRydWUsXG4gIGZpbmlzaF9yZWFzb246IHRydWUsXG4gIHJlYXNvbmluZ190ZXh0OiB0cnVlLFxuICByZWFzb25pbmdfdG9rZW5zOiB0cnVlLFxuICB0b29sX2NhbGxfaW5kZXg6IHRydWUsXG4gIHRvb2xfY2FsbF9pZDogdHJ1ZSxcbiAgdG9vbF9uYW1lOiB0cnVlLFxuICB0b29sX2FyZ3M6IHRydWUsXG4gIHRvb2xfcmVzdWx0OiB0cnVlLFxuICB0b29sX2R1cmF0aW9uX21zOiB0cnVlLFxuICBlcnJvcjogdHJ1ZSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTYXZlUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTYXZlUGFyYW1zPjtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsTUFBYSwyQkFBMkI7QUFJeEMsTUFBYSwyQkFBMkIseUJBQXlCLFFBQVE7Q0FDdkUsSUFBSTtDQUNKLFlBQVk7Q0FDWixnQkFBZ0I7Q0FDaEIsWUFBWTtDQUNaLHNCQUFzQjtDQUN0QixnQkFBZ0I7Q0FDaEIsY0FBYztDQUNkLGVBQWU7Q0FDZixtQkFBbUI7Q0FDbkIsdUJBQXVCO0NBQ3ZCLDBCQUEwQjtDQUMxQiwwQkFBMEI7Q0FDMUIsVUFBVTtDQUNWLGFBQWE7Q0FDYixhQUFhO0NBQ2IsZUFBZTtDQUNmLGdCQUFnQjtDQUNoQixrQkFBa0I7Q0FDbEIsaUJBQWlCO0NBQ2pCLGNBQWM7Q0FDZCxXQUFXO0NBQ1gsV0FBVztDQUNYLGFBQWE7Q0FDYixrQkFBa0I7Q0FDbEIsT0FBTztDQUNSLENBQUMifQ==
|