every-plugin 0.4.10 → 0.4.11
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/dist/build/rspack/index.cjs +5 -5
- package/dist/build/rspack/index.mjs +4 -4
- package/dist/{errors-CVnoPl9v.cjs → errors-BEsEPXKG.cjs} +2 -2
- package/dist/errors-CpYzD_-M.d.cts +38 -0
- package/dist/errors-D2-thHKG.d.mts +38 -0
- package/dist/{errors-D7keKf7a.mjs → errors-DnigICIv.mjs} +2 -2
- package/dist/errors.cjs +2 -2
- package/dist/errors.d.cts +1 -2
- package/dist/errors.d.mts +1 -2
- package/dist/errors.mjs +2 -2
- package/dist/{fetch-Cc95-7kM.cjs → fetch-CGzn1Uf7.cjs} +2 -2
- package/dist/{fetch-KLktuWuM.mjs → fetch-ycs0raYN.mjs} +2 -2
- package/dist/{index-matrPV4m.d.cts → index-BXfi8DqC.d.cts} +1 -1
- package/dist/{index-bwAhA9ca.d.mts → index-DvIxKA8K.d.mts} +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +3 -4
- package/dist/index.d.mts +3 -4
- package/dist/index.mjs +4 -4
- package/dist/{normalize-BLTyqFww.d.mts → normalize-BCE_FLe8.d.mts} +1 -1
- package/dist/{normalize-BW7kk8Lk.d.cts → normalize-Tt7I_RdD.d.cts} +1 -1
- package/dist/{package-J60H0cK8.cjs → package-C2Mp8qeD.cjs} +4 -3
- package/dist/{package-DVINhZcr.mjs → package-uEsV9Z-2.mjs} +4 -3
- package/dist/plugins-Cmsm3gW1.cjs +791 -0
- package/dist/plugins-hpi2GlaX.mjs +790 -0
- package/dist/runtime/index.cjs +2 -2
- package/dist/runtime/index.d.cts +3 -4
- package/dist/runtime/index.d.mts +3 -4
- package/dist/runtime/index.mjs +2 -2
- package/dist/runtime/services/normalize.d.cts +1 -1
- package/dist/runtime/services/normalize.d.mts +1 -1
- package/dist/{runtime-BShulKmh.mjs → runtime-BUQ0hy1J.mjs} +3 -3
- package/dist/{runtime-Yfumucan.cjs → runtime-LlP2xpdB.cjs} +3 -3
- package/dist/{standard-eUgUkWaf.cjs → standard-0wBehDUp.cjs} +1 -18
- package/dist/{standard-DaxKTFui.mjs → standard-CYaRay89.mjs} +2 -13
- package/dist/testing/index.cjs +2 -2
- package/dist/testing/index.d.cts +4 -5
- package/dist/testing/index.d.mts +4 -5
- package/dist/testing/index.mjs +2 -2
- package/dist/zod-BDDjyyHQ.mjs +10 -0
- package/dist/{zod-DYghWCz1.cjs → zod-CJY4vNLR.cjs} +2 -2
- package/dist/zod.cjs +4 -4
- package/dist/zod.d.cts +1 -2
- package/dist/zod.d.mts +1 -2
- package/dist/zod.mjs +2 -2
- package/package.json +3 -2
- package/dist/errors-Car4tFVP.d.mts +0 -75
- package/dist/errors-DKPPPYYT.d.cts +0 -75
- package/dist/openapi.DrTcell5-C6kyDyUK.mjs +0 -669
- package/dist/openapi.DrTcell5-DDf4D5V3.cjs +0 -687
- package/dist/plugins-C-7lh5gK.cjs +0 -128
- package/dist/plugins-Ps5Xxpk2.mjs +0 -128
- package/dist/zod-A7Pti5IV.d.cts +0 -4
- package/dist/zod-BVo51kgJ.mjs +0 -10
- package/dist/zod-D4CFw8d9.d.mts +0 -4
- package/dist/zod4-BXTBR1od.cjs +0 -318
- package/dist/zod4-VpXuwRO7.mjs +0 -317
package/dist/zod4-VpXuwRO7.mjs
DELETED
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
import { f as intercept, g as toArray } from "./standard-DaxKTFui.mjs";
|
|
2
|
-
import { n as ContentEncoding, r as Format } from "./openapi.DrTcell5-C6kyDyUK.mjs";
|
|
3
|
-
import { createRouterClient } from "@orpc/server";
|
|
4
|
-
import "@orpc/contract";
|
|
5
|
-
import { globalRegistry, registry } from "zod/v4/core";
|
|
6
|
-
|
|
7
|
-
//#region ../../node_modules/.bun/@orpc+json-schema@1.10.4/node_modules/@orpc/json-schema/dist/index.mjs
|
|
8
|
-
var JsonSchemaXNativeType = /* @__PURE__ */ ((JsonSchemaXNativeType2) => {
|
|
9
|
-
JsonSchemaXNativeType2["BigInt"] = "bigint";
|
|
10
|
-
JsonSchemaXNativeType2["RegExp"] = "regexp";
|
|
11
|
-
JsonSchemaXNativeType2["Date"] = "date";
|
|
12
|
-
JsonSchemaXNativeType2["Url"] = "url";
|
|
13
|
-
JsonSchemaXNativeType2["Set"] = "set";
|
|
14
|
-
JsonSchemaXNativeType2["Map"] = "map";
|
|
15
|
-
return JsonSchemaXNativeType2;
|
|
16
|
-
})(JsonSchemaXNativeType || {});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region ../../node_modules/.bun/@orpc+zod@1.10.4+b4e43a763b4e0453/node_modules/@orpc/zod/dist/zod4/index.mjs
|
|
20
|
-
const JSON_SCHEMA_REGISTRY = registry();
|
|
21
|
-
const JSON_SCHEMA_INPUT_REGISTRY = registry();
|
|
22
|
-
const JSON_SCHEMA_OUTPUT_REGISTRY = registry();
|
|
23
|
-
var ZodToJsonSchemaConverter = class {
|
|
24
|
-
maxLazyDepth;
|
|
25
|
-
maxStructureDepth;
|
|
26
|
-
anyJsonSchema;
|
|
27
|
-
unsupportedJsonSchema;
|
|
28
|
-
undefinedJsonSchema;
|
|
29
|
-
interceptors;
|
|
30
|
-
constructor(options = {}) {
|
|
31
|
-
this.maxLazyDepth = options.maxLazyDepth ?? 2;
|
|
32
|
-
this.maxStructureDepth = options.maxStructureDepth ?? 10;
|
|
33
|
-
this.anyJsonSchema = options.anyJsonSchema ?? {};
|
|
34
|
-
this.unsupportedJsonSchema = options.unsupportedJsonSchema ?? { not: {} };
|
|
35
|
-
this.undefinedJsonSchema = options.undefinedJsonSchema ?? { not: {} };
|
|
36
|
-
this.interceptors = options.interceptors ?? [];
|
|
37
|
-
}
|
|
38
|
-
condition(schema) {
|
|
39
|
-
return schema !== void 0 && schema["~standard"].vendor === "zod" && "_zod" in schema;
|
|
40
|
-
}
|
|
41
|
-
convert(schema, options) {
|
|
42
|
-
return this.#convert(schema, options, 0, 0);
|
|
43
|
-
}
|
|
44
|
-
#convert(schema, options, lazyDepth, structureDepth, isHandledCustomJSONSchema = false) {
|
|
45
|
-
return intercept(this.interceptors, {
|
|
46
|
-
schema,
|
|
47
|
-
options,
|
|
48
|
-
lazyDepth,
|
|
49
|
-
isHandledCustomJSONSchema
|
|
50
|
-
}, ({ schema: schema2, options: options2, lazyDepth: lazyDepth2, isHandledCustomJSONSchema: isHandledCustomJSONSchema2 }) => {
|
|
51
|
-
if (structureDepth > this.maxStructureDepth) return [false, this.anyJsonSchema];
|
|
52
|
-
if (!options2.minStructureDepthForRef || options2.minStructureDepthForRef <= structureDepth) {
|
|
53
|
-
const components = toArray(options2.components);
|
|
54
|
-
for (const component of components) if (component.schema === schema2 && component.allowedStrategies.includes(options2.strategy)) return [component.required, { $ref: component.ref }];
|
|
55
|
-
}
|
|
56
|
-
if (!isHandledCustomJSONSchema2) {
|
|
57
|
-
const customJSONSchema = this.#getCustomJsonSchema(schema2, options2);
|
|
58
|
-
if (customJSONSchema) {
|
|
59
|
-
const [required, json] = this.#convert(schema2, options2, lazyDepth2, structureDepth, true);
|
|
60
|
-
return [required, {
|
|
61
|
-
...json,
|
|
62
|
-
...customJSONSchema
|
|
63
|
-
}];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
switch (schema2._zod.def.type) {
|
|
67
|
-
case "string": {
|
|
68
|
-
const string = schema2;
|
|
69
|
-
const json = { type: "string" };
|
|
70
|
-
const { minimum, maximum, format, patterns, contentEncoding } = string._zod.bag;
|
|
71
|
-
if (typeof minimum === "number") json.minLength = minimum;
|
|
72
|
-
if (typeof maximum === "number") json.maxLength = maximum;
|
|
73
|
-
if (typeof contentEncoding === "string") json.contentEncoding = this.#handleContentEncoding(contentEncoding);
|
|
74
|
-
if (typeof format === "string" && format !== "regex" && json.contentEncoding === void 0) json.format = this.#handleStringFormat(format);
|
|
75
|
-
if (patterns instanceof Set && json.contentEncoding === void 0 && json.format === void 0) for (const pattern of patterns) if (json.pattern === void 0) json.pattern = pattern.source;
|
|
76
|
-
else {
|
|
77
|
-
json.allOf ??= [];
|
|
78
|
-
json.allOf.push({ pattern: pattern.source });
|
|
79
|
-
}
|
|
80
|
-
if (format === "jwt" && json.contentEncoding === void 0 && json.format === void 0 && json.pattern === void 0) json.pattern = /^[\w-]+\.[\w-]+\.[\w-]+$/.source;
|
|
81
|
-
return [true, json];
|
|
82
|
-
}
|
|
83
|
-
case "number": {
|
|
84
|
-
const number = schema2;
|
|
85
|
-
const json = { type: "number" };
|
|
86
|
-
const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = number._zod.bag;
|
|
87
|
-
if (typeof format === "string" && format?.includes("int")) json.type = "integer";
|
|
88
|
-
if (typeof minimum === "number") json.minimum = minimum;
|
|
89
|
-
if (typeof maximum === "number") json.maximum = maximum;
|
|
90
|
-
if (typeof exclusiveMinimum === "number") json.exclusiveMinimum = exclusiveMinimum;
|
|
91
|
-
if (typeof exclusiveMaximum === "number") json.exclusiveMaximum = exclusiveMaximum;
|
|
92
|
-
if (typeof multipleOf === "number") json.multipleOf = multipleOf;
|
|
93
|
-
return [true, json];
|
|
94
|
-
}
|
|
95
|
-
case "boolean": return [true, { type: "boolean" }];
|
|
96
|
-
case "bigint": return [true, {
|
|
97
|
-
"type": "string",
|
|
98
|
-
"pattern": "^-?[0-9]+$",
|
|
99
|
-
"x-native-type": JsonSchemaXNativeType.BigInt
|
|
100
|
-
}];
|
|
101
|
-
case "date": return [true, {
|
|
102
|
-
"type": "string",
|
|
103
|
-
"format": Format.DateTime,
|
|
104
|
-
"x-native-type": JsonSchemaXNativeType.Date
|
|
105
|
-
}];
|
|
106
|
-
case "null": return [true, { type: "null" }];
|
|
107
|
-
case "undefined":
|
|
108
|
-
case "void": return [false, this.undefinedJsonSchema];
|
|
109
|
-
case "any": return [false, this.anyJsonSchema];
|
|
110
|
-
case "unknown": return [false, this.anyJsonSchema];
|
|
111
|
-
case "never": return [true, this.unsupportedJsonSchema];
|
|
112
|
-
case "array": {
|
|
113
|
-
const array = schema2;
|
|
114
|
-
const json = { type: "array" };
|
|
115
|
-
const { minimum, maximum } = array._zod.bag;
|
|
116
|
-
if (typeof minimum === "number") json.minItems = minimum;
|
|
117
|
-
if (typeof maximum === "number") json.maxItems = maximum;
|
|
118
|
-
json.items = this.#handleArrayItemJsonSchema(this.#convert(array._zod.def.element, options2, lazyDepth2, structureDepth + 1), options2);
|
|
119
|
-
return [true, json];
|
|
120
|
-
}
|
|
121
|
-
case "object": {
|
|
122
|
-
const object = schema2;
|
|
123
|
-
const json = { type: "object" };
|
|
124
|
-
for (const [key, value] of Object.entries(object._zod.def.shape)) {
|
|
125
|
-
const [itemRequired, itemJson] = this.#convert(value, options2, lazyDepth2, structureDepth + 1);
|
|
126
|
-
json.properties ??= {};
|
|
127
|
-
json.properties[key] = itemJson;
|
|
128
|
-
if (itemRequired) {
|
|
129
|
-
json.required ??= [];
|
|
130
|
-
json.required.push(key);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (object._zod.def.catchall) if (object._zod.def.catchall._zod.def.type === "never") json.additionalProperties = false;
|
|
134
|
-
else {
|
|
135
|
-
const [_, addJson] = this.#convert(object._zod.def.catchall, options2, lazyDepth2, structureDepth + 1);
|
|
136
|
-
json.additionalProperties = addJson;
|
|
137
|
-
}
|
|
138
|
-
return [true, json];
|
|
139
|
-
}
|
|
140
|
-
case "union": {
|
|
141
|
-
const union = schema2;
|
|
142
|
-
const anyOf = [];
|
|
143
|
-
let required = true;
|
|
144
|
-
for (const item of union._zod.def.options) {
|
|
145
|
-
const [itemRequired, itemJson] = this.#convert(item, options2, lazyDepth2, structureDepth + 1);
|
|
146
|
-
if (!itemRequired) required = false;
|
|
147
|
-
if (options2.strategy === "input") {
|
|
148
|
-
if (itemJson !== this.undefinedJsonSchema && itemJson !== this.unsupportedJsonSchema) anyOf.push(itemJson);
|
|
149
|
-
} else if (itemJson !== this.undefinedJsonSchema) anyOf.push(itemJson);
|
|
150
|
-
}
|
|
151
|
-
return [required, { anyOf }];
|
|
152
|
-
}
|
|
153
|
-
case "intersection": {
|
|
154
|
-
const intersection = schema2;
|
|
155
|
-
const json = { allOf: [] };
|
|
156
|
-
let required = false;
|
|
157
|
-
for (const item of [intersection._zod.def.left, intersection._zod.def.right]) {
|
|
158
|
-
const [itemRequired, itemJson] = this.#convert(item, options2, lazyDepth2, structureDepth + 1);
|
|
159
|
-
json.allOf.push(itemJson);
|
|
160
|
-
if (itemRequired) required = true;
|
|
161
|
-
}
|
|
162
|
-
return [required, json];
|
|
163
|
-
}
|
|
164
|
-
case "tuple": {
|
|
165
|
-
const tuple = schema2;
|
|
166
|
-
const json = {
|
|
167
|
-
type: "array",
|
|
168
|
-
prefixItems: []
|
|
169
|
-
};
|
|
170
|
-
for (const item of tuple._zod.def.items) json.prefixItems.push(this.#handleArrayItemJsonSchema(this.#convert(item, options2, lazyDepth2, structureDepth + 1), options2));
|
|
171
|
-
if (tuple._zod.def.rest) json.items = this.#handleArrayItemJsonSchema(this.#convert(tuple._zod.def.rest, options2, lazyDepth2, structureDepth + 1), options2);
|
|
172
|
-
const { minimum, maximum } = tuple._zod.bag;
|
|
173
|
-
if (typeof minimum === "number") json.minItems = minimum;
|
|
174
|
-
if (typeof maximum === "number") json.maxItems = maximum;
|
|
175
|
-
return [true, json];
|
|
176
|
-
}
|
|
177
|
-
case "record": {
|
|
178
|
-
const record = schema2;
|
|
179
|
-
const json = { type: "object" };
|
|
180
|
-
json.propertyNames = this.#convert(record._zod.def.keyType, options2, lazyDepth2, structureDepth + 1)[1];
|
|
181
|
-
json.additionalProperties = this.#convert(record._zod.def.valueType, options2, lazyDepth2, structureDepth + 1)[1];
|
|
182
|
-
return [true, json];
|
|
183
|
-
}
|
|
184
|
-
case "map": {
|
|
185
|
-
const map = schema2;
|
|
186
|
-
return [true, {
|
|
187
|
-
"type": "array",
|
|
188
|
-
"items": {
|
|
189
|
-
type: "array",
|
|
190
|
-
prefixItems: [this.#handleArrayItemJsonSchema(this.#convert(map._zod.def.keyType, options2, lazyDepth2, structureDepth + 1), options2), this.#handleArrayItemJsonSchema(this.#convert(map._zod.def.valueType, options2, lazyDepth2, structureDepth + 1), options2)],
|
|
191
|
-
maxItems: 2,
|
|
192
|
-
minItems: 2
|
|
193
|
-
},
|
|
194
|
-
"x-native-type": JsonSchemaXNativeType.Map
|
|
195
|
-
}];
|
|
196
|
-
}
|
|
197
|
-
case "set": {
|
|
198
|
-
const set = schema2;
|
|
199
|
-
return [true, {
|
|
200
|
-
"type": "array",
|
|
201
|
-
"uniqueItems": true,
|
|
202
|
-
"items": this.#handleArrayItemJsonSchema(this.#convert(set._zod.def.valueType, options2, lazyDepth2, structureDepth + 1), options2),
|
|
203
|
-
"x-native-type": JsonSchemaXNativeType.Set
|
|
204
|
-
}];
|
|
205
|
-
}
|
|
206
|
-
case "enum": {
|
|
207
|
-
const enum_ = schema2;
|
|
208
|
-
return [true, { enum: Object.values(enum_._zod.def.entries) }];
|
|
209
|
-
}
|
|
210
|
-
case "literal": {
|
|
211
|
-
const literal = schema2;
|
|
212
|
-
let required = true;
|
|
213
|
-
const values = /* @__PURE__ */ new Set();
|
|
214
|
-
for (const value of literal._zod.def.values) if (value === void 0) required = false;
|
|
215
|
-
else values.add(typeof value === "bigint" ? value.toString() : value);
|
|
216
|
-
const json = values.size === 0 ? this.undefinedJsonSchema : values.size === 1 ? { const: values.values().next().value } : { enum: Array.from(values) };
|
|
217
|
-
return [required, json];
|
|
218
|
-
}
|
|
219
|
-
case "file": {
|
|
220
|
-
const file = schema2;
|
|
221
|
-
const oneOf = [];
|
|
222
|
-
const { mime } = file._zod.bag;
|
|
223
|
-
if (mime === void 0 || Array.isArray(mime) && mime.every((m) => typeof m === "string")) for (const type of mime ?? ["*/*"]) oneOf.push({
|
|
224
|
-
type: "string",
|
|
225
|
-
contentMediaType: type
|
|
226
|
-
});
|
|
227
|
-
return [true, oneOf.length === 1 ? oneOf[0] : { anyOf: oneOf }];
|
|
228
|
-
}
|
|
229
|
-
case "transform": return [false, this.anyJsonSchema];
|
|
230
|
-
case "nullable": {
|
|
231
|
-
const nullable = schema2;
|
|
232
|
-
const [required, json] = this.#convert(nullable._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
233
|
-
return [required, { anyOf: [json, { type: "null" }] }];
|
|
234
|
-
}
|
|
235
|
-
case "nonoptional": {
|
|
236
|
-
const nonoptional = schema2;
|
|
237
|
-
const [, json] = this.#convert(nonoptional._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
238
|
-
return [true, json];
|
|
239
|
-
}
|
|
240
|
-
case "success": return [true, { type: "boolean" }];
|
|
241
|
-
case "default":
|
|
242
|
-
case "prefault": {
|
|
243
|
-
const default_ = schema2;
|
|
244
|
-
const [, json] = this.#convert(default_._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
245
|
-
return [false, {
|
|
246
|
-
...json,
|
|
247
|
-
default: default_._zod.def.defaultValue
|
|
248
|
-
}];
|
|
249
|
-
}
|
|
250
|
-
case "catch": {
|
|
251
|
-
const catch_ = schema2;
|
|
252
|
-
return this.#convert(catch_._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
253
|
-
}
|
|
254
|
-
case "nan": return [true, options2.strategy === "input" ? this.unsupportedJsonSchema : { type: "null" }];
|
|
255
|
-
case "pipe": {
|
|
256
|
-
const pipe = schema2;
|
|
257
|
-
return this.#convert(options2.strategy === "input" ? pipe._zod.def.in : pipe._zod.def.out, options2, lazyDepth2, structureDepth);
|
|
258
|
-
}
|
|
259
|
-
case "readonly": {
|
|
260
|
-
const readonly_ = schema2;
|
|
261
|
-
const [required, json] = this.#convert(readonly_._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
262
|
-
return [required, {
|
|
263
|
-
...json,
|
|
264
|
-
readOnly: true
|
|
265
|
-
}];
|
|
266
|
-
}
|
|
267
|
-
case "template_literal": return [true, {
|
|
268
|
-
type: "string",
|
|
269
|
-
pattern: schema2._zod.pattern.source
|
|
270
|
-
}];
|
|
271
|
-
case "optional": {
|
|
272
|
-
const optional = schema2;
|
|
273
|
-
const [, json] = this.#convert(optional._zod.def.innerType, options2, lazyDepth2, structureDepth);
|
|
274
|
-
return [false, json];
|
|
275
|
-
}
|
|
276
|
-
case "lazy": {
|
|
277
|
-
const lazy = schema2;
|
|
278
|
-
const currentLazyDepth = lazyDepth2 + 1;
|
|
279
|
-
if (currentLazyDepth > this.maxLazyDepth) return [false, this.anyJsonSchema];
|
|
280
|
-
return this.#convert(lazy._zod.def.getter(), options2, currentLazyDepth, structureDepth);
|
|
281
|
-
}
|
|
282
|
-
default:
|
|
283
|
-
schema2._zod.def.type;
|
|
284
|
-
return [true, this.unsupportedJsonSchema];
|
|
285
|
-
}
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
#getCustomJsonSchema(schema, options) {
|
|
289
|
-
if (options.strategy === "input" && JSON_SCHEMA_INPUT_REGISTRY.has(schema)) return JSON_SCHEMA_INPUT_REGISTRY.get(schema);
|
|
290
|
-
if (options.strategy === "output" && JSON_SCHEMA_OUTPUT_REGISTRY.has(schema)) return JSON_SCHEMA_OUTPUT_REGISTRY.get(schema);
|
|
291
|
-
if (JSON_SCHEMA_REGISTRY.has(schema)) return JSON_SCHEMA_REGISTRY.get(schema);
|
|
292
|
-
const global = globalRegistry.get(schema);
|
|
293
|
-
if (global) return {
|
|
294
|
-
title: global.title,
|
|
295
|
-
description: global.description,
|
|
296
|
-
examples: Array.isArray(global.examples) ? global.examples : void 0
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
#handleArrayItemJsonSchema([required, schema], options) {
|
|
300
|
-
if (required || options.strategy === "input" || schema.default !== void 0) return schema;
|
|
301
|
-
if (schema === this.undefinedJsonSchema) return { type: "null" };
|
|
302
|
-
return { anyOf: [schema, { type: "null" }] };
|
|
303
|
-
}
|
|
304
|
-
#handleStringFormat(format) {
|
|
305
|
-
if (format === "guid") return Format.UUID;
|
|
306
|
-
if (format === "url") return Format.URI;
|
|
307
|
-
if (format === "datetime") return Format.DateTime;
|
|
308
|
-
return Object.values(Format).includes(format) ? format : void 0;
|
|
309
|
-
}
|
|
310
|
-
#handleContentEncoding(contentEncoding) {
|
|
311
|
-
return Object.values(ContentEncoding).includes(contentEncoding) ? contentEncoding : void 0;
|
|
312
|
-
}
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
//#endregion
|
|
316
|
-
export { JSON_SCHEMA_INPUT_REGISTRY, JSON_SCHEMA_OUTPUT_REGISTRY, JSON_SCHEMA_REGISTRY, ZodToJsonSchemaConverter };
|
|
317
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kNC1WcFh1d1JPNy5tanMiLCJuYW1lcyI6WyIjY29udmVydCIsIiNnZXRDdXN0b21Kc29uU2NoZW1hIiwiI2hhbmRsZUNvbnRlbnRFbmNvZGluZyIsIiNoYW5kbGVTdHJpbmdGb3JtYXQiLCJKU09OU2NoZW1hRm9ybWF0IiwiI2hhbmRsZUFycmF5SXRlbUpzb25TY2hlbWEiLCJKU09OU2NoZW1hQ29udGVudEVuY29kaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9ycGMranNvbi1zY2hlbWFAMS4xMC40L25vZGVfbW9kdWxlcy9Ab3JwYy9qc29uLXNjaGVtYS9kaXN0L2luZGV4Lm1qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcnBjK3pvZEAxLjEwLjQrYjRlNDNhNzYzYjRlMDQ1My9ub2RlX21vZHVsZXMvQG9ycGMvem9kL2Rpc3Qvem9kNC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNPYmplY3QsIHRvQXJyYXksIGd1YXJkIH0gZnJvbSAnQG9ycGMvc2hhcmVkJztcbmltcG9ydCB7IENvbXBvc2l0ZVNjaGVtYUNvbnZlcnRlciB9IGZyb20gJ0BvcnBjL29wZW5hcGknO1xuXG52YXIgSnNvblNjaGVtYVhOYXRpdmVUeXBlID0gLyogQF9fUFVSRV9fICovICgoSnNvblNjaGVtYVhOYXRpdmVUeXBlMikgPT4ge1xuICBKc29uU2NoZW1hWE5hdGl2ZVR5cGUyW1wiQmlnSW50XCJdID0gXCJiaWdpbnRcIjtcbiAgSnNvblNjaGVtYVhOYXRpdmVUeXBlMltcIlJlZ0V4cFwiXSA9IFwicmVnZXhwXCI7XG4gIEpzb25TY2hlbWFYTmF0aXZlVHlwZTJbXCJEYXRlXCJdID0gXCJkYXRlXCI7XG4gIEpzb25TY2hlbWFYTmF0aXZlVHlwZTJbXCJVcmxcIl0gPSBcInVybFwiO1xuICBKc29uU2NoZW1hWE5hdGl2ZVR5cGUyW1wiU2V0XCJdID0gXCJzZXRcIjtcbiAgSnNvblNjaGVtYVhOYXRpdmVUeXBlMltcIk1hcFwiXSA9IFwibWFwXCI7XG4gIHJldHVybiBKc29uU2NoZW1hWE5hdGl2ZVR5cGUyO1xufSkoSnNvblNjaGVtYVhOYXRpdmVUeXBlIHx8IHt9KTtcblxuY29uc3QgRkxFWElCTEVfREFURV9GT1JNQVRfUkVHRVggPSAvXlteLV0rLVteLV0rLVteLV0rJC87XG5jbGFzcyBleHBlcmltZW50YWxfSnNvblNjaGVtYUNvZXJjZXIge1xuICBjb2VyY2Uoc2NoZW1hLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgWywgY29lcmNlZF0gPSB0aGlzLiNjb2VyY2Uoc2NoZW1hLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGNvZXJjZWQ7XG4gIH1cbiAgI2NvZXJjZShzY2hlbWEsIG9yaWdpbmFsVmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBbc2NoZW1hLCBvcmlnaW5hbFZhbHVlXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLnR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy4jY29lcmNlKHtcbiAgICAgICAgYW55T2Y6IHNjaGVtYS50eXBlLm1hcCgodHlwZSkgPT4gKHsgLi4uc2NoZW1hLCB0eXBlIH0pKVxuICAgICAgfSwgb3JpZ2luYWxWYWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGxldCBjb2VyY2VkID0gb3JpZ2luYWxWYWx1ZTtcbiAgICBsZXQgc2F0aXNmaWVkID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHNjaGVtYS4kcmVmID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCByZWZTY2hlbWEgPSBvcHRpb25zPy5jb21wb25lbnRzPy5bc2NoZW1hLiRyZWZdO1xuICAgICAgaWYgKHJlZlNjaGVtYSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IFtzdWJTYXRpc2ZpZWQsIHN1YkNvZXJjZWRdID0gdGhpcy4jY29lcmNlKHJlZlNjaGVtYSwgY29lcmNlZCwgb3B0aW9ucyk7XG4gICAgICAgIGNvZXJjZWQgPSBzdWJDb2VyY2VkO1xuICAgICAgICBzYXRpc2ZpZWQgPSBzdWJTYXRpc2ZpZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGVudW1WYWx1ZXMgPSBzY2hlbWEuY29uc3QgIT09IHZvaWQgMCA/IFtzY2hlbWEuY29uc3RdIDogc2NoZW1hLmVudW07XG4gICAgaWYgKGVudW1WYWx1ZXMgIT09IHZvaWQgMCAmJiAhZW51bVZhbHVlcy5pbmNsdWRlcyhjb2VyY2VkKSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IG51bWJlclZhbHVlID0gdGhpcy4jc3RyaW5nVG9OdW1iZXIoY29lcmNlZCk7XG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmluY2x1ZGVzKG51bWJlclZhbHVlKSkge1xuICAgICAgICAgIGNvZXJjZWQgPSBudW1iZXJWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBib29sZWFuVmFsdWUgPSB0aGlzLiNzdHJpbmdUb0Jvb2xlYW4oY29lcmNlZCk7XG4gICAgICAgICAgaWYgKGVudW1WYWx1ZXMuaW5jbHVkZXMoYm9vbGVhblZhbHVlKSkge1xuICAgICAgICAgICAgY29lcmNlZCA9IGJvb2xlYW5WYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOiB7XG4gICAgICAgICAgaWYgKGNvZXJjZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZWQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvZXJjZWQgPSB0aGlzLiNzdHJpbmdUb051bWJlcihjb2VyY2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImludGVnZXJcIjoge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29lcmNlZCA9IHRoaXMuI3N0cmluZ1RvSW50ZWdlcihjb2VyY2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvZXJjZWQpKSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjoge1xuICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29lcmNlZCA9IHRoaXMuI3N0cmluZ1RvQm9vbGVhbihjb2VyY2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeEl0ZW1TY2hlbWFzID0gXCJwcmVmaXhJdGVtc1wiIGluIHNjaGVtYSA/IHRvQXJyYXkoc2NoZW1hLnByZWZpeEl0ZW1zKSA6IEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSA/IHNjaGVtYS5pdGVtcyA6IFtdO1xuICAgICAgICAgICAgY29uc3QgaXRlbVNjaGVtYSA9IEFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSA/IHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMgOiBzY2hlbWEuaXRlbXM7XG4gICAgICAgICAgICBsZXQgc2hvdWxkVXNlQ29lcmNlZEl0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjb2VyY2VkSXRlbXMgPSBjb2VyY2VkLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWJTY2hlbWEgPSBwcmVmaXhJdGVtU2NoZW1hc1tpXSA/PyBpdGVtU2NoZW1hO1xuICAgICAgICAgICAgICBpZiAoc3ViU2NoZW1hID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBbc3ViU2F0aXNmaWVkLCBzdWJDb2VyY2VkXSA9IHRoaXMuI2NvZXJjZShzdWJTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICBpZiAoIXN1YlNhdGlzZmllZCkge1xuICAgICAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzdWJDb2VyY2VkICE9PSBpdGVtKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkVXNlQ29lcmNlZEl0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gc3ViQ29lcmNlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNvZXJjZWRJdGVtcy5sZW5ndGggPCBwcmVmaXhJdGVtU2NoZW1hcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlQ29lcmNlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgIGNvZXJjZWQgPSBjb2VyY2VkSXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2VyY2VkKSkge1xuICAgICAgICAgICAgY29lcmNlZCA9IHsgLi4uY29lcmNlZCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNPYmplY3QoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIGxldCBzaG91bGRVc2VDb2VyY2VkSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNvZXJjZWRJdGVtcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcGF0dGVyblByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgPz8ge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbbmV3IFJlZ0V4cChrZXkpLCB2YWx1ZV0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29lcmNlZCkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvZXJjZWRba2V5XTtcbiAgICAgICAgICAgICAgY29uc3Qgc3ViU2NoZW1hID0gc2NoZW1hLnByb3BlcnRpZXM/LltrZXldID8/IHBhdHRlcm5Qcm9wZXJ0aWVzLmZpbmQoKFtwYXR0ZXJuXSkgPT4gcGF0dGVybi50ZXN0KGtleSkpPy5bMV0gPz8gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCAmJiAhc2NoZW1hLnJlcXVpcmVkPy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29lcmNlZEl0ZW1zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJTY2hlbWEgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIGNvZXJjZWRJdGVtc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3N1YlNhdGlzZmllZCwgc3ViQ29lcmNlZF0gPSB0aGlzLiNjb2VyY2Uoc3ViU2NoZW1hLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29lcmNlZEl0ZW1zW2tleV0gPSBzdWJDb2VyY2VkO1xuICAgICAgICAgICAgICAgIGlmICghc3ViU2F0aXNmaWVkKSB7XG4gICAgICAgICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN1YkNvZXJjZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBzaG91bGRVc2VDb2VyY2VkSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZD8uc29tZSgoa2V5KSA9PiAhT2JqZWN0Lmhhc093bihjb2VyY2VkSXRlbXMsIGtleSkpKSB7XG4gICAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZFVzZUNvZXJjZWRJdGVtcykge1xuICAgICAgICAgICAgICBjb2VyY2VkID0gY29lcmNlZEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwieC1uYXRpdmUtdHlwZVwiIGluIHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hW1wieC1uYXRpdmUtdHlwZVwiXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgc3dpdGNoIChzY2hlbWFbXCJ4LW5hdGl2ZS10eXBlXCJdKSB7XG4gICAgICAgIGNhc2UgSnNvblNjaGVtYVhOYXRpdmVUeXBlLkRhdGU6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvZXJjZWQgPSB0aGlzLiNzdHJpbmdUb0RhdGUoY29lcmNlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGNvZXJjZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSnNvblNjaGVtYVhOYXRpdmVUeXBlLkJpZ0ludDoge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGNvZXJjZWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgY29lcmNlZCA9IHRoaXMuI3N0cmluZ1RvQmlnSW50KGNvZXJjZWQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgY29lcmNlZCA9IHRoaXMuI251bWJlclRvQmlnSW50KGNvZXJjZWQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkICE9PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBKc29uU2NoZW1hWE5hdGl2ZVR5cGUuUmVnRXhwOiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb2VyY2VkID0gdGhpcy4jc3RyaW5nVG9SZWdFeHAoY29lcmNlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGNvZXJjZWQgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBKc29uU2NoZW1hWE5hdGl2ZVR5cGUuVXJsOiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2VkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb2VyY2VkID0gdGhpcy4jc3RyaW5nVG9VUkwoY29lcmNlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGNvZXJjZWQgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICAgICAgICBzYXRpc2ZpZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBKc29uU2NoZW1hWE5hdGl2ZVR5cGUuU2V0OiB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIGNvZXJjZWQgPSB0aGlzLiNhcnJheVRvU2V0KGNvZXJjZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShjb2VyY2VkIGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSnNvblNjaGVtYVhOYXRpdmVUeXBlLk1hcDoge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZXJjZWQpKSB7XG4gICAgICAgICAgICBjb2VyY2VkID0gdGhpcy4jYXJyYXlUb01hcChjb2VyY2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEoY29lcmNlZCBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgICAgIHNhdGlzZmllZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2NoZW1hLmFsbE9mKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YlNjaGVtYSBvZiBzY2hlbWEuYWxsT2YpIHtcbiAgICAgICAgY29uc3QgW3N1YlNhdGlzZmllZCwgc3ViQ29lcmNlZF0gPSB0aGlzLiNjb2VyY2Uoc3ViU2NoZW1hLCBjb2VyY2VkLCBvcHRpb25zKTtcbiAgICAgICAgY29lcmNlZCA9IHN1YkNvZXJjZWQ7XG4gICAgICAgIGlmICghc3ViU2F0aXNmaWVkKSB7XG4gICAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1wiYW55T2ZcIiwgXCJvbmVPZlwiXSkge1xuICAgICAgaWYgKHNjaGVtYVtrZXldKSB7XG4gICAgICAgIGxldCBiZXN0T3B0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBzdWJTY2hlbWEgb2Ygc2NoZW1hW2tleV0pIHtcbiAgICAgICAgICBjb25zdCBbc3ViU2F0aXNmaWVkLCBzdWJDb2VyY2VkXSA9IHRoaXMuI2NvZXJjZShzdWJTY2hlbWEsIGNvZXJjZWQsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChzdWJTYXRpc2ZpZWQpIHtcbiAgICAgICAgICAgIGlmICghYmVzdE9wdGlvbnMgfHwgc3ViQ29lcmNlZCA9PT0gY29lcmNlZCkge1xuICAgICAgICAgICAgICBiZXN0T3B0aW9ucyA9IHsgY29lcmNlZDogc3ViQ29lcmNlZCwgc2F0aXNmaWVkOiBzdWJTYXRpc2ZpZWQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdWJDb2VyY2VkID09PSBjb2VyY2VkKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2VyY2VkID0gYmVzdE9wdGlvbnMgPyBiZXN0T3B0aW9ucy5jb2VyY2VkIDogY29lcmNlZDtcbiAgICAgICAgc2F0aXNmaWVkID0gYmVzdE9wdGlvbnMgPyBiZXN0T3B0aW9ucy5zYXRpc2ZpZWQgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEubm90ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBbbm90U2F0aXNmaWVkXSA9IHRoaXMuI2NvZXJjZShzY2hlbWEubm90LCBjb2VyY2VkLCBvcHRpb25zKTtcbiAgICAgIGlmIChub3RTYXRpc2ZpZWQpIHtcbiAgICAgICAgc2F0aXNmaWVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbc2F0aXNmaWVkLCBjb2VyY2VkXTtcbiAgfVxuICAjc3RyaW5nVG9OdW1iZXIodmFsdWUpIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihudW0pIHx8IG51bSAhPT0gTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9XG4gICNzdHJpbmdUb0ludGVnZXIodmFsdWUpIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIucGFyc2VJbnQodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSB8fCBudW0gIT09IE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfVxuICAjc3RyaW5nVG9Cb29sZWFuKHZhbHVlKSB7XG4gICAgY29uc3QgbG93ZXIgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlciA9PT0gXCJmYWxzZVwiIHx8IGxvd2VyID09PSBcIm9mZlwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChsb3dlciA9PT0gXCJ0cnVlXCIgfHwgbG93ZXIgPT09IFwib25cIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAjc3RyaW5nVG9CaWdJbnQodmFsdWUpIHtcbiAgICByZXR1cm4gZ3VhcmQoKCkgPT4gQmlnSW50KHZhbHVlKSkgPz8gdmFsdWU7XG4gIH1cbiAgI251bWJlclRvQmlnSW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGd1YXJkKCgpID0+IEJpZ0ludCh2YWx1ZSkpID8/IHZhbHVlO1xuICB9XG4gICNzdHJpbmdUb0RhdGUodmFsdWUpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpIHx8ICFGTEVYSUJMRV9EQVRFX0ZPUk1BVF9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICAjc3RyaW5nVG9SZWdFeHAodmFsdWUpIHtcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eXFwvKC4qKVxcLyhbYS16XSopJC8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgWywgcGF0dGVybiwgZmxhZ3NdID0gbWF0Y2g7XG4gICAgICByZXR1cm4gZ3VhcmQoKCkgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncykpID8/IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgI3N0cmluZ1RvVVJMKHZhbHVlKSB7XG4gICAgcmV0dXJuIGd1YXJkKCgpID0+IG5ldyBVUkwodmFsdWUpKSA/PyB2YWx1ZTtcbiAgfVxuICAjYXJyYXlUb1NldCh2YWx1ZSkge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUpO1xuICAgIGlmIChzZXQuc2l6ZSAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBzZXQ7XG4gIH1cbiAgI2FycmF5VG9NYXAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUuc29tZSgoaXRlbSkgPT4gIUFycmF5LmlzQXJyYXkoaXRlbSkgfHwgaXRlbS5sZW5ndGggIT09IDIpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAodmFsdWUpO1xuICAgIGlmIChyZXN1bHQuc2l6ZSAhPT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY2xhc3MgZXhwZXJpbWVudGFsX1NtYXJ0Q29lcmNpb25QbHVnaW4ge1xuICBjb252ZXJ0ZXI7XG4gIGNvZXJjZXI7XG4gIGNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuY29udmVydGVyID0gbmV3IENvbXBvc2l0ZVNjaGVtYUNvbnZlcnRlcih0b0FycmF5KG9wdGlvbnMuc2NoZW1hQ29udmVydGVycykpO1xuICAgIHRoaXMuY29lcmNlciA9IG5ldyBleHBlcmltZW50YWxfSnNvblNjaGVtYUNvZXJjZXIoKTtcbiAgfVxuICBpbml0KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmNsaWVudEludGVyY2VwdG9ycyA/Pz0gW107XG4gICAgb3B0aW9ucy5jbGllbnRJbnRlcmNlcHRvcnMudW5zaGlmdChhc3luYyAob3B0aW9uczIpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gb3B0aW9uczIucHJvY2VkdXJlW1wifm9ycGNcIl0uaW5wdXRTY2hlbWE7XG4gICAgICBpZiAoIWlucHV0U2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zMi5uZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb2VyY2VkSW5wdXQgPSBhd2FpdCB0aGlzLiNjb2VyY2UoaW5wdXRTY2hlbWEsIG9wdGlvbnMyLmlucHV0KTtcbiAgICAgIHJldHVybiBvcHRpb25zMi5uZXh0KHsgLi4ub3B0aW9uczIsIGlucHV0OiBjb2VyY2VkSW5wdXQgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgI2NvZXJjZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgbGV0IGpzb25TY2hlbWEgPSB0aGlzLmNhY2hlLmdldChzY2hlbWEpO1xuICAgIGlmICghanNvblNjaGVtYSkge1xuICAgICAganNvblNjaGVtYSA9IChhd2FpdCB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KHNjaGVtYSwgeyBzdHJhdGVneTogXCJpbnB1dFwiIH0pKVsxXTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHNjaGVtYSwganNvblNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvZXJjZXIuY29lcmNlKGpzb25TY2hlbWEsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBKc29uU2NoZW1hWE5hdGl2ZVR5cGUsIGV4cGVyaW1lbnRhbF9Kc29uU2NoZW1hQ29lcmNlciwgZXhwZXJpbWVudGFsX1NtYXJ0Q29lcmNpb25QbHVnaW4gfTtcbiIsImltcG9ydCB7IGlzT2JqZWN0LCBndWFyZCwgaW50ZXJjZXB0LCB0b0FycmF5IH0gZnJvbSAnQG9ycGMvc2hhcmVkJztcbmltcG9ydCB7IEpzb25TY2hlbWFYTmF0aXZlVHlwZSB9IGZyb20gJ0BvcnBjL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IEpTT05TY2hlbWFGb3JtYXQsIEpTT05TY2hlbWFDb250ZW50RW5jb2RpbmcgfSBmcm9tICdAb3JwYy9vcGVuYXBpJztcbmltcG9ydCB7IHJlZ2lzdHJ5LCBnbG9iYWxSZWdpc3RyeSB9IGZyb20gJ3pvZC92NC9jb3JlJztcblxuY2xhc3MgZXhwZXJpbWVudGFsX1pvZFNtYXJ0Q29lcmNpb25QbHVnaW4ge1xuICBpbml0KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmNsaWVudEludGVyY2VwdG9ycyA/Pz0gW107XG4gICAgb3B0aW9ucy5jbGllbnRJbnRlcmNlcHRvcnMudW5zaGlmdCgob3B0aW9uczIpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gb3B0aW9uczIucHJvY2VkdXJlW1wifm9ycGNcIl0uaW5wdXRTY2hlbWE7XG4gICAgICBpZiAoIWlucHV0U2NoZW1hIHx8IGlucHV0U2NoZW1hW1wifnN0YW5kYXJkXCJdLnZlbmRvciAhPT0gXCJ6b2RcIiB8fCAhKFwiX3pvZFwiIGluIGlucHV0U2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uczIubmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29lcmNlZElucHV0ID0gdGhpcy4jY29lcmNlKGlucHV0U2NoZW1hLCBvcHRpb25zMi5pbnB1dCk7XG4gICAgICByZXR1cm4gb3B0aW9uczIubmV4dCh7IC4uLm9wdGlvbnMyLCBpbnB1dDogY29lcmNlZElucHV0IH0pO1xuICAgIH0pO1xuICB9XG4gICNjb2VyY2Uoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHN3aXRjaCAoc2NoZW1hLl96b2QuZGVmLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuI3N0cmluZ1RvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYmlnaW50XCI6IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJpbmdUb0JpZ0ludCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIGNhc2UgXCJzdWNjZXNzXCI6IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJpbmdUb0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRlXCI6IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJpbmdUb0RhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICBjYXNlIFwiZW51bVwiOiB7XG4gICAgICAgIGNvbnN0IGxpdGVyYWwgPSBzY2hlbWE7XG4gICAgICAgIGlmICghbGl0ZXJhbC5fem9kLnZhbHVlcy5oYXModmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnN0IG51bSA9IHRoaXMuI3N0cmluZ1RvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICBpZiAobGl0ZXJhbC5fem9kLnZhbHVlcy5oYXMobnVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYm9vbCA9IHRoaXMuI3N0cmluZ1RvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgICAgaWYgKGxpdGVyYWwuX3pvZC52YWx1ZXMuaGFzKGJvb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmlnaW50ID0gdGhpcy4jc3RyaW5nVG9CaWdJbnQodmFsdWUpO1xuICAgICAgICAgIGlmIChsaXRlcmFsLl96b2QudmFsdWVzLmhhcyhiaWdpbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gYmlnaW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICBjb25zdCBhcnJheSA9IHNjaGVtYTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodikgPT4gdGhpcy4jY29lcmNlKGFycmF5Ll96b2QuZGVmLmVsZW1lbnQsIHYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjYXNlIFwidHVwbGVcIjoge1xuICAgICAgICBjb25zdCB0dXBsZSA9IHNjaGVtYTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHR1cGxlLl96b2QuZGVmLml0ZW1zW2ldID8/IHR1cGxlLl96b2QuZGVmLnJlc3Q7XG4gICAgICAgICAgICByZXR1cm4gcyA/IHRoaXMuI2NvZXJjZShzLCB2KSA6IHY7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgY2FzZSBcInNldFwiOiB7XG4gICAgICAgIGNvbnN0IHNldCA9IHNjaGVtYTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNldChcbiAgICAgICAgICAgIHZhbHVlLm1hcCgodikgPT4gdGhpcy4jY29lcmNlKHNldC5fem9kLmRlZi52YWx1ZVR5cGUsIHYpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTZXQoXG4gICAgICAgICAgICBBcnJheS5mcm9tKHZhbHVlKS5tYXAoKHYpID0+IHRoaXMuI2NvZXJjZShzZXQuX3pvZC5kZWYudmFsdWVUeXBlLCB2KSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICBjb25zdCBvYmplY3QgPSBzY2hlbWE7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICBjb25zdCBrZXlzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXModmFsdWUpLFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMob2JqZWN0Ll96b2QuZGVmLnNoYXBlKVxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBzID0gb2JqZWN0Ll96b2QuZGVmLnNoYXBlW2tdID8/IG9iamVjdC5fem9kLmRlZi5jYXRjaGFsbDtcbiAgICAgICAgICAgIG5ld09ialtrXSA9IHMgPyB0aGlzLiNjb2VyY2UocywgdmFsdWVba10pIDogdmFsdWVba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHNjaGVtYTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy4jY29lcmNlKHJlY29yZC5fem9kLmRlZi5rZXlUeXBlLCBrKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuI2NvZXJjZShyZWNvcmQuX3pvZC5kZWYudmFsdWVUeXBlLCB2KTtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJtYXBcIjoge1xuICAgICAgICBjb25zdCBtYXAgPSBzY2hlbWE7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpKSA9PiBBcnJheS5pc0FycmF5KGkpICYmIGkubGVuZ3RoIDw9IDIpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICAgICAgICB2YWx1ZS5tYXAoKFtrLCB2XSkgPT4gW1xuICAgICAgICAgICAgICB0aGlzLiNjb2VyY2UobWFwLl96b2QuZGVmLmtleVR5cGUsIGspLFxuICAgICAgICAgICAgICB0aGlzLiNjb2VyY2UobWFwLl96b2QuZGVmLnZhbHVlVHlwZSwgdilcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgICAgICAgIEFycmF5LmZyb20odmFsdWUpLm1hcCgoW2ssIHZdKSA9PiBbXG4gICAgICAgICAgICAgIHRoaXMuI2NvZXJjZShtYXAuX3pvZC5kZWYua2V5VHlwZSwgayksXG4gICAgICAgICAgICAgIHRoaXMuI2NvZXJjZShtYXAuX3pvZC5kZWYudmFsdWVUeXBlLCB2KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ1bmlvblwiOiB7XG4gICAgICAgIGNvbnN0IHVuaW9uID0gc2NoZW1hO1xuICAgICAgICBpZiAodW5pb24uX3pvZC5kZWYub3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy4jY29lcmNlKHVuaW9uLl96b2QuZGVmLm9wdGlvbnNbMF0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvciA9IFwiZGlzY3JpbWluYXRvclwiIGluIHVuaW9uLl96b2QuZGVmICYmIHR5cGVvZiB1bmlvbi5fem9kLmRlZi5kaXNjcmltaW5hdG9yID09PSBcInN0cmluZ1wiID8gdW5pb24uX3pvZC5kZWYuZGlzY3JpbWluYXRvciA6IHZvaWQgMDtcbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlvbi5fem9kLmRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbi5fem9kLnByb3BWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlzY3JpbWluYXRvciAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb24uX3pvZC5wcm9wVmFsdWVzW2Rpc2NyaW1pbmF0b3JdPy5oYXModmFsdWVbZGlzY3JpbWluYXRvcl0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShvcHRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9uLl96b2QucHJvcFZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24uX3pvZC5wcm9wVmFsdWVzW2tleV0/Lmhhcyh2YWx1ZVtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShvcHRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHNjaGVtYTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShcbiAgICAgICAgICBpbnRlcnNlY3Rpb24uX3pvZC5kZWYucmlnaHQsXG4gICAgICAgICAgdGhpcy4jY29lcmNlKGludGVyc2VjdGlvbi5fem9kLmRlZi5sZWZ0LCB2YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJvcHRpb25hbFwiOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gc2NoZW1hO1xuICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShvcHRpb25hbC5fem9kLmRlZi5pbm5lclR5cGUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJub25vcHRpb25hbFwiOiB7XG4gICAgICAgIGNvbnN0IG5vbm9wdGlvbmFsID0gc2NoZW1hO1xuICAgICAgICByZXR1cm4gdGhpcy4jY29lcmNlKG5vbm9wdGlvbmFsLl96b2QuZGVmLmlubmVyVHlwZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51bGxhYmxlXCI6IHtcbiAgICAgICAgY29uc3QgbnVsbGFibGUgPSBzY2hlbWE7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNjb2VyY2UobnVsbGFibGUuX3pvZC5kZWYuaW5uZXJUeXBlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjYXNlIFwicmVhZG9ubHlcIjoge1xuICAgICAgICBjb25zdCByZWFkb25seV8gPSBzY2hlbWE7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb2VyY2UocmVhZG9ubHlfLl96b2QuZGVmLmlubmVyVHlwZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgY2FzZSBcInBpcGVcIjoge1xuICAgICAgICBjb25zdCBwaXBlID0gc2NoZW1hO1xuICAgICAgICByZXR1cm4gdGhpcy4jY29lcmNlKHBpcGUuX3pvZC5kZWYuaW4sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICBjYXNlIFwicHJlZmF1bHRcIjoge1xuICAgICAgICBjb25zdCBkZWZhdWx0XyA9IHNjaGVtYTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShkZWZhdWx0Xy5fem9kLmRlZi5pbm5lclR5cGUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjYXRjaFwiOiB7XG4gICAgICAgIGNvbnN0IGNhdGNoXyA9IHNjaGVtYTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShjYXRjaF8uX3pvZC5kZWYuaW5uZXJUeXBlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjYXNlIFwibGF6eVwiOiB7XG4gICAgICAgIGNvbnN0IGxhenkgPSBzY2hlbWE7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuI2NvZXJjZShsYXp5Ll96b2QuZGVmLmdldHRlcigpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBzY2hlbWEuX3pvZC5kZWYudHlwZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAjc3RyaW5nVG9OdW1iZXIodmFsdWUpIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obnVtKSB8fCBudW0udG9TdHJpbmcoKSAhPT0gdmFsdWUgPyB2YWx1ZSA6IG51bTtcbiAgfVxuICAjc3RyaW5nVG9CaWdJbnQodmFsdWUpIHtcbiAgICByZXR1cm4gZ3VhcmQoKCkgPT4gQmlnSW50KHZhbHVlKSkgPz8gdmFsdWU7XG4gIH1cbiAgI3N0cmluZ1RvQm9vbGVhbih2YWx1ZSkge1xuICAgIGNvbnN0IGxvd2VyID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIgPT09IFwiZmFsc2VcIiB8fCBsb3dlciA9PT0gXCJvZmZcIiB8fCBsb3dlciA9PT0gXCJmXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxvd2VyID09PSBcInRydWVcIiB8fCBsb3dlciA9PT0gXCJvblwiIHx8IGxvd2VyID09PSBcInRcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAjc3RyaW5nVG9EYXRlKHZhbHVlKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgJiYgZGF0ZS50b0lTT1N0cmluZygpLnN0YXJ0c1dpdGgodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmNvbnN0IEpTT05fU0NIRU1BX1JFR0lTVFJZID0gcmVnaXN0cnkoKTtcbmNvbnN0IEpTT05fU0NIRU1BX0lOUFVUX1JFR0lTVFJZID0gcmVnaXN0cnkoKTtcbmNvbnN0IEpTT05fU0NIRU1BX09VVFBVVF9SRUdJU1RSWSA9IHJlZ2lzdHJ5KCk7XG5cbmNsYXNzIFpvZFRvSnNvblNjaGVtYUNvbnZlcnRlciB7XG4gIG1heExhenlEZXB0aDtcbiAgbWF4U3RydWN0dXJlRGVwdGg7XG4gIGFueUpzb25TY2hlbWE7XG4gIHVuc3VwcG9ydGVkSnNvblNjaGVtYTtcbiAgdW5kZWZpbmVkSnNvblNjaGVtYTtcbiAgaW50ZXJjZXB0b3JzO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm1heExhenlEZXB0aCA9IG9wdGlvbnMubWF4TGF6eURlcHRoID8/IDI7XG4gICAgdGhpcy5tYXhTdHJ1Y3R1cmVEZXB0aCA9IG9wdGlvbnMubWF4U3RydWN0dXJlRGVwdGggPz8gMTA7XG4gICAgdGhpcy5hbnlKc29uU2NoZW1hID0gb3B0aW9ucy5hbnlKc29uU2NoZW1hID8/IHt9O1xuICAgIHRoaXMudW5zdXBwb3J0ZWRKc29uU2NoZW1hID0gb3B0aW9ucy51bnN1cHBvcnRlZEpzb25TY2hlbWEgPz8geyBub3Q6IHt9IH07XG4gICAgdGhpcy51bmRlZmluZWRKc29uU2NoZW1hID0gb3B0aW9ucy51bmRlZmluZWRKc29uU2NoZW1hID8/IHsgbm90OiB7fSB9O1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgPz8gW107XG4gIH1cbiAgY29uZGl0aW9uKHNjaGVtYSkge1xuICAgIHJldHVybiBzY2hlbWEgIT09IHZvaWQgMCAmJiBzY2hlbWFbXCJ+c3RhbmRhcmRcIl0udmVuZG9yID09PSBcInpvZFwiICYmIFwiX3pvZFwiIGluIHNjaGVtYTtcbiAgfVxuICBjb252ZXJ0KHNjaGVtYSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLiNjb252ZXJ0KHNjaGVtYSwgb3B0aW9ucywgMCwgMCk7XG4gIH1cbiAgI2NvbnZlcnQoc2NoZW1hLCBvcHRpb25zLCBsYXp5RGVwdGgsIHN0cnVjdHVyZURlcHRoLCBpc0hhbmRsZWRDdXN0b21KU09OU2NoZW1hID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaW50ZXJjZXB0KFxuICAgICAgdGhpcy5pbnRlcmNlcHRvcnMsXG4gICAgICB7IHNjaGVtYSwgb3B0aW9ucywgbGF6eURlcHRoLCBpc0hhbmRsZWRDdXN0b21KU09OU2NoZW1hIH0sXG4gICAgICAoeyBzY2hlbWE6IHNjaGVtYTIsIG9wdGlvbnM6IG9wdGlvbnMyLCBsYXp5RGVwdGg6IGxhenlEZXB0aDIsIGlzSGFuZGxlZEN1c3RvbUpTT05TY2hlbWE6IGlzSGFuZGxlZEN1c3RvbUpTT05TY2hlbWEyIH0pID0+IHtcbiAgICAgICAgaWYgKHN0cnVjdHVyZURlcHRoID4gdGhpcy5tYXhTdHJ1Y3R1cmVEZXB0aCkge1xuICAgICAgICAgIHJldHVybiBbZmFsc2UsIHRoaXMuYW55SnNvblNjaGVtYV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zMi5taW5TdHJ1Y3R1cmVEZXB0aEZvclJlZiB8fCBvcHRpb25zMi5taW5TdHJ1Y3R1cmVEZXB0aEZvclJlZiA8PSBzdHJ1Y3R1cmVEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0b0FycmF5KG9wdGlvbnMyLmNvbXBvbmVudHMpO1xuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuc2NoZW1hID09PSBzY2hlbWEyICYmIGNvbXBvbmVudC5hbGxvd2VkU3RyYXRlZ2llcy5pbmNsdWRlcyhvcHRpb25zMi5zdHJhdGVneSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtjb21wb25lbnQucmVxdWlyZWQsIHsgJHJlZjogY29tcG9uZW50LnJlZiB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0hhbmRsZWRDdXN0b21KU09OU2NoZW1hMikge1xuICAgICAgICAgIGNvbnN0IGN1c3RvbUpTT05TY2hlbWEgPSB0aGlzLiNnZXRDdXN0b21Kc29uU2NoZW1hKHNjaGVtYTIsIG9wdGlvbnMyKTtcbiAgICAgICAgICBpZiAoY3VzdG9tSlNPTlNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgW3JlcXVpcmVkLCBqc29uXSA9IHRoaXMuI2NvbnZlcnQoc2NoZW1hMiwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcmVxdWlyZWQsIHsgLi4uanNvbiwgLi4uY3VzdG9tSlNPTlNjaGVtYSB9XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChzY2hlbWEyLl96b2QuZGVmLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBqc29uID0geyB0eXBlOiBcInN0cmluZ1wiIH07XG4gICAgICAgICAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgcGF0dGVybnMsIGNvbnRlbnRFbmNvZGluZyB9ID0gc3RyaW5nLl96b2QuYmFnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIGpzb24ubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1heExlbmd0aCA9IG1heGltdW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRFbmNvZGluZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICBqc29uLmNvbnRlbnRFbmNvZGluZyA9IHRoaXMuI2hhbmRsZUNvbnRlbnRFbmNvZGluZyhjb250ZW50RW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0ICE9PSBcInJlZ2V4XCIgJiYganNvbi5jb250ZW50RW5jb2RpbmcgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICBqc29uLmZvcm1hdCA9IHRoaXMuI2hhbmRsZVN0cmluZ0Zvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdHRlcm5zIGluc3RhbmNlb2YgU2V0ICYmIGpzb24uY29udGVudEVuY29kaW5nID09PSB2b2lkIDAgJiYganNvbi5mb3JtYXQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoanNvbi5wYXR0ZXJuID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgIGpzb24ucGF0dGVybiA9IHBhdHRlcm4uc291cmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBqc29uLmFsbE9mID8/PSBbXTtcbiAgICAgICAgICAgICAgICAgIGpzb24uYWxsT2YucHVzaCh7IHBhdHRlcm46IHBhdHRlcm4uc291cmNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd3RcIiAmJiBqc29uLmNvbnRlbnRFbmNvZGluZyA9PT0gdm9pZCAwICYmIGpzb24uZm9ybWF0ID09PSB2b2lkIDAgJiYganNvbi5wYXR0ZXJuID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAganNvbi5wYXR0ZXJuID0gL15bXFx3LV0rXFwuW1xcdy1dK1xcLltcXHctXSskLy5zb3VyY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGpzb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBqc29uID0geyB0eXBlOiBcIm51bWJlclwiIH07XG4gICAgICAgICAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgbXVsdGlwbGVPZiwgZXhjbHVzaXZlTWF4aW11bSwgZXhjbHVzaXZlTWluaW11bSB9ID0gbnVtYmVyLl96b2QuYmFnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0Py5pbmNsdWRlcyhcImludFwiKSkge1xuICAgICAgICAgICAgICBqc29uLnR5cGUgPSBcImludGVnZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIGpzb24ubWF4aW11bSA9IG1heGltdW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAganNvbi5leGNsdXNpdmVNaW5pbXVtID0gZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtdWx0aXBsZU9mID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIGpzb24ubXVsdGlwbGVPZiA9IG11bHRpcGxlT2Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGpzb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHsgdHlwZTogXCJib29sZWFuXCIgfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjoge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeLT9bMC05XSskXCIsXG4gICAgICAgICAgICAgIFwieC1uYXRpdmUtdHlwZVwiOiBKc29uU2NoZW1hWE5hdGl2ZVR5cGUuQmlnSW50XG4gICAgICAgICAgICB9XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImRhdGVcIjoge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImZvcm1hdFwiOiBKU09OU2NoZW1hRm9ybWF0LkRhdGVUaW1lLFxuICAgICAgICAgICAgICBcIngtbmF0aXZlLXR5cGVcIjogSnNvblNjaGVtYVhOYXRpdmVUeXBlLkRhdGVcbiAgICAgICAgICAgIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibnVsbFwiOiB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHsgdHlwZTogXCJudWxsXCIgfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwidm9pZFwiOiB7XG4gICAgICAgICAgICByZXR1cm4gW2ZhbHNlLCB0aGlzLnVuZGVmaW5lZEpzb25TY2hlbWFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiYW55XCI6IHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2UsIHRoaXMuYW55SnNvblNjaGVtYV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ1bmtub3duXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2UsIHRoaXMuYW55SnNvblNjaGVtYV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJuZXZlclwiOiB7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHRoaXMudW5zdXBwb3J0ZWRKc29uU2NoZW1hXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImFycmF5XCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7IHR5cGU6IFwiYXJyYXlcIiB9O1xuICAgICAgICAgICAgY29uc3QgeyBtaW5pbXVtLCBtYXhpbXVtIH0gPSBhcnJheS5fem9kLmJhZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1pbkl0ZW1zID0gbWluaW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpzb24uaXRlbXMgPSB0aGlzLiNoYW5kbGVBcnJheUl0ZW1Kc29uU2NoZW1hKHRoaXMuI2NvbnZlcnQoYXJyYXkuX3pvZC5kZWYuZWxlbWVudCwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSksIG9wdGlvbnMyKTtcbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwganNvbl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7IHR5cGU6IFwib2JqZWN0XCIgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdC5fem9kLmRlZi5zaGFwZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgW2l0ZW1SZXF1aXJlZCwgaXRlbUpzb25dID0gdGhpcy4jY29udmVydCh2YWx1ZSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSk7XG4gICAgICAgICAgICAgIGpzb24ucHJvcGVydGllcyA/Pz0ge307XG4gICAgICAgICAgICAgIGpzb24ucHJvcGVydGllc1trZXldID0gaXRlbUpzb247XG4gICAgICAgICAgICAgIGlmIChpdGVtUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBqc29uLnJlcXVpcmVkID8/PSBbXTtcbiAgICAgICAgICAgICAgICBqc29uLnJlcXVpcmVkLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9iamVjdC5fem9kLmRlZi5jYXRjaGFsbCkge1xuICAgICAgICAgICAgICBpZiAob2JqZWN0Ll96b2QuZGVmLmNhdGNoYWxsLl96b2QuZGVmLnR5cGUgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbXywgYWRkSnNvbl0gPSB0aGlzLiNjb252ZXJ0KG9iamVjdC5fem9kLmRlZi5jYXRjaGFsbCwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSk7XG4gICAgICAgICAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGFkZEpzb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwganNvbl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ1bmlvblwiOiB7XG4gICAgICAgICAgICBjb25zdCB1bmlvbiA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBhbnlPZiA9IFtdO1xuICAgICAgICAgICAgbGV0IHJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB1bmlvbi5fem9kLmRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtpdGVtUmVxdWlyZWQsIGl0ZW1Kc29uXSA9IHRoaXMuI2NvbnZlcnQoaXRlbSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSk7XG4gICAgICAgICAgICAgIGlmICghaXRlbVJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAob3B0aW9uczIuc3RyYXRlZ3kgPT09IFwiaW5wdXRcIikge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtSnNvbiAhPT0gdGhpcy51bmRlZmluZWRKc29uU2NoZW1hICYmIGl0ZW1Kc29uICE9PSB0aGlzLnVuc3VwcG9ydGVkSnNvblNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgYW55T2YucHVzaChpdGVtSnNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtSnNvbiAhPT0gdGhpcy51bmRlZmluZWRKc29uU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICBhbnlPZi5wdXNoKGl0ZW1Kc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbcmVxdWlyZWQsIHsgYW55T2YgfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7IGFsbE9mOiBbXSB9O1xuICAgICAgICAgICAgbGV0IHJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgW2ludGVyc2VjdGlvbi5fem9kLmRlZi5sZWZ0LCBpbnRlcnNlY3Rpb24uX3pvZC5kZWYucmlnaHRdKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtpdGVtUmVxdWlyZWQsIGl0ZW1Kc29uXSA9IHRoaXMuI2NvbnZlcnQoaXRlbSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSk7XG4gICAgICAgICAgICAgIGpzb24uYWxsT2YucHVzaChpdGVtSnNvbik7XG4gICAgICAgICAgICAgIGlmIChpdGVtUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbcmVxdWlyZWQsIGpzb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwidHVwbGVcIjoge1xuICAgICAgICAgICAgY29uc3QgdHVwbGUgPSBzY2hlbWEyO1xuICAgICAgICAgICAgY29uc3QganNvbiA9IHsgdHlwZTogXCJhcnJheVwiLCBwcmVmaXhJdGVtczogW10gfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0dXBsZS5fem9kLmRlZi5pdGVtcykge1xuICAgICAgICAgICAgICBqc29uLnByZWZpeEl0ZW1zLnB1c2godGhpcy4jaGFuZGxlQXJyYXlJdGVtSnNvblNjaGVtYSh0aGlzLiNjb252ZXJ0KGl0ZW0sIG9wdGlvbnMyLCBsYXp5RGVwdGgyLCBzdHJ1Y3R1cmVEZXB0aCArIDEpLCBvcHRpb25zMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR1cGxlLl96b2QuZGVmLnJlc3QpIHtcbiAgICAgICAgICAgICAganNvbi5pdGVtcyA9IHRoaXMuI2hhbmRsZUFycmF5SXRlbUpzb25TY2hlbWEodGhpcy4jY29udmVydCh0dXBsZS5fem9kLmRlZi5yZXN0LCBvcHRpb25zMiwgbGF6eURlcHRoMiwgc3RydWN0dXJlRGVwdGggKyAxKSwgb3B0aW9uczIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBtaW5pbXVtLCBtYXhpbXVtIH0gPSB0dXBsZS5fem9kLmJhZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1pbkl0ZW1zID0gbWluaW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwganNvbl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7IHR5cGU6IFwib2JqZWN0XCIgfTtcbiAgICAgICAgICAgIGpzb24ucHJvcGVydHlOYW1lcyA9IHRoaXMuI2NvbnZlcnQocmVjb3JkLl96b2QuZGVmLmtleVR5cGUsIG9wdGlvbnMyLCBsYXp5RGVwdGgyLCBzdHJ1Y3R1cmVEZXB0aCArIDEpWzFdO1xuICAgICAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHRoaXMuI2NvbnZlcnQocmVjb3JkLl96b2QuZGVmLnZhbHVlVHlwZSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSlbMV07XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGpzb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibWFwXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IHNjaGVtYTI7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIHByZWZpeEl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgICB0aGlzLiNoYW5kbGVBcnJheUl0ZW1Kc29uU2NoZW1hKHRoaXMuI2NvbnZlcnQobWFwLl96b2QuZGVmLmtleVR5cGUsIG9wdGlvbnMyLCBsYXp5RGVwdGgyLCBzdHJ1Y3R1cmVEZXB0aCArIDEpLCBvcHRpb25zMiksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNoYW5kbGVBcnJheUl0ZW1Kc29uU2NoZW1hKHRoaXMuI2NvbnZlcnQobWFwLl96b2QuZGVmLnZhbHVlVHlwZSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoICsgMSksIG9wdGlvbnMyKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgbWF4SXRlbXM6IDIsXG4gICAgICAgICAgICAgICAgbWluSXRlbXM6IDJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJ4LW5hdGl2ZS10eXBlXCI6IEpzb25TY2hlbWFYTmF0aXZlVHlwZS5NYXBcbiAgICAgICAgICAgIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwic2V0XCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHNldCA9IHNjaGVtYTI7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlLFxuICAgICAgICAgICAgICBcIml0ZW1zXCI6IHRoaXMuI2hhbmRsZUFycmF5SXRlbUpzb25TY2hlbWEodGhpcy4jY29udmVydChzZXQuX3pvZC5kZWYudmFsdWVUeXBlLCBvcHRpb25zMiwgbGF6eURlcHRoMiwgc3RydWN0dXJlRGVwdGggKyAxKSwgb3B0aW9uczIpLFxuICAgICAgICAgICAgICBcIngtbmF0aXZlLXR5cGVcIjogSnNvblNjaGVtYVhOYXRpdmVUeXBlLlNldFxuICAgICAgICAgICAgfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJlbnVtXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1fID0gc2NoZW1hMjtcbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgeyBlbnVtOiBPYmplY3QudmFsdWVzKGVudW1fLl96b2QuZGVmLmVudHJpZXMpIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibGl0ZXJhbFwiOiB7XG4gICAgICAgICAgICBjb25zdCBsaXRlcmFsID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGxldCByZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBsaXRlcmFsLl96b2QuZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLmFkZCh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBqc29uID0gdmFsdWVzLnNpemUgPT09IDAgPyB0aGlzLnVuZGVmaW5lZEpzb25TY2hlbWEgOiB2YWx1ZXMuc2l6ZSA9PT0gMSA/IHsgY29uc3Q6IHZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgfSA6IHsgZW51bTogQXJyYXkuZnJvbSh2YWx1ZXMpIH07XG4gICAgICAgICAgICByZXR1cm4gW3JlcXVpcmVkLCBqc29uXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImZpbGVcIjoge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBvbmVPZiA9IFtdO1xuICAgICAgICAgICAgY29uc3QgeyBtaW1lIH0gPSBmaWxlLl96b2QuYmFnO1xuICAgICAgICAgICAgaWYgKG1pbWUgPT09IHZvaWQgMCB8fCBBcnJheS5pc0FycmF5KG1pbWUpICYmIG1pbWUuZXZlcnkoKG0pID0+IHR5cGVvZiBtID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgbWltZSA/PyBbXCIqLypcIl0pIHtcbiAgICAgICAgICAgICAgICBvbmVPZi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICBjb250ZW50TWVkaWFUeXBlOiB0eXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgb25lT2YubGVuZ3RoID09PSAxID8gb25lT2ZbMF0gOiB7IGFueU9mOiBvbmVPZiB9XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInRyYW5zZm9ybVwiOiB7XG4gICAgICAgICAgICByZXR1cm4gW2ZhbHNlLCB0aGlzLmFueUpzb25TY2hlbWFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibnVsbGFibGVcIjoge1xuICAgICAgICAgICAgY29uc3QgbnVsbGFibGUgPSBzY2hlbWEyO1xuICAgICAgICAgICAgY29uc3QgW3JlcXVpcmVkLCBqc29uXSA9IHRoaXMuI2NvbnZlcnQobnVsbGFibGUuX3pvZC5kZWYuaW5uZXJUeXBlLCBvcHRpb25zMiwgbGF6eURlcHRoMiwgc3RydWN0dXJlRGVwdGgpO1xuICAgICAgICAgICAgcmV0dXJuIFtyZXF1aXJlZCwgeyBhbnlPZjogW2pzb24sIHsgdHlwZTogXCJudWxsXCIgfV0gfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJub25vcHRpb25hbFwiOiB7XG4gICAgICAgICAgICBjb25zdCBub25vcHRpb25hbCA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBbLCBqc29uXSA9IHRoaXMuI2NvbnZlcnQobm9ub3B0aW9uYWwuX3pvZC5kZWYuaW5uZXJUeXBlLCBvcHRpb25zMiwgbGF6eURlcHRoMiwgc3RydWN0dXJlRGVwdGgpO1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBqc29uXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInN1Y2Nlc3NcIjoge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCB7IHR5cGU6IFwiYm9vbGVhblwiIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgIGNhc2UgXCJwcmVmYXVsdFwiOiB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0XyA9IHNjaGVtYTI7XG4gICAgICAgICAgICBjb25zdCBbLCBqc29uXSA9IHRoaXMuI2NvbnZlcnQoZGVmYXVsdF8uX3pvZC5kZWYuaW5uZXJUeXBlLCBvcHRpb25zMiwgbGF6eURlcHRoMiwgc3RydWN0dXJlRGVwdGgpO1xuICAgICAgICAgICAgcmV0dXJuIFtmYWxzZSwge1xuICAgICAgICAgICAgICAuLi5qc29uLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Xy5fem9kLmRlZi5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiY2F0Y2hcIjoge1xuICAgICAgICAgICAgY29uc3QgY2F0Y2hfID0gc2NoZW1hMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNjb252ZXJ0KGNhdGNoXy5fem9kLmRlZi5pbm5lclR5cGUsIG9wdGlvbnMyLCBsYXp5RGVwdGgyLCBzdHJ1Y3R1cmVEZXB0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJuYW5cIjoge1xuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBvcHRpb25zMi5zdHJhdGVneSA9PT0gXCJpbnB1dFwiID8gdGhpcy51bnN1cHBvcnRlZEpzb25TY2hlbWEgOiB7IHR5cGU6IFwibnVsbFwiIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwicGlwZVwiOiB7XG4gICAgICAgICAgICBjb25zdCBwaXBlID0gc2NoZW1hMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNjb252ZXJ0KG9wdGlvbnMyLnN0cmF0ZWd5ID09PSBcImlucHV0XCIgPyBwaXBlLl96b2QuZGVmLmluIDogcGlwZS5fem9kLmRlZi5vdXQsIG9wdGlvbnMyLCBsYXp5RGVwdGgyLCBzdHJ1Y3R1cmVEZXB0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJyZWFkb25seVwiOiB7XG4gICAgICAgICAgICBjb25zdCByZWFkb25seV8gPSBzY2hlbWEyO1xuICAgICAgICAgICAgY29uc3QgW3JlcXVpcmVkLCBqc29uXSA9IHRoaXMuI2NvbnZlcnQocmVhZG9ubHlfLl96b2QuZGVmLmlubmVyVHlwZSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoKTtcbiAgICAgICAgICAgIHJldHVybiBbcmVxdWlyZWQsIHsgLi4uanNvbiwgcmVhZE9ubHk6IHRydWUgfV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTGl0ZXJhbCA9IHNjaGVtYTI7XG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgcGF0dGVybjogdGVtcGxhdGVMaXRlcmFsLl96b2QucGF0dGVybi5zb3VyY2VcbiAgICAgICAgICAgIH1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwib3B0aW9uYWxcIjoge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSBzY2hlbWEyO1xuICAgICAgICAgICAgY29uc3QgWywganNvbl0gPSB0aGlzLiNjb252ZXJ0KG9wdGlvbmFsLl96b2QuZGVmLmlubmVyVHlwZSwgb3B0aW9uczIsIGxhenlEZXB0aDIsIHN0cnVjdHVyZURlcHRoKTtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2UsIGpzb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwibGF6eVwiOiB7XG4gICAgICAgICAgICBjb25zdCBsYXp5ID0gc2NoZW1hMjtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMYXp5RGVwdGggPSBsYXp5RGVwdGgyICsgMTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGF6eURlcHRoID4gdGhpcy5tYXhMYXp5RGVwdGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtmYWxzZSwgdGhpcy5hbnlKc29uU2NoZW1hXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNjb252ZXJ0KGxhenkuX3pvZC5kZWYuZ2V0dGVyKCksIG9wdGlvbnMyLCBjdXJyZW50TGF6eURlcHRoLCBzdHJ1Y3R1cmVEZXB0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHNjaGVtYTIuX3pvZC5kZWYudHlwZTtcbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgdGhpcy51bnN1cHBvcnRlZEpzb25TY2hlbWFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgI2dldEN1c3RvbUpzb25TY2hlbWEoc2NoZW1hLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyYXRlZ3kgPT09IFwiaW5wdXRcIiAmJiBKU09OX1NDSEVNQV9JTlBVVF9SRUdJU1RSWS5oYXMoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIEpTT05fU0NIRU1BX0lOUFVUX1JFR0lTVFJZLmdldChzY2hlbWEpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdHJhdGVneSA9PT0gXCJvdXRwdXRcIiAmJiBKU09OX1NDSEVNQV9PVVRQVVRfUkVHSVNUUlkuaGFzKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBKU09OX1NDSEVNQV9PVVRQVVRfUkVHSVNUUlkuZ2V0KHNjaGVtYSk7XG4gICAgfVxuICAgIGlmIChKU09OX1NDSEVNQV9SRUdJU1RSWS5oYXMoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIEpTT05fU0NIRU1BX1JFR0lTVFJZLmdldChzY2hlbWEpO1xuICAgIH1cbiAgICBjb25zdCBnbG9iYWwgPSBnbG9iYWxSZWdpc3RyeS5nZXQoc2NoZW1hKTtcbiAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogZ2xvYmFsLnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2xvYmFsLmRlc2NyaXB0aW9uLFxuICAgICAgICBleGFtcGxlczogQXJyYXkuaXNBcnJheShnbG9iYWwuZXhhbXBsZXMpID8gZ2xvYmFsLmV4YW1wbGVzIDogdm9pZCAwXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICAjaGFuZGxlQXJyYXlJdGVtSnNvblNjaGVtYShbcmVxdWlyZWQsIHNjaGVtYV0sIG9wdGlvbnMpIHtcbiAgICBpZiAocmVxdWlyZWQgfHwgb3B0aW9ucy5zdHJhdGVneSA9PT0gXCJpbnB1dFwiIHx8IHNjaGVtYS5kZWZhdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGlmIChzY2hlbWEgPT09IHRoaXMudW5kZWZpbmVkSnNvblNjaGVtYSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJudWxsXCIgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIC8vIHNjaGVtYSBjYW4gY29udGFpbiB7IHR5cGU6ICdudWxsJyB9IHNvIHdlIHNob3VsZCB1c2UgYW55T2YgaW5zdGVhZCBvZiBvbmVPZlxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHsgdHlwZTogXCJudWxsXCIgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbiAgI2hhbmRsZVN0cmluZ0Zvcm1hdChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSBcImd1aWRcIikge1xuICAgICAgcmV0dXJuIEpTT05TY2hlbWFGb3JtYXQuVVVJRDtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJ1cmxcIikge1xuICAgICAgcmV0dXJuIEpTT05TY2hlbWFGb3JtYXQuVVJJO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSBcImRhdGV0aW1lXCIpIHtcbiAgICAgIHJldHVybiBKU09OU2NoZW1hRm9ybWF0LkRhdGVUaW1lO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhKU09OU2NoZW1hRm9ybWF0KS5pbmNsdWRlcyhmb3JtYXQpID8gZm9ybWF0IDogdm9pZCAwO1xuICB9XG4gICNoYW5kbGVDb250ZW50RW5jb2RpbmcoY29udGVudEVuY29kaW5nKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoSlNPTlNjaGVtYUNvbnRlbnRFbmNvZGluZykuaW5jbHVkZXMoY29udGVudEVuY29kaW5nKSA/IGNvbnRlbnRFbmNvZGluZyA6IHZvaWQgMDtcbiAgfVxufVxuXG5leHBvcnQgeyBKU09OX1NDSEVNQV9JTlBVVF9SRUdJU1RSWSwgSlNPTl9TQ0hFTUFfT1VUUFVUX1JFR0lTVFJZLCBKU09OX1NDSEVNQV9SRUdJU1RSWSwgWm9kVG9Kc29uU2NoZW1hQ29udmVydGVyLCBleHBlcmltZW50YWxfWm9kU21hcnRDb2VyY2lvblBsdWdpbiB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDFdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQUksd0JBQXdDLGtCQUFFLDJCQUEyQjtBQUN2RSx3QkFBdUIsWUFBWTtBQUNuQyx3QkFBdUIsWUFBWTtBQUNuQyx3QkFBdUIsVUFBVTtBQUNqQyx3QkFBdUIsU0FBUztBQUNoQyx3QkFBdUIsU0FBUztBQUNoQyx3QkFBdUIsU0FBUztBQUNoQyxRQUFPO0dBQ04seUJBQXlCLEVBQUUsQ0FBQzs7OztBQ29RL0IsTUFBTSx1QkFBdUIsVUFBVTtBQUN2QyxNQUFNLDZCQUE2QixVQUFVO0FBQzdDLE1BQU0sOEJBQThCLFVBQVU7QUFFOUMsSUFBTSwyQkFBTixNQUErQjtDQUM3QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxZQUFZLFVBQVUsRUFBRSxFQUFFO0FBQ3hCLE9BQUssZUFBZSxRQUFRLGdCQUFnQjtBQUM1QyxPQUFLLG9CQUFvQixRQUFRLHFCQUFxQjtBQUN0RCxPQUFLLGdCQUFnQixRQUFRLGlCQUFpQixFQUFFO0FBQ2hELE9BQUssd0JBQXdCLFFBQVEseUJBQXlCLEVBQUUsS0FBSyxFQUFFLEVB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
|