sonamu 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/config.d.ts +0 -8
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +0 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -41
- package/dist/auth/audit-log/builders.d.ts +216 -0
- package/dist/auth/audit-log/builders.d.ts.map +1 -0
- package/dist/auth/audit-log/builders.js +307 -0
- package/dist/auth/audit-log/events.d.ts +143 -0
- package/dist/auth/audit-log/events.d.ts.map +1 -0
- package/dist/auth/audit-log/events.js +74 -0
- package/dist/auth/audit-log/plugin.d.ts +11 -0
- package/dist/auth/audit-log/plugin.d.ts.map +1 -0
- package/dist/auth/audit-log/plugin.js +427 -0
- package/dist/auth/audit-log-ingestor.d.ts +3 -3
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +44 -50
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -4
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +4 -4
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +111 -1
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.js +2 -2
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +14 -4
- package/dist/index.js +4 -3
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +2 -9
- package/dist/template/implementations/entry-server.template.js +3 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -1
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +2 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +3 -1
- package/dist/template/implementations/sd.template.js +3 -2
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +44 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +2 -2
- package/dist/types/types.d.ts +14 -14
- package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-C5KUjXm0.js} +46 -46
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +4 -4
- package/package.json +1 -2
- package/src/api/config.ts +0 -8
- package/src/api/sonamu.ts +1 -51
- package/src/auth/audit-log/builders.ts +791 -0
- package/src/auth/audit-log/events.ts +149 -0
- package/src/auth/audit-log/plugin.ts +913 -0
- package/src/auth/audit-log-ingestor.ts +3 -4
- package/src/auth/index.ts +2 -0
- package/src/auth/plugins/entity-definitions/admin.ts +3 -3
- package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
- package/src/bin/fixture.ts +143 -0
- package/src/database/_batch_update.ts +1 -1
- package/src/entity/entity-manager.ts +10 -3
- package/src/shared/app.shared.ts.txt +2 -3
- package/src/shared/web.shared.ts.txt +2 -2
- package/src/syncer/syncer.ts +1 -11
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +1 -0
- package/src/template/implementations/queries.template.ts +10 -1
- package/src/template/implementations/sd.template.ts +1 -1
- package/src/template/implementations/services.template.ts +62 -6
- package/src/template/zod-converter.ts +2 -1
- package/src/utils/fs-utils.ts +6 -4
- package/dist/auth/audit-log-proxy-types.d.ts +0 -23
- package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
- package/dist/auth/audit-log-proxy-types.js +0 -1
- package/src/auth/audit-log-proxy-types.ts +0 -23
|
@@ -137,11 +137,40 @@ export const ${methodName}QueryOptions = ${typeParamsDef}(${paramsDef}) => query
|
|
|
137
137
|
`.trim());
|
|
138
138
|
functions.push(`
|
|
139
139
|
export const use${inflection.camelize(hookName)} = ${typeParamsDef}(${paramsDef}${paramsDef ? ", " : ""}options?: { enabled?: boolean }) =>
|
|
140
|
-
useQuery({
|
|
140
|
+
useRefreshable(useQuery({
|
|
141
141
|
...${methodName}QueryOptions(${paramNames}),
|
|
142
142
|
...options
|
|
143
|
-
});
|
|
143
|
+
}));
|
|
144
|
+
`.trim());
|
|
145
|
+
const resourceName = api.options.resourceName;
|
|
146
|
+
const isInfiniteTarget = !!resourceName && inflection.pluralize(resourceName) === resourceName && api.methodName === "findMany";
|
|
147
|
+
if (isInfiniteTarget) {
|
|
148
|
+
const infiniteMethodName = `${methodName}Infinite`;
|
|
149
|
+
const infiniteHookName = `use${inflection.camelize(hookName)}Infinite`;
|
|
150
|
+
functions.push(`
|
|
151
|
+
export const ${infiniteMethodName}QueryOptions = ${typeParamsDef}(${paramsDef}) => infiniteQueryOptions({
|
|
152
|
+
queryKey: ['${modelName}', '${methodName}', 'infinite'${paramNames ? `, ${paramNames}` : ""}],
|
|
153
|
+
queryFn: ({ pageParam }) => ${methodName}(${paramNames ? paramNames.replace(/\brawParams\b/, "{ ...rawParams, page: pageParam }") : ""}),
|
|
154
|
+
initialPageParam: 1 as number,
|
|
155
|
+
getNextPageParam: (lastPage, allPages) => {
|
|
156
|
+
const total = (lastPage as { total?: number })?.total ?? 0;
|
|
157
|
+
const loaded = allPages.reduce(
|
|
158
|
+
(sum, p) => sum + ((p as { rows?: unknown[] })?.rows?.length ?? 0),
|
|
159
|
+
0,
|
|
160
|
+
);
|
|
161
|
+
return loaded < total ? allPages.length + 1 : undefined;
|
|
162
|
+
},
|
|
163
|
+
select: dedupeAndFlatten,
|
|
164
|
+
});
|
|
144
165
|
`.trim());
|
|
166
|
+
functions.push(`
|
|
167
|
+
export const ${infiniteHookName} = ${typeParamsDef}(${paramsDef}${paramsDef ? ", " : ""}options?: { enabled?: boolean }) =>
|
|
168
|
+
useRefreshable(useInfiniteQuery({
|
|
169
|
+
...${infiniteMethodName}QueryOptions(${paramNames}),
|
|
170
|
+
...options
|
|
171
|
+
}));
|
|
172
|
+
`.trim());
|
|
173
|
+
}
|
|
145
174
|
}
|
|
146
175
|
if (clients.includes("tanstack-mutation")) {
|
|
147
176
|
const hookName = inflection.camelize(api.methodName);
|
|
@@ -191,17 +220,22 @@ ${functions.join("\n\n")}
|
|
|
191
220
|
if (listApi) {
|
|
192
221
|
const hookName = inflection.camelize(assertDefined(listApi.options.resourceName), true);
|
|
193
222
|
const useHookName = `use${inflection.camelize(hookName)}`;
|
|
223
|
+
const useHookInfiniteName = `${useHookName}Infinite`;
|
|
194
224
|
const listParamsType = `${names.capital}ListParams`;
|
|
195
225
|
asyncIdConfigs.push(`
|
|
196
226
|
// AsyncIdConfig: ${names.capital}
|
|
197
227
|
export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}SubsetKey, ${names.capital}SubsetMapping, ${listParamsType}> = {
|
|
198
228
|
placeholderKey: "entity.${names.capital}",
|
|
199
229
|
useList: ${names.capital}Service.${useHookName},
|
|
230
|
+
useListInfinite: ${names.capital}Service.${useHookInfiniteName},
|
|
200
231
|
};
|
|
201
232
|
`.trim());
|
|
202
233
|
}
|
|
203
234
|
}
|
|
204
235
|
const builtInTypeImports = Object.keys(BUILT_IN_TYPES).filter((typeKey) => importKeys.includes(typeKey)).map((typeKey) => `type ${typeKey}`);
|
|
236
|
+
const bodyForImportCheck = namespaces.join("\n\n");
|
|
237
|
+
const needsDedupeAndFlatten = bodyForImportCheck.includes("dedupeAndFlatten");
|
|
238
|
+
const needsUseRefreshable = bodyForImportCheck.includes("useRefreshable");
|
|
205
239
|
const sonamuSharedImports = [
|
|
206
240
|
"type ListResult",
|
|
207
241
|
"type FilterQuery",
|
|
@@ -210,7 +244,9 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
|
|
|
210
244
|
"type EventHandlers",
|
|
211
245
|
"type SSEStreamOptions",
|
|
212
246
|
"useSSEStream",
|
|
213
|
-
"toFormData"
|
|
247
|
+
"toFormData",
|
|
248
|
+
...needsDedupeAndFlatten ? ["dedupeAndFlatten"] : [],
|
|
249
|
+
...needsUseRefreshable ? ["useRefreshable"] : []
|
|
214
250
|
].join(", ");
|
|
215
251
|
const bodyParts = [...namespaces, ...asyncIdConfigs];
|
|
216
252
|
return {
|
|
@@ -226,13 +262,14 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
|
|
|
226
262
|
" * @generated",
|
|
227
263
|
" * 직접 수정하지 마세요.",
|
|
228
264
|
" */",
|
|
265
|
+
"",
|
|
229
266
|
"/* oxlint-disable */",
|
|
230
267
|
"",
|
|
231
|
-
`import { queryOptions, useQuery, useMutation, type UseMutationOptions } from '@tanstack/react-query';`,
|
|
232
|
-
`import type
|
|
268
|
+
`import { queryOptions, useQuery, useInfiniteQuery, infiniteQueryOptions, useMutation, type UseMutationOptions } from '@tanstack/react-query';`,
|
|
269
|
+
`import { type AxiosProgressEvent } from 'axios';`,
|
|
233
270
|
`import qs from 'qs';`,
|
|
234
271
|
`import { ${sonamuSharedImports} } from './sonamu.shared';`,
|
|
235
|
-
`import type
|
|
272
|
+
`import { type AsyncIdConfig } from '@sonamu-kit/react-components/components';`
|
|
236
273
|
]
|
|
237
274
|
};
|
|
238
275
|
}
|
|
@@ -240,4 +277,4 @@ export const ${names.capital}AsyncIdConfig: AsyncIdConfig<${names.capital}Subset
|
|
|
240
277
|
|
|
241
278
|
//#endregion
|
|
242
279
|
export { Template__services };
|
|
243
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJpbXBvcnRLZXlzOiBzdHJpbmdbXSIsIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwidHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdIiwiZnVuY3Rpb25zOiBzdHJpbmdbXSIsInBhcmFtc1dpdGhvdXRDb250ZXh0IiwiYXBpQmFzZVVybCIsImFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7XG4gIGFwaVBhcmFtVG9Uc0NvZGUsXG4gIGFwaVBhcmFtVHlwZVRvVHNUeXBlLFxuICB1bndyYXBQcm9taXNlT25jZSxcbn0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCB6b2RUeXBlVG9Uc1R5cGVEZWYgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3NlcnZpY2VzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInNlcnZpY2VzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIjp0YXJnZXQvc3JjL3NlcnZpY2VzXCIsXG4gICAgICBwYXRoOiBgc2VydmljZXMuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJzZXJ2aWNlc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIOuqqOuNuOuzhOuhnCDqt7jro7ntmZRcbiAgICBjb25zdCBhcGlzQnlNb2RlbCA9IG5ldyBNYXA8c3RyaW5nLCBFeHRlbmRlZEFwaVtdPigpO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBuYW1lc3BhY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQHN0cmVhbSDrjbDsvZTroIjsnbTthLDqsIAg7J6I7Jy866m0IFNTRSDsiqTtirjrprwg7ZWo7IiYIOyDneyEsVxuICAgICAgICBpZiAoYXBpLnN0cmVhbU9wdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgICA6IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpfWA7XG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZVN0cmVhbSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBldmVudHNUeXBlRGVmID0gem9kVHlwZVRvVHNUeXBlRGVmKGFwaS5zdHJlYW1PcHRpb25zLmV2ZW50cyk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLDrpbwg6rCd7LK0IO2Yle2DnOuhnCDsoJXsnZggKO2DgOyeheqzvCDsi6TsoJwg6rCSIOuqqOuRkOyXkCDsgqzsmqkpXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQXNPYmplY3QgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgaW1wb3J0S2V5cyl9YCkuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwie31cIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGZ1bmN0aW9uICR7bWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZH0oXG4gIHBhcmFtczogJHtwYXJhbXNEZWZBc09iamVjdH0sXG4gIGhhbmRsZXJzOiBFdmVudEhhbmRsZXJzPCR7ZXZlbnRzVHlwZURlZn0gJiB7IGVuZD86ICgpID0+IHZvaWQgfT4sXG4gIG9wdGlvbnM6IFNTRVN0cmVhbU9wdGlvbnNcbikge1xuICByZXR1cm4gdXNlU1NFU3RyZWFtPCR7ZXZlbnRzVHlwZURlZn0+KFxcYCR7YXBpQmFzZVVybH1cXGAsIHBhcmFtcywgaGFuZGxlcnMsIG9wdGlvbnMpO1xufVxuICAgICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUodHlwZVBhcmFtLCBpbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8g66as7YS0IO2DgOyehSDsoJXsnZhcbiAgICAgICAgY29uc3QgcmV0dXJuVHlwZURlZiA9IGFwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIGFzc2VydERlZmluZWQodW53cmFwUHJvbWlzZU9uY2UoYXBpLnJldHVyblR5cGUpKSxcbiAgICAgICAgICBpbXBvcnRLZXlzLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOq4sOuzuCBVUkxcbiAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgY2xpZW50cyA9IGFwaS5vcHRpb25zLmNsaWVudHMgfHwgW107XG5cbiAgICAgICAgLy8gMS4gYXhpb3Mg7ZWo7IiYIOyDneyEsVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7J6I7Jy866m0IGdldCArIHJlc291cmNlTmFtZSDtmJXtg5zroZwg7ZWo7IiY66qFIOyDneyEsVxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gYXhpb3MtbXVsdGlwYXJ0IOyymOumrCAo7YyM7J28IOyXheuhnOuTnClcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJheGlvcy1tdWx0aXBhcnRcIikpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YUFwcGVuZCA9IGBmaWxlcy5mb3JFYWNoKGYgPT4geyBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmKTsgfSk7YDtcblxuICAgICAgICAgIGNvbnN0IG90aGVyUGFyYW1zQXBwZW5kID0gcGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgIC5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHByaW1pdGl2ZSDtg4DsnoXsnbjsp4Ag7LK07YGsXG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW0udHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIl0uaW5jbHVkZXMocGFyYW0udHlwZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlOiDsp4HsoJEgZm9ybURhdGEuYXBwZW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBmb3JtRGF0YS5hcHBlbmQoJyR7cGFyYW0ubmFtZX0nLCBTdHJpbmcoJHtwYXJhbS5uYW1lfSkpO2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiB0b0Zvcm1EYXRhIOyCrOyaqVxuICAgICAgICAgICAgICAgIHJldHVybiBgdG9Gb3JtRGF0YSgke3BhcmFtLm5hbWV9LCBmb3JtRGF0YSwgJyR7cGFyYW0ubmFtZX0nKTtgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcXG4gICAgXCIpO1xuXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQ29tbWEgPSBwYXJhbXNEZWYgIT09IFwiXCIgPyBcIiwgXCIgOiBcIlwiO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KFxuICAke3BhcmFtc0RlZn0ke3BhcmFtc0RlZkNvbW1hfVxuICBmaWxlczogRmlsZVtdLFxuICBvblVwbG9hZFByb2dyZXNzPzogKHBlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWRcbik6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAke2Zvcm1EYXRhQXBwZW5kfVxuICAke290aGVyUGFyYW1zQXBwZW5kfVxuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfSR7aGFzUGFyYW1zID8gYD9cXCR7cXMuc3RyaW5naWZ5KHsgJHtwYXJhbU5hbWVzfSB9KX1gIDogXCJcIn1cXGAsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBoYXNQYXJhbXMgPSBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogXCIke2FwaS5vcHRpb25zLmh0dHBNZXRob2R9XCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgICR7aGFzUGFyYW1zID8gYGRhdGE6IHsgJHtwYXJhbU5hbWVzfSB9LGAgOiBcIlwifVxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBxdWVyeU9wdGlvbnMgKyB1c2VRdWVyeSAodGFuc3RhY2stcXVlcnkpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSwgdHJ1ZSlcbiAgICAgICAgICAgIDogaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBxdWVyeU9wdGlvbnNcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pID0+IHF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoKSA9PiAke21ldGhvZE5hbWV9KCR7cGFyYW1OYW1lc30pXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gdXNlUXVlcnkgaG9va1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0ke1xuICAgICAgICAgICAgICBwYXJhbXNEZWYgPyBcIiwgXCIgOiBcIlwiXG4gICAgICAgICAgICB9b3B0aW9ucz86IHsgZW5hYmxlZD86IGJvb2xlYW4gfSkgPT5cbiAgdXNlUXVlcnkoe1xuICAgIC4uLiR7bWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMoJHtwYXJhbU5hbWVzfSksXG4gICAgLi4ub3B0aW9uc1xuICB9KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gdXNlTXV0YXRpb24gKHRhbnN0YWNrLW11dGF0aW9uKVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uXCIpKSB7XG4gICAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKTtcbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgJHtwYXJhbXNXaXRob3V0Q29udGV4dFxuICAgICAgICAgICAgICAgICAgLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwLnR5cGUsIFtdKX1gKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gfWBcbiAgICAgICAgICAgICAgOiBcInZvaWRcIjtcbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtTmFtZXMgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gYHBhcmFtcy4ke3AubmFtZX1gKS5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtob29rTmFtZX1NdXRhdGlvbiA9ICR7dHlwZVBhcmFtc0RlZn0oKSA9PiB1c2VNdXRhdGlvbih7XG4gIG11dGF0aW9uRm46IChwYXJhbXM6ICR7bXV0YXRpb25QYXJhbVR5cGV9KSA9PiAke21ldGhvZE5hbWV9KCR7bXV0YXRpb25QYXJhbU5hbWVzfSlcbn0pO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiB1c2VNdXRhdGlvbiB3aXRoIG11bHRpcGFydCAodGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0KVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLAg7YOA7J6FIOygleydmDogcGFyYW1zRGVm7JeQ7IScIO2DgOyeheunjCDstpTstpxcbiAgICAgICAgICAvLyBwYXJhbXNEZWYg7JiIOiBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgY29uc3QgcGFyYW1zVHlwZURlZiA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zRGVmLnNwbGl0KFwiOlwiKS5zbGljZSgxKS5qb2luKFwiOlwiKS50cmltKCkgLy8gXCJwYXJhbXM6IHsgY2F0ZWdvcnk6IHN0cmluZyB9XCIg4oaSIFwieyBjYXRlZ29yeTogc3RyaW5nIH1cIlxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBjb25zdCBtdXRhdGlvblBhcmFtVHlwZSA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gYHsgcGFyYW1zOiAke3BhcmFtc1R5cGVEZWZ9LCBmaWxlczogRmlsZVtdIH1gXG4gICAgICAgICAgICAgIDogYHsgZmlsZXM6IEZpbGVbXSB9YDtcblxuICAgICAgICAgIC8vIG11dGF0aW9uRm4g7Zi47LacIO2MjOudvOuvuO2EsFxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uRm5DYWxsID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgJHttZXRob2ROYW1lfShwYXJhbXMucGFyYW1zLCBwYXJhbXMuZmlsZXMpYFxuICAgICAgICAgICAgICA6IGAke21ldGhvZE5hbWV9KHBhcmFtcy5maWxlcylgO1xuXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtob29rTmFtZX1NdXRhdGlvbiA9ICR7dHlwZVBhcmFtc0RlZn0oXG4gIG9wdGlvbnM/OiBVc2VNdXRhdGlvbk9wdGlvbnM8JHtyZXR1cm5UeXBlRGVmfSwgRXJyb3IsICR7bXV0YXRpb25QYXJhbVR5cGV9PiAmIHtcbiAgICBvblVwbG9hZFByb2dyZXNzPzogKGU6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcbiAgfVxuKSA9PiB1c2VNdXRhdGlvbih7XG4gIG11dGF0aW9uRm46IChwYXJhbXM6ICR7bXV0YXRpb25QYXJhbVR5cGV9KSA9PiAke211dGF0aW9uRm5DYWxsfSxcbiAgcmV0cnk6IGZhbHNlLFxuICAuLi5vcHRpb25zLFxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuYW1lc3BhY2VzLnB1c2goXG4gICAgICAgIGBcbmV4cG9ydCBuYW1lc3BhY2UgJHttb2RlbE5hbWV9U2VydmljZSB7XG4ke2Z1bmN0aW9ucy5qb2luKFwiXFxuXFxuXCIpfVxufVxuICAgICAgYC50cmltKCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFzeW5jSWRDb25maWcg7IOd7ISxIChFbnRpdHnrs4TroZwpXG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBhc3luY0lkQ29uZmlnczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgZW50aXR5SWRzKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBBc3luY0lkQ29uZmln7JqpIOumrOyKpO2KuCDsobDtmowgQVBJIOywvuq4sFxuICAgICAgY29uc3QgbGlzdEFwaSA9IGFwaXNCeU1vZGVsLmdldChuYW1lcy5jYXBpdGFsKT8uZmluZCgoYXBpKSA9PiB7XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDsl4bqsbDrgpggdGFuc3RhY2stcXVlcnnrpbwg7IKs7Jqp7ZWY7KeAIOyViuuKlCBBUEnripQg7KCc7Jm4XG4gICAgICAgIGlmICghYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lIHx8ICFhcGkub3B0aW9ucy5jbGllbnRzPy5pbmNsdWRlcyhcInRhbnN0YWNrLXF1ZXJ5XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDrs7XsiJjtmJXsnbTqs6Ag66mU7ISc65Oc66qF7J20IGZpbmRNYW557J24IEFQSVxuICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWU7XG4gICAgICAgIHJldHVybiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShyZXNvdXJjZU5hbWUpID09PSByZXNvdXJjZU5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IFwiZmluZE1hbnlcIjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobGlzdEFwaSkge1xuICAgICAgICAvLyByZXNvdXJjZU5hbWXsl5DshJwgaG9vayDsnbTrpoQg7IOd7ISxICjquLDsobQg66Gc7KeB6rO8IOuPmeydvClcbiAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFzc2VydERlZmluZWQobGlzdEFwaS5vcHRpb25zLnJlc291cmNlTmFtZSksIHRydWUpO1xuICAgICAgICBjb25zdCB1c2VIb29rTmFtZSA9IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfWA7XG5cbiAgICAgICAgLy8gTGlzdFBhcmFtcyDtg4DsnoXrqoUg6rWs7ISxXG4gICAgICAgIGNvbnN0IGxpc3RQYXJhbXNUeXBlID0gYCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zYDtcblxuICAgICAgICBhc3luY0lkQ29uZmlncy5wdXNoKFxuICAgICAgICAgIGBcbi8vIEFzeW5jSWRDb25maWc6ICR7bmFtZXMuY2FwaXRhbH1cbmV4cG9ydCBjb25zdCAke25hbWVzLmNhcGl0YWx9QXN5bmNJZENvbmZpZzogQXN5bmNJZENvbmZpZzwke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5LCAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZywgJHtsaXN0UGFyYW1zVHlwZX0+ID0ge1xuICBwbGFjZWhvbGRlcktleTogXCJlbnRpdHkuJHtuYW1lcy5jYXBpdGFsfVwiLFxuICB1c2VMaXN0OiAke25hbWVzLmNhcGl0YWx9U2VydmljZS4ke3VzZUhvb2tOYW1lfSxcbn07XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQlVJTFRfSU5fVFlQRVPsl5DshJwg7IKs7Jqp65CY64qUIO2DgOyeheuTpOydhCDtmZXsnbjtlZjsl6wg64+Z7KCB7Jy866GcIGltcG9ydCDqtazshLFcbiAgICBjb25zdCBidWlsdEluVHlwZUltcG9ydHMgPSBPYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUylcbiAgICAgIC5maWx0ZXIoKHR5cGVLZXkpID0+IGltcG9ydEtleXMuaW5jbHVkZXModHlwZUtleSkpXG4gICAgICAubWFwKCh0eXBlS2V5KSA9PiBgdHlwZSAke3R5cGVLZXl9YCk7XG5cbiAgICAvLyBzb25hbXUuc2hhcmVk7JeQ7IScIGltcG9ydO2VoCDtla3rqqnrk6TsnYQg64+Z7KCB7Jy866GcIOq1rOyEsVxuICAgIGNvbnN0IHNvbmFtdVNoYXJlZEltcG9ydHMgPSBbXG4gICAgICBcInR5cGUgTGlzdFJlc3VsdFwiLFxuICAgICAgXCJ0eXBlIEZpbHRlclF1ZXJ5XCIsXG4gICAgICAuLi5idWlsdEluVHlwZUltcG9ydHMsXG4gICAgICBcImZldGNoXCIsXG4gICAgICBcInR5cGUgRXZlbnRIYW5kbGVyc1wiLFxuICAgICAgXCJ0eXBlIFNTRVN0cmVhbU9wdGlvbnNcIixcbiAgICAgIFwidXNlU1NFU3RyZWFtXCIsXG4gICAgICBcInRvRm9ybURhdGFcIixcbiAgICBdLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGJvZHkg6rWs7ISxOiBuYW1lc3BhY2VzICsgYXN5bmNJZENvbmZpZ3NcbiAgICBjb25zdCBib2R5UGFydHMgPSBbLi4ubmFtZXNwYWNlcywgLi4uYXN5bmNJZENvbmZpZ3NdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogYm9keVBhcnRzLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICBpbXBvcnRLZXlzOiBkaWZmKHVuaXF1ZShpbXBvcnRLZXlzKSwgW1xuICAgICAgICAuLi50eXBlUGFyYW1OYW1lcyxcbiAgICAgICAgXCJMaXN0UmVzdWx0XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKEJVSUxUX0lOX1RZUEVTKSxcbiAgICAgIF0pLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgcXVlcnlPcHRpb25zLCB1c2VRdWVyeSwgdXNlTXV0YXRpb24sIHR5cGUgVXNlTXV0YXRpb25PcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztgLFxuICAgICAgICBgaW1wb3J0IHR5cGUgeyBBeGlvc1Byb2dyZXNzRXZlbnQgfSBmcm9tICdheGlvcyc7YCxcbiAgICAgICAgYGltcG9ydCBxcyBmcm9tICdxcyc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11U2hhcmVkSW1wb3J0c30gfSBmcm9tICcuL3NvbmFtdS5zaGFyZWQnO2AsXG4gICAgICAgIGBpbXBvcnQgdHlwZSB7IEFzeW5jSWRDb25maWcgfSBmcm9tICdAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHMnO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7c0JBT21DO2FBRU87cUJBQ2tCO1lBRVg7WUFDQztlQUNYO29CQUMrQjtBQUV0RSxJQUFhLHFCQUFiLGNBQXdDLFNBQVM7Q0FDL0MsY0FBYztBQUNaLFFBQU0sV0FBVzs7Q0FHbkIsbUJBQW1CO0FBQ2pCLFNBQU87R0FDTCxRQUFRO0dBQ1IsTUFBTTtHQUNQOztDQUdILE9BQU8sSUFBaUM7RUFDdEMsTUFBTSxFQUFFLFNBQVMsT0FBTztFQUd4QixNQUFNLGNBQWMsSUFBSSxLQUE0QjtBQUNwRCxPQUFLLE1BQU0sT0FBTyxNQUFNO0dBQ3RC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
|
|
280
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMudGVtcGxhdGUuanMiLCJuYW1lcyI6WyJpbXBvcnRLZXlzOiBzdHJpbmdbXSIsIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwidHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdIiwiZnVuY3Rpb25zOiBzdHJpbmdbXSIsInBhcmFtc1dpdGhvdXRDb250ZXh0IiwiYXBpQmFzZVVybCIsImFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7XG4gIGFwaVBhcmFtVG9Uc0NvZGUsXG4gIGFwaVBhcmFtVHlwZVRvVHNUeXBlLFxuICB1bndyYXBQcm9taXNlT25jZSxcbn0gZnJvbSBcIi4uLy4uL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbmltcG9ydCB7IHR5cGUgRXh0ZW5kZWRBcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTLCB6b2RUeXBlVG9Uc1R5cGVEZWYgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3NlcnZpY2VzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInNlcnZpY2VzXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIjp0YXJnZXQvc3JjL3NlcnZpY2VzXCIsXG4gICAgICBwYXRoOiBgc2VydmljZXMuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJzZXJ2aWNlc1wiXSkge1xuICAgIGNvbnN0IHsgYXBpcyB9ID0gU29uYW11LnN5bmNlcjtcblxuICAgIC8vIOuqqOuNuOuzhOuhnCDqt7jro7ntmZRcbiAgICBjb25zdCBhcGlzQnlNb2RlbCA9IG5ldyBNYXA8c3RyaW5nLCBFeHRlbmRlZEFwaVtdPigpO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IGFwaS5tb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIik7XG4gICAgICBpZiAoIWFwaXNCeU1vZGVsLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgIGFwaXNCeU1vZGVsLnNldChtb2RlbE5hbWUsIFtdKTtcbiAgICAgIH1cbiAgICAgIGFwaXNCeU1vZGVsLmdldChtb2RlbE5hbWUpPy5wdXNoKGFwaSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBuYW1lc3BhY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCB0eXBlUGFyYW1OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW21vZGVsTmFtZSwgbW9kZWxBcGlzXSBvZiBhcGlzQnlNb2RlbCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiBtb2RlbEFwaXMpIHtcbiAgICAgICAgLy8gQHN0cmVhbSDrjbDsvZTroIjsnbTthLDqsIAg7J6I7Jy866m0IFNTRSDsiqTtirjrprwg7ZWo7IiYIOyDneyEsVxuICAgICAgICBpZiAoYXBpLnN0cmVhbU9wdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgICA/IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgICA6IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpfWA7XG4gICAgICAgICAgY29uc3QgbWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZVN0cmVhbSwgdHJ1ZSk7XG5cbiAgICAgICAgICBjb25zdCBldmVudHNUeXBlRGVmID0gem9kVHlwZVRvVHNUeXBlRGVmKGFwaS5zdHJlYW1PcHRpb25zLmV2ZW50cyk7XG5cbiAgICAgICAgICAvLyDtjIzrnbzrr7jthLDrpbwg6rCd7LK0IO2Yle2DnOuhnCDsoJXsnZggKO2DgOyeheqzvCDsi6TsoJwg6rCSIOuqqOuRkOyXkCDsgqzsmqkpXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQXNPYmplY3QgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgaW1wb3J0S2V5cyl9YCkuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwie31cIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGZ1bmN0aW9uICR7bWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZH0oXG4gIHBhcmFtczogJHtwYXJhbXNEZWZBc09iamVjdH0sXG4gIGhhbmRsZXJzOiBFdmVudEhhbmRsZXJzPCR7ZXZlbnRzVHlwZURlZn0gJiB7IGVuZD86ICgpID0+IHZvaWQgfT4sXG4gIG9wdGlvbnM6IFNTRVN0cmVhbU9wdGlvbnNcbikge1xuICByZXR1cm4gdXNlU1NFU3RyZWFtPCR7ZXZlbnRzVHlwZURlZn0+KFxcYCR7YXBpQmFzZVVybH1cXGAsIHBhcmFtcywgaGFuZGxlcnMsIG9wdGlvbnMpO1xufVxuICAgICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsoJXsnZhcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA9IGFwaS50eXBlUGFyYW1ldGVyc1xuICAgICAgICAgIC5tYXAoKHR5cGVQYXJhbSkgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUodHlwZVBhcmFtLCBpbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCB0eXBlUGFyYW1zRGVmID0gdHlwZVBhcmFtZXRlcnNBc1RzVHlwZSA/IGA8JHt0eXBlUGFyYW1ldGVyc0FzVHNUeXBlfT5gIDogXCJcIjtcbiAgICAgICAgdHlwZVBhcmFtTmFtZXMgPSB0eXBlUGFyYW1OYW1lcy5jb25jYXQoYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHApID0+IHRwLmlkKSk7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8g66as7YS0IO2DgOyehSDsoJXsnZhcbiAgICAgICAgY29uc3QgcmV0dXJuVHlwZURlZiA9IGFwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIGFzc2VydERlZmluZWQodW53cmFwUHJvbWlzZU9uY2UoYXBpLnJldHVyblR5cGUpKSxcbiAgICAgICAgICBpbXBvcnRLZXlzLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOq4sOuzuCBVUkxcbiAgICAgICAgY29uc3QgYXBpQmFzZVVybCA9IGAke1NvbmFtdS5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0ke2FwaS5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgY2xpZW50cyA9IGFwaS5vcHRpb25zLmNsaWVudHMgfHwgW107XG5cbiAgICAgICAgLy8gMS4gYXhpb3Mg7ZWo7IiYIOyDneyEsVxuICAgICAgICAvLyByZXNvdXJjZU5hbWXsnbQg7J6I7Jy866m0IGdldCArIHJlc291cmNlTmFtZSDtmJXtg5zroZwg7ZWo7IiY66qFIOyDneyEsVxuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lXG4gICAgICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgICAgIDogYXBpLm1ldGhvZE5hbWU7XG5cbiAgICAgICAgLy8gYXhpb3MtbXVsdGlwYXJ0IOyymOumrCAo7YyM7J28IOyXheuhnOuTnClcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJheGlvcy1tdWx0aXBhcnRcIikpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YUFwcGVuZCA9IGBmaWxlcy5mb3JFYWNoKGYgPT4geyBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmKTsgfSk7YDtcblxuICAgICAgICAgIGNvbnN0IG90aGVyUGFyYW1zQXBwZW5kID0gcGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgIC5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHByaW1pdGl2ZSDtg4DsnoXsnbjsp4Ag7LK07YGsXG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW0udHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIl0uaW5jbHVkZXMocGFyYW0udHlwZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlOiDsp4HsoJEgZm9ybURhdGEuYXBwZW5kXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBmb3JtRGF0YS5hcHBlbmQoJyR7cGFyYW0ubmFtZX0nLCBTdHJpbmcoJHtwYXJhbS5uYW1lfSkpO2A7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiB0b0Zvcm1EYXRhIOyCrOyaqVxuICAgICAgICAgICAgICAgIHJldHVybiBgdG9Gb3JtRGF0YSgke3BhcmFtLm5hbWV9LCBmb3JtRGF0YSwgJyR7cGFyYW0ubmFtZX0nKTtgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcXG4gICAgXCIpO1xuXG4gICAgICAgICAgY29uc3QgcGFyYW1zRGVmQ29tbWEgPSBwYXJhbXNEZWYgIT09IFwiXCIgPyBcIiwgXCIgOiBcIlwiO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KFxuICAke3BhcmFtc0RlZn0ke3BhcmFtc0RlZkNvbW1hfVxuICBmaWxlczogRmlsZVtdLFxuICBvblVwbG9hZFByb2dyZXNzPzogKHBlOiBBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWRcbik6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAke2Zvcm1EYXRhQXBwZW5kfVxuICAke290aGVyUGFyYW1zQXBwZW5kfVxuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfSR7aGFzUGFyYW1zID8gYD9cXCR7cXMuc3RyaW5naWZ5KHsgJHtwYXJhbU5hbWVzfSB9KX1gIDogXCJcIn1cXGAsXG4gICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgfSk7XG59XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBoYXNQYXJhbXMgPSBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogXCIke2FwaS5vcHRpb25zLmh0dHBNZXRob2R9XCIsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgICR7aGFzUGFyYW1zID8gYGRhdGE6IHsgJHtwYXJhbU5hbWVzfSB9LGAgOiBcIlwifVxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBxdWVyeU9wdGlvbnMgKyB1c2VRdWVyeSAodGFuc3RhY2stcXVlcnkpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgICAgPyBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSwgdHJ1ZSlcbiAgICAgICAgICAgIDogaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBxdWVyeU9wdGlvbnNcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pID0+IHF1ZXJ5T3B0aW9ucyh7XG4gIHF1ZXJ5S2V5OiBbJyR7bW9kZWxOYW1lfScsICcke21ldGhvZE5hbWV9JyR7cGFyYW1OYW1lcyA/IGAsICR7cGFyYW1OYW1lc31gIDogXCJcIn1dLFxuICBxdWVyeUZuOiAoKSA9PiAke21ldGhvZE5hbWV9KCR7cGFyYW1OYW1lc30pXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gdXNlUXVlcnkgaG9vayAodXNlUmVmcmVzaGFibGXroZwg656Y7ZWR7ZW0IHJlZnJlc2gvaXNSZWZyZXNoaW5n7J2EIOq4sOuzuCDsoJzqs7UpXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGhvb2tOYW1lKX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSR7XG4gICAgICAgICAgICAgIHBhcmFtc0RlZiA/IFwiLCBcIiA6IFwiXCJcbiAgICAgICAgICAgIH1vcHRpb25zPzogeyBlbmFibGVkPzogYm9vbGVhbiB9KSA9PlxuICB1c2VSZWZyZXNoYWJsZSh1c2VRdWVyeSh7XG4gICAgLi4uJHttZXRob2ROYW1lfVF1ZXJ5T3B0aW9ucygke3BhcmFtTmFtZXN9KSxcbiAgICAuLi5vcHRpb25zXG4gIH0pKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gaW5maW5pdGVRdWVyeU9wdGlvbnMgKyB1c2VJbmZpbml0ZVF1ZXJ5IChBc3luY0lkQ29uZmlnLnVzZUxpc3RJbmZpbml0ZSDrjIDsg4Eg7KGw6rG0KVxuICAgICAgICAgIC8vIOyhsOqxtDogcmVzb3VyY2VOYW1l7J20IOuzteyImO2YleydtOqzoCBtZXRob2ROYW1lID09PSBcImZpbmRNYW55XCJcbiAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWU7XG4gICAgICAgICAgY29uc3QgaXNJbmZpbml0ZVRhcmdldCA9XG4gICAgICAgICAgICAhIXJlc291cmNlTmFtZSAmJlxuICAgICAgICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUocmVzb3VyY2VOYW1lKSA9PT0gcmVzb3VyY2VOYW1lICYmXG4gICAgICAgICAgICBhcGkubWV0aG9kTmFtZSA9PT0gXCJmaW5kTWFueVwiO1xuXG4gICAgICAgICAgaWYgKGlzSW5maW5pdGVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZmluaXRlTWV0aG9kTmFtZSA9IGAke21ldGhvZE5hbWV9SW5maW5pdGVgO1xuICAgICAgICAgICAgY29uc3QgaW5maW5pdGVIb29rTmFtZSA9IGB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfUluZmluaXRlYDtcblxuICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCAke2luZmluaXRlTWV0aG9kTmFtZX1RdWVyeU9wdGlvbnMgPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSkgPT4gaW5maW5pdGVRdWVyeU9wdGlvbnMoe1xuICBxdWVyeUtleTogWycke21vZGVsTmFtZX0nLCAnJHttZXRob2ROYW1lfScsICdpbmZpbml0ZScke3BhcmFtTmFtZXMgPyBgLCAke3BhcmFtTmFtZXN9YCA6IFwiXCJ9XSxcbiAgcXVlcnlGbjogKHsgcGFnZVBhcmFtIH0pID0+ICR7bWV0aG9kTmFtZX0oJHtcbiAgICBwYXJhbU5hbWVzID8gcGFyYW1OYW1lcy5yZXBsYWNlKC9cXGJyYXdQYXJhbXNcXGIvLCBcInsgLi4ucmF3UGFyYW1zLCBwYWdlOiBwYWdlUGFyYW0gfVwiKSA6IFwiXCJcbiAgfSksXG4gIGluaXRpYWxQYWdlUGFyYW06IDEgYXMgbnVtYmVyLFxuICBnZXROZXh0UGFnZVBhcmFtOiAobGFzdFBhZ2UsIGFsbFBhZ2VzKSA9PiB7XG4gICAgY29uc3QgdG90YWwgPSAobGFzdFBhZ2UgYXMgeyB0b3RhbD86IG51bWJlciB9KT8udG90YWwgPz8gMDtcbiAgICBjb25zdCBsb2FkZWQgPSBhbGxQYWdlcy5yZWR1Y2UoXG4gICAgICAoc3VtLCBwKSA9PiBzdW0gKyAoKHAgYXMgeyByb3dzPzogdW5rbm93bltdIH0pPy5yb3dzPy5sZW5ndGggPz8gMCksXG4gICAgICAwLFxuICAgICk7XG4gICAgcmV0dXJuIGxvYWRlZCA8IHRvdGFsID8gYWxsUGFnZXMubGVuZ3RoICsgMSA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgc2VsZWN0OiBkZWR1cGVBbmRGbGF0dGVuLFxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0ICR7aW5maW5pdGVIb29rTmFtZX0gPSAke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSR7XG4gICAgICAgICAgICAgICAgcGFyYW1zRGVmID8gXCIsIFwiIDogXCJcIlxuICAgICAgICAgICAgICB9b3B0aW9ucz86IHsgZW5hYmxlZD86IGJvb2xlYW4gfSkgPT5cbiAgdXNlUmVmcmVzaGFibGUodXNlSW5maW5pdGVRdWVyeSh7XG4gICAgLi4uJHtpbmZpbml0ZU1ldGhvZE5hbWV9UXVlcnlPcHRpb25zKCR7cGFyYW1OYW1lc30pLFxuICAgIC4uLm9wdGlvbnNcbiAgfSkpO1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiB1c2VNdXRhdGlvbiAodGFuc3RhY2stbXV0YXRpb24pXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stbXV0YXRpb25cIikpIHtcbiAgICAgICAgICBjb25zdCBob29rTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUpO1xuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1UeXBlID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0XG4gICAgICAgICAgICAgICAgICAubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgW10pfWApXG4gICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9YFxuICAgICAgICAgICAgICA6IFwidm9pZFwiO1xuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1OYW1lcyA9XG4gICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgcGFyYW1zLiR7cC5uYW1lfWApLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2hvb2tOYW1lfU11dGF0aW9uID0gJHt0eXBlUGFyYW1zRGVmfSgpID0+IHVzZU11dGF0aW9uKHtcbiAgbXV0YXRpb25GbjogKHBhcmFtczogJHttdXRhdGlvblBhcmFtVHlwZX0pID0+ICR7bWV0aG9kTmFtZX0oJHttdXRhdGlvblBhcmFtTmFtZXN9KVxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIHVzZU11dGF0aW9uIHdpdGggbXVsdGlwYXJ0ICh0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnQpXG4gICAgICAgIGlmIChjbGllbnRzLmluY2x1ZGVzKFwidGFuc3RhY2stbXV0YXRpb24tbXVsdGlwYXJ0XCIpKSB7XG4gICAgICAgICAgY29uc3QgaG9va05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKTtcblxuICAgICAgICAgIC8vIO2MjOudvOuvuO2EsCDtg4DsnoUg7KCV7J2YOiBwYXJhbXNEZWbsl5DshJwg7YOA7J6F66eMIOy2lOy2nFxuICAgICAgICAgIC8vIHBhcmFtc0RlZiDsmIg6IFwicGFyYW1zOiB7IGNhdGVnb3J5OiBzdHJpbmcgfVwiIOKGkiBcInsgY2F0ZWdvcnk6IHN0cmluZyB9XCJcbiAgICAgICAgICBjb25zdCBwYXJhbXNUeXBlRGVmID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBwYXJhbXNEZWYuc3BsaXQoXCI6XCIpLnNsaWNlKDEpLmpvaW4oXCI6XCIpLnRyaW0oKSAvLyBcInBhcmFtczogeyBjYXRlZ29yeTogc3RyaW5nIH1cIiDihpIgXCJ7IGNhdGVnb3J5OiBzdHJpbmcgfVwiXG4gICAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAgIGNvbnN0IG11dGF0aW9uUGFyYW1UeXBlID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyBwYXJhbXM6ICR7cGFyYW1zVHlwZURlZn0sIGZpbGVzOiBGaWxlW10gfWBcbiAgICAgICAgICAgICAgOiBgeyBmaWxlczogRmlsZVtdIH1gO1xuXG4gICAgICAgICAgLy8gbXV0YXRpb25GbiDtmLjstpwg7YyM652866+47YSwXG4gICAgICAgICAgY29uc3QgbXV0YXRpb25GbkNhbGwgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGAke21ldGhvZE5hbWV9KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5maWxlcylgXG4gICAgICAgICAgICAgIDogYCR7bWV0aG9kTmFtZX0ocGFyYW1zLmZpbGVzKWA7XG5cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2hvb2tOYW1lfU11dGF0aW9uID0gJHt0eXBlUGFyYW1zRGVmfShcbiAgb3B0aW9ucz86IFVzZU11dGF0aW9uT3B0aW9uczwke3JldHVyblR5cGVEZWZ9LCBFcnJvciwgJHttdXRhdGlvblBhcmFtVHlwZX0+ICYge1xuICAgIG9uVXBsb2FkUHJvZ3Jlc3M/OiAoZTogQXhpb3NQcm9ncmVzc0V2ZW50KSA9PiB2b2lkO1xuICB9XG4pID0+IHVzZU11dGF0aW9uKHtcbiAgbXV0YXRpb25GbjogKHBhcmFtczogJHttdXRhdGlvblBhcmFtVHlwZX0pID0+ICR7bXV0YXRpb25GbkNhbGx9LFxuICByZXRyeTogZmFsc2UsXG4gIC4uLm9wdGlvbnMsXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5hbWVzcGFjZXMucHVzaChcbiAgICAgICAgYFxuZXhwb3J0IG5hbWVzcGFjZSAke21vZGVsTmFtZX1TZXJ2aWNlIHtcbiR7ZnVuY3Rpb25zLmpvaW4oXCJcXG5cXG5cIil9XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQXN5bmNJZENvbmZpZyDsg53shLEgKEVudGl0eeuzhOuhnClcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGFzeW5jSWRDb25maWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBlbnRpdHlJZHMpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICAgIC8vIEFzeW5jSWRDb25maWfsmqkg66as7Iqk7Yq4IOyhsO2ajCBBUEkg7LC+6riwXG4gICAgICBjb25zdCBsaXN0QXBpID0gYXBpc0J5TW9kZWwuZ2V0KG5hbWVzLmNhcGl0YWwpPy5maW5kKChhcGkpID0+IHtcbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7J20IOyXhuqxsOuCmCB0YW5zdGFjay1xdWVyeeulvCDsgqzsmqntlZjsp4Ag7JWK64qUIEFQSeuKlCDsoJzsmbhcbiAgICAgICAgaWYgKCFhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUgfHwgIWFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb3VyY2VOYW1l7J20IOuzteyImO2YleydtOqzoCDrqZTshJzrk5zrqoXsnbQgZmluZE1hbnnsnbggQVBJXG4gICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZTtcbiAgICAgICAgcmV0dXJuIGluZmxlY3Rpb24ucGx1cmFsaXplKHJlc291cmNlTmFtZSkgPT09IHJlc291cmNlTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gXCJmaW5kTWFueVwiO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChsaXN0QXBpKSB7XG4gICAgICAgIC8vIHJlc291cmNlTmFtZeyXkOyEnCBob29rIOydtOumhCDsg53shLEgKOq4sOyhtCDroZzsp4Hqs7wg64+Z7J28KVxuICAgICAgICBjb25zdCBob29rTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYXNzZXJ0RGVmaW5lZChsaXN0QXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHVzZUhvb2tOYW1lID0gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShob29rTmFtZSl9YDtcbiAgICAgICAgY29uc3QgdXNlSG9va0luZmluaXRlTmFtZSA9IGAke3VzZUhvb2tOYW1lfUluZmluaXRlYDtcblxuICAgICAgICAvLyBMaXN0UGFyYW1zIO2DgOyeheuqhSDqtazshLFcbiAgICAgICAgY29uc3QgbGlzdFBhcmFtc1R5cGUgPSBgJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXNgO1xuXG4gICAgICAgIGFzeW5jSWRDb25maWdzLnB1c2goXG4gICAgICAgICAgYFxuLy8gQXN5bmNJZENvbmZpZzogJHtuYW1lcy5jYXBpdGFsfVxuZXhwb3J0IGNvbnN0ICR7bmFtZXMuY2FwaXRhbH1Bc3luY0lkQ29uZmlnOiBBc3luY0lkQ29uZmlnPCR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXksICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nLCAke2xpc3RQYXJhbXNUeXBlfT4gPSB7XG4gIHBsYWNlaG9sZGVyS2V5OiBcImVudGl0eS4ke25hbWVzLmNhcGl0YWx9XCIsXG4gIHVzZUxpc3Q6ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLiR7dXNlSG9va05hbWV9LFxuICB1c2VMaXN0SW5maW5pdGU6ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLiR7dXNlSG9va0luZmluaXRlTmFtZX0sXG59O1xuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJVSUxUX0lOX1RZUEVT7JeQ7IScIOyCrOyaqeuQmOuKlCDtg4DsnoXrk6TsnYQg7ZmV7J247ZWY7JesIOuPmeyggeycvOuhnCBpbXBvcnQg6rWs7ISxXG4gICAgY29uc3QgYnVpbHRJblR5cGVJbXBvcnRzID0gT2JqZWN0LmtleXMoQlVJTFRfSU5fVFlQRVMpXG4gICAgICAuZmlsdGVyKCh0eXBlS2V5KSA9PiBpbXBvcnRLZXlzLmluY2x1ZGVzKHR5cGVLZXkpKVxuICAgICAgLm1hcCgodHlwZUtleSkgPT4gYHR5cGUgJHt0eXBlS2V5fWApO1xuXG4gICAgLy8gc29uYW11LnNoYXJlZOyXkOyEnCBpbXBvcnTtlaAg7ZWt66qp65Ok7J2EIOuPmeyggeycvOuhnCDqtazshLFcbiAgICAvLyBib2R5IOusuOyekOyXtOydhCDquLDspIDsnLzroZwgaW5maW5pdGUg7ZuFIOyDneyEsSDsl6zrtoAg7YyQ64uoIChmaW5kTWFueSDrs7XsiJjtmJUg67aE6riw7JeQ7ISc66eMIOywuOyhsOuQqClcbiAgICBjb25zdCBib2R5Rm9ySW1wb3J0Q2hlY2sgPSBuYW1lc3BhY2VzLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgY29uc3QgbmVlZHNEZWR1cGVBbmRGbGF0dGVuID0gYm9keUZvckltcG9ydENoZWNrLmluY2x1ZGVzKFwiZGVkdXBlQW5kRmxhdHRlblwiKTtcbiAgICBjb25zdCBuZWVkc1VzZVJlZnJlc2hhYmxlID0gYm9keUZvckltcG9ydENoZWNrLmluY2x1ZGVzKFwidXNlUmVmcmVzaGFibGVcIik7XG5cbiAgICBjb25zdCBzb25hbXVTaGFyZWRJbXBvcnRzID0gW1xuICAgICAgXCJ0eXBlIExpc3RSZXN1bHRcIixcbiAgICAgIFwidHlwZSBGaWx0ZXJRdWVyeVwiLFxuICAgICAgLi4uYnVpbHRJblR5cGVJbXBvcnRzLFxuICAgICAgXCJmZXRjaFwiLFxuICAgICAgXCJ0eXBlIEV2ZW50SGFuZGxlcnNcIixcbiAgICAgIFwidHlwZSBTU0VTdHJlYW1PcHRpb25zXCIsXG4gICAgICBcInVzZVNTRVN0cmVhbVwiLFxuICAgICAgXCJ0b0Zvcm1EYXRhXCIsXG4gICAgICAuLi4obmVlZHNEZWR1cGVBbmRGbGF0dGVuID8gW1wiZGVkdXBlQW5kRmxhdHRlblwiXSA6IFtdKSxcbiAgICAgIC4uLihuZWVkc1VzZVJlZnJlc2hhYmxlID8gW1widXNlUmVmcmVzaGFibGVcIl0gOiBbXSksXG4gICAgXS5qb2luKFwiLCBcIik7XG5cbiAgICAvLyBib2R5IOq1rOyEsTogbmFtZXNwYWNlcyArIGFzeW5jSWRDb25maWdzXG4gICAgY29uc3QgYm9keVBhcnRzID0gWy4uLm5hbWVzcGFjZXMsIC4uLmFzeW5jSWRDb25maWdzXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IGJvZHlQYXJ0cy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIFtcbiAgICAgICAgLi4udHlwZVBhcmFtTmFtZXMsXG4gICAgICAgIFwiTGlzdFJlc3VsdFwiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhCVUlMVF9JTl9UWVBFUyksXG4gICAgICBdKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHF1ZXJ5T3B0aW9ucywgdXNlUXVlcnksIHVzZUluZmluaXRlUXVlcnksIGluZmluaXRlUXVlcnlPcHRpb25zLCB1c2VNdXRhdGlvbiwgdHlwZSBVc2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO2AsXG4gICAgICAgIGBpbXBvcnQgeyB0eXBlIEF4aW9zUHJvZ3Jlc3NFdmVudCB9IGZyb20gJ2F4aW9zJztgLFxuICAgICAgICBgaW1wb3J0IHFzIGZyb20gJ3FzJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVTaGFyZWRJbXBvcnRzfSB9IGZyb20gJy4vc29uYW11LnNoYXJlZCc7YCxcbiAgICAgICAgYGltcG9ydCB7IHR5cGUgQXN5bmNJZENvbmZpZyB9IGZyb20gJ0Bzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50cyc7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztzQkFPbUM7YUFFTztxQkFDa0I7WUFFWDtZQUNDO2VBQ1g7b0JBQytCO0FBRXRFLElBQWEscUJBQWIsY0FBd0MsU0FBUztDQUMvQyxjQUFjO0FBQ1osUUFBTSxXQUFXOztDQUduQixtQkFBbUI7QUFDakIsU0FBTztHQUNMLFFBQVE7R0FDUixNQUFNO0dBQ1A7O0NBR0gsT0FBTyxJQUFpQztFQUN0QyxNQUFNLEVBQUUsU0FBUyxPQUFPO0VBR3hCLE1BQU0sY0FBYyxJQUFJLEtBQTRCO0FBQ3BELE9BQUssTUFBTSxPQUFPLE1BQU07R0FDdEIsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHO0FBQzNFLE9BQUksQ0FBQyxZQUFZLElBQUksVUFBVSxFQUFFO0FBQy9CLGdCQUFZLElBQUksV0FBVyxFQUFFLENBQUM7O0FBRWhDLGVBQVks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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CA2F3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAkHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAoEX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CA2F3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAkHrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAgGxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAmFf"}
|
|
@@ -331,12 +331,12 @@ function zodTypeToTsTypeDef(zt) {
|
|
|
331
331
|
case "number":
|
|
332
332
|
case "boolean":
|
|
333
333
|
case "bigint":
|
|
334
|
-
case "date":
|
|
335
334
|
case "null":
|
|
336
335
|
case "undefined":
|
|
337
336
|
case "any":
|
|
338
337
|
case "unknown":
|
|
339
338
|
case "never": return zt.def.type;
|
|
339
|
+
case "date": return "Date";
|
|
340
340
|
case "nullable": return `${zodTypeToTsTypeDef(zt.def.innerType)} | null`;
|
|
341
341
|
case "default": return zodTypeToTsTypeDef(zt.def.innerType);
|
|
342
342
|
case "record": {
|
|
@@ -622,4 +622,4 @@ var init_zod_converter = __esmMin((() => {
|
|
|
622
622
|
//#endregion
|
|
623
623
|
init_zod_converter();
|
|
624
624
|
export { BUILT_IN_TYPES, getZodTypeById, init_zod_converter, propNodeToZodTypeDef, propToZodType, propToZodTypeDef, zodTypeToRenderingNode, zodTypeToTsTypeDef, zodTypeToZodCode };
|
|
625
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbImlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsInoiLCJ6b2RUeXBlOiB6LlpvZFR5cGVBbnkiLCJlbGVtZW50VHlwZTogei5ab2RUeXBlIiwic3RtdDogc3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTnVsbGFibGUgPSB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT47XG50eXBlIEFueVpvZERlZmF1bHQgPSB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVW5pb24gPSB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPjtcbnR5cGUgQW55Wm9kQXJyYXkgPSB6LlpvZEFycmF5PHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9wdGlvbmFsID0gei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RUZW1wbGF0ZUxpdGVyYWwgPSB6LlpvZFRlbXBsYXRlTGl0ZXJhbDtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvQ29kZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHN0cmluZyB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIGNvbnN0IGlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaXNvRGF0ZTogXCJ6Lmlzby5kYXRlKClcIixcbiAgICBpc29UaW1lOiBcInouaXNvLnRpbWUoKVwiLFxuICAgIGlzb0RhdGV0aW1lOiBcInouaXNvLmRhdGV0aW1lKClcIixcbiAgICBpc29EdXJhdGlvbjogXCJ6Lmlzby5kdXJhdGlvbigpXCIsXG4gIH07XG5cbiAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICBjb25zdCBoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBoYXNoTWQ1OiAnei5oYXNoKFwibWQ1XCIpJyxcbiAgICBoYXNoU2hhMTogJ3ouaGFzaChcInNoYTFcIiknLFxuICAgIGhhc2hTaGEyNTY6ICd6Lmhhc2goXCJzaGEyNTZcIiknLFxuICAgIGhhc2hTaGEzODQ6ICd6Lmhhc2goXCJzaGEzODRcIiknLFxuICAgIGhhc2hTaGE1MTI6ICd6Lmhhc2goXCJzaGE1MTJcIiknLFxuICB9O1xuXG4gIGlmIChmb3JtYXQgaW4gaXNvRm9ybWF0cykge1xuICAgIHJldHVybiBpc29Gb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICBpZiAoZm9ybWF0IGluIGhhc2hGb3JtYXRzKSB7XG4gICAgcmV0dXJuIGhhc2hGb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICAvLyDquLDrs7gg7Y+s66e37J2AIHoueHh4KCkg7ZiV7YOcIChab2QgNClcbiAgcmV0dXJuIGB6LiR7Zm9ybWF0fSgpYDtcbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgLy8gSVNPIO2PrOunt+ydgCB6Lmlzby54eHgoKSDtmJXtg5xcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiaXNvRGF0ZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLmRhdGUoKTtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLnRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRGF0ZXRpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRldGltZSgpO1xuICAgIGNhc2UgXCJpc29EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHouaXNvLmR1cmF0aW9uKCk7XG4gICAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gICAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoeiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsICgpID0+IHouWm9kVHlwZT4pW2Zvcm1hdF0oKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoUgSUTroZzrtoDthLAg64+Z7KCB7Jy866GcIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICog64K07J6lIO2DgOyehShCVUlMVF9JTl9UWVBFX0lEUynsnYAg67CU66GcIOuwmO2ZmO2VmOqzoCxcbiAqIOq3uCDsmbjripQgZGlzdCDrlJTroInthqDrpqzsl5DshJwgRVNN7Jy866GcIGltcG9ydO2VmOyXrCDqsIDsoLjsmLXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRab2RUeXBlQnlJZCh6b2RUeXBlSWQ6IHN0cmluZyk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIC8vIOuCtOyepSDtg4DsnoUg7LKY66asXG4gIGlmICgoQlVJTFRfSU5fVFlQRV9JRFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHpvZFR5cGVJZCkpIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9IEJVSUxUX0lOX1RZUEVTW3pvZFR5cGVJZCBhcyBrZXlvZiB0eXBlb2YgQlVJTFRfSU5fVFlQRVNdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmcpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHoubnVtYmVyKCkpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHouYXJyYXkoei5udW1iZXIoKSkpYDtcbiAgfSBlbHNlIGlmIChpc1RzVmVjdG9yUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyBab2Qg7YOA7J6F7J2EIOywuOyhsCDsl5Tti7Dti7AgUEsg7YOA7J6F7JeQIOuUsOudvCDqsrDsoJVcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICBpZiAocGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouc3RyaW5nKClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgIGlmIChrZXkgPT09IFwiaWRcIikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWlkXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJfaWRcIikpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1ma19pZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgcmV0dXJuIFwiZW51bXNcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQpIHtcbiAgICByZXR1cm4gXCJyZWNvcmRcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBbnkgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFRlbXBsYXRlTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVmLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2DgOyehSDtjIzsi7Eg67aI6rCAICR7a2V5fSAke3pvZFR5cGUuZGVmLnR5cGV9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtHQSxTQUFTLGdCQUFn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
|
|
625
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbImlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsInoiLCJ6b2RUeXBlOiB6LlpvZFR5cGVBbnkiLCJlbGVtZW50VHlwZTogei5ab2RUeXBlIiwic3RtdDogc3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTnVsbGFibGUgPSB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT47XG50eXBlIEFueVpvZERlZmF1bHQgPSB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVW5pb24gPSB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPjtcbnR5cGUgQW55Wm9kQXJyYXkgPSB6LlpvZEFycmF5PHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9wdGlvbmFsID0gei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RUZW1wbGF0ZUxpdGVyYWwgPSB6LlpvZFRlbXBsYXRlTGl0ZXJhbDtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvQ29kZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHN0cmluZyB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIGNvbnN0IGlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaXNvRGF0ZTogXCJ6Lmlzby5kYXRlKClcIixcbiAgICBpc29UaW1lOiBcInouaXNvLnRpbWUoKVwiLFxuICAgIGlzb0RhdGV0aW1lOiBcInouaXNvLmRhdGV0aW1lKClcIixcbiAgICBpc29EdXJhdGlvbjogXCJ6Lmlzby5kdXJhdGlvbigpXCIsXG4gIH07XG5cbiAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICBjb25zdCBoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBoYXNoTWQ1OiAnei5oYXNoKFwibWQ1XCIpJyxcbiAgICBoYXNoU2hhMTogJ3ouaGFzaChcInNoYTFcIiknLFxuICAgIGhhc2hTaGEyNTY6ICd6Lmhhc2goXCJzaGEyNTZcIiknLFxuICAgIGhhc2hTaGEzODQ6ICd6Lmhhc2goXCJzaGEzODRcIiknLFxuICAgIGhhc2hTaGE1MTI6ICd6Lmhhc2goXCJzaGE1MTJcIiknLFxuICB9O1xuXG4gIGlmIChmb3JtYXQgaW4gaXNvRm9ybWF0cykge1xuICAgIHJldHVybiBpc29Gb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICBpZiAoZm9ybWF0IGluIGhhc2hGb3JtYXRzKSB7XG4gICAgcmV0dXJuIGhhc2hGb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICAvLyDquLDrs7gg7Y+s66e37J2AIHoueHh4KCkg7ZiV7YOcIChab2QgNClcbiAgcmV0dXJuIGB6LiR7Zm9ybWF0fSgpYDtcbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgLy8gSVNPIO2PrOunt+ydgCB6Lmlzby54eHgoKSDtmJXtg5xcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiaXNvRGF0ZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLmRhdGUoKTtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLnRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRGF0ZXRpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRldGltZSgpO1xuICAgIGNhc2UgXCJpc29EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHouaXNvLmR1cmF0aW9uKCk7XG4gICAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gICAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoeiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsICgpID0+IHouWm9kVHlwZT4pW2Zvcm1hdF0oKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoUgSUTroZzrtoDthLAg64+Z7KCB7Jy866GcIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICog64K07J6lIO2DgOyehShCVUlMVF9JTl9UWVBFX0lEUynsnYAg67CU66GcIOuwmO2ZmO2VmOqzoCxcbiAqIOq3uCDsmbjripQgZGlzdCDrlJTroInthqDrpqzsl5DshJwgRVNN7Jy866GcIGltcG9ydO2VmOyXrCDqsIDsoLjsmLXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRab2RUeXBlQnlJZCh6b2RUeXBlSWQ6IHN0cmluZyk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIC8vIOuCtOyepSDtg4DsnoUg7LKY66asXG4gIGlmICgoQlVJTFRfSU5fVFlQRV9JRFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHpvZFR5cGVJZCkpIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9IEJVSUxUX0lOX1RZUEVTW3pvZFR5cGVJZCBhcyBrZXlvZiB0eXBlb2YgQlVJTFRfSU5fVFlQRVNdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmcpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHoubnVtYmVyKCkpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHouYXJyYXkoei5udW1iZXIoKSkpYDtcbiAgfSBlbHNlIGlmIChpc1RzVmVjdG9yUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyBab2Qg7YOA7J6F7J2EIOywuOyhsCDsl5Tti7Dti7AgUEsg7YOA7J6F7JeQIOuUsOudvCDqsrDsoJVcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICBpZiAocGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouc3RyaW5nKClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgIGlmIChrZXkgPT09IFwiaWRcIikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWlkXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJfaWRcIikpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1ma19pZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgcmV0dXJuIFwiZW51bXNcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQpIHtcbiAgICByZXR1cm4gXCJyZWNvcmRcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBbnkgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFRlbXBsYXRlTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVmLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2DgOyehSDtjIzsi7Eg67aI6rCAICR7a2V5fSAke3pvZFR5cGUuZGVmLnR5cGV9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
package/dist/types/types.d.ts
CHANGED
|
@@ -86,11 +86,11 @@ export type BigIntegerArrayProp = CommonProp & {
|
|
|
86
86
|
* BaseSchema 생성 시 Zod의 string format validation을 적용합니다.
|
|
87
87
|
*/
|
|
88
88
|
export declare const ZodStringFormat: z.ZodEnum<{
|
|
89
|
+
uuid: "uuid";
|
|
90
|
+
email: "email";
|
|
89
91
|
base64: "base64";
|
|
90
92
|
base64url: "base64url";
|
|
91
93
|
hex: "hex";
|
|
92
|
-
uuid: "uuid";
|
|
93
|
-
email: "email";
|
|
94
94
|
url: "url";
|
|
95
95
|
httpUrl: "httpUrl";
|
|
96
96
|
hostname: "hostname";
|
|
@@ -995,11 +995,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
995
995
|
type: z.ZodLiteral<"string">;
|
|
996
996
|
length: z.ZodOptional<z.ZodNumber>;
|
|
997
997
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
998
|
+
uuid: "uuid";
|
|
999
|
+
email: "email";
|
|
998
1000
|
base64: "base64";
|
|
999
1001
|
base64url: "base64url";
|
|
1000
1002
|
hex: "hex";
|
|
1001
|
-
uuid: "uuid";
|
|
1002
|
-
email: "email";
|
|
1003
1003
|
url: "url";
|
|
1004
1004
|
httpUrl: "httpUrl";
|
|
1005
1005
|
hostname: "hostname";
|
|
@@ -1064,11 +1064,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1064
1064
|
type: z.ZodLiteral<"string[]">;
|
|
1065
1065
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1066
1066
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1067
|
+
uuid: "uuid";
|
|
1068
|
+
email: "email";
|
|
1067
1069
|
base64: "base64";
|
|
1068
1070
|
base64url: "base64url";
|
|
1069
1071
|
hex: "hex";
|
|
1070
|
-
uuid: "uuid";
|
|
1071
|
-
email: "email";
|
|
1072
1072
|
url: "url";
|
|
1073
1073
|
httpUrl: "httpUrl";
|
|
1074
1074
|
hostname: "hostname";
|
|
@@ -1731,11 +1731,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
|
|
|
1731
1731
|
type: z.ZodLiteral<"string">;
|
|
1732
1732
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1733
1733
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1734
|
+
uuid: "uuid";
|
|
1735
|
+
email: "email";
|
|
1734
1736
|
base64: "base64";
|
|
1735
1737
|
base64url: "base64url";
|
|
1736
1738
|
hex: "hex";
|
|
1737
|
-
uuid: "uuid";
|
|
1738
|
-
email: "email";
|
|
1739
1739
|
url: "url";
|
|
1740
1740
|
httpUrl: "httpUrl";
|
|
1741
1741
|
hostname: "hostname";
|
|
@@ -1800,11 +1800,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
|
|
|
1800
1800
|
type: z.ZodLiteral<"string[]">;
|
|
1801
1801
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1802
1802
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1803
|
+
uuid: "uuid";
|
|
1804
|
+
email: "email";
|
|
1803
1805
|
base64: "base64";
|
|
1804
1806
|
base64url: "base64url";
|
|
1805
1807
|
hex: "hex";
|
|
1806
|
-
uuid: "uuid";
|
|
1807
|
-
email: "email";
|
|
1808
1808
|
url: "url";
|
|
1809
1809
|
httpUrl: "httpUrl";
|
|
1810
1810
|
hostname: "hostname";
|
|
@@ -2780,11 +2780,11 @@ export declare const TemplateOptions: z.ZodObject<{
|
|
|
2780
2780
|
type: z.ZodLiteral<"string">;
|
|
2781
2781
|
length: z.ZodOptional<z.ZodNumber>;
|
|
2782
2782
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
2783
|
+
uuid: "uuid";
|
|
2784
|
+
email: "email";
|
|
2783
2785
|
base64: "base64";
|
|
2784
2786
|
base64url: "base64url";
|
|
2785
2787
|
hex: "hex";
|
|
2786
|
-
uuid: "uuid";
|
|
2787
|
-
email: "email";
|
|
2788
2788
|
url: "url";
|
|
2789
2789
|
httpUrl: "httpUrl";
|
|
2790
2790
|
hostname: "hostname";
|
|
@@ -2849,11 +2849,11 @@ export declare const TemplateOptions: z.ZodObject<{
|
|
|
2849
2849
|
type: z.ZodLiteral<"string[]">;
|
|
2850
2850
|
length: z.ZodOptional<z.ZodNumber>;
|
|
2851
2851
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
2852
|
+
uuid: "uuid";
|
|
2853
|
+
email: "email";
|
|
2852
2854
|
base64: "base64";
|
|
2853
2855
|
base64url: "base64url";
|
|
2854
2856
|
hex: "hex";
|
|
2855
|
-
uuid: "uuid";
|
|
2856
|
-
email: "email";
|
|
2857
2857
|
url: "url";
|
|
2858
2858
|
httpUrl: "httpUrl";
|
|
2859
2859
|
hostname: "hostname";
|