@dbx-tools/appkit-mastra 0.9.153 → 0.9.157

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 (76) hide show
  1. package/README.md +4 -3
  2. package/index.ts +32 -24
  3. package/lib/index.d.ts +32 -24
  4. package/lib/index.js +32 -23
  5. package/lib/src/agents.d.ts +5 -6
  6. package/lib/src/agents.js +12 -15
  7. package/lib/src/chart.js +33 -33
  8. package/lib/src/chat.js +10 -13
  9. package/lib/src/config.d.ts +12 -13
  10. package/lib/src/config.js +4 -4
  11. package/lib/src/evaluation.js +7 -9
  12. package/lib/src/feedback-mode.d.ts +1 -1
  13. package/lib/src/feedback-mode.js +1 -1
  14. package/lib/src/filesystems.js +6 -6
  15. package/lib/src/follow-up-suggestions.js +10 -10
  16. package/lib/src/genie-chat.js +27 -29
  17. package/lib/src/genie.d.ts +2 -2
  18. package/lib/src/genie.js +29 -29
  19. package/lib/src/identity.d.ts +3 -30
  20. package/lib/src/identity.js +2 -27
  21. package/lib/src/memory.d.ts +1 -1
  22. package/lib/src/memory.js +24 -6
  23. package/lib/src/mlflow.d.ts +4 -4
  24. package/lib/src/mlflow.js +15 -18
  25. package/lib/src/model.d.ts +3 -3
  26. package/lib/src/model.js +6 -6
  27. package/lib/src/monty-sandbox.js +8 -8
  28. package/lib/src/observability.d.ts +6 -5
  29. package/lib/src/observability.js +8 -6
  30. package/lib/src/plugin.d.ts +1 -1
  31. package/lib/src/plugin.js +49 -51
  32. package/lib/src/remote-skills.d.ts +3 -4
  33. package/lib/src/remote-skills.js +46 -46
  34. package/lib/src/rest.d.ts +2 -2
  35. package/lib/src/rest.js +3 -3
  36. package/lib/src/server.js +17 -20
  37. package/lib/src/serving.js +10 -11
  38. package/lib/src/statement.js +7 -7
  39. package/lib/src/storage-schema.js +4 -4
  40. package/lib/src/summarize.js +5 -5
  41. package/lib/src/telemetry.d.ts +0 -6
  42. package/lib/src/telemetry.js +34 -41
  43. package/lib/src/validation.js +3 -4
  44. package/lib/src/workspaces.d.ts +2 -2
  45. package/lib/src/workspaces.js +34 -36
  46. package/lib/src/writer.d.ts +2 -2
  47. package/lib/src/writer.js +3 -3
  48. package/package.json +17 -305
  49. package/src/agents.ts +27 -21
  50. package/src/chart.ts +43 -37
  51. package/src/chat.ts +10 -12
  52. package/src/config.ts +14 -15
  53. package/src/evaluation.ts +6 -8
  54. package/src/feedback-mode.ts +1 -1
  55. package/src/filesystems.ts +5 -5
  56. package/src/follow-up-suggestions.ts +9 -9
  57. package/src/genie-chat.ts +32 -31
  58. package/src/genie.ts +29 -29
  59. package/src/identity.ts +3 -38
  60. package/src/memory.ts +24 -6
  61. package/src/mlflow.ts +21 -21
  62. package/src/model.ts +7 -7
  63. package/src/monty-sandbox.ts +7 -7
  64. package/src/observability.ts +8 -6
  65. package/src/plugin.ts +78 -65
  66. package/src/remote-skills.ts +63 -55
  67. package/src/rest.ts +4 -4
  68. package/src/server.ts +32 -20
  69. package/src/serving.ts +14 -11
  70. package/src/statement.ts +10 -6
  71. package/src/storage-schema.ts +3 -3
  72. package/src/summarize.ts +4 -4
  73. package/src/telemetry.ts +49 -55
  74. package/src/validation.ts +2 -3
  75. package/src/workspaces.ts +52 -42
  76. package/src/writer.ts +3 -3
package/lib/src/chat.js CHANGED
@@ -3,9 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { errorUtils, log, object } from "@dbx-tools/shared-core";
7
- import { routes } from "@dbx-tools/shared-mastra";
8
- import { isStaleMastraResumeError, STALE_MASTRA_RESUME_STREAM_TEXT, } from "@dbx-tools/shared-mastra/resume";
6
+ import { log, toError, errorMessage, isRecord } from "@dbx-tools/shared-core";
7
+ import { MASTRA_ROUTES, isStaleMastraResumeError, STALE_MASTRA_RESUME_STREAM_TEXT, } from "@dbx-tools/shared-mastra";
9
8
  import { handleChatStream, toAISdkStream } from "@mastra/ai-sdk";
10
9
  import { isEventedAgent } from "@mastra/core/agent/durable";
11
10
  import { registerApiRoute } from "@mastra/core/server";
@@ -23,7 +22,7 @@ function latestUserText(value) {
23
22
  return undefined;
24
23
  for (let index = value.length - 1; index >= 0; index -= 1) {
25
24
  const message = value[index];
26
- if (!object.isRecord(message) || message.role !== "user")
25
+ if (!isRecord(message) || message.role !== "user")
27
26
  continue;
28
27
  if (typeof message.content === "string" && message.content.trim()) {
29
28
  return message.content.trim();
@@ -31,9 +30,7 @@ function latestUserText(value) {
31
30
  if (!Array.isArray(message.parts))
32
31
  continue;
33
32
  const text = message.parts
34
- .flatMap((part) => object.isRecord(part) && part.type === "text" && typeof part.text === "string"
35
- ? [part.text]
36
- : [])
33
+ .flatMap((part) => isRecord(part) && part.type === "text" && typeof part.text === "string" ? [part.text] : [])
37
34
  .join("\n")
38
35
  .trim();
39
36
  if (text)
@@ -44,9 +41,9 @@ function latestUserText(value) {
44
41
  /** Register detached chat, durable observation, and explicit abort routes. */
45
42
  export function agentChatRoutes(config = {}) {
46
43
  const followUps = resolveFollowUpSuggestionsConfig(config.followUpSuggestions);
47
- const chatPath = `${routes.MASTRA_ROUTES.chat}/:agentId`;
48
- const runPath = `${routes.MASTRA_ROUTES.chat}/:agentId${routes.MASTRA_ROUTES.runs}/:runId`;
49
- const abortPath = `${runPath}${routes.MASTRA_ROUTES.abort}`;
44
+ const chatPath = `${MASTRA_ROUTES.chat}/:agentId`;
45
+ const runPath = `${MASTRA_ROUTES.chat}/:agentId${MASTRA_ROUTES.runs}/:runId`;
46
+ const abortPath = `${runPath}${MASTRA_ROUTES.abort}`;
50
47
  return [
51
48
  registerApiRoute(chatPath, {
52
49
  method: "POST",
@@ -157,10 +154,10 @@ export function agentChatRoutes(config = {}) {
157
154
  function serializeChatStreamError(error) {
158
155
  if (isStaleMastraResumeError(error)) {
159
156
  logger.warn("ignored stale mastra resume", {
160
- error: errorUtils.toError(error),
157
+ error: toError(error),
161
158
  });
162
159
  return STALE_MASTRA_RESUME_STREAM_TEXT;
163
160
  }
164
- return errorUtils.errorMessage(error);
161
+ return errorMessage(error);
165
162
  }
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLElBQUksQ0FBQztBQUduRCxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLDhCQUE4QixFQUM5QixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxHQUNqQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXpDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYyxFQUFFLE1BQW1CO0lBQ2xFLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFD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Q2pDLENBQUMsQ0FBQztRQUNILE9BQU8sK0JBQStCLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPZmZpY2lhbCBNYXN0cmEgQUkgU0RLIGNoYXQgcm91dGVzIGZvciBicm93c2VyLWNvbXBhdGlibGUgVUkgc3RyZWFtcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgcm91dGVzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHtcbiAgaXNTdGFsZU1hc3RyYVJlc3VtZUVycm9yLFxuICBTVEFMRV9NQVNUUkFfUkVTVU1FX1NUUkVBTV9URVhULFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhL3Jlc3VtZVwiO1xuaW1wb3J0IHsgaGFuZGxlQ2hhdFN0cmVhbSwgdG9BSVNka1N0cmVhbSB9IGZyb20gXCJAbWFzdHJhL2FpLXNka1wiO1xuaW1wb3J0IHsgaXNFdmVudGVkQWdlbnQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50L2R1cmFibGVcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQXBpUm91dGUgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3NlcnZlclwiO1xuaW1wb3J0IHsgY3JlYXRlVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UgfSBmcm9tIFwiYWlcIjtcblxuaW1wb3J0IHR5cGUgeyBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkRm9sbG93VXBTdWdnZXN0aW9uc1RyYW5zZm9ybSxcbiAgRk9MTE9XX1VQX05BVElWRV9RVUVTVElPTlNfS0VZLFxuICBGT0xMT1dfVVBfUlVOX0lEX0tFWSxcbiAgRk9MTE9XX1VQX1VTRVJfVEVYVF9LRVksXG4gIHJlc29sdmVGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLFxufSBmcm9tIFwiLi9mb2xsb3ctdXAtc3VnZ2VzdGlvbnMudHNcIjtcbmltcG9ydCB7IHdpdGhSZXF1ZXN0TWVtb3J5U2NvcGUgfSBmcm9tIFwiLi9tZW1vcnkudHNcIjtcbmltcG9ydCB7IGFjdGl2ZUNoYXRUcmFjaW5nT3B0aW9ucyB9IGZyb20gXCIuL3RlbGVtZXRyeS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL2NoYXRcIik7XG5cbi8qKiBDbGllbnQgcmVxdWVzdCBjYW5jZWxsYXRpb24gaXMgZGV0YWNoZWQgb25seSBmb3IgZXZlbnRlZCBiYWNrZ3JvdW5kIGFnZW50cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudEFib3J0U2lnbmFsKGFnZW50OiB1bmtub3duLCBzaWduYWw6IEFib3J0U2lnbmFsKTogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNFdmVudGVkQWdlbnQoYWdlbnQpID8gdW5kZWZpbmVkIDogc2lnbmFsO1xufVxuXG5mdW5jdGlvbiBsYXRlc3RVc2VyVGV4dCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGluZGV4ID0gdmFsdWUubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB2YWx1ZVtpbmRleF07XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQobWVzc2FnZSkgfHwgbWVzc2FnZS5yb2xlICE9PSBcInVzZXJcIikgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIgJiYgbWVzc2FnZS5jb250ZW50LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UuY29udGVudC50cmltKCk7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnBhcnRzKSkgY29udGludWU7XG4gICAgY29uc3QgdGV4dCA9IG1lc3NhZ2UucGFydHNcbiAgICAgIC5mbGF0TWFwKChwYXJ0KSA9PlxuICAgICAgICBvYmplY3QuaXNSZWNvcmQocGFydCkgJiYgcGFydC50eXBlID09PSBcInRleHRcIiAmJiB0eXBlb2YgcGFydC50ZXh0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBbcGFydC50ZXh0XVxuICAgICAgICAgIDogW10sXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKVxuICAgICAgLnRyaW0oKTtcbiAgICBpZiAodGV4dCkgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlZ2lzdGVyIGRldGFjaGVkIGNoYXQsIGR1cmFibGUgb2JzZXJ2YXRpb24sIGFuZCBleHBsaWNpdCBhYm9ydCByb3V0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gYWdlbnRDaGF0Um91dGVzKGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnID0ge30pIHtcbiAgY29uc3QgZm9sbG93VXBzID0gcmVzb2x2ZUZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcoY29uZmlnLmZvbGxvd1VwU3VnZ2VzdGlvbnMpO1xuICBjb25zdCBjaGF0UGF0aCA9IGAke3JvdXRlcy5NQVNUUkFfUk9VVEVTLmNoYXR9LzphZ2VudElkYCBhcyBgJHtzdHJpbmd9OmFnZW50SWRgO1xuICBjb25zdCBydW5QYXRoID1cbiAgICBgJHtyb3V0ZXMuTUFTVFJBX1JPVVRFUy5jaGF0fS86YWdlbnRJZCR7cm91dGVzLk1BU1RSQV9ST1VURVMucnVuc30vOnJ1bklkYCBhcyBgJHtzdHJpbmd9OmFnZW50SWQke3N0cmluZ306cnVuSWRgO1xuICBjb25zdCBhYm9ydFBhdGggPVxuICAgIGAke3J1blBhdGh9JHtyb3V0ZXMuTUFTVFJBX1JPVVRFUy5hYm9ydH1gIGFzIGAke3N0cmluZ306YWdlbnRJZCR7c3RyaW5nfTpydW5JZCR7c3RyaW5nfWA7XG4gIHJldHVybiBbXG4gICAgcmVnaXN0ZXJBcGlSb3V0ZShjaGF0UGF0aCwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGF3YWl0IGNvbnRleHQucmVxLmpzb24oKTtcbiAgICAgICAgY29uc3QgbWFzdHJhID0gY29udGV4dC5nZXQoXCJtYXN0cmFcIik7XG4gICAgICAgIGNvbnN0IGFnZW50SWQgPSBjb250ZXh0LnJlcS5wYXJhbShcImFnZW50SWRcIik7XG4gICAgICAgIGlmICghYWdlbnRJZCkgdGhyb3cgbmV3IEVycm9yKFwiQWdlbnQgSUQgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVSZXF1ZXN0Q29udGV4dCA9IGNvbnRleHQuZ2V0KFwicmVxdWVzdENvbnRleHRcIik7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gbWlkZGxld2FyZVJlcXVlc3RDb250ZXh0IHx8IHBhcmFtcy5yZXF1ZXN0Q29udGV4dDtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmVSZXF1ZXN0Q29udGV4dCAmJiBwYXJhbXMucmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgICBtYXN0cmFcbiAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxuICAgICAgICAgICAgPy53YXJuKCdNdWx0aXBsZSBcInJlcXVlc3RDb250ZXh0XCIgc291cmNlcyBwcm92aWRlZC4gVXNpbmcgbWlkZGxld2FyZSBjb250ZXh0LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25JZCA9IGNvbnRleHQucmVxLnF1ZXJ5KFwidmVyc2lvbklkXCIpO1xuICAgICAgICBjb25zdCByYXdTdGF0dXMgPSBjb250ZXh0LnJlcS5xdWVyeShcInN0YXR1c1wiKTtcbiAgICAgICAgaWYgKHZlcnNpb25JZCAmJiByYXdTdGF0dXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtZXRlcnMgXCJ2ZXJzaW9uSWRcIiBhbmQgXCJzdGF0dXNcIiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhd1N0YXR1cyAmJiByYXdTdGF0dXMgIT09IFwiZHJhZnRcIiAmJiByYXdTdGF0dXMgIT09IFwicHVibGlzaGVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtZXRlciBcInN0YXR1c1wiIG11c3QgYmUgXCJkcmFmdFwiIG9yIFwicHVibGlzaGVkXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByYXdTdGF0dXMgYXMgXCJkcmFmdFwiIHwgXCJwdWJsaXNoZWRcIiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYWJvcnRTaWduYWwgPSBhZ2VudEFib3J0U2lnbmFsKG1hc3RyYS5nZXRBZ2VudEJ5SWQoYWdlbnRJZCksIGNvbnRleHQucmVxLnJhdy5zaWduYWwpO1xuICAgICAgICBjb25zdCBydW5JZCA9XG4gICAgICAgICAgdHlwZW9mIHBhcmFtcy5ydW5JZCA9PT0gXCJzdHJpbmdcIiAmJiBwYXJhbXMucnVuSWQgPyBwYXJhbXMucnVuSWQgOiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgICBjb25zdCB1c2VyVGV4dCA9IGxhdGVzdFVzZXJUZXh0KHBhcmFtcy5tZXNzYWdlcyk7XG4gICAgICAgIGlmICh1c2VyVGV4dCkgcmVxdWVzdENvbnRleHQuc2V0UmF3KEZPTExPV19VUF9VU0VSX1RFWFRfS0VZLCB1c2VyVGV4dCk7XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LnNldFJhdyhGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksIFtdKTtcbiAgICAgICAgcmVxdWVzdENvbnRleHQuc2V0UmF3KEZPTExPV19VUF9SVU5fSURfS0VZLCBydW5JZCk7XG4gICAgICAgIGNvbnN0IHRyYWNpbmdPcHRpb25zID0gYWN0aXZlQ2hhdFRyYWNpbmdPcHRpb25zKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IGhhbmRsZUNoYXRTdHJlYW0oe1xuICAgICAgICAgIG1hc3RyYSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIC4uLih2ZXJzaW9uSWRcbiAgICAgICAgICAgID8geyBhZ2VudFZlcnNpb246IHsgdmVyc2lvbklkIH0gfVxuICAgICAgICAgICAgOiBzdGF0dXNcbiAgICAgICAgICAgICAgPyB7IGFnZW50VmVyc2lvbjogeyBzdGF0dXMgfSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIHBhcmFtczogd2l0aFJlcXVlc3RNZW1vcnlTY29wZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICBydW5JZCxcbiAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQsXG4gICAgICAgICAgICAgIC4uLih0cmFjaW5nT3B0aW9ucyA/IHsgdHJhY2luZ09wdGlvbnMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgLi4uKGFib3J0U2lnbmFsID8geyBhYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0LFxuICAgICAgICAgICksXG4gICAgICAgICAgLi4uKGZvbGxvd1VwcyAmJiBmb2xsb3dVcHMubW9kZSAhPT0gXCJnZW5pZVwiXG4gICAgICAgICAgICA/IHsgZXhwZXJpbWVudGFsVHJhbnNmb3JtOiBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0ocnVuSWQpIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIHZlcnNpb246IFwidjdcIixcbiAgICAgICAgICBzZW5kUmVhc29uaW5nOiB0cnVlLFxuICAgICAgICAgIHNlbmRTb3VyY2VzOiB0cnVlLFxuICAgICAgICAgIG9uRXJyb3I6IHNlcmlhbGl6ZUNoYXRTdHJlYW1FcnJvcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVnaXN0ZXJBcGlSb3V0ZShydW5QYXRoLCB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBtYXN0cmEgPSBjb250ZXh0LmdldChcIm1hc3RyYVwiKTtcbiAgICAgICAgY29uc3QgYWdlbnRJZCA9IGNvbnRleHQucmVxLnBhcmFtKFwiYWdlbnRJZFwiKTtcbiAgICAgICAgY29uc3QgcnVuSWQgPSBjb250ZXh0LnJlcS5wYXJhbShcInJ1bklkXCIpO1xuICAgICAgICBpZiAoIWFnZW50SWQgfHwgIXJ1bklkKSB0aHJvdyBuZXcgRXJyb3IoXCJBZ2VudCBJRCBhbmQgcnVuIElEIGFyZSByZXF1aXJlZFwiKTtcbiAgICAgICAgY29uc3QgYWdlbnQgPSBtYXN0cmEuZ2V0QWdlbnRCeUlkKGFnZW50SWQpO1xuICAgICAgICBpZiAoIWlzRXZlbnRlZEFnZW50KGFnZW50KSkge1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICAgICAgeyBlcnJvcjogYEFnZW50ICR7YWdlbnRJZH0gZG9lcyBub3Qgc3VwcG9ydCBiYWNrZ3JvdW5kIHR1cm5zYCB9LFxuICAgICAgICAgICAgeyBzdGF0dXM6IDQwOSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWQgPSBhd2FpdCBhZ2VudC5vYnNlcnZlKHJ1bklkKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdG9BSVNka1N0cmVhbShvYnNlcnZlZC5vdXRwdXQsIHtcbiAgICAgICAgICBmcm9tOiBcImFnZW50XCIsXG4gICAgICAgICAgLi4uKGZvbGxvd1VwcyAmJiBmb2xsb3dVcHMubW9kZSAhPT0gXCJnZW5pZVwiXG4gICAgICAgICAgICA/IHsgZXhwZXJpbWVudGFsVHJhbnNmb3JtOiBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0ocnVuSWQpIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIHZlcnNpb246IFwidjdcIixcbiAgICAgICAgICBzZW5kUmVhc29uaW5nOiB0cnVlLFxuICAgICAgICAgIHNlbmRTb3VyY2VzOiB0cnVlLFxuICAgICAgICAgIG9uRXJyb3I6IHNlcmlhbGl6ZUNoYXRTdHJlYW1FcnJvcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSh7IHN0cmVhbSB9KTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVnaXN0ZXJBcGlSb3V0ZShhYm9ydFBhdGgsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBtYXN0cmEgPSBjb250ZXh0LmdldChcIm1hc3RyYVwiKTtcbiAgICAgICAgY29uc3QgYWdlbnRJZCA9IGNvbnRleHQucmVxLnBhcmFtKFwiYWdlbnRJZFwiKTtcbiAgICAgICAgY29uc3QgcnVuSWQgPSBjb250ZXh0LnJlcS5wYXJhbShcInJ1bklkXCIpO1xuICAgICAgICBpZiAoIWFnZW50SWQgfHwgIXJ1bklkKSB0aHJvdyBuZXcgRXJyb3IoXCJBZ2VudCBJRCBhbmQgcnVuIElEIGFyZSByZXF1aXJlZFwiKTtcbiAgICAgICAgY29uc3QgYWdlbnQgPSBtYXN0cmEuZ2V0QWdlbnRCeUlkKGFnZW50SWQpO1xuICAgICAgICBpZiAoIWlzRXZlbnRlZEFnZW50KGFnZW50KSkge1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICAgICAgeyBlcnJvcjogYEFnZW50ICR7YWdlbnRJZH0gZG9lcyBub3Qgc3VwcG9ydCBiYWNrZ3JvdW5kIHR1cm5zYCB9LFxuICAgICAgICAgICAgeyBzdGF0dXM6IDQwOSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oeyBhYm9ydGVkOiBhZ2VudC5hYm9ydFJ1blN0cmVhbShydW5JZCkgfSk7XG4gICAgICB9LFxuICAgIH0pLFxuICBdO1xufVxuXG4vKipcbiAqIEtlZXAgYSBsYXRlIG9yIGR1cGxpY2F0ZSByZXN1bWUgZnJvbSBmYWlsaW5nIHRoZSBVSSBzdHJlYW0uIE1hc3RyYSdzXG4gKiByZXN1bWUgcGF0aCBjYW4gc3VyZmFjZSBhIHdvcmtmbG93IGVycm9yIGFmdGVyIGFub3RoZXIgY2xpZW50IGFscmVhZHlcbiAqIHJlc29sdmVkIHRoZSBzYW1lIGFwcHJvdmFsLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVDaGF0U3RyZWFtRXJyb3IoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoaXNTdGFsZU1hc3RyYVJlc3VtZUVycm9yKGVycm9yKSkge1xuICAgIGxvZ2dlci53YXJuKFwiaWdub3JlZCBzdGFsZSBtYXN0cmEgcmVzdW1lXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgIH0pO1xuICAgIHJldHVybiBTVEFMRV9NQVNUUkFfUkVTVU1FX1NUUkVBTV9URVhUO1xuICB9XG4gIHJldHVybiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvcik7XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsK0JBQStCLEdBQ2hDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHbkQsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDOUIsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixnQ0FBZ0MsR0FDakMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUV6QyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWMsRUFBRSxNQUFtQjtJQUNsRSxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQWM7SUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FB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LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9mZmljaWFsIE1hc3RyYSBBSSBTREsgY2hhdCByb3V0ZXMgZm9yIGJyb3dzZXItY29tcGF0aWJsZSBVSSBzdHJlYW1zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBsb2csIHRvRXJyb3IsIGVycm9yTWVzc2FnZSwgaXNSZWNvcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTUFTVFJBX1JPVVRFUyxcbiAgaXNTdGFsZU1hc3RyYVJlc3VtZUVycm9yLFxuICBTVEFMRV9NQVNUUkFfUkVTVU1FX1NUUkVBTV9URVhULFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5pbXBvcnQgeyBoYW5kbGVDaGF0U3RyZWFtLCB0b0FJU2RrU3RyZWFtIH0gZnJvbSBcIkBtYXN0cmEvYWktc2RrXCI7XG5pbXBvcnQgeyBpc0V2ZW50ZWRBZ2VudCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnQvZHVyYWJsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBcGlSb3V0ZSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvc2VydmVyXCI7XG5pbXBvcnQgeyBjcmVhdGVVSU1lc3NhZ2VTdHJlYW1SZXNwb25zZSB9IGZyb20gXCJhaVwiO1xuXG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zVHJhbnNmb3JtLFxuICBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksXG4gIEZPTExPV19VUF9SVU5fSURfS0VZLFxuICBGT0xMT1dfVVBfVVNFUl9URVhUX0tFWSxcbiAgcmVzb2x2ZUZvbGxvd1VwU3VnZ2VzdGlvbnNDb25maWcsXG59IGZyb20gXCIuL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50c1wiO1xuaW1wb3J0IHsgd2l0aFJlcXVlc3RNZW1vcnlTY29wZSB9IGZyb20gXCIuL21lbW9yeS50c1wiO1xuaW1wb3J0IHsgYWN0aXZlQ2hhdFRyYWNpbmdPcHRpb25zIH0gZnJvbSBcIi4vdGVsZW1ldHJ5LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvY2hhdFwiKTtcblxuLyoqIENsaWVudCByZXF1ZXN0IGNhbmNlbGxhdGlvbiBpcyBkZXRhY2hlZCBvbmx5IGZvciBldmVudGVkIGJhY2tncm91bmQgYWdlbnRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZW50QWJvcnRTaWduYWwoYWdlbnQ6IHVua25vd24sIHNpZ25hbDogQWJvcnRTaWduYWwpOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc0V2ZW50ZWRBZ2VudChhZ2VudCkgPyB1bmRlZmluZWQgOiBzaWduYWw7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdFVzZXJUZXh0KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaW5kZXggPSB2YWx1ZS5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHZhbHVlW2luZGV4XTtcbiAgICBpZiAoIWlzUmVjb3JkKG1lc3NhZ2UpIHx8IG1lc3NhZ2Uucm9sZSAhPT0gXCJ1c2VyXCIpIGNvbnRpbnVlO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiICYmIG1lc3NhZ2UuY29udGVudC50cmltKCkpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlLmNvbnRlbnQudHJpbSgpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5wYXJ0cykpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHRleHQgPSBtZXNzYWdlLnBhcnRzXG4gICAgICAuZmxhdE1hcCgocGFydCkgPT5cbiAgICAgICAgaXNSZWNvcmQocGFydCkgJiYgcGFydC50eXBlID09PSBcInRleHRcIiAmJiB0eXBlb2YgcGFydC50ZXh0ID09PSBcInN0cmluZ1wiID8gW3BhcnQudGV4dF0gOiBbXSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgICAudHJpbSgpO1xuICAgIGlmICh0ZXh0KSByZXR1cm4gdGV4dDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogUmVnaXN0ZXIgZGV0YWNoZWQgY2hhdCwgZHVyYWJsZSBvYnNlcnZhdGlvbiwgYW5kIGV4cGxpY2l0IGFib3J0IHJvdXRlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudENoYXRSb3V0ZXMoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcgPSB7fSkge1xuICBjb25zdCBmb2xsb3dVcHMgPSByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZyhjb25maWcuZm9sbG93VXBTdWdnZXN0aW9ucyk7XG4gIGNvbnN0IGNoYXRQYXRoID0gYCR7TUFTVFJBX1JPVVRFUy5jaGF0fS86YWdlbnRJZGAgYXMgYCR7c3RyaW5nfTphZ2VudElkYDtcbiAgY29uc3QgcnVuUGF0aCA9XG4gICAgYCR7TUFTVFJBX1JPVVRFUy5jaGF0fS86YWdlbnRJZCR7TUFTVFJBX1JPVVRFUy5ydW5zfS86cnVuSWRgIGFzIGAke3N0cmluZ306YWdlbnRJZCR7c3RyaW5nfTpydW5JZGA7XG4gIGNvbnN0IGFib3J0UGF0aCA9XG4gICAgYCR7cnVuUGF0aH0ke01BU1RSQV9ST1VURVMuYWJvcnR9YCBhcyBgJHtzdHJpbmd9OmFnZW50SWQke3N0cmluZ306cnVuSWQke3N0cmluZ31gO1xuICByZXR1cm4gW1xuICAgIHJlZ2lzdGVyQXBpUm91dGUoY2hhdFBhdGgsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBhd2FpdCBjb250ZXh0LnJlcS5qc29uKCk7XG4gICAgICAgIGNvbnN0IG1hc3RyYSA9IGNvbnRleHQuZ2V0KFwibWFzdHJhXCIpO1xuICAgICAgICBjb25zdCBhZ2VudElkID0gY29udGV4dC5yZXEucGFyYW0oXCJhZ2VudElkXCIpO1xuICAgICAgICBpZiAoIWFnZW50SWQpIHRocm93IG5ldyBFcnJvcihcIkFnZW50IElEIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlUmVxdWVzdENvbnRleHQgPSBjb250ZXh0LmdldChcInJlcXVlc3RDb250ZXh0XCIpO1xuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IG1pZGRsZXdhcmVSZXF1ZXN0Q29udGV4dCB8fCBwYXJhbXMucmVxdWVzdENvbnRleHQ7XG4gICAgICAgIGlmIChtaWRkbGV3YXJlUmVxdWVzdENvbnRleHQgJiYgcGFyYW1zLnJlcXVlc3RDb250ZXh0KSB7XG4gICAgICAgICAgbWFzdHJhXG4gICAgICAgICAgICAuZ2V0TG9nZ2VyKClcbiAgICAgICAgICAgID8ud2FybignTXVsdGlwbGUgXCJyZXF1ZXN0Q29udGV4dFwiIHNvdXJjZXMgcHJvdmlkZWQuIFVzaW5nIG1pZGRsZXdhcmUgY29udGV4dC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJzaW9uSWQgPSBjb250ZXh0LnJlcS5xdWVyeShcInZlcnNpb25JZFwiKTtcbiAgICAgICAgY29uc3QgcmF3U3RhdHVzID0gY29udGV4dC5yZXEucXVlcnkoXCJzdGF0dXNcIik7XG4gICAgICAgIGlmICh2ZXJzaW9uSWQgJiYgcmF3U3RhdHVzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdWVyeSBwYXJhbWV0ZXJzIFwidmVyc2lvbklkXCIgYW5kIFwic3RhdHVzXCIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYXdTdGF0dXMgJiYgcmF3U3RhdHVzICE9PSBcImRyYWZ0XCIgJiYgcmF3U3RhdHVzICE9PSBcInB1Ymxpc2hlZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdWVyeSBwYXJhbWV0ZXIgXCJzdGF0dXNcIiBtdXN0IGJlIFwiZHJhZnRcIiBvciBcInB1Ymxpc2hlZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmF3U3RhdHVzIGFzIFwiZHJhZnRcIiB8IFwicHVibGlzaGVkXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFib3J0U2lnbmFsID0gYWdlbnRBYm9ydFNpZ25hbChtYXN0cmEuZ2V0QWdlbnRCeUlkKGFnZW50SWQpLCBjb250ZXh0LnJlcS5yYXcuc2lnbmFsKTtcbiAgICAgICAgY29uc3QgcnVuSWQgPVxuICAgICAgICAgIHR5cGVvZiBwYXJhbXMucnVuSWQgPT09IFwic3RyaW5nXCIgJiYgcGFyYW1zLnJ1bklkID8gcGFyYW1zLnJ1bklkIDogY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgY29uc3QgdXNlclRleHQgPSBsYXRlc3RVc2VyVGV4dChwYXJhbXMubWVzc2FnZXMpO1xuICAgICAgICBpZiAodXNlclRleHQpIHJlcXVlc3RDb250ZXh0LnNldFJhdyhGT0xMT1dfVVBfVVNFUl9URVhUX0tFWSwgdXNlclRleHQpO1xuICAgICAgICByZXF1ZXN0Q29udGV4dC5zZXRSYXcoRk9MTE9XX1VQX05BVElWRV9RVUVTVElPTlNfS0VZLCBbXSk7XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LnNldFJhdyhGT0xMT1dfVVBfUlVOX0lEX0tFWSwgcnVuSWQpO1xuICAgICAgICBjb25zdCB0cmFjaW5nT3B0aW9ucyA9IGFjdGl2ZUNoYXRUcmFjaW5nT3B0aW9ucyh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBoYW5kbGVDaGF0U3RyZWFtKHtcbiAgICAgICAgICBtYXN0cmEsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAuLi4odmVyc2lvbklkXG4gICAgICAgICAgICA/IHsgYWdlbnRWZXJzaW9uOiB7IHZlcnNpb25JZCB9IH1cbiAgICAgICAgICAgIDogc3RhdHVzXG4gICAgICAgICAgICAgID8geyBhZ2VudFZlcnNpb246IHsgc3RhdHVzIH0gfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICBwYXJhbXM6IHdpdGhSZXF1ZXN0TWVtb3J5U2NvcGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0LFxuICAgICAgICAgICAgICAuLi4odHJhY2luZ09wdGlvbnMgPyB7IHRyYWNpbmdPcHRpb25zIH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLihhYm9ydFNpZ25hbCA/IHsgYWJvcnRTaWduYWwgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0Q29udGV4dCxcbiAgICAgICAgICApLFxuICAgICAgICAgIC4uLihmb2xsb3dVcHMgJiYgZm9sbG93VXBzLm1vZGUgIT09IFwiZ2VuaWVcIlxuICAgICAgICAgICAgPyB7IGV4cGVyaW1lbnRhbFRyYW5zZm9ybTogYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zVHJhbnNmb3JtKHJ1bklkKSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB2ZXJzaW9uOiBcInY3XCIsXG4gICAgICAgICAgc2VuZFJlYXNvbmluZzogdHJ1ZSxcbiAgICAgICAgICBzZW5kU291cmNlczogdHJ1ZSxcbiAgICAgICAgICBvbkVycm9yOiBzZXJpYWxpemVDaGF0U3RyZWFtRXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY3JlYXRlVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UoeyBzdHJlYW0gfSk7XG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJlZ2lzdGVyQXBpUm91dGUocnVuUGF0aCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbWFzdHJhID0gY29udGV4dC5nZXQoXCJtYXN0cmFcIik7XG4gICAgICAgIGNvbnN0IGFnZW50SWQgPSBjb250ZXh0LnJlcS5wYXJhbShcImFnZW50SWRcIik7XG4gICAgICAgIGNvbnN0IHJ1bklkID0gY29udGV4dC5yZXEucGFyYW0oXCJydW5JZFwiKTtcbiAgICAgICAgaWYgKCFhZ2VudElkIHx8ICFydW5JZCkgdGhyb3cgbmV3IEVycm9yKFwiQWdlbnQgSUQgYW5kIHJ1biBJRCBhcmUgcmVxdWlyZWRcIik7XG4gICAgICAgIGNvbnN0IGFnZW50ID0gbWFzdHJhLmdldEFnZW50QnlJZChhZ2VudElkKTtcbiAgICAgICAgaWYgKCFpc0V2ZW50ZWRBZ2VudChhZ2VudCkpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHsgZXJyb3I6IGBBZ2VudCAke2FnZW50SWR9IGRvZXMgbm90IHN1cHBvcnQgYmFja2dyb3VuZCB0dXJuc2AgfSxcbiAgICAgICAgICAgIHsgc3RhdHVzOiA0MDkgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9ic2VydmVkID0gYXdhaXQgYWdlbnQub2JzZXJ2ZShydW5JZCk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IHRvQUlTZGtTdHJlYW0ob2JzZXJ2ZWQub3V0cHV0LCB7XG4gICAgICAgICAgZnJvbTogXCJhZ2VudFwiLFxuICAgICAgICAgIC4uLihmb2xsb3dVcHMgJiYgZm9sbG93VXBzLm1vZGUgIT09IFwiZ2VuaWVcIlxuICAgICAgICAgICAgPyB7IGV4cGVyaW1lbnRhbFRyYW5zZm9ybTogYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zVHJhbnNmb3JtKHJ1bklkKSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB2ZXJzaW9uOiBcInY3XCIsXG4gICAgICAgICAgc2VuZFJlYXNvbmluZzogdHJ1ZSxcbiAgICAgICAgICBzZW5kU291cmNlczogdHJ1ZSxcbiAgICAgICAgICBvbkVycm9yOiBzZXJpYWxpemVDaGF0U3RyZWFtRXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY3JlYXRlVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UoeyBzdHJlYW0gfSk7XG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJlZ2lzdGVyQXBpUm91dGUoYWJvcnRQYXRoLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbWFzdHJhID0gY29udGV4dC5nZXQoXCJtYXN0cmFcIik7XG4gICAgICAgIGNvbnN0IGFnZW50SWQgPSBjb250ZXh0LnJlcS5wYXJhbShcImFnZW50SWRcIik7XG4gICAgICAgIGNvbnN0IHJ1bklkID0gY29udGV4dC5yZXEucGFyYW0oXCJydW5JZFwiKTtcbiAgICAgICAgaWYgKCFhZ2VudElkIHx8ICFydW5JZCkgdGhyb3cgbmV3IEVycm9yKFwiQWdlbnQgSUQgYW5kIHJ1biBJRCBhcmUgcmVxdWlyZWRcIik7XG4gICAgICAgIGNvbnN0IGFnZW50ID0gbWFzdHJhLmdldEFnZW50QnlJZChhZ2VudElkKTtcbiAgICAgICAgaWYgKCFpc0V2ZW50ZWRBZ2VudChhZ2VudCkpIHtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgICAgIHsgZXJyb3I6IGBBZ2VudCAke2FnZW50SWR9IGRvZXMgbm90IHN1cHBvcnQgYmFja2dyb3VuZCB0dXJuc2AgfSxcbiAgICAgICAgICAgIHsgc3RhdHVzOiA0MDkgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgYWJvcnRlZDogYWdlbnQuYWJvcnRSdW5TdHJlYW0ocnVuSWQpIH0pO1xuICAgICAgfSxcbiAgICB9KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBLZWVwIGEgbGF0ZSBvciBkdXBsaWNhdGUgcmVzdW1lIGZyb20gZmFpbGluZyB0aGUgVUkgc3RyZWFtLiBNYXN0cmEnc1xuICogcmVzdW1lIHBhdGggY2FuIHN1cmZhY2UgYSB3b3JrZmxvdyBlcnJvciBhZnRlciBhbm90aGVyIGNsaWVudCBhbHJlYWR5XG4gKiByZXNvbHZlZCB0aGUgc2FtZSBhcHByb3ZhbC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQ2hhdFN0cmVhbUVycm9yKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGlzU3RhbGVNYXN0cmFSZXN1bWVFcnJvcihlcnJvcikpIHtcbiAgICBsb2dnZXIud2FybihcImlnbm9yZWQgc3RhbGUgbWFzdHJhIHJlc3VtZVwiLCB7XG4gICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgfSk7XG4gICAgcmV0dXJuIFNUQUxFX01BU1RSQV9SRVNVTUVfU1RSRUFNX1RFWFQ7XG4gIH1cbiAgcmV0dXJuIGVycm9yTWVzc2FnZShlcnJvcik7XG59XG4iXX0=
@@ -14,9 +14,9 @@
14
14
  * @module
15
15
  */
16
16
  import { type BasePluginConfig, type ConfigSchema } from "@databricks/appkit";
17
- import { appkit } from "@dbx-tools/appkit";
17
+ import { type ExecutionContextLike, type IdentityMode } from "@dbx-tools/appkit";
18
18
  import type { BrandContext } from "@dbx-tools/shared-core";
19
- import type { FeedbackModeOption } from "@dbx-tools/shared-mastra/feedback";
19
+ import type { FeedbackModeOption } from "@dbx-tools/shared-mastra";
20
20
  import type { AgentConfig } from "@mastra/core/agent";
21
21
  import type { RequestContext } from "@mastra/core/request-context";
22
22
  import type { AnyWorkflow } from "@mastra/core/workflows";
@@ -24,7 +24,6 @@ import type { WorkspaceSandbox, WorkspaceSandboxResolver, WorkspaceToolsConfig }
24
24
  import type { PgVectorConfig, PostgresStoreConfig } from "@mastra/pg";
25
25
  import type { AnyMastraAgentDefinition, MastraTools } from "./agents.ts";
26
26
  import type { GenieSpacesConfig } from "./genie.ts";
27
- import { type MastraIdentityMode } from "./identity.ts";
28
27
  import type { LocalSkillMount, RemoteSkillsOption } from "./remote-skills.ts";
29
28
  /**
30
29
  * `RequestContext` key under which {@link MastraServer} stores the
@@ -78,13 +77,13 @@ export declare const TRACE_REQUEST_CONTEXT_KEYS: readonly string[];
78
77
  /** AppKit execution context plus the canonical user id. */
79
78
  export interface User {
80
79
  id: string;
81
- executionContext: appkit.ExecutionContextLike;
80
+ executionContext: ExecutionContextLike;
82
81
  }
83
82
  /**
84
83
  * Canonical identity for an AppKit execution context: the OBO user id on a
85
84
  * user-scoped call, the service principal id otherwise.
86
85
  */
87
- export declare function executionContextUserId(context: appkit.ExecutionContextLike): string;
86
+ export declare function executionContextUserId(context: ExecutionContextLike): string;
88
87
  /**
89
88
  * Who a turn is ATTRIBUTED to, which is not always whose Databricks credential
90
89
  * runs it. An OBO context's own user id is authoritative. Under the service
@@ -100,7 +99,7 @@ export declare function executionContextUserId(context: appkit.ExecutionContextL
100
99
  * the service principal id and the embed route answered 404, which the chat UI
101
100
  * renders as an expired chart.
102
101
  */
103
- export declare function attributedUserId(executionContext: appkit.ExecutionContextLike, forwardedUserId?: string): string;
102
+ export declare function attributedUserId(executionContext: ExecutionContextLike, forwardedUserId?: string): string;
104
103
  /**
105
104
  * Identity every per-user cache entry is namespaced under, so an OBO result
106
105
  * cannot be read back by another caller.
@@ -197,15 +196,15 @@ export interface MastraPluginConfig extends BasePluginConfig {
197
196
  /** AI SDK provider-options namespace. Defaults to `"openai"`; no env fallback. */
198
197
  providerId?: string;
199
198
  /**
200
- * PostgresStore for Mastra threads/messages. `true` captures the
201
- * `lakebase` plugin's existing service-principal pool; an object opens a
202
- * separately configured store.
199
+ * PostgresStore for Mastra threads/messages. `true` derives a dedicated,
200
+ * lifecycle-isolated service-principal pool from the `lakebase` plugin; an
201
+ * object opens a separately configured store.
203
202
  */
204
203
  storage?: boolean | PostgresStoreConfig;
205
204
  /**
206
- * PgVector store for Mastra memory recall. `true` captures the
207
- * `lakebase` plugin's existing service-principal pool; an object opens a
208
- * separately configured store.
205
+ * PgVector store for Mastra memory recall. `true` derives a dedicated,
206
+ * lifecycle-isolated service-principal pool from the `lakebase` plugin; an
207
+ * object opens a separately configured store.
209
208
  */
210
209
  memory?: boolean | MastraMemoryConfig;
211
210
  /**
@@ -593,7 +592,7 @@ export interface MastraPluginConfig extends BasePluginConfig {
593
592
  * mastra({ genieIdentity: "auto", genieSpaces: { default: spaceId } });
594
593
  * ```
595
594
  */
596
- genieIdentity?: MastraIdentityMode;
595
+ genieIdentity?: IdentityMode;
597
596
  /**
598
597
  * Optional brand context applied to charts produced by the built-in
599
598
  * `render_data` / `prepare_chart` tools. When set, the chart planner's
package/lib/src/config.js CHANGED
@@ -14,8 +14,8 @@
14
14
  * @module
15
15
  */
16
16
  import { getExecutionContext } from "@databricks/appkit";
17
+ import { IDENTITY_MODES } from "@dbx-tools/appkit";
17
18
  import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from "@mastra/core/request-context";
18
- import { IDENTITY_MODES } from "./identity.js";
19
19
  /**
20
20
  * `RequestContext` key under which {@link MastraServer} stores the
21
21
  * resolved AppKit user. `model.ts` reads it to mint user-scoped
@@ -143,11 +143,11 @@ export const MASTRA_CONFIG_SCHEMA = {
143
143
  },
144
144
  storage: {
145
145
  type: ["boolean", "object"],
146
- description: "PostgresStore for Mastra threads / messages. `true` captures the `lakebase` plugin's existing service-principal pool; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
146
+ description: "PostgresStore for Mastra threads / messages. `true` derives a dedicated lifecycle-isolated service-principal pool from the `lakebase` plugin; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
147
147
  },
148
148
  memory: {
149
149
  type: ["boolean", "object"],
150
- description: "PgVector store for Mastra semantic recall. `true` captures the `lakebase` plugin's existing service-principal pool; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
150
+ description: "PgVector store for Mastra semantic recall. `true` derives a dedicated lifecycle-isolated service-principal pool from the `lakebase` plugin; an object opens a separately configured store. Auto-enabled when the `lakebase` plugin is registered.",
151
151
  },
152
152
  codeMode: {
153
153
  type: ["boolean", "string", "object"],
@@ -259,4 +259,4 @@ export const MASTRA_CONFIG_SCHEMA = {
259
259
  },
260
260
  },
261
261
  };
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQU1uRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVc1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUd4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUN6RCxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7QUFFdkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO0FBRWxEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0I7SUFDM0Qsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsbUVBQW1FO0lBQ25FLGlFQUFpRTtJQUNqRSx3QkFBd0I7Q0FDekIsQ0FBQztBQVFGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFvQztJQUN6RSxPQUFPLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FB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QUEyRTtZQUMzRSwwRUFBMEU7WUFDMUUsSUFBSSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDekIsV0FBVyxFQUNULGdpQkFBZ2lCO1NBQ25pQjtRQUNELFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUN4QixXQUFXLEVBQ1QscU9BQXFPO1NBQ3hPO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQ1QsMElBQTBJO1NBQzdJO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQbHVnaW4gY29uZmlndXJhdGlvbiB0eXBlcyBhbmQgc2hhcmVkIGBSZXF1ZXN0Q29udGV4dGAga2V5cy5cbiAqXG4gKiBPd25zIHRoZSB0eXBlZCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfSAodGhlIHBsdWdpbidzIHNsaWNlIG9mIEFwcEtpdFxuICogY29uZmlnKSBhbmQge0BsaW5rIE1BU1RSQV9DT05GSUdfU0NIRU1BfSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCBzbyBzY2FmZm9sZGluZyB0b29scyBhbmQgYWdlbnRzIGNhbiByZWFkIHRoZSBvcHRpb24gc2V0LlxuICpcbiAqIFByZWNlZGVuY2UgcGVyIGZpZWxkIGlzIGV4cGxpY2l0IHBsdWdpbiBjb25maWcsIHRoZW4gdGhlIGVudmlyb25tZW50XG4gKiB2YXJpYWJsZSBuYW1lZCBvbiB0aGUgZmllbGQsIHRoZW4gYSBidWlsdC1pbiBkZWZhdWx0LlxuICpcbiAqIEtlcHQgaW4gYSBsZWFmIG1vZHVsZSBzbyBgcGx1Z2luLnRzYCwgYHNlcnZlci50c2AsIGBtb2RlbC50c2AsIGFuZFxuICogYG1lbW9yeS50c2AgY2FuIGltcG9ydCB0aGVtIHdpdGhvdXQgY3JlYXRpbmcgYSBjeWNsZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLCB0eXBlIENvbmZpZ1NjaGVtYSB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBCcmFuZENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBGZWVkYmFja01vZGVPcHRpb24gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhL2ZlZWRiYWNrXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50Q29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEFueVdvcmtmbG93IH0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3JrZmxvd3NcIjtcbmltcG9ydCB0eXBlIHtcbiAgV29ya3NwYWNlU2FuZGJveCxcbiAgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyLFxuICBXb3Jrc3BhY2VUb29sc0NvbmZpZyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgUGdWZWN0b3JDb25maWcsIFBvc3RncmVzU3RvcmVDb25maWcgfSBmcm9tIFwiQG1hc3RyYS9wZ1wiO1xuXG5pbXBvcnQgdHlwZSB7IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhVG9vbHMgfSBmcm9tIFwiLi9hZ2VudHMudHNcIjtcbmltcG9ydCB0eXBlIHsgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9nZW5pZS50c1wiO1xuaW1wb3J0IHsgSURFTlRJVFlfTU9ERVMsIHR5cGUgTWFzdHJhSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vaWRlbnRpdHkudHNcIjtcbmltcG9ydCB0eXBlIHsgTG9jYWxTa2lsbE1vdW50LCBSZW1vdGVTa2lsbHNPcHRpb24gfSBmcm9tIFwiLi9yZW1vdGUtc2tpbGxzLnRzXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgdW5kZXIgd2hpY2gge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RvcmVzIHRoZVxuICogcmVzb2x2ZWQgQXBwS2l0IHVzZXIuIGBtb2RlbC50c2AgcmVhZHMgaXQgdG8gbWludCB1c2VyLXNjb3BlZFxuICogRGF0YWJyaWNrcyB0b2tlbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVVNFUl9LRVkgPSBcIm1hc3RyYV9fdXNlclwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5cyBmb3IgQXBwS2l0IHVzZXIgbWV0YWRhdGEgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFN1cmZhY2VkIGFzIHRyYWNlIG1ldGFkYXRhIHZpYVxuICoge0BsaW5rIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTfSBzbyB0cmFjZXMgYXJlIGZpbHRlcmFibGUgYnkgd2hvXG4gKiBpc3N1ZWQgdGhlIHJlcXVlc3Qgd2l0aG91dCBsZWFraW5nIHRoZSBmdWxsIHVzZXIgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfTkFNRV9LRVkgPSBcIm1hc3RyYV9fdXNlck5hbWVcIjtcbi8qKiBSZXF1ZXN0LWNvbnRleHQga2V5IGNvbnRhaW5pbmcgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlcidzIGVtYWlsIGFkZHJlc3MuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfRU1BSUxfS0VZID0gXCJtYXN0cmFfX3VzZXJFbWFpbFwiO1xuLyoqIFJlcXVlc3QtY29udGV4dCBrZXkgaWRlbnRpZnlpbmcgdGhlIERhdGFicmlja3MgY3JlZGVudGlhbCB1c2VkIGJ5IHRoZSB0dXJuLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9BVVRIX01PREVfS0VZID0gXCJtYXN0cmFfX2F1dGhNb2RlXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgZm9yIHRoZSBwZXItSFRUUC1yZXF1ZXN0IGlkIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBSZWFkcyBgWC1SZXF1ZXN0LUlkYCBmcm9tIHRoZSBpbmNvbWluZ1xuICogaGVhZGVycyB3aGVuIHByZXNlbnQgKHNvIGFuIHVwc3RyZWFtIGxvYWQgYmFsYW5jZXIgLyBBUEkgZ2F0ZXdheVxuICogY2FuIGtlZXAgaXRzIHRyYWNlIGNvcnJlbGF0aW9uKSwgZmFsbHMgYmFjayB0byBhIGZyZXNobHkgbWludGVkXG4gKiBVVUlELiBFY2hvZWQgYmFjayBvbiB0aGUgcmVzcG9uc2UgYW5kIHN1cmZhY2VkIG9uIGV2ZXJ5IHNwYW4gdmlhXG4gKiB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9IHNvIGxvZ3MgYW5kIHRyYWNlcyBzaGFyZSBhXG4gKiBqb2luIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9SRVFVRVNUX0lEX0tFWSA9IFwibWFzdHJhX19yZXF1ZXN0SWRcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgT0F1dGggc2NvcGVzIHBhcnNlZCBmcm9tIHRoZSBmb3J3YXJkZWRcbiAqIGFjY2VzcyB0b2tlbiBieSB7QGxpbmsgTWFzdHJhU2VydmVyLmNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0U2NvcGVzfS5cbiAqIFdvcmtzcGFjZSBtb3VudHMgdGhhdCB0b3VjaCBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlcyByZXF1aXJlXG4gKiBgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIGluIHRoaXMgbGlzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9TQ09QRVNfS0VZID0gXCJtYXN0cmFfX3Njb3Blc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBsaXN0IG9mIGBSZXF1ZXN0Q29udGV4dGAga2V5cyB3ZSB3YW50IE1hc3RyYSB0byBleHRyYWN0XG4gKiBhcyBtZXRhZGF0YSBvbiBldmVyeSBvYnNlcnZhYmlsaXR5IHNwYW4gKGFnZW50IHJ1bnMsIG1vZGVsIGNhbGxzLFxuICogdG9vbCBpbnZvY2F0aW9ucywgd29ya2Zsb3cgc3RlcHMpLlxuICpcbiAqIE1pcnJvcnMge0BsaW5rIGh0dHBzOi8vbWFzdHJhLmFpL2RvY3Mvb2JzZXJ2YWJpbGl0eS90cmFjaW5nL292ZXJ2aWV3I2F1dG9tYXRpYy1tZXRhZGF0YS1mcm9tLXJlcXVlc3Rjb250ZXh0fTpcbiAqIHBhc3NlZCB2ZXJiYXRpbSBpbnRvIGBPYnNlcnZhYmlsaXR5LmNvbmZpZ3NbKl0ucmVxdWVzdENvbnRleHRLZXlzYCxcbiAqIHNvIGFueSBrZXkgbGlzdGVkIGhlcmUgaXMgcmVhZCBmcm9tIGBSZXF1ZXN0Q29udGV4dGAgYXQgdHJhY2VcbiAqIHN0YXJ0IGFuZCBhdHRhY2hlZCBhcyBzY2FsYXIgc3BhbiBtZXRhZGF0YS4gS2VlcCB0aGUgc2V0IHRvIHBsYWluXG4gKiBzY2FsYXJzIC0gbmV2ZXIgaW5jbHVkZSB7QGxpbmsgTUFTVFJBX1VTRVJfS0VZfSAoaXQgY2FycmllcyB0aGVcbiAqIGZ1bGwgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHdpdGggYSBgV29ya3NwYWNlQ2xpZW50YCByZWZlcmVuY2UpLlxuICpcbiAqIE9yZGVyIGlzIHB1cmVseSBjb3NtZXRpYzsgTWFzdHJhIGRlLWR1cGVzIGludGVybmFsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIE1BU1RSQV9SRVNPVVJDRV9JRF9LRVksXG4gIE1BU1RSQV9USFJFQURfSURfS0VZLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9VU0VSX05BTUVfS0VZLFxuICBNQVNUUkFfVVNFUl9FTUFJTF9LRVksXG4gIE1BU1RSQV9BVVRIX01PREVfS0VZLFxuICAvLyBNb2RlbCBvdmVycmlkZSBrZXkgaXMgb3duZWQgYnkgYHNlcnZpbmcudHNgOyBzcGVsbGVkIGlubGluZSBoZXJlXG4gIC8vIHNvIHRoaXMgbW9kdWxlIHN0YXlzIGxlYWYtbGV2ZWwgKG5vIGN5Y2xlcyB3aXRoIGBzZXJ2aW5nLnRzYCkuXG4gIFwibWFzdHJhX19tb2RlbF9vdmVycmlkZVwiLFxuXTtcblxuLyoqIEFwcEtpdCBleGVjdXRpb24gY29udGV4dCBwbHVzIHRoZSBjYW5vbmljYWwgdXNlciBpZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gIGlkOiBzdHJpbmc7XG4gIGV4ZWN1dGlvbkNvbnRleHQ6IGFwcGtpdC5FeGVjdXRpb25Db250ZXh0TGlrZTtcbn1cblxuLyoqXG4gKiBDYW5vbmljYWwgaWRlbnRpdHkgZm9yIGFuIEFwcEtpdCBleGVjdXRpb24gY29udGV4dDogdGhlIE9CTyB1c2VyIGlkIG9uIGFcbiAqIHVzZXItc2NvcGVkIGNhbGwsIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBpZCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRpb25Db250ZXh0VXNlcklkKGNvbnRleHQ6IGFwcGtpdC5FeGVjdXRpb25Db250ZXh0TGlrZSk6IHN0cmluZyB7XG4gIHJldHVybiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZDtcbn1cblxuLyoqXG4gKiBXaG8gYSB0dXJuIGlzIEFUVFJJQlVURUQgdG8sIHdoaWNoIGlzIG5vdCBhbHdheXMgd2hvc2UgRGF0YWJyaWNrcyBjcmVkZW50aWFsXG4gKiBydW5zIGl0LiBBbiBPQk8gY29udGV4dCdzIG93biB1c2VyIGlkIGlzIGF1dGhvcml0YXRpdmUuIFVuZGVyIHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwsIGV2ZXJ5IGNhbGxlciBzaGFyZXMgb25lIGNyZWRlbnRpYWwsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpZCBpc1xuICogd2hhdCBrZWVwcyBtZW1vcnkgdGhyZWFkcyBhbmQgcGVyLXVzZXIgY2FjaGUgbmFtZXNwYWNlcyBkaXN0aW5jdDsgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCBpZCBpcyB0aGUgZmxvb3Igd2hlbiBubyB1c2VyIHdhcyBmb3J3YXJkZWQuXG4gKlxuICogVGhpcyBydWxlIGhhcyB0byBiZSBpZGVudGljYWwgZXZlcnl3aGVyZSBhIGNhY2hlIGtleSBpcyBidWlsdCwgc28gYm90aCB0aGVcbiAqIHdyaXRlIHNpZGUgKHRoZSBgUmVxdWVzdENvbnRleHRgIHVzZXIgc3RhbXBlZCBieSBgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXJgKVxuICogYW5kIHRoZSByZWFkIHNpZGUgKHRoZSBwbHVnaW4ncyBvd24gQXBwS2l0IHJvdXRlcywgd2hpY2ggaGF2ZSBhIHJlcXVlc3QgYnV0XG4gKiBubyBgUmVxdWVzdENvbnRleHRgKSBkZXJpdmUgdGhlaXIga2V5IGZyb20gdGhpcyBvbmUgZnVuY3Rpb24uIFdoZW4gdGhlIHR3b1xuICogZGlzYWdyZWVkLCBhIGNoYXJ0IHdyaXR0ZW4gdW5kZXIgdGhlIGZvcndhcmRlZCB1c2VyIGlkIHdhcyByZWFkIGJhY2sgdW5kZXJcbiAqIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBpZCBhbmQgdGhlIGVtYmVkIHJvdXRlIGFuc3dlcmVkIDQwNCwgd2hpY2ggdGhlIGNoYXQgVUlcbiAqIHJlbmRlcnMgYXMgYW4gZXhwaXJlZCBjaGFydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHJpYnV0ZWRVc2VySWQoXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IGFwcGtpdC5FeGVjdXRpb25Db250ZXh0TGlrZSxcbiAgZm9yd2FyZGVkVXNlcklkPzogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgaWYgKFwiaXNVc2VyQ29udGV4dFwiIGluIGV4ZWN1dGlvbkNvbnRleHQpIHJldHVybiBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xuICByZXR1cm4gZm9yd2FyZGVkVXNlcklkID8/IGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoZXhlY3V0aW9uQ29udGV4dCk7XG59XG5cbi8qKlxuICogSWRlbnRpdHkgZXZlcnkgcGVyLXVzZXIgY2FjaGUgZW50cnkgaXMgbmFtZXNwYWNlZCB1bmRlciwgc28gYW4gT0JPIHJlc3VsdFxuICogY2Fubm90IGJlIHJlYWQgYmFjayBieSBhbm90aGVyIGNhbGxlci5cbiAqXG4gKiBQcmVmZXJzIHRoZSB7QGxpbmsgVXNlcn0gdGhhdCB7QGxpbmsgTWFzdHJhU2VydmVyfSBzdGFtcHMgb24gdGhlIHJlcXVlc3RcbiAqIGNvbnRleHQsIHdob3NlIGlkIGFscmVhZHkgZm9sbG93cyB7QGxpbmsgYXR0cmlidXRlZFVzZXJJZH0uIFRoZSBNQ1AgdHJhbnNwb3J0XG4gKiByb3V0ZXMgZG8gbm90IHRocmVhZCB0aGF0IGNvbnRleHQgaW50byB0b29sIGV4ZWN1dGlvbiwgc28gdGhvc2UgZmFsbCBiYWNrIHRvXG4gKiB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dCAodGhlIGFjdGl2ZSBPQk8gc2NvcGUsIG9yIHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwpLiBBIGNhbGxlciBob2xkaW5nIGFuIGV4cHJlc3MgcmVxdWVzdCBzaG91bGQgYnVpbGQgaXRzIGtleSBmcm9tXG4gKiB7QGxpbmsgYXR0cmlidXRlZFVzZXJJZH0gaW5zdGVhZCwgc28gdGhlIGZvcndhcmRlZCB1c2VyIGlzIG5vdCBsb3N0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVzZXJLZXkocmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHVzZXI/LmlkID8/IGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoZ2V0RXhlY3V0aW9uQ29udGV4dCgpKTtcbn1cblxuLyoqIFBnVmVjdG9yIGNvbmZpZyB3aXRoIGFuIG9wdGlvbmFsIE1hc3RyYSBzdG9yZSBpZC4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYU1lbW9yeUNvbmZpZyA9IFBnVmVjdG9yQ29uZmlnICYge1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBNYXN0cmEgbmF0aXZlIHdvcmtzcGFjZSBza2lsbC1zZWFyY2ggY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhV29ya3NwYWNlU2tpbGxzQ29uZmlnIHtcbiAgLyoqIE1heGltdW0gc2tpbGwgbWF0Y2hlcyByZXR1cm5lZCBieSBvbmUgc2VhcmNoLiBEZWZhdWx0cyB0byA1LiAqL1xuICB0b3BLPzogbnVtYmVyO1xuICAvKiogTWluaW11bSBCTTI1IHJlbGV2YW5jZSBzY29yZS4gRGVmYXVsdHMgdG8gMC4xLiAqL1xuICBtaW5TY29yZT86IG51bWJlcjtcbiAgLyoqIExvYWRlZC1za2lsbCB0aHJlYWQtc3RhdGUgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gb25lIGhvdXIuICovXG4gIHR0bE1zPzogbnVtYmVyO1xufVxuXG4vKiogTmF0aXZlIE1hc3RyYSBDb2RlIE1vZGUgZXhlY3V0aW9uIHRyYW5zcG9ydC4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYUNvZGVNb2RlVHJhbnNwb3J0ID0gXCJhdXRvXCIgfCBcImlzb2xhdGVkLXZtXCIgfCBcInF1aWNranNcIjtcblxuLyoqIE5hdGl2ZSBNYXN0cmEgQ29kZSBNb2RlIHNldHRpbmdzIGZvciBzYW5kYm94ZWQgbXVsdGktdG9vbCBvcmNoZXN0cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFDb2RlTW9kZUNvbmZpZyB7XG4gIC8qKiBDb2RlIE1vZGUgZXhlY3V0aW9uIHRyYW5zcG9ydC4gKi9cbiAgdHJhbnNwb3J0OiBNYXN0cmFDb2RlTW9kZVRyYW5zcG9ydDtcbiAgLyoqIEdlbmVyYXRlZCBvcmNoZXN0cmF0aW9uIHRvb2wgaWQuIERlZmF1bHRzIHRvIGBleGVjdXRlX3R5cGVzY3JpcHRgLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIE1heGltdW0gb3JjaGVzdHJhdGlvbiBwcm9ncmFtIHJ1bnRpbWUgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byAzMCBzZWNvbmRzLiAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbmUtZ3JhaW5lZCBjb250cm9sIGZvciB0aGUgb3B0aW9uYWwgTUNQIHNlcnZlciBleHBvc3VyZVxuICogKHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcubWNwfSkuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsOyB0aGUgb2JqZWN0XG4gKiBmb3JtIG9ubHkgbmVlZHMgdG8gc2V0IHdoYXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFNY3BDb25maWcge1xuICAvKipcbiAgICogU2VydmVyIGlkIHVzZWQgaW4gdGhlIHJvdXRlIHBhdGggKGAvbWNwLzxzZXJ2ZXJJZD4vLi4uYCkgYW5kIGFzIHRoZVxuICAgKiBNQ1AgcmVnaXN0cnkgaWQuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyByZWdpc3RlcmVkIG5hbWUuXG4gICAqL1xuICBzZXJ2ZXJJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBhZHZlcnRpc2VkIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBgXCI8ZGlzcGxheU5hbWU+IE1DUFwiYC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFNlbWFudGljIHZlcnNpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiMS4wLjBcImAuICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhZHZlcnRpc2VkIG92ZXIgTUNQLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cG9zZSBldmVyeSByZWdpc3RlcmVkIGFnZW50IGFzIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhpcyBpcyB0aGUgXCJsZXZlcmFnZSB0aGUgTWFzdHJhIGFnZW50cyBvdmVyXG4gICAqIE1DUFwiIGJlaGF2aW9yIG1vc3QgY2FsbGVycyB3YW50LlxuICAgKi9cbiAgYWdlbnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFsc28gZXhwb3NlIHRoZSBwbHVnaW4ncyBhbWJpZW50IHRvb2xzICh0aGUgYnVpbHQtaW4gYHJlbmRlcl9kYXRhYFxuICAgKiBwbHVzIGFueXRoaW5nIGluIGBjb25maWcudG9vbHNgKSBhcyBNQ1AgdG9vbHMuIERlZmF1bHRzIHRvIGBmYWxzZWA6XG4gICAqIHRoZSBhbWJpZW50IHRvb2xzIGFzc3VtZSBhbiBpbi1wcm9jZXNzIGNoYXQgdHVybiAodGhleSBwdWJsaXNoXG4gICAqIHdyaXRlciBldmVudHMgdGhlIGNoYXQgVUkgY29uc3VtZXMpLCBzbyB0aGV5IGFyZW4ndCB1c2VmdWwgdG8gYVxuICAgKiBzdGFuZGFsb25lIE1DUCBjbGllbnQuIFR1cm4gdGhpcyBvbiBvbmx5IHdoZW4gdGhvc2UgdG9vbHMgYXJlIHNhZmVcbiAgICogdG8gY2FsbCBvdXQtb2YtYmFuZC5cbiAgICovXG4gIHRvb2xzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIHRvb2xzIHRvIGV4cG9zZSBvdmVyIE1DUCBiZXlvbmQgdGhlIGFnZW50IC8gYW1iaWVudCBzZXRzLlxuICAgKiBVc2UgdGhpcyBmb3IgdG9vbHMgd3JpdHRlbiBzcGVjaWZpY2FsbHkgZm9yIE1DUCBjb25zdW1lcnMuXG4gICAqL1xuICBleHRyYVRvb2xzPzogTWFzdHJhVG9vbHM7XG59XG5cbi8qKiBPcHRpb25hbCBwb3N0LXR1cm4gZm9sbG93LXVwIHN1Z2dlc3Rpb24gcG9saWN5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnIHtcbiAgLyoqIE5hdGl2ZSBHZW5pZSBvbmx5LCBDaGF0RmFzdCBnZW5lcmF0ZWQgb25seSwgb3IgYXV0b21hdGljIHNlbGVjdGlvbiB3aGVuIHRydWUuICovXG4gIG1vZGU6IHRydWUgfCBcImdlbmVyYXRlZFwiIHwgXCJnZW5pZVwiO1xuICAvKiogTWF4aW11bSBxdWVzdGlvbnMgZW1pdHRlZCBmb3Igb25lIHR1cm4uIERlZmF1bHRzIHRvIDMsIG1heGltdW0gMTAuICovXG4gIGxpbWl0PzogbnVtYmVyO1xuICAvKiogVGFpbC1nZW5lcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBBbHNvIGV4cG9zZSB0aGUgZ2VuZXJhdG9yIGFzIGFuIGV4cGxpY2l0bHkgY2FsbGFibGUgYWdlbnQgdG9vbC4gKi9cbiAgZXhwb3NlVG9vbD86IGJvb2xlYW47XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGFjY2VwdGVkIGJ5IHRoZSBNYXN0cmEgQXBwS2l0IHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBSdW4gdHVybnMgdGhyb3VnaCBNYXN0cmEncyBldmVudGVkIGR1cmFibGUgYWdlbnQgc28gZXhlY3V0aW9uIGNvbnRpbnVlc1xuICAgKiBhZnRlciBhIGJyb3dzZXIgZGlzY29ubmVjdCBhbmQgY2FuIGJlIG9ic2VydmVkIGFnYWluIGJ5IHJ1biBpZC4gRGVmYXVsdHNcbiAgICogdG8gYHRydWVgLlxuICAgKi9cbiAgYmFja2dyb3VuZFR1cm5zPzogYm9vbGVhbjtcbiAgLyoqIEFJIFNESyBwcm92aWRlci1vcHRpb25zIG5hbWVzcGFjZS4gRGVmYXVsdHMgdG8gYFwib3BlbmFpXCJgOyBubyBlbnYgZmFsbGJhY2suICovXG4gIHByb3ZpZGVySWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcy9tZXNzYWdlcy4gYHRydWVgIGNhcHR1cmVzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIGV4aXN0aW5nIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhXG4gICAqIHNlcGFyYXRlbHkgY29uZmlndXJlZCBzdG9yZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBib29sZWFuIHwgUG9zdGdyZXNTdG9yZUNvbmZpZztcbiAgLyoqXG4gICAqIFBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgbWVtb3J5IHJlY2FsbC4gYHRydWVgIGNhcHR1cmVzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIGV4aXN0aW5nIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhXG4gICAqIHNlcGFyYXRlbHkgY29uZmlndXJlZCBzdG9yZS5cbiAgICovXG4gIG1lbW9yeT86IGJvb2xlYW4gfCBNYXN0cmFNZW1vcnlDb25maWc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXhlY3V0YWJsZSB0b29scyBhdmFpbGFibGUgdG8gdGhlIGN1cnJlbnQgcmVxdWVzdCB0aHJvdWdoIG5hdGl2ZVxuICAgKiBNYXN0cmEgQ29kZSBNb2RlLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBgYXV0b2Agc2VsZWN0cyBhbiBpbnN0YWxsZWQsXG4gICAqIHJ1bnRpbWUtc3VwcG9ydGVkIG9wdGlvbmFsIHRyYW5zcG9ydCBkdXJpbmcgc3RhcnR1cCBhbmQgbGVhdmVzIENvZGUgTW9kZVxuICAgKiBkaXNhYmxlZCB3aGVuIG5vbmUgaXMgYXZhaWxhYmxlLiBFeHBsaWNpdCB0cmFuc3BvcnQgdmFsdWVzIGZhaWwgc3RhcnR1cFxuICAgKiB3aGVuIHRoZWlyIG9wdGlvbmFsIGRlcGVuZGVuY3kgb3IgcnVudGltZSBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlLiBUaGVzZVxuICAgKiB0cmFuc3BvcnRzIGRvIG5vdCBleGVjdXRlIHRocm91Z2ggdGhlIHdvcmtzcGFjZSBjb21tYW5kIHNhbmRib3g7IFNTSCBpc1xuICAgKiB1c2VkIG9ubHkgd2hlbiBhbiBleHBvc2VkIFNTSC1iYWNrZWQgdG9vbCBpcyBjYWxsZWQuXG4gICAqL1xuICBjb2RlTW9kZT86IGZhbHNlIHwgTWFzdHJhQ29kZU1vZGVUcmFuc3BvcnQgfCBNYXN0cmFDb2RlTW9kZUNvbmZpZztcbiAgLyoqXG4gICAqIFNhbmRib3ggZm9yIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzLiBEZWZhdWx0cyB0byBNb250eS4gYGZhbHNlYFxuICAgKiBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbjsgYHRydWVgIG9yIGBcIm1vbnR5XCJgIHNlbGVjdHMgTW9udHk7IGFuIGV4cGxpY2l0XG4gICAqIE1hc3RyYSBzYW5kYm94IG9yIHJlc29sdmVyIHN1cHBsaWVzIGEgcmVtb3RlIHRyYW5zcG9ydC4gQW4gYWdlbnQgd2l0aCBhblxuICAgKiBleHBsaWNpdCBjdXN0b20gYHdvcmtzcGFjZWAga2VlcHMgdGhhdCB3b3Jrc3BhY2UgYW5kIGl0cyBzYW5kYm94LlxuICAgKi9cbiAgc2FuZGJveD86IGJvb2xlYW4gfCBcIm1vbnR5XCIgfCBXb3Jrc3BhY2VTYW5kYm94IHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyO1xuICAvKiogQWRkIHVzZXItc2NvcGVkIGAvdG1wYCBvbmx5IHdoZW4gbm8gY29uZmlndXJlZCB3b3Jrc3BhY2UgcGF0aCBtb3VudHMgd3JpdGFibGUuICovXG4gIHdvcmtzcGFjZUZhbGxiYWNrVG9UbXA/OiBib29sZWFuO1xuICAvKiogTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgdG9vbCBhdmFpbGFiaWxpdHksIGFwcHJvdmFsLCBhbmQgaG9vayBjb25maWd1cmF0aW9uLiAqL1xuICB3b3Jrc3BhY2VUb29scz86IFdvcmtzcGFjZVRvb2xzQ29uZmlnO1xuICAvKipcbiAgICogVXNlIE1hc3RyYSdzIG5hdGl2ZSB3b3Jrc3BhY2Ugc2tpbGwgbWFuYWdlci4gRGVmYXVsdHMgdG8gdHJ1ZS4gUGFzcyBhblxuICAgKiBvYmplY3QgdG8gdHVuZSBvbi1kZW1hbmQgZGlzY292ZXJ5IGFuZCBsb2FkZWQtc2tpbGwgc3RhdGUuXG4gICAqL1xuICB3b3Jrc3BhY2VTa2lsbHM/OiBib29sZWFuIHwgTWFzdHJhV29ya3NwYWNlU2tpbGxzQ29uZmlnO1xuICAvKipcbiAgICogQ29kZS1kZWZpbmVkIGFnZW50cy4gQWNjZXB0cyB0aHJlZSBzaGFwZXMgZm9yIGNvbnZlbmllbmNlOlxuICAgKlxuICAgKiAtICoqUmVjb3JkKio6IGB7IGFuYWx5c3Q6IGRlZiwgaGVscGVyOiBkZWYgfWAgLSBrZXlzIGJlY29tZSB0aGVcbiAgICogICByZWdpc3RlcmVkIGlkcyBhbmQgdGhlIGZpcnN0IGtleSBpcyB0aGUgZGVmYXVsdC5cbiAgICogLSAqKlNpbmdsZSBkZWZpbml0aW9uKio6IGBkZWZgIC0gcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBcImRlZmF1bHRcImAgd2hlbiBgbmFtZWAgaXMgb21pdHRlZCkgYW5kXG4gICAqICAgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgdGhlIGRlZmF1bHQgYWdlbnQuXG4gICAqIC0gKipBcnJheSoqOiBgW2RlZjEsIGRlZjJdYCAtIGVhY2ggcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBhZ2VudF8ke2l9YCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKTtcbiAgICogICB0aGUgZmlyc3QgZW50cnkgaXMgdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgYmVjb21lcyBhIE1hc3RyYSBgQWdlbnRgIHJlYWNoYWJsZSBhdFxuICAgKiBgL2FwaS88cGx1Z2luPi9yb3V0ZS9jaGF0LzxpZD5gICh0aGUgY2hhdCByb3V0ZSBhbHNvIG1hdGNoZXNcbiAgICogYDphZ2VudElkYCkuIFdoZW4gYGFnZW50c2AgaXMgb21pdHRlZCBlbnRpcmVseSwgdGhlIHBsdWdpblxuICAgKiByZWdpc3RlcnMgYSBzaW5nbGUgYnVpbHQtaW4gYGRlZmF1bHRgIGFuYWx5c3Qgc28gdGhlIGJhcmVcbiAgICogYG1hc3RyYSgpYCBjYWxsIHN0aWxsIG1vdW50cyBhIHdvcmtpbmcgY2hhdCBlbmRwb2ludC5cbiAgICpcbiAgICogQGV4YW1wbGUgU2luZ2xlLWFnZW50IHNob3J0aGFuZFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgQXJyYXlcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IFtcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJhbmFseXN0XCIsIGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJoZWxwZXJcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgIF0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgUmVjb3JkIChleHBsaWNpdCBpZHMpXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiB7XG4gICAqICAgICBhbmFseXN0OiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGhlbHBlcjogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgfSxcbiAgICogICBkZWZhdWx0QWdlbnQ6IFwiYW5hbHlzdFwiLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhZ2VudHM/OlxuICAgIHwgUmVjb3JkPHN0cmluZywgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uPlxuICAgIHwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uXG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXTtcbiAgLyoqXG4gICAqIEFtYmllbnQgdG9vbHMgc3ByZWFkIGludG8gZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCdzIHRvb2xzIHJlY29yZDtcbiAgICogcGVyLWFnZW50IHRvb2xzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBVc2UgZm9yIGEgc21hbGwgc2hhcmVkXG4gICAqIGxpYnJhcnk7IGZvciBwZXItYWdlbnQgdG9vbHMgc2V0IGBhZ2VudHNbaWRdLnRvb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgdG9vbHM/OiBNYXN0cmFUb29scztcbiAgLyoqXG4gICAqIENvZGUtZGVmaW5lZCBNYXN0cmEgd29ya2Zsb3dzIHJlZ2lzdGVyZWQgb24gdGhlIGhvc3RlZCBpbnN0YW5jZS5cbiAgICogRGVmZXJyZWQgc2libGluZyBwbHVnaW5zIG1heSBhbHNvIHJlZ2lzdGVyIHRocm91Z2ggdGhlIHBsdWdpbiBleHBvcnRcbiAgICogYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBidWlsdC5cbiAgICovXG4gIHdvcmtmbG93cz86IFJlY29yZDxzdHJpbmcsIEFueVdvcmtmbG93PjtcbiAgLyoqXG4gICAqIEFnZW50IGlkIHVzZWQgd2hlbiB0aGUgY2xpZW50IGRvZXNuJ3Qgc3BlY2lmeSBvbmUgKHRoZSBiYXJlLFxuICAgKiB1bi1zdWZmaXhlZCBoaXN0b3J5IC8gc3VnZ2VzdGlvbnMgcm91dGVzIHJlc29sdmUgdG8gaXQpLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgZmlyc3Qga2V5IGluIGBhZ2VudHNgIChvciBgXCJkZWZhdWx0XCJgIHdoZW5cbiAgICogYGFnZW50c2AgaXMgb21pdHRlZCkuIE11c3QgbWF0Y2ggYW4gaWQgaW4gYGFnZW50c2Agd2hlbiBib3RoIGFyZVxuICAgKiBzZXQ7IGEgbWlzbWF0Y2ggdGhyb3dzIGF0IHNldHVwIHdpdGggdGhlIGF2YWlsYWJsZSBjYW5kaWRhdGVzLlxuICAgKi9cbiAgZGVmYXVsdEFnZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGx1Z2luLWxldmVsIGRlZmF1bHQgbW9kZWwgYXBwbGllZCB0byBldmVyeSBhZ2VudCB0aGF0IG9taXRzIGl0c1xuICAgKiBvd24gYG1vZGVsYC4gTWlycm9ycyBBcHBLaXQncyBgYWdlbnRzKHsgZGVmYXVsdE1vZGVsIH0pYC5cbiAgICpcbiAgICogLSBgc3RyaW5nYDogc2hvcnRoYW5kIGZvciBcInVzZSB0aGUgT0JPIGF1dG8tcmVzb2x2ZXIgYnV0IHN3YXAgdGhlXG4gICAqICAgYG1vZGVsSWRgXCIgKGUuZy4gYFwiZGF0YWJyaWNrcy1jbGF1ZGUtc29ubmV0LTQtNlwiYCkuXG4gICAqIC0gQW55IG90aGVyIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50PE1hc3RyYU1vZGVsQ29uZmlnPmA6IHBhc3NlZFxuICAgKiAgIHRocm91Z2ggdmVyYmF0aW0uIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgZnVsbCBjb250cm9sIG92ZXIgYXV0aFxuICAgKiAgIG9yIGBwcm92aWRlcklkYC5cbiAgICpcbiAgICogUmVzb2x1dGlvbiBvcmRlciBwZXIgYWdlbnQ6IGBkZWYubW9kZWxgIOKGkiBgZGVmYXVsdE1vZGVsYCDihpJcbiAgICogYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCDihpIgYnVpbHQtaW4gYC9zZXJ2aW5nLWVuZHBvaW50c2BcbiAgICogcmVzb2x2ZXIuXG4gICAqL1xuICBkZWZhdWx0TW9kZWw/OiBBZ2VudENvbmZpZ1tcIm1vZGVsXCJdIHwgc3RyaW5nO1xuICAvKipcbiAgICogRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgKGBcImNsYXVkZSBzb25uZXRcImApIGFnYWluc3QgdGhlIHdvcmtzcGFjZSdzXG4gICAqIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogU2V0IGBmYWxzZWAgdG8gcmVxdWlyZSBleGFjdCBlbmRwb2ludCBuYW1lcyBldmVyeXdoZXJlLlxuICAgKi9cbiAgbW9kZWxGdXp6eU1hdGNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZnV6enkgbWF0Y2hlciwgMCAoZXhhY3QpIHRvIDEgKGFueXRoaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gYDAuNGA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogTG93ZXIgdmFsdWVzIHJlamVjdCBsb29zZSBtYXRjaGVzOyByYWlzZSBpdCBpZiB5b3UgaGF2ZSBhIHNwcmF3bGluZ1xuICAgKiBlbmRwb2ludCBjYXRhbG9ndWUgd2l0aCBzaW1pbGFyLWxvb2tpbmcgbmFtZXMuXG4gICAqL1xuICBtb2RlbEZ1enp5VGhyZXNob2xkPzogbnVtYmVyO1xuICAvKipcbiAgICogVFRMIGZvciB0aGUgaW4tbWVtb3J5IHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICogRGVmYXVsdHMgdG8gNSBtaW51dGVzOyBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIFRoZSBjYWNoZSBpcyBwZXIgd29ya3NwYWNlIGhvc3QgYW5kIHNoYXJlZCBhY3Jvc3MgdXNlcnM7IGNvbmN1cnJlbnRcbiAgICogY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZSBpbi1mbGlnaHQgZmV0Y2guXG4gICAqL1xuICBtb2RlbENhY2hlVHRsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMZXQgY2xpZW50cyBwaWNrIHRoZSBiYWNraW5nIGVuZHBvaW50IHBlciByZXF1ZXN0LiBEZWZhdWx0cyB0byBgdHJ1ZWA7XG4gICAqIG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogUmVhZHMgdGhlIGBYLU1hc3RyYS1Nb2RlbGAgaGVhZGVyLCB0aGUgYD9tb2RlbD1gIHF1ZXJ5IHN0cmluZywgb3IgYVxuICAgKiBgbW9kZWxgIGJvZHkgZmllbGQsIGluIHRoYXQgb3JkZXIuIERpc2FibGUgd2hlbiBydW5uaW5nIG11bHRpLXRlbmFudFxuICAgKiB3aGVyZSB1bnRydXN0ZWQgY2xpZW50cyBzaG91bGRuJ3QgY2hvb3NlIHRoZSBlbmRwb2ludC5cbiAgICovXG4gIG1vZGVsT3ZlcnJpZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCBsaXN0IG9mIGVuZHBvaW50IG5hbWVzIHRyaWVkICpmaXJzdCogd2hlbiBub1xuICAgKiBhZ2VudCAvIHBsdWdpbiAvIGVudiAvIHJlcXVlc3Qtb3ZlcnJpZGUgbW9kZWwgaWQgaXMgc2V0LCBhaGVhZCBvZlxuICAgKiB0aGUgZHluYW1pYyBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZS4gVGhlIHJlc29sdmVyIHBpY2tzIHRoZVxuICAgKiBmaXJzdCBpZCB0aGF0IGlzIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIHdvcmtzcGFjZSdzXG4gICAqIGAvc2VydmluZy1lbmRwb2ludHNgIGxpc3RpbmcuXG4gICAqXG4gICAqIFdoZW4gdW5zZXQsIHJlc29sdXRpb24gaXMgZHJpdmVuIGJ5IHRoZSBsaXZlIEZvdW5kYXRpb24gTW9kZWwgQVBJXG4gICAqIGBxdWFsaXR5YCAvIGBzcGVlZGAgLyBgY29zdGAgc2NvcmVzOiBlbmRwb2ludHMgYXJlIGNsYXNzaWZpZWQgaW50b1xuICAgKiBjaGF0IGNsYXNzZXMgKGBjbGFzc2lmeUVuZHBvaW50c2ApIGFuZCB3YWxrZWQgYmVzdC1maXJzdFxuICAgKiAoQ2hhdFRoaW5raW5nIC0+IENoYXRCYWxhbmNlZCAtPiBDaGF0RmFzdCkuIFRoZSBhdXRvbWF0aWMgZGVmYXVsdCBpc1xuICAgKiBsaXZlLW9ubHkgYW5kIGZhaWxzIHdoZW4gbm8gbWF0Y2hpbmcgZW5kcG9pbnQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICogU2V0IHRoaXMgdG8gcGluIGEgcmVndWxhdGVkIHdvcmtzcGFjZSB0byBhbiBhcHByb3ZlZCBzdWJzZXQsIG9yIHRvIHB1dFxuICAgKiBjdXN0b20gZW5kcG9pbnRzIGluIGZyb250IG9mIHRoZSBhdXRvLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLlxuICAgKi9cbiAgZGVmYXVsdE1vZGVsRmFsbGJhY2tzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCAoZGVmYXVsdCksIGV2ZXJ5IGFnZW50IGdldHMgYSBidWlsdC1pbiBpbnB1dFxuICAgKiBwcm9jZXNzb3IgdGhhdCBzdHJpcHMgYGNoYXJ0SWRgIGZpZWxkcyBmcm9tIHByaW9yIGFzc2lzdGFudFxuICAgKiB0b29sLWludm9jYXRpb24gcmVzdWx0cyBiZWZvcmUgdGhleSByZWFjaCB0aGUgbW9kZWwuIFRoaXNcbiAgICogcHJldmVudHMgdGhlIG1vZGVsIGZyb20gcmV1c2luZyB0dXJuLXNjb3BlZCBjaGFydElkcyBpdCBzZWVzXG4gICAqIGluIG1lbW9yeSByZWNhbGwgKHdoaWNoIHdvdWxkIGxlYXZlIGBbY2hhcnQ6PGlkPl1gIG1hcmtlcnNcbiAgICogcG9pbnRpbmcgYXQgd3JpdGVyIGV2ZW50cyB0aGF0IG5vIGxvbmdlciBleGlzdCkuXG4gICAqXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIG9wdCBvdXQgLSB1c2VmdWwgaWYgYSBub24tZGVmYXVsdCBhZ2VudFxuICAgKiBuZWVkcyBmdWxsIHZpc2liaWxpdHkgaW50byBwcmlvciBjaGFydElkcyAoZS5nLiBhbiBhdWRpdFxuICAgKiBhZ2VudCByZWFzb25pbmcgYWJvdXQgY2hhcnQgbGluZWFnZSkuXG4gICAqL1xuICBzdHJpcFN0YWxlQ2hhcnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBgaW5zdHJ1Y3Rpb25zYCB0byBjdXJiXG4gICAqIGNvbW1vbiBMTE0taXNtcyAoZW0gZGFzaGVzLCBlbW9qaXMsIHN5Y29waGFudGljIG9wZW5lcnMsIHRocm93YXdheVxuICAgKiBjbG9zZXJzLCBleGNlc3NpdmUgaGVkZ2luZykuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiB1c2UgdGhlIGJ1aWx0LWluXG4gICAqICAgYERFRkFVTFRfU1RZTEVfSU5TVFJVQ1RJT05TYCBmcm9tIGBhZ2VudHMudHNgLlxuICAgKiAtIGBzdHJpbmdgOiByZXBsYWNlIHRoZSBkZWZhdWx0IHdpdGggdGhlIHN1cHBsaWVkIGJsb2NrLlxuICAgKiAtIGBmYWxzZWA6IGRpc2FibGUgZW50aXJlbHkgKGFnZW50cyBzZWUgb25seSB0aGVpciBiZXNwb2tlXG4gICAqICAgYGluc3RydWN0aW9uc2ApLlxuICAgKlxuICAgKiBBcHBlbmRlZCAobm90IHByZXBlbmRlZCkgc28gdGhlIGFnZW50J3Mgcm9sZSBhbmQgcnVsZXMgY29tZSBmaXJzdFxuICAgKiBhbmQgdGhlIHN0eWxlIGJsb2NrIGxlYW5zIG9uIHRoZSBtb2RlbCdzIHJlY2VuY3kgYmlhcy5cbiAgICovXG4gIHN0eWxlSW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBHZW5pZSBzcGFjZXMgdGhpcyBwbHVnaW4ncyBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLiBPbmUgTWFzdHJhXG4gICAqIHRvb2wgaXMgcmVnaXN0ZXJlZCBwZXIgYWxpYXMgKGBnZW5pZWAgZm9yIHRoZSB3ZWxsLWtub3duXG4gICAqIGBkZWZhdWx0YCBhbGlhcywgYGdlbmllXzxhbGlhcz5gIG90aGVyd2lzZSkuIEVhY2ggdG9vbCBzcGluc1xuICAgKiB1cCBhIHBlci1xdWVzdGlvbiBHZW5pZSBzdWItYWdlbnQgdGhhdCBydW5zIERhdGFicmlja3NcbiAgICogXCJhZ2VudCBtb2RlXCIgYWdhaW5zdCB0aGUgc3BhY2UsIGJyb2FkY2FzdHMgd2lyZSBldmVudHMgdG8gdGhlXG4gICAqIFVJLCBmZXRjaGVzIHN0YXRlbWVudCByb3dzIGZvciBub24tZW1wdHkgcmVzdWx0cywgYW5kIHJldHVybnNcbiAgICogYSBgKHN0cmluZyB8IGRhdGEgfCBjaGFydClbXWAgc3VtbWFyeSB0aGUgaG9zdCBVSSByZW5kZXJzXG4gICAqIGlubGluZS5cbiAgICpcbiAgICogRW50cmllcyBhY2NlcHQgZWl0aGVyIGEgZnVsbCB7QGxpbmsgR2VuaWVTcGFjZUNvbmZpZ30gb2JqZWN0XG4gICAqIG9yIGEgYmFyZSBgc3BhY2VfaWRgIHN0cmluZyB3aGVuIG5vIGV4dHJhcyBhcmUgbmVlZGVkOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGdlbmllU3BhY2VzOiB7XG4gICAqICAgICBkZWZhdWx0OiBcIjAxZWYwZDNjMGUxYjFmNGE4ZDJjM2U0ZjVhNmI3YzhkXCIsXG4gICAqICAgICBmb3JlY2FzdHM6IHsgc3BhY2VJZDogXCIwMWVmLi4uXCIsIGhpbnQ6IFwid2Vla2x5IGRlbWFuZCBmb3JlY2FzdHNcIiB9LFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogUmVhY2ggdGhlIHNwYWNlcyBmcm9tIGFuIGFnZW50J3MgYHRvb2xzKHBsdWdpbnMpYCBjYWxsYmFjayB2aWFcbiAgICogYHBsdWdpbnMuZ2VuaWU/LnRvb2xraXQoKWA7IHRoZSByZXN1bHRpbmcgdG9vbHMgYWNjZXB0XG4gICAqIGB7IGNvbnRlbnQsIGNvbnZlcnNhdGlvbklkPyB9YCBhbmQgcmV0dXJuIGEgaHlkcmF0ZWQgc3VtbWFyeS5cbiAgICpcbiAgICogKipGYWxsYmFjayBkaXNjb3ZlcnkqKiAoaGlnaGVzdCBwcmVjZWRlbmNlIGZpcnN0KTogaWYgdGhpc1xuICAgKiBmaWVsZCBpcyBvbWl0dGVkLCB0aGUgR2VuaWUgYWdlbnQgYWxzbyBwaWNrcyB1cCBzcGFjZXMgZnJvbVxuICAgKiAoMSkgdGhlIEFwcEtpdCBgZ2VuaWUoeyBzcGFjZXM6IHsgLi4uIH0gfSlgIHBsdWdpbiBpbnN0YW5jZVxuICAgKiB3aGVuIHJlZ2lzdGVyZWQsIGFuZCAoMikgdGhlIGBEQVRBQlJJQ0tTX0dFTklFX1NQQUNFX0lEYFxuICAgKiBlbnYgdmFyIChyZWdpc3RlcmVkIHVuZGVyIHRoZSBgZGVmYXVsdGAgYWxpYXMpLiBUaGlzIGtlZXBzXG4gICAqIGV4aXN0aW5nIEFwcEtpdCBkZXBsb3ltZW50cyB3b3JraW5nIHdpdGhvdXQgcmVzdGF0aW5nIHRoZVxuICAgKiBzcGFjZXMgY29uZmlnIGluIHR3byBwbGFjZXMuXG4gICAqL1xuICBnZW5pZVNwYWNlcz86IEdlbmllU3BhY2VzQ29uZmlnO1xuICAvKipcbiAgICogVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkgZm9yIGBhc2tfZ2VuaWVgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqIFNldCBgZmFsc2VgIHRvIGZvcmNlIHRoZSBsZWdhY3kgQ29udmVyc2F0aW9uIEFQSSBwb2xsaW5nIGRyaXZlci4gQVxuICAgKiBwcmUtc3RyZWFtIGZlYXR1cmUtZGlzYWJsZWQgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2UgZmFsbHMgYmFja1xuICAgKiBhdXRvbWF0aWNhbGx5LiBEaXJlY3QgR2VuaWUgY2hhdCBhbHdheXMgcmVxdWlyZXMgQWdlbnQgTW9kZSBhbmQgaWdub3Jlc1xuICAgKiB0aGlzIG9wdGlvbi5cbiAgICovXG4gIGdlbmllQWdlbnRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRUTCBmb3IgdGhlIGluLW1lbW9yeSBHZW5pZSBzcGFjZSBtZXRhZGF0YSBjYWNoZSwgaW5cbiAgICogbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuIFRoZSBHZW5pZSBhZ2VudCBjYWxsc1xuICAgKiBgY2xpZW50LmdlbmllLmdldFNwYWNlKC4uLilgIG9uIGV2ZXJ5IGNvbGQtc3RhcnQgdG8gZ2V0IHRoZVxuICAgKiB0aXRsZSAvIGRlc2NyaXB0aW9uIC8gd2FyZWhvdXNlIGlkOyBjYWNoZWQgcmVzcG9uc2VzIHNraXAgdGhlXG4gICAqIHJvdW5kLXRyaXAgYW5kIGNvbmN1cnJlbnQgY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZVxuICAgKiBpbi1mbGlnaHQgZmV0Y2guIERyb3AgdG8gYSBzbWFsbGVyIHZhbHVlIHdoZW4gYW5hbHlzdHMgYXJlXG4gICAqIGFjdGl2ZWx5IGVkaXRpbmcgc3BhY2UgbWV0YWRhdGEgYW5kIHlvdSB3YW50IGNoYW5nZXMgdmlzaWJsZVxuICAgKiB3aXRoaW4gc2Vjb25kczsgcmFpc2UgaXQgdG8gYW1vcnRpc2UgdGhlIHJvdW5kLXRyaXAgd2hlblxuICAgKiBzcGFjZSBtZXRhZGF0YSBpcyBlZmZlY3RpdmVseSBmcm96ZW4uXG4gICAqXG4gICAqIEJhY2tlZCBieSBBcHBLaXQncyBgQ2FjaGVNYW5hZ2VyYCwgc28gdGhlIGNhY2hlIHBhcnRpY2lwYXRlc1xuICAgKiBpbiB0ZWxlbWV0cnkgc3BhbnMgKGBjYWNoZS5nZXRPckV4ZWN1dGVgKSBhbmQgYmVuZWZpdHMgZnJvbVxuICAgKiBMYWtlYmFzZSBwZXJzaXN0ZW5jZSB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyB3aXJlZCB1cC5cbiAgICovXG4gIGdlbmllU3BhY2VDYWNoZVR0bE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuLiBPbmUgc3RlcCA9IG9uZVxuICAgKiByb3VuZC10cmlwIHRvIHRoZSB1bmRlcmx5aW5nIG1vZGVsIChhIHRvb2wgY2FsbCBjb25zdW1lcyBhXG4gICAqIHN0ZXAsIHRoZSBmaW5hbC10ZXh0IHJlcGx5IGNvbnN1bWVzIG9uZSB0b28pLiBBcHBsaWVzIHRvXG4gICAqIGV2ZXJ5IGFnZW50IHJlZ2lzdGVyZWQgdGhyb3VnaCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLmFnZW50c31cbiAgICogLSBwZXItYWdlbnQgb3ZlcnJpZGVzIGFyZW4ndCBzdXJmYWNlZCB5ZXQgYmVjYXVzZSB0aGUgc2FtZVxuICAgKiBjZWlsaW5nIGhhcyBiZWVuIHN1ZmZpY2llbnQgYWNyb3NzIGV2ZXJ5IHdvcmtsb2FkIHdlJ3ZlIHJ1bi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfQUdFTlRfTUFYX1NURVBTfSAoMjUpLCBzaXplZCB0byBmaXRcbiAgICogYSBkZWNvbXBvc2VkIEdlbmllIHR1cm4gKGdyb3VuZGluZyArIHNldmVyYWwgYGFza19nZW5pZWAgY2FsbHNcbiAgICogKyBgcHJlcGFyZV9jaGFydGAgcGVyIGRhdGFzZXQgKyB0aGUgZmluYWwtdGV4dCByZXBseSkgd2l0aFxuICAgKiBoZWFkcm9vbSBmb3IgdGhlIG1vZGVsIHRvIGNoYWluIGEgY291cGxlIG9mIGZvbGxvdy11cHMgYmVmb3JlXG4gICAqIGFuc3dlcmluZy4gTWFzdHJhJ3Mgb3duIGBhZ2VudC5nZW5lcmF0ZWAgZGVmYXVsdCBvZiA1IHdvdWxkXG4gICAqIGN1dCBtdWx0aS1zdGVwIG9yY2hlc3RyYXRpb24gb2ZmIGFmdGVyIDItMyB0b29sIGNhbGxzLCBzb1xuICAgKiBleHBsaWNpdGx5IHJhaXNpbmcgdGhlIGNlaWxpbmcgaGVyZSBpcyB3aGF0IGxldHMgdGhlXG4gICAqIGFnZW50LW1vZGUgbG9vcCBwbGF5IG91dC5cbiAgICpcbiAgICogTG93ZXIgd2hlbiBhbiB1bnVzdWFsbHkgc2xvdyBvciBleHBlbnNpdmUgbW9kZWwgbWFrZXMgbG9uZ1xuICAgKiB0dXJucyB1bmFmZm9yZGFibGU7IHJhaXNlIGZvciBleHBsb3JhdG9yeSB3b3JrbG9hZHMgdGhhdCBuZWVkXG4gICAqIHRvIGRyaWxsIGRlZXAgaW50byBhIGRhdGFzZXQgd2l0aGluIGEgc2luZ2xlIHR1cm4uXG4gICAqL1xuICBhZ2VudE1heFN0ZXBzPzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgcG9zdC10dXJuIGZvbGxvdy11cCBxdWVzdGlvbnMuIGB0cnVlYCBzZWxlY3RzIHNvdXJjZXNcbiAgICogYXV0b21hdGljYWxseTsgYFwiZ2VuZXJhdGVkXCJgIG9yIGBcImdlbmllXCJgIHBpbnMgb25lIHNvdXJjZTsgYGZhbHNlYCBvclxuICAgKiBvbWlzc2lvbiBkaXNhYmxlcyBmb2xsb3ctdXBzLlxuICAgKi9cbiAgZm9sbG93VXBTdWdnZXN0aW9ucz86IGZhbHNlIHwgdHJ1ZSB8IFwiZ2VuZXJhdGVkXCIgfCBcImdlbmllXCIgfCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnO1xuICAvKipcbiAgICogV2lyZSBNYXN0cmEgc3BhbnMgaW50byBBcHBLaXQncyBnbG9iYWwgT1RlbCBwaXBlbGluZSB2aWFcbiAgICogYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0LCBhdXRvKTogb24gb25seSB3aGVuXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgb3JcbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVGAgaXMgc2V0LiBXaGVuIHVuc2V0LCB0aGVcbiAgICogICBicmlkZ2UgaXMgc2tpcHBlZCBzbyBNYXN0cmEgZG9lcyBub3QgbG9nXG4gICAqICAgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIG9uIHRoZSBub29wIHRyYWNlci5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uIGV2ZW4gd2l0aG91dCBhbiBPVExQIGVuZHBvaW50LlxuICAgKiAtIGBmYWxzZWA6IGZvcmNlIG9mZi5cbiAgICovXG4gIG9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRmVlZGJhY2sgZGVzdGluYXRpb24uIGBhdXRvYCBwcmVmZXJzIEdlbmllIHdoZW4gR2VuaWUgQWdlbnQgTW9kZSBpc1xuICAgKiBhdmFpbGFibGUsIG90aGVyd2lzZSBNTGZsb3cgd2hlbiB0cmFjaW5nIGlzIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSBub25lLlxuICAgKiBFeHBsaWNpdCBgZ2VuaWVgIG9yIGBtbGZsb3dgIGZhaWxzIHN0YXJ0dXAgd2hlbiB1bmF2YWlsYWJsZS5cbiAgICovXG4gIGZlZWRiYWNrTW9kZT86IEZlZWRiYWNrTW9kZU9wdGlvbjtcbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgcGx1Z2luJ3MgYWdlbnRzIChhbmQgb3B0aW9uYWxseSB0b29scykgYXMgYSBNYXN0cmEgTUNQXG4gICAqIHNlcnZlciBzbyBleHRlcm5hbCBNQ1AgY2xpZW50cyAtIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIHRoZSBNYXN0cmFcbiAgICogcGxheWdyb3VuZCwgb3IgYW5vdGhlciBhZ2VudCAtIGNhbiBjYWxsIHRoZW0gb3ZlciB0aGUgc3RhbmRhcmQgTUNQXG4gICAqIHRyYW5zcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdCAoYWdlbnRzIG9ubHkpOiB3cmFwcGluZyB0aGVcbiAgICogYWxyZWFkeS1yZWdpc3RlcmVkIGFnZW50cyBjb3N0cyBub3RoaW5nIGV4dHJhLCBzbyB0aGUgZW5kcG9pbnQgaXMgb25cbiAgICogb3V0IG9mIHRoZSBib3g7IG9ubHkgdGhlIGFtYmllbnQgdG9vbHMgKHdoaWNoIGFzc3VtZSBhbiBpbi1wcm9jZXNzXG4gICAqIGNoYXQgdHVybikgc3RheSBvZmYgdW5sZXNzIGV4cGxpY2l0bHkgb3B0ZWQgaW4uXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIC8gYHRydWVgOiBleHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhc1xuICAgKiAgIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbCB1bmRlciBhIHNlcnZlciB3aG9zZSBpZCBpcyB0aGUgcGx1Z2luXG4gICAqICAgbmFtZS5cbiAgICogLSBgZmFsc2VgOiBubyBNQ1AgZW5kcG9pbnRzLlxuICAgKiAtIHtAbGluayBNYXN0cmFNY3BDb25maWd9OiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBzZXJ2ZXIgaWQsXG4gICAqICAgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoaWNoIGFnZW50cyAvIHRvb2xzIGFyZSBleHBvc2VkLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBzdG9jayBNYXN0cmEgTUNQIHJvdXRlcyBtb3VudCB1bmRlciB0aGUgcGx1Z2luJ3NcbiAgICogYmFzZSBwYXRoIChubyBiZXNwb2tlIHJvdXRlIGlzIGFkZGVkIC0gdGhlIHNlcnZlciBpcyBoYW5kZWQgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHZpYSBgbWNwU2VydmVyc2AsIHdoaWNoIGBAbWFzdHJhL2V4cHJlc3NgIHNlcnZlcyk6XG4gICAqXG4gICAqIC0gU3RyZWFtYWJsZSBIVFRQOiBgUE9TVCAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L21jcGBcbiAgICogLSBTU0UgKGxlZ2FjeSk6ICAgIGBHRVQgIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vc3NlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tZXNzYWdlc2BcbiAgICpcbiAgICogUmVxdWVzdHMgcnVuIHVuZGVyIHRoZSBzYW1lIEFwcEtpdCBPQk8gc2NvcGUgYXMgdGhlIGNoYXQgcm91dGVzLCBzb1xuICAgKiBhbiBhZ2VudCBpbnZva2VkIG92ZXIgTUNQIHJlc29sdmVzIGl0cyBtb2RlbCBhbmQgdG9vbHMgYXMgdGhlXG4gICAqIGNhbGxpbmcgdXNlci5cbiAgICovXG4gIG1jcD86IGJvb2xlYW4gfCBNYXN0cmFNY3BDb25maWc7XG4gIC8qKlxuICAgKiBIb3cgbXVjaCBvZiB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2AgbWFuYWdlbWVudCBBUEkgaXMgcmVhY2hhYmxlXG4gICAqIHRocm91Z2ggdGhlIHBsdWdpbiBtb3VudC4gYEBtYXN0cmEvZXhwcmVzc2AgcmVnaXN0ZXJzIGl0cyBmdWxsIHJvdXRlXG4gICAqIHRhYmxlIChhZ2VudCBpbmZlcmVuY2UgcGx1cyBhZG1pbiAvIG11dGF0aW5nIHJvdXRlczogZGlyZWN0IHRvb2xcbiAgICogZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5IHJlYWQvd3JpdGUsIHRlbGVtZXRyeSwgbG9ncyxcbiAgICogc2NvcmVzKS4gQXBwS2l0IGFscmVhZHkgYXV0aGVudGljYXRlcyBldmVyeSByZXF1ZXN0IGFzIHRoZSBPQk8gdXNlcixcbiAgICogYnV0IG5vdGhpbmcgdGhlcmUgcmVzdHJpY3RzICp3aGljaCogb2YgdGhvc2Ugb3BlcmF0aW9ucyB0aGUgYnJvd3NlclxuICAgKiBjbGllbnQgbWF5IGludm9rZS5cbiAgICpcbiAgICogLSBgXCJzY29wZWRcImAgKGRlZmF1bHQpOiBvbmx5IHRoZSByb3V0ZXMgdGhlIGNoYXQgY2xpZW50IGxlZ2l0aW1hdGVseVxuICAgKiAgIG5lZWRzIGFyZSBkaXNwYXRjaGVkIHRvIE1hc3RyYSAtIGFnZW50IGluZmVyZW5jZVxuICAgKiAgIChgc3RyZWFtYCAvIGBnZW5lcmF0ZWAgLyBgbmV0d29ya2ApLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXNcbiAgICogICBwbHVnaW4ncyBvd24gT0JPLSBhbmQgcmVzb3VyY2Utc2NvcGVkIGAvcm91dGUvKmAgcm91dGVzIChoaXN0b3J5IC9cbiAgICogICB0aHJlYWRzKSwgYW5kLCB3aGVuIHtAbGluayBtY3B9IGlzIGVuYWJsZWQsIHRoZSBNQ1AgdHJhbnNwb3J0LlxuICAgKiAgIEV2ZXJ5dGhpbmcgZWxzZSAodG9vbCBleGVjdXRpb24sIHdvcmtmbG93IGNvbnRyb2wsIHJhdyBtZW1vcnksXG4gICAqICAgdGVsZW1ldHJ5LCBsb2dzLCBzY29yZXMsIGFuZCBvdGhlciBtdXRhdGlvbnMpIGlzIHJlamVjdGVkIHdpdGhcbiAgICogICBgNDAzYCBiZWZvcmUgaXQgcmVhY2hlcyBNYXN0cmEuXG4gICAqIC0gYFwiZnVsbFwiYDogZGlzcGF0Y2ggdGhlIGVudGlyZSBzdG9jayBNYXN0cmEgQVBJLiBVc2Ugb25seSBmb3IgYVxuICAgKiAgIHRydXN0ZWQgZmlyc3QtcGFydHkgY29uc29sZSB0aGF0IGdlbnVpbmVseSBuZWVkcyB0aGUgbWFuYWdlbWVudFxuICAgKiAgIHN1cmZhY2UuXG4gICAqL1xuICBhcGlBY2Nlc3M/OiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKlxuICAgKiBXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IHRoZSBhZ2VudHMnIHdvcmtzcGFjZSBjYWxscyBydW4gYXM6IHRoZVxuICAgKiBzZXJ2aW5nLWVuZHBvaW50IGNhdGFsb2d1ZSBiZWhpbmQgdGhlIG1vZGVsIHBpY2tlciwgR2VuaWUgc3VnZ2VzdGlvbnMsXG4gICAqIGBhc2tfZ2VuaWVgLCBhbmQgdGhlIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2ggYmVoaW5kIGEgYFtkYXRhOjxpZD5dYFxuICAgKiBlbWJlZC4gRmFsbHMgYmFjayB0byBgTUFTVFJBX0dFTklFX0lERU5USVRZYCwgdGhlbiBgXCJ1c2VyXCJgLlxuICAgKlxuICAgKiBPbi1iZWhhbGYtb2YgKE9CTykgYXV0aCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIGEgbWVtYmVyIG9mIHRoZVxuICAgKiBXT1JLU1BBQ0UsIG5vdCBqdXN0IG9mIHRoZSBEYXRhYnJpY2tzIGFjY291bnQuIEFuIGFwcCBzaGFyZWQgd2l0aCBhblxuICAgKiBhY2NvdW50LWxldmVsIGdyb3VwIGNhbiBiZSBvcGVuZWQgYnkgc29tZW9uZSB3aG9zZSB0b2tlbiBpcyB2YWxpZCBidXQgd2hvc2VcbiAgICogZXZlcnkgd29ya3NwYWNlIGNhbGwgZmFpbHMgd2l0aCBgVW5hdXRob3JpemVkIGFjY2VzcyB0byBPcmc6IDxpZD5gIC0gYW5kXG4gICAqIGdyYW50aW5nIHdvcmtzcGFjZSBtZW1iZXJzaGlwIGlzIG5vdCBhbHdheXMgcG9zc2libGUsIHNpbmNlIGEgd29ya3NwYWNlXG4gICAqIGNhcHMgbWVtYmVyc2hpcCB3ZWxsIGJlbG93IHRoZSBzaXplIG9mIGEgbGFyZ2UgYWNjb3VudCdzIHVzZXIgZ3JvdXAuIFRoZVxuICAgKiBhcHAncyBzZXJ2aWNlIHByaW5jaXBhbCBhbHJlYWR5IGhvbGRzIHRoZSBncmFudHMgdGhlIGFwcCB3YXMgZGVwbG95ZWQgd2l0aC5cbiAgICpcbiAgICogLSBgXCJ1c2VyXCJgIChkZWZhdWx0KTogYWx3YXlzIE9CTy4gUGVyLXVzZXIgYXR0cmlidXRpb24sIGFuZCBHZW5pZSAvIFVuaXR5XG4gICAqICAgQ2F0YWxvZyByb3cgZmlsdGVycyBhcHBseSBwZXIgdXNlci4gQ29ycmVjdCB3aGVuIGV2ZXJ5IGNhbGxlciBpcyBhXG4gICAqICAgd29ya3NwYWNlIG1lbWJlci5cbiAgICogLSBgXCJzZXJ2aWNlLXByaW5jaXBhbFwiYDogYWx3YXlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwuIE5lZWRzIG5vIE9CT1xuICAgKiAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIGF0IHRoZSBjb3N0IG9mXG4gICAqICAgcGVyLXVzZXIgYXR0cmlidXRpb24gaW4gR2VuaWUgLyBVbml0eSBDYXRhbG9nLlxuICAgKiAtIGBcImF1dG9cImA6IE9CTyB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgYW4gT0JPIHRva2VuLCB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAgICogICB3aGVuIGl0IGRvZXMgbm90LiBGb3IgYW4gYXBwIHNlcnZpbmcgQk9USCB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBhbmQgYVxuICAgKiAgIGRvb3IgdGhhdCBoYXMgbm8gdG9rZW4gdG8gZm9yd2FyZCAtIGEgYEBkYngtdG9vbHMvdHVubmVsYCBnYXRlLCBhXG4gICAqICAgc2VwYXJhdGVseSBhdXRoZW50aWNhdGVkIHdlYmhvb2sgb3IgYm90IGNoYW5uZWwgLSB3aGVyZSBBcHBLaXQncyBgYXNVc2VyYFxuICAgKiAgIHdvdWxkIG90aGVyd2lzZSB0aHJvdyBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZVxuICAgKiAgIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlLXByaW5jaXBhbCBwYXRoIGNoYW5nZXMgb25seSB0aGUgRGF0YWJyaWNrcyBDUkVERU5USUFMLiBNZW1vcnlcbiAgICogdGhyZWFkcywgdGhlIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhIHN0aWxsIGtleSBvZmYgdGhlXG4gICAqIGZvcndhcmRlZCB1c2VyLCBzbyBjYWxsZXJzIHNoYXJpbmcgdGhlIHNlcnZpY2UgcHJpbmNpcGFsJ3MgZGF0YSBhY2Nlc3Mga2VlcFxuICAgKiBzZXBhcmF0ZSBjb252ZXJzYXRpb25zIGFuZCBjYW5ub3QgcmVhZCBlYWNoIG90aGVyJ3MgdGhyZWFkcyBvciBjaGFydHMuXG4gICAqIERpcmVjdCBHZW5pZSBjaGF0IGRvZXMgbm90IHVzZSB0aGlzIG9wdGlvbjogaXRzIGNvbnZlcnNhdGlvbnMgYW5kIG1lc3NhZ2VzXG4gICAqIGFsd2F5cyBydW4gdW5kZXIgQXBwS2l0IE9CTyBzbyBHZW5pZSByZW1haW5zIHRoZSBwZXItdXNlciBzdGF0ZSBvd25lci5cbiAgICpcbiAgICogQGV4YW1wbGUgQW4gYXBwIGFueSBhY2NvdW50IHVzZXIgY2FuIG9wZW5cbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHsgZ2VuaWVJZGVudGl0eTogXCJzZXJ2aWNlLXByaW5jaXBhbFwiLCBnZW5pZVNwYWNlczogeyBkZWZhdWx0OiBzcGFjZUlkIH0gfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBPbmUgYXBwIGJlaGluZCBib3RoIHRoZSBmcm9udCBkb29yIGFuZCBhIHB1YmxpYyB0dW5uZWxcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHsgZ2VuaWVJZGVudGl0eTogXCJhdXRvXCIsIGdlbmllU3BhY2VzOiB7IGRlZmF1bHQ6IHNwYWNlSWQgfSB9KTtcbiAgICogYGBgXG4gICAqL1xuICBnZW5pZUlkZW50aXR5PzogTWFzdHJhSWRlbnRpdHlNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGNoYXJ0cyBwcm9kdWNlZCBieSB0aGUgYnVpbHQtaW5cbiAgICogYHJlbmRlcl9kYXRhYCAvIGBwcmVwYXJlX2NoYXJ0YCB0b29scy4gV2hlbiBzZXQsIHRoZSBjaGFydCBwbGFubmVyJ3NcbiAgICogRWNoYXJ0cyBvdXRwdXQgaXMgdGhlbWVkIHdpdGggdGhlIGJyYW5kJ3MgcGFsZXR0ZSAoc2VyaWVzIGNvbG9ycyBkZXJpdmVkXG4gICAqIGZyb20gYGNvbG9ycy5wcmltYXJ5YCAvIGBjb2xvcnMuYWNjZW50YCkgYW5kIHNhbnMgZm9udFxuICAgKiAoYHR5cG9ncmFwaHkuc2Fuc2ApIGluc3RlYWQgb2YgRWNoYXJ0cycgZGVmYXVsdHMuIE9taXQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIEVjaGFydHMgbG9vay5cbiAgICpcbiAgICogUGFzcyB0aGUgcG9ydGFibGUge0BsaW5rIEJyYW5kQ29udGV4dH0gc2hhcmVkIGFjcm9zcyB0aGUgVUkgYW5kXG4gICAqIGxpYnJhcmllcyAoZS5nLiBgYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dGAgZnJvbSBgQGRieC10b29scy9zaGFyZWQtY29yZWAsXG4gICAqIG9yIGEgY3VzdG9tZXIgYnJhbmQpIC0gdGhlIHNhbWUgb2JqZWN0IHRoZSBlbWFpbCBhZGQtb24gYW5kIHRoZSBVSVxuICAgKiBgQnJhbmRQcm92aWRlcmAgY29uc3VtZSwgc28gYSBob3N0IHRoZW1lcyBjaGFydHMsIGVtYWlsLCBhbmQgVUkgZnJvbSBvbmVcbiAgICogc291cmNlLlxuICAgKi9cbiAgYnJhbmQ/OiBCcmFuZENvbnRleHQ7XG4gIC8qKlxuICAgKiBSZW1vdGUgQWdlbnQtU2tpbGwgc291cmNlcyBtYXRlcmlhbGl6ZWQgb25jZSBhdCBhcHAgc3RhcnR1cC4gQSBzaW5nbGVcbiAgICogc291cmNlLCBhIGxpc3QsIG9yIGEgYHsgc291cmNlcywgZmFpbE9uRXJyb3I/LCAuLi4gfWAgYmFnLlxuICAgKlxuICAgKiBFYWNoIHNvdXJjZSBpcyBhIEdpdEh1YiBgb3duZXIvcmVwb2AsIGEgZ2l0IC8gR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3RcbiAgICogYFNLSUxMLm1kYCAvIGFyY2hpdmUgZG93bmxvYWQgVVJMLiBSZXNvbHV0aW9uIHByZWZlcnMgdGhlIE9QVElPTkFMIGBza2lsbHNgXG4gICAqIG5wbSBDTEkgKGEgcGVlciBkZXApIHdoaWNoIGlzIGNvcGllZCBpbnRvIGEgdGVtcCBkaXIgYW5kIHRoZW4gcGVyc2lzdGVkO1xuICAgKiB3aXRob3V0IGl0LCBhIFVSTCBzb3VyY2UgaXMgZmV0Y2hlZCBkaXJlY3RseS4gQSBzb3VyY2UgdGhhdCByZXNvbHZlc1xuICAgKiB0aHJvdWdoIG5laXRoZXIgZmFpbHMgc3RhcnR1cCB1bmxlc3MgYGZhaWxPbkVycm9yOiBmYWxzZWAuXG4gICAqXG4gICAqIEFJIFRvb2xzIGlzIGNhY2hlZCBkYWlseSB3aXRoIGBAZGJ4LXRvb2xzL2NhY2hlYCBhbmQgc2VydmVkIHRvIGV2ZXJ5XG4gICAqIGF1dG8tY3JlYXRlZCB3b3Jrc3BhY2UgZnJvbSB0aGUgc2hhcmVkIGAvLmRhdGFicmlja3Mvc2tpbGxzYCBtZW1vcnkgbW91bnQuXG4gICAqIE90aGVyIHNvdXJjZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIERhdGFicmlja3MgdXNlcidzIEFzc2lzdGFudCBza2lsbHMgZm9sZGVyXG4gICAqIHdoZW4gd3JpdGFibGUsIHdpdGggYSByZWFkLW9ubHkgbG9jYWwtbWVtb3J5IGZhbGxiYWNrLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyByZW1vdGVTa2lsbHM6IFwidmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIgfSk7XG4gICAqIG1hc3RyYSh7XG4gICAqICAgcmVtb3RlU2tpbGxzOiB7XG4gICAqICAgICBzb3VyY2VzOiBbXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiwgXCJodHRwczovL2V4YW1wbGUuY29tL3NraWxsLm1kXCJdLFxuICAgKiAgICAgZmFpbE9uRXJyb3I6IGZhbHNlLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW90ZVNraWxscz86IFJlbW90ZVNraWxsc09wdGlvbjtcbiAgLyoqIFJlYWQtb25seSBsb2NhbCBza2lsbCB0cmVlcyBtb3VudGVkIGZvciBmaWxlcywgc2VhcmNoYWJsZSBieSBwYXRoLCBhbmQgcGFzc2VkIGFzIHN0YW5kYXJkIGFnZW50LWxldmVsIHNraWxscy4gKi9cbiAgbG9jYWxTa2lsbE1vdW50cz86IExvY2FsU2tpbGxNb3VudFtdO1xufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAsIG1pcnJvcmluZyB0aGVcbiAqIGRvY3VtZW50ZWQgZGVmYXVsdHMgYW5kIGVudmlyb25tZW50IGZhbGxiYWNrcyBvZiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfS5cbiAqXG4gKiBDb3ZlcnMgdGhlIEpTT04tZXhwcmVzc2libGUgb3B0aW9ucyBvbmx5LiBgYWdlbnRzYCwgYHRvb2xzYCwgYW5kIGFcbiAqIGBkZWZhdWx0TW9kZWxgIHBhc3NlZCBhcyBhIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50YCBhcmUgY29kZS1kZWZpbmVkXG4gKiAoZnVuY3Rpb25zIC8gY2xhc3MgaW5zdGFuY2VzKSwgc28gdGhleSBjYXJyeSBubyBzY2hlbWEgZW50cnk7IHRoZVxuICogYGRlZmF1bHRNb2RlbGAgcHJvcGVydHkgYmVsb3cgZGVzY3JpYmVzIGl0cyBzdHJpbmcgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9DT05GSUdfU0NIRU1BOiBDb25maWdTY2hlbWEgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBiYWNrZ3JvdW5kVHVybnM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUnVuIHR1cm5zIHRocm91Z2ggTWFzdHJhIGV2ZW50ZWQgZHVyYWJsZSBleGVjdXRpb24gc28gdGhleSBjb250aW51ZSBhZnRlciBicm93c2VyIGRpc2Nvbm5lY3RzIGFuZCByZW1haW4gcmVjb25uZWN0YWJsZSBieSBydW4gaWQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBwcm92aWRlcklkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdBSSBTREsgcHJvdmlkZXItb3B0aW9ucyBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIFwib3BlbmFpXCIuJyxcbiAgICB9LFxuICAgIHJlbW90ZVNraWxsczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYXJyYXlcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1JlbW90ZSBBZ2VudC1Ta2lsbCBzb3VyY2VzIHByb3Zpc2lvbmVkIGF0IHN0YXJ0dXAgYW5kIHBhc3NlZCB0aHJvdWdoIE1hc3RyYSBzdGFuZGFyZCBhZ2VudC1sZXZlbCBza2lsbCB0b29sczogXCJhaXRvb2xzXCIgZm9yIERhdGFicmlja3NcXCcgb3duIHNraWxsIHNldCwgYSBHaXRIdWIgb3duZXIvcmVwbywgYSBnaXQvR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3QgU0tJTEwubWQvYXJjaGl2ZSBVUkwuIFNvdXJjZXMgcmV0YWluIGEgcHJvY2Vzcy1tZW1vcnkgY29weSBldmVuIHdoZW4gcGVyc2lzdGVkIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIgQXNzaXN0YW50IHNraWxscyBmb2xkZXIuJyxcbiAgICB9LFxuICAgIHN0b3JhZ2U6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcyAvIG1lc3NhZ2VzLiBgdHJ1ZWAgY2FwdHVyZXMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luJ3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGEgc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIG1lbW9yeToge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgc2VtYW50aWMgcmVjYWxsLiBgdHJ1ZWAgY2FwdHVyZXMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luJ3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGEgc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIGNvZGVNb2RlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0V4cG9zZSBleGVjdXRhYmxlIHJlcXVlc3QgdG9vbHMgdGhyb3VnaCBuYXRpdmUgTWFzdHJhIENvZGUgTW9kZSBmb3IgVHlwZVNjcmlwdCBiYXRjaGluZywgYWdncmVnYXRpb24sIGFuZCBhcml0aG1ldGljLiBEZWZhdWx0cyB0byBmYWxzZS4gVXNlIFwiYXV0b1wiIHRvIHNlbGVjdCBhbiBpbnN0YWxsZWQgc3VwcG9ydGVkIG9wdGlvbmFsIHRyYW5zcG9ydCBvciBzdGF5IGRpc2FibGVkLCBcImlzb2xhdGVkLXZtXCIgdG8gcmVxdWlyZSB0aGUgbmF0aXZlIHRyYW5zcG9ydCwgXCJxdWlja2pzXCIgdG8gcmVxdWlyZSB0aGUgcG9ydGFibGUgdHJhbnNwb3J0LCBvciBhbiBvYmplY3Qgd2l0aCB0cmFuc3BvcnQgcGx1cyBpZCBhbmQgdGltZW91dC4gTmVpdGhlciB0cmFuc3BvcnQgcnVucyB0aHJvdWdoIHRoZSB3b3Jrc3BhY2UgY29tbWFuZCBzYW5kYm94LicsXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdDb21tYW5kIHNhbmRib3ggZm9yIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzLiBEZWZhdWx0cyB0byBNb250eS4gRmFsc2UgZGlzYWJsZXMgY29tbWFuZCBleGVjdXRpb247IHRydWUgb3IgXCJtb250eVwiIHNlbGVjdHMgTW9udHk7IGFuIGV4cGxpY2l0IHNhbmRib3ggb3IgcmVzb2x2ZXIgc3VwcGxpZXMgYW5vdGhlciB0cmFuc3BvcnQuJyxcbiAgICB9LFxuICAgIHdvcmtzcGFjZUZhbGxiYWNrVG9UbXA6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQWRkIHVzZXItc2NvcGVkIC90bXAgdG8gYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMgb25seSB3aGVuIG5vIGNvbmZpZ3VyZWQgRGF0YWJyaWNrcyBwYXRoIG1vdW50cyB3cml0YWJsZS4gRGVmYXVsdHMgdG8gZmFsc2UuXCIsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VTa2lsbHM6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJVc2UgTWFzdHJhJ3MgbmF0aXZlIG9uLWRlbWFuZCB3b3Jrc3BhY2Ugc2tpbGwgc2VhcmNoIGFuZCB3cml0YWJsZSBza2lsbCBzYXZlcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHdvcmtzcGFjZVRvb2xzOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgdG9vbCBjb25maWd1cmF0aW9uIGZvciBhdmFpbGFiaWxpdHksIGFwcHJvdmFscywgcmVhZC1iZWZvcmUtd3JpdGUsIG91dHB1dCBsaW1pdHMsIGFuZCBob29rcy5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRBZ2VudDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFnZW50IGlkIHVzZWQgd2hlbiB0aGUgY2xpZW50IG5hbWVzIG5vbmUuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCByZWdpc3RlcmVkIGFnZW50LCBlbHNlIHRoZSBidWlsdC1pbiBgZGVmYXVsdGAuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTZXJ2aW5nIGVuZHBvaW50IGFwcGxpZWQgdG8gZXZlcnkgYWdlbnQgdGhhdCBvbWl0cyBpdHMgb3duIG1vZGVsLiBGYWxscyBiYWNrIHRvIERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FLCB0aGVuIHRoZSBoaWdoZXN0LXJhbmtlZCBjdXJyZW50bHkgYXZhaWxhYmxlIGNhdGFsb2d1ZSBlbmRwb2ludC5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRNb2RlbEZhbGxiYWNrczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJpb3JpdHktb3JkZXJlZCBlbmRwb2ludCBuYW1lcyB0cmllZCBiZWZvcmUgdGhlIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlIHdoZW4gbm90aGluZyBlbHNlIHBpbnMgYSBtb2RlbC5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlNYXRjaDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eVRocmVzaG9sZDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZnV6enkgbWF0Y2hlciwgMCAoZXhhY3QpIHRvIDEgKGFueXRoaW5nKS4gRGVmYXVsdHMgdG8gMC40LlwiLFxuICAgIH0sXG4gICAgbW9kZWxDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVFRMIGluIG1zIGZvciB0aGUgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgcGVyIHdvcmtzcGFjZSBob3N0LiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBtb2RlbE92ZXJyaWRlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkhvbm9yIGEgcGVyLXJlcXVlc3QgbW9kZWwgb3ZlcnJpZGUgZnJvbSB0aGUgWC1NYXN0cmEtTW9kZWwgaGVhZGVyLCA/bW9kZWw9IHF1ZXJ5LCBvciBhIGBtb2RlbGAgYm9keSBmaWVsZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VzOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogW1wic3RyaW5nXCIsIFwib2JqZWN0XCJdIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJHZW5pZSBzcGFjZXMgdGhlIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8sIGtleWVkIGJ5IGFsaWFzICh0aGUgdG9vbC1uYW1lIHN1ZmZpeCkuIEVhY2ggdmFsdWUgaXMgYSBzcGFjZSBpZCBvciBgeyBzcGFjZUlkLCBoaW50IH1gLiBGYWxscyBiYWNrIHRvIHRoZSBgZ2VuaWVgIHBsdWdpbidzIG93biBgc3BhY2VzYCBjb25maWcsIHRoZW4gREFUQUJSSUNLU19HRU5JRV9TUEFDRV9JRCB1bmRlciB0aGUgYGRlZmF1bHRgIGFsaWFzLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVBZ2VudE1vZGU6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkgZm9yIGFnZW50LWJhY2tlZCBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy4gRGlyZWN0IEdlbmllIGNoYXQgYWx3YXlzIHJlcXVpcmVzIEFnZW50IE1vZGUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRUTCBpbiBtcyBmb3IgdGhlIEdlbmllIHNwYWNlIG1ldGFkYXRhIGNhY2hlLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBhZ2VudE1heFN0ZXBzOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuIChhIHRvb2wgY2FsbCBhbmQgdGhlIGZpbmFsIHJlcGx5IGVhY2ggY29uc3VtZSBvbmUpLiBEZWZhdWx0cyB0byAyNS5cIixcbiAgICB9LFxuICAgIGZvbGxvd1VwU3VnZ2VzdGlvbnM6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ09wdGlvbmFsIHBvc3QtdHVybiBmb2xsb3ctdXBzLiBUcnVlIHNlbGVjdHMgc291cmNlcyBhdXRvbWF0aWNhbGx5OyBcImdlbmVyYXRlZFwiIG9yIFwiZ2VuaWVcIiBwaW5zIG9uZSBzb3VyY2U7IGFuIG9iamVjdCBhZGRzIGEgbGltaXQsIHRpbWVvdXQsIGFuZCBvcHRpb25hbCB0b29sIGV4cG9zdXJlLiBEZWZhdWx0cyBvZmYuJyxcbiAgICB9LFxuICAgIHN0cmlwU3RhbGVDaGFydHM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3RyaXAgY2hhcnRJZHMgZnJvbSByZWNhbGxlZCBhc3Npc3RhbnQgdG9vbCByZXN1bHRzIHNvIHRoZSBtb2RlbCBjYW5ub3QgcmV1c2UgYSB0dXJuLXNjb3BlZCBjaGFydCBtYXJrZXIuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBzdHlsZUluc3RydWN0aW9uczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBpbnN0cnVjdGlvbnMuIEEgc3RyaW5nIHJlcGxhY2VzIHRoZSBidWlsdC1pbiBibG9jaywgYGZhbHNlYCBkaXNhYmxlcyBpdC5cIixcbiAgICB9LFxuICAgIG9ic2VydmFiaWxpdHk6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQnJpZGdlIE1hc3RyYSBzcGFucyBpbnRvIEFwcEtpdCdzIE9UZWwgcGlwZWxpbmUuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgb3IgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCBpcyBzZXQuXCIsXG4gICAgfSxcbiAgICBmZWVkYmFja01vZGU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJhdXRvXCIsIFwiZ2VuaWVcIiwgXCJtbGZsb3dcIiwgXCJub25lXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmVlZGJhY2sgZGVzdGluYXRpb24uIEF1dG8gcHJlZmVycyBHZW5pZSBpbiBHZW5pZSBBZ2VudCBNb2RlLCBvdGhlcndpc2UgTUxmbG93IHdoZW4gY29uZmlndXJlZCwgb3RoZXJ3aXNlIG5vbmUuIEV4cGxpY2l0IHVuYXZhaWxhYmxlIG1vZGVzIGZhaWwgc3RhcnR1cC5cIixcbiAgICB9LFxuICAgIG1jcDoge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkV4cG9zZSB0aGUgcmVnaXN0ZXJlZCBhZ2VudHMgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGFnZW50cy1vbmx5OyBhbiBvYmplY3QgdHVuZXMgdGhlIHNlcnZlciBpZCwgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoZXRoZXIgYW1iaWVudCB0b29scyBhcmUgZXhwb3NlZC5cIixcbiAgICB9LFxuICAgIGdlbmllSWRlbnRpdHk6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAvLyBEZXJpdmVkIGZyb20gdGhlIHJlc29sdmVyJ3Mgb3duIGxpc3QsIHNvIGEgbW9kZSBjYW4gbmV2ZXIgYmUgYWNjZXB0ZWQgYXRcbiAgICAgIC8vIHJ1bnRpbWUgd2hpbGUgdGhlIHB1Ymxpc2hlZCBzY2hlbWEgKGFuZCB0aGUgVUkgYnVpbHQgZnJvbSBpdCkgb21pdHMgaXQuXG4gICAgICBlbnVtOiBbLi4uSURFTlRJVFlfTU9ERVNdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IGFnZW50LWJhY2tlZCB3b3Jrc3BhY2UgY2FsbHMgKHNlcnZpbmcgY2F0YWxvZ3VlLCBHZW5pZSwgc3RhdGVtZW50IGV4ZWN1dGlvbikgcnVuIGFzLiBEaXJlY3QgR2VuaWUgY2hhdCBhbHdheXMgdXNlcyBPQk8uIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRyxPQUFPLEVBQWdELGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBYTVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDO0FBRTlDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7QUFDdkQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBQ3pELGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztBQUV2RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQixtRUFBbUU7SUFDbkUsaUVBQWlFO0lBQ2pFLHdCQUF3QjtDQUN6QixDQUFDO0FBUUY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BQTZCO0lBQ2xFLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxD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MkVBQTJFO1lBQzNFLDBFQUEwRTtZQUMxRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUN6QixXQUFXLEVBQ1QsZ2lCQUFnaUI7U0FDbmlCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFDVCxxT0FBcU87U0FDeE87UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCwwSUFBMEk7U0FDN0k7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsdWdpbiBjb25maWd1cmF0aW9uIHR5cGVzIGFuZCBzaGFyZWQgYFJlcXVlc3RDb250ZXh0YCBrZXlzLlxuICpcbiAqIE93bnMgdGhlIHR5cGVkIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0XG4gKiBjb25maWcpIGFuZCB7QGxpbmsgTUFTVFJBX0NPTkZJR19TQ0hFTUF9LCB0aGUgSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0XG4gKiBwdWJsaXNoZXMgZm9yIGl0IHNvIHNjYWZmb2xkaW5nIHRvb2xzIGFuZCBhZ2VudHMgY2FuIHJlYWQgdGhlIG9wdGlvbiBzZXQuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQgaXMgZXhwbGljaXQgcGx1Z2luIGNvbmZpZywgdGhlbiB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlIG5hbWVkIG9uIHRoZSBmaWVsZCwgdGhlbiBhIGJ1aWx0LWluIGRlZmF1bHQuXG4gKlxuICogS2VwdCBpbiBhIGxlYWYgbW9kdWxlIHNvIGBwbHVnaW4udHNgLCBgc2VydmVyLnRzYCwgYG1vZGVsLnRzYCwgYW5kXG4gKiBgbWVtb3J5LnRzYCBjYW4gaW1wb3J0IHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIGN5Y2xlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIEJhc2VQbHVnaW5Db25maWcsIHR5cGUgQ29uZmlnU2NoZW1hIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBFeGVjdXRpb25Db250ZXh0TGlrZSwgdHlwZSBJZGVudGl0eU1vZGUsIElERU5USVRZX01PREVTIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEZlZWRiYWNrTW9kZU9wdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnRDb25maWcgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7IE1BU1RSQV9SRVNPVVJDRV9JRF9LRVksIE1BU1RSQV9USFJFQURfSURfS0VZIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQW55V29ya2Zsb3cgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtmbG93c1wiO1xuaW1wb3J0IHR5cGUge1xuICBXb3Jrc3BhY2VTYW5kYm94LFxuICBXb3Jrc3BhY2VTYW5kYm94UmVzb2x2ZXIsXG4gIFdvcmtzcGFjZVRvb2xzQ29uZmlnLFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBQZ1ZlY3RvckNvbmZpZywgUG9zdGdyZXNTdG9yZUNvbmZpZyB9IGZyb20gXCJAbWFzdHJhL3BnXCI7XG5cbmltcG9ydCB0eXBlIHsgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uLCBNYXN0cmFUb29scyB9IGZyb20gXCIuL2FnZW50cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL2dlbmllLnRzXCI7XG5pbXBvcnQgdHlwZSB7IExvY2FsU2tpbGxNb3VudCwgUmVtb3RlU2tpbGxzT3B0aW9uIH0gZnJvbSBcIi4vcmVtb3RlLXNraWxscy50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHJlc29sdmVkIEFwcEtpdCB1c2VyLiBgbW9kZWwudHNgIHJlYWRzIGl0IHRvIG1pbnQgdXNlci1zY29wZWRcbiAqIERhdGFicmlja3MgdG9rZW5zLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfS0VZID0gXCJtYXN0cmFfX3VzZXJcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleXMgZm9yIEFwcEtpdCB1c2VyIG1ldGFkYXRhIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBTdXJmYWNlZCBhcyB0cmFjZSBtZXRhZGF0YSB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gdHJhY2VzIGFyZSBmaWx0ZXJhYmxlIGJ5IHdob1xuICogaXNzdWVkIHRoZSByZXF1ZXN0IHdpdGhvdXQgbGVha2luZyB0aGUgZnVsbCB1c2VyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX05BTUVfS0VZID0gXCJtYXN0cmFfX3VzZXJOYW1lXCI7XG4vKiogUmVxdWVzdC1jb250ZXh0IGtleSBjb250YWluaW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0VNQUlMX0tFWSA9IFwibWFzdHJhX191c2VyRW1haWxcIjtcbi8qKiBSZXF1ZXN0LWNvbnRleHQga2V5IGlkZW50aWZ5aW5nIHRoZSBEYXRhYnJpY2tzIGNyZWRlbnRpYWwgdXNlZCBieSB0aGUgdHVybi4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfQVVUSF9NT0RFX0tFWSA9IFwibWFzdHJhX19hdXRoTW9kZVwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IGZvciB0aGUgcGVyLUhUVFAtcmVxdWVzdCBpZCBzdGFtcGVkIGJ5XG4gKiB7QGxpbmsgTWFzdHJhU2VydmVyfS4gUmVhZHMgYFgtUmVxdWVzdC1JZGAgZnJvbSB0aGUgaW5jb21pbmdcbiAqIGhlYWRlcnMgd2hlbiBwcmVzZW50IChzbyBhbiB1cHN0cmVhbSBsb2FkIGJhbGFuY2VyIC8gQVBJIGdhdGV3YXlcbiAqIGNhbiBrZWVwIGl0cyB0cmFjZSBjb3JyZWxhdGlvbiksIGZhbGxzIGJhY2sgdG8gYSBmcmVzaGx5IG1pbnRlZFxuICogVVVJRC4gRWNob2VkIGJhY2sgb24gdGhlIHJlc3BvbnNlIGFuZCBzdXJmYWNlZCBvbiBldmVyeSBzcGFuIHZpYVxuICoge0BsaW5rIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTfSBzbyBsb2dzIGFuZCB0cmFjZXMgc2hhcmUgYVxuICogam9pbiBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfUkVRVUVTVF9JRF9LRVkgPSBcIm1hc3RyYV9fcmVxdWVzdElkXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgZm9yIE9BdXRoIHNjb3BlcyBwYXJzZWQgZnJvbSB0aGUgZm9yd2FyZGVkXG4gKiBhY2Nlc3MgdG9rZW4gYnkge0BsaW5rIE1hc3RyYVNlcnZlci5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFNjb3Blc30uXG4gKiBXb3Jrc3BhY2UgbW91bnRzIHRoYXQgdG91Y2ggRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZXMgcmVxdWlyZVxuICogYHdvcmtzcGFjZWAgb3IgYGFsbC1hcGlzYCBpbiB0aGlzIGxpc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfU0NPUEVTX0tFWSA9IFwibWFzdHJhX19zY29wZXNcIjtcblxuLyoqXG4gKiBDYW5vbmljYWwgbGlzdCBvZiBgUmVxdWVzdENvbnRleHRgIGtleXMgd2Ugd2FudCBNYXN0cmEgdG8gZXh0cmFjdFxuICogYXMgbWV0YWRhdGEgb24gZXZlcnkgb2JzZXJ2YWJpbGl0eSBzcGFuIChhZ2VudCBydW5zLCBtb2RlbCBjYWxscyxcbiAqIHRvb2wgaW52b2NhdGlvbnMsIHdvcmtmbG93IHN0ZXBzKS5cbiAqXG4gKiBNaXJyb3JzIHtAbGluayBodHRwczovL21hc3RyYS5haS9kb2NzL29ic2VydmFiaWxpdHkvdHJhY2luZy9vdmVydmlldyNhdXRvbWF0aWMtbWV0YWRhdGEtZnJvbS1yZXF1ZXN0Y29udGV4dH06XG4gKiBwYXNzZWQgdmVyYmF0aW0gaW50byBgT2JzZXJ2YWJpbGl0eS5jb25maWdzWypdLnJlcXVlc3RDb250ZXh0S2V5c2AsXG4gKiBzbyBhbnkga2V5IGxpc3RlZCBoZXJlIGlzIHJlYWQgZnJvbSBgUmVxdWVzdENvbnRleHRgIGF0IHRyYWNlXG4gKiBzdGFydCBhbmQgYXR0YWNoZWQgYXMgc2NhbGFyIHNwYW4gbWV0YWRhdGEuIEtlZXAgdGhlIHNldCB0byBwbGFpblxuICogc2NhbGFycyAtIG5ldmVyIGluY2x1ZGUge0BsaW5rIE1BU1RSQV9VU0VSX0tFWX0gKGl0IGNhcnJpZXMgdGhlXG4gKiBmdWxsIEFwcEtpdCBleGVjdXRpb24gY29udGV4dCB3aXRoIGEgYFdvcmtzcGFjZUNsaWVudGAgcmVmZXJlbmNlKS5cbiAqXG4gKiBPcmRlciBpcyBwdXJlbHkgY29zbWV0aWM7IE1hc3RyYSBkZS1kdXBlcyBpbnRlcm5hbGx5LlxuICovXG5leHBvcnQgY29uc3QgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLFxuICBNQVNUUkFfVEhSRUFEX0lEX0tFWSxcbiAgTUFTVFJBX1JFUVVFU1RfSURfS0VZLFxuICBNQVNUUkFfVVNFUl9OQU1FX0tFWSxcbiAgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLFxuICBNQVNUUkFfQVVUSF9NT0RFX0tFWSxcbiAgLy8gTW9kZWwgb3ZlcnJpZGUga2V5IGlzIG93bmVkIGJ5IGBzZXJ2aW5nLnRzYDsgc3BlbGxlZCBpbmxpbmUgaGVyZVxuICAvLyBzbyB0aGlzIG1vZHVsZSBzdGF5cyBsZWFmLWxldmVsIChubyBjeWNsZXMgd2l0aCBgc2VydmluZy50c2ApLlxuICBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIixcbl07XG5cbi8qKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgcGx1cyB0aGUgY2Fub25pY2FsIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0TGlrZTtcbn1cblxuLyoqXG4gKiBDYW5vbmljYWwgaWRlbnRpdHkgZm9yIGFuIEFwcEtpdCBleGVjdXRpb24gY29udGV4dDogdGhlIE9CTyB1c2VyIGlkIG9uIGFcbiAqIHVzZXItc2NvcGVkIGNhbGwsIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBpZCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRpb25Db250ZXh0VXNlcklkKGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRMaWtlKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwidXNlcklkXCIgaW4gY29udGV4dCA/IGNvbnRleHQudXNlcklkIDogY29udGV4dC5zZXJ2aWNlVXNlcklkO1xufVxuXG4vKipcbiAqIFdobyBhIHR1cm4gaXMgQVRUUklCVVRFRCB0bywgd2hpY2ggaXMgbm90IGFsd2F5cyB3aG9zZSBEYXRhYnJpY2tzIGNyZWRlbnRpYWxcbiAqIHJ1bnMgaXQuIEFuIE9CTyBjb250ZXh0J3Mgb3duIHVzZXIgaWQgaXMgYXV0aG9yaXRhdGl2ZS4gVW5kZXIgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCwgZXZlcnkgY2FsbGVyIHNoYXJlcyBvbmUgY3JlZGVudGlhbCwgc28gdGhlIGZvcndhcmRlZCB1c2VyIGlkIGlzXG4gKiB3aGF0IGtlZXBzIG1lbW9yeSB0aHJlYWRzIGFuZCBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2VzIGRpc3RpbmN0OyB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsIGlkIGlzIHRoZSBmbG9vciB3aGVuIG5vIHVzZXIgd2FzIGZvcndhcmRlZC5cbiAqXG4gKiBUaGlzIHJ1bGUgaGFzIHRvIGJlIGlkZW50aWNhbCBldmVyeXdoZXJlIGEgY2FjaGUga2V5IGlzIGJ1aWx0LCBzbyBib3RoIHRoZVxuICogd3JpdGUgc2lkZSAodGhlIGBSZXF1ZXN0Q29udGV4dGAgdXNlciBzdGFtcGVkIGJ5IGBzdGFtcFJlcXVlc3RDb250ZXh0VXNlcmApXG4gKiBhbmQgdGhlIHJlYWQgc2lkZSAodGhlIHBsdWdpbidzIG93biBBcHBLaXQgcm91dGVzLCB3aGljaCBoYXZlIGEgcmVxdWVzdCBidXRcbiAqIG5vIGBSZXF1ZXN0Q29udGV4dGApIGRlcml2ZSB0aGVpciBrZXkgZnJvbSB0aGlzIG9uZSBmdW5jdGlvbi4gV2hlbiB0aGUgdHdvXG4gKiBkaXNhZ3JlZWQsIGEgY2hhcnQgd3JpdHRlbiB1bmRlciB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgd2FzIHJlYWQgYmFjayB1bmRlclxuICogdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGlkIGFuZCB0aGUgZW1iZWQgcm91dGUgYW5zd2VyZWQgNDA0LCB3aGljaCB0aGUgY2hhdCBVSVxuICogcmVuZGVycyBhcyBhbiBleHBpcmVkIGNoYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cmlidXRlZFVzZXJJZChcbiAgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dExpa2UsXG4gIGZvcndhcmRlZFVzZXJJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmIChcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0KSByZXR1cm4gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbiAgcmV0dXJuIGZvcndhcmRlZFVzZXJJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGV2ZXJ5IHBlci11c2VyIGNhY2hlIGVudHJ5IGlzIG5hbWVzcGFjZWQgdW5kZXIsIHNvIGFuIE9CTyByZXN1bHRcbiAqIGNhbm5vdCBiZSByZWFkIGJhY2sgYnkgYW5vdGhlciBjYWxsZXIuXG4gKlxuICogUHJlZmVycyB0aGUge0BsaW5rIFVzZXJ9IHRoYXQge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RhbXBzIG9uIHRoZSByZXF1ZXN0XG4gKiBjb250ZXh0LCB3aG9zZSBpZCBhbHJlYWR5IGZvbGxvd3Mge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9LiBUaGUgTUNQIHRyYW5zcG9ydFxuICogcm91dGVzIGRvIG5vdCB0aHJlYWQgdGhhdCBjb250ZXh0IGludG8gdG9vbCBleGVjdXRpb24sIHNvIHRob3NlIGZhbGwgYmFjayB0b1xuICogdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHQgKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsKS4gQSBjYWxsZXIgaG9sZGluZyBhbiBleHByZXNzIHJlcXVlc3Qgc2hvdWxkIGJ1aWxkIGl0cyBrZXkgZnJvbVxuICoge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9IGluc3RlYWQsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpcyBub3QgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIHJldHVybiB1c2VyPy5pZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG59XG5cbi8qKiBQZ1ZlY3RvciBjb25maWcgd2l0aCBhbiBvcHRpb25hbCBNYXN0cmEgc3RvcmUgaWQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFNZW1vcnlDb25maWcgPSBQZ1ZlY3RvckNvbmZpZyAmIHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogTWFzdHJhIG5hdGl2ZSB3b3Jrc3BhY2Ugc2tpbGwtc2VhcmNoIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVdvcmtzcGFjZVNraWxsc0NvbmZpZyB7XG4gIC8qKiBNYXhpbXVtIHNraWxsIG1hdGNoZXMgcmV0dXJuZWQgYnkgb25lIHNlYXJjaC4gRGVmYXVsdHMgdG8gNS4gKi9cbiAgdG9wSz86IG51bWJlcjtcbiAgLyoqIE1pbmltdW0gQk0yNSByZWxldmFuY2Ugc2NvcmUuIERlZmF1bHRzIHRvIDAuMS4gKi9cbiAgbWluU2NvcmU/OiBudW1iZXI7XG4gIC8qKiBMb2FkZWQtc2tpbGwgdGhyZWFkLXN0YXRlIFRUTCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIG9uZSBob3VyLiAqL1xuICB0dGxNcz86IG51bWJlcjtcbn1cblxuLyoqIE5hdGl2ZSBNYXN0cmEgQ29kZSBNb2RlIGV4ZWN1dGlvbiB0cmFuc3BvcnQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFDb2RlTW9kZVRyYW5zcG9ydCA9IFwiYXV0b1wiIHwgXCJpc29sYXRlZC12bVwiIHwgXCJxdWlja2pzXCI7XG5cbi8qKiBOYXRpdmUgTWFzdHJhIENvZGUgTW9kZSBzZXR0aW5ncyBmb3Igc2FuZGJveGVkIG11bHRpLXRvb2wgb3JjaGVzdHJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhQ29kZU1vZGVDb25maWcge1xuICAvKiogQ29kZSBNb2RlIGV4ZWN1dGlvbiB0cmFuc3BvcnQuICovXG4gIHRyYW5zcG9ydDogTWFzdHJhQ29kZU1vZGVUcmFuc3BvcnQ7XG4gIC8qKiBHZW5lcmF0ZWQgb3JjaGVzdHJhdGlvbiB0b29sIGlkLiBEZWZhdWx0cyB0byBgZXhlY3V0ZV90eXBlc2NyaXB0YC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIG9yY2hlc3RyYXRpb24gcHJvZ3JhbSBydW50aW1lIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMzAgc2Vjb25kcy4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaW5lLWdyYWluZWQgY29udHJvbCBmb3IgdGhlIG9wdGlvbmFsIE1DUCBzZXJ2ZXIgZXhwb3N1cmVcbiAqICh7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLm1jcH0pLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDsgdGhlIG9iamVjdFxuICogZm9ybSBvbmx5IG5lZWRzIHRvIHNldCB3aGF0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhTWNwQ29uZmlnIHtcbiAgLyoqXG4gICAqIFNlcnZlciBpZCB1c2VkIGluIHRoZSByb3V0ZSBwYXRoIChgL21jcC88c2VydmVySWQ+Ly4uLmApIGFuZCBhcyB0aGVcbiAgICogTUNQIHJlZ2lzdHJ5IGlkLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgcmVnaXN0ZXJlZCBuYW1lLlxuICAgKi9cbiAgc2VydmVySWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiPGRpc3BsYXlOYW1lPiBNQ1BcImAuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZW1hbnRpYyB2ZXJzaW9uIGFkdmVydGlzZWQgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGBcIjEuMC4wXCJgLiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhcyBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYCAtIHRoaXMgaXMgdGhlIFwibGV2ZXJhZ2UgdGhlIE1hc3RyYSBhZ2VudHMgb3ZlclxuICAgKiBNQ1BcIiBiZWhhdmlvciBtb3N0IGNhbGxlcnMgd2FudC5cbiAgICovXG4gIGFnZW50cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbHNvIGV4cG9zZSB0aGUgcGx1Z2luJ3MgYW1iaWVudCB0b29scyAodGhlIGJ1aWx0LWluIGByZW5kZXJfZGF0YWBcbiAgICogcGx1cyBhbnl0aGluZyBpbiBgY29uZmlnLnRvb2xzYCkgYXMgTUNQIHRvb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiB0aGUgYW1iaWVudCB0b29scyBhc3N1bWUgYW4gaW4tcHJvY2VzcyBjaGF0IHR1cm4gKHRoZXkgcHVibGlzaFxuICAgKiB3cml0ZXIgZXZlbnRzIHRoZSBjaGF0IFVJIGNvbnN1bWVzKSwgc28gdGhleSBhcmVuJ3QgdXNlZnVsIHRvIGFcbiAgICogc3RhbmRhbG9uZSBNQ1AgY2xpZW50LiBUdXJuIHRoaXMgb24gb25seSB3aGVuIHRob3NlIHRvb2xzIGFyZSBzYWZlXG4gICAqIHRvIGNhbGwgb3V0LW9mLWJhbmQuXG4gICAqL1xuICB0b29scz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHRyYSB0b29scyB0byBleHBvc2Ugb3ZlciBNQ1AgYmV5b25kIHRoZSBhZ2VudCAvIGFtYmllbnQgc2V0cy5cbiAgICogVXNlIHRoaXMgZm9yIHRvb2xzIHdyaXR0ZW4gc3BlY2lmaWNhbGx5IGZvciBNQ1AgY29uc3VtZXJzLlxuICAgKi9cbiAgZXh0cmFUb29scz86IE1hc3RyYVRvb2xzO1xufVxuXG4vKiogT3B0aW9uYWwgcG9zdC10dXJuIGZvbGxvdy11cCBzdWdnZXN0aW9uIHBvbGljeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZyB7XG4gIC8qKiBOYXRpdmUgR2VuaWUgb25seSwgQ2hhdEZhc3QgZ2VuZXJhdGVkIG9ubHksIG9yIGF1dG9tYXRpYyBzZWxlY3Rpb24gd2hlbiB0cnVlLiAqL1xuICBtb2RlOiB0cnVlIHwgXCJnZW5lcmF0ZWRcIiB8IFwiZ2VuaWVcIjtcbiAgLyoqIE1heGltdW0gcXVlc3Rpb25zIGVtaXR0ZWQgZm9yIG9uZSB0dXJuLiBEZWZhdWx0cyB0byAzLCBtYXhpbXVtIDEwLiAqL1xuICBsaW1pdD86IG51bWJlcjtcbiAgLyoqIFRhaWwtZ2VuZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogQWxzbyBleHBvc2UgdGhlIGdlbmVyYXRvciBhcyBhbiBleHBsaWNpdGx5IGNhbGxhYmxlIGFnZW50IHRvb2wuICovXG4gIGV4cG9zZVRvb2w/OiBib29sZWFuO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBhY2NlcHRlZCBieSB0aGUgTWFzdHJhIEFwcEtpdCBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKipcbiAgICogUnVuIHR1cm5zIHRocm91Z2ggTWFzdHJhJ3MgZXZlbnRlZCBkdXJhYmxlIGFnZW50IHNvIGV4ZWN1dGlvbiBjb250aW51ZXNcbiAgICogYWZ0ZXIgYSBicm93c2VyIGRpc2Nvbm5lY3QgYW5kIGNhbiBiZSBvYnNlcnZlZCBhZ2FpbiBieSBydW4gaWQuIERlZmF1bHRzXG4gICAqIHRvIGB0cnVlYC5cbiAgICovXG4gIGJhY2tncm91bmRUdXJucz86IGJvb2xlYW47XG4gIC8qKiBBSSBTREsgcHJvdmlkZXItb3B0aW9ucyBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIGBcIm9wZW5haVwiYDsgbm8gZW52IGZhbGxiYWNrLiAqL1xuICBwcm92aWRlcklkPzogc3RyaW5nO1xuICAvKipcbiAgICogUG9zdGdyZXNTdG9yZSBmb3IgTWFzdHJhIHRocmVhZHMvbWVzc2FnZXMuIGB0cnVlYCBkZXJpdmVzIGEgZGVkaWNhdGVkLFxuICAgKiBsaWZlY3ljbGUtaXNvbGF0ZWQgc2VydmljZS1wcmluY2lwYWwgcG9vbCBmcm9tIHRoZSBgbGFrZWJhc2VgIHBsdWdpbjsgYW5cbiAgICogb2JqZWN0IG9wZW5zIGEgc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLlxuICAgKi9cbiAgc3RvcmFnZT86IGJvb2xlYW4gfCBQb3N0Z3Jlc1N0b3JlQ29uZmlnO1xuICAvKipcbiAgICogUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBtZW1vcnkgcmVjYWxsLiBgdHJ1ZWAgZGVyaXZlcyBhIGRlZGljYXRlZCxcbiAgICogbGlmZWN5Y2xlLWlzb2xhdGVkIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgZnJvbSB0aGUgYGxha2ViYXNlYCBwbHVnaW47IGFuXG4gICAqIG9iamVjdCBvcGVucyBhIHNlcGFyYXRlbHkgY29uZmlndXJlZCBzdG9yZS5cbiAgICovXG4gIG1lbW9yeT86IGJvb2xlYW4gfCBNYXN0cmFNZW1vcnlDb25maWc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXhlY3V0YWJsZSB0b29scyBhdmFpbGFibGUgdG8gdGhlIGN1cnJlbnQgcmVxdWVzdCB0aHJvdWdoIG5hdGl2ZVxuICAgKiBNYXN0cmEgQ29kZSBNb2RlLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBgYXV0b2Agc2VsZWN0cyBhbiBpbnN0YWxsZWQsXG4gICAqIHJ1bnRpbWUtc3VwcG9ydGVkIG9wdGlvbmFsIHRyYW5zcG9ydCBkdXJpbmcgc3RhcnR1cCBhbmQgbGVhdmVzIENvZGUgTW9kZVxuICAgKiBkaXNhYmxlZCB3aGVuIG5vbmUgaXMgYXZhaWxhYmxlLiBFeHBsaWNpdCB0cmFuc3BvcnQgdmFsdWVzIGZhaWwgc3RhcnR1cFxuICAgKiB3aGVuIHRoZWlyIG9wdGlvbmFsIGRlcGVuZGVuY3kgb3IgcnVudGltZSBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlLiBUaGVzZVxuICAgKiB0cmFuc3BvcnRzIGRvIG5vdCBleGVjdXRlIHRocm91Z2ggdGhlIHdvcmtzcGFjZSBjb21tYW5kIHNhbmRib3g7IFNTSCBpc1xuICAgKiB1c2VkIG9ubHkgd2hlbiBhbiBleHBvc2VkIFNTSC1iYWNrZWQgdG9vbCBpcyBjYWxsZWQuXG4gICAqL1xuICBjb2RlTW9kZT86IGZhbHNlIHwgTWFzdHJhQ29kZU1vZGVUcmFuc3BvcnQgfCBNYXN0cmFDb2RlTW9kZUNvbmZpZztcbiAgLyoqXG4gICAqIFNhbmRib3ggZm9yIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzLiBEZWZhdWx0cyB0byBNb250eS4gYGZhbHNlYFxuICAgKiBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbjsgYHRydWVgIG9yIGBcIm1vbnR5XCJgIHNlbGVjdHMgTW9udHk7IGFuIGV4cGxpY2l0XG4gICAqIE1hc3RyYSBzYW5kYm94IG9yIHJlc29sdmVyIHN1cHBsaWVzIGEgcmVtb3RlIHRyYW5zcG9ydC4gQW4gYWdlbnQgd2l0aCBhblxuICAgKiBleHBsaWNpdCBjdXN0b20gYHdvcmtzcGFjZWAga2VlcHMgdGhhdCB3b3Jrc3BhY2UgYW5kIGl0cyBzYW5kYm94LlxuICAgKi9cbiAgc2FuZGJveD86IGJvb2xlYW4gfCBcIm1vbnR5XCIgfCBXb3Jrc3BhY2VTYW5kYm94IHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyO1xuICAvKiogQWRkIHVzZXItc2NvcGVkIGAvdG1wYCBvbmx5IHdoZW4gbm8gY29uZmlndXJlZCB3b3Jrc3BhY2UgcGF0aCBtb3VudHMgd3JpdGFibGUuICovXG4gIHdvcmtzcGFjZUZhbGxiYWNrVG9UbXA/OiBib29sZWFuO1xuICAvKiogTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgdG9vbCBhdmFpbGFiaWxpdHksIGFwcHJvdmFsLCBhbmQgaG9vayBjb25maWd1cmF0aW9uLiAqL1xuICB3b3Jrc3BhY2VUb29scz86IFdvcmtzcGFjZVRvb2xzQ29uZmlnO1xuICAvKipcbiAgICogVXNlIE1hc3RyYSdzIG5hdGl2ZSB3b3Jrc3BhY2Ugc2tpbGwgbWFuYWdlci4gRGVmYXVsdHMgdG8gdHJ1ZS4gUGFzcyBhblxuICAgKiBvYmplY3QgdG8gdHVuZSBvbi1kZW1hbmQgZGlzY292ZXJ5IGFuZCBsb2FkZWQtc2tpbGwgc3RhdGUuXG4gICAqL1xuICB3b3Jrc3BhY2VTa2lsbHM/OiBib29sZWFuIHwgTWFzdHJhV29ya3NwYWNlU2tpbGxzQ29uZmlnO1xuICAvKipcbiAgICogQ29kZS1kZWZpbmVkIGFnZW50cy4gQWNjZXB0cyB0aHJlZSBzaGFwZXMgZm9yIGNvbnZlbmllbmNlOlxuICAgKlxuICAgKiAtICoqUmVjb3JkKio6IGB7IGFuYWx5c3Q6IGRlZiwgaGVscGVyOiBkZWYgfWAgLSBrZXlzIGJlY29tZSB0aGVcbiAgICogICByZWdpc3RlcmVkIGlkcyBhbmQgdGhlIGZpcnN0IGtleSBpcyB0aGUgZGVmYXVsdC5cbiAgICogLSAqKlNpbmdsZSBkZWZpbml0aW9uKio6IGBkZWZgIC0gcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBcImRlZmF1bHRcImAgd2hlbiBgbmFtZWAgaXMgb21pdHRlZCkgYW5kXG4gICAqICAgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgdGhlIGRlZmF1bHQgYWdlbnQuXG4gICAqIC0gKipBcnJheSoqOiBgW2RlZjEsIGRlZjJdYCAtIGVhY2ggcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBhZ2VudF8ke2l9YCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKTtcbiAgICogICB0aGUgZmlyc3QgZW50cnkgaXMgdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgYmVjb21lcyBhIE1hc3RyYSBgQWdlbnRgIHJlYWNoYWJsZSBhdFxuICAgKiBgL2FwaS88cGx1Z2luPi9yb3V0ZS9jaGF0LzxpZD5gICh0aGUgY2hhdCByb3V0ZSBhbHNvIG1hdGNoZXNcbiAgICogYDphZ2VudElkYCkuIFdoZW4gYGFnZW50c2AgaXMgb21pdHRlZCBlbnRpcmVseSwgdGhlIHBsdWdpblxuICAgKiByZWdpc3RlcnMgYSBzaW5nbGUgYnVpbHQtaW4gYGRlZmF1bHRgIGFuYWx5c3Qgc28gdGhlIGJhcmVcbiAgICogYG1hc3RyYSgpYCBjYWxsIHN0aWxsIG1vdW50cyBhIHdvcmtpbmcgY2hhdCBlbmRwb2ludC5cbiAgICpcbiAgICogQGV4YW1wbGUgU2luZ2xlLWFnZW50IHNob3J0aGFuZFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgQXJyYXlcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IFtcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJhbmFseXN0XCIsIGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJoZWxwZXJcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgIF0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgUmVjb3JkIChleHBsaWNpdCBpZHMpXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiB7XG4gICAqICAgICBhbmFseXN0OiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGhlbHBlcjogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgfSxcbiAgICogICBkZWZhdWx0QWdlbnQ6IFwiYW5hbHlzdFwiLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhZ2VudHM/OlxuICAgIHwgUmVjb3JkPHN0cmluZywgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uPlxuICAgIHwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uXG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXTtcbiAgLyoqXG4gICAqIEFtYmllbnQgdG9vbHMgc3ByZWFkIGludG8gZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCdzIHRvb2xzIHJlY29yZDtcbiAgICogcGVyLWFnZW50IHRvb2xzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBVc2UgZm9yIGEgc21hbGwgc2hhcmVkXG4gICAqIGxpYnJhcnk7IGZvciBwZXItYWdlbnQgdG9vbHMgc2V0IGBhZ2VudHNbaWRdLnRvb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgdG9vbHM/OiBNYXN0cmFUb29scztcbiAgLyoqXG4gICAqIENvZGUtZGVmaW5lZCBNYXN0cmEgd29ya2Zsb3dzIHJlZ2lzdGVyZWQgb24gdGhlIGhvc3RlZCBpbnN0YW5jZS5cbiAgICogRGVmZXJyZWQgc2libGluZyBwbHVnaW5zIG1heSBhbHNvIHJlZ2lzdGVyIHRocm91Z2ggdGhlIHBsdWdpbiBleHBvcnRcbiAgICogYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBidWlsdC5cbiAgICovXG4gIHdvcmtmbG93cz86IFJlY29yZDxzdHJpbmcsIEFueVdvcmtmbG93PjtcbiAgLyoqXG4gICAqIEFnZW50IGlkIHVzZWQgd2hlbiB0aGUgY2xpZW50IGRvZXNuJ3Qgc3BlY2lmeSBvbmUgKHRoZSBiYXJlLFxuICAgKiB1bi1zdWZmaXhlZCBoaXN0b3J5IC8gc3VnZ2VzdGlvbnMgcm91dGVzIHJlc29sdmUgdG8gaXQpLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgZmlyc3Qga2V5IGluIGBhZ2VudHNgIChvciBgXCJkZWZhdWx0XCJgIHdoZW5cbiAgICogYGFnZW50c2AgaXMgb21pdHRlZCkuIE11c3QgbWF0Y2ggYW4gaWQgaW4gYGFnZW50c2Agd2hlbiBib3RoIGFyZVxuICAgKiBzZXQ7IGEgbWlzbWF0Y2ggdGhyb3dzIGF0IHNldHVwIHdpdGggdGhlIGF2YWlsYWJsZSBjYW5kaWRhdGVzLlxuICAgKi9cbiAgZGVmYXVsdEFnZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGx1Z2luLWxldmVsIGRlZmF1bHQgbW9kZWwgYXBwbGllZCB0byBldmVyeSBhZ2VudCB0aGF0IG9taXRzIGl0c1xuICAgKiBvd24gYG1vZGVsYC4gTWlycm9ycyBBcHBLaXQncyBgYWdlbnRzKHsgZGVmYXVsdE1vZGVsIH0pYC5cbiAgICpcbiAgICogLSBgc3RyaW5nYDogc2hvcnRoYW5kIGZvciBcInVzZSB0aGUgT0JPIGF1dG8tcmVzb2x2ZXIgYnV0IHN3YXAgdGhlXG4gICAqICAgYG1vZGVsSWRgXCIgKGUuZy4gYFwiZGF0YWJyaWNrcy1jbGF1ZGUtc29ubmV0LTQtNlwiYCkuXG4gICAqIC0gQW55IG90aGVyIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50PE1hc3RyYU1vZGVsQ29uZmlnPmA6IHBhc3NlZFxuICAgKiAgIHRocm91Z2ggdmVyYmF0aW0uIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgZnVsbCBjb250cm9sIG92ZXIgYXV0aFxuICAgKiAgIG9yIGBwcm92aWRlcklkYC5cbiAgICpcbiAgICogUmVzb2x1dGlvbiBvcmRlciBwZXIgYWdlbnQ6IGBkZWYubW9kZWxgIOKGkiBgZGVmYXVsdE1vZGVsYCDihpJcbiAgICogYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCDihpIgYnVpbHQtaW4gYC9zZXJ2aW5nLWVuZHBvaW50c2BcbiAgICogcmVzb2x2ZXIuXG4gICAqL1xuICBkZWZhdWx0TW9kZWw/OiBBZ2VudENvbmZpZ1tcIm1vZGVsXCJdIHwgc3RyaW5nO1xuICAvKipcbiAgICogRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgKGBcImNsYXVkZSBzb25uZXRcImApIGFnYWluc3QgdGhlIHdvcmtzcGFjZSdzXG4gICAqIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogU2V0IGBmYWxzZWAgdG8gcmVxdWlyZSBleGFjdCBlbmRwb2ludCBuYW1lcyBldmVyeXdoZXJlLlxuICAgKi9cbiAgbW9kZWxGdXp6eU1hdGNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZnV6enkgbWF0Y2hlciwgMCAoZXhhY3QpIHRvIDEgKGFueXRoaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gYDAuNGA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogTG93ZXIgdmFsdWVzIHJlamVjdCBsb29zZSBtYXRjaGVzOyByYWlzZSBpdCBpZiB5b3UgaGF2ZSBhIHNwcmF3bGluZ1xuICAgKiBlbmRwb2ludCBjYXRhbG9ndWUgd2l0aCBzaW1pbGFyLWxvb2tpbmcgbmFtZXMuXG4gICAqL1xuICBtb2RlbEZ1enp5VGhyZXNob2xkPzogbnVtYmVyO1xuICAvKipcbiAgICogVFRMIGZvciB0aGUgaW4tbWVtb3J5IHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICogRGVmYXVsdHMgdG8gNSBtaW51dGVzOyBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIFRoZSBjYWNoZSBpcyBwZXIgd29ya3NwYWNlIGhvc3QgYW5kIHNoYXJlZCBhY3Jvc3MgdXNlcnM7IGNvbmN1cnJlbnRcbiAgICogY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZSBpbi1mbGlnaHQgZmV0Y2guXG4gICAqL1xuICBtb2RlbENhY2hlVHRsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMZXQgY2xpZW50cyBwaWNrIHRoZSBiYWNraW5nIGVuZHBvaW50IHBlciByZXF1ZXN0LiBEZWZhdWx0cyB0byBgdHJ1ZWA7XG4gICAqIG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogUmVhZHMgdGhlIGBYLU1hc3RyYS1Nb2RlbGAgaGVhZGVyLCB0aGUgYD9tb2RlbD1gIHF1ZXJ5IHN0cmluZywgb3IgYVxuICAgKiBgbW9kZWxgIGJvZHkgZmllbGQsIGluIHRoYXQgb3JkZXIuIERpc2FibGUgd2hlbiBydW5uaW5nIG11bHRpLXRlbmFudFxuICAgKiB3aGVyZSB1bnRydXN0ZWQgY2xpZW50cyBzaG91bGRuJ3QgY2hvb3NlIHRoZSBlbmRwb2ludC5cbiAgICovXG4gIG1vZGVsT3ZlcnJpZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCBsaXN0IG9mIGVuZHBvaW50IG5hbWVzIHRyaWVkICpmaXJzdCogd2hlbiBub1xuICAgKiBhZ2VudCAvIHBsdWdpbiAvIGVudiAvIHJlcXVlc3Qtb3ZlcnJpZGUgbW9kZWwgaWQgaXMgc2V0LCBhaGVhZCBvZlxuICAgKiB0aGUgZHluYW1pYyBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZS4gVGhlIHJlc29sdmVyIHBpY2tzIHRoZVxuICAgKiBmaXJzdCBpZCB0aGF0IGlzIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIHdvcmtzcGFjZSdzXG4gICAqIGAvc2VydmluZy1lbmRwb2ludHNgIGxpc3RpbmcuXG4gICAqXG4gICAqIFdoZW4gdW5zZXQsIHJlc29sdXRpb24gaXMgZHJpdmVuIGJ5IHRoZSBsaXZlIEZvdW5kYXRpb24gTW9kZWwgQVBJXG4gICAqIGBxdWFsaXR5YCAvIGBzcGVlZGAgLyBgY29zdGAgc2NvcmVzOiBlbmRwb2ludHMgYXJlIGNsYXNzaWZpZWQgaW50b1xuICAgKiBjaGF0IGNsYXNzZXMgKGBjbGFzc2lmeUVuZHBvaW50c2ApIGFuZCB3YWxrZWQgYmVzdC1maXJzdFxuICAgKiAoQ2hhdFRoaW5raW5nIC0+IENoYXRCYWxhbmNlZCAtPiBDaGF0RmFzdCkuIFRoZSBhdXRvbWF0aWMgZGVmYXVsdCBpc1xuICAgKiBsaXZlLW9ubHkgYW5kIGZhaWxzIHdoZW4gbm8gbWF0Y2hpbmcgZW5kcG9pbnQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICogU2V0IHRoaXMgdG8gcGluIGEgcmVndWxhdGVkIHdvcmtzcGFjZSB0byBhbiBhcHByb3ZlZCBzdWJzZXQsIG9yIHRvIHB1dFxuICAgKiBjdXN0b20gZW5kcG9pbnRzIGluIGZyb250IG9mIHRoZSBhdXRvLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLlxuICAgKi9cbiAgZGVmYXVsdE1vZGVsRmFsbGJhY2tzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCAoZGVmYXVsdCksIGV2ZXJ5IGFnZW50IGdldHMgYSBidWlsdC1pbiBpbnB1dFxuICAgKiBwcm9jZXNzb3IgdGhhdCBzdHJpcHMgYGNoYXJ0SWRgIGZpZWxkcyBmcm9tIHByaW9yIGFzc2lzdGFudFxuICAgKiB0b29sLWludm9jYXRpb24gcmVzdWx0cyBiZWZvcmUgdGhleSByZWFjaCB0aGUgbW9kZWwuIFRoaXNcbiAgICogcHJldmVudHMgdGhlIG1vZGVsIGZyb20gcmV1c2luZyB0dXJuLXNjb3BlZCBjaGFydElkcyBpdCBzZWVzXG4gICAqIGluIG1lbW9yeSByZWNhbGwgKHdoaWNoIHdvdWxkIGxlYXZlIGBbY2hhcnQ6PGlkPl1gIG1hcmtlcnNcbiAgICogcG9pbnRpbmcgYXQgd3JpdGVyIGV2ZW50cyB0aGF0IG5vIGxvbmdlciBleGlzdCkuXG4gICAqXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIG9wdCBvdXQgLSB1c2VmdWwgaWYgYSBub24tZGVmYXVsdCBhZ2VudFxuICAgKiBuZWVkcyBmdWxsIHZpc2liaWxpdHkgaW50byBwcmlvciBjaGFydElkcyAoZS5nLiBhbiBhdWRpdFxuICAgKiBhZ2VudCByZWFzb25pbmcgYWJvdXQgY2hhcnQgbGluZWFnZSkuXG4gICAqL1xuICBzdHJpcFN0YWxlQ2hhcnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBgaW5zdHJ1Y3Rpb25zYCB0byBjdXJiXG4gICAqIGNvbW1vbiBMTE0taXNtcyAoZW0gZGFzaGVzLCBlbW9qaXMsIHN5Y29waGFudGljIG9wZW5lcnMsIHRocm93YXdheVxuICAgKiBjbG9zZXJzLCBleGNlc3NpdmUgaGVkZ2luZykuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiB1c2UgdGhlIGJ1aWx0LWluXG4gICAqICAgYERFRkFVTFRfU1RZTEVfSU5TVFJVQ1RJT05TYCBmcm9tIGBhZ2VudHMudHNgLlxuICAgKiAtIGBzdHJpbmdgOiByZXBsYWNlIHRoZSBkZWZhdWx0IHdpdGggdGhlIHN1cHBsaWVkIGJsb2NrLlxuICAgKiAtIGBmYWxzZWA6IGRpc2FibGUgZW50aXJlbHkgKGFnZW50cyBzZWUgb25seSB0aGVpciBiZXNwb2tlXG4gICAqICAgYGluc3RydWN0aW9uc2ApLlxuICAgKlxuICAgKiBBcHBlbmRlZCAobm90IHByZXBlbmRlZCkgc28gdGhlIGFnZW50J3Mgcm9sZSBhbmQgcnVsZXMgY29tZSBmaXJzdFxuICAgKiBhbmQgdGhlIHN0eWxlIGJsb2NrIGxlYW5zIG9uIHRoZSBtb2RlbCdzIHJlY2VuY3kgYmlhcy5cbiAgICovXG4gIHN0eWxlSW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBHZW5pZSBzcGFjZXMgdGhpcyBwbHVnaW4ncyBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLiBPbmUgTWFzdHJhXG4gICAqIHRvb2wgaXMgcmVnaXN0ZXJlZCBwZXIgYWxpYXMgKGBnZW5pZWAgZm9yIHRoZSB3ZWxsLWtub3duXG4gICAqIGBkZWZhdWx0YCBhbGlhcywgYGdlbmllXzxhbGlhcz5gIG90aGVyd2lzZSkuIEVhY2ggdG9vbCBzcGluc1xuICAgKiB1cCBhIHBlci1xdWVzdGlvbiBHZW5pZSBzdWItYWdlbnQgdGhhdCBydW5zIERhdGFicmlja3NcbiAgICogXCJhZ2VudCBtb2RlXCIgYWdhaW5zdCB0aGUgc3BhY2UsIGJyb2FkY2FzdHMgd2lyZSBldmVudHMgdG8gdGhlXG4gICAqIFVJLCBmZXRjaGVzIHN0YXRlbWVudCByb3dzIGZvciBub24tZW1wdHkgcmVzdWx0cywgYW5kIHJldHVybnNcbiAgICogYSBgKHN0cmluZyB8IGRhdGEgfCBjaGFydClbXWAgc3VtbWFyeSB0aGUgaG9zdCBVSSByZW5kZXJzXG4gICAqIGlubGluZS5cbiAgICpcbiAgICogRW50cmllcyBhY2NlcHQgZWl0aGVyIGEgZnVsbCB7QGxpbmsgR2VuaWVTcGFjZUNvbmZpZ30gb2JqZWN0XG4gICAqIG9yIGEgYmFyZSBgc3BhY2VfaWRgIHN0cmluZyB3aGVuIG5vIGV4dHJhcyBhcmUgbmVlZGVkOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGdlbmllU3BhY2VzOiB7XG4gICAqICAgICBkZWZhdWx0OiBcIjAxZWYwZDNjMGUxYjFmNGE4ZDJjM2U0ZjVhNmI3YzhkXCIsXG4gICAqICAgICBmb3JlY2FzdHM6IHsgc3BhY2VJZDogXCIwMWVmLi4uXCIsIGhpbnQ6IFwid2Vla2x5IGRlbWFuZCBmb3JlY2FzdHNcIiB9LFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogUmVhY2ggdGhlIHNwYWNlcyBmcm9tIGFuIGFnZW50J3MgYHRvb2xzKHBsdWdpbnMpYCBjYWxsYmFjayB2aWFcbiAgICogYHBsdWdpbnMuZ2VuaWU/LnRvb2xraXQoKWA7IHRoZSByZXN1bHRpbmcgdG9vbHMgYWNjZXB0XG4gICAqIGB7IGNvbnRlbnQsIGNvbnZlcnNhdGlvbklkPyB9YCBhbmQgcmV0dXJuIGEgaHlkcmF0ZWQgc3VtbWFyeS5cbiAgICpcbiAgICogKipGYWxsYmFjayBkaXNjb3ZlcnkqKiAoaGlnaGVzdCBwcmVjZWRlbmNlIGZpcnN0KTogaWYgdGhpc1xuICAgKiBmaWVsZCBpcyBvbWl0dGVkLCB0aGUgR2VuaWUgYWdlbnQgYWxzbyBwaWNrcyB1cCBzcGFjZXMgZnJvbVxuICAgKiAoMSkgdGhlIEFwcEtpdCBgZ2VuaWUoeyBzcGFjZXM6IHsgLi4uIH0gfSlgIHBsdWdpbiBpbnN0YW5jZVxuICAgKiB3aGVuIHJlZ2lzdGVyZWQsIGFuZCAoMikgdGhlIGBEQVRBQlJJQ0tTX0dFTklFX1NQQUNFX0lEYFxuICAgKiBlbnYgdmFyIChyZWdpc3RlcmVkIHVuZGVyIHRoZSBgZGVmYXVsdGAgYWxpYXMpLiBUaGlzIGtlZXBzXG4gICAqIGV4aXN0aW5nIEFwcEtpdCBkZXBsb3ltZW50cyB3b3JraW5nIHdpdGhvdXQgcmVzdGF0aW5nIHRoZVxuICAgKiBzcGFjZXMgY29uZmlnIGluIHR3byBwbGFjZXMuXG4gICAqL1xuICBnZW5pZVNwYWNlcz86IEdlbmllU3BhY2VzQ29uZmlnO1xuICAvKipcbiAgICogVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkgZm9yIGBhc2tfZ2VuaWVgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqIFNldCBgZmFsc2VgIHRvIGZvcmNlIHRoZSBsZWdhY3kgQ29udmVyc2F0aW9uIEFQSSBwb2xsaW5nIGRyaXZlci4gQVxuICAgKiBwcmUtc3RyZWFtIGZlYXR1cmUtZGlzYWJsZWQgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2UgZmFsbHMgYmFja1xuICAgKiBhdXRvbWF0aWNhbGx5LiBEaXJlY3QgR2VuaWUgY2hhdCBhbHdheXMgcmVxdWlyZXMgQWdlbnQgTW9kZSBhbmQgaWdub3Jlc1xuICAgKiB0aGlzIG9wdGlvbi5cbiAgICovXG4gIGdlbmllQWdlbnRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRUTCBmb3IgdGhlIGluLW1lbW9yeSBHZW5pZSBzcGFjZSBtZXRhZGF0YSBjYWNoZSwgaW5cbiAgICogbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuIFRoZSBHZW5pZSBhZ2VudCBjYWxsc1xuICAgKiBgY2xpZW50LmdlbmllLmdldFNwYWNlKC4uLilgIG9uIGV2ZXJ5IGNvbGQtc3RhcnQgdG8gZ2V0IHRoZVxuICAgKiB0aXRsZSAvIGRlc2NyaXB0aW9uIC8gd2FyZWhvdXNlIGlkOyBjYWNoZWQgcmVzcG9uc2VzIHNraXAgdGhlXG4gICAqIHJvdW5kLXRyaXAgYW5kIGNvbmN1cnJlbnQgY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZVxuICAgKiBpbi1mbGlnaHQgZmV0Y2guIERyb3AgdG8gYSBzbWFsbGVyIHZhbHVlIHdoZW4gYW5hbHlzdHMgYXJlXG4gICAqIGFjdGl2ZWx5IGVkaXRpbmcgc3BhY2UgbWV0YWRhdGEgYW5kIHlvdSB3YW50IGNoYW5nZXMgdmlzaWJsZVxuICAgKiB3aXRoaW4gc2Vjb25kczsgcmFpc2UgaXQgdG8gYW1vcnRpc2UgdGhlIHJvdW5kLXRyaXAgd2hlblxuICAgKiBzcGFjZSBtZXRhZGF0YSBpcyBlZmZlY3RpdmVseSBmcm96ZW4uXG4gICAqXG4gICAqIEJhY2tlZCBieSBBcHBLaXQncyBgQ2FjaGVNYW5hZ2VyYCwgc28gdGhlIGNhY2hlIHBhcnRpY2lwYXRlc1xuICAgKiBpbiB0ZWxlbWV0cnkgc3BhbnMgKGBjYWNoZS5nZXRPckV4ZWN1dGVgKSBhbmQgYmVuZWZpdHMgZnJvbVxuICAgKiBMYWtlYmFzZSBwZXJzaXN0ZW5jZSB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyB3aXJlZCB1cC5cbiAgICovXG4gIGdlbmllU3BhY2VDYWNoZVR0bE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuLiBPbmUgc3RlcCA9IG9uZVxuICAgKiByb3VuZC10cmlwIHRvIHRoZSB1bmRlcmx5aW5nIG1vZGVsIChhIHRvb2wgY2FsbCBjb25zdW1lcyBhXG4gICAqIHN0ZXAsIHRoZSBmaW5hbC10ZXh0IHJlcGx5IGNvbnN1bWVzIG9uZSB0b28pLiBBcHBsaWVzIHRvXG4gICAqIGV2ZXJ5IGFnZW50IHJlZ2lzdGVyZWQgdGhyb3VnaCB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLmFnZW50c31cbiAgICogLSBwZXItYWdlbnQgb3ZlcnJpZGVzIGFyZW4ndCBzdXJmYWNlZCB5ZXQgYmVjYXVzZSB0aGUgc2FtZVxuICAgKiBjZWlsaW5nIGhhcyBiZWVuIHN1ZmZpY2llbnQgYWNyb3NzIGV2ZXJ5IHdvcmtsb2FkIHdlJ3ZlIHJ1bi5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfQUdFTlRfTUFYX1NURVBTfSAoMjUpLCBzaXplZCB0byBmaXRcbiAgICogYSBkZWNvbXBvc2VkIEdlbmllIHR1cm4gKGdyb3VuZGluZyArIHNldmVyYWwgYGFza19nZW5pZWAgY2FsbHNcbiAgICogKyBgcHJlcGFyZV9jaGFydGAgcGVyIGRhdGFzZXQgKyB0aGUgZmluYWwtdGV4dCByZXBseSkgd2l0aFxuICAgKiBoZWFkcm9vbSBmb3IgdGhlIG1vZGVsIHRvIGNoYWluIGEgY291cGxlIG9mIGZvbGxvdy11cHMgYmVmb3JlXG4gICAqIGFuc3dlcmluZy4gTWFzdHJhJ3Mgb3duIGBhZ2VudC5nZW5lcmF0ZWAgZGVmYXVsdCBvZiA1IHdvdWxkXG4gICAqIGN1dCBtdWx0aS1zdGVwIG9yY2hlc3RyYXRpb24gb2ZmIGFmdGVyIDItMyB0b29sIGNhbGxzLCBzb1xuICAgKiBleHBsaWNpdGx5IHJhaXNpbmcgdGhlIGNlaWxpbmcgaGVyZSBpcyB3aGF0IGxldHMgdGhlXG4gICAqIGFnZW50LW1vZGUgbG9vcCBwbGF5IG91dC5cbiAgICpcbiAgICogTG93ZXIgd2hlbiBhbiB1bnVzdWFsbHkgc2xvdyBvciBleHBlbnNpdmUgbW9kZWwgbWFrZXMgbG9uZ1xuICAgKiB0dXJucyB1bmFmZm9yZGFibGU7IHJhaXNlIGZvciBleHBsb3JhdG9yeSB3b3JrbG9hZHMgdGhhdCBuZWVkXG4gICAqIHRvIGRyaWxsIGRlZXAgaW50byBhIGRhdGFzZXQgd2l0aGluIGEgc2luZ2xlIHR1cm4uXG4gICAqL1xuICBhZ2VudE1heFN0ZXBzPzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgcG9zdC10dXJuIGZvbGxvdy11cCBxdWVzdGlvbnMuIGB0cnVlYCBzZWxlY3RzIHNvdXJjZXNcbiAgICogYXV0b21hdGljYWxseTsgYFwiZ2VuZXJhdGVkXCJgIG9yIGBcImdlbmllXCJgIHBpbnMgb25lIHNvdXJjZTsgYGZhbHNlYCBvclxuICAgKiBvbWlzc2lvbiBkaXNhYmxlcyBmb2xsb3ctdXBzLlxuICAgKi9cbiAgZm9sbG93VXBTdWdnZXN0aW9ucz86IGZhbHNlIHwgdHJ1ZSB8IFwiZ2VuZXJhdGVkXCIgfCBcImdlbmllXCIgfCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnO1xuICAvKipcbiAgICogV2lyZSBNYXN0cmEgc3BhbnMgaW50byBBcHBLaXQncyBnbG9iYWwgT1RlbCBwaXBlbGluZSB2aWFcbiAgICogYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0LCBhdXRvKTogb24gb25seSB3aGVuXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgb3JcbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVGAgaXMgc2V0LiBXaGVuIHVuc2V0LCB0aGVcbiAgICogICBicmlkZ2UgaXMgc2tpcHBlZCBzbyBNYXN0cmEgZG9lcyBub3QgbG9nXG4gICAqICAgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIG9uIHRoZSBub29wIHRyYWNlci5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uIGV2ZW4gd2l0aG91dCBhbiBPVExQIGVuZHBvaW50LlxuICAgKiAtIGBmYWxzZWA6IGZvcmNlIG9mZi5cbiAgICovXG4gIG9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRmVlZGJhY2sgZGVzdGluYXRpb24uIGBhdXRvYCBwcmVmZXJzIEdlbmllIHdoZW4gR2VuaWUgQWdlbnQgTW9kZSBpc1xuICAgKiBhdmFpbGFibGUsIG90aGVyd2lzZSBNTGZsb3cgd2hlbiB0cmFjaW5nIGlzIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSBub25lLlxuICAgKiBFeHBsaWNpdCBgZ2VuaWVgIG9yIGBtbGZsb3dgIGZhaWxzIHN0YXJ0dXAgd2hlbiB1bmF2YWlsYWJsZS5cbiAgICovXG4gIGZlZWRiYWNrTW9kZT86IEZlZWRiYWNrTW9kZU9wdGlvbjtcbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgcGx1Z2luJ3MgYWdlbnRzIChhbmQgb3B0aW9uYWxseSB0b29scykgYXMgYSBNYXN0cmEgTUNQXG4gICAqIHNlcnZlciBzbyBleHRlcm5hbCBNQ1AgY2xpZW50cyAtIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIHRoZSBNYXN0cmFcbiAgICogcGxheWdyb3VuZCwgb3IgYW5vdGhlciBhZ2VudCAtIGNhbiBjYWxsIHRoZW0gb3ZlciB0aGUgc3RhbmRhcmQgTUNQXG4gICAqIHRyYW5zcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdCAoYWdlbnRzIG9ubHkpOiB3cmFwcGluZyB0aGVcbiAgICogYWxyZWFkeS1yZWdpc3RlcmVkIGFnZW50cyBjb3N0cyBub3RoaW5nIGV4dHJhLCBzbyB0aGUgZW5kcG9pbnQgaXMgb25cbiAgICogb3V0IG9mIHRoZSBib3g7IG9ubHkgdGhlIGFtYmllbnQgdG9vbHMgKHdoaWNoIGFzc3VtZSBhbiBpbi1wcm9jZXNzXG4gICAqIGNoYXQgdHVybikgc3RheSBvZmYgdW5sZXNzIGV4cGxpY2l0bHkgb3B0ZWQgaW4uXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIC8gYHRydWVgOiBleHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhc1xuICAgKiAgIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbCB1bmRlciBhIHNlcnZlciB3aG9zZSBpZCBpcyB0aGUgcGx1Z2luXG4gICAqICAgbmFtZS5cbiAgICogLSBgZmFsc2VgOiBubyBNQ1AgZW5kcG9pbnRzLlxuICAgKiAtIHtAbGluayBNYXN0cmFNY3BDb25maWd9OiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBzZXJ2ZXIgaWQsXG4gICAqICAgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoaWNoIGFnZW50cyAvIHRvb2xzIGFyZSBleHBvc2VkLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBzdG9jayBNYXN0cmEgTUNQIHJvdXRlcyBtb3VudCB1bmRlciB0aGUgcGx1Z2luJ3NcbiAgICogYmFzZSBwYXRoIChubyBiZXNwb2tlIHJvdXRlIGlzIGFkZGVkIC0gdGhlIHNlcnZlciBpcyBoYW5kZWQgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHZpYSBgbWNwU2VydmVyc2AsIHdoaWNoIGBAbWFzdHJhL2V4cHJlc3NgIHNlcnZlcyk6XG4gICAqXG4gICAqIC0gU3RyZWFtYWJsZSBIVFRQOiBgUE9TVCAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L21jcGBcbiAgICogLSBTU0UgKGxlZ2FjeSk6ICAgIGBHRVQgIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vc3NlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tZXNzYWdlc2BcbiAgICpcbiAgICogUmVxdWVzdHMgcnVuIHVuZGVyIHRoZSBzYW1lIEFwcEtpdCBPQk8gc2NvcGUgYXMgdGhlIGNoYXQgcm91dGVzLCBzb1xuICAgKiBhbiBhZ2VudCBpbnZva2VkIG92ZXIgTUNQIHJlc29sdmVzIGl0cyBtb2RlbCBhbmQgdG9vbHMgYXMgdGhlXG4gICAqIGNhbGxpbmcgdXNlci5cbiAgICovXG4gIG1jcD86IGJvb2xlYW4gfCBNYXN0cmFNY3BDb25maWc7XG4gIC8qKlxuICAgKiBIb3cgbXVjaCBvZiB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2AgbWFuYWdlbWVudCBBUEkgaXMgcmVhY2hhYmxlXG4gICAqIHRocm91Z2ggdGhlIHBsdWdpbiBtb3VudC4gYEBtYXN0cmEvZXhwcmVzc2AgcmVnaXN0ZXJzIGl0cyBmdWxsIHJvdXRlXG4gICAqIHRhYmxlIChhZ2VudCBpbmZlcmVuY2UgcGx1cyBhZG1pbiAvIG11dGF0aW5nIHJvdXRlczogZGlyZWN0IHRvb2xcbiAgICogZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5IHJlYWQvd3JpdGUsIHRlbGVtZXRyeSwgbG9ncyxcbiAgICogc2NvcmVzKS4gQXBwS2l0IGFscmVhZHkgYXV0aGVudGljYXRlcyBldmVyeSByZXF1ZXN0IGFzIHRoZSBPQk8gdXNlcixcbiAgICogYnV0IG5vdGhpbmcgdGhlcmUgcmVzdHJpY3RzICp3aGljaCogb2YgdGhvc2Ugb3BlcmF0aW9ucyB0aGUgYnJvd3NlclxuICAgKiBjbGllbnQgbWF5IGludm9rZS5cbiAgICpcbiAgICogLSBgXCJzY29wZWRcImAgKGRlZmF1bHQpOiBvbmx5IHRoZSByb3V0ZXMgdGhlIGNoYXQgY2xpZW50IGxlZ2l0aW1hdGVseVxuICAgKiAgIG5lZWRzIGFyZSBkaXNwYXRjaGVkIHRvIE1hc3RyYSAtIGFnZW50IGluZmVyZW5jZVxuICAgKiAgIChgc3RyZWFtYCAvIGBnZW5lcmF0ZWAgLyBgbmV0d29ya2ApLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXNcbiAgICogICBwbHVnaW4ncyBvd24gT0JPLSBhbmQgcmVzb3VyY2Utc2NvcGVkIGAvcm91dGUvKmAgcm91dGVzIChoaXN0b3J5IC9cbiAgICogICB0aHJlYWRzKSwgYW5kLCB3aGVuIHtAbGluayBtY3B9IGlzIGVuYWJsZWQsIHRoZSBNQ1AgdHJhbnNwb3J0LlxuICAgKiAgIEV2ZXJ5dGhpbmcgZWxzZSAodG9vbCBleGVjdXRpb24sIHdvcmtmbG93IGNvbnRyb2wsIHJhdyBtZW1vcnksXG4gICAqICAgdGVsZW1ldHJ5LCBsb2dzLCBzY29yZXMsIGFuZCBvdGhlciBtdXRhdGlvbnMpIGlzIHJlamVjdGVkIHdpdGhcbiAgICogICBgNDAzYCBiZWZvcmUgaXQgcmVhY2hlcyBNYXN0cmEuXG4gICAqIC0gYFwiZnVsbFwiYDogZGlzcGF0Y2ggdGhlIGVudGlyZSBzdG9jayBNYXN0cmEgQVBJLiBVc2Ugb25seSBmb3IgYVxuICAgKiAgIHRydXN0ZWQgZmlyc3QtcGFydHkgY29uc29sZSB0aGF0IGdlbnVpbmVseSBuZWVkcyB0aGUgbWFuYWdlbWVudFxuICAgKiAgIHN1cmZhY2UuXG4gICAqL1xuICBhcGlBY2Nlc3M/OiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKlxuICAgKiBXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IHRoZSBhZ2VudHMnIHdvcmtzcGFjZSBjYWxscyBydW4gYXM6IHRoZVxuICAgKiBzZXJ2aW5nLWVuZHBvaW50IGNhdGFsb2d1ZSBiZWhpbmQgdGhlIG1vZGVsIHBpY2tlciwgR2VuaWUgc3VnZ2VzdGlvbnMsXG4gICAqIGBhc2tfZ2VuaWVgLCBhbmQgdGhlIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2ggYmVoaW5kIGEgYFtkYXRhOjxpZD5dYFxuICAgKiBlbWJlZC4gRmFsbHMgYmFjayB0byBgTUFTVFJBX0dFTklFX0lERU5USVRZYCwgdGhlbiBgXCJ1c2VyXCJgLlxuICAgKlxuICAgKiBPbi1iZWhhbGYtb2YgKE9CTykgYXV0aCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIGEgbWVtYmVyIG9mIHRoZVxuICAgKiBXT1JLU1BBQ0UsIG5vdCBqdXN0IG9mIHRoZSBEYXRhYnJpY2tzIGFjY291bnQuIEFuIGFwcCBzaGFyZWQgd2l0aCBhblxuICAgKiBhY2NvdW50LWxldmVsIGdyb3VwIGNhbiBiZSBvcGVuZWQgYnkgc29tZW9uZSB3aG9zZSB0b2tlbiBpcyB2YWxpZCBidXQgd2hvc2VcbiAgICogZXZlcnkgd29ya3NwYWNlIGNhbGwgZmFpbHMgd2l0aCBgVW5hdXRob3JpemVkIGFjY2VzcyB0byBPcmc6IDxpZD5gIC0gYW5kXG4gICAqIGdyYW50aW5nIHdvcmtzcGFjZSBtZW1iZXJzaGlwIGlzIG5vdCBhbHdheXMgcG9zc2libGUsIHNpbmNlIGEgd29ya3NwYWNlXG4gICAqIGNhcHMgbWVtYmVyc2hpcCB3ZWxsIGJlbG93IHRoZSBzaXplIG9mIGEgbGFyZ2UgYWNjb3VudCdzIHVzZXIgZ3JvdXAuIFRoZVxuICAgKiBhcHAncyBzZXJ2aWNlIHByaW5jaXBhbCBhbHJlYWR5IGhvbGRzIHRoZSBncmFudHMgdGhlIGFwcCB3YXMgZGVwbG95ZWQgd2l0aC5cbiAgICpcbiAgICogLSBgXCJ1c2VyXCJgIChkZWZhdWx0KTogYWx3YXlzIE9CTy4gUGVyLXVzZXIgYXR0cmlidXRpb24sIGFuZCBHZW5pZSAvIFVuaXR5XG4gICAqICAgQ2F0YWxvZyByb3cgZmlsdGVycyBhcHBseSBwZXIgdXNlci4gQ29ycmVjdCB3aGVuIGV2ZXJ5IGNhbGxlciBpcyBhXG4gICAqICAgd29ya3NwYWNlIG1lbWJlci5cbiAgICogLSBgXCJzZXJ2aWNlLXByaW5jaXBhbFwiYDogYWx3YXlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwuIE5lZWRzIG5vIE9CT1xuICAgKiAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIGF0IHRoZSBjb3N0IG9mXG4gICAqICAgcGVyLXVzZXIgYXR0cmlidXRpb24gaW4gR2VuaWUgLyBVbml0eSBDYXRhbG9nLlxuICAgKiAtIGBcImF1dG9cImA6IE9CTyB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgYW4gT0JPIHRva2VuLCB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAgICogICB3aGVuIGl0IGRvZXMgbm90LiBGb3IgYW4gYXBwIHNlcnZpbmcgQk9USCB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBhbmQgYVxuICAgKiAgIGRvb3IgdGhhdCBoYXMgbm8gdG9rZW4gdG8gZm9yd2FyZCAtIGEgYEBkYngtdG9vbHMvdHVubmVsYCBnYXRlLCBhXG4gICAqICAgc2VwYXJhdGVseSBhdXRoZW50aWNhdGVkIHdlYmhvb2sgb3IgYm90IGNoYW5uZWwgLSB3aGVyZSBBcHBLaXQncyBgYXNVc2VyYFxuICAgKiAgIHdvdWxkIG90aGVyd2lzZSB0aHJvdyBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZVxuICAgKiAgIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlLXByaW5jaXBhbCBwYXRoIGNoYW5nZXMgb25seSB0aGUgRGF0YWJyaWNrcyBDUkVERU5USUFMLiBNZW1vcnlcbiAgICogdGhyZWFkcywgdGhlIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhIHN0aWxsIGtleSBvZmYgdGhlXG4gICAqIGZvcndhcmRlZCB1c2VyLCBzbyBjYWxsZXJzIHNoYXJpbmcgdGhlIHNlcnZpY2UgcHJpbmNpcGFsJ3MgZGF0YSBhY2Nlc3Mga2VlcFxuICAgKiBzZXBhcmF0ZSBjb252ZXJzYXRpb25zIGFuZCBjYW5ub3QgcmVhZCBlYWNoIG90aGVyJ3MgdGhyZWFkcyBvciBjaGFydHMuXG4gICAqIERpcmVjdCBHZW5pZSBjaGF0IGRvZXMgbm90IHVzZSB0aGlzIG9wdGlvbjogaXRzIGNvbnZlcnNhdGlvbnMgYW5kIG1lc3NhZ2VzXG4gICAqIGFsd2F5cyBydW4gdW5kZXIgQXBwS2l0IE9CTyBzbyBHZW5pZSByZW1haW5zIHRoZSBwZXItdXNlciBzdGF0ZSBvd25lci5cbiAgICpcbiAgICogQGV4YW1wbGUgQW4gYXBwIGFueSBhY2NvdW50IHVzZXIgY2FuIG9wZW5cbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHsgZ2VuaWVJZGVudGl0eTogXCJzZXJ2aWNlLXByaW5jaXBhbFwiLCBnZW5pZVNwYWNlczogeyBkZWZhdWx0OiBzcGFjZUlkIH0gfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBPbmUgYXBwIGJlaGluZCBib3RoIHRoZSBmcm9udCBkb29yIGFuZCBhIHB1YmxpYyB0dW5uZWxcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHsgZ2VuaWVJZGVudGl0eTogXCJhdXRvXCIsIGdlbmllU3BhY2VzOiB7IGRlZmF1bHQ6IHNwYWNlSWQgfSB9KTtcbiAgICogYGBgXG4gICAqL1xuICBnZW5pZUlkZW50aXR5PzogSWRlbnRpdHlNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGNoYXJ0cyBwcm9kdWNlZCBieSB0aGUgYnVpbHQtaW5cbiAgICogYHJlbmRlcl9kYXRhYCAvIGBwcmVwYXJlX2NoYXJ0YCB0b29scy4gV2hlbiBzZXQsIHRoZSBjaGFydCBwbGFubmVyJ3NcbiAgICogRWNoYXJ0cyBvdXRwdXQgaXMgdGhlbWVkIHdpdGggdGhlIGJyYW5kJ3MgcGFsZXR0ZSAoc2VyaWVzIGNvbG9ycyBkZXJpdmVkXG4gICAqIGZyb20gYGNvbG9ycy5wcmltYXJ5YCAvIGBjb2xvcnMuYWNjZW50YCkgYW5kIHNhbnMgZm9udFxuICAgKiAoYHR5cG9ncmFwaHkuc2Fuc2ApIGluc3RlYWQgb2YgRWNoYXJ0cycgZGVmYXVsdHMuIE9taXQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIEVjaGFydHMgbG9vay5cbiAgICpcbiAgICogUGFzcyB0aGUgcG9ydGFibGUge0BsaW5rIEJyYW5kQ29udGV4dH0gc2hhcmVkIGFjcm9zcyB0aGUgVUkgYW5kXG4gICAqIGxpYnJhcmllcyAoZS5nLiBgYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dGAgZnJvbSBgQGRieC10b29scy9zaGFyZWQtY29yZWAsXG4gICAqIG9yIGEgY3VzdG9tZXIgYnJhbmQpIC0gdGhlIHNhbWUgb2JqZWN0IHRoZSBlbWFpbCBhZGQtb24gYW5kIHRoZSBVSVxuICAgKiBgQnJhbmRQcm92aWRlcmAgY29uc3VtZSwgc28gYSBob3N0IHRoZW1lcyBjaGFydHMsIGVtYWlsLCBhbmQgVUkgZnJvbSBvbmVcbiAgICogc291cmNlLlxuICAgKi9cbiAgYnJhbmQ/OiBCcmFuZENvbnRleHQ7XG4gIC8qKlxuICAgKiBSZW1vdGUgQWdlbnQtU2tpbGwgc291cmNlcyBtYXRlcmlhbGl6ZWQgb25jZSBhdCBhcHAgc3RhcnR1cC4gQSBzaW5nbGVcbiAgICogc291cmNlLCBhIGxpc3QsIG9yIGEgYHsgc291cmNlcywgZmFpbE9uRXJyb3I/LCAuLi4gfWAgYmFnLlxuICAgKlxuICAgKiBFYWNoIHNvdXJjZSBpcyBhIEdpdEh1YiBgb3duZXIvcmVwb2AsIGEgZ2l0IC8gR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3RcbiAgICogYFNLSUxMLm1kYCAvIGFyY2hpdmUgZG93bmxvYWQgVVJMLiBSZXNvbHV0aW9uIHByZWZlcnMgdGhlIE9QVElPTkFMIGBza2lsbHNgXG4gICAqIG5wbSBDTEkgKGEgcGVlciBkZXApIHdoaWNoIGlzIGNvcGllZCBpbnRvIGEgdGVtcCBkaXIgYW5kIHRoZW4gcGVyc2lzdGVkO1xuICAgKiB3aXRob3V0IGl0LCBhIFVSTCBzb3VyY2UgaXMgZmV0Y2hlZCBkaXJlY3RseS4gQSBzb3VyY2UgdGhhdCByZXNvbHZlc1xuICAgKiB0aHJvdWdoIG5laXRoZXIgZmFpbHMgc3RhcnR1cCB1bmxlc3MgYGZhaWxPbkVycm9yOiBmYWxzZWAuXG4gICAqXG4gICAqIEFJIFRvb2xzIGlzIGNhY2hlZCBkYWlseSB3aXRoIGBAZGJ4LXRvb2xzL2NhY2hlYCBhbmQgc2VydmVkIHRvIGV2ZXJ5XG4gICAqIGF1dG8tY3JlYXRlZCB3b3Jrc3BhY2UgZnJvbSB0aGUgc2hhcmVkIGAvLmRhdGFicmlja3Mvc2tpbGxzYCBtZW1vcnkgbW91bnQuXG4gICAqIE90aGVyIHNvdXJjZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIERhdGFicmlja3MgdXNlcidzIEFzc2lzdGFudCBza2lsbHMgZm9sZGVyXG4gICAqIHdoZW4gd3JpdGFibGUsIHdpdGggYSByZWFkLW9ubHkgbG9jYWwtbWVtb3J5IGZhbGxiYWNrLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyByZW1vdGVTa2lsbHM6IFwidmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIgfSk7XG4gICAqIG1hc3RyYSh7XG4gICAqICAgcmVtb3RlU2tpbGxzOiB7XG4gICAqICAgICBzb3VyY2VzOiBbXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiwgXCJodHRwczovL2V4YW1wbGUuY29tL3NraWxsLm1kXCJdLFxuICAgKiAgICAgZmFpbE9uRXJyb3I6IGZhbHNlLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW90ZVNraWxscz86IFJlbW90ZVNraWxsc09wdGlvbjtcbiAgLyoqIFJlYWQtb25seSBsb2NhbCBza2lsbCB0cmVlcyBtb3VudGVkIGZvciBmaWxlcywgc2VhcmNoYWJsZSBieSBwYXRoLCBhbmQgcGFzc2VkIGFzIHN0YW5kYXJkIGFnZW50LWxldmVsIHNraWxscy4gKi9cbiAgbG9jYWxTa2lsbE1vdW50cz86IExvY2FsU2tpbGxNb3VudFtdO1xufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAsIG1pcnJvcmluZyB0aGVcbiAqIGRvY3VtZW50ZWQgZGVmYXVsdHMgYW5kIGVudmlyb25tZW50IGZhbGxiYWNrcyBvZiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfS5cbiAqXG4gKiBDb3ZlcnMgdGhlIEpTT04tZXhwcmVzc2libGUgb3B0aW9ucyBvbmx5LiBgYWdlbnRzYCwgYHRvb2xzYCwgYW5kIGFcbiAqIGBkZWZhdWx0TW9kZWxgIHBhc3NlZCBhcyBhIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50YCBhcmUgY29kZS1kZWZpbmVkXG4gKiAoZnVuY3Rpb25zIC8gY2xhc3MgaW5zdGFuY2VzKSwgc28gdGhleSBjYXJyeSBubyBzY2hlbWEgZW50cnk7IHRoZVxuICogYGRlZmF1bHRNb2RlbGAgcHJvcGVydHkgYmVsb3cgZGVzY3JpYmVzIGl0cyBzdHJpbmcgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9DT05GSUdfU0NIRU1BOiBDb25maWdTY2hlbWEgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBiYWNrZ3JvdW5kVHVybnM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUnVuIHR1cm5zIHRocm91Z2ggTWFzdHJhIGV2ZW50ZWQgZHVyYWJsZSBleGVjdXRpb24gc28gdGhleSBjb250aW51ZSBhZnRlciBicm93c2VyIGRpc2Nvbm5lY3RzIGFuZCByZW1haW4gcmVjb25uZWN0YWJsZSBieSBydW4gaWQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBwcm92aWRlcklkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdBSSBTREsgcHJvdmlkZXItb3B0aW9ucyBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIFwib3BlbmFpXCIuJyxcbiAgICB9LFxuICAgIHJlbW90ZVNraWxsczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYXJyYXlcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1JlbW90ZSBBZ2VudC1Ta2lsbCBzb3VyY2VzIHByb3Zpc2lvbmVkIGF0IHN0YXJ0dXAgYW5kIHBhc3NlZCB0aHJvdWdoIE1hc3RyYSBzdGFuZGFyZCBhZ2VudC1sZXZlbCBza2lsbCB0b29sczogXCJhaXRvb2xzXCIgZm9yIERhdGFicmlja3NcXCcgb3duIHNraWxsIHNldCwgYSBHaXRIdWIgb3duZXIvcmVwbywgYSBnaXQvR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3QgU0tJTEwubWQvYXJjaGl2ZSBVUkwuIFNvdXJjZXMgcmV0YWluIGEgcHJvY2Vzcy1tZW1vcnkgY29weSBldmVuIHdoZW4gcGVyc2lzdGVkIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIgQXNzaXN0YW50IHNraWxscyBmb2xkZXIuJyxcbiAgICB9LFxuICAgIHN0b3JhZ2U6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcyAvIG1lc3NhZ2VzLiBgdHJ1ZWAgZGVyaXZlcyBhIGRlZGljYXRlZCBsaWZlY3ljbGUtaXNvbGF0ZWQgc2VydmljZS1wcmluY2lwYWwgcG9vbCBmcm9tIHRoZSBgbGFrZWJhc2VgIHBsdWdpbjsgYW4gb2JqZWN0IG9wZW5zIGEgc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIG1lbW9yeToge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgc2VtYW50aWMgcmVjYWxsLiBgdHJ1ZWAgZGVyaXZlcyBhIGRlZGljYXRlZCBsaWZlY3ljbGUtaXNvbGF0ZWQgc2VydmljZS1wcmluY2lwYWwgcG9vbCBmcm9tIHRoZSBgbGFrZWJhc2VgIHBsdWdpbjsgYW4gb2JqZWN0IG9wZW5zIGEgc2VwYXJhdGVseSBjb25maWd1cmVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIGNvZGVNb2RlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0V4cG9zZSBleGVjdXRhYmxlIHJlcXVlc3QgdG9vbHMgdGhyb3VnaCBuYXRpdmUgTWFzdHJhIENvZGUgTW9kZSBmb3IgVHlwZVNjcmlwdCBiYXRjaGluZywgYWdncmVnYXRpb24sIGFuZCBhcml0aG1ldGljLiBEZWZhdWx0cyB0byBmYWxzZS4gVXNlIFwiYXV0b1wiIHRvIHNlbGVjdCBhbiBpbnN0YWxsZWQgc3VwcG9ydGVkIG9wdGlvbmFsIHRyYW5zcG9ydCBvciBzdGF5IGRpc2FibGVkLCBcImlzb2xhdGVkLXZtXCIgdG8gcmVxdWlyZSB0aGUgbmF0aXZlIHRyYW5zcG9ydCwgXCJxdWlja2pzXCIgdG8gcmVxdWlyZSB0aGUgcG9ydGFibGUgdHJhbnNwb3J0LCBvciBhbiBvYmplY3Qgd2l0aCB0cmFuc3BvcnQgcGx1cyBpZCBhbmQgdGltZW91dC4gTmVpdGhlciB0cmFuc3BvcnQgcnVucyB0aHJvdWdoIHRoZSB3b3Jrc3BhY2UgY29tbWFuZCBzYW5kYm94LicsXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdDb21tYW5kIHNhbmRib3ggZm9yIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzLiBEZWZhdWx0cyB0byBNb250eS4gRmFsc2UgZGlzYWJsZXMgY29tbWFuZCBleGVjdXRpb247IHRydWUgb3IgXCJtb250eVwiIHNlbGVjdHMgTW9udHk7IGFuIGV4cGxpY2l0IHNhbmRib3ggb3IgcmVzb2x2ZXIgc3VwcGxpZXMgYW5vdGhlciB0cmFuc3BvcnQuJyxcbiAgICB9LFxuICAgIHdvcmtzcGFjZUZhbGxiYWNrVG9UbXA6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQWRkIHVzZXItc2NvcGVkIC90bXAgdG8gYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMgb25seSB3aGVuIG5vIGNvbmZpZ3VyZWQgRGF0YWJyaWNrcyBwYXRoIG1vdW50cyB3cml0YWJsZS4gRGVmYXVsdHMgdG8gZmFsc2UuXCIsXG4gICAgfSxcbiAgICB3b3Jrc3BhY2VTa2lsbHM6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJVc2UgTWFzdHJhJ3MgbmF0aXZlIG9uLWRlbWFuZCB3b3Jrc3BhY2Ugc2tpbGwgc2VhcmNoIGFuZCB3cml0YWJsZSBza2lsbCBzYXZlcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHdvcmtzcGFjZVRvb2xzOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgdG9vbCBjb25maWd1cmF0aW9uIGZvciBhdmFpbGFiaWxpdHksIGFwcHJvdmFscywgcmVhZC1iZWZvcmUtd3JpdGUsIG91dHB1dCBsaW1pdHMsIGFuZCBob29rcy5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRBZ2VudDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFnZW50IGlkIHVzZWQgd2hlbiB0aGUgY2xpZW50IG5hbWVzIG5vbmUuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCByZWdpc3RlcmVkIGFnZW50LCBlbHNlIHRoZSBidWlsdC1pbiBgZGVmYXVsdGAuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTZXJ2aW5nIGVuZHBvaW50IGFwcGxpZWQgdG8gZXZlcnkgYWdlbnQgdGhhdCBvbWl0cyBpdHMgb3duIG1vZGVsLiBGYWxscyBiYWNrIHRvIERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FLCB0aGVuIHRoZSBoaWdoZXN0LXJhbmtlZCBjdXJyZW50bHkgYXZhaWxhYmxlIGNhdGFsb2d1ZSBlbmRwb2ludC5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRNb2RlbEZhbGxiYWNrczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJpb3JpdHktb3JkZXJlZCBlbmRwb2ludCBuYW1lcyB0cmllZCBiZWZvcmUgdGhlIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlIHdoZW4gbm90aGluZyBlbHNlIHBpbnMgYSBtb2RlbC5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlNYXRjaDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eVRocmVzaG9sZDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZnV6enkgbWF0Y2hlciwgMCAoZXhhY3QpIHRvIDEgKGFueXRoaW5nKS4gRGVmYXVsdHMgdG8gMC40LlwiLFxuICAgIH0sXG4gICAgbW9kZWxDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVFRMIGluIG1zIGZvciB0aGUgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgcGVyIHdvcmtzcGFjZSBob3N0LiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBtb2RlbE92ZXJyaWRlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkhvbm9yIGEgcGVyLXJlcXVlc3QgbW9kZWwgb3ZlcnJpZGUgZnJvbSB0aGUgWC1NYXN0cmEtTW9kZWwgaGVhZGVyLCA/bW9kZWw9IHF1ZXJ5LCBvciBhIGBtb2RlbGAgYm9keSBmaWVsZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VzOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogW1wic3RyaW5nXCIsIFwib2JqZWN0XCJdIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJHZW5pZSBzcGFjZXMgdGhlIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8sIGtleWVkIGJ5IGFsaWFzICh0aGUgdG9vbC1uYW1lIHN1ZmZpeCkuIEVhY2ggdmFsdWUgaXMgYSBzcGFjZSBpZCBvciBgeyBzcGFjZUlkLCBoaW50IH1gLiBGYWxscyBiYWNrIHRvIHRoZSBgZ2VuaWVgIHBsdWdpbidzIG93biBgc3BhY2VzYCBjb25maWcsIHRoZW4gREFUQUJSSUNLU19HRU5JRV9TUEFDRV9JRCB1bmRlciB0aGUgYGRlZmF1bHRgIGFsaWFzLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVBZ2VudE1vZGU6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkgZm9yIGFnZW50LWJhY2tlZCBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy4gRGlyZWN0IEdlbmllIGNoYXQgYWx3YXlzIHJlcXVpcmVzIEFnZW50IE1vZGUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRUTCBpbiBtcyBmb3IgdGhlIEdlbmllIHNwYWNlIG1ldGFkYXRhIGNhY2hlLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBhZ2VudE1heFN0ZXBzOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuIChhIHRvb2wgY2FsbCBhbmQgdGhlIGZpbmFsIHJlcGx5IGVhY2ggY29uc3VtZSBvbmUpLiBEZWZhdWx0cyB0byAyNS5cIixcbiAgICB9LFxuICAgIGZvbGxvd1VwU3VnZ2VzdGlvbnM6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ09wdGlvbmFsIHBvc3QtdHVybiBmb2xsb3ctdXBzLiBUcnVlIHNlbGVjdHMgc291cmNlcyBhdXRvbWF0aWNhbGx5OyBcImdlbmVyYXRlZFwiIG9yIFwiZ2VuaWVcIiBwaW5zIG9uZSBzb3VyY2U7IGFuIG9iamVjdCBhZGRzIGEgbGltaXQsIHRpbWVvdXQsIGFuZCBvcHRpb25hbCB0b29sIGV4cG9zdXJlLiBEZWZhdWx0cyBvZmYuJyxcbiAgICB9LFxuICAgIHN0cmlwU3RhbGVDaGFydHM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3RyaXAgY2hhcnRJZHMgZnJvbSByZWNhbGxlZCBhc3Npc3RhbnQgdG9vbCByZXN1bHRzIHNvIHRoZSBtb2RlbCBjYW5ub3QgcmV1c2UgYSB0dXJuLXNjb3BlZCBjaGFydCBtYXJrZXIuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBzdHlsZUluc3RydWN0aW9uczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBpbnN0cnVjdGlvbnMuIEEgc3RyaW5nIHJlcGxhY2VzIHRoZSBidWlsdC1pbiBibG9jaywgYGZhbHNlYCBkaXNhYmxlcyBpdC5cIixcbiAgICB9LFxuICAgIG9ic2VydmFiaWxpdHk6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQnJpZGdlIE1hc3RyYSBzcGFucyBpbnRvIEFwcEtpdCdzIE9UZWwgcGlwZWxpbmUuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgb3IgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCBpcyBzZXQuXCIsXG4gICAgfSxcbiAgICBmZWVkYmFja01vZGU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJhdXRvXCIsIFwiZ2VuaWVcIiwgXCJtbGZsb3dcIiwgXCJub25lXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmVlZGJhY2sgZGVzdGluYXRpb24uIEF1dG8gcHJlZmVycyBHZW5pZSBpbiBHZW5pZSBBZ2VudCBNb2RlLCBvdGhlcndpc2UgTUxmbG93IHdoZW4gY29uZmlndXJlZCwgb3RoZXJ3aXNlIG5vbmUuIEV4cGxpY2l0IHVuYXZhaWxhYmxlIG1vZGVzIGZhaWwgc3RhcnR1cC5cIixcbiAgICB9LFxuICAgIG1jcDoge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkV4cG9zZSB0aGUgcmVnaXN0ZXJlZCBhZ2VudHMgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGFnZW50cy1vbmx5OyBhbiBvYmplY3QgdHVuZXMgdGhlIHNlcnZlciBpZCwgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoZXRoZXIgYW1iaWVudCB0b29scyBhcmUgZXhwb3NlZC5cIixcbiAgICB9LFxuICAgIGdlbmllSWRlbnRpdHk6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAvLyBEZXJpdmVkIGZyb20gdGhlIHJlc29sdmVyJ3Mgb3duIGxpc3QsIHNvIGEgbW9kZSBjYW4gbmV2ZXIgYmUgYWNjZXB0ZWQgYXRcbiAgICAgIC8vIHJ1bnRpbWUgd2hpbGUgdGhlIHB1Ymxpc2hlZCBzY2hlbWEgKGFuZCB0aGUgVUkgYnVpbHQgZnJvbSBpdCkgb21pdHMgaXQuXG4gICAgICBlbnVtOiBbLi4uSURFTlRJVFlfTU9ERVNdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IGFnZW50LWJhY2tlZCB3b3Jrc3BhY2UgY2FsbHMgKHNlcnZpbmcgY2F0YWxvZ3VlLCBHZW5pZSwgc3RhdGVtZW50IGV4ZWN1dGlvbikgcnVuIGFzLiBEaXJlY3QgR2VuaWUgY2hhdCBhbHdheXMgdXNlcyBPQk8uIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { errorUtils, hash, object } from "@dbx-tools/shared-core";
6
+ import { errorMessage, id, isRecord } from "@dbx-tools/shared-core";
7
7
  import { createRequestContext } from "./server.js";
8
8
  /** Drive AppKit evaluations through Mastra without reducing a chat stream. */
9
9
  export function createMastraEvalDriver(agent, options = {}) {
10
10
  const resourceId = options.resourceId ?? `eval:${agent.id}`;
11
11
  const requestContextFactory = options.createRequestContext ?? createRequestContext;
12
- let threadId = hash.id();
12
+ let threadId = id();
13
13
  return {
14
14
  async send(message, sendOptions) {
15
15
  try {
@@ -20,13 +20,11 @@ export function createMastraEvalDriver(agent, options = {}) {
20
20
  ...(sendOptions?.signal ? { abortSignal: sendOptions.signal } : {}),
21
21
  });
22
22
  const toolCallDetails = result.toolCalls.map((call) => {
23
- const payload = object.isRecord(call.payload)
24
- ? call.payload
25
- : {};
23
+ const payload = isRecord(call.payload) ? call.payload : {};
26
24
  const args = payload.args;
27
25
  return {
28
26
  name: String(payload.toolName ?? ""),
29
- args: object.isRecord(args) ? args : {},
27
+ args: isRecord(args) ? args : {},
30
28
  };
31
29
  });
32
30
  return {
@@ -40,7 +38,7 @@ export function createMastraEvalDriver(agent, options = {}) {
40
38
  }
41
39
  catch (caught) {
42
40
  return {
43
- reply: errorUtils.errorMessage(caught),
41
+ reply: errorMessage(caught),
44
42
  toolCalls: [],
45
43
  toolCallDetails: [],
46
44
  succeeded: false,
@@ -49,8 +47,8 @@ export function createMastraEvalDriver(agent, options = {}) {
49
47
  }
50
48
  },
51
49
  reset() {
52
- threadId = hash.id();
50
+ threadId = id();
53
51
  },
54
52
  };
55
53
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmFsdWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUlsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFhbkQsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsS0FBWSxFQUNaLFVBQW1DLEVBQUU7SUFFckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUM1RCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQztJQUNuRixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFekIsT0FBTztRQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVc7WUFDN0IsSUFBSSxDQUFDO2dCQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDM0MsY0FBYztvQkFDZCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7b0JBQ2xELEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDcEUsQ0FBQyxDQUFDO2dCQUNILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3BELE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ3BFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTzt3QkFDZCxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNQLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQzFCLE9BQU87d0JBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQzt3QkFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtxQkFDeEMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPO29CQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDbEIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ2xELGVBQWU7b0JBQ2YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUztvQkFDNUUsU0FBUyxFQUFFLFFBQVE7b0JBQ25CLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDdkQsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixPQUFPO29CQUNMLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDdEMsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLFNBQVMsRUFBRSxLQUFLO29CQUNoQixTQUFTLEVBQUUsUUFBUTtpQkFDcEIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSztZQUNILFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgZXZhbHVhdGlvbiBkcml2ZXIgZm9yIGFuIGluLXByb2Nlc3MgTWFzdHJhIGFnZW50LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERyaXZlUmVzdWx0LCBFdmFsRHJpdmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBoYXNoLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBBZ2VudCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnRcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCIuL3NlcnZlci50c1wiO1xuXG4vKiogQ29uZmlndXJhdGlvbiBmb3IgYW4gaW4tcHJvY2VzcyBNYXN0cmEgZXZhbHVhdGlvbiBkcml2ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIHtcbiAgLyoqIFN0YWJsZSBtZW1vcnkgcmVzb3VyY2UgdXNlZCBieSBldmVyeSB0dXJuIGZyb20gdGhpcyBkcml2ZXIuICovXG4gIHJlc291cmNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBPdmVycmlkZSByZXF1ZXN0LWNvbnRleHQgY29uc3RydWN0aW9uIGZvciBpc29sYXRlZCBldmFsdWF0aW9uIGVudmlyb25tZW50cy4gKi9cbiAgY3JlYXRlUmVxdWVzdENvbnRleHQ/OiAob3B0aW9uczoge1xuICAgIHRocmVhZElkOiBzdHJpbmc7XG4gICAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICB9KSA9PiBQcm9taXNlPFJlcXVlc3RDb250ZXh0Pjtcbn1cblxuLyoqIERyaXZlIEFwcEtpdCBldmFsdWF0aW9ucyB0aHJvdWdoIE1hc3RyYSB3aXRob3V0IHJlZHVjaW5nIGEgY2hhdCBzdHJlYW0uICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFzdHJhRXZhbERyaXZlcihcbiAgYWdlbnQ6IEFnZW50LFxuICBvcHRpb25zOiBNYXN0cmFFdmFsRHJpdmVyT3B0aW9ucyA9IHt9LFxuKTogRXZhbERyaXZlciB7XG4gIGNvbnN0IHJlc291cmNlSWQgPSBvcHRpb25zLnJlc291cmNlSWQgPz8gYGV2YWw6JHthZ2VudC5pZH1gO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dEZhY3RvcnkgPSBvcHRpb25zLmNyZWF0ZVJlcXVlc3RDb250ZXh0ID8/IGNyZWF0ZVJlcXVlc3RDb250ZXh0O1xuICBsZXQgdGhyZWFkSWQgPSBoYXNoLmlkKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBzZW5kKG1lc3NhZ2UsIHNlbmRPcHRpb25zKTogUHJvbWlzZTxEcml2ZVJlc3VsdD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBhd2FpdCByZXF1ZXN0Q29udGV4dEZhY3RvcnkoeyB0aHJlYWRJZCwgcmVzb3VyY2VJZCB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWdlbnQuZ2VuZXJhdGUobWVzc2FnZSwge1xuICAgICAgICAgIHJlcXVlc3RDb250ZXh0LFxuICAgICAgICAgIG1lbW9yeTogeyB0aHJlYWQ6IHRocmVhZElkLCByZXNvdXJjZTogcmVzb3VyY2VJZCB9LFxuICAgICAgICAgIC4uLihzZW5kT3B0aW9ucz8uc2lnbmFsID8geyBhYm9ydFNpZ25hbDogc2VuZE9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0b29sQ2FsbERldGFpbHMgPSByZXN1bHQudG9vbENhbGxzLm1hcCgoY2FsbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gb2JqZWN0LmlzUmVjb3JkKGNhbGwucGF5bG9hZClcbiAgICAgICAgICAgID8gY2FsbC5wYXlsb2FkXG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICAgIGNvbnN0IGFyZ3MgPSBwYXlsb2FkLmFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IFN0cmluZyhwYXlsb2FkLnRvb2xOYW1lID8/IFwiXCIpLFxuICAgICAgICAgICAgYXJnczogb2JqZWN0LmlzUmVjb3JkKGFyZ3MpID8gYXJncyA6IHt9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcGx5OiByZXN1bHQudGV4dCxcbiAgICAgICAgICB0b29sQ2FsbHM6IHRvb2xDYWxsRGV0YWlscy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgICAgICAgICB0b29sQ2FsbERldGFpbHMsXG4gICAgICAgICAgc3VjY2VlZGVkOiByZXN1bHQuZXJyb3IgPT09IHVuZGVmaW5lZCAmJiByZXN1bHQuc3VzcGVuZFBheWxvYWQgPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRocmVhZElkLFxuICAgICAgICAgIC4uLihyZXN1bHQudHJhY2VJZCA/IHsgdHJhY2VJZDogcmVzdWx0LnRyYWNlSWQgfSA6IHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcGx5OiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpLFxuICAgICAgICAgIHRvb2xDYWxsczogW10sXG4gICAgICAgICAgdG9vbENhbGxEZXRhaWxzOiBbXSxcbiAgICAgICAgICBzdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhyZWFkSWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNldCgpIHtcbiAgICAgIHRocmVhZElkID0gaGFzaC5pZCgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmFsdWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFHSCxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUlwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFhbkQsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsS0FBWSxFQUNaLFVBQW1DLEVBQUU7SUFFckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUM1RCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQztJQUNuRixJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUVwQixPQUFPO1FBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO29CQUMzQyxjQUFjO29CQUNkLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtvQkFDbEQsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNwRSxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDcEQsTUFBTSxPQUFPLEdBQTRCLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDMUIsT0FBTzt3QkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO3dCQUNwQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7cUJBQ2pDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2xCLFNBQVMsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNsRCxlQUFlO29CQUNmLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLFNBQVM7b0JBQzVFLFNBQVMsRUFBRSxRQUFRO29CQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3ZELENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsT0FBTztvQkFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDM0IsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLFNBQVMsRUFBRSxLQUFLO29CQUNoQixTQUFTLEVBQUUsUUFBUTtpQkFDcEIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSztZQUNILFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNsQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBldmFsdWF0aW9uIGRyaXZlciBmb3IgYW4gaW4tcHJvY2VzcyBNYXN0cmEgYWdlbnQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgRHJpdmVSZXN1bHQsIEV2YWxEcml2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IGVycm9yTWVzc2FnZSwgaWQsIGlzUmVjb3JkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcblxuaW1wb3J0IHsgY3JlYXRlUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiLi9zZXJ2ZXIudHNcIjtcblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIGFuIGluLXByb2Nlc3MgTWFzdHJhIGV2YWx1YXRpb24gZHJpdmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFFdmFsRHJpdmVyT3B0aW9ucyB7XG4gIC8qKiBTdGFibGUgbWVtb3J5IHJlc291cmNlIHVzZWQgYnkgZXZlcnkgdHVybiBmcm9tIHRoaXMgZHJpdmVyLiAqL1xuICByZXNvdXJjZUlkPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgcmVxdWVzdC1jb250ZXh0IGNvbnN0cnVjdGlvbiBmb3IgaXNvbGF0ZWQgZXZhbHVhdGlvbiBlbnZpcm9ubWVudHMuICovXG4gIGNyZWF0ZVJlcXVlc3RDb250ZXh0PzogKG9wdGlvbnM6IHtcbiAgICB0aHJlYWRJZDogc3RyaW5nO1xuICAgIHJlc291cmNlSWQ6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTxSZXF1ZXN0Q29udGV4dD47XG59XG5cbi8qKiBEcml2ZSBBcHBLaXQgZXZhbHVhdGlvbnMgdGhyb3VnaCBNYXN0cmEgd2l0aG91dCByZWR1Y2luZyBhIGNoYXQgc3RyZWFtLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hc3RyYUV2YWxEcml2ZXIoXG4gIGFnZW50OiBBZ2VudCxcbiAgb3B0aW9uczogTWFzdHJhRXZhbERyaXZlck9wdGlvbnMgPSB7fSxcbik6IEV2YWxEcml2ZXIge1xuICBjb25zdCByZXNvdXJjZUlkID0gb3B0aW9ucy5yZXNvdXJjZUlkID8/IGBldmFsOiR7YWdlbnQuaWR9YDtcbiAgY29uc3QgcmVxdWVzdENvbnRleHRGYWN0b3J5ID0gb3B0aW9ucy5jcmVhdGVSZXF1ZXN0Q29udGV4dCA/PyBjcmVhdGVSZXF1ZXN0Q29udGV4dDtcbiAgbGV0IHRocmVhZElkID0gaWQoKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHNlbmQobWVzc2FnZSwgc2VuZE9wdGlvbnMpOiBQcm9taXNlPERyaXZlUmVzdWx0PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IGF3YWl0IHJlcXVlc3RDb250ZXh0RmFjdG9yeSh7IHRocmVhZElkLCByZXNvdXJjZUlkIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudC5nZW5lcmF0ZShtZXNzYWdlLCB7XG4gICAgICAgICAgcmVxdWVzdENvbnRleHQsXG4gICAgICAgICAgbWVtb3J5OiB7IHRocmVhZDogdGhyZWFkSWQsIHJlc291cmNlOiByZXNvdXJjZUlkIH0sXG4gICAgICAgICAgLi4uKHNlbmRPcHRpb25zPy5zaWduYWwgPyB7IGFib3J0U2lnbmFsOiBzZW5kT3B0aW9ucy5zaWduYWwgfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRvb2xDYWxsRGV0YWlscyA9IHJlc3VsdC50b29sQ2FsbHMubWFwKChjYWxsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBpc1JlY29yZChjYWxsLnBheWxvYWQpID8gY2FsbC5wYXlsb2FkIDoge307XG4gICAgICAgICAgY29uc3QgYXJncyA9IHBheWxvYWQuYXJncztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogU3RyaW5nKHBheWxvYWQudG9vbE5hbWUgPz8gXCJcIiksXG4gICAgICAgICAgICBhcmdzOiBpc1JlY29yZChhcmdzKSA/IGFyZ3MgOiB7fSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXBseTogcmVzdWx0LnRleHQsXG4gICAgICAgICAgdG9vbENhbGxzOiB0b29sQ2FsbERldGFpbHMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgICAgICAgdG9vbENhbGxEZXRhaWxzLFxuICAgICAgICAgIHN1Y2NlZWRlZDogcmVzdWx0LmVycm9yID09PSB1bmRlZmluZWQgJiYgcmVzdWx0LnN1c3BlbmRQYXlsb2FkID09PSB1bmRlZmluZWQsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aHJlYWRJZCxcbiAgICAgICAgICAuLi4ocmVzdWx0LnRyYWNlSWQgPyB7IHRyYWNlSWQ6IHJlc3VsdC50cmFjZUlkIH0gOiB7fSksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXBseTogZXJyb3JNZXNzYWdlKGNhdWdodCksXG4gICAgICAgICAgdG9vbENhbGxzOiBbXSxcbiAgICAgICAgICB0b29sQ2FsbERldGFpbHM6IFtdLFxuICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aHJlYWRJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgdGhyZWFkSWQgPSBpZCgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { FeedbackMode, FeedbackModeOption } from "@dbx-tools/shared-mastra/feedback";
6
+ import type { FeedbackMode, FeedbackModeOption } from "@dbx-tools/shared-mastra";
7
7
  /** Runtime availability used by automatic feedback selection. */
8
8
  export interface FeedbackAvailability {
9
9
  /** Genie Agent Mode has at least one configured space. */