every-plugin 0.4.3 → 0.4.5

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