experimental-agent 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/agent-workflow.d.mts +3 -2
  2. package/dist/agent-workflow.d.ts +3 -2
  3. package/dist/agent-workflow.js +29 -29
  4. package/dist/agent-workflow.mjs +1 -2
  5. package/dist/{chunk-GJETDXOU.mjs → chunk-2SPAJ777.mjs} +5 -1
  6. package/dist/chunk-6J462JGP.mjs +1267 -0
  7. package/dist/{chunk-T2UUL6VC.mjs → chunk-E7TOPGHY.mjs} +3 -3
  8. package/dist/chunk-ILPVXRI5.mjs +2026 -0
  9. package/dist/chunk-ORE6LK2L.mjs +344 -0
  10. package/dist/chunk-W4SSZPDX.mjs +106 -0
  11. package/dist/{types-DuTc4UQW.d.mts → client-CKLwB-ES.d.mts} +730 -3
  12. package/dist/{types-DuTc4UQW.d.ts → client-CKLwB-ES.d.ts} +730 -3
  13. package/dist/{client-66JIQLSA.mjs → client-YUU54ZZH.mjs} +1 -1
  14. package/dist/{handler-BQY5SOI2.mjs → handler-LDFBSCRA.mjs} +1 -1
  15. package/dist/index.d.mts +4 -18
  16. package/dist/index.d.ts +4 -18
  17. package/dist/index.js +67 -40
  18. package/dist/index.mjs +21 -16
  19. package/dist/lifecycle-workflow.d.mts +2 -3
  20. package/dist/lifecycle-workflow.d.ts +2 -3
  21. package/dist/lifecycle-workflow.js +19 -15
  22. package/dist/lifecycle-workflow.mjs +1 -2
  23. package/dist/local-fs-handlers-SY2RDXZE.mjs +314 -0
  24. package/dist/next/loader.js +3 -3
  25. package/dist/next/loader.mjs +1 -1
  26. package/dist/next.js +3 -5
  27. package/dist/next.mjs +2 -4
  28. package/dist/{sandbox-27X2DSE3.mjs → sandbox-GPCA35PJ.mjs} +2 -3
  29. package/dist/{storage-KQYV42J4.mjs → storage-LL6IA24R.mjs} +2 -2
  30. package/package.json +2 -2
  31. package/dist/chunk-2IIWVPZB.mjs +0 -334
  32. package/dist/chunk-A63YU65A.mjs +0 -20
  33. package/dist/chunk-RDKDLHXM.mjs +0 -2031
  34. package/dist/chunk-VGJISV6O.mjs +0 -108
  35. package/dist/chunk-VS7U6SXN.mjs +0 -1261
  36. package/dist/client-DjcE0ATp.d.mts +0 -710
  37. package/dist/client-DwrDzn4_.d.ts +0 -710
  38. package/dist/local-fs-handlers-Q5W52DKV.mjs +0 -290
package/dist/index.mjs CHANGED
@@ -2,10 +2,10 @@ import "./chunk-TAXLUVIC.mjs";
2
2
  import {
3
3
  STORAGE_RPC_METHODS,
4
4
  handleStorageRpc
5
- } from "./chunk-GJETDXOU.mjs";
5
+ } from "./chunk-2SPAJ777.mjs";
6
6
  import {
7
7
  getSandbox
8
- } from "./chunk-VS7U6SXN.mjs";
8
+ } from "./chunk-6J462JGP.mjs";
9
9
  import {
10
10
  agentMessageHook,
11
11
  agentWorkflow,
@@ -16,17 +16,14 @@ import {
16
16
  computeSessionUsage,
17
17
  normalizeSkillsDirs,
18
18
  resolveApiUrl
19
- } from "./chunk-RDKDLHXM.mjs";
20
- import "./chunk-VGJISV6O.mjs";
21
- import {
22
- registerRpc
23
- } from "./chunk-A63YU65A.mjs";
19
+ } from "./chunk-ILPVXRI5.mjs";
20
+ import "./chunk-W4SSZPDX.mjs";
24
21
  import "./chunk-64THY7Y7.mjs";
25
22
  import {
26
23
  DEFAULT_NAMESPACE,
27
24
  LOCAL_STORAGE_VERSION,
28
25
  getStorage
29
- } from "./chunk-2IIWVPZB.mjs";
26
+ } from "./chunk-ORE6LK2L.mjs";
30
27
  import {
31
28
  MessageNotFoundError,
32
29
  SandboxError,
@@ -73,6 +70,7 @@ async function dispatch(method, params, context, name) {
73
70
  storageConfig,
74
71
  getStorageInstance,
75
72
  getStorageHandlers,
73
+ rpc,
76
74
  overrides
77
75
  } = context;
78
76
  switch (method) {
@@ -270,10 +268,11 @@ async function dispatch(method, params, context, name) {
270
268
  status: 400
271
269
  };
272
270
  }
273
- const sandboxInstance = await getSandbox({
271
+ const sandboxInstance = getSandbox({
274
272
  sandboxRecord: p.sandboxRecord,
275
273
  storageConfig,
276
- storage: getStorageInstance()
274
+ storage: getStorageInstance(),
275
+ rpc
277
276
  });
278
277
  const toolContext = {
279
278
  session: p.session,
@@ -412,7 +411,7 @@ async function handleStorageRequest({
412
411
  switch (config.type) {
413
412
  case "local": {
414
413
  const handlers = await getStorageHandlers(name);
415
- const { handleStorageRpc: handleStorageRpc2 } = await import("./handler-BQY5SOI2.mjs");
414
+ const { handleStorageRpc: handleStorageRpc2 } = await import("./handler-LDFBSCRA.mjs");
416
415
  return handleStorageRpc2(request, handlers);
417
416
  }
418
417
  case "vercel": {
@@ -518,6 +517,9 @@ function toMessageAndParts({
518
517
  messageId = input.id;
519
518
  }
520
519
  const now = Date.now();
520
+ if (input.id) {
521
+ messageId = input.id;
522
+ }
521
523
  return {
522
524
  message: {
523
525
  sessionId,
@@ -579,7 +581,7 @@ var agent = (options) => {
579
581
  if (!storageHandlersPromise) {
580
582
  storageHandlersPromise = (async () => {
581
583
  const { join } = await import("path");
582
- const { createFilesystemHandlers } = await import("./local-fs-handlers-Q5W52DKV.mjs");
584
+ const { createFilesystemHandlers } = await import("./local-fs-handlers-SY2RDXZE.mjs");
583
585
  const basePath = storageConfig.path ?? ".agent-storage";
584
586
  const fullPath = join(basePath, name, LOCAL_STORAGE_VERSION);
585
587
  return createFilesystemHandlers(fullPath);
@@ -633,6 +635,7 @@ var agent = (options) => {
633
635
  storageConfig,
634
636
  sandboxRecord,
635
637
  storage: getStorageInstance(),
638
+ rpc: agentObj.rpc,
636
639
  setup: resolvedSetup,
637
640
  onRestart: resolvedOnRestart
638
641
  });
@@ -645,6 +648,7 @@ var agent = (options) => {
645
648
  storageConfig,
646
649
  sandboxRecord: existingRecord,
647
650
  storage: getStorageInstance(),
651
+ rpc: agentObj.rpc,
648
652
  setup: resolvedSetup,
649
653
  onRestart: resolvedOnRestart
650
654
  });
@@ -814,7 +818,8 @@ var agent = (options) => {
814
818
  }
815
819
  const agentInput = {
816
820
  storageConfig,
817
- sessionId
821
+ sessionId,
822
+ rpc: agentObj.rpc
818
823
  };
819
824
  const event = {
820
825
  assistantMessageId,
@@ -1099,6 +1104,7 @@ var agent = (options) => {
1099
1104
  storageConfig,
1100
1105
  getStorageInstance,
1101
1106
  getStorageHandlers,
1107
+ rpc: agentObj.rpc,
1102
1108
  overrides
1103
1109
  };
1104
1110
  const result = await dispatch(method, params, dispatchContext, name);
@@ -1132,7 +1138,6 @@ export {
1132
1138
  StorageError,
1133
1139
  agent,
1134
1140
  builtinToolNames,
1135
- handleStorageRpc,
1136
- registerRpc
1141
+ handleStorageRpc
1137
1142
  };
1138
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC50cyIsICIuLi9zcmMvcnBjLWRpc3BhdGNoLnRzIiwgIi4uL3NyYy91dGlscy9tZXNzYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBnZXRWZXJjZWxPaWRjVG9rZW5TeW5jIH0gZnJvbSBcIkB2ZXJjZWwvb2lkY1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVUlNZXNzYWdlU3RyZWFtLFxuICB0eXBlIEdhdGV3YXlNb2RlbElkLFxuICB0eXBlIEluZmVyVG9vbElucHV0LFxuICB0eXBlIEluZmVyVUlUb29scyxcbiAgdHlwZSBNb2RlbE1lc3NhZ2UsXG4gIHR5cGUgVG9vbFNldCxcbiAgdHlwZSBVSU1lc3NhZ2UsXG4gIHR5cGUgVUlNZXNzYWdlQ2h1bmssXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYWxsIH0gZnJvbSBcImJldHRlci1hbGxcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyBnZXRSdW4sIHN0YXJ0IH0gZnJvbSBcIndvcmtmbG93L2FwaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZ2VudElucHV0LFxuICB0eXBlIEFnZW50TWVzc2FnZUlucHV0LFxuICBhZ2VudE1lc3NhZ2VIb29rLFxuICBhZ2VudFdvcmtmbG93LFxuICBhcHByb3ZhbEhvb2ssXG59IGZyb20gXCIuL2FnZW50LXdvcmtmbG93XCI7XG5pbXBvcnQge1xuICBTYW5kYm94Tm90Rm91bmRFcnJvcixcbiAgU2Vzc2lvbkVycm9yLFxuICBTZXNzaW9uTm90Rm91bmRFcnJvcixcbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4vZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBEaXNwYXRjaENvbnRleHQsXG4gIGRpc3BhdGNoLFxuICB0eXBlIEhvb2tTdGF0dXNQYXJhbXMsXG4gIHR5cGUgSG9va1N0YXR1c1Jlc3VsdCxcbiAgdHlwZSBIb29rVG9vbEFmdGVyUGFyYW1zLFxuICB0eXBlIEhvb2tUb29sQWZ0ZXJSZXN1bHQsXG4gIHR5cGUgSG9va1Rvb2xCZWZvcmVQYXJhbXMsXG4gIHR5cGUgSG9va1Rvb2xCZWZvcmVSZXN1bHQsXG4gIHR5cGUgVG9vbE1ldGFkYXRhLFxuICB0eXBlIFRvb2xzRXhlY3V0ZVBhcmFtcyxcbiAgdHlwZSBUb29sc05lZWRzQXBwcm92YWxQYXJhbXMsXG4gIHR5cGUgVG9vbHNOZWVkc0FwcHJvdmFsUmVzdWx0LFxufSBmcm9tIFwiLi9ycGMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7IGdldFNhbmRib3ggfSBmcm9tIFwiLi9zYW5kYm94XCI7XG5pbXBvcnQgdHlwZSB7IE9uUmVzdGFydCwgU2FuZGJveFNldHVwIH0gZnJvbSBcIi4vc2FuZGJveC90eXBlc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplU2tpbGxzRGlycyB9IGZyb20gXCIuL3NraWxscy9wYXJzZXJcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxzRGlyIH0gZnJvbSBcIi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQge1xuICB0eXBlIFN0b3JhZ2UgYXMgQWdlbnRTdG9yYWdlLFxuICBERUZBVUxUX05BTUVTUEFDRSxcbiAgZ2V0U3RvcmFnZSxcbiAgTE9DQUxfU1RPUkFHRV9WRVJTSU9OLFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgUGFydCxcbiAgdHlwZSBTYW5kYm94Q29uZmlnLFxuICB0eXBlIFNlc3Npb24sXG4gIHR5cGUgU3RvcmFnZUNvbmZpZyxcbiAgdHlwZSBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG4gIHR5cGUgU3RvcmFnZU1ldGhvZHMsXG4gIHR5cGUgVHlwZWRTdG9yYWdlLFxufSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgYnVpbHRJblRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IHRvTWVzc2FnZUFuZFBhcnRzIH0gZnJvbSBcIi4vdXRpbHMvbWVzc2FnZVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4vdXRpbHMvdWlcIjtcbmltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4vdXRpbHMvdXNhZ2VcIjtcblxuZXhwb3J0IHR5cGUgU2VuZElucHV0ID1cbiAgfCBzdHJpbmdcbiAgfCB7IHJvbGU/OiBVSU1lc3NhZ2VbXCJyb2xlXCJdOyBwYXJ0czogVUlNZXNzYWdlW1wicGFydHNcIl07IGlkPzogc3RyaW5nIH07XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3JzIGVtaXR0ZWQgb3ZlciB0aGUgc3RyZWFtIGR1cmluZyBsb25nLXJ1bm5pbmcgcGhhc2VzLlxuICogRGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgYXMgYGRhdGEtc3RhdHVzYCBjaHVua3Mgd2l0aCBgdHJhbnNpZW50OiB0cnVlYCBcdTIwMTQgbm90IHBlcnNpc3RlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRTdGF0dXMgPVxuICB8IHsgdHlwZTogXCJzYW5kYm94LXNldHVwXCIgfVxuICB8IHsgdHlwZTogXCJzYW5kYm94LXNldHVwLWNvbGRcIiB9XG4gIHwgeyB0eXBlOiBcImxvYWRpbmctc2tpbGxzXCIgfVxuICB8IHsgdHlwZTogXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiIH1cbiAgfCB7IHR5cGU6IFwibmVlZHMtYXBwcm92YWxcIiB9XG4gIHwgeyB0eXBlOiBcInRoaW5raW5nXCIgfVxuICB8IHsgdHlwZTogXCJjdXN0b21cIjsgc3RhdHVzOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBdWdtZW50ZWQgYFJlYWRhYmxlU3RyZWFtYCByZXR1cm5lZCBieSBgc2Vzc2lvbi5zdHJlYW0oKWAuXG4gKiBQYXNzZXMgYGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1gIGFuZCB3b3JrcyB3aXRoIGBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KWAuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50U3RyZWFtID0gUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+ICYge1xuICAvKiogV3JpdGUgYSB0eXBlZCBzdGF0dXMgdXBkYXRlIHRvIHRoZSBzdHJlYW0gKHRyYW5zaWVudCwgbm90IHBlcnNpc3RlZCkuICovXG4gIHdyaXRlU3RhdHVzOiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogRGF0YSBwYXJ0IHR5cGVzIGVtaXR0ZWQgYnkgZXZlcnkgYWdlbnQgb3ZlciB0aGUgc3RyZWFtLlxuICogVXNlZCBhcyB0aGUgYERBVEFfUEFSVFNgIGdlbmVyaWMgZm9yIGBVSU1lc3NhZ2VgLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vKipcbiAqIEluZmVyIGEgdHlwZWQgVUlNZXNzYWdlIGZyb20gYW4gYWdlbnQgaW5zdGFuY2UuXG4gKiBUb29sIHBhcnRzIGFyZSBkaXNjcmltaW5hdGVkIGJ5IGB0eXBlOiBcInRvb2wtJHtuYW1lfVwiYCB3aXRoIHR5cGVkIGlucHV0L291dHB1dC5cbiAqIERhdGEgcGFydHMgaW5jbHVkZSBgZGF0YS1zdGF0dXNgIHdpdGggdHlwZWQgYEFnZW50U3RhdHVzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IG15QWdlbnQgPSBhZ2VudCh7IHRvb2xzOiB7IG15VG9vbDogdG9vbCh7Li4ufSkgfSB9KTtcbiAqIHR5cGUgTXlNZXNzYWdlID0gdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZTtcbiAqIC8vIE15TWVzc2FnZS5wYXJ0cyBpbmNsdWRlcyB7IHR5cGU6IFwidG9vbC1teVRvb2xcIjsgaW5wdXQ6IE15SW5wdXQ7IG91dHB1dDogTXlPdXRwdXQ7IC4uLiB9XG4gKiAvLyBvbkRhdGEgY2FsbGJhY2sgcmVjZWl2ZXMgeyB0eXBlOiBcImRhdGEtc3RhdHVzXCI7IGRhdGE6IEFnZW50U3RhdHVzIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gID8gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gIDogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzPjtcblxudHlwZSBUb29sTmFtZTxUb29scz4gPSBFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lO1xuXG50eXBlIFRvb2xJbnB1dDxUb29scywgSz4gPSBLIGV4dGVuZHMgQnVpbHRJblRvb2xOYW1lXG4gID8gSW5mZXJUb29sSW5wdXQ8KHR5cGVvZiBidWlsdEluVG9vbHMpW0tdPlxuICA6IEsgZXh0ZW5kcyBrZXlvZiBUb29sc1xuICAgID8gVG9vbHNbS10gZXh0ZW5kcyBpbXBvcnQoXCJhaVwiKS5Ub29sXG4gICAgICA/IEluZmVyVG9vbElucHV0PFRvb2xzW0tdPlxuICAgICAgOiB1bmtub3duXG4gICAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBOZWVkc0FwcHJvdmFsTWFwPFRvb2xzPiA9IHtcbiAgW0sgaW4gVG9vbE5hbWU8VG9vbHM+XT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKFxuICAgICAgICBpbnB1dDogVG9vbElucHV0PFRvb2xzLCBLPixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICAgIH1cbiAgICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xufTtcblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2FuIGJlIHNldCBwZXItc2Vzc2lvbiwgb3ZlcnJpZGluZyBhZ2VudC1sZXZlbCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk9wdGlvbnM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4gPSB7XG4gIC8qKiBUaGUgQUkgbW9kZWwgdG8gdXNlLiAqL1xuICBtb2RlbD86IEdhdGV3YXlNb2RlbElkO1xuICAvKiogU3lzdGVtIHByb21wdCBmb3IgdGhlIEFJIG1vZGVsLiAqL1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIC8qKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gb3IgSUQuIElmIHN0cmluZywgdXNlcyBhcyBzYW5kYm94IElEIHdpdGggaXRzIGNvbmZpZy4gKi9cbiAgc2FuZGJveD86XG4gICAgfCAoU2FuZGJveENvbmZpZyAmIHsgc2V0dXA/OiBTYW5kYm94U2V0dXA7IG9uUmVzdGFydD86IE9uUmVzdGFydCB9KVxuICAgIHwgc3RyaW5nO1xuICAvKiogS2V5LXZhbHVlIG1ldGFkYXRhIHRhZ3MgZm9yIHRoZSBzZXNzaW9uLiAqL1xuICB0YWdzPzogVFRhZ3M7XG4gIC8qKiBEaXJlY3RvcnkgY29udGFpbmluZyBza2lsbCBkZWZpbml0aW9ucyBmb3IgdGhlIGFnZW50LiAqL1xuICBza2lsbHNEaXI/OiBTa2lsbHNEaXI7XG4gIC8qKlxuICAgKiBOYW1lcyBvZiB0b29scyB0byBhY3RpdmF0ZSBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYWdlbnQtbGV2ZWwgdG9vbHMgYXJlIGFjdGl2ZS5cbiAgICogVXNlIHRoaXMgdG8gcmVzdHJpY3Qgd2hpY2ggdG9vbHMgYXJlIGF2YWlsYWJsZSBwZXItc2Vzc2lvbi5cbiAgICovXG4gIGFjdGl2ZVRvb2xzPzogKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW107XG4gIC8qKiBHZW5lcmF0aW9uIG9wdGlvbnMgKHRlbXBlcmF0dXJlLCBtYXhTdGVwcywgZXRjLikuIE92ZXJyaWRlcyBhZ2VudC1sZXZlbCBkZWZhdWx0cy4gKi9cbiAgZ2VuZXJhdGlvbj86IEdlbmVyYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PiA9IFBpY2s8XG4gIFNlc3Npb25PcHRpb25zPFRvb2xzPixcbiAgXCJtb2RlbFwiIHwgXCJzeXN0ZW1cIiB8IFwic2tpbGxzRGlyXCIgfCBcImFjdGl2ZVRvb2xzXCIgfCBcImdlbmVyYXRpb25cIlxuPjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIGFnZW50IGluc3RhbmNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgbXlBZ2VudCA9IGFnZW50KHtcbiAqICAgbW9kZWw6IFwiYW50aHJvcGljL2NsYXVkZS1vcHVzLTQuNVwiLFxuICogICBzeXN0ZW06IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50Li4uXCIsXG4gKiAgIHRhZ3NTY2hlbWE6IHoub2JqZWN0KHsgdXNlcklkOiB6LnN0cmluZygpIH0pLFxuICogICBjb250ZXh0U2NoZW1hOiB6Lm9iamVjdCh7IGF1dGhUb2tlbjogei5zdHJpbmcoKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUVGFncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuPiA9IHtcbiAgLyoqXG4gICAqIEFnZW50IG5hbWUuIFVzZWQgdG8gaXNvbGF0ZSBzdG9yYWdlIGRhdGEgLSBkaWZmZXJlbnQgbmFtZXMgaGF2ZSBzZXBhcmF0ZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBcImRlZmF1bHRcIlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JhZ2UgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiAtIGB7IHR5cGU6IFwibG9jYWxcIiB9YCAtIGZpbGVzeXN0ZW0gc3RvcmFnZSAoZGV2KVxuICAgKiAtIGB7IHR5cGU6IFwidmVyY2VsXCIgfWAgLSBWZXJjZWwgbWFuYWdlZCBzdG9yYWdlIChwcm9kKVxuICAgKiAtIGB7IHR5cGU6IFwiY3VzdG9tXCIsIHVybDogXCIuLi5cIiB9YCAtIGN1c3RvbSBIVFRQIGJhY2tlbmRcbiAgICogQGRlZmF1bHQgSW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudDogYHsgdHlwZTogXCJ2ZXJjZWxcIiB9YCB3aGVuIGBWRVJDRUxfT0lEQ19UT0tFTmAgaXMgc2V0LCBgeyB0eXBlOiBcImxvY2FsXCIgfWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBhZ2VudC5cbiAgICogVGhlc2UgYXJlIGV4cG9zZWQgdmlhIHRoZSBSUEMgaGFuZGxlciBhbmQgY2FsbGVkIG92ZXIgSFRUUC5cbiAgICovXG4gIHRvb2xzPzogVG9vbHM7XG4gIC8qKlxuICAgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIGFnZW50IG9wZXJhdGlvbnMuXG4gICAqL1xuICBob29rcz86IEFnZW50SG9va3M7XG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHNlc3Npb24gdGFncy4gQWxsIHNlc3Npb25zIHNoYXJlIHRoaXMgc2NoZW1hLlxuICAgKiBUYWdzIGFyZSBwZXJzaXN0ZWQgaW4gc3RvcmFnZSBhbmQgc3Vydml2ZSBhY3Jvc3MgcmVxdWVzdHMuXG4gICAqL1xuICB0YWdzU2NoZW1hPzogei5ab2RUeXBlPFRUYWdzPjtcbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdHJhbnNpZW50IHRvb2wgY29udGV4dC4gUGFzc2VkIHBlci1yZXF1ZXN0IHZpYSBzZW5kKCkuXG4gICAqIE5PVCBwZXJzaXN0ZWQgLSB1c2UgZm9yIHNlY3JldHMgbGlrZSBhdXRoIHRva2Vucy5cbiAgICovXG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICAvKipcbiAgICogQXBwcm92YWwgcnVsZXMgZm9yIHRvb2xzIHlvdSBkb24ndCBvd24gKGJ1aWx0LWluIG9yIHRoaXJkLXBhcnR5KS5cbiAgICogTWFwcyB0b29sIG5hbWVzIHRvIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRvIGFzay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogbmVlZHNBcHByb3ZhbDoge1xuICAgKiAgIEJhc2g6IChpbnB1dCkgPT4gaW5wdXQuY29tbWFuZC5zdGFydHNXaXRoKFwicm1cIiksXG4gICAqICAgV3JpdGU6IHRydWUsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIC8qKlxuICAgKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25hbCBzZXR1cCBhbmQgcmVzdGFydCBob29rcy5cbiAgICpcbiAgICogLSBgc2V0dXAua2V5YDogZXhwbGljaXQgc3RyaW5nIHRvIGNvbnRyb2wgc25hcHNob3QgaW52YWxpZGF0aW9uIChidW1wIHRvIHJlLXJ1bilcbiAgICogLSBgc2V0dXAucnVuYDogYXN5bmMgZnVuY3Rpb24gdGhhdCBydW5zIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc2FuZGJveCwgdGhlbiBnZXRzIHNuYXBzaG90dGVkXG4gICAqIC0gYG9uUmVzdGFydGA6IGFzeW5jIGZ1bmN0aW9uIHRoYXQgcnVucyBldmVyeSB0aW1lIGEgc2FuZGJveCByZXN1bWVzIGZyb20gYSBzbmFwc2hvdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBzYW5kYm94OiB7XG4gICAqICAgdHlwZTogXCJ2ZXJjZWxcIixcbiAgICogICBzZXR1cDoge1xuICAgKiAgICAga2V5OiBcImRldi1lbnYtdjNcIixcbiAgICogICAgIHJ1bjogYXN5bmMgKHNhbmRib3gpID0+IHtcbiAgICogICAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJucG1cIiwgYXJnczogW1wiaVwiLCBcIi1nXCIsIFwidmVyY2VsXCJdIH0pXG4gICAqICAgICB9LFxuICAgKiAgIH0sXG4gICAqICAgb25SZXN0YXJ0OiBhc3luYyAoc2FuZGJveCkgPT4ge1xuICAgKiAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJiYXNoXCIsIGFyZ3M6IFtcIi1jXCIsIFwibnBtIHJ1biBkZXYgJlwiXSB9KVxuICAgKiAgIH0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzYW5kYm94PzpcbiAgICB8IChTYW5kYm94Q29uZmlnICYgeyBzZXR1cD86IFNhbmRib3hTZXR1cDsgb25SZXN0YXJ0PzogT25SZXN0YXJ0IH0pXG4gICAgfCBzdHJpbmc7XG59ICYgT21pdDxTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+LCBcInRhZ3NcIiB8IFwic2FuZGJveFwiPjtcblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHNlc3Npb24vc2FuZGJveCB0YWdzLiBVc2VkIGZvciBnZW5lcmljIGNvbnN0cmFpbnRzLlxuICogRm9yIGFnZW50LWxldmVsIHRhZyB2YWxpZGF0aW9uLCB1c2UgYHRhZ3NTY2hlbWFgIG9wdGlvbiB3aXRoIGEgem9kIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgVGFnc1NjaGVtYSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgYWdlbnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRIb29rcyA9IHtcbiAgLyoqIENhbGxlZCBiZWZvcmUgYSB0b29sIGlzIGV4ZWN1dGVkLiBDYW4gbW9kaWZ5IGlucHV0IG9yIHRocm93IHRvIGJsb2NrLiAqL1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIGFmdGVyIGEgdG9vbCBpcyBleGVjdXRlZC4gQ2FuIG1vZGlmeSByZXN1bHQuICovXG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFnZW50IGVtaXRzIGEgdHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3IuICovXG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogUlBDIHJlcXVlc3QgYm9keSBmb3IgYWdlbnQgaGFuZGxlci5cbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1ldGhvZGAgZm9yIHR5cGUtc2FmZSBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50UnBjUmVxdWVzdCA9IHtcbiAgW0sgaW4ga2V5b2YgQWdlbnRScGNNZXRob2RzXToge1xuICAgIG1ldGhvZDogSztcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXTtcbiAgfTtcbn1ba2V5b2YgQWdlbnRScGNNZXRob2RzXTtcblxuLyoqXG4gKiBSUEMgcmVzcG9uc2UgdHlwZSBmb3IgZGlzcGF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1Jlc3VsdDxUID0gdW5rbm93bj4gPVxuICB8IHsgcmVzdWx0OiBUIH1cbiAgfCB7IGVycm9yOiB7IGNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07IHN0YXR1cz86IG51bWJlciB9O1xuXG4vKipcbiAqIERpcmVjdCBSUEMgcGF5bG9hZCBmb3Igc3RlcCBmdW5jdGlvbiBjYWxscyAobm8gSFRUUCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1BheWxvYWQgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXJhbXM6IHVua25vd247XG59O1xuXG4vKipcbiAqIEFsbCBSUEMgbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIGFnZW50IGhhbmRsZXIuXG4gKiBDb21iaW5lcyB0b29scyBtZXRob2RzLCBob29rcywgYW5kIHN0b3JhZ2UgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2RzID0ge1xuICBcInRvb2xzLmxpc3RcIjogeyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjsgcmVzdWx0OiBUb29sTWV0YWRhdGFbXSB9O1xuICBcInRvb2xzLmV4ZWN1dGVcIjogeyBwYXJhbXM6IFRvb2xzRXhlY3V0ZVBhcmFtczsgcmVzdWx0OiB1bmtub3duIH07XG4gIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgcGFyYW1zOiBUb29sc05lZWRzQXBwcm92YWxQYXJhbXM7XG4gICAgcmVzdWx0OiBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQ7XG4gIH07XG4gIFwiaG9vay50b29sLmJlZm9yZVwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtcztcbiAgICByZXN1bHQ6IEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICB9O1xuICBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgfTtcbiAgXCJob29rLnN0YXR1c1wiOiB7XG4gICAgcGFyYW1zOiBIb29rU3RhdHVzUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1N0YXR1c1Jlc3VsdDtcbiAgfTtcbn0gJiBTdG9yYWdlTWV0aG9kcztcblxuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2ROYW1lID0ga2V5b2YgQWdlbnRScGNNZXRob2RzO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIGZvciBSUEMgb3ZlcnJpZGUgaGFuZGxlcnMuXG4gKiAtIGB7IG9rOiB0cnVlOyByZXN1bHQ6IFQgfWAgLSByZXR1cm4gdGhpcyByZXN1bHRcbiAqIC0gYHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH1gIC0gcmV0dXJuIHRoaXMgZXJyb3JcbiAqIC0gYG51bGxgIC0gdXNlIGRlZmF1bHQgaGFuZGxlclxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY1Jlc3VsdDxUPiA9XG4gIHwgeyBvazogdHJ1ZTsgcmVzdWx0OiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9XG4gIHwgbnVsbDtcblxuLyoqXG4gKiBPdmVycmlkZSBoYW5kbGVycyBmb3IgYWdlbnQgUlBDIG1ldGhvZHMuXG4gKiBFYWNoIG1ldGhvZCBjYW4gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4uXG4gKiBSZXR1cm4gYG51bGxgIHRvIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY092ZXJyaWRlcyA9IHtcbiAgW0sgaW4gQWdlbnRScGNNZXRob2ROYW1lXT86IChcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXVxuICApID0+IFByb21pc2U8QWdlbnRScGNSZXN1bHQ8QWdlbnRScGNNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5jb25zdCBpc1ZlcmNlbCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQm9vbGVhbihnZXRWZXJjZWxPaWRjVG9rZW5TeW5jKCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZ2VudCA9IDxcbiAgVG9vbHMgZXh0ZW5kcyB7fSxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4oXG4gIG9wdGlvbnM6IEFnZW50T3B0aW9uczxUb29scywgVFRhZ3MsIFRDb250ZXh0PlxuKSA9PiB7XG4gIGNvbnN0IGFnZW50U2VjcmV0ID0gcHJvY2Vzcy5lbnYuQUdFTlRfU0VDUkVUO1xuICBpZiAoIWFnZW50U2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBR0VOVF9TRUNSRVQgZW52IHZhciBpcyByZXF1aXJlZC4gVXNlIHdpdGhBZ2VudCgpIG9yIHNldCBpdCBtYW51YWxseS5cIlxuICAgICk7XG4gIH1cblxuICBjb25zdCBiYXNlU3RvcmFnZUNvbmZpZyA9XG4gICAgb3B0aW9ucy5zdG9yYWdlID8/XG4gICAgKChpc1ZlcmNlbCgpXG4gICAgICA/IHsgdHlwZTogXCJ2ZXJjZWxcIiB9XG4gICAgICA6IHsgdHlwZTogXCJsb2NhbFwiIH0pIHNhdGlzZmllcyBTdG9yYWdlQ29uZmlnKTtcbiAgY29uc3Qgc3RvcmFnZUNvbmZpZzogU3RvcmFnZUNvbmZpZyA9IHtcbiAgICAuLi5iYXNlU3RvcmFnZUNvbmZpZyxcbiAgICBuYW1lOiBvcHRpb25zLm5hbWUgPz8gYmFzZVN0b3JhZ2VDb25maWcubmFtZSxcbiAgfTtcblxuICAvKipcbiAgICogU3RvcmFnZSBpcyBpbml0aWFsaXplZCBsYXppbHkuXG4gICAqIFVzZXMgYWdlbnRPYmoucnBjIHdoaWNoIGlzIHdpcmVkIHVwIGJ5IHRoZSBsb2FkZXIgY2FsbGluZyBfX2luaXRBZ2VudC5cbiAgICovXG4gIGxldCBfc3RvcmFnZTogQWdlbnRTdG9yYWdlIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGdldFN0b3JhZ2VJbnN0YW5jZSA9ICgpOiBBZ2VudFN0b3JhZ2UgPT4ge1xuICAgIGlmICghX3N0b3JhZ2UpIHtcbiAgICAgIF9zdG9yYWdlID0gZ2V0U3RvcmFnZSh7XG4gICAgICAgIGNvbmZpZzogc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgcnBjOiBhZ2VudE9iai5ycGMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIF9zdG9yYWdlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBMYXp5LWluaXRpYWxpemVkIHN0b3JhZ2UgaGFuZGxlcnMgZm9yIGxvY2FsIHN0b3JhZ2UuXG4gICAqIENyZWF0ZWQgb24gZmlyc3Qgc3RvcmFnZSBSUEMgcmVxdWVzdC5cbiAgICovXG4gIGxldCBzdG9yYWdlSGFuZGxlcnNQcm9taXNlOiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgZ2V0U3RvcmFnZUhhbmRsZXJzID0gKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPiA9PiB7XG4gICAgaWYgKHN0b3JhZ2VDb25maWcudHlwZSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcIlN0b3JhZ2UgaGFuZGxlcnMgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHN0b3JhZ2VcIilcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghc3RvcmFnZUhhbmRsZXJzUHJvbWlzZSkge1xuICAgICAgc3RvcmFnZUhhbmRsZXJzUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgICAgICBjb25zdCB7IGNyZWF0ZUZpbGVzeXN0ZW1IYW5kbGVycyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAgIFwiLi9zdG9yYWdlL2JpbmRpbmdzL2xvY2FsLWZzLWhhbmRsZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBzdG9yYWdlQ29uZmlnLnBhdGggPz8gXCIuYWdlbnQtc3RvcmFnZVwiO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oYmFzZVBhdGgsIG5hbWUsIExPQ0FMX1NUT1JBR0VfVkVSU0lPTik7XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMoZnVsbFBhdGgpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JhZ2VIYW5kbGVyc1Byb21pc2U7XG4gIH07XG5cbiAgLy8gRXh0cmFjdCBzZXR1cCBhbmQgb25SZXN0YXJ0IGZyb20gYWdlbnQtbGV2ZWwgc2FuZGJveCBvcHRpb25zIChub3Qgc2VyaWFsaXphYmxlKVxuICBjb25zdCBhZ2VudFNhbmRib3hPcHRpb24gPSBvcHRpb25zLnNhbmRib3g7XG4gIGNvbnN0IHNhbmRib3hTZXR1cCA9XG4gICAgYWdlbnRTYW5kYm94T3B0aW9uICYmIHR5cGVvZiBhZ2VudFNhbmRib3hPcHRpb24gIT09IFwic3RyaW5nXCJcbiAgICAgID8gYWdlbnRTYW5kYm94T3B0aW9uLnNldHVwXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2FuZGJveE9uUmVzdGFydCA9XG4gICAgYWdlbnRTYW5kYm94T3B0aW9uICYmIHR5cGVvZiBhZ2VudFNhbmRib3hPcHRpb24gIT09IFwic3RyaW5nXCJcbiAgICAgID8gYWdlbnRTYW5kYm94T3B0aW9uLm9uUmVzdGFydFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc2FuZGJveCA9IGFzeW5jIChcbiAgICBzYW5kYm94SWQ6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgY29uZmlnPzogU2FuZGJveENvbmZpZztcbiAgICAgIHRhZ3M/OiBUVGFncztcbiAgICAgIHNldHVwPzogU2FuZGJveFNldHVwO1xuICAgICAgb25SZXN0YXJ0PzogT25SZXN0YXJ0O1xuICAgIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmdSZWNvcmQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuXG4gICAgLy8gQ29tcG9zZSBhZ2VudC1sZXZlbCBhbmQgc2Vzc2lvbi1sZXZlbCBzZXR1cC9vblJlc3RhcnQuXG4gICAgLy8gU2Vzc2lvbiBzZXR1cCBydW5zIG9uIHRvcCBvZiBhZ2VudCBzZXR1cCAoZS5nLiBhZ2VudCBpbnN0YWxscyBzaGFyZWQgZGVwcyxcbiAgICAvLyBzZXNzaW9uIGRvZXMgZ2l0IGNsb25lICsgbnBtIGluc3RhbGwpLiBUaGUgY29tcG9zZWQga2V5IGluY29ycG9yYXRlcyBib3RoXG4gICAgLy8gc28gc25hcHNob3QgaW52YWxpZGF0aW9uIHdvcmtzIGNvcnJlY3RseS5cbiAgICBjb25zdCByZXNvbHZlZFNldHVwOiBTYW5kYm94U2V0dXAgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0cz8uc2V0dXAgJiYgc2FuZGJveFNldHVwXG4gICAgICAgID8ge1xuICAgICAgICAgICAga2V5OiBgJHtzYW5kYm94U2V0dXAua2V5fToke29wdHMuc2V0dXAua2V5fWAsXG4gICAgICAgICAgICBydW46IGFzeW5jIChzYngpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgc2FuZGJveFNldHVwLnJ1bihzYngpO1xuICAgICAgICAgICAgICBhd2FpdCBvcHRzLnNldHVwPy5ydW4oc2J4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IChvcHRzPy5zZXR1cCA/PyBzYW5kYm94U2V0dXApO1xuICAgIGNvbnN0IHJlc29sdmVkT25SZXN0YXJ0OiBPblJlc3RhcnQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0cz8ub25SZXN0YXJ0ICYmIHNhbmRib3hPblJlc3RhcnRcbiAgICAgICAgPyBhc3luYyAoc2J4KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBzYW5kYm94T25SZXN0YXJ0KHNieCk7XG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uUmVzdGFydD8uKHNieCk7XG4gICAgICAgICAgfVxuICAgICAgICA6IChvcHRzPy5vblJlc3RhcnQgPz8gc2FuZGJveE9uUmVzdGFydCk7XG5cbiAgICAvLyBTdHJpcCBzZXR1cC9vblJlc3RhcnQgZnJvbSBjb25maWcgYmVmb3JlIHN0b3JpbmcgKGZ1bmN0aW9ucyBhcmVuJ3Qgc2VyaWFsaXphYmxlKVxuICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSAoKTogU2FuZGJveENvbmZpZyA9PiB7XG4gICAgICBpZiAob3B0cz8uY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBvcHRzLmNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zYW5kYm94ID09PSBcInN0cmluZ1wiIHx8ICFvcHRpb25zLnNhbmRib3gpIHtcbiAgICAgICAgcmV0dXJuIGlzVmVyY2VsKCkgPyB7IHR5cGU6IFwidmVyY2VsXCIgfSA6IHsgdHlwZTogXCJsb2NhbFwiIH07XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNldHVwOiBfcywgb25SZXN0YXJ0OiBfciwgLi4ucmVzdCB9ID0gb3B0aW9ucy5zYW5kYm94O1xuICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfTtcblxuICAgIGlmIChleGlzdGluZ1JlY29yZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoIShleGlzdGluZ1JlY29yZCBpbnN0YW5jZW9mIFNhbmRib3hOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBleGlzdGluZ1JlY29yZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNhbmRib3hSZWNvcmQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zYW5kYm94LnNldCh7XG4gICAgICAgIGlkOiBzYW5kYm94SWQsXG4gICAgICAgIHRhZ3M6IG9wdHM/LnRhZ3MgPz8gbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0F0OiBudWxsLFxuICAgICAgICBhY3F1aXJpbmdMb2NrSWQ6IG51bGwsXG4gICAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgbGFzdEFjdGl2aXR5QXQ6IERhdGUubm93KCksXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUNvbmZpZygpLFxuICAgICAgfSk7XG4gICAgICBpZiAoc2FuZGJveFJlY29yZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IHNhbmRib3hSZWNvcmQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0U2FuZGJveDxUVGFncz4oe1xuICAgICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgICBzYW5kYm94UmVjb3JkLFxuICAgICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgICAgc2V0dXA6IHJlc29sdmVkU2V0dXAsXG4gICAgICAgIG9uUmVzdGFydDogcmVzb2x2ZWRPblJlc3RhcnQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDb25maWcgPSBvcHRzPy5jb25maWcgPz8gZXhpc3RpbmdSZWNvcmQuY29uZmlnO1xuICAgIGlmICghZXF1YWwoZXhpc3RpbmdSZWNvcmQuY29uZmlnLCBuZXdDb25maWcpKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgU2FuZGJveEVycm9yKHtcbiAgICAgIC8vICAgcmVhc29uOiBcInNhbmRib3ggY29uZmlnIGNoYW5nZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIixcbiAgICAgIC8vIH0pO1xuICAgICAgY29uc29sZS53YXJuKFwic2FuZGJveCBjb25maWcgY2hhbmdlcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0U2FuZGJveDxUVGFncz4oe1xuICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgIHNhbmRib3hSZWNvcmQ6IGV4aXN0aW5nUmVjb3JkLFxuICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICBzZXR1cDogcmVzb2x2ZWRTZXR1cCxcbiAgICAgIG9uUmVzdGFydDogcmVzb2x2ZWRPblJlc3RhcnQsXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYWdlbnRPYmogPSB7XG4gICAgc2Vzc2lvbjogYXN5bmMgKFxuICAgICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzZXNzaW9uT3B0aW9ucz86IFNlc3Npb25PcHRpb25zPFRvb2xzLCBUVGFncz5cbiAgICApID0+IHtcbiAgICAgIGxldCBzZXNzaW9uID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBub3JtYWxpemUgc2FuZGJveCBpbnB1dCB0byBhIHNhbmRib3ggSUQgYW5kIGNvbmZpZ1xuICAgICAgICovXG4gICAgICBjb25zdCBzYW5kYm94SW5wdXQgPSBzZXNzaW9uT3B0aW9ucz8uc2FuZGJveCA/PyBvcHRpb25zLnNhbmRib3g7XG4gICAgICBjb25zdCBzYW5kYm94SWQgPVxuICAgICAgICB0eXBlb2Ygc2FuZGJveElucHV0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBzYW5kYm94SW5wdXRcbiAgICAgICAgICA6IC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTmVzdGVkVGVybmFyeTogb2tcbiAgICAgICAgICAgIHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgPyBgc2FuZGJveF8ke3VsaWQoKX1gXG4gICAgICAgICAgICA6IChzZXNzaW9uLnNhbmRib3hJZCA/PyBgc2FuZGJveF8ke3VsaWQoKX1gKTtcbiAgICAgIC8vIFN0cmlwIG5vbi1zZXJpYWxpemFibGUgZmllbGRzIChzZXR1cC9vblJlc3RhcnQpIGJlZm9yZSBwYXNzaW5nIGFzIGNvbmZpZy5cbiAgICAgIC8vIE9ubHkgdHJlYXQgc2V0dXAvb25SZXN0YXJ0IGFzIHNlc3Npb24tbGV2ZWwgb3ZlcnJpZGVzIHdoZW4gdGhlIHNlc3Npb25cbiAgICAgIC8vIGFjdHVhbGx5IHByb3ZpZGVkIGl0cyBvd24gc2FuZGJveCBjb25maWcgKG5vdCB3aGVuIGZhbGxpbmcgYmFjayB0byBhZ2VudCBjb25maWcpLlxuICAgICAgY29uc3QgaGFzU2Vzc2lvblNhbmRib3ggPSBzZXNzaW9uT3B0aW9ucz8uc2FuZGJveCAhPSBudWxsO1xuICAgICAgbGV0IHNlc3Npb25TZXR1cDogU2FuZGJveFNldHVwIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNlc3Npb25PblJlc3RhcnQ6IE9uUmVzdGFydCB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNhbmRib3hDb25maWc6IFNhbmRib3hDb25maWcgfCB1bmRlZmluZWQgPVxuICAgICAgICB0eXBlb2Ygc2FuZGJveElucHV0ID09PSBcInN0cmluZ1wiIHx8ICFzYW5kYm94SW5wdXRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHNldHVwOiBfcyxcbiAgICAgICAgICAgICAgICBvblJlc3RhcnQ6IF9yLFxuICAgICAgICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgICAgICAgfSA9IHNhbmRib3hJbnB1dCBhcyBTYW5kYm94Q29uZmlnICYge1xuICAgICAgICAgICAgICAgIHNldHVwPzogU2FuZGJveFNldHVwO1xuICAgICAgICAgICAgICAgIG9uUmVzdGFydD86IE9uUmVzdGFydDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKGhhc1Nlc3Npb25TYW5kYm94KSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvblNldHVwID0gX3M7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbk9uUmVzdGFydCA9IF9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN0O1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQcm9taXNlID0gc2FuZGJveChcbiAgICAgICAgc2FuZGJveElkLFxuICAgICAgICBzYW5kYm94Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogc2FuZGJveENvbmZpZyxcbiAgICAgICAgICAgICAgc2V0dXA6IHNlc3Npb25TZXR1cCxcbiAgICAgICAgICAgICAgb25SZXN0YXJ0OiBzZXNzaW9uT25SZXN0YXJ0LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApO1xuXG4gICAgICBjb25zdCBleGlzdGluZ1Nlc3Npb24gPSBzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IgPyBudWxsIDogc2Vzc2lvbjtcbiAgICAgIGNvbnN0IHNraWxsc0RpciA9XG4gICAgICAgIHNlc3Npb25PcHRpb25zPy5za2lsbHNEaXIgPz9cbiAgICAgICAgZXhpc3RpbmdTZXNzaW9uPy5za2lsbHNEaXIgPz9cbiAgICAgICAgb3B0aW9ucy5za2lsbHNEaXIgPz9cbiAgICAgICAgbnVsbDtcblxuICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIFNlc3Npb25Ob3RGb3VuZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbW9kZWwgPSBzZXNzaW9uT3B0aW9ucz8ubW9kZWwgPz8gb3B0aW9ucy5tb2RlbCA/PyBudWxsO1xuICAgICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICByZWFzb246IFwiTW9kZWwgaXMgbm90IHNldFwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnNldCh7XG4gICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgbGFzdE1lc3NhZ2VJZDogbnVsbCxcbiAgICAgICAgICAgIHJ1bklkOiBudWxsLFxuICAgICAgICAgICAgdGFnczogc2Vzc2lvbk9wdGlvbnM/LnRhZ3MgPz8gbnVsbCxcbiAgICAgICAgICAgIHN5c3RlbTogc2Vzc2lvbk9wdGlvbnM/LnN5c3RlbSA/PyBvcHRpb25zLnN5c3RlbSA/PyBudWxsLFxuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgICAgICBza2lsbHNEaXI6IHNraWxsc0RpciA/IG5vcm1hbGl6ZVNraWxsc0RpcnMoc2tpbGxzRGlyKSA6IG51bGwsXG4gICAgICAgICAgICBob29rVG9rZW46IG51bGwsXG4gICAgICAgICAgICBhY3RpdmVUb29sczpcbiAgICAgICAgICAgICAgc2Vzc2lvbk9wdGlvbnM/LmFjdGl2ZVRvb2xzID8/IG9wdGlvbnMuYWN0aXZlVG9vbHMgPz8gbnVsbCxcbiAgICAgICAgICAgIGdlbmVyYXRpb246XG4gICAgICAgICAgICAgIG9wdGlvbnMuZ2VuZXJhdGlvbiB8fCBzZXNzaW9uT3B0aW9ucz8uZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgID8geyAuLi5vcHRpb25zLmdlbmVyYXRpb24sIC4uLnNlc3Npb25PcHRpb25zPy5nZW5lcmF0aW9uIH1cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgc2Vzc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEludGVycnVwdHMgYWxsIHBlbmRpbmcgYXNzaXN0YW50IG1lc3NhZ2VzIChib3RoIHN0cmVhbWluZyBhbmQgcXVldWVkKS5cbiAgICAgICAqIEEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHBlbmRpbmcgaWYgY29tcGxldGVkQXQgPT09IG51bGwgJiYgaW50ZXJydXB0ZWRBdCA9PT0gbnVsbC5cbiAgICAgICAqL1xuICAgICAgY29uc3QgaW50ZXJydXB0Q3VycmVudE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzUmVzdWx0ID1cbiAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKTtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZXNSZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBtZXNzYWdlc1Jlc3VsdC5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKG0pID0+XG4gICAgICAgICAgICBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiZcbiAgICAgICAgICAgIG0uY29tcGxldGVkQXQgPT09IG51bGwgJiZcbiAgICAgICAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubWFwKChtKSA9PlxuICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkubWVzc2FnZS5zZXQoeyAuLi5tLCBpbnRlcnJ1cHRlZEF0OiBub3cgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdXRvLXJlamVjdCBhbnkgcGVuZGluZyBhcHByb3ZhbCBob29rcyBzbyB0aGUgd29ya2Zsb3cgdW5ibG9ja3NcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzUmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlNZXNzYWdlKFxuICAgICAgICAgICAgbS5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHNSZXN1bHQuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcC5wYXJ0ICYmXG4gICAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSlcbiAgICAgICAgICAgICAgICAuYXBwcm92YWw7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZhbD8uaWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldCh7XG4gICAgICAgICAgICAgICAgICAuLi5wLFxuICAgICAgICAgICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBcImFwcHJvdmFsLXJlc3BvbmRlZFwiLFxuICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbDoge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmFwcHJvdmFsLFxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSBhcyBQYXJ0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcHByb3ZhbEhvb2sucmVzdW1lKGFwcHJvdmFsLmlkLCB7XG4gICAgICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZW5kOiBhc3luYyAoe1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIGludGVycnVwdElmU3RyZWFtaW5nLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBpbnB1dDogU2VuZElucHV0IHwgU2VuZElucHV0W107XG4gICAgICAgICAgaW50ZXJydXB0SWZTdHJlYW1pbmc/OiBib29sZWFuO1xuICAgICAgICAgIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGlmIChpbnRlcnJ1cHRJZlN0cmVhbWluZykge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJydXB0UmVzdWx0ID0gYXdhaXQgaW50ZXJydXB0Q3VycmVudE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGlmIChpbnRlcnJ1cHRSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJydXB0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgICAgICAgY29uc3QgbmV3UGFydHM6IFBhcnRbXSA9IFtdO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IGksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogd2UgYWxzbyBwcmUtY3JlYXRlIHRoZSBhc3Npc3RhbnQgbWVzc2FnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQgPSBiYXNlVGltZSArIG5ld01lc3NhZ2VzLmxlbmd0aDtcbiAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZXNzaW9uMiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHNlc3Npb24yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHNlc3Npb24yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFnZW50SW5wdXQ6IEFnZW50SW5wdXQgPSB7XG4gICAgICAgICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZXZlbnQ6IEFnZW50TWVzc2FnZUlucHV0ID0ge1xuICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgaG9va1Rva2VuOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCA/PyB7fSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVycm9yZS50cnlBc3luYyh7XG4gICAgICAgICAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgYWxsKHtcbiAgICAgICAgICAgICAgICBhc3luYyBzYXZlTWVzc2FnZXMoKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2Uuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IGJhc2VUaW1lICsgaSxcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXN5bmMgc2F2ZVBhcnRzKCkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIG5ld1BhcnRzLm1hcChnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhc3luYyByZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdygpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uMi5ydW5JZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZ2VudE1lc3NhZ2VIb29rLnJlc3VtZShzZXNzaW9uSWQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UmVzdWx0ID0gYXdhaXQgc3RhcnQoYWdlbnRXb3JrZmxvdywgW1xuICAgICAgICAgICAgICAgICAgICAgIHsgaW5wdXQ6IGFnZW50SW5wdXQsIGV2ZW50IH0sXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uMi5ydW5JZCA9IHN0YXJ0UmVzdWx0LnJ1bklkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlU2Vzc2lvbigpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuJC5yZXN1bWVPclN0YXJ0QWdlbnRXb3JrZmxvdztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2Vzc2lvbjIsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgICAgICAgICBob29rVG9rZW46IGV2ZW50Lmhvb2tUb2tlbixcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2F0Y2g6IChlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgU2Vzc2lvbkVycm9yKHtcbiAgICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogYGZhaWxlZCB0byBzZW5kOiAke1N0cmluZyhlKX1gLFxuICAgICAgICAgICAgICAgIGNhdXNlOiBlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RyZWFtOiBhc3luYyAob3B0cz86IHtcbiAgICAgICAgICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG4gICAgICAgIH0pOiBQcm9taXNlPEFnZW50U3RyZWFtIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKTtcbiAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gb3B0cz8ubWVzc2FnZUlkID8/IHNlc3Npb24ubGFzdE1lc3NhZ2VJZDtcbiAgICAgICAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICByZWFzb246IFwiTm8gbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggc2Vzc2lvblwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2Vzc2lvbi5ydW5JZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICByZWFzb246IFwiTm8gcnVuIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcnVuID0gZ2V0UnVuKHNlc3Npb24ucnVuSWQpO1xuICAgICAgICAgIGNvbnN0IHdvcmtmbG93UmVhZGFibGUgPSBydW4uZ2V0UmVhZGFibGU8VUlNZXNzYWdlQ2h1bms+KHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogbWVzc2FnZUlkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGV0IGRhdGFXcml0ZXI6IHtcbiAgICAgICAgICAgIHdyaXRlOiAoY2h1bms6IFVJTWVzc2FnZUNodW5rKSA9PiB2b2lkO1xuICAgICAgICAgIH0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBtZXJnZWRTdHJlYW0gPSBjcmVhdGVVSU1lc3NhZ2VTdHJlYW0oe1xuICAgICAgICAgICAgZXhlY3V0ZTogKHsgd3JpdGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgZGF0YVdyaXRlciA9IHdyaXRlcjtcbiAgICAgICAgICAgICAgd3JpdGVyLm1lcmdlKHdvcmtmbG93UmVhZGFibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG1lcmdlZFN0cmVhbSwge1xuICAgICAgICAgICAgd3JpdGVTdGF0dXM6IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZGF0YVdyaXRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmVhbSB3cml0ZXIgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYXRhV3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGEtc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIHRyYW5zaWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSBhcyBVSU1lc3NhZ2VDaHVuayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pIGFzIEFnZW50U3RyZWFtO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgW21lc3NhZ2VzUmVzdWx0LCBwYXJ0c1Jlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKSxcbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLnBhcnQubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQpLFxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgaWYgKG1lc3NhZ2VzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlc1Jlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1Jlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGFzc2VtYmxlVUlNZXNzYWdlcyh7XG4gICAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZXNSZXN1bHQuaXRlbXMsXG4gICAgICAgICAgICBwYXJ0czogcGFydHNSZXN1bHQuaXRlbXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBsYXN0U3RhcnRlZEFzc2lzdGFudCA9IG1lc3NhZ2VzUmVzdWx0Lml0ZW1zXG4gICAgICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiYgbS5zdGFydGVkQXQgIT09IG51bGwpXG4gICAgICAgICAgICAuYXQoLTEpO1xuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID1cbiAgICAgICAgICAgIGxhc3RTdGFydGVkQXNzaXN0YW50ICYmXG4gICAgICAgICAgICBsYXN0U3RhcnRlZEFzc2lzdGFudC5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgbGFzdFN0YXJ0ZWRBc3Npc3RhbnQuaW50ZXJydXB0ZWRBdCA9PT0gbnVsbDtcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdNZXNzYWdlSWQgPSBpc1N0cmVhbWluZ1xuICAgICAgICAgICAgPyBsYXN0U3RhcnRlZEFzc2lzdGFudC5pZFxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgY29uc3QgdXNhZ2UgPSBjb21wdXRlU2Vzc2lvblVzYWdlKG1lc3NhZ2VzUmVzdWx0Lml0ZW1zKTtcblxuICAgICAgICAgIHR5cGUgVHlwZWRNZXNzYWdlID0gVUlNZXNzYWdlPFxuICAgICAgICAgICAgdW5rbm93bixcbiAgICAgICAgICAgIEFnZW50RGF0YVR5cGVzLFxuICAgICAgICAgICAgSW5mZXJVSVRvb2xzPHR5cGVvZiBidWlsdEluVG9vbHMgJiBUb29scz5cbiAgICAgICAgICA+O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZXMgYXMgdW5rbm93biBhcyBUeXBlZE1lc3NhZ2VbXSxcbiAgICAgICAgICAgIHN0cmVhbWluZ01lc3NhZ2VJZCxcbiAgICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHRhZzoge1xuICAgICAgICAgIGxpc3Q6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoc2Vzc2lvbi50YWdzID8/IHt9KSBhcyBUVGFncztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldDogYXN5bmMgPEsgZXh0ZW5kcyBrZXlvZiBUVGFncyAmIHN0cmluZz4oXG4gICAgICAgICAgICBrZXk6IEtcbiAgICAgICAgICApOiBQcm9taXNlPFRUYWdzW0tdIHwgdW5kZWZpbmVkIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLnRhZ3M/LltrZXldIGFzIFRUYWdzW0tdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBhc3luYyA8SyBleHRlbmRzIGtleW9mIFRUYWdzICYgc3RyaW5nPihcbiAgICAgICAgICAgIGtleTogSyxcbiAgICAgICAgICAgIHZhbHVlOiBUVGFnc1tLXVxuICAgICAgICAgICk6IFByb21pc2U8dW5kZWZpbmVkIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24udGFnLnNldCh7XG4gICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgdGFnczogeyBba2V5XTogdmFsdWUgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0TWFueTogYXN5bmMgKHRhZ3M6IFBhcnRpYWw8VFRhZ3M+KTogUHJvbWlzZTx1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi50YWcuc2V0KHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0YWdzOiB0YWdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2FuZGJveDogYXdhaXQgc2FuZGJveFByb21pc2UsXG5cbiAgICAgICAgaW50ZXJydXB0OiBpbnRlcnJ1cHRDdXJyZW50TWVzc2FnZSxcblxuICAgICAgICByZXNvbHZlQXBwcm92YWw6IGFzeW5jICh7XG4gICAgICAgICAgYXBwcm92YWxJZCxcbiAgICAgICAgICBhcHByb3ZlZCxcbiAgICAgICAgICByZWFzb24sXG4gICAgICAgIH06IHtcbiAgICAgICAgICBhcHByb3ZhbElkOiBzdHJpbmc7XG4gICAgICAgICAgYXBwcm92ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9KTogUHJvbWlzZTx1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzUmVzdWx0ID1cbiAgICAgICAgICAgIGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnBhcnQubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChwYXJ0c1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydHNSZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0UGFydCA9IHBhcnRzUmVzdWx0Lml0ZW1zLmZpbmQoXG4gICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgcC5wYXJ0ICYmXG4gICAgICAgICAgICAgIFwiYXBwcm92YWxcIiBpbiBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSkuYXBwcm92YWw/LmlkID09PVxuICAgICAgICAgICAgICAgIGFwcHJvdmFsSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghdGFyZ2V0UGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICByZWFzb246IGBBcHByb3ZhbCAke2FwcHJvdmFsSWR9IG5vdCBmb3VuZGAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVkUGFydCA9IHtcbiAgICAgICAgICAgIC4uLnRhcmdldFBhcnQsXG4gICAgICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgICAgIC4uLnRhcmdldFBhcnQucGFydCxcbiAgICAgICAgICAgICAgc3RhdGU6IFwiYXBwcm92YWwtcmVzcG9uZGVkXCIgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGFwcHJvdmFsOiB7IGlkOiBhcHByb3ZhbElkLCBhcHByb3ZlZCwgcmVhc29uIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgc2V0UmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5zZXQoXG4gICAgICAgICAgICB1cGRhdGVkUGFydCBhcyBQYXJ0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc2V0UmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmlyZSB0aGUgYXBwcm92YWwgaG9vayB0byByZXN1bWUgdGhlIHN1c3BlbmRlZCB3b3JrZmxvdy5cbiAgICAgICAgICAvLyBGb3Igc3ViLXRvb2wgYXBwcm92YWxzIChmcm9tIHRoZSBKYXZhU2NyaXB0IHRvb2wpLCB0aGVyZSdzIG5vXG4gICAgICAgICAgLy8gc3VzcGVuZGVkIGhvb2sgXHUyMDE0IHBvbGxpbmcgaGFuZGxlcyBpdC4gU3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGFwcHJvdmFsSG9vay5yZXN1bWUoYXBwcm92YWxJZCwgeyBhcHByb3ZlZCwgcmVhc29uIH0pO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm8gaG9vayByZWdpc3RlcmVkIGZvciB0aGlzIGFwcHJvdmFsSWQgKGUuZy4gSlMgc3ViLXRvb2wgYXBwcm92YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcblxuICAgICAgICB1c2FnZTogYXN5bmMgKCk6IFByb21pc2U8U2Vzc2lvblVzYWdlIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9XG4gICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKTtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlc1Jlc3VsdC5pdGVtcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBhc3luYyAoXG4gICAgICAgICAgdXBkYXRlT3B0aW9uczogU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHM+ICYgeyB0YWdzPzogVFRhZ3MgfVxuICAgICAgICApOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQ6IFNlc3Npb24gPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgLi4udXBkYXRlT3B0aW9ucyxcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHNraWxsc0RpcjogdXBkYXRlT3B0aW9ucy5za2lsbHNEaXJcbiAgICAgICAgICAgICAgPyBub3JtYWxpemVTa2lsbHNEaXJzKHVwZGF0ZU9wdGlvbnMuc2tpbGxzRGlyKVxuICAgICAgICAgICAgICA6IGN1cnJlbnQuc2tpbGxzRGlyLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGVxdWFsKHVwZGF0ZWQsIGN1cnJlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnNldCh1cGRhdGVkKTtcbiAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2FuZGJveCxcbiAgICBnZXQgc3RvcmFnZSgpOiBUeXBlZFN0b3JhZ2U8VFRhZ3M+IHtcbiAgICAgIHJldHVybiBnZXRTdG9yYWdlSW5zdGFuY2UoKSBhcyBUeXBlZFN0b3JhZ2U8VFRhZ3M+O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSUEMgaGFuZGxlciBmb3IgYWdlbnQgb3BlcmF0aW9ucy5cbiAgICAgKiBIYW5kbGVzIHRvb2xzLmxpc3QsIHRvb2xzLmV4ZWN1dGUsIHN0b3JhZ2UgUlBDLCBhbmQgaG9va3MuXG4gICAgICpcbiAgICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgYHJwY2Agc3RlcCBmdW5jdGlvbiBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgICAqIENhbiBhbHNvIGJlIGV4cG9zZWQgdmlhIEhUVFAgZm9yIGV4dGVybmFsIGFjY2VzcyBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgaGFuZGxlcjogYXN5bmMgKFxuICAgICAgaW5wdXQ6IFJlcXVlc3QgfCBScGNQYXlsb2FkLFxuICAgICAgb3ZlcnJpZGVzPzogQWdlbnRScGNPdmVycmlkZXNcbiAgICApOiBQcm9taXNlPFJlc3BvbnNlIHwgUnBjUmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCBpc1JlcXVlc3QgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3Q7XG5cbiAgICAgIGxldCBtZXRob2Q6IHN0cmluZztcbiAgICAgIGxldCBwYXJhbXM6IHVua25vd247XG4gICAgICBsZXQgbmFtZTogc3RyaW5nO1xuXG4gICAgICBpZiAoaXNSZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1zZWNyZXRcIik7XG4gICAgICAgIGlmIChzZWNyZXQgIT09IGFnZW50U2VjcmV0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgICAgICB7IGVycm9yOiB7IGNvZGU6IFwiVU5BVVRIT1JJWkVEXCIsIG1lc3NhZ2U6IFwiSW52YWxpZCBzZWNyZXRcIiB9IH0sXG4gICAgICAgICAgICB7IHN0YXR1czogNDAxIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJvZHk6IEFnZW50UnBjUmVxdWVzdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5ID0gYXdhaXQgaW5wdXQuanNvbigpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHsgY29kZTogXCJJTlZBTElEX1JFUVVFU1RcIiwgbWVzc2FnZTogXCJJbnZhbGlkIEpTT04gYm9keVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGhvZCA9IGJvZHkubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBib2R5LnBhcmFtcztcbiAgICAgICAgbmFtZSA9IGlucHV0LmhlYWRlcnMuZ2V0KFwieC1hZ2VudC1uYW1lXCIpID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgICBwYXJhbXMgPSBpbnB1dC5wYXJhbXM7XG4gICAgICAgIG5hbWUgPSBpbnB1dC5uYW1lID8/IERFRkFVTFRfTkFNRVNQQUNFO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXNwYXRjaENvbnRleHQ6IERpc3BhdGNoQ29udGV4dCA9IHtcbiAgICAgICAgdG9vbHM6IG9wdGlvbnMudG9vbHMgYXMgVG9vbFNldCB8IHVuZGVmaW5lZCxcbiAgICAgICAgaG9va3M6IG9wdGlvbnMuaG9va3MsXG4gICAgICAgIG5lZWRzQXBwcm92YWw6XG4gICAgICAgICAgb3B0aW9ucy5uZWVkc0FwcHJvdmFsIGFzIERpc3BhdGNoQ29udGV4dFtcIm5lZWRzQXBwcm92YWxcIl0sXG4gICAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSxcbiAgICAgICAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxuICAgICAgICBvdmVycmlkZXMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXNwYXRjaChtZXRob2QsIHBhcmFtcywgZGlzcGF0Y2hDb250ZXh0LCBuYW1lKTtcblxuICAgICAgaWYgKCFpc1JlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdHVzID0gXCJlcnJvclwiIGluIHJlc3VsdCA/IChyZXN1bHQuc3RhdHVzID8/IDUwMCkgOiAyMDA7XG4gICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgXCJlcnJvclwiIGluIHJlc3VsdCA/IHsgZXJyb3I6IHJlc3VsdC5lcnJvciB9IDogeyByZXN1bHQ6IHJlc3VsdC5yZXN1bHQgfSxcbiAgICAgICAgeyBzdGF0dXMgfVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgdG9vbHM6IHsgLi4uYnVpbHRJblRvb2xzLCAuLi5vcHRpb25zLnRvb2xzIH0gYXMgdHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzLFxuXG4gICAgLyoqIFBoYW50b20gcHJvcGVydHkgZm9yIHR5cGUgaW5mZXJlbmNlLiBVc2UgYHR5cGVvZiBteUFnZW50LiRVSU1lc3NhZ2VgIHRvIGdldCB0aGUgdHlwZWQgVUlNZXNzYWdlLiAqL1xuICAgICRVSU1lc3NhZ2U6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFVJTWVzc2FnZTxcbiAgICAgIHVua25vd24sXG4gICAgICBBZ2VudERhdGFUeXBlcyxcbiAgICAgIEluZmVyVUlUb29sczx0eXBlb2YgYnVpbHRJblRvb2xzICYgVG9vbHM+XG4gICAgPixcblxuICAgIC8qKiBBZ2VudCBuYW1lIHVzZWQgYXMga2V5IGZvciB0aGUgUlBDIHJlZ2lzdHJ5LiBTZXQgYnkgdGhlIGxvYWRlciBpbml0LiAqL1xuICAgIF9hZ2VudE5hbWU6IHN0b3JhZ2VDb25maWcubmFtZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcblxuICAgIHJwYzogKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJycGMgbm90IGNvbmZpZ3VyZWQuIEVuc3VyZSB3aXRoQWdlbnQgaXMgc2V0IHVwIGluIG5leHQuY29uZmlnLnRzXCJcbiAgICAgICk7XG4gICAgfSkgYXMgKHBhcmFtczogUnBjUGF5bG9hZCkgPT4gUHJvbWlzZTxScGNSZXN1bHQ+LFxuICB9O1xuXG4gIHJldHVybiBhZ2VudE9iajtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNywgVG9vbCwgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWdlbnRScGNPdmVycmlkZXMsXG4gIEFnZW50UnBjUmVzdWx0LFxuICBBZ2VudFN0YXR1cyxcbiAgUnBjUmVzdWx0LFxufSBmcm9tIFwiLi9jbGllbnRcIjtcbmltcG9ydCB7IGdldFNhbmRib3ggfSBmcm9tIFwiLi9zYW5kYm94XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN0b3JhZ2UgYXMgQWdlbnRTdG9yYWdlLFxuICBNZXRob2ROYW1lLFxuICBScGNSZXF1ZXN0LFxuICBScGNSZXNwb25zZSxcbiAgU2FuZGJveFJlY29yZCxcbiAgU2Vzc2lvbixcbiAgU3RvcmFnZUNvbmZpZyxcbiAgSGFuZGxlcnMgYXMgU3RvcmFnZUhhbmRsZXJzLFxufSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTVE9SQUdFX1JQQ19NRVRIT0RTIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuaW1wb3J0IHsgdHlwZSBCdWlsdEluVG9vbE5hbWUsIHJlc29sdmVBcGlVcmwsIHR5cGUgVG9vbENvbnRleHQgfSBmcm9tIFwiLi90b29sc1wiO1xuXG5leHBvcnQgdHlwZSBUb29sTWV0YWRhdGEgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlucHV0U2NoZW1hPzogSlNPTlNjaGVtYTc7XG59O1xuXG5leHBvcnQgdHlwZSBUb29sc0V4ZWN1dGVQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIHNlc3Npb246IFNlc3Npb247XG4gIHNhbmRib3hSZWNvcmQ6IFNhbmRib3hSZWNvcmQ7XG4gIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgSG9va1Rvb2xCZWZvcmVQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5wdXQ6IHVua25vd247XG4gIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgSG9va1Rvb2xCZWZvcmVSZXN1bHQgPSB7XG4gIGlucHV0PzogdW5rbm93bjtcbiAgc3RvcD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBIb29rVG9vbEFmdGVyUGFyYW1zID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICByZXN1bHQ6IHVua25vd247XG4gIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgSG9va1Rvb2xBZnRlclJlc3VsdCA9IHtcbiAgcmVzdWx0PzogdW5rbm93bjtcbiAgc3RvcD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb29sc05lZWRzQXBwcm92YWxQYXJhbXMgPSB7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG1lc3NhZ2VzOiB1bmtub3duW107XG59O1xuXG5leHBvcnQgdHlwZSBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQgPSBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBIb29rU3RhdHVzUGFyYW1zID0ge1xuICBzdGF0dXM6IEFnZW50U3RhdHVzO1xufTtcblxuZXhwb3J0IHR5cGUgSG9va1N0YXR1c1Jlc3VsdCA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxudHlwZSBBZ2VudEhvb2tzID0ge1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICBcInRvb2wuYWZ0ZXJcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IHJlc3VsdDogdW5rbm93biB9PjtcbiAgc3RhdHVzPzogKHN0YXR1czogQWdlbnRTdGF0dXMpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufTtcblxudHlwZSBOZWVkc0FwcHJvdmFsRW50cnkgPVxuICB8IGJvb2xlYW5cbiAgfCAoKFxuICAgICAgaW5wdXQ6IHVua25vd24sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgbWVzc2FnZXM6IHVua25vd25bXTtcbiAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICB9XG4gICAgKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPik7XG5cbmV4cG9ydCB0eXBlIERpc3BhdGNoQ29udGV4dCA9IHtcbiAgdG9vbHM6IFRvb2xTZXQgfCB1bmRlZmluZWQ7XG4gIGhvb2tzOiBBZ2VudEhvb2tzIHwgdW5kZWZpbmVkO1xuICBuZWVkc0FwcHJvdmFsOiBSZWNvcmQ8c3RyaW5nLCBOZWVkc0FwcHJvdmFsRW50cnk+IHwgdW5kZWZpbmVkO1xuICBzdG9yYWdlQ29uZmlnOiBTdG9yYWdlQ29uZmlnO1xuICBnZXRTdG9yYWdlSW5zdGFuY2U6ICgpID0+IEFnZW50U3RvcmFnZTtcbiAgZ2V0U3RvcmFnZUhhbmRsZXJzOiAobmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz47XG4gIG92ZXJyaWRlcz86IEFnZW50UnBjT3ZlcnJpZGVzO1xufTtcblxuLyoqIERlZmF1bHQgbmVlZHNBcHByb3ZhbCBmb3IgYnVpbHQtaW4gdG9vbHMgKHVzZXIgY2FuIG92ZXJyaWRlIHZpYSBuZWVkc0FwcHJvdmFsIGNvbmZpZykuICovXG5jb25zdCBidWlsdGluTmVlZHNBcHByb3ZhbDogUGFydGlhbDxcbiAgUmVjb3JkPEJ1aWx0SW5Ub29sTmFtZSwgTmVlZHNBcHByb3ZhbEVudHJ5PlxuPiA9IHtcbiAgQmFzaDogdHJ1ZSxcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gb3ZlcnJpZGUgcmVzdWx0IHRvIFJwY1Jlc3VsdCwgb3IgbnVsbCB0byBmYWxsIHRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU92ZXJyaWRlUmVzdWx0PFQ+KHJlczogQWdlbnRScGNSZXN1bHQ8VD4pOiBScGNSZXN1bHQ8VD4gfCBudWxsIHtcbiAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChyZXMub2spIHtcbiAgICByZXR1cm4geyByZXN1bHQ6IHJlcy5yZXN1bHQgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiB7IGNvZGU6IFwiSEFORExFUl9FUlJPUlwiLCBtZXNzYWdlOiByZXMuZXJyb3IgfSxcbiAgICBzdGF0dXM6IDQwMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBkaXNwYXRjaCBmdW5jdGlvbi4gUmV0dXJucyBScGNSZXN1bHQsIG5vdCBSZXNwb25zZS5cbiAqIEVuYWJsZXMgcmVjdXJzaXZlIGNhbGxzIGZvciBob29rcyB3aXRob3V0IEpTT04gcm91bmQtdHJpcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhcmFtczogdW5rbm93bixcbiAgY29udGV4dDogRGlzcGF0Y2hDb250ZXh0LFxuICBuYW1lPzogc3RyaW5nXG4pOiBQcm9taXNlPFJwY1Jlc3VsdD4ge1xuICBjb25zdCB7XG4gICAgdG9vbHMsXG4gICAgaG9va3MsXG4gICAgbmVlZHNBcHByb3ZhbCxcbiAgICBzdG9yYWdlQ29uZmlnLFxuICAgIGdldFN0b3JhZ2VJbnN0YW5jZSxcbiAgICBnZXRTdG9yYWdlSGFuZGxlcnMsXG4gICAgb3ZlcnJpZGVzLFxuICB9ID0gY29udGV4dDtcblxuICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgIGNhc2UgXCJ0b29scy5saXN0XCI6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gKCk6IFJwY1Jlc3VsdDxUb29sTWV0YWRhdGFbXT4gPT4ge1xuICAgICAgICBjb25zdCB0b29sc01hcCA9IHRvb2xzID8/ICh7fSBhcyBUb29sU2V0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXModG9vbHNNYXApLm1hcCgoW25hbWUsIHRdKSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICh0IGFzIFRvb2wpLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGlucHV0U2NoZW1hOiBzY2hlbWFUb0pzb25TY2hlbWEoKHQgYXMgVG9vbCkuaW5wdXRTY2hlbWEpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcInRvb2xzLmxpc3RcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/Lih7fSk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSBoYW5kbGVPdmVycmlkZVJlc3VsdChvdmVycmlkZVJlc3VsdCk7XG4gICAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXIoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIQU5ETEVSX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIFRvb2xzTmVlZHNBcHByb3ZhbFBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTxScGNSZXN1bHQ8Ym9vbGVhbj4+ID0+IHtcbiAgICAgICAgLy8gMS4gUGVyLXRvb2wgbmVlZHNBcHByb3ZhbCBvbiBjdXN0b20gdG9vbHMgdGFrZXMgcHJpb3JpdHlcbiAgICAgICAgY29uc3QgdG9vbHNNYXAgPSB0b29scyA/PyAoe30gYXMgVG9vbFNldCk7XG4gICAgICAgIGNvbnN0IHRvb2xEZWYgPSB0b29sc01hcFtwLnRvb2xOYW1lXSBhcyBUb29sIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodG9vbERlZj8ubmVlZHNBcHByb3ZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0b29sRGVmLm5lZWRzQXBwcm92YWwgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IHRvb2xEZWYubmVlZHNBcHByb3ZhbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b29sRGVmLm5lZWRzQXBwcm92YWwocC5pbnB1dCwge1xuICAgICAgICAgICAgdG9vbENhbGxJZDogcC50b29sQ2FsbElkLFxuICAgICAgICAgICAgbWVzc2FnZXM6IHAubWVzc2FnZXMgYXMgbmV2ZXJbXSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBBZ2VudC1sZXZlbCBuZWVkc0FwcHJvdmFsIG1hcCwgZmFsbGluZyBiYWNrIHRvIGJ1aWx0LWluIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgICBuZWVkc0FwcHJvdmFsPy5bcC50b29sTmFtZV0gPz9cbiAgICAgICAgICBidWlsdGluTmVlZHNBcHByb3ZhbFtwLnRvb2xOYW1lIGFzIEJ1aWx0SW5Ub29sTmFtZV0gPz9cbiAgICAgICAgICBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IGVudHJ5IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50cnkocC5pbnB1dCwge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHAudG9vbENhbGxJZCxcbiAgICAgICAgICBtZXNzYWdlczogcC5tZXNzYWdlcyxcbiAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1widG9vbHMubmVlZHNBcHByb3ZhbFwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHApO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiTkVFRFNfQVBQUk9WQUxfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJob29rLnRvb2wuYmVmb3JlXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgSG9va1Rvb2xCZWZvcmVQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICBob29rUGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtc1xuICAgICAgKTogUHJvbWlzZTxIb29rVG9vbEJlZm9yZVJlc3VsdD4gPT4ge1xuICAgICAgICBpZiAoIWhvb2tzPy5bXCJ0b29sLmJlZm9yZVwiXSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9va3NbXCJ0b29sLmJlZm9yZVwiXShob29rUGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGhvb2tSZXN1bHQgPz8ge307XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1wiaG9vay50b29sLmJlZm9yZVwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbXMgPSBwO1xuICAgICAgICBsZXQgbWVyZ2VkOiBIb29rVG9vbEJlZm9yZVJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0Py5vaykge1xuICAgICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5vdmVycmlkZVJlc3VsdC5yZXN1bHQgfTtcbiAgICAgICAgICBpZiAobWVyZ2VkLnN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdmVycmlkZVJlc3VsdC5yZXN1bHQuaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgaW5wdXQ6IG92ZXJyaWRlUmVzdWx0LnJlc3VsdC5pbnB1dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFJlc3VsdCA9IGF3YWl0IGRlZmF1bHRIYW5kbGVyKGN1cnJlbnRQYXJhbXMpO1xuICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4uZGVmYXVsdFJlc3VsdCB9O1xuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSE9PS19FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIEhvb2tUb29sQWZ0ZXJQYXJhbXM7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICBob29rUGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zXG4gICAgICApOiBQcm9taXNlPEhvb2tUb29sQWZ0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgaWYgKCFob29rcz8uW1widG9vbC5hZnRlclwiXSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9va3NbXCJ0b29sLmFmdGVyXCJdKGhvb2tQYXJhbXMpO1xuICAgICAgICByZXR1cm4gaG9va1Jlc3VsdCA/PyB7fTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJob29rLnRvb2wuYWZ0ZXJcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBjdXJyZW50UGFyYW1zID0gcDtcbiAgICAgICAgbGV0IG1lcmdlZDogSG9va1Rvb2xBZnRlclJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0Py5vaykge1xuICAgICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5vdmVycmlkZVJlc3VsdC5yZXN1bHQgfTtcbiAgICAgICAgICBpZiAobWVyZ2VkLnN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdmVycmlkZVJlc3VsdC5yZXN1bHQucmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRQYXJhbXMsXG4gICAgICAgICAgICAgIHJlc3VsdDogb3ZlcnJpZGVSZXN1bHQucmVzdWx0LnJlc3VsdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFJlc3VsdCA9IGF3YWl0IGRlZmF1bHRIYW5kbGVyKGN1cnJlbnRQYXJhbXMpO1xuICAgICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgLi4uZGVmYXVsdFJlc3VsdCB9O1xuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogbWVyZ2VkIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiSE9PS19FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImhvb2suc3RhdHVzXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgSG9va1N0YXR1c1BhcmFtcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhvb2tzPy5zdGF0dXM/LihwLnN0YXR1cyk7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDoge30gfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIT09LX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwidG9vbHMuZXhlY3V0ZVwiOiB7XG4gICAgICBjb25zdCBwID0gcGFyYW1zIGFzIFRvb2xzRXhlY3V0ZVBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTxScGNSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgdG9vbHNNYXAgPSB0b29scyA/PyAoe30gYXMgVG9vbFNldCk7XG4gICAgICAgIGNvbnN0IHRvb2xEZWYgPSB0b29sc01hcFtwLm5hbWUgYXMga2V5b2YgdHlwZW9mIHRvb2xzTWFwXTtcbiAgICAgICAgaWYgKCF0b29sRGVmKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiVE9PTF9OT1RfRk9VTkRcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gdG9vbDogJHtwLm5hbWV9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhlY3V0ZSA9ICh0b29sRGVmIGFzIFRvb2wpLmV4ZWN1dGU7XG4gICAgICAgIGlmICghZXhlY3V0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICBjb2RlOiBcIk5PX0VYRUNVVEVcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFRvb2wgJHtwLm5hbWV9IGhhcyBubyBleGVjdXRlIGZ1bmN0aW9uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2FuZGJveEluc3RhbmNlID0gYXdhaXQgZ2V0U2FuZGJveCh7XG4gICAgICAgICAgc2FuZGJveFJlY29yZDogcC5zYW5kYm94UmVjb3JkLFxuICAgICAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICAgICAgc3RvcmFnZTogZ2V0U3RvcmFnZUluc3RhbmNlKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRvb2xDb250ZXh0OiBUb29sQ29udGV4dCA9IHtcbiAgICAgICAgICBzZXNzaW9uOiBwLnNlc3Npb24sXG4gICAgICAgICAgc2FuZGJveDogc2FuZGJveEluc3RhbmNlLFxuICAgICAgICAgIHN0b3JhZ2U6IGdldFN0b3JhZ2VJbnN0YW5jZSgpLFxuICAgICAgICAgIGNvbnRleHQ6IHAuY29udGV4dCxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgdG9vbElucHV0ID0gcC5pbnB1dDtcblxuICAgICAgICBjb25zdCBiZWZvcmVSZXN1bHQgPSBhd2FpdCBkaXNwYXRjaChcbiAgICAgICAgICBcImhvb2sudG9vbC5iZWZvcmVcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBiZWZvcmVSZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gYmVmb3JlUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZm9yZUhvb2sgPSBiZWZvcmVSZXN1bHQucmVzdWx0IGFzIEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICAgICAgICBpZiAoYmVmb3JlSG9vay5zdG9wKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiSE9PS19TVE9QUEVEXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwidG9vbC5iZWZvcmUgaG9vayBzdG9wcGVkIGV4ZWN1dGlvblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlZm9yZUhvb2suaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvb2xJbnB1dCA9IGJlZm9yZUhvb2suaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSh0b29sSW5wdXQgYXMgbmV2ZXIsIHtcbiAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgdG9vbENhbGxJZDogXCJycGNcIixcbiAgICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFmdGVyUmVzdWx0ID0gYXdhaXQgZGlzcGF0Y2goXG4gICAgICAgICAgXCJob29rLnRvb2wuYWZ0ZXJcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBhZnRlclJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiBhZnRlclJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvb2sgPSBhZnRlclJlc3VsdC5yZXN1bHQgYXMgSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgICAgICAgaWYgKGFmdGVySG9vay5zdG9wKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiSE9PS19TVE9QUEVEXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwidG9vbC5hZnRlciBob29rIHN0b3BwZWQgZXhlY3V0aW9uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWZ0ZXJIb29rLnJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYWZ0ZXJIb29rLnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcInRvb2xzLmV4ZWN1dGVcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZU92ZXJyaWRlUmVzdWx0KG92ZXJyaWRlUmVzdWx0KTtcbiAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWZhdWx0SGFuZGxlcigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkVYRUNVVEVfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBtZXRob2QgYXMgTWV0aG9kTmFtZTtcbiAgICAgIGlmICghU1RPUkFHRV9SUENfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIlVOS05PV05fTUVUSE9EXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBSUEMgbWV0aG9kOiAke21ldGhvZH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKCk6IFByb21pc2U8UnBjUmVzdWx0PiA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVTdG9yYWdlUmVxdWVzdCh7XG4gICAgICAgICAgY29uZmlnOiBzdG9yYWdlQ29uZmlnLFxuICAgICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXJhbXMgfSxcbiAgICAgICAgICBuYW1lOiBuYW1lID8/IHN0b3JhZ2VDb25maWcubmFtZSA/PyBcImRlZmF1bHRcIixcbiAgICAgICAgICBnZXRTdG9yYWdlSGFuZGxlcnMsXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LlttZXRob2ROYW1lXSBhc1xuICAgICAgICB8ICgocGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPEFnZW50UnBjUmVzdWx0PHVua25vd24+PilcbiAgICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwYXJhbXMpO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiU1RPUkFHRV9FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUm91dGVzIHN0b3JhZ2UgUlBDIHJlcXVlc3RzIGJhc2VkIG9uIHN0b3JhZ2UgY29uZmlnIHR5cGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN0b3JhZ2VSZXF1ZXN0KHtcbiAgY29uZmlnLFxuICByZXF1ZXN0LFxuICBuYW1lLFxuICBnZXRTdG9yYWdlSGFuZGxlcnMsXG59OiB7XG4gIGNvbmZpZzogU3RvcmFnZUNvbmZpZztcbiAgcmVxdWVzdDogUnBjUmVxdWVzdDtcbiAgbmFtZTogc3RyaW5nO1xuICBnZXRTdG9yYWdlSGFuZGxlcnM6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPjtcbn0pOiBQcm9taXNlPFJwY1Jlc3BvbnNlPiB7XG4gIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICBjYXNlIFwibG9jYWxcIjoge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSBhd2FpdCBnZXRTdG9yYWdlSGFuZGxlcnMobmFtZSk7XG4gICAgICBjb25zdCB7IGhhbmRsZVN0b3JhZ2VScGMgfSA9IGF3YWl0IGltcG9ydChcIi4vc3RvcmFnZS9oYW5kbGVyXCIpO1xuICAgICAgcmV0dXJuIGhhbmRsZVN0b3JhZ2VScGMocmVxdWVzdCwgaGFuZGxlcnMpO1xuICAgIH1cbiAgICBjYXNlIFwidmVyY2VsXCI6IHtcbiAgICAgIGNvbnN0IHsgZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICBcIi4vc3RvcmFnZS9iaW5kaW5ncy92ZXJjZWxcIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZygpO1xuICAgICAgcmV0dXJuIGF3YWl0IHByb3h5U3RvcmFnZVJlcXVlc3Qoe1xuICAgICAgICB1cmw6IHJlc29sdmVkLnVybCxcbiAgICAgICAgaGVhZGVyczogeyAuLi5yZXNvbHZlZC5oZWFkZXJzLCBcIngtYWdlbnQtbmFtZVwiOiBuYW1lIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcImN1c3RvbVwiOiB7XG4gICAgICByZXR1cm4gYXdhaXQgcHJveHlTdG9yYWdlUmVxdWVzdCh7XG4gICAgICAgIHVybDogcmVzb2x2ZUFwaVVybCh7IGFwaTogY29uZmlnLnVybCB9KSxcbiAgICAgICAgaGVhZGVyczogeyAuLi5jb25maWcuaGVhZGVycywgXCJ4LWFnZW50LW5hbWVcIjogbmFtZSB9LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbmZpZyBzYXRpc2ZpZXMgbmV2ZXI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgdHlwZTogJHsoY29uZmlnIGFzIHsgdHlwZTogc3RyaW5nIH0pLnR5cGV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94aWVzIGEgc3RvcmFnZSBSUEMgcmVxdWVzdCB0byBhbiBleHRlcm5hbCBVUkwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb3h5U3RvcmFnZVJlcXVlc3Qoe1xuICB1cmwsXG4gIGhlYWRlcnMsXG4gIHJlcXVlc3QsXG59OiB7XG4gIHVybDogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVxdWVzdDogUnBjUmVxdWVzdDtcbn0pOiBQcm9taXNlPFJwY1Jlc3BvbnNlPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBcIlBST1hZX0VSUk9SXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBTdG9yYWdlIHByb3h5IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFJwY1Jlc3BvbnNlPjtcbn1cblxuZnVuY3Rpb24gc2NoZW1hVG9Kc29uU2NoZW1hKHNjaGVtYTogdW5rbm93bik6IEpTT05TY2hlbWE3IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiZcbiAgICBzY2hlbWEgIT09IG51bGwgJiZcbiAgICBcIl9kZWZcIiBpbiBzY2hlbWEgJiZcbiAgICB0eXBlb2YgKHNjaGVtYSBhcyB6LlpvZFR5cGUpLl9kZWYgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgcmV0dXJuIHoudG9KU09OU2NoZW1hKHNjaGVtYSBhcyB6LlpvZFR5cGUpIGFzIEpTT05TY2hlbWE3O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgc2NoZW1hICE9PSBudWxsKSB7XG4gICAgY29uc3QgcyA9IHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoU3ltYm9sLmZvcihcInZlcmNlbC5haS5zY2hlbWFcIikgaW4gcyAmJiBcImpzb25TY2hlbWFcIiBpbiBzKSB7XG4gICAgICByZXR1cm4gcy5qc29uU2NoZW1hIGFzIEpTT05TY2hlbWE3O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgc2NoZW1hICE9PSBudWxsICYmXG4gICAgKFwidHlwZVwiIGluIHNjaGVtYSB8fCBcInByb3BlcnRpZXNcIiBpbiBzY2hlbWEpXG4gICkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgSlNPTlNjaGVtYTc7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgU2VuZElucHV0IH0gZnJvbSBcIi4uL2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0IH0gZnJvbSBcIi4uL3N0b3JhZ2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgc2Vzc2lvbklkLFxuICBpZCxcbiAgaW5wdXQsXG4gIGRlZmF1bHRSb2xlLFxufToge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlucHV0OiBTZW5kSW5wdXQ7XG4gIGRlZmF1bHRSb2xlOiBVSU1lc3NhZ2VbXCJyb2xlXCJdO1xufSk6IHsgbWVzc2FnZTogTWVzc2FnZTsgcGFydHM6IFBhcnRbXSB9IHtcbiAgbGV0IG1lc3NhZ2VJZCA9IGlkID8/IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcm9sZTogZGVmYXVsdFJvbGUsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICB1c2FnZTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBwYXJ0czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBpZDogYHBhcnRfJHt1bGlkKCl9YCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBwYXJ0OiB7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBpbnB1dCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG4gIGlmIChpbnB1dC5pZCkge1xuICAgIG1lc3NhZ2VJZCA9IGlucHV0LmlkO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZToge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICByb2xlOiBpbnB1dC5yb2xlID8/IGRlZmF1bHRSb2xlLFxuICAgIH0sXG4gICAgcGFydHM6IGlucHV0LnBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+ICh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBpZDogYHBhcnRfJHt1bGlkKCl9YCxcbiAgICAgIGluZGV4LFxuICAgICAgcGFydCxcbiAgICB9KSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7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
1143
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC50cyIsICIuLi9zcmMvcnBjLWRpc3BhdGNoLnRzIiwgIi4uL3NyYy91dGlscy9tZXNzYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBnZXRWZXJjZWxPaWRjVG9rZW5TeW5jIH0gZnJvbSBcIkB2ZXJjZWwvb2lkY1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVUlNZXNzYWdlU3RyZWFtLFxuICB0eXBlIEdhdGV3YXlNb2RlbElkLFxuICB0eXBlIEluZmVyVG9vbElucHV0LFxuICB0eXBlIEluZmVyVUlUb29scyxcbiAgdHlwZSBNb2RlbE1lc3NhZ2UsXG4gIHR5cGUgVG9vbFNldCxcbiAgdHlwZSBVSU1lc3NhZ2UsXG4gIHR5cGUgVUlNZXNzYWdlQ2h1bmssXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYWxsIH0gZnJvbSBcImJldHRlci1hbGxcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyBnZXRSdW4sIHN0YXJ0IH0gZnJvbSBcIndvcmtmbG93L2FwaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZ2VudElucHV0LFxuICB0eXBlIEFnZW50TWVzc2FnZUlucHV0LFxuICBhZ2VudE1lc3NhZ2VIb29rLFxuICBhZ2VudFdvcmtmbG93LFxuICBhcHByb3ZhbEhvb2ssXG59IGZyb20gXCIuL2FnZW50LXdvcmtmbG93XCI7XG5pbXBvcnQge1xuICBTYW5kYm94Tm90Rm91bmRFcnJvcixcbiAgU2Vzc2lvbkVycm9yLFxuICBTZXNzaW9uTm90Rm91bmRFcnJvcixcbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4vZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBEaXNwYXRjaENvbnRleHQsXG4gIGRpc3BhdGNoLFxuICB0eXBlIEhvb2tTdGF0dXNQYXJhbXMsXG4gIHR5cGUgSG9va1N0YXR1c1Jlc3VsdCxcbiAgdHlwZSBIb29rVG9vbEFmdGVyUGFyYW1zLFxuICB0eXBlIEhvb2tUb29sQWZ0ZXJSZXN1bHQsXG4gIHR5cGUgSG9va1Rvb2xCZWZvcmVQYXJhbXMsXG4gIHR5cGUgSG9va1Rvb2xCZWZvcmVSZXN1bHQsXG4gIHR5cGUgVG9vbE1ldGFkYXRhLFxuICB0eXBlIFRvb2xzRXhlY3V0ZVBhcmFtcyxcbiAgdHlwZSBUb29sc05lZWRzQXBwcm92YWxQYXJhbXMsXG4gIHR5cGUgVG9vbHNOZWVkc0FwcHJvdmFsUmVzdWx0LFxufSBmcm9tIFwiLi9ycGMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7IGdldFNhbmRib3ggfSBmcm9tIFwiLi9zYW5kYm94XCI7XG5pbXBvcnQgdHlwZSB7IE9uUmVzdGFydCwgU2FuZGJveFNldHVwIH0gZnJvbSBcIi4vc2FuZGJveC90eXBlc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplU2tpbGxzRGlycyB9IGZyb20gXCIuL3NraWxscy9wYXJzZXJcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxzRGlyIH0gZnJvbSBcIi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQge1xuICB0eXBlIFN0b3JhZ2UgYXMgQWdlbnRTdG9yYWdlLFxuICBERUZBVUxUX05BTUVTUEFDRSxcbiAgZ2V0U3RvcmFnZSxcbiAgTE9DQUxfU1RPUkFHRV9WRVJTSU9OLFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgUGFydCxcbiAgdHlwZSBTYW5kYm94Q29uZmlnLFxuICB0eXBlIFNlc3Npb24sXG4gIHR5cGUgU3RvcmFnZUNvbmZpZyxcbiAgdHlwZSBIYW5kbGVycyBhcyBTdG9yYWdlSGFuZGxlcnMsXG4gIHR5cGUgU3RvcmFnZU1ldGhvZHMsXG4gIHR5cGUgVHlwZWRTdG9yYWdlLFxufSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgYnVpbHRJblRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IHRvTWVzc2FnZUFuZFBhcnRzIH0gZnJvbSBcIi4vdXRpbHMvbWVzc2FnZVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4vdXRpbHMvdWlcIjtcbmltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4vdXRpbHMvdXNhZ2VcIjtcblxuZXhwb3J0IHR5cGUgU2VuZElucHV0ID1cbiAgfCBzdHJpbmdcbiAgfCB7IHJvbGU/OiBVSU1lc3NhZ2VbXCJyb2xlXCJdOyBwYXJ0czogVUlNZXNzYWdlW1wicGFydHNcIl07IGlkPzogc3RyaW5nIH07XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3JzIGVtaXR0ZWQgb3ZlciB0aGUgc3RyZWFtIGR1cmluZyBsb25nLXJ1bm5pbmcgcGhhc2VzLlxuICogRGVsaXZlcmVkIHRvIHRoZSBjbGllbnQgYXMgYGRhdGEtc3RhdHVzYCBjaHVua3Mgd2l0aCBgdHJhbnNpZW50OiB0cnVlYCBcdTIwMTQgbm90IHBlcnNpc3RlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRTdGF0dXMgPVxuICB8IHsgdHlwZTogXCJzYW5kYm94LXNldHVwXCIgfVxuICB8IHsgdHlwZTogXCJzYW5kYm94LXNldHVwLWNvbGRcIiB9XG4gIHwgeyB0eXBlOiBcImxvYWRpbmctc2tpbGxzXCIgfVxuICB8IHsgdHlwZTogXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiIH1cbiAgfCB7IHR5cGU6IFwibmVlZHMtYXBwcm92YWxcIiB9XG4gIHwgeyB0eXBlOiBcInRoaW5raW5nXCIgfVxuICB8IHsgdHlwZTogXCJjdXN0b21cIjsgc3RhdHVzOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBdWdtZW50ZWQgYFJlYWRhYmxlU3RyZWFtYCByZXR1cm5lZCBieSBgc2Vzc2lvbi5zdHJlYW0oKWAuXG4gKiBQYXNzZXMgYGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1gIGFuZCB3b3JrcyB3aXRoIGBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KWAuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50U3RyZWFtID0gUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+ICYge1xuICAvKiogV3JpdGUgYSB0eXBlZCBzdGF0dXMgdXBkYXRlIHRvIHRoZSBzdHJlYW0gKHRyYW5zaWVudCwgbm90IHBlcnNpc3RlZCkuICovXG4gIHdyaXRlU3RhdHVzOiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogRGF0YSBwYXJ0IHR5cGVzIGVtaXR0ZWQgYnkgZXZlcnkgYWdlbnQgb3ZlciB0aGUgc3RyZWFtLlxuICogVXNlZCBhcyB0aGUgYERBVEFfUEFSVFNgIGdlbmVyaWMgZm9yIGBVSU1lc3NhZ2VgLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vKipcbiAqIEluZmVyIGEgdHlwZWQgVUlNZXNzYWdlIGZyb20gYW4gYWdlbnQgaW5zdGFuY2UuXG4gKiBUb29sIHBhcnRzIGFyZSBkaXNjcmltaW5hdGVkIGJ5IGB0eXBlOiBcInRvb2wtJHtuYW1lfVwiYCB3aXRoIHR5cGVkIGlucHV0L291dHB1dC5cbiAqIERhdGEgcGFydHMgaW5jbHVkZSBgZGF0YS1zdGF0dXNgIHdpdGggdHlwZWQgYEFnZW50U3RhdHVzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IG15QWdlbnQgPSBhZ2VudCh7IHRvb2xzOiB7IG15VG9vbDogdG9vbCh7Li4ufSkgfSB9KTtcbiAqIHR5cGUgTXlNZXNzYWdlID0gdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZTtcbiAqIC8vIE15TWVzc2FnZS5wYXJ0cyBpbmNsdWRlcyB7IHR5cGU6IFwidG9vbC1teVRvb2xcIjsgaW5wdXQ6IE15SW5wdXQ7IG91dHB1dDogTXlPdXRwdXQ7IC4uLiB9XG4gKiAvLyBvbkRhdGEgY2FsbGJhY2sgcmVjZWl2ZXMgeyB0eXBlOiBcImRhdGEtc3RhdHVzXCI7IGRhdGE6IEFnZW50U3RhdHVzIH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gID8gVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gIDogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzPjtcblxudHlwZSBUb29sTmFtZTxUb29scz4gPSBFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lO1xuXG50eXBlIFRvb2xJbnB1dDxUb29scywgSz4gPSBLIGV4dGVuZHMgQnVpbHRJblRvb2xOYW1lXG4gID8gSW5mZXJUb29sSW5wdXQ8KHR5cGVvZiBidWlsdEluVG9vbHMpW0tdPlxuICA6IEsgZXh0ZW5kcyBrZXlvZiBUb29sc1xuICAgID8gVG9vbHNbS10gZXh0ZW5kcyBpbXBvcnQoXCJhaVwiKS5Ub29sXG4gICAgICA/IEluZmVyVG9vbElucHV0PFRvb2xzW0tdPlxuICAgICAgOiB1bmtub3duXG4gICAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBOZWVkc0FwcHJvdmFsTWFwPFRvb2xzPiA9IHtcbiAgW0sgaW4gVG9vbE5hbWU8VG9vbHM+XT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKFxuICAgICAgICBpbnB1dDogVG9vbElucHV0PFRvb2xzLCBLPixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICAgIH1cbiAgICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xufTtcblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2FuIGJlIHNldCBwZXItc2Vzc2lvbiwgb3ZlcnJpZGluZyBhZ2VudC1sZXZlbCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk9wdGlvbnM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4gPSB7XG4gIC8qKiBUaGUgQUkgbW9kZWwgdG8gdXNlLiAqL1xuICBtb2RlbD86IEdhdGV3YXlNb2RlbElkO1xuICAvKiogU3lzdGVtIHByb21wdCBmb3IgdGhlIEFJIG1vZGVsLiAqL1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIC8qKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gb3IgSUQuIElmIHN0cmluZywgdXNlcyBhcyBzYW5kYm94IElEIHdpdGggaXRzIGNvbmZpZy4gKi9cbiAgc2FuZGJveD86XG4gICAgfCAoU2FuZGJveENvbmZpZyAmIHsgc2V0dXA/OiBTYW5kYm94U2V0dXA7IG9uUmVzdGFydD86IE9uUmVzdGFydCB9KVxuICAgIHwgc3RyaW5nO1xuICAvKiogS2V5LXZhbHVlIG1ldGFkYXRhIHRhZ3MgZm9yIHRoZSBzZXNzaW9uLiAqL1xuICB0YWdzPzogVFRhZ3M7XG4gIC8qKiBEaXJlY3RvcnkgY29udGFpbmluZyBza2lsbCBkZWZpbml0aW9ucyBmb3IgdGhlIGFnZW50LiAqL1xuICBza2lsbHNEaXI/OiBTa2lsbHNEaXI7XG4gIC8qKlxuICAgKiBOYW1lcyBvZiB0b29scyB0byBhY3RpdmF0ZSBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgYWdlbnQtbGV2ZWwgdG9vbHMgYXJlIGFjdGl2ZS5cbiAgICogVXNlIHRoaXMgdG8gcmVzdHJpY3Qgd2hpY2ggdG9vbHMgYXJlIGF2YWlsYWJsZSBwZXItc2Vzc2lvbi5cbiAgICovXG4gIGFjdGl2ZVRvb2xzPzogKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW107XG4gIC8qKiBHZW5lcmF0aW9uIG9wdGlvbnMgKHRlbXBlcmF0dXJlLCBtYXhTdGVwcywgZXRjLikuIE92ZXJyaWRlcyBhZ2VudC1sZXZlbCBkZWZhdWx0cy4gKi9cbiAgZ2VuZXJhdGlvbj86IEdlbmVyYXRpb25PcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvblVwZGF0ZU9wdGlvbnM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PiA9IFBpY2s8XG4gIFNlc3Npb25PcHRpb25zPFRvb2xzPixcbiAgXCJtb2RlbFwiIHwgXCJzeXN0ZW1cIiB8IFwic2tpbGxzRGlyXCIgfCBcImFjdGl2ZVRvb2xzXCIgfCBcImdlbmVyYXRpb25cIlxuPjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIGFnZW50IGluc3RhbmNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgbXlBZ2VudCA9IGFnZW50KHtcbiAqICAgbW9kZWw6IFwiYW50aHJvcGljL2NsYXVkZS1vcHVzLTQuNVwiLFxuICogICBzeXN0ZW06IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50Li4uXCIsXG4gKiAgIHRhZ3NTY2hlbWE6IHoub2JqZWN0KHsgdXNlcklkOiB6LnN0cmluZygpIH0pLFxuICogICBjb250ZXh0U2NoZW1hOiB6Lm9iamVjdCh7IGF1dGhUb2tlbjogei5zdHJpbmcoKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50T3B0aW9uczxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUVGFncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuPiA9IHtcbiAgLyoqXG4gICAqIEFnZW50IG5hbWUuIFVzZWQgdG8gaXNvbGF0ZSBzdG9yYWdlIGRhdGEgLSBkaWZmZXJlbnQgbmFtZXMgaGF2ZSBzZXBhcmF0ZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBcImRlZmF1bHRcIlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0b3JhZ2UgYmFja2VuZCBjb25maWd1cmF0aW9uLlxuICAgKiAtIGB7IHR5cGU6IFwibG9jYWxcIiB9YCAtIGZpbGVzeXN0ZW0gc3RvcmFnZSAoZGV2KVxuICAgKiAtIGB7IHR5cGU6IFwidmVyY2VsXCIgfWAgLSBWZXJjZWwgbWFuYWdlZCBzdG9yYWdlIChwcm9kKVxuICAgKiAtIGB7IHR5cGU6IFwiY3VzdG9tXCIsIHVybDogXCIuLi5cIiB9YCAtIGN1c3RvbSBIVFRQIGJhY2tlbmRcbiAgICogQGRlZmF1bHQgSW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudDogYHsgdHlwZTogXCJ2ZXJjZWxcIiB9YCB3aGVuIGBWRVJDRUxfT0lEQ19UT0tFTmAgaXMgc2V0LCBgeyB0eXBlOiBcImxvY2FsXCIgfWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gdG9vbHMgYXZhaWxhYmxlIHRvIHRoZSBhZ2VudC5cbiAgICogVGhlc2UgYXJlIGV4cG9zZWQgdmlhIHRoZSBSUEMgaGFuZGxlciBhbmQgY2FsbGVkIG92ZXIgSFRUUC5cbiAgICovXG4gIHRvb2xzPzogVG9vbHM7XG4gIC8qKlxuICAgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIGFnZW50IG9wZXJhdGlvbnMuXG4gICAqL1xuICBob29rcz86IEFnZW50SG9va3M7XG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHNlc3Npb24gdGFncy4gQWxsIHNlc3Npb25zIHNoYXJlIHRoaXMgc2NoZW1hLlxuICAgKiBUYWdzIGFyZSBwZXJzaXN0ZWQgaW4gc3RvcmFnZSBhbmQgc3Vydml2ZSBhY3Jvc3MgcmVxdWVzdHMuXG4gICAqL1xuICB0YWdzU2NoZW1hPzogei5ab2RUeXBlPFRUYWdzPjtcbiAgLyoqXG4gICAqIFNjaGVtYSBmb3IgdHJhbnNpZW50IHRvb2wgY29udGV4dC4gUGFzc2VkIHBlci1yZXF1ZXN0IHZpYSBzZW5kKCkuXG4gICAqIE5PVCBwZXJzaXN0ZWQgLSB1c2UgZm9yIHNlY3JldHMgbGlrZSBhdXRoIHRva2Vucy5cbiAgICovXG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICAvKipcbiAgICogQXBwcm92YWwgcnVsZXMgZm9yIHRvb2xzIHlvdSBkb24ndCBvd24gKGJ1aWx0LWluIG9yIHRoaXJkLXBhcnR5KS5cbiAgICogTWFwcyB0b29sIG5hbWVzIHRvIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRvIGFzay5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogbmVlZHNBcHByb3ZhbDoge1xuICAgKiAgIEJhc2g6IChpbnB1dCkgPT4gaW5wdXQuY29tbWFuZC5zdGFydHNXaXRoKFwicm1cIiksXG4gICAqICAgV3JpdGU6IHRydWUsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIC8qKlxuICAgKiBTYW5kYm94IGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25hbCBzZXR1cCBhbmQgcmVzdGFydCBob29rcy5cbiAgICpcbiAgICogLSBgc2V0dXAua2V5YDogZXhwbGljaXQgc3RyaW5nIHRvIGNvbnRyb2wgc25hcHNob3QgaW52YWxpZGF0aW9uIChidW1wIHRvIHJlLXJ1bilcbiAgICogLSBgc2V0dXAucnVuYDogYXN5bmMgZnVuY3Rpb24gdGhhdCBydW5zIG9uY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc2FuZGJveCwgdGhlbiBnZXRzIHNuYXBzaG90dGVkXG4gICAqIC0gYG9uUmVzdGFydGA6IGFzeW5jIGZ1bmN0aW9uIHRoYXQgcnVucyBldmVyeSB0aW1lIGEgc2FuZGJveCByZXN1bWVzIGZyb20gYSBzbmFwc2hvdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBzYW5kYm94OiB7XG4gICAqICAgdHlwZTogXCJ2ZXJjZWxcIixcbiAgICogICBzZXR1cDoge1xuICAgKiAgICAga2V5OiBcImRldi1lbnYtdjNcIixcbiAgICogICAgIHJ1bjogYXN5bmMgKHNhbmRib3gpID0+IHtcbiAgICogICAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJucG1cIiwgYXJnczogW1wiaVwiLCBcIi1nXCIsIFwidmVyY2VsXCJdIH0pXG4gICAqICAgICB9LFxuICAgKiAgIH0sXG4gICAqICAgb25SZXN0YXJ0OiBhc3luYyAoc2FuZGJveCkgPT4ge1xuICAgKiAgICAgYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJiYXNoXCIsIGFyZ3M6IFtcIi1jXCIsIFwibnBtIHJ1biBkZXYgJlwiXSB9KVxuICAgKiAgIH0sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzYW5kYm94PzpcbiAgICB8IChTYW5kYm94Q29uZmlnICYgeyBzZXR1cD86IFNhbmRib3hTZXR1cDsgb25SZXN0YXJ0PzogT25SZXN0YXJ0IH0pXG4gICAgfCBzdHJpbmc7XG59ICYgT21pdDxTZXNzaW9uT3B0aW9uczxUb29scywgVFRhZ3M+LCBcInRhZ3NcIiB8IFwic2FuZGJveFwiPjtcblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHNlc3Npb24vc2FuZGJveCB0YWdzLiBVc2VkIGZvciBnZW5lcmljIGNvbnN0cmFpbnRzLlxuICogRm9yIGFnZW50LWxldmVsIHRhZyB2YWxpZGF0aW9uLCB1c2UgYHRhZ3NTY2hlbWFgIG9wdGlvbiB3aXRoIGEgem9kIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgVGFnc1NjaGVtYSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgYWdlbnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRIb29rcyA9IHtcbiAgLyoqIENhbGxlZCBiZWZvcmUgYSB0b29sIGlzIGV4ZWN1dGVkLiBDYW4gbW9kaWZ5IGlucHV0IG9yIHRocm93IHRvIGJsb2NrLiAqL1xuICBcInRvb2wuYmVmb3JlXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICBjb250ZXh0OiBUb29sQ29udGV4dDtcbiAgfSkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCB7IGlucHV0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIGFmdGVyIGEgdG9vbCBpcyBleGVjdXRlZC4gQ2FuIG1vZGlmeSByZXN1bHQuICovXG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFnZW50IGVtaXRzIGEgdHJhbnNpZW50IHN0YXR1cyBpbmRpY2F0b3IuICovXG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogUlBDIHJlcXVlc3QgYm9keSBmb3IgYWdlbnQgaGFuZGxlci5cbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb24gYG1ldGhvZGAgZm9yIHR5cGUtc2FmZSBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFnZW50UnBjUmVxdWVzdCA9IHtcbiAgW0sgaW4ga2V5b2YgQWdlbnRScGNNZXRob2RzXToge1xuICAgIG1ldGhvZDogSztcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXTtcbiAgfTtcbn1ba2V5b2YgQWdlbnRScGNNZXRob2RzXTtcblxuLyoqXG4gKiBSUEMgcmVzcG9uc2UgdHlwZSBmb3IgZGlzcGF0Y2guXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1Jlc3VsdDxUID0gdW5rbm93bj4gPVxuICB8IHsgcmVzdWx0OiBUIH1cbiAgfCB7IGVycm9yOiB7IGNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07IHN0YXR1cz86IG51bWJlciB9O1xuXG4vKipcbiAqIERpcmVjdCBSUEMgcGF5bG9hZCBmb3Igc3RlcCBmdW5jdGlvbiBjYWxscyAobm8gSFRUUCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJwY1BheWxvYWQgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXJhbXM6IHVua25vd247XG59O1xuXG4vKipcbiAqIEFsbCBSUEMgbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIGFnZW50IGhhbmRsZXIuXG4gKiBDb21iaW5lcyB0b29scyBtZXRob2RzLCBob29rcywgYW5kIHN0b3JhZ2UgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2RzID0ge1xuICBcInRvb2xzLmxpc3RcIjogeyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjsgcmVzdWx0OiBUb29sTWV0YWRhdGFbXSB9O1xuICBcInRvb2xzLmV4ZWN1dGVcIjogeyBwYXJhbXM6IFRvb2xzRXhlY3V0ZVBhcmFtczsgcmVzdWx0OiB1bmtub3duIH07XG4gIFwidG9vbHMubmVlZHNBcHByb3ZhbFwiOiB7XG4gICAgcGFyYW1zOiBUb29sc05lZWRzQXBwcm92YWxQYXJhbXM7XG4gICAgcmVzdWx0OiBUb29sc05lZWRzQXBwcm92YWxSZXN1bHQ7XG4gIH07XG4gIFwiaG9vay50b29sLmJlZm9yZVwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEJlZm9yZVBhcmFtcztcbiAgICByZXN1bHQ6IEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICB9O1xuICBcImhvb2sudG9vbC5hZnRlclwiOiB7XG4gICAgcGFyYW1zOiBIb29rVG9vbEFmdGVyUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgfTtcbiAgXCJob29rLnN0YXR1c1wiOiB7XG4gICAgcGFyYW1zOiBIb29rU3RhdHVzUGFyYW1zO1xuICAgIHJlc3VsdDogSG9va1N0YXR1c1Jlc3VsdDtcbiAgfTtcbn0gJiBTdG9yYWdlTWV0aG9kcztcblxuZXhwb3J0IHR5cGUgQWdlbnRScGNNZXRob2ROYW1lID0ga2V5b2YgQWdlbnRScGNNZXRob2RzO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIGZvciBSUEMgb3ZlcnJpZGUgaGFuZGxlcnMuXG4gKiAtIGB7IG9rOiB0cnVlOyByZXN1bHQ6IFQgfWAgLSByZXR1cm4gdGhpcyByZXN1bHRcbiAqIC0gYHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH1gIC0gcmV0dXJuIHRoaXMgZXJyb3JcbiAqIC0gYG51bGxgIC0gdXNlIGRlZmF1bHQgaGFuZGxlclxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY1Jlc3VsdDxUPiA9XG4gIHwgeyBvazogdHJ1ZTsgcmVzdWx0OiBUIH1cbiAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9XG4gIHwgbnVsbDtcblxuLyoqXG4gKiBPdmVycmlkZSBoYW5kbGVycyBmb3IgYWdlbnQgUlBDIG1ldGhvZHMuXG4gKiBFYWNoIG1ldGhvZCBjYW4gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4uXG4gKiBSZXR1cm4gYG51bGxgIHRvIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJwY092ZXJyaWRlcyA9IHtcbiAgW0sgaW4gQWdlbnRScGNNZXRob2ROYW1lXT86IChcbiAgICBwYXJhbXM6IEFnZW50UnBjTWV0aG9kc1tLXVtcInBhcmFtc1wiXVxuICApID0+IFByb21pc2U8QWdlbnRScGNSZXN1bHQ8QWdlbnRScGNNZXRob2RzW0tdW1wicmVzdWx0XCJdPj47XG59O1xuXG5jb25zdCBpc1ZlcmNlbCA9ICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQm9vbGVhbihnZXRWZXJjZWxPaWRjVG9rZW5TeW5jKCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZ2VudCA9IDxcbiAgVG9vbHMgZXh0ZW5kcyB7fSxcbiAgVFRhZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbj4oXG4gIG9wdGlvbnM6IEFnZW50T3B0aW9uczxUb29scywgVFRhZ3MsIFRDb250ZXh0PlxuKSA9PiB7XG4gIGNvbnN0IGFnZW50U2VjcmV0ID0gcHJvY2Vzcy5lbnYuQUdFTlRfU0VDUkVUO1xuICBpZiAoIWFnZW50U2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBR0VOVF9TRUNSRVQgZW52IHZhciBpcyByZXF1aXJlZC4gVXNlIHdpdGhBZ2VudCgpIG9yIHNldCBpdCBtYW51YWxseS5cIlxuICAgICk7XG4gIH1cblxuICBjb25zdCBiYXNlU3RvcmFnZUNvbmZpZyA9XG4gICAgb3B0aW9ucy5zdG9yYWdlID8/XG4gICAgKChpc1ZlcmNlbCgpXG4gICAgICA/IHsgdHlwZTogXCJ2ZXJjZWxcIiB9XG4gICAgICA6IHsgdHlwZTogXCJsb2NhbFwiIH0pIHNhdGlzZmllcyBTdG9yYWdlQ29uZmlnKTtcbiAgY29uc3Qgc3RvcmFnZUNvbmZpZzogU3RvcmFnZUNvbmZpZyA9IHtcbiAgICAuLi5iYXNlU3RvcmFnZUNvbmZpZyxcbiAgICBuYW1lOiBvcHRpb25zLm5hbWUgPz8gYmFzZVN0b3JhZ2VDb25maWcubmFtZSxcbiAgfTtcblxuICAvKipcbiAgICogU3RvcmFnZSBpcyBpbml0aWFsaXplZCBsYXppbHkuXG4gICAqIFVzZXMgYWdlbnRPYmoucnBjIHdoaWNoIGlzIHdpcmVkIHVwIGJ5IHRoZSBsb2FkZXIgY2FsbGluZyBfX2luaXRBZ2VudC5cbiAgICovXG4gIGxldCBfc3RvcmFnZTogQWdlbnRTdG9yYWdlIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGdldFN0b3JhZ2VJbnN0YW5jZSA9ICgpOiBBZ2VudFN0b3JhZ2UgPT4ge1xuICAgIGlmICghX3N0b3JhZ2UpIHtcbiAgICAgIF9zdG9yYWdlID0gZ2V0U3RvcmFnZSh7XG4gICAgICAgIGNvbmZpZzogc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgcnBjOiBhZ2VudE9iai5ycGMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIF9zdG9yYWdlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBMYXp5LWluaXRpYWxpemVkIHN0b3JhZ2UgaGFuZGxlcnMgZm9yIGxvY2FsIHN0b3JhZ2UuXG4gICAqIENyZWF0ZWQgb24gZmlyc3Qgc3RvcmFnZSBSUEMgcmVxdWVzdC5cbiAgICovXG4gIGxldCBzdG9yYWdlSGFuZGxlcnNQcm9taXNlOiBQcm9taXNlPFN0b3JhZ2VIYW5kbGVycz4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgZ2V0U3RvcmFnZUhhbmRsZXJzID0gKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPiA9PiB7XG4gICAgaWYgKHN0b3JhZ2VDb25maWcudHlwZSAhPT0gXCJsb2NhbFwiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcIlN0b3JhZ2UgaGFuZGxlcnMgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHN0b3JhZ2VcIilcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghc3RvcmFnZUhhbmRsZXJzUHJvbWlzZSkge1xuICAgICAgc3RvcmFnZUhhbmRsZXJzUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgICAgICBjb25zdCB7IGNyZWF0ZUZpbGVzeXN0ZW1IYW5kbGVycyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAgIFwiLi9zdG9yYWdlL2JpbmRpbmdzL2xvY2FsLWZzLWhhbmRsZXJzXCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBzdG9yYWdlQ29uZmlnLnBhdGggPz8gXCIuYWdlbnQtc3RvcmFnZVwiO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oYmFzZVBhdGgsIG5hbWUsIExPQ0FMX1NUT1JBR0VfVkVSU0lPTik7XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMoZnVsbFBhdGgpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JhZ2VIYW5kbGVyc1Byb21pc2U7XG4gIH07XG5cbiAgLy8gRXh0cmFjdCBzZXR1cCBhbmQgb25SZXN0YXJ0IGZyb20gYWdlbnQtbGV2ZWwgc2FuZGJveCBvcHRpb25zIChub3Qgc2VyaWFsaXphYmxlKVxuICBjb25zdCBhZ2VudFNhbmRib3hPcHRpb24gPSBvcHRpb25zLnNhbmRib3g7XG4gIGNvbnN0IHNhbmRib3hTZXR1cCA9XG4gICAgYWdlbnRTYW5kYm94T3B0aW9uICYmIHR5cGVvZiBhZ2VudFNhbmRib3hPcHRpb24gIT09IFwic3RyaW5nXCJcbiAgICAgID8gYWdlbnRTYW5kYm94T3B0aW9uLnNldHVwXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2FuZGJveE9uUmVzdGFydCA9XG4gICAgYWdlbnRTYW5kYm94T3B0aW9uICYmIHR5cGVvZiBhZ2VudFNhbmRib3hPcHRpb24gIT09IFwic3RyaW5nXCJcbiAgICAgID8gYWdlbnRTYW5kYm94T3B0aW9uLm9uUmVzdGFydFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc2FuZGJveCA9IGFzeW5jIChcbiAgICBzYW5kYm94SWQ6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgY29uZmlnPzogU2FuZGJveENvbmZpZztcbiAgICAgIHRhZ3M/OiBUVGFncztcbiAgICAgIHNldHVwPzogU2FuZGJveFNldHVwO1xuICAgICAgb25SZXN0YXJ0PzogT25SZXN0YXJ0O1xuICAgIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmdSZWNvcmQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuXG4gICAgLy8gQ29tcG9zZSBhZ2VudC1sZXZlbCBhbmQgc2Vzc2lvbi1sZXZlbCBzZXR1cC9vblJlc3RhcnQuXG4gICAgLy8gU2Vzc2lvbiBzZXR1cCBydW5zIG9uIHRvcCBvZiBhZ2VudCBzZXR1cCAoZS5nLiBhZ2VudCBpbnN0YWxscyBzaGFyZWQgZGVwcyxcbiAgICAvLyBzZXNzaW9uIGRvZXMgZ2l0IGNsb25lICsgbnBtIGluc3RhbGwpLiBUaGUgY29tcG9zZWQga2V5IGluY29ycG9yYXRlcyBib3RoXG4gICAgLy8gc28gc25hcHNob3QgaW52YWxpZGF0aW9uIHdvcmtzIGNvcnJlY3RseS5cbiAgICBjb25zdCByZXNvbHZlZFNldHVwOiBTYW5kYm94U2V0dXAgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0cz8uc2V0dXAgJiYgc2FuZGJveFNldHVwXG4gICAgICAgID8ge1xuICAgICAgICAgICAga2V5OiBgJHtzYW5kYm94U2V0dXAua2V5fToke29wdHMuc2V0dXAua2V5fWAsXG4gICAgICAgICAgICBydW46IGFzeW5jIChzYngpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgc2FuZGJveFNldHVwLnJ1bihzYngpO1xuICAgICAgICAgICAgICBhd2FpdCBvcHRzLnNldHVwPy5ydW4oc2J4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IChvcHRzPy5zZXR1cCA/PyBzYW5kYm94U2V0dXApO1xuICAgIGNvbnN0IHJlc29sdmVkT25SZXN0YXJ0OiBPblJlc3RhcnQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0cz8ub25SZXN0YXJ0ICYmIHNhbmRib3hPblJlc3RhcnRcbiAgICAgICAgPyBhc3luYyAoc2J4KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBzYW5kYm94T25SZXN0YXJ0KHNieCk7XG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uUmVzdGFydD8uKHNieCk7XG4gICAgICAgICAgfVxuICAgICAgICA6IChvcHRzPy5vblJlc3RhcnQgPz8gc2FuZGJveE9uUmVzdGFydCk7XG5cbiAgICAvLyBTdHJpcCBzZXR1cC9vblJlc3RhcnQgZnJvbSBjb25maWcgYmVmb3JlIHN0b3JpbmcgKGZ1bmN0aW9ucyBhcmVuJ3Qgc2VyaWFsaXphYmxlKVxuICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSAoKTogU2FuZGJveENvbmZpZyA9PiB7XG4gICAgICBpZiAob3B0cz8uY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBvcHRzLmNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zYW5kYm94ID09PSBcInN0cmluZ1wiIHx8ICFvcHRpb25zLnNhbmRib3gpIHtcbiAgICAgICAgcmV0dXJuIGlzVmVyY2VsKCkgPyB7IHR5cGU6IFwidmVyY2VsXCIgfSA6IHsgdHlwZTogXCJsb2NhbFwiIH07XG4gICAgICB9XG4gICAgICBjb25zdCB7IHNldHVwOiBfcywgb25SZXN0YXJ0OiBfciwgLi4ucmVzdCB9ID0gb3B0aW9ucy5zYW5kYm94O1xuICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfTtcblxuICAgIGlmIChleGlzdGluZ1JlY29yZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoIShleGlzdGluZ1JlY29yZCBpbnN0YW5jZW9mIFNhbmRib3hOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBleGlzdGluZ1JlY29yZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNhbmRib3hSZWNvcmQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zYW5kYm94LnNldCh7XG4gICAgICAgIGlkOiBzYW5kYm94SWQsXG4gICAgICAgIHRhZ3M6IG9wdHM/LnRhZ3MgPz8gbnVsbCxcbiAgICAgICAgYWNxdWlyaW5nTG9ja0F0OiBudWxsLFxuICAgICAgICBhY3F1aXJpbmdMb2NrSWQ6IG51bGwsXG4gICAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgbGFzdEFjdGl2aXR5QXQ6IERhdGUubm93KCksXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUNvbmZpZygpLFxuICAgICAgfSk7XG4gICAgICBpZiAoc2FuZGJveFJlY29yZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IHNhbmRib3hSZWNvcmQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0U2FuZGJveDxUVGFncz4oe1xuICAgICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgICBzYW5kYm94UmVjb3JkLFxuICAgICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgICAgcnBjOiBhZ2VudE9iai5ycGMsXG4gICAgICAgIHNldHVwOiByZXNvbHZlZFNldHVwLFxuICAgICAgICBvblJlc3RhcnQ6IHJlc29sdmVkT25SZXN0YXJ0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q29uZmlnID0gb3B0cz8uY29uZmlnID8/IGV4aXN0aW5nUmVjb3JkLmNvbmZpZztcbiAgICBpZiAoIWVxdWFsKGV4aXN0aW5nUmVjb3JkLmNvbmZpZywgbmV3Q29uZmlnKSkge1xuICAgICAgLy8gdGhyb3cgbmV3IFNhbmRib3hFcnJvcih7XG4gICAgICAvLyAgIHJlYXNvbjogXCJzYW5kYm94IGNvbmZpZyBjaGFuZ2VzIGFyZSBub3Qgc3VwcG9ydGVkXCIsXG4gICAgICAvLyB9KTtcbiAgICAgIGNvbnNvbGUud2FybihcInNhbmRib3ggY29uZmlnIGNoYW5nZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFNhbmRib3g8VFRhZ3M+KHtcbiAgICAgIHN0b3JhZ2VDb25maWcsXG4gICAgICBzYW5kYm94UmVjb3JkOiBleGlzdGluZ1JlY29yZCxcbiAgICAgIHN0b3JhZ2U6IGdldFN0b3JhZ2VJbnN0YW5jZSgpLFxuICAgICAgcnBjOiBhZ2VudE9iai5ycGMsXG4gICAgICBzZXR1cDogcmVzb2x2ZWRTZXR1cCxcbiAgICAgIG9uUmVzdGFydDogcmVzb2x2ZWRPblJlc3RhcnQsXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYWdlbnRPYmogPSB7XG4gICAgc2Vzc2lvbjogYXN5bmMgKFxuICAgICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzZXNzaW9uT3B0aW9ucz86IFNlc3Npb25PcHRpb25zPFRvb2xzLCBUVGFncz5cbiAgICApID0+IHtcbiAgICAgIGxldCBzZXNzaW9uID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBub3JtYWxpemUgc2FuZGJveCBpbnB1dCB0byBhIHNhbmRib3ggSUQgYW5kIGNvbmZpZ1xuICAgICAgICovXG4gICAgICBjb25zdCBzYW5kYm94SW5wdXQgPSBzZXNzaW9uT3B0aW9ucz8uc2FuZGJveCA/PyBvcHRpb25zLnNhbmRib3g7XG4gICAgICBjb25zdCBzYW5kYm94SWQgPVxuICAgICAgICB0eXBlb2Ygc2FuZGJveElucHV0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBzYW5kYm94SW5wdXRcbiAgICAgICAgICA6IC8vIGJpb21lLWlnbm9yZSBsaW50L3N0eWxlL25vTmVzdGVkVGVybmFyeTogb2tcbiAgICAgICAgICAgIHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgPyBgc2FuZGJveF8ke3VsaWQoKX1gXG4gICAgICAgICAgICA6IChzZXNzaW9uLnNhbmRib3hJZCA/PyBgc2FuZGJveF8ke3VsaWQoKX1gKTtcbiAgICAgIC8vIFN0cmlwIG5vbi1zZXJpYWxpemFibGUgZmllbGRzIChzZXR1cC9vblJlc3RhcnQpIGJlZm9yZSBwYXNzaW5nIGFzIGNvbmZpZy5cbiAgICAgIC8vIE9ubHkgdHJlYXQgc2V0dXAvb25SZXN0YXJ0IGFzIHNlc3Npb24tbGV2ZWwgb3ZlcnJpZGVzIHdoZW4gdGhlIHNlc3Npb25cbiAgICAgIC8vIGFjdHVhbGx5IHByb3ZpZGVkIGl0cyBvd24gc2FuZGJveCBjb25maWcgKG5vdCB3aGVuIGZhbGxpbmcgYmFjayB0byBhZ2VudCBjb25maWcpLlxuICAgICAgY29uc3QgaGFzU2Vzc2lvblNhbmRib3ggPSBzZXNzaW9uT3B0aW9ucz8uc2FuZGJveCAhPSBudWxsO1xuICAgICAgbGV0IHNlc3Npb25TZXR1cDogU2FuZGJveFNldHVwIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNlc3Npb25PblJlc3RhcnQ6IE9uUmVzdGFydCB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNhbmRib3hDb25maWc6IFNhbmRib3hDb25maWcgfCB1bmRlZmluZWQgPVxuICAgICAgICB0eXBlb2Ygc2FuZGJveElucHV0ID09PSBcInN0cmluZ1wiIHx8ICFzYW5kYm94SW5wdXRcbiAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgIDogKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHNldHVwOiBfcyxcbiAgICAgICAgICAgICAgICBvblJlc3RhcnQ6IF9yLFxuICAgICAgICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgICAgICAgfSA9IHNhbmRib3hJbnB1dCBhcyBTYW5kYm94Q29uZmlnICYge1xuICAgICAgICAgICAgICAgIHNldHVwPzogU2FuZGJveFNldHVwO1xuICAgICAgICAgICAgICAgIG9uUmVzdGFydD86IE9uUmVzdGFydDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKGhhc1Nlc3Npb25TYW5kYm94KSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvblNldHVwID0gX3M7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbk9uUmVzdGFydCA9IF9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN0O1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQcm9taXNlID0gc2FuZGJveChcbiAgICAgICAgc2FuZGJveElkLFxuICAgICAgICBzYW5kYm94Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogc2FuZGJveENvbmZpZyxcbiAgICAgICAgICAgICAgc2V0dXA6IHNlc3Npb25TZXR1cCxcbiAgICAgICAgICAgICAgb25SZXN0YXJ0OiBzZXNzaW9uT25SZXN0YXJ0LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApO1xuXG4gICAgICBjb25zdCBleGlzdGluZ1Nlc3Npb24gPSBzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IgPyBudWxsIDogc2Vzc2lvbjtcbiAgICAgIGNvbnN0IHNraWxsc0RpciA9XG4gICAgICAgIHNlc3Npb25PcHRpb25zPy5za2lsbHNEaXIgPz9cbiAgICAgICAgZXhpc3RpbmdTZXNzaW9uPy5za2lsbHNEaXIgPz9cbiAgICAgICAgb3B0aW9ucy5za2lsbHNEaXIgPz9cbiAgICAgICAgbnVsbDtcblxuICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIFNlc3Npb25Ob3RGb3VuZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbW9kZWwgPSBzZXNzaW9uT3B0aW9ucz8ubW9kZWwgPz8gb3B0aW9ucy5tb2RlbCA/PyBudWxsO1xuICAgICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICByZWFzb246IFwiTW9kZWwgaXMgbm90IHNldFwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnNldCh7XG4gICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgbGFzdE1lc3NhZ2VJZDogbnVsbCxcbiAgICAgICAgICAgIHJ1bklkOiBudWxsLFxuICAgICAgICAgICAgdGFnczogc2Vzc2lvbk9wdGlvbnM/LnRhZ3MgPz8gbnVsbCxcbiAgICAgICAgICAgIHN5c3RlbTogc2Vzc2lvbk9wdGlvbnM/LnN5c3RlbSA/PyBvcHRpb25zLnN5c3RlbSA/PyBudWxsLFxuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgICAgICBza2lsbHNEaXI6IHNraWxsc0RpciA/IG5vcm1hbGl6ZVNraWxsc0RpcnMoc2tpbGxzRGlyKSA6IG51bGwsXG4gICAgICAgICAgICBob29rVG9rZW46IG51bGwsXG4gICAgICAgICAgICBhY3RpdmVUb29sczpcbiAgICAgICAgICAgICAgc2Vzc2lvbk9wdGlvbnM/LmFjdGl2ZVRvb2xzID8/IG9wdGlvbnMuYWN0aXZlVG9vbHMgPz8gbnVsbCxcbiAgICAgICAgICAgIGdlbmVyYXRpb246XG4gICAgICAgICAgICAgIG9wdGlvbnMuZ2VuZXJhdGlvbiB8fCBzZXNzaW9uT3B0aW9ucz8uZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgID8geyAuLi5vcHRpb25zLmdlbmVyYXRpb24sIC4uLnNlc3Npb25PcHRpb25zPy5nZW5lcmF0aW9uIH1cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgc2Vzc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEludGVycnVwdHMgYWxsIHBlbmRpbmcgYXNzaXN0YW50IG1lc3NhZ2VzIChib3RoIHN0cmVhbWluZyBhbmQgcXVldWVkKS5cbiAgICAgICAqIEEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHBlbmRpbmcgaWYgY29tcGxldGVkQXQgPT09IG51bGwgJiYgaW50ZXJydXB0ZWRBdCA9PT0gbnVsbC5cbiAgICAgICAqL1xuICAgICAgY29uc3QgaW50ZXJydXB0Q3VycmVudE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzUmVzdWx0ID1cbiAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5tZXNzYWdlLmxpc3Qoc2Vzc2lvbklkKTtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZXNSZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMgPSBtZXNzYWdlc1Jlc3VsdC5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKG0pID0+XG4gICAgICAgICAgICBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiZcbiAgICAgICAgICAgIG0uY29tcGxldGVkQXQgPT09IG51bGwgJiZcbiAgICAgICAgICAgIG0uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubWFwKChtKSA9PlxuICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkubWVzc2FnZS5zZXQoeyAuLi5tLCBpbnRlcnJ1cHRlZEF0OiBub3cgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdXRvLXJlamVjdCBhbnkgcGVuZGluZyBhcHByb3ZhbCBob29rcyBzbyB0aGUgd29ya2Zsb3cgdW5ibG9ja3NcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzUmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlNZXNzYWdlKFxuICAgICAgICAgICAgbS5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGFydHNSZXN1bHQuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcC5wYXJ0ICYmXG4gICAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSlcbiAgICAgICAgICAgICAgICAuYXBwcm92YWw7XG4gICAgICAgICAgICAgIGlmIChhcHByb3ZhbD8uaWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldCh7XG4gICAgICAgICAgICAgICAgICAuLi5wLFxuICAgICAgICAgICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBcImFwcHJvdmFsLXJlc3BvbmRlZFwiLFxuICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbDoge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmFwcHJvdmFsLFxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSBhcyBQYXJ0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcHByb3ZhbEhvb2sucmVzdW1lKGFwcHJvdmFsLmlkLCB7XG4gICAgICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZW5kOiBhc3luYyAoe1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIGludGVycnVwdElmU3RyZWFtaW5nLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBpbnB1dDogU2VuZElucHV0IHwgU2VuZElucHV0W107XG4gICAgICAgICAgaW50ZXJydXB0SWZTdHJlYW1pbmc/OiBib29sZWFuO1xuICAgICAgICAgIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGlmIChpbnRlcnJ1cHRJZlN0cmVhbWluZykge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJydXB0UmVzdWx0ID0gYXdhaXQgaW50ZXJydXB0Q3VycmVudE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGlmIChpbnRlcnJ1cHRSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJydXB0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgICAgICAgY29uc3QgbmV3UGFydHM6IFBhcnRbXSA9IFtdO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IGksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogd2UgYWxzbyBwcmUtY3JlYXRlIHRoZSBhc3Npc3RhbnQgbWVzc2FnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQgPSBiYXNlVGltZSArIG5ld01lc3NhZ2VzLmxlbmd0aDtcbiAgICAgICAgICBuZXdNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZXNzaW9uMiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHNlc3Npb24yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHNlc3Npb24yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFnZW50SW5wdXQ6IEFnZW50SW5wdXQgPSB7XG4gICAgICAgICAgICBzdG9yYWdlQ29uZmlnLFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgcnBjOiBhZ2VudE9iai5ycGMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBldmVudDogQWdlbnRNZXNzYWdlSW5wdXQgPSB7XG4gICAgICAgICAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICBob29rVG9rZW46IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0ID8/IHt9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gYXdhaXQgZXJyb3JlLnRyeUFzeW5jKHtcbiAgICAgICAgICAgIHRyeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBhbGwoe1xuICAgICAgICAgICAgICAgIGFzeW5jIHNhdmVNZXNzYWdlcygpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICBuZXdNZXNzYWdlcy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkubWVzc2FnZS5zZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogYmFzZVRpbWUgKyBpLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhc3luYyBzYXZlUGFydHMoKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgbmV3UGFydHMubWFwKGdldFN0b3JhZ2VJbnN0YW5jZSgpLnBhcnQuc2V0KVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc3VtZU9yU3RhcnRBZ2VudFdvcmtmbG93KCkge1xuICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24yLnJ1bklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFnZW50TWVzc2FnZUhvb2sucmVzdW1lKHNlc3Npb25JZCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSZXN1bHQgPSBhd2FpdCBzdGFydChhZ2VudFdvcmtmbG93LCBbXG4gICAgICAgICAgICAgICAgICAgICAgeyBpbnB1dDogYWdlbnRJbnB1dCwgZXZlbnQgfSxcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24yLnJ1bklkID0gc3RhcnRSZXN1bHQucnVuSWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVTZXNzaW9uKCkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kLnJlc3VtZU9yU3RhcnRBZ2VudFdvcmtmbG93O1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5zZXQoe1xuICAgICAgICAgICAgICAgICAgICAuLi5zZXNzaW9uMixcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgIGhvb2tUb2tlbjogZXZlbnQuaG9va1Rva2VuLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYXRjaDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcmVhc29uOiBgZmFpbGVkIHRvIHNlbmQ6ICR7U3RyaW5nKGUpfWAsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBzdHJlYW06IGFzeW5jIChvcHRzPzoge1xuICAgICAgICAgIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgICAgICAgfSk6IFByb21pc2U8QWdlbnRTdHJlYW0gfCBFcnJvcj4gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBvcHRzPy5tZXNzYWdlSWQgPz8gc2Vzc2lvbi5sYXN0TWVzc2FnZUlkO1xuICAgICAgICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZXNzaW9uLnJ1bklkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJObyBydW4gYXNzb2NpYXRlZCB3aXRoIHNlc3Npb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBydW4gPSBnZXRSdW4oc2Vzc2lvbi5ydW5JZCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZWFkYWJsZSA9IHJ1bi5nZXRSZWFkYWJsZTxVSU1lc3NhZ2VDaHVuaz4oe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXNzYWdlSWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZGF0YVdyaXRlcjoge1xuICAgICAgICAgICAgd3JpdGU6IChjaHVuazogVUlNZXNzYWdlQ2h1bmspID0+IHZvaWQ7XG4gICAgICAgICAgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgIGNvbnN0IG1lcmdlZFN0cmVhbSA9IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgICAgICAgICBleGVjdXRlOiAoeyB3cml0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgICBkYXRhV3JpdGVyID0gd3JpdGVyO1xuICAgICAgICAgICAgICB3cml0ZXIubWVyZ2Uod29ya2Zsb3dSZWFkYWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obWVyZ2VkU3RyZWFtLCB7XG4gICAgICAgICAgICB3cml0ZVN0YXR1czogKHN0YXR1czogQWdlbnRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFkYXRhV3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIHdyaXRlciBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRhdGFXcml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0YS1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHJhbnNpZW50OiB0cnVlLFxuICAgICAgICAgICAgICB9IGFzIFVJTWVzc2FnZUNodW5rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkgYXMgQWdlbnRTdHJlYW07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdWk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWVzc2FnZXNSZXN1bHQsIHBhcnRzUmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2UubGlzdChzZXNzaW9uSWQpLFxuICAgICAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCksXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFydHNSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzUmVzdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICAgIHBhcnRzOiBwYXJ0c1Jlc3VsdC5pdGVtcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGxhc3RTdGFydGVkQXNzaXN0YW50ID0gbWVzc2FnZXNSZXN1bHQuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiBtLnN0YXJ0ZWRBdCAhPT0gbnVsbClcbiAgICAgICAgICAgIC5hdCgtMSk7XG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPVxuICAgICAgICAgICAgbGFzdFN0YXJ0ZWRBc3Npc3RhbnQgJiZcbiAgICAgICAgICAgIGxhc3RTdGFydGVkQXNzaXN0YW50LmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgICAgICAgICBsYXN0U3RhcnRlZEFzc2lzdGFudC5pbnRlcnJ1cHRlZEF0ID09PSBudWxsO1xuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ01lc3NhZ2VJZCA9IGlzU3RyZWFtaW5nXG4gICAgICAgICAgICA/IGxhc3RTdGFydGVkQXNzaXN0YW50LmlkXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXNSZXN1bHQuaXRlbXMpO1xuXG4gICAgICAgICAgdHlwZSBUeXBlZE1lc3NhZ2UgPSBVSU1lc3NhZ2U8XG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgQWdlbnREYXRhVHlwZXMsXG4gICAgICAgICAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICAgICAgICAgID47XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyB1bmtub3duIGFzIFR5cGVkTWVzc2FnZVtdLFxuICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkLFxuICAgICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgdGFnOiB7XG4gICAgICAgICAgbGlzdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChzZXNzaW9uLnRhZ3MgPz8ge30pIGFzIFRUYWdzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0OiBhc3luYyA8SyBleHRlbmRzIGtleW9mIFRUYWdzICYgc3RyaW5nPihcbiAgICAgICAgICAgIGtleTogS1xuICAgICAgICAgICk6IFByb21pc2U8VFRhZ3NbS10gfCB1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24udGFncz8uW2tleV0gYXMgVFRhZ3NbS10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGFzeW5jIDxLIGV4dGVuZHMga2V5b2YgVFRhZ3MgJiBzdHJpbmc+KFxuICAgICAgICAgICAga2V5OiBLLFxuICAgICAgICAgICAgdmFsdWU6IFRUYWdzW0tdXG4gICAgICAgICAgKTogUHJvbWlzZTx1bmRlZmluZWQgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi50YWcuc2V0KHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0YWdzOiB7IFtrZXldOiB2YWx1ZSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXRNYW55OiBhc3luYyAodGFnczogUGFydGlhbDxUVGFncz4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5zZXNzaW9uLnRhZy5zZXQoe1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHRhZ3M6IHRhZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYW5kYm94OiBhd2FpdCBzYW5kYm94UHJvbWlzZSxcblxuICAgICAgICBpbnRlcnJ1cHQ6IGludGVycnVwdEN1cnJlbnRNZXNzYWdlLFxuXG4gICAgICAgIHJlc29sdmVBcHByb3ZhbDogYXN5bmMgKHtcbiAgICAgICAgICBhcHByb3ZhbElkLFxuICAgICAgICAgIGFwcHJvdmVkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgfToge1xuICAgICAgICAgIGFwcHJvdmFsSWQ6IHN0cmluZztcbiAgICAgICAgICBhcHByb3ZlZDogYm9vbGVhbjtcbiAgICAgICAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgICAgIH0pOiBQcm9taXNlPHVuZGVmaW5lZCB8IEVycm9yPiA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHNSZXN1bHQgPVxuICAgICAgICAgICAgYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHBhcnRzUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1Jlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQYXJ0ID0gcGFydHNSZXN1bHQuaXRlbXMuZmluZChcbiAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICBwLnBhcnQgJiZcbiAgICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydCAmJlxuICAgICAgICAgICAgICAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9KS5hcHByb3ZhbD8uaWQgPT09XG4gICAgICAgICAgICAgICAgYXBwcm92YWxJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCF0YXJnZXRQYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25FcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHJlYXNvbjogYEFwcHJvdmFsICR7YXBwcm92YWxJZH0gbm90IGZvdW5kYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQYXJ0ID0ge1xuICAgICAgICAgICAgLi4udGFyZ2V0UGFydCxcbiAgICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgICAgLi4udGFyZ2V0UGFydC5wYXJ0LFxuICAgICAgICAgICAgICBzdGF0ZTogXCJhcHByb3ZhbC1yZXNwb25kZWRcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgYXBwcm92YWw6IHsgaWQ6IGFwcHJvdmFsSWQsIGFwcHJvdmVkLCByZWFzb24gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBzZXRSZXN1bHQgPSBhd2FpdCBnZXRTdG9yYWdlSW5zdGFuY2UoKS5wYXJ0LnNldChcbiAgICAgICAgICAgIHVwZGF0ZWRQYXJ0IGFzIFBhcnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzZXRSZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaXJlIHRoZSBhcHByb3ZhbCBob29rIHRvIHJlc3VtZSB0aGUgc3VzcGVuZGVkIHdvcmtmbG93LlxuICAgICAgICAgIC8vIEZvciBzdWItdG9vbCBhcHByb3ZhbHMgKGZyb20gdGhlIEphdmFTY3JpcHQgdG9vbCksIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAvLyBzdXNwZW5kZWQgaG9vayBcdTIwMTQgcG9sbGluZyBoYW5kbGVzIGl0LiBTd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgYXBwcm92YWxIb29rLnJlc3VtZShhcHByb3ZhbElkLCB7IGFwcHJvdmVkLCByZWFzb24gfSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBObyBob29rIHJlZ2lzdGVyZWQgZm9yIHRoaXMgYXBwcm92YWxJZCAoZS5nLiBKUyBzdWItdG9vbCBhcHByb3ZhbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVzYWdlOiBhc3luYyAoKTogUHJvbWlzZTxTZXNzaW9uVXNhZ2UgfCBFcnJvcj4gPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzUmVzdWx0ID1cbiAgICAgICAgICAgIGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLm1lc3NhZ2UubGlzdChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChtZXNzYWdlc1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZXNSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb21wdXRlU2Vzc2lvblVzYWdlKG1lc3NhZ2VzUmVzdWx0Lml0ZW1zKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IGFzeW5jIChcbiAgICAgICAgICB1cGRhdGVPcHRpb25zOiBTZXNzaW9uVXBkYXRlT3B0aW9uczxUb29scz4gJiB7IHRhZ3M/OiBUVGFncyB9XG4gICAgICAgICk6IFByb21pc2U8dW5kZWZpbmVkIHwgRXJyb3I+ID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZ2V0U3RvcmFnZUluc3RhbmNlKCkuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKTtcbiAgICAgICAgICBpZiAoY3VycmVudCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXBkYXRlZDogU2Vzc2lvbiA9IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAuLi51cGRhdGVPcHRpb25zLFxuICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgc2tpbGxzRGlyOiB1cGRhdGVPcHRpb25zLnNraWxsc0RpclxuICAgICAgICAgICAgICA/IG5vcm1hbGl6ZVNraWxsc0RpcnModXBkYXRlT3B0aW9ucy5za2lsbHNEaXIpXG4gICAgICAgICAgICAgIDogY3VycmVudC5za2lsbHNEaXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoZXF1YWwodXBkYXRlZCwgY3VycmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN0b3JhZ2VJbnN0YW5jZSgpLnNlc3Npb24uc2V0KHVwZGF0ZWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzYW5kYm94LFxuICAgIGdldCBzdG9yYWdlKCk6IFR5cGVkU3RvcmFnZTxUVGFncz4ge1xuICAgICAgcmV0dXJuIGdldFN0b3JhZ2VJbnN0YW5jZSgpIGFzIFR5cGVkU3RvcmFnZTxUVGFncz47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJQQyBoYW5kbGVyIGZvciBhZ2VudCBvcGVyYXRpb25zLlxuICAgICAqIEhhbmRsZXMgdG9vbHMubGlzdCwgdG9vbHMuZXhlY3V0ZSwgc3RvcmFnZSBSUEMsIGFuZCBob29rcy5cbiAgICAgKlxuICAgICAqIENhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBgcnBjYCBzdGVwIGZ1bmN0aW9uIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24uXG4gICAgICogQ2FuIGFsc28gYmUgZXhwb3NlZCB2aWEgSFRUUCBmb3IgZXh0ZXJuYWwgYWNjZXNzIGlmIG5lZWRlZC5cbiAgICAgKi9cbiAgICBoYW5kbGVyOiBhc3luYyAoXG4gICAgICBpbnB1dDogUmVxdWVzdCB8IFJwY1BheWxvYWQsXG4gICAgICBvdmVycmlkZXM/OiBBZ2VudFJwY092ZXJyaWRlc1xuICAgICk6IFByb21pc2U8UmVzcG9uc2UgfCBScGNSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IGlzUmVxdWVzdCA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdDtcblxuICAgICAgbGV0IG1ldGhvZDogc3RyaW5nO1xuICAgICAgbGV0IHBhcmFtczogdW5rbm93bjtcbiAgICAgIGxldCBuYW1lOiBzdHJpbmc7XG5cbiAgICAgIGlmIChpc1JlcXVlc3QpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gaW5wdXQuaGVhZGVycy5nZXQoXCJ4LWFnZW50LXNlY3JldFwiKTtcbiAgICAgICAgaWYgKHNlY3JldCAhPT0gYWdlbnRTZWNyZXQpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHsgZXJyb3I6IHsgY29kZTogXCJVTkFVVEhPUklaRURcIiwgbWVzc2FnZTogXCJJbnZhbGlkIHNlY3JldFwiIH0gfSxcbiAgICAgICAgICAgIHsgc3RhdHVzOiA0MDEgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYm9keTogQWdlbnRScGNSZXF1ZXN0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkgPSBhd2FpdCBpbnB1dC5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcjogeyBjb2RlOiBcIklOVkFMSURfUkVRVUVTVFwiLCBtZXNzYWdlOiBcIkludmFsaWQgSlNPTiBib2R5XCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHN0YXR1czogNDAwIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbWV0aG9kID0gYm9keS5tZXRob2Q7XG4gICAgICAgIHBhcmFtcyA9IGJvZHkucGFyYW1zO1xuICAgICAgICBuYW1lID0gaW5wdXQuaGVhZGVycy5nZXQoXCJ4LWFnZW50LW5hbWVcIikgPz8gREVGQVVMVF9OQU1FU1BBQ0U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXRob2QgPSBpbnB1dC5tZXRob2Q7XG4gICAgICAgIHBhcmFtcyA9IGlucHV0LnBhcmFtcztcbiAgICAgICAgbmFtZSA9IGlucHV0Lm5hbWUgPz8gREVGQVVMVF9OQU1FU1BBQ0U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3BhdGNoQ29udGV4dDogRGlzcGF0Y2hDb250ZXh0ID0ge1xuICAgICAgICB0b29sczogb3B0aW9ucy50b29scyBhcyBUb29sU2V0IHwgdW5kZWZpbmVkLFxuICAgICAgICBob29rczogb3B0aW9ucy5ob29rcyxcbiAgICAgICAgbmVlZHNBcHByb3ZhbDpcbiAgICAgICAgICBvcHRpb25zLm5lZWRzQXBwcm92YWwgYXMgRGlzcGF0Y2hDb250ZXh0W1wibmVlZHNBcHByb3ZhbFwiXSxcbiAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgZ2V0U3RvcmFnZUluc3RhbmNlLFxuICAgICAgICBnZXRTdG9yYWdlSGFuZGxlcnMsXG4gICAgICAgIHJwYzogYWdlbnRPYmoucnBjLFxuICAgICAgICBvdmVycmlkZXMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXNwYXRjaChtZXRob2QsIHBhcmFtcywgZGlzcGF0Y2hDb250ZXh0LCBuYW1lKTtcblxuICAgICAgaWYgKCFpc1JlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdHVzID0gXCJlcnJvclwiIGluIHJlc3VsdCA/IChyZXN1bHQuc3RhdHVzID8/IDUwMCkgOiAyMDA7XG4gICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgXCJlcnJvclwiIGluIHJlc3VsdCA/IHsgZXJyb3I6IHJlc3VsdC5lcnJvciB9IDogeyByZXN1bHQ6IHJlc3VsdC5yZXN1bHQgfSxcbiAgICAgICAgeyBzdGF0dXMgfVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgdG9vbHM6IHsgLi4uYnVpbHRJblRvb2xzLCAuLi5vcHRpb25zLnRvb2xzIH0gYXMgdHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzLFxuXG4gICAgLyoqIFBoYW50b20gcHJvcGVydHkgZm9yIHR5cGUgaW5mZXJlbmNlLiBVc2UgYHR5cGVvZiBteUFnZW50LiRVSU1lc3NhZ2VgIHRvIGdldCB0aGUgdHlwZWQgVUlNZXNzYWdlLiAqL1xuICAgICRVSU1lc3NhZ2U6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFVJTWVzc2FnZTxcbiAgICAgIHVua25vd24sXG4gICAgICBBZ2VudERhdGFUeXBlcyxcbiAgICAgIEluZmVyVUlUb29sczx0eXBlb2YgYnVpbHRJblRvb2xzICYgVG9vbHM+XG4gICAgPixcblxuICAgIC8qKiBBZ2VudCBuYW1lIHVzZWQgYXMga2V5IGZvciB0aGUgUlBDIHJlZ2lzdHJ5LiBTZXQgYnkgdGhlIGxvYWRlciBpbml0LiAqL1xuICAgIF9hZ2VudE5hbWU6IHN0b3JhZ2VDb25maWcubmFtZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcblxuICAgIHJwYzogKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJycGMgbm90IGNvbmZpZ3VyZWQuIEVuc3VyZSB3aXRoQWdlbnQgaXMgc2V0IHVwIGluIG5leHQuY29uZmlnLnRzXCJcbiAgICAgICk7XG4gICAgfSkgYXMgKHBhcmFtczogUnBjUGF5bG9hZCkgPT4gUHJvbWlzZTxScGNSZXN1bHQ+LFxuICB9O1xuXG4gIHJldHVybiBhZ2VudE9iajtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNywgVG9vbCwgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWdlbnRScGNPdmVycmlkZXMsXG4gIEFnZW50UnBjUmVzdWx0LFxuICBBZ2VudFN0YXR1cyxcbiAgUnBjUmVzdWx0LFxufSBmcm9tIFwiLi9jbGllbnRcIjtcbmltcG9ydCB7IGdldFNhbmRib3ggfSBmcm9tIFwiLi9zYW5kYm94XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN0b3JhZ2UgYXMgQWdlbnRTdG9yYWdlLFxuICBNZXRob2ROYW1lLFxuICBScGNGbixcbiAgUnBjUmVxdWVzdCxcbiAgUnBjUmVzcG9uc2UsXG4gIFNhbmRib3hSZWNvcmQsXG4gIFNlc3Npb24sXG4gIFN0b3JhZ2VDb25maWcsXG4gIEhhbmRsZXJzIGFzIFN0b3JhZ2VIYW5kbGVycyxcbn0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuaW1wb3J0IHsgU1RPUkFHRV9SUENfTUVUSE9EUyB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmltcG9ydCB7IHR5cGUgQnVpbHRJblRvb2xOYW1lLCByZXNvbHZlQXBpVXJsLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vdG9vbHNcIjtcblxuZXhwb3J0IHR5cGUgVG9vbE1ldGFkYXRhID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbnB1dFNjaGVtYT86IEpTT05TY2hlbWE3O1xufTtcblxuZXhwb3J0IHR5cGUgVG9vbHNFeGVjdXRlUGFyYW1zID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICBzZXNzaW9uOiBTZXNzaW9uO1xuICBzYW5kYm94UmVjb3JkOiBTYW5kYm94UmVjb3JkO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tUb29sQmVmb3JlUGFyYW1zID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICBjb250ZXh0OiBUb29sQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tUb29sQmVmb3JlUmVzdWx0ID0ge1xuICBpbnB1dD86IHVua25vd247XG4gIHN0b3A/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSG9va1Rvb2xBZnRlclBhcmFtcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgcmVzdWx0OiB1bmtub3duO1xuICBjb250ZXh0OiBUb29sQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tUb29sQWZ0ZXJSZXN1bHQgPSB7XG4gIHJlc3VsdD86IHVua25vd247XG4gIHN0b3A/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9vbHNOZWVkc0FwcHJvdmFsUGFyYW1zID0ge1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgdG9vbENhbGxJZDogc3RyaW5nO1xuICBtZXNzYWdlczogdW5rbm93bltdO1xufTtcblxuZXhwb3J0IHR5cGUgVG9vbHNOZWVkc0FwcHJvdmFsUmVzdWx0ID0gYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgSG9va1N0YXR1c1BhcmFtcyA9IHtcbiAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbn07XG5cbmV4cG9ydCB0eXBlIEhvb2tTdGF0dXNSZXN1bHQgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG5cbnR5cGUgQWdlbnRIb29rcyA9IHtcbiAgXCJ0b29sLmJlZm9yZVwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgY29udGV4dDogVG9vbENvbnRleHQ7XG4gIH0pID0+IFByb21pc2U8dW5kZWZpbmVkIHwgeyBpbnB1dDogdW5rbm93biB9PjtcbiAgXCJ0b29sLmFmdGVyXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICByZXN1bHQ6IHVua25vd247XG4gICAgY29udGV4dDogVG9vbENvbnRleHQ7XG4gIH0pID0+IFByb21pc2U8dW5kZWZpbmVkIHwgeyByZXN1bHQ6IHVua25vd24gfT47XG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbnR5cGUgTmVlZHNBcHByb3ZhbEVudHJ5ID1cbiAgfCBib29sZWFuXG4gIHwgKChcbiAgICAgIGlucHV0OiB1bmtub3duLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gICAgICAgIG1lc3NhZ2VzOiB1bmtub3duW107XG4gICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmtub3duO1xuICAgICAgfVxuICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xuXG5leHBvcnQgdHlwZSBEaXNwYXRjaENvbnRleHQgPSB7XG4gIHRvb2xzOiBUb29sU2V0IHwgdW5kZWZpbmVkO1xuICBob29rczogQWdlbnRIb29rcyB8IHVuZGVmaW5lZDtcbiAgbmVlZHNBcHByb3ZhbDogUmVjb3JkPHN0cmluZywgTmVlZHNBcHByb3ZhbEVudHJ5PiB8IHVuZGVmaW5lZDtcbiAgc3RvcmFnZUNvbmZpZzogU3RvcmFnZUNvbmZpZztcbiAgZ2V0U3RvcmFnZUluc3RhbmNlOiAoKSA9PiBBZ2VudFN0b3JhZ2U7XG4gIGdldFN0b3JhZ2VIYW5kbGVyczogKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxTdG9yYWdlSGFuZGxlcnM+O1xuICBycGM6IFJwY0ZuO1xuICBvdmVycmlkZXM/OiBBZ2VudFJwY092ZXJyaWRlcztcbn07XG5cbi8qKiBEZWZhdWx0IG5lZWRzQXBwcm92YWwgZm9yIGJ1aWx0LWluIHRvb2xzICh1c2VyIGNhbiBvdmVycmlkZSB2aWEgbmVlZHNBcHByb3ZhbCBjb25maWcpLiAqL1xuY29uc3QgYnVpbHRpbk5lZWRzQXBwcm92YWw6IFBhcnRpYWw8XG4gIFJlY29yZDxCdWlsdEluVG9vbE5hbWUsIE5lZWRzQXBwcm92YWxFbnRyeT5cbj4gPSB7XG4gIEJhc2g6IHRydWUsXG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIG92ZXJyaWRlIHJlc3VsdCB0byBScGNSZXN1bHQsIG9yIG51bGwgdG8gZmFsbCB0aHJvdWdoLlxuICovXG5mdW5jdGlvbiBoYW5kbGVPdmVycmlkZVJlc3VsdDxUPihyZXM6IEFnZW50UnBjUmVzdWx0PFQ+KTogUnBjUmVzdWx0PFQ+IHwgbnVsbCB7XG4gIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocmVzLm9rKSB7XG4gICAgcmV0dXJuIHsgcmVzdWx0OiByZXMucmVzdWx0IH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogeyBjb2RlOiBcIkhBTkRMRVJfRVJST1JcIiwgbWVzc2FnZTogcmVzLmVycm9yIH0sXG4gICAgc3RhdHVzOiA0MDAsXG4gIH07XG59XG5cbi8qKlxuICogSW50ZXJuYWwgZGlzcGF0Y2ggZnVuY3Rpb24uIFJldHVybnMgUnBjUmVzdWx0LCBub3QgUmVzcG9uc2UuXG4gKiBFbmFibGVzIHJlY3Vyc2l2ZSBjYWxscyBmb3IgaG9va3Mgd2l0aG91dCBKU09OIHJvdW5kLXRyaXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2goXG4gIG1ldGhvZDogc3RyaW5nLFxuICBwYXJhbXM6IHVua25vd24sXG4gIGNvbnRleHQ6IERpc3BhdGNoQ29udGV4dCxcbiAgbmFtZT86IHN0cmluZ1xuKTogUHJvbWlzZTxScGNSZXN1bHQ+IHtcbiAgY29uc3Qge1xuICAgIHRvb2xzLFxuICAgIGhvb2tzLFxuICAgIG5lZWRzQXBwcm92YWwsXG4gICAgc3RvcmFnZUNvbmZpZyxcbiAgICBnZXRTdG9yYWdlSW5zdGFuY2UsXG4gICAgZ2V0U3RvcmFnZUhhbmRsZXJzLFxuICAgIHJwYyxcbiAgICBvdmVycmlkZXMsXG4gIH0gPSBjb250ZXh0O1xuXG4gIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgY2FzZSBcInRvb2xzLmxpc3RcIjoge1xuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSAoKTogUnBjUmVzdWx0PFRvb2xNZXRhZGF0YVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2xzTWFwID0gdG9vbHMgPz8gKHt9IGFzIFRvb2xTZXQpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyh0b29sc01hcCkubWFwKChbbmFtZSwgdF0pID0+ICh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogKHQgYXMgVG9vbCkuZGVzY3JpcHRpb24sXG4gICAgICAgICAgaW5wdXRTY2hlbWE6IHNjaGVtYVRvSnNvblNjaGVtYSgodCBhcyBUb29sKS5pbnB1dFNjaGVtYSksXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlcz8uW1widG9vbHMubGlzdFwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHt9KTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZU92ZXJyaWRlUmVzdWx0KG92ZXJyaWRlUmVzdWx0KTtcbiAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlcigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkhBTkRMRVJfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJ0b29scy5uZWVkc0FwcHJvdmFsXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgVG9vbHNOZWVkc0FwcHJvdmFsUGFyYW1zO1xuXG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPFJwY1Jlc3VsdDxib29sZWFuPj4gPT4ge1xuICAgICAgICAvLyAxLiBQZXItdG9vbCBuZWVkc0FwcHJvdmFsIG9uIGN1c3RvbSB0b29scyB0YWtlcyBwcmlvcml0eVxuICAgICAgICBjb25zdCB0b29sc01hcCA9IHRvb2xzID8/ICh7fSBhcyBUb29sU2V0KTtcbiAgICAgICAgY29uc3QgdG9vbERlZiA9IHRvb2xzTWFwW3AudG9vbE5hbWVdIGFzIFRvb2wgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0b29sRGVmPy5uZWVkc0FwcHJvdmFsICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRvb2xEZWYubmVlZHNBcHByb3ZhbCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogdG9vbERlZi5uZWVkc0FwcHJvdmFsIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRvb2xEZWYubmVlZHNBcHByb3ZhbChwLmlucHV0LCB7XG4gICAgICAgICAgICB0b29sQ2FsbElkOiBwLnRvb2xDYWxsSWQsXG4gICAgICAgICAgICBtZXNzYWdlczogcC5tZXNzYWdlcyBhcyBuZXZlcltdLFxuICAgICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIEFnZW50LWxldmVsIG5lZWRzQXBwcm92YWwgbWFwLCBmYWxsaW5nIGJhY2sgdG8gYnVpbHQtaW4gZGVmYXVsdHNcbiAgICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICAgIG5lZWRzQXBwcm92YWw/LltwLnRvb2xOYW1lXSA/P1xuICAgICAgICAgIGJ1aWx0aW5OZWVkc0FwcHJvdmFsW3AudG9vbE5hbWUgYXMgQnVpbHRJblRvb2xOYW1lXSA/P1xuICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogZW50cnkgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeShwLmlucHV0LCB7XG4gICAgICAgICAgdG9vbENhbGxJZDogcC50b29sQ2FsbElkLFxuICAgICAgICAgIG1lc3NhZ2VzOiBwLm1lc3NhZ2VzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJ0b29scy5uZWVkc0FwcHJvdmFsXCJdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvdmVycmlkZVJlc3VsdCA9IGF3YWl0IG92ZXJyaWRlPy4ocCk7XG4gICAgICAgIGlmIChvdmVycmlkZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZWQgPSBoYW5kbGVPdmVycmlkZVJlc3VsdChvdmVycmlkZVJlc3VsdCk7XG4gICAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZGVmYXVsdEhhbmRsZXIoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJORUVEU19BUFBST1ZBTF9FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSBcImhvb2sudG9vbC5iZWZvcmVcIjoge1xuICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBIb29rVG9vbEJlZm9yZVBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIGhvb2tQYXJhbXM6IEhvb2tUb29sQmVmb3JlUGFyYW1zXG4gICAgICApOiBQcm9taXNlPEhvb2tUb29sQmVmb3JlUmVzdWx0PiA9PiB7XG4gICAgICAgIGlmICghaG9va3M/LltcInRvb2wuYmVmb3JlXCJdKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvb2tSZXN1bHQgPSBhd2FpdCBob29rc1tcInRvb2wuYmVmb3JlXCJdKGhvb2tQYXJhbXMpO1xuICAgICAgICByZXR1cm4gaG9va1Jlc3VsdCA/PyB7fTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzPy5bXCJob29rLnRvb2wuYmVmb3JlXCJdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgY3VycmVudFBhcmFtcyA9IHA7XG4gICAgICAgIGxldCBtZXJnZWQ6IEhvb2tUb29sQmVmb3JlUmVzdWx0ID0ge307XG5cbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHApO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQ/Lm9rKSB7XG4gICAgICAgICAgbWVyZ2VkID0geyAuLi5tZXJnZWQsIC4uLm92ZXJyaWRlUmVzdWx0LnJlc3VsdCB9O1xuICAgICAgICAgIGlmIChtZXJnZWQuc3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBtZXJnZWQgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0LnJlc3VsdC5pbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgICAuLi5jdXJyZW50UGFyYW1zLFxuICAgICAgICAgICAgICBpbnB1dDogb3ZlcnJpZGVSZXN1bHQucmVzdWx0LmlucHV0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0UmVzdWx0ID0gYXdhaXQgZGVmYXVsdEhhbmRsZXIoY3VycmVudFBhcmFtcyk7XG4gICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5kZWZhdWx0UmVzdWx0IH07XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBtZXJnZWQgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIT09LX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwiaG9vay50b29sLmFmdGVyXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgSG9va1Rvb2xBZnRlclBhcmFtcztcblxuICAgICAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIGhvb2tQYXJhbXM6IEhvb2tUb29sQWZ0ZXJQYXJhbXNcbiAgICAgICk6IFByb21pc2U8SG9va1Rvb2xBZnRlclJlc3VsdD4gPT4ge1xuICAgICAgICBpZiAoIWhvb2tzPy5bXCJ0b29sLmFmdGVyXCJdKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvb2tSZXN1bHQgPSBhd2FpdCBob29rc1tcInRvb2wuYWZ0ZXJcIl0oaG9va1BhcmFtcyk7XG4gICAgICAgIHJldHVybiBob29rUmVzdWx0ID8/IHt9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcImhvb2sudG9vbC5hZnRlclwiXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGN1cnJlbnRQYXJhbXMgPSBwO1xuICAgICAgICBsZXQgbWVyZ2VkOiBIb29rVG9vbEFmdGVyUmVzdWx0ID0ge307XG5cbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVSZXN1bHQgPSBhd2FpdCBvdmVycmlkZT8uKHApO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQ/Lm9rKSB7XG4gICAgICAgICAgbWVyZ2VkID0geyAuLi5tZXJnZWQsIC4uLm92ZXJyaWRlUmVzdWx0LnJlc3VsdCB9O1xuICAgICAgICAgIGlmIChtZXJnZWQuc3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBtZXJnZWQgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0LnJlc3VsdC5yZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3VycmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgcmVzdWx0OiBvdmVycmlkZVJlc3VsdC5yZXN1bHQucmVzdWx0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0UmVzdWx0ID0gYXdhaXQgZGVmYXVsdEhhbmRsZXIoY3VycmVudFBhcmFtcyk7XG4gICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCAuLi5kZWZhdWx0UmVzdWx0IH07XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiBtZXJnZWQgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgY29kZTogXCJIT09LX0VSUk9SXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlIFwiaG9vay5zdGF0dXNcIjoge1xuICAgICAgY29uc3QgcCA9IHBhcmFtcyBhcyBIb29rU3RhdHVzUGFyYW1zO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgaG9va3M/LnN0YXR1cz8uKHAuc3RhdHVzKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiB7fSB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkhPT0tfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgXCJ0b29scy5leGVjdXRlXCI6IHtcbiAgICAgIGNvbnN0IHAgPSBwYXJhbXMgYXMgVG9vbHNFeGVjdXRlUGFyYW1zO1xuXG4gICAgICBjb25zdCBkZWZhdWx0SGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPFJwY1Jlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCB0b29sc01hcCA9IHRvb2xzID8/ICh7fSBhcyBUb29sU2V0KTtcbiAgICAgICAgY29uc3QgdG9vbERlZiA9IHRvb2xzTWFwW3AubmFtZSBhcyBrZXlvZiB0eXBlb2YgdG9vbHNNYXBdO1xuICAgICAgICBpZiAoIXRvb2xEZWYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgY29kZTogXCJUT09MX05PVF9GT1VORFwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biB0b29sOiAke3AubmFtZX1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGVjdXRlID0gKHRvb2xEZWYgYXMgVG9vbCkuZXhlY3V0ZTtcbiAgICAgICAgaWYgKCFleGVjdXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiTk9fRVhFQ1VURVwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgVG9vbCAke3AubmFtZX0gaGFzIG5vIGV4ZWN1dGUgZnVuY3Rpb25gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYW5kYm94SW5zdGFuY2UgPSBnZXRTYW5kYm94KHtcbiAgICAgICAgICBzYW5kYm94UmVjb3JkOiBwLnNhbmRib3hSZWNvcmQsXG4gICAgICAgICAgc3RvcmFnZUNvbmZpZyxcbiAgICAgICAgICBzdG9yYWdlOiBnZXRTdG9yYWdlSW5zdGFuY2UoKSxcbiAgICAgICAgICBycGMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRvb2xDb250ZXh0OiBUb29sQ29udGV4dCA9IHtcbiAgICAgICAgICBzZXNzaW9uOiBwLnNlc3Npb24sXG4gICAgICAgICAgc2FuZGJveDogc2FuZGJveEluc3RhbmNlLFxuICAgICAgICAgIHN0b3JhZ2U6IGdldFN0b3JhZ2VJbnN0YW5jZSgpLFxuICAgICAgICAgIGNvbnRleHQ6IHAuY29udGV4dCxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgdG9vbElucHV0ID0gcC5pbnB1dDtcblxuICAgICAgICBjb25zdCBiZWZvcmVSZXN1bHQgPSBhd2FpdCBkaXNwYXRjaChcbiAgICAgICAgICBcImhvb2sudG9vbC5iZWZvcmVcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBiZWZvcmVSZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gYmVmb3JlUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZm9yZUhvb2sgPSBiZWZvcmVSZXN1bHQucmVzdWx0IGFzIEhvb2tUb29sQmVmb3JlUmVzdWx0O1xuICAgICAgICBpZiAoYmVmb3JlSG9vay5zdG9wKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiSE9PS19TVE9QUEVEXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwidG9vbC5iZWZvcmUgaG9vayBzdG9wcGVkIGV4ZWN1dGlvblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlZm9yZUhvb2suaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvb2xJbnB1dCA9IGJlZm9yZUhvb2suaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSh0b29sSW5wdXQgYXMgbmV2ZXIsIHtcbiAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgdG9vbENhbGxJZDogXCJycGNcIixcbiAgICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFmdGVyUmVzdWx0ID0gYXdhaXQgZGlzcGF0Y2goXG4gICAgICAgICAgXCJob29rLnRvb2wuYWZ0ZXJcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBhZnRlclJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiBhZnRlclJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvb2sgPSBhZnRlclJlc3VsdC5yZXN1bHQgYXMgSG9va1Rvb2xBZnRlclJlc3VsdDtcbiAgICAgICAgaWYgKGFmdGVySG9vay5zdG9wKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgIGNvZGU6IFwiSE9PS19TVE9QUEVEXCIsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwidG9vbC5hZnRlciBob29rIHN0b3BwZWQgZXhlY3V0aW9uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWZ0ZXJIb29rLnJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYWZ0ZXJIb29rLnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LltcInRvb2xzLmV4ZWN1dGVcIl07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlUmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZU92ZXJyaWRlUmVzdWx0KG92ZXJyaWRlUmVzdWx0KTtcbiAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWZhdWx0SGFuZGxlcigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIkVYRUNVVEVfRVJST1JcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBtZXRob2QgYXMgTWV0aG9kTmFtZTtcbiAgICAgIGlmICghU1RPUkFHRV9SUENfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBjb2RlOiBcIlVOS05PV05fTUVUSE9EXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgVW5rbm93biBSUEMgbWV0aG9kOiAke21ldGhvZH1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gYXN5bmMgKCk6IFByb21pc2U8UnBjUmVzdWx0PiA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVTdG9yYWdlUmVxdWVzdCh7XG4gICAgICAgICAgY29uZmlnOiBzdG9yYWdlQ29uZmlnLFxuICAgICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXJhbXMgfSxcbiAgICAgICAgICBuYW1lOiBuYW1lID8/IHN0b3JhZ2VDb25maWcubmFtZSA/PyBcImRlZmF1bHRcIixcbiAgICAgICAgICBnZXRTdG9yYWdlSGFuZGxlcnMsXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXM/LlttZXRob2ROYW1lXSBhc1xuICAgICAgICB8ICgocGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPEFnZW50UnBjUmVzdWx0PHVua25vd24+PilcbiAgICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlUmVzdWx0ID0gYXdhaXQgb3ZlcnJpZGU/LihwYXJhbXMpO1xuICAgICAgICBpZiAob3ZlcnJpZGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVkID0gaGFuZGxlT3ZlcnJpZGVSZXN1bHQob3ZlcnJpZGVSZXN1bHQpO1xuICAgICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRIYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGNvZGU6IFwiU1RPUkFHRV9FUlJPUlwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUm91dGVzIHN0b3JhZ2UgUlBDIHJlcXVlc3RzIGJhc2VkIG9uIHN0b3JhZ2UgY29uZmlnIHR5cGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVN0b3JhZ2VSZXF1ZXN0KHtcbiAgY29uZmlnLFxuICByZXF1ZXN0LFxuICBuYW1lLFxuICBnZXRTdG9yYWdlSGFuZGxlcnMsXG59OiB7XG4gIGNvbmZpZzogU3RvcmFnZUNvbmZpZztcbiAgcmVxdWVzdDogUnBjUmVxdWVzdDtcbiAgbmFtZTogc3RyaW5nO1xuICBnZXRTdG9yYWdlSGFuZGxlcnM6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8U3RvcmFnZUhhbmRsZXJzPjtcbn0pOiBQcm9taXNlPFJwY1Jlc3BvbnNlPiB7XG4gIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICBjYXNlIFwibG9jYWxcIjoge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSBhd2FpdCBnZXRTdG9yYWdlSGFuZGxlcnMobmFtZSk7XG4gICAgICBjb25zdCB7IGhhbmRsZVN0b3JhZ2VScGMgfSA9IGF3YWl0IGltcG9ydChcIi4vc3RvcmFnZS9oYW5kbGVyXCIpO1xuICAgICAgcmV0dXJuIGhhbmRsZVN0b3JhZ2VScGMocmVxdWVzdCwgaGFuZGxlcnMpO1xuICAgIH1cbiAgICBjYXNlIFwidmVyY2VsXCI6IHtcbiAgICAgIGNvbnN0IHsgZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICBcIi4vc3RvcmFnZS9iaW5kaW5ncy92ZXJjZWxcIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0VmVyY2VsU3RvcmFnZUNvbmZpZygpO1xuICAgICAgcmV0dXJuIGF3YWl0IHByb3h5U3RvcmFnZVJlcXVlc3Qoe1xuICAgICAgICB1cmw6IHJlc29sdmVkLnVybCxcbiAgICAgICAgaGVhZGVyczogeyAuLi5yZXNvbHZlZC5oZWFkZXJzLCBcIngtYWdlbnQtbmFtZVwiOiBuYW1lIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcImN1c3RvbVwiOiB7XG4gICAgICByZXR1cm4gYXdhaXQgcHJveHlTdG9yYWdlUmVxdWVzdCh7XG4gICAgICAgIHVybDogcmVzb2x2ZUFwaVVybCh7IGFwaTogY29uZmlnLnVybCB9KSxcbiAgICAgICAgaGVhZGVyczogeyAuLi5jb25maWcuaGVhZGVycywgXCJ4LWFnZW50LW5hbWVcIjogbmFtZSB9LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbmZpZyBzYXRpc2ZpZXMgbmV2ZXI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgdHlwZTogJHsoY29uZmlnIGFzIHsgdHlwZTogc3RyaW5nIH0pLnR5cGV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94aWVzIGEgc3RvcmFnZSBSUEMgcmVxdWVzdCB0byBhbiBleHRlcm5hbCBVUkwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb3h5U3RvcmFnZVJlcXVlc3Qoe1xuICB1cmwsXG4gIGhlYWRlcnMsXG4gIHJlcXVlc3QsXG59OiB7XG4gIHVybDogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVxdWVzdDogUnBjUmVxdWVzdDtcbn0pOiBQcm9taXNlPFJwY1Jlc3BvbnNlPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBcIlBST1hZX0VSUk9SXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBTdG9yYWdlIHByb3h5IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFJwY1Jlc3BvbnNlPjtcbn1cblxuZnVuY3Rpb24gc2NoZW1hVG9Kc29uU2NoZW1hKHNjaGVtYTogdW5rbm93bik6IEpTT05TY2hlbWE3IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiZcbiAgICBzY2hlbWEgIT09IG51bGwgJiZcbiAgICBcIl9kZWZcIiBpbiBzY2hlbWEgJiZcbiAgICB0eXBlb2YgKHNjaGVtYSBhcyB6LlpvZFR5cGUpLl9kZWYgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgcmV0dXJuIHoudG9KU09OU2NoZW1hKHNjaGVtYSBhcyB6LlpvZFR5cGUpIGFzIEpTT05TY2hlbWE3O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwib2JqZWN0XCIgJiYgc2NoZW1hICE9PSBudWxsKSB7XG4gICAgY29uc3QgcyA9IHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoU3ltYm9sLmZvcihcInZlcmNlbC5haS5zY2hlbWFcIikgaW4gcyAmJiBcImpzb25TY2hlbWFcIiBpbiBzKSB7XG4gICAgICByZXR1cm4gcy5qc29uU2NoZW1hIGFzIEpTT05TY2hlbWE3O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmXG4gICAgc2NoZW1hICE9PSBudWxsICYmXG4gICAgKFwidHlwZVwiIGluIHNjaGVtYSB8fCBcInByb3BlcnRpZXNcIiBpbiBzY2hlbWEpXG4gICkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgSlNPTlNjaGVtYTc7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgU2VuZElucHV0IH0gZnJvbSBcIi4uL2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0IH0gZnJvbSBcIi4uL3N0b3JhZ2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgc2Vzc2lvbklkLFxuICBpZCxcbiAgaW5wdXQsXG4gIGRlZmF1bHRSb2xlLFxufToge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlucHV0OiBTZW5kSW5wdXQ7XG4gIGRlZmF1bHRSb2xlOiBVSU1lc3NhZ2VbXCJyb2xlXCJdO1xufSk6IHsgbWVzc2FnZTogTWVzc2FnZTsgcGFydHM6IFBhcnRbXSB9IHtcbiAgbGV0IG1lc3NhZ2VJZCA9IGlkID8/IGBtZXNzYWdlXyR7dWxpZCgpfWA7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcm9sZTogZGVmYXVsdFJvbGUsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICB1c2FnZTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBwYXJ0czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBpZDogYHBhcnRfJHt1bGlkKCl9YCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBwYXJ0OiB7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBpbnB1dCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG4gIGlmIChpbnB1dC5pZCkge1xuICAgIG1lc3NhZ2VJZCA9IGlucHV0LmlkO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChpbnB1dC5pZCkge1xuICAgIG1lc3NhZ2VJZCA9IGlucHV0LmlkO1xuICB9XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZToge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICByb2xlOiBpbnB1dC5yb2xlID8/IGRlZmF1bHRSb2xlLFxuICAgIH0sXG4gICAgcGFydHM6IGlucHV0LnBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+ICh7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBpZDogYHBhcnRfJHt1bGlkKCl9YCxcbiAgICAgIGluZGV4LFxuICAgICAgcGFydCxcbiAgICB9KSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyw4QkFBOEI7QUFDdkM7QUFBQSxFQUNFO0FBQUEsT0FRSztBQUNQLFNBQVMsV0FBVztBQUNwQixZQUFZLFlBQVk7QUFDeEIsT0FBTyxXQUFXO0FBQ2xCLFNBQVMsUUFBQUEsYUFBWTtBQUNyQixTQUFTLFFBQVEsYUFBYTs7O0FDZDlCLFNBQVMsU0FBUztBQWdIbEIsSUFBTSx1QkFFRjtBQUFBLEVBQ0YsTUFBTTtBQUNSO0FBS0EsU0FBUyxxQkFBd0IsS0FBNkM7QUFDNUUsTUFBSSxRQUFRLE1BQU07QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLElBQUksSUFBSTtBQUNWLFdBQU8sRUFBRSxRQUFRLElBQUksT0FBTztBQUFBLEVBQzlCO0FBQ0EsU0FBTztBQUFBLElBQ0wsT0FBTyxFQUFFLE1BQU0saUJBQWlCLFNBQVMsSUFBSSxNQUFNO0FBQUEsSUFDbkQsUUFBUTtBQUFBLEVBQ1Y7QUFDRjtBQU1BLGVBQXNCLFNBQ3BCLFFBQ0EsUUFDQSxTQUNBLE1BQ29CO0FBQ3BCLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFVBQVEsUUFBUTtBQUFBLElBQ2QsS0FBSyxjQUFjO0FBQ2pCLFlBQU0saUJBQWlCLE1BQWlDO0FBQ3RELGNBQU0sV0FBVyxTQUFVLENBQUM7QUFDNUIsY0FBTSxTQUFTLE9BQU8sUUFBUSxRQUFRLEVB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LGFBQU8sbUJBQW1CO0FBQUEsSUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU0EsU0FBUyxPQUNQLE9BQ0EsY0FDa0M7QUFDbEMsWUFBTSxZQUFZLGlCQUFpQjtBQUVuQyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLFdBQVc7QUFDYixjQUFNLFNBQVMsTUFBTSxRQUFRLElBQUksZ0JBQWdCO0FBQ2pELFlBQUksV0FBVyxhQUFhO0FBQzFCLGlCQUFPLFNBQVM7QUFBQSxZQUNkLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLFNBQVMsaUJBQWlCLEVBQUU7QUFBQSxZQUM3RCxFQUFFLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUVBLFlBQUk7QUFDSixZQUFJO0FBQ0YsaUJBQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxRQUMxQixRQUFRO0FBQ04saUJBQU8sU0FBUztBQUFBLFlBQ2Q7QUFBQSxjQUNFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixTQUFTLG9CQUFvQjtBQUFBLFlBQ2pFO0FBQUEsWUFDQSxFQUFFLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUVBLGlCQUFTLEtBQUs7QUFDZCxpQkFBUyxLQUFLO0FBQ2QsZUFBTyxNQUFNLFFBQVEsSUFBSSxjQUFjLEtBQUs7QUFBQSxNQUM5QyxPQUFPO0FBQ0wsaUJBQVMsTUFBTTtBQUNmLGlCQUFTLE1BQU07QUFDZixlQUFPLE1BQU0sUUFBUTtBQUFBLE1BQ3ZCO0FBRUEsWUFBTSxrQkFBbUM7QUFBQSxRQUN2QyxPQUFPLFFBQVE7QUFBQSxRQUNmLE9BQU8sUUFBUTtBQUFBLFFBQ2YsZUFDRSxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxLQUFLLFNBQVM7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUVBLFlBQU0sU0FBUyxNQUFNLFNBQVMsUUFBUSxRQUFRLGlCQUFpQixJQUFJO0FBRW5FLFVBQUksQ0FBQyxXQUFXO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLFNBQVMsV0FBVyxTQUFVLE9BQU8sVUFBVSxNQUFPO0FBQzVELGFBQU8sU0FBUztBQUFBLFFBQ2QsV0FBVyxTQUFTLEVBQUUsT0FBTyxPQUFPLE1BQU0sSUFBSSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQUEsUUFDdEUsRUFBRSxPQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUVBLE9BQU8sRUFBRSxHQUFHLGNBQWMsR0FBRyxRQUFRLE1BQU07QUFBQTtBQUFBLElBRzNDLFlBQVk7QUFBQTtBQUFBLElBT1osWUFBWSxjQUFjLFFBQVE7QUFBQSxJQUVsQyxNQUFNLE1BQU07QUFDVixZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJ1bGlkIiwgIm5hbWUiLCAicmVzdWx0IiwgImhhbmRsZVN0b3JhZ2VScGMiLCAibm93IiwgInVsaWQiLCAic2Vzc2lvbiJdCn0K
@@ -1,8 +1,7 @@
1
- import { l as SandboxLifecycleInput } from './client-DjcE0ATp.mjs';
2
- import './types-DuTc4UQW.mjs';
1
+ import { C as SandboxLifecycleInput } from './client-CKLwB-ES.mjs';
2
+ import 'errore';
3
3
  import 'ai';
4
4
  import 'zod';
5
- import 'errore';
6
5
 
7
6
  declare function sandboxLifecycleWorkflow({ input, }: {
8
7
  input: SandboxLifecycleInput;