@cartanova/qgrid-cli 2.4.6 → 2.4.8

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 (73) hide show
  1. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +15 -1
  2. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +12 -4
  3. package/bundle/dist/application/qgrid/qgrid.frame.js +20 -1
  4. package/bundle/dist/application/qgrid/qgrid.types.js +38 -2
  5. package/bundle/dist/application/request-log/request-log.model.js +49 -22
  6. package/bundle/dist/application/request-log-step/request-log-step.types.js +8 -1
  7. package/bundle/dist/application/sonamu.generated.js +37 -1
  8. package/bundle/dist/application/sonamu.generated.sso.js +25 -1
  9. package/bundle/dist/i18n/sd.generated.js +13 -1
  10. package/bundle/dist/migrations/20260718180824_alter_request_logs_add5_alter1.js +20 -0
  11. package/bundle/dist/migrations/20260718180825_alter_request_log_steps_add7_alter1.js +22 -0
  12. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +8 -2
  13. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +6 -3
  14. package/bundle/dist/utils/providers/anthropic/claude-session.js +11 -7
  15. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +117 -7
  16. package/bundle/dist/utils/providers/common/model-cost.js +45 -98
  17. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +68 -0
  18. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +14 -0
  19. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +81 -0
  20. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +16 -9
  21. package/bundle/src/application/qgrid/qgrid.frame.ts +19 -0
  22. package/bundle/src/application/qgrid/qgrid.types.ts +36 -0
  23. package/bundle/src/application/qgrid/tool-emulation.test.ts +1 -0
  24. package/bundle/src/application/request-log/request-log.entity.json +42 -0
  25. package/bundle/src/application/request-log/request-log.model.test.ts +58 -0
  26. package/bundle/src/application/request-log/request-log.model.ts +107 -18
  27. package/bundle/src/application/request-log-step/request-log-step.entity.json +54 -0
  28. package/bundle/src/application/request-log-step/request-log-step.types.ts +7 -0
  29. package/bundle/src/application/sonamu.generated.http +26 -0
  30. package/bundle/src/application/sonamu.generated.sso.ts +24 -0
  31. package/bundle/src/application/sonamu.generated.ts +48 -0
  32. package/bundle/src/i18n/sd.generated.ts +12 -0
  33. package/bundle/src/migrations/20260718180824_alter_request_logs_add5_alter1.ts +25 -0
  34. package/bundle/src/migrations/20260718180825_alter_request_log_steps_add7_alter1.ts +29 -0
  35. package/bundle/src/utils/providers/anthropic/anthropic-constants.test.ts +15 -0
  36. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +11 -2
  37. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +7 -2
  38. package/bundle/src/utils/providers/anthropic/claude-session.test.ts +26 -0
  39. package/bundle/src/utils/providers/anthropic/claude-session.ts +16 -4
  40. package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +131 -0
  41. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +194 -11
  42. package/bundle/src/utils/providers/common/model-cost.test.ts +136 -2
  43. package/bundle/src/utils/providers/common/model-cost.ts +76 -99
  44. package/bundle/src/utils/providers/common/provider-dispatcher.ts +18 -0
  45. package/bundle/web-dist/client/assets/{index-BOXhNo0k.js → index-CmuPjbCl.js} +3 -3
  46. package/bundle/web-dist/client/assets/{logs-BShH_sut.js → logs-cXOsDli3.js} +1 -1
  47. package/bundle/web-dist/client/assets/{monit-CoEAp5S0.js → monit-B5Edhvy-.js} +1 -1
  48. package/bundle/web-dist/client/assets/{routes-Dr3cGnV3.js → routes-UPWScORY.js} +1 -1
  49. package/bundle/web-dist/client/assets/{sd.generated-D2Y9QeiN.js → sd.generated-DYuKzBY6.js} +1 -1
  50. package/bundle/web-dist/client/assets/{services.generated-CmxXl220.js → services.generated-D_SkWOo-.js} +1 -1
  51. package/bundle/web-dist/client/assets/show-pRp-eZIK.js +30 -0
  52. package/bundle/web-dist/client/assets/{tokens-hP1NecIg.js → tokens-DJlttxCM.js} +1 -1
  53. package/bundle/web-dist/client/assets/{use-update-token-mutation-6J1T9U2-.js → use-update-token-mutation-CpFGLWUl.js} +1 -1
  54. package/bundle/web-dist/client/index.html +2 -2
  55. package/bundle/web-dist/server/assets/{lazyRouteComponent-BlfOh9S3.js → lazyRouteComponent-Cu6IkL8A.js} +1 -1
  56. package/bundle/web-dist/server/assets/{logs-DYly4ipQ.js → logs-Dx2knN2T.js} +10 -7
  57. package/bundle/web-dist/server/assets/{monit-CYyY2S2f.js → monit-DU6PLatf.js} +2 -2
  58. package/bundle/web-dist/server/assets/{routes-Dqu3osXt.js → routes-CTco1oJZ.js} +3 -3
  59. package/bundle/web-dist/server/assets/{sd.generated-CE6D5clm.js → sd.generated-qzuRe35X.js} +12 -0
  60. package/bundle/web-dist/server/assets/{services.generated-DyZUzXiq.js → services.generated-C8q1M41a.js} +1 -1
  61. package/bundle/web-dist/server/assets/{show-BDul8xLb.js → show-B3q8_GDh.js} +47 -4
  62. package/bundle/web-dist/server/assets/{tokens-fzMW4G74.js → tokens-Bvjn15h9.js} +3 -3
  63. package/bundle/web-dist/server/assets/{use-update-token-mutation-BejUW5sw.js → use-update-token-mutation-BlZo6swF.js} +1 -1
  64. package/bundle/web-dist/server/entry-server.generated.js +8 -8
  65. package/package.json +2 -2
  66. package/skills/qgrid/SKILL.md +4 -0
  67. package/skills/qgrid/references/ai-sdk-provider-contract.md +30 -2
  68. package/skills/qgrid/references/anthropic-claude-code-runtime.md +43 -5
  69. package/skills/qgrid/references/decision-rationale.md +2 -0
  70. package/skills/qgrid/references/prompt-cache-and-usage.md +4 -1
  71. package/skills/qgrid/references/request-log-run-lifecycle.md +6 -2
  72. package/skills/qgrid/references/sonamu-api-web-flow.md +13 -0
  73. package/bundle/web-dist/client/assets/show-CXII6Iy7.js +0 -30
@@ -0,0 +1,22 @@
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ //#region src/migrations/20260718180825_alter_request_log_steps_add7_alter1.ts
3
+ async function up(knex) {
4
+ await knex.schema.alterTable("request_log_steps", (table) => {
5
+ table.integer("cache_creation_1h_tokens").nullable();
6
+ table.integer("cache_creation_5m_tokens").nullable();
7
+ table.string("cost_source", 20).nullable();
8
+ table.integer("cost_usd").nullable();
9
+ table.integer("fallback_count").nullable();
10
+ table.string("model_name", 50).nullable();
11
+ table.string("requested_model_name", 50).nullable();
12
+ });
13
+ }
14
+ async function down(knex) {
15
+ await knex.schema.alterTable("request_log_steps", (table) => {
16
+ table.dropColumns("cache_creation_1h_tokens", "cache_creation_5m_tokens", "cost_source", "cost_usd", "fallback_count", "model_name", "requested_model_name");
17
+ });
18
+ }
19
+ //#endregion
20
+ export { down, up };
21
+
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNjA3MTgxODA4MjVfYWx0ZXJfcmVxdWVzdF9sb2dfc3RlcHNfYWRkN19hbHRlcjEuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbnMvMjAyNjA3MTgxODA4MjVfYWx0ZXJfcmVxdWVzdF9sb2dfc3RlcHNfYWRkN19hbHRlcjEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIsICh0YWJsZSkgPT4ge1xuICAgIC8vIGFkZFxuICAgIHRhYmxlLmludGVnZXIoXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIikubnVsbGFibGUoKTtcbiAgICB0YWJsZS5pbnRlZ2VyKFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIpLm51bGxhYmxlKCk7XG4gICAgdGFibGUuc3RyaW5nKFwiY29zdF9zb3VyY2VcIiwgMjApLm51bGxhYmxlKCk7XG4gICAgdGFibGUuaW50ZWdlcihcImNvc3RfdXNkXCIpLm51bGxhYmxlKCk7XG4gICAgdGFibGUuaW50ZWdlcihcImZhbGxiYWNrX2NvdW50XCIpLm51bGxhYmxlKCk7XG4gICAgdGFibGUuc3RyaW5nKFwibW9kZWxfbmFtZVwiLCA1MCkubnVsbGFibGUoKTtcbiAgICB0YWJsZS5zdHJpbmcoXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLCA1MCkubnVsbGFibGUoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIsICh0YWJsZSkgPT4ge1xuICAgIC8vIHJvbGxiYWNrIC0gYWRkXG4gICAgdGFibGUuZHJvcENvbHVtbnMoXG4gICAgICBcImNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICAgIFwibW9kZWxfbmFtZVwiLFxuICAgICAgXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgICk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUVBLGVBQXNCLEdBQUcsTUFBMkI7QUFDbEQsT0FBTSxLQUFLLE9BQU8sV0FBVyxzQkFBc0IsVUFBVTtBQUUzRCxRQUFNLFFBQVEsMkJBQTJCLENBQUMsVUFBVTtBQUNwRCxRQUFNLFFBQVEsMkJBQTJCLENBQUMsVUFBVTtBQUNwRCxRQUFNLE9BQU8sZUFBZSxHQUFHLENBQUMsVUFBVTtBQUMxQyxRQUFNLFFBQVEsV0FBVyxDQUFDLFVBQVU7QUFDcEMsUUFBTSxRQUFRLGlCQUFpQixDQUFDLFVBQVU7QUFDMUMsUUFBTSxPQUFPLGNBQWMsR0FBRyxDQUFDLFVBQVU7QUFDekMsUUFBTSxPQUFPLHdCQUF3QixHQUFHLENBQUMsVUFBVTtHQUNuRDs7QUFHSixlQUFzQixLQUFLLE1BQTJCO0FBQ3BELE9BQU0sS0FBSyxPQUFPLFdBQVcsc0JBQXNCLFVBQVU7QUFFM0QsUUFBTSxZQUNKLDRCQUNBLDRCQUNBLGVBQ0EsWUFDQSxrQkFDQSxjQUNBLHVCQUNEO0dBQ0QifQ==
@@ -29,11 +29,14 @@ function hasOneMillionSuffix(model) {
29
29
  return model !== void 0 && ONE_MILLION_SUFFIX_RE.test(model);
30
30
  }
31
31
  const ONE_MILLION_CONTEXT_MODELS = new Set([
32
+ "claude-fable-5",
33
+ "claude-sonnet-5",
32
34
  "claude-sonnet-4-6",
33
35
  "claude-opus-4-6",
34
36
  "claude-opus-4-8"
35
37
  ]);
36
38
  const CLI_ONE_MILLION_SUFFIX_MODELS = new Set(["claude-sonnet-4-6", "claude-opus-4-6"]);
39
+ const ALWAYS_ADAPTIVE_THINKING_MODELS = new Set(["claude-fable-5"]);
37
40
  for (const model of CLI_ONE_MILLION_SUFFIX_MODELS) if (!ONE_MILLION_CONTEXT_MODELS.has(model)) throw new Error(`[invariant] CLI 1M suffix model not in context set: ${model}`);
38
41
  function supports1MContext(model) {
39
42
  return ONE_MILLION_CONTEXT_MODELS.has(canonicalAnthropicModel(model));
@@ -41,11 +44,14 @@ function supports1MContext(model) {
41
44
  function needsCli1mSuffix(model) {
42
45
  return CLI_ONE_MILLION_SUFFIX_MODELS.has(canonicalAnthropicModel(model));
43
46
  }
47
+ function requiresAdaptiveThinking(model) {
48
+ return ALWAYS_ADAPTIVE_THINKING_MODELS.has(canonicalAnthropicModel(model));
49
+ }
44
50
  function assertSupportedOneMillionSuffix(model) {
45
51
  if (!hasOneMillionSuffix(model)) return;
46
52
  if (!supports1MContext(canonicalAnthropicModel(model))) throw new Error(`Unsupported Anthropic 1M model suffix: ${model}`);
47
53
  }
48
54
  //#endregion
49
- export { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_CONFIG_DIR_BASE, ANTHROPIC_DEFAULT_EFFORT, ANTHROPIC_DEFAULT_MODEL, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, hasOneMillionSuffix, needsCli1mSuffix, supports1MContext };
55
+ export { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_CONFIG_DIR_BASE, ANTHROPIC_DEFAULT_EFFORT, ANTHROPIC_DEFAULT_MODEL, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, hasOneMillionSuffix, needsCli1mSuffix, requiresAdaptiveThinking, supports1MContext };
50
56
 
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWNvbnN0YW50cy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9hbnRocm9waWMtY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW50aHJvcGljKENsYXVkZSkgcHJvdmlkZXIg7IOB7IiYLlxuICpcbiAqIENsYXVkZSBDb2RlIENMSSDtlIzrnpjqt7gvZW52IOqzhOyVveydhCBBbnRocm9waWMgZGlzcGF0Y2hlciDsmqnsnLzroZwg6rOg7KCV7ZWc64ukOlxuICogIC0gYC0tbm8tc2Vzc2lvbi1wZXJzaXN0ZW5jZWAg7KCc6rGwICjrqYDti7DthLQg7ZWE7IiYKS5cbiAqICAtIGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmAg7LaU6rCAIChzdGRpbiDsnLzroZwg7J6F66ClIOyWtOuMke2EsCBKU09OTCDtnZjrprwpLlxuICogIC0gQW50aHJvcGljIOqyveuhnOuKlCDrp6Qg7Zi47LacIGAtLXNlc3Npb24taWRgIOuhnCBmcmVzaCBzZXNzaW9uIOydhCDrsJzquIntlZzri6QuXG4gKi9cblxuLy8gQ0MgLS1tb2RlbCDtlIzrnpjqt7jqsIAg67Cb64qUIG9mZmljaWFsIG1vZGVsIGlkIChhbGlhcyBcInNvbm5ldFwiIOqwgCDslYTri4jrnbwg7KCV7ZmV7ZWcIOyLneuzhOyekOuhnCDqs6DsoJUpLlxuLy8gY2xhdWRlLWFwaSDsiqTtgqwg7ZmV7J24OiBTb25uZXQgNC42IG9mZmljaWFsIGlkID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiICjrgqDsp5wgc3VmZml4IOyXhuydjCkuXG4vLyBtb2RlbC1jb3N0IO2FjOydtOu4lOyXkOuPhCBcImNsYXVkZS1zb25uZXQtNC02XCIg7YKkIOyhtOyerFxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiO1xuLy8gT3BlbkFJIHByb3ZpZGVyIOq4sOuzuOqwkihvcGVuYWktZGlzcGF0Y2hlciBERUZBVUxUX0VGRk9SVCnqs7wg66ee7LaY64ukLiDtgbTrnbzqsIAgZWZmb3J0IOuvuOyngOyglSDsi5wg7JWI7KCE66edLlxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX0VGRk9SVCA9IFwibG93XCI7XG4vLyBwcm9qZWN0IHNjb3BlIGN3ZCAoc2V0dGluZ3MuanNvbiDqsqnrpqwpLiDthqDtgbDrs4Qg6rKp66as64qUIENMQVVERV9DT05GSUdfRElSIOuhnCDtlZzri6QuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NMQVVERV9DV0QgPSBcIi90bXAvcWdyaWQtYW50aHJvcGljXCI7XG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg7J2YIOuyoOydtOyKpC4g7Iuk7KCcIOqyveuhnOuKlCBgJHtCQVNFfS8ke3Rva2VuSWR9YCAoUjEwIOqyqeumrCkuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NPTkZJR19ESVJfQkFTRSA9IFwiL3RtcC9xZ3JpZC1hbnRocm9waWMtY29uZmlnXCI7XG4vLyBDQyDqsIAg7J6Q64+ZIO2ZnOyEse2ZlO2VmOuKlCBkZWZlcnJlZCDrj4Tqtawg4oCUIO2GoO2BsCDstZzsoIHtmZQg7JyE7ZW0IGRpc3BhdGNoZXIg6rK966Gc7JeQ7IScIOywqOuLqC5cbmV4cG9ydCBjb25zdCBBTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyA9IFtcIk1vbml0b3JcIiwgXCJQdXNoTm90aWZpY2F0aW9uXCIsIFwiUmVtb3RlVHJpZ2dlclwiXSBhcyBjb25zdDtcbmNvbnN0IE9ORV9NSUxMSU9OX1NVRkZJWF9SRSA9IC9cXFsxbVxcXSQvaTtcblxuLy8g7Yag7YGw67OEIENMQVVERV9DT05GSUdfRElSIOqyveuhnCDqt5zsuZkoUjEwIOqyqeumrCDqs4Tslb0pLiB0b2tlbklkIOuzhOuhnCDrtoTrpqzrkJjslrQsIOqwmeydgCBjbGF1ZGUgc2Vzc2lvbi1pZFxuLy8g652864+EIOuLpOuluCDthqDtgbDsnbTrqbQg64uk66W4IGNvbmZpZyBkaXIg4oaSIHRyYW5zY3JpcHQg6rCAIOyEnuydtOyngCDslYrripTri6QuIOu2gOyImO2aqOqzvCDsl4bripQg7Iic7IiYIO2VqOyImOudvFxuLy8g6rKp66asIOqzhOyVveydhCDri6jsnIQg7YWM7Iqk7Yq466GcIOqzoOygle2VoCDsiJgg7J6I64ukKFU2IFIxMCDqtazsobAg6rKA7KadKS4g7Iuk7KCcIGRpciDsg53shLHsnYAgZW5zdXJlQ29uZmlnRGlyIOqwgCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtBTlRIUk9QSUNfQ09ORklHX0RJUl9CQVNFfS8ke3Rva2VuSWR9YDtcbn1cblxuLy8gbW9kZWwgaWQg66W8IGNhbm9uaWNhbChwcm92aWRlciBwcmVmaXgg7JeG64qUIENMSS9jb3N0IO2CpCkg66GcIOygleq3nO2ZlFxuLy8gYWktc2RrIOuKlCAnYW50aHJvcGljL2NsYXVkZS0qJyDtmJXtg5zroZwg67O064K064qU642wLCBwcmVmaXgg6rCAIGNhbGN1bGF0ZUNvc3RVc2Qg7JeQIOyDiOuptCBjb3N0IOqwgFxuLy8gZGVmYXVsdCDri6jqsIDroZwg7Jik6rOE7IKw65Cc64ukLiBgWzFtXWAgc3VmZml4IOuPhCBDTEkgZW1pdCDsoITsmqnsnbTrnbxcbi8vIGJhc2UgY2Fub25pY2FsIOyXkOyEnOuKlCDsoJzqsbDtlZzri6QuIOuvuOyngOygleydtOuptCBkZWZhdWx0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gbW9kZWwgfHwgQU5USFJPUElDX0RFRkFVTFRfTU9ERUw7XG4gIGNvbnN0IHdpdGhvdXRQcm92aWRlciA9IHJhdy5pbmNsdWRlcyhcIi9cIikgPyByYXcuc3BsaXQoXCIvXCIpLnBvcCgpISA6IHJhdztcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKE9ORV9NSUxMSU9OX1NVRkZJWF9SRSwgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPbmVNaWxsaW9uU3VmZml4KG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2RlbCAhPT0gdW5kZWZpbmVkICYmIE9ORV9NSUxMSU9OX1NVRkZJWF9SRS50ZXN0KG1vZGVsKTtcbn1cblxuLy8gMU0g7KeA7JuQIOyXrOu2gOuKlCBDbGF1ZGUgQ29kZSDsnKDstpzrs7jsnZggcHJlZml4IO2MkOygleydtCDslYTri4jrnbwgcWdyaWQg7Iuk7LihIOq4sOykgCBleGFjdCBzZXQg7Jy866GcIOqzoOygle2VnOuLpC5cbi8vIG9wdXMtNC03IOydgCDsi6TsuKEg7KCE6rmM7KeAIOuvuO2PrO2VqC4g7IOIIOuqqOuNuCDstpTqsIAg7IucIOyLpOygnCBjbGF1ZGUgQ0xJIGNvbnRleHRXaW5kb3cg64+Z7J6R7Jy866GcIO2ZleyduO2VnOuLpC5cbmNvbnN0IE9ORV9NSUxMSU9OX0NPTlRFWFRfTU9ERUxTID0gbmV3IFNldChbXG4gIFwiY2xhdWRlLXNvbm5ldC00LTZcIixcbiAgXCJjbGF1ZGUtb3B1cy00LTZcIixcbiAgXCJjbGF1ZGUtb3B1cy00LThcIixcbl0pO1xuXG5jb25zdCBDTElfT05FX01JTExJT05fU1VGRklYX01PREVMUyA9IG5ldyBTZXQoW1wiY2xhdWRlLXNvbm5ldC00LTZcIiwgXCJjbGF1ZGUtb3B1cy00LTZcIl0pO1xuXG4vLyDrtojrs4Ag6rOE7JW9OiBzdWZmaXgg6rCAIO2VhOyalO2VnCDrqqjrjbjsnYAg67CY65Oc7IucIDFNIOyngOybkCDrqqjrjbjsnZgg67aA67aE7KeR7ZWp7J207Ja07JW8IO2VnOuLpC4g7Jet67Cp7ZalIOu2iOydvOy5mChzdWZmaXhcbi8vIOuMgOyDgeyduOuNsCDsp4Dsm5Ag7KeR7ZWp7JeUIOyXhuydjCnrqbQgbmVlZHNDbGkxbVN1ZmZpeD10cnVlwrdzdXBwb3J0czFNQ29udGV4dD1mYWxzZSDqsIAg64+Z7Iuc7JeQIOuCmOyEnFxuLy8gYC0tbW9kZWwgWzFtXWAg6rO8IERJU0FCTEVfMU0gZW52IOqwgCDrqqjsiJzrkJjqsowg67aZ64qU64ukLiDsg4gg66qo64247J2EIO2VnOyqvSBTZXQg7JeQ66eMIOuEo+uKlCDsi6TsiJjrpbwg66qo65OIXG4vLyDroZzrk5wg7Iuc7KCQ7JeQIOyeoeuKlOuLpC5cbmZvciAoY29uc3QgbW9kZWwgb2YgQ0xJX09ORV9NSUxMSU9OX1NVRkZJWF9NT0RFTFMpIHtcbiAgaWYgKCFPTkVfTUlMTElPTl9DT05URVhUX01PREVMUy5oYXMobW9kZWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbaW52YXJpYW50XSBDTEkgMU0gc3VmZml4IG1vZGVsIG5vdCBpbiBjb250ZXh0IHNldDogJHttb2RlbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHMxTUNvbnRleHQobW9kZWw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9ORV9NSUxMSU9OX0NPTlRFWFRfTU9ERUxTLmhhcyhjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ0xJX09ORV9NSUxMSU9OX1NVRkZJWF9NT0RFTFMuaGFzKGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KG1vZGVsPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghaGFzT25lTWlsbGlvblN1ZmZpeChtb2RlbCkpIHJldHVybjtcbiAgY29uc3QgY2Fub25pY2FsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpO1xuICBpZiAoIXN1cHBvcnRzMU1Db250ZXh0KGNhbm9uaWNhbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFudGhyb3BpYyAxTSBtb2RlbCBzdWZmaXg6ICR7bW9kZWx9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVlBLE1BQWEsMEJBQTBCO0FBRXZDLE1BQWEsMkJBQTJCO0FBRXhDLE1BQWEsdUJBQXVCO0FBRXBDLE1BQWEsNEJBQTRCO0FBRXpDLE1BQWEsNkJBQTZCO0NBQUM7Q0FBVztDQUFvQjtDQUFnQjtBQUMxRixNQUFNLHdCQUF3QjtBQUs5QixTQUFnQixtQkFBbUIsU0FBeUI7QUFDMUQsUUFBTyxHQUFHLDBCQUEwQixHQUFHOztBQU96QyxTQUFnQix3QkFBd0IsT0FBd0I7Q0FDOUQsTUFBTSxNQUFNLFNBQUE7QUFFWixTQUR3QixJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFJLEtBQzdDLFFBQVEsdUJBQXVCLEdBQUc7O0FBRzNELFNBQWdCLG9CQUFvQixPQUF5QjtBQUMzRCxRQUFPLFVBQVUsVUFBYSxzQkFBc0IsS0FBSyxNQUFNOztBQUtqRSxNQUFNLDZCQUE2QixJQUFJLElBQUk7Q0FDekM7Q0FDQTtDQUNBO0NBQ0QsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLElBQUksSUFBSSxDQUFDLHFCQUFxQixrQkFBa0IsQ0FBQztBQU12RixLQUFLLE1BQU0sU0FBUyw4QkFDbEIsS0FBSSxDQUFDLDJCQUEyQixJQUFJLE1BQU0sQ0FDeEMsT0FBTSxJQUFJLE1BQU0sdURBQXVELFFBQVE7QUFJbkYsU0FBZ0Isa0JBQWtCLE9BQXlCO0FBQ3pELFFBQU8sMkJBQTJCLElBQUksd0JBQXdCLE1BQU0sQ0FBQzs7QUFHdkUsU0FBZ0IsaUJBQWlCLE9BQXlCO0FBQ3hELFFBQU8sOEJBQThCLElBQUksd0JBQXdCLE1BQU0sQ0FBQzs7QUFHMUUsU0FBZ0IsZ0NBQWdDLE9BQXNCO0FBQ3BFLEtBQUksQ0FBQyxvQkFBb0IsTUFBTSxDQUFFO0FBRWpDLEtBQUksQ0FBQyxrQkFEYSx3QkFBd0IsTUFBTSxDQUNmLENBQy9CLE9BQU0sSUFBSSxNQUFNLDBDQUEwQyxRQUFRIn0=
57
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWNvbnN0YW50cy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9hbnRocm9waWMtY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW50aHJvcGljKENsYXVkZSkgcHJvdmlkZXIg7IOB7IiYLlxuICpcbiAqIENsYXVkZSBDb2RlIENMSSDtlIzrnpjqt7gvZW52IOqzhOyVveydhCBBbnRocm9waWMgZGlzcGF0Y2hlciDsmqnsnLzroZwg6rOg7KCV7ZWc64ukOlxuICogIC0gYC0tbm8tc2Vzc2lvbi1wZXJzaXN0ZW5jZWAg7KCc6rGwICjrqYDti7DthLQg7ZWE7IiYKS5cbiAqICAtIGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmAg7LaU6rCAIChzdGRpbiDsnLzroZwg7J6F66ClIOyWtOuMke2EsCBKU09OTCDtnZjrprwpLlxuICogIC0gQW50aHJvcGljIOqyveuhnOuKlCDrp6Qg7Zi47LacIGAtLXNlc3Npb24taWRgIOuhnCBmcmVzaCBzZXNzaW9uIOydhCDrsJzquIntlZzri6QuXG4gKi9cblxuLy8gQ0MgLS1tb2RlbCDtlIzrnpjqt7jqsIAg67Cb64qUIG9mZmljaWFsIG1vZGVsIGlkIChhbGlhcyBcInNvbm5ldFwiIOqwgCDslYTri4jrnbwg7KCV7ZmV7ZWcIOyLneuzhOyekOuhnCDqs6DsoJUpLlxuLy8gY2xhdWRlLWFwaSDsiqTtgqwg7ZmV7J24OiBTb25uZXQgNC42IG9mZmljaWFsIGlkID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiICjrgqDsp5wgc3VmZml4IOyXhuydjCkuXG4vLyBtb2RlbC1jb3N0IO2FjOydtOu4lOyXkOuPhCBcImNsYXVkZS1zb25uZXQtNC02XCIg7YKkIOyhtOyerFxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMID0gXCJjbGF1ZGUtc29ubmV0LTQtNlwiO1xuLy8gT3BlbkFJIHByb3ZpZGVyIOq4sOuzuOqwkihvcGVuYWktZGlzcGF0Y2hlciBERUZBVUxUX0VGRk9SVCnqs7wg66ee7LaY64ukLiDtgbTrnbzqsIAgZWZmb3J0IOuvuOyngOyglSDsi5wg7JWI7KCE66edLlxuZXhwb3J0IGNvbnN0IEFOVEhST1BJQ19ERUZBVUxUX0VGRk9SVCA9IFwibG93XCI7XG4vLyBwcm9qZWN0IHNjb3BlIGN3ZCAoc2V0dGluZ3MuanNvbiDqsqnrpqwpLiDthqDtgbDrs4Qg6rKp66as64qUIENMQVVERV9DT05GSUdfRElSIOuhnCDtlZzri6QuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NMQVVERV9DV0QgPSBcIi90bXAvcWdyaWQtYW50aHJvcGljXCI7XG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg7J2YIOuyoOydtOyKpC4g7Iuk7KCcIOqyveuhnOuKlCBgJHtCQVNFfS8ke3Rva2VuSWR9YCAoUjEwIOqyqeumrCkuXG5leHBvcnQgY29uc3QgQU5USFJPUElDX0NPTkZJR19ESVJfQkFTRSA9IFwiL3RtcC9xZ3JpZC1hbnRocm9waWMtY29uZmlnXCI7XG4vLyBDQyDqsIAg7J6Q64+ZIO2ZnOyEse2ZlO2VmOuKlCBkZWZlcnJlZCDrj4Tqtawg4oCUIO2GoO2BsCDstZzsoIHtmZQg7JyE7ZW0IGRpc3BhdGNoZXIg6rK966Gc7JeQ7IScIOywqOuLqC5cbmV4cG9ydCBjb25zdCBBTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyA9IFtcIk1vbml0b3JcIiwgXCJQdXNoTm90aWZpY2F0aW9uXCIsIFwiUmVtb3RlVHJpZ2dlclwiXSBhcyBjb25zdDtcbmNvbnN0IE9ORV9NSUxMSU9OX1NVRkZJWF9SRSA9IC9cXFsxbVxcXSQvaTtcblxuLy8g7Yag7YGw67OEIENMQVVERV9DT05GSUdfRElSIOqyveuhnCDqt5zsuZkoUjEwIOqyqeumrCDqs4Tslb0pLiB0b2tlbklkIOuzhOuhnCDrtoTrpqzrkJjslrQsIOqwmeydgCBjbGF1ZGUgc2Vzc2lvbi1pZFxuLy8g652864+EIOuLpOuluCDthqDtgbDsnbTrqbQg64uk66W4IGNvbmZpZyBkaXIg4oaSIHRyYW5zY3JpcHQg6rCAIOyEnuydtOyngCDslYrripTri6QuIOu2gOyImO2aqOqzvCDsl4bripQg7Iic7IiYIO2VqOyImOudvFxuLy8g6rKp66asIOqzhOyVveydhCDri6jsnIQg7YWM7Iqk7Yq466GcIOqzoOygle2VoCDsiJgg7J6I64ukKFU2IFIxMCDqtazsobAg6rKA7KadKS4g7Iuk7KCcIGRpciDsg53shLHsnYAgZW5zdXJlQ29uZmlnRGlyIOqwgCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtBTlRIUk9QSUNfQ09ORklHX0RJUl9CQVNFfS8ke3Rva2VuSWR9YDtcbn1cblxuLy8gbW9kZWwgaWQg66W8IGNhbm9uaWNhbChwcm92aWRlciBwcmVmaXgg7JeG64qUIENMSS9jb3N0IO2CpCkg66GcIOygleq3nO2ZlFxuLy8gYWktc2RrIOuKlCAnYW50aHJvcGljL2NsYXVkZS0qJyDtmJXtg5zroZwg67O064K064qU642wLCBwcmVmaXgg6rCAIGNhbGN1bGF0ZUNvc3RVc2Qg7JeQIOyDiOuptCBjb3N0IOqwgFxuLy8gZGVmYXVsdCDri6jqsIDroZwg7Jik6rOE7IKw65Cc64ukLiBgWzFtXWAgc3VmZml4IOuPhCBDTEkgZW1pdCDsoITsmqnsnbTrnbxcbi8vIGJhc2UgY2Fub25pY2FsIOyXkOyEnOuKlCDsoJzqsbDtlZzri6QuIOuvuOyngOygleydtOuptCBkZWZhdWx0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gbW9kZWwgfHwgQU5USFJPUElDX0RFRkFVTFRfTU9ERUw7XG4gIGNvbnN0IHdpdGhvdXRQcm92aWRlciA9IHJhdy5pbmNsdWRlcyhcIi9cIikgPyByYXcuc3BsaXQoXCIvXCIpLnBvcCgpISA6IHJhdztcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKE9ORV9NSUxMSU9OX1NVRkZJWF9SRSwgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNPbmVNaWxsaW9uU3VmZml4KG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2RlbCAhPT0gdW5kZWZpbmVkICYmIE9ORV9NSUxMSU9OX1NVRkZJWF9SRS50ZXN0KG1vZGVsKTtcbn1cblxuLy8gMU0g7KeA7JuQIOyXrOu2gOuKlCBDbGF1ZGUgQ29kZSDrgrTrtoDsnZgg6rSR67KU7JyE7ZWcIHByZWZpeCDtjJDsoJXsnbQg7JWE64uI6528IHFncmlk7JeQ7IScIO2ZleyduO2VnCBleGFjdCBzZXQg7Jy866GcXG4vLyDqs6DsoJXtlZzri6QuIG9wdXMtNC03IOydgCDsi6TsuKEg7KCE6rmM7KeAIOuvuO2PrO2VqC4g7IOIIOuqqOuNuCDstpTqsIAg7IucIOqzteyLnSDsgqzslpHqs7wg7Iuk7KCcIENMSSDrj5nsnpHsnYQg7ZmV7J247ZWc64ukLlxuY29uc3QgT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMgPSBuZXcgU2V0KFtcbiAgXCJjbGF1ZGUtZmFibGUtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNVwiLFxuICBcImNsYXVkZS1zb25uZXQtNC02XCIsXG4gIFwiY2xhdWRlLW9wdXMtNC02XCIsXG4gIFwiY2xhdWRlLW9wdXMtNC04XCIsXG5dKTtcblxuY29uc3QgQ0xJX09ORV9NSUxMSU9OX1NVRkZJWF9NT0RFTFMgPSBuZXcgU2V0KFtcImNsYXVkZS1zb25uZXQtNC02XCIsIFwiY2xhdWRlLW9wdXMtNC02XCJdKTtcbmNvbnN0IEFMV0FZU19BREFQVElWRV9USElOS0lOR19NT0RFTFMgPSBuZXcgU2V0KFtcImNsYXVkZS1mYWJsZS01XCJdKTtcblxuLy8g67aI67OAIOqzhOyVvTogc3VmZml4IOqwgCDtlYTsmpTtlZwg66qo64247J2AIOuwmOuTnOyLnCAxTSDsp4Dsm5Ag66qo64247J2YIOu2gOu2hOynke2VqeydtOyWtOyVvCDtlZzri6QuIOyXreuwqe2WpSDrtojsnbzsuZgoc3VmZml4XG4vLyDrjIDsg4HsnbjrjbAg7KeA7JuQIOynke2VqeyXlCDsl4bsnYwp66m0IG5lZWRzQ2xpMW1TdWZmaXg9dHJ1ZcK3c3VwcG9ydHMxTUNvbnRleHQ9ZmFsc2Ug6rCAIOuPmeyLnOyXkCDrgpjshJxcbi8vIGAtLW1vZGVsIFsxbV1gIOqzvCBESVNBQkxFXzFNIGVudiDqsIAg66qo7Iic65CY6rKMIOu2meuKlOuLpC4g7IOIIOuqqOuNuOydhCDtlZzsqr0gU2V0IOyXkOunjCDrhKPripQg7Iuk7IiY66W8IOuqqOuTiFxuLy8g66Gc65OcIOyLnOygkOyXkCDsnqHripTri6QuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIENMSV9PTkVfTUlMTElPTl9TVUZGSVhfTU9ERUxTKSB7XG4gIGlmICghT05FX01JTExJT05fQ09OVEVYVF9NT0RFTFMuaGFzKG1vZGVsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW2ludmFyaWFudF0gQ0xJIDFNIHN1ZmZpeCBtb2RlbCBub3QgaW4gY29udGV4dCBzZXQ6ICR7bW9kZWx9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzMU1Db250ZXh0KG1vZGVsPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBPTkVfTUlMTElPTl9DT05URVhUX01PREVMUy5oYXMoY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzQ2xpMW1TdWZmaXgobW9kZWw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENMSV9PTkVfTUlMTElPTl9TVUZGSVhfTU9ERUxTLmhhcyhjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCkpO1xufVxuXG4vLyBGYWJsZSA1IOuKlCBhZGFwdGl2ZSB0aGlua2luZyDsnbQg7Jyg7J287ZWcIHRoaW5raW5nIG1vZGUg7J2066+A66GcIGRpc2FibGVkIOuhnCDsi6TtlontlaAg7IiYIOyXhuuLpC5cbi8vIOuCmOuouOyngCDrqqjrjbjsnYAgcWdyaWQg7J2YIOq4sOyhtCDsoIDruYTsmqkv67mE7LaU66GgIOqyveuhnOulvCDqt7jrjIDroZwg7Jyg7KeA7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzQWRhcHRpdmVUaGlua2luZyhtb2RlbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQUxXQVlTX0FEQVBUSVZFX1RISU5LSU5HX01PREVMUy5oYXMoY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFN1cHBvcnRlZE9uZU1pbGxpb25TdWZmaXgobW9kZWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFoYXNPbmVNaWxsaW9uU3VmZml4KG1vZGVsKSkgcmV0dXJuO1xuICBjb25zdCBjYW5vbmljYWwgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCk7XG4gIGlmICghc3VwcG9ydHMxTUNvbnRleHQoY2Fub25pY2FsKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQW50aHJvcGljIDFNIG1vZGVsIHN1ZmZpeDogJHttb2RlbH1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBWUEsTUFBYSwwQkFBMEI7QUFFdkMsTUFBYSwyQkFBMkI7QUFFeEMsTUFBYSx1QkFBdUI7QUFFcEMsTUFBYSw0QkFBNEI7QUFFekMsTUFBYSw2QkFBNkI7Q0FBQztDQUFXO0NBQW9CO0NBQWdCO0FBQzFGLE1BQU0sd0JBQXdCO0FBSzlCLFNBQWdCLG1CQUFtQixTQUF5QjtBQUMxRCxRQUFPLEdBQUcsMEJBQTBCLEdBQUc7O0FBT3pDLFNBQWdCLHdCQUF3QixPQUF3QjtDQUM5RCxNQUFNLE1BQU0sU0FBQTtBQUVaLFNBRHdCLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUksS0FDN0MsUUFBUSx1QkFBdUIsR0FBRzs7QUFHM0QsU0FBZ0Isb0JBQW9CLE9BQXlCO0FBQzNELFFBQU8sVUFBVSxVQUFhLHNCQUFzQixLQUFLLE1BQU07O0FBS2pFLE1BQU0sNkJBQTZCLElBQUksSUFBSTtDQUN6QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0QsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLElBQUksSUFBSSxDQUFDLHFCQUFxQixrQkFBa0IsQ0FBQztBQUN2RixNQUFNLGtDQUFrQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQU1uRSxLQUFLLE1BQU0sU0FBUyw4QkFDbEIsS0FBSSxDQUFDLDJCQUEyQixJQUFJLE1BQU0sQ0FDeEMsT0FBTSxJQUFJLE1BQU0sdURBQXVELFFBQVE7QUFJbkYsU0FBZ0Isa0JBQWtCLE9BQXlCO0FBQ3pELFFBQU8sMkJBQTJCLElBQUksd0JBQXdCLE1BQU0sQ0FBQzs7QUFHdkUsU0FBZ0IsaUJBQWlCLE9BQXlCO0FBQ3hELFFBQU8sOEJBQThCLElBQUksd0JBQXdCLE1BQU0sQ0FBQzs7QUFLMUUsU0FBZ0IseUJBQXlCLE9BQXlCO0FBQ2hFLFFBQU8sZ0NBQWdDLElBQUksd0JBQXdCLE1BQU0sQ0FBQzs7QUFHNUUsU0FBZ0IsZ0NBQWdDLE9BQXNCO0FBQ3BFLEtBQUksQ0FBQyxvQkFBb0IsTUFBTSxDQUFFO0FBRWpDLEtBQUksQ0FBQyxrQkFEYSx3QkFBd0IsTUFBTSxDQUNmLENBQy9CLE9BQU0sSUFBSSxNQUFNLDBDQUEwQyxRQUFRIn0=
@@ -221,7 +221,8 @@ var AnthropicDispatcher = class {
221
221
  if (session.isError) {
222
222
  const reason = session.subtype ?? session.terminalReason ?? (session.isError ? "is_error" : "unknown");
223
223
  const body = session.text ? session.text.length > 500 ? `${session.text.slice(0, 500)}…(${session.text.length} chars)` : session.text : `empty text, outputTokens=${session.usage.outputTokens}`;
224
- throw new Error(`claude error (${token.name}) [${reason}]: ${body}`);
224
+ const refusal = session.refusal ? ` refusal=${JSON.stringify(session.refusal)}` : "";
225
+ throw new Error(`claude error (${token.name}) [${reason}]: ${body}${refusal}`);
225
226
  }
226
227
  return {
227
228
  text: session.text,
@@ -230,7 +231,9 @@ var AnthropicDispatcher = class {
230
231
  durationMs: session.durationMs,
231
232
  ttftMs: session.ttftMs,
232
233
  costUsd: session.costUsd,
233
- model,
234
+ model: session.servedModel ?? model,
235
+ requestedModel: model,
236
+ modelFallbacks: session.modelFallbacks,
234
237
  threadCoord: {
235
238
  workerId: makeAnthropicWorkerId(token.id),
236
239
  threadId: session.sessionId,
@@ -244,4 +247,4 @@ var AnthropicDispatcher = class {
244
247
  //#endregion
245
248
  export { AnthropicDispatcher };
246
249
 
247
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbnRocm9waWNEaXNwYXRjaGVyXG4gKlxuICogT3BlbkFJRGlzcGF0Y2hlcuyZgCDri6zrpqwsIHdvcmtlciBwb29s7J2EIOuRkOuKlCDrjIDsi6Ag7JqU7LKt67OEIGZyZXNoIHNwYXduXG4gKiDthqDtgbDsnYAg7J2466mU66qo66asKE1BUCnsnLzroZwg6rSA66as7ZWY6rOgIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDsnLzroZwg6rOg66W464ukXG4gKlxuICogLSDrqqjrk6Ag7JqU7LKt7J2AIGZyZXNoIGAtLXNlc3Npb24taWRgIOuhnCDsi6TtlolcbiAqIC0g66mA7Yuw7YS0IOusuOunpeydgCDtgbTrnbzsnbTslrjtirjqsIAg66ekIO2YuOy2nCDrs7TrgrTripQgZnVsbCBoaXN0b3J5IOulvCDtj4ntg4TtmZTtlbQg7KCE64us7ZWc64ukLlxuICogLSDrsJzquIntlZwgc2Vzc2lvbi1pZCDrpbwgR2VuZXJhdGVSZXN1bHQudGhyZWFkQ29vcmQodGhyZWFkSWQ9c2Vzc2lvbi1pZCwgd29ya2VySWQ9dG9rZW5JZCxcbiAqICAgZXBvY2g9MCnroZwg7Jis66CkLCDsg4HsnIQoaXNzdWVDb252Q29udGV4dCnqsIAg7YG065287JeQIO2ajOyGoe2VoCDsooztkZzrpbwg66eM65Og64ukLiDri6TsnYwgdHVybiDsnbQg7KKM7ZGc66W8XG4gKiAgIO2ajOyGoe2VtOuPhCBBbnRocm9waWMg65287Jqw7YyF7JeQ64qUIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyBnZXRFeHBpcmVzQXQsIGdldFJlZnJlc2hUb2tlbiB9IGZyb20gXCIuLi9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXF1ZXN0LFxuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzLFxuICB0eXBlIFByb3ZpZGVyRGlzcGF0Y2hlcixcbn0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBTbW9vdGhXZWlnaHRlZFJvdW5kUm9iaW4gfSBmcm9tIFwiLi4vY29tbW9uL3Ntb290aC13ZWlnaHRlZC1yb3VuZC1yb2JpblwiO1xuaW1wb3J0IHsgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeCwgY2Fub25pY2FsQW50aHJvcGljTW9kZWwgfSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZWFkQW50aHJvcGljUXVvdGFVc2FnZSwgdHlwZSBBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0IH0gZnJvbSBcIi4vYW50aHJvcGljLXF1b3RhXCI7XG5pbXBvcnQgeyBtYWtlQW50aHJvcGljV29ya2VySWQsIHJ1bkNsYXVkZVNlc3Npb24gfSBmcm9tIFwiLi9jbGF1ZGUtc2Vzc2lvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJhbnRocm9waWMtZGlzcGF0Y2hlclwiXSk7XG5cbi8vIDFNIGNvbnRleHQg7KCV7IOBIOyDneyEseydgCDsi6TsuKHsg4EgMTAwcyvquYzsp4Ag6rCE64ukLiAyNDBz64qUIOyZhOy2qSDsnqXsuZjsnbwg67+QLFxuLy8g6rGw67aAK+qxsOuMgCBzeXN0ZW0g7J6s7IOd7ISxIOyngOyXsOydhCDsmYTsoITtnogg7ZW06rKw7ZWY64qUIOqwkuydgCDslYTri4jri6QuXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAyNDBfMDAwO1xuLy8gYWNjZXNzIHRva2VuIOunjOujjCDsnoTrsJUg7J6E6rOEIOKAlCDquLDsobQgc3RhbmRhbG9uZSDqsr3roZwocWdyaWQuZGlzcGF0Y2hlci50cynsmYAg64+Z7J28KDYwcykuXG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuaW50ZXJmYWNlIFBvb2xlZFRva2VuIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RhVGhyZXNob2xkRXhjZWVkZWRNZXNzYWdlKFxuICBwcm92aWRlcjogc3RyaW5nLFxuICB0b2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGV0YWlscyA9IHRva2Vuc1xuICAgIC5tYXAoKHRva2VuKSA9PiBgJHt0b2tlbi50b2tlbk5hbWV9ICh0aHJlc2hvbGQgJHt0b2tlbi50aHJlc2hvbGR9JSlgKVxuICAgIC5qb2luKFwiLCBcIik7XG4gIHJldHVybiBkZXRhaWxzLmxlbmd0aCA+IDBcbiAgICA/IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZDogJHtkZXRhaWxzfWBcbiAgICA6IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZGA7XG59XG5cbmV4cG9ydCBjbGFzcyBBbnRocm9waWNEaXNwYXRjaGVyIGltcGxlbWVudHMgUHJvdmlkZXJEaXNwYXRjaGVyIHtcbiAgLy8gdG9rZW5JZCDihpIg7ZKAIO2VreuqqS4gc3RhcnQoKS90b2tlbiDsnbTrsqTtirjroZwg7LGE7JuAXG4gIHByaXZhdGUgdG9rZW5Qb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZFRva2VuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodGVkU2VsZWN0b3IgPSBuZXcgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluKCk7XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT3BlbkFJRGlzcGF0Y2hlci5zdGFydCgpIOyZgCDrj5nsnbztlZjqsowgREIg7JeQ7IScIOq4sOyhtCBhbnRocm9waWMg7Yag7YGw7J2EIHNlbGYtYm9vdHN0cmFwIO2VnOuLpC5cbiAgICAvLyAo7ISc67KEIOyerOyLnOyekSDsi5wgTk9USUZZIOqwgCDslYgg7Jik66+A66GcIOu2gO2KuOyKpO2KuOueqeydtCDsl4bsnLzrqbQg7ZKA7J20IOu5iCDssYTroZwg64Ko64qU64ukLilcbiAgICAvLyDsnbTtm4Qg67OA6rK967aE7J2AIHRva2VuLXN1YnNjcmliZXIg6rCAIG9uVG9rZW5BZGRlZC9VcGRhdGVkL1JlbW92ZWQg66GcIOyghOuLrO2VnOuLpC5cbiAgICAvLyBmaW5kQWN0aXZlQnlQcm92aWRlciDqsIAgYWN0aXZlPXRydWUgKyBwcm92aWRlciDtlYTthLDrpbwgREIg7JeQ7IScIOyymOumrCDihpIgaW5hY3RpdmUg64qUIOyVoOy0iOyXkCDslYgg7Jio64ukLlxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpO1xuICAgIGZvciAoY29uc3QgdCBvZiB0b2tlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5Qb29sLnNldCh0LmlkLCB7XG4gICAgICAgIGlkOiB0LmlkLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogdC5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogdC53ZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZXRUb2tlbih0LmlkLCB0LndlaWdodCk7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyIHNwYXduZWQ6ICR7dC5uYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbLi4udGhpcy50b2tlblBvb2wua2V5cygpXTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRva2VuSWRzKSB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVtb3ZlVG9rZW4oaWQpO1xuICAgIHRoaXMudG9rZW5Qb29sLmNsZWFyKCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlc2V0U2NvcmVzKCk7XG4gIH1cblxuICAvLyDtmITsnqwg7ZKA7J2YIO2GoO2BsCDsiJgoc3RhcnR1cCDroZzqt7gvaGVhbHRoIOyaqSkuXG4gIGdldCB0b2tlbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLnNpemU7XG4gIH1cblxuICAvLyBNb25pdCDtkZzsi5zsmqkg4oCUIO2SgOyXkCDsnojripQg7Yag7YGwIOydtOumhCDsiqTrg4Xsg7cgKOydtOumhOyInCDsoJXroKwpXG4gIGdldCB0b2tlbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXS5tYXAoKHRva2VuKSA9PiB0b2tlbi5uYW1lKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgLy8gREIgYWN0aXZlIGFudGhyb3BpYyDthqDtgbAg66qp66Gd7Jy866GcIO2SgOydhCDsnqzrj5nquLDtmZTtlZzri6QocGVyaW9kaWMgcmVjb25jaWxlL+yerOyXsOqysOyaqSkuXG4gIC8vIExJU1RFTi9OT1RJRlkg6rCAIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CcIOy2lOqwgC/sgq3soJwv67mE7Zmc7ISx7ZmU66W8IERCIOq4sOykgOycvOuhnCDri6Tsi5wg66ee7LaY64ukLlxuICAvLyDsnbTrsqTtirgg7ZW465Ok65+s66W8IOyerOyCrOyaqe2VtCDtkoAg6rCx7Iug7J20IOydvOq0gOuQmOqyjCDsoIHsmqnrkJjrj4TroZ0g7ZWc64ukOlxuICAvLyAgLSBEQiDsl5Ag7JeG64qU642wIO2SgOyXkCDsnojripQg7Yag7YGwIOKGkiBvblRva2VuUmVtb3ZlZFxuICAvLyAgLSBEQiDsl5Ag7J6I64qUIO2GoO2BsCDihpIg7Iug6rec66m0IG9uVG9rZW5BZGRlZCwg6riw7KG07J2066m0IG9uVG9rZW5VcGRhdGVkXG4gIHJlcGxhY2VUb2tlbnMoXG4gICAgcm93czogQXJyYXk8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscztcbiAgICAgIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIHdlaWdodDogbnVtYmVyO1xuICAgIH0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChyb3dzLm1hcCgocikgPT4gci5pZCkpO1xuICAgIC8vIG9uVG9rZW5SZW1vdmVkIOqwgCB0b2tlblBvb2wg7J2EIGRlbGV0ZSDtlZjrr4DroZwg7Iic7ZqMIOykkSDsiJjsoJXsnYQg7ZS87ZWY66CkIO2CpOulvCDrqLzsoIAg7Iqk64OF7IO37ZWc64ukLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5Qb29sLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBjdXJyZW50SWRzKSB7XG4gICAgICBpZiAoIW5leHQuaGFzKGlkKSkgdGhpcy5vblRva2VuUmVtb3ZlZChpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgICBpZiAodGhpcy50b2tlblBvb2wuaGFzKHIuaWQpKSB7XG4gICAgICAgIHRoaXMub25Ub2tlblVwZGF0ZWQoci5pZCwgci5uYW1lLCByLmNyZWRlbnRpYWxzLCByLnF1b3RhVGhyZXNob2xkLCByLndlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uVG9rZW5BZGRlZChyLmlkLCByLm5hbWUsIHIuY3JlZGVudGlhbHMsIHIucXVvdGFUaHJlc2hvbGQsIHIud2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB0b2tlbiBldmVudHMgKHRva2VuLXN1YnNjcmliZXIg6rCAIO2YuOy2nClcbiAgb25Ub2tlbkFkZGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuVXBkYXRlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodCA9IDEsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLnNldChpZCwgeyBpZCwgbmFtZSwgY3JlZGVudGlhbHMsIHF1b3RhVGhyZXNob2xkLCB3ZWlnaHQgfSk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKGlkLCB3ZWlnaHQpO1xuICB9XG5cbiAgb25Ub2tlblJlbW92ZWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLmRlbGV0ZShpZCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKTtcbiAgfVxuXG4gIC8vIHF1b3RhIO2GteqzvCDtm4Trs7Trp4zsnLzroZwg7JqU7LKt66eI64ukIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDshKDtg53tlZzri6QuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0VG9rZW4oKTogUHJvbWlzZTxQb29sZWRUb2tlbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXTtcbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZWxpZ2libGUsIG92ZXJUaHJlc2hvbGRUb2tlbnMgfSA9IGF3YWl0IHRoaXMuZmlsdGVyRWxpZ2libGVUb2tlbnMocm93cyk7XG4gICAgaWYgKGVsaWdpYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogYWxsX2V4Y2VlZGVkXCIsIHtcbiAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgIHRva2VuQ291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICB0aHJlc2hvbGRlZFRva2VuQ291bnQ6IHJvd3MuZmlsdGVyKChyKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHIpKS5sZW5ndGgsXG4gICAgICAgIG92ZXJUaHJlc2hvbGRUb2tlbnMsXG4gICAgICAgIHJlYXNvbjogXCJhbGxfZXhjZWVkZWRcIixcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvcihcbiAgICAgICAgcXVvdGFUaHJlc2hvbGRFeGNlZWRlZE1lc3NhZ2UoXCJhbnRocm9waWNcIiwgb3ZlclRocmVzaG9sZFRva2VucyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2VsZWN0KG5ldyBTZXQoZWxpZ2libGUubWFwKCh0b2tlbikgPT4gdG9rZW4uaWQpKSk7XG4gICAgaWYgKHNlbGVjdGVkSWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRva2VuUG9vbC5nZXQoc2VsZWN0ZWRJZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMocm93czogUG9vbGVkVG9rZW5bXSk6IFByb21pc2U8e1xuICAgIGVsaWdpYmxlOiBQb29sZWRUb2tlbltdO1xuICAgIG92ZXJUaHJlc2hvbGRUb2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+O1xuICB9PiB7XG4gICAgY29uc3QgdGhyZXNob2xkZWQgPSByb3dzLmZpbHRlcigodG9rZW4pID0+IHRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKTtcbiAgICBpZiAodGhyZXNob2xkZWQubGVuZ3RoID09PSAwKSByZXR1cm4geyBlbGlnaWJsZTogcm93cywgb3ZlclRocmVzaG9sZFRva2VuczogW10gfTtcblxuICAgIGNvbnN0IGVsaWdpYmxlSWRzID0gbmV3IFNldChcbiAgICAgIHJvd3MuZmlsdGVyKCh0b2tlbikgPT4gIXRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKS5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCksXG4gICAgKTtcbiAgICBjb25zdCBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHRocmVzaG9sZGVkLm1hcChhc3luYyAodG9rZW4pID0+ICh7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHJlYWRBbnRocm9waWNRdW90YVVzYWdlKHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgY2hlY2tzLmZvckVhY2goKGNoZWNrLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNoZWNrLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhyZXNob2xkZWRbaW5kZXhdO1xuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgU3RyaW5nKGNoZWNrLnJlYXNvbikpO1xuICAgICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gY2hlY2sudmFsdWUudG9rZW47XG4gICAgICBjb25zdCByZXN1bHQgPSBjaGVjay52YWx1ZS5yZXN1bHQ7XG4gICAgICBpZiAocmVzdWx0LmtpbmQgPT09IFwibG9va3VwX2ZhaWxlZFwiKSB7XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICB0aGlzLmxvZ1F1b3RhT3ZlclRocmVzaG9sZCh0b2tlbiwgcmVzdWx0KTtcbiAgICAgICAgb3ZlclRocmVzaG9sZFRva2Vucy5wdXNoKHsgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLCB0aHJlc2hvbGQ6IHRva2VuLnF1b3RhVGhyZXNob2xkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBlbGlnaWJsZTogcm93cy5maWx0ZXIoKHRva2VuKSA9PiBlbGlnaWJsZUlkcy5oYXModG9rZW4uaWQpKSwgb3ZlclRocmVzaG9sZFRva2VucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdW90YVRocmVzaG9sZCh0b2tlbjogUG9vbGVkVG9rZW4pOiB0b2tlbiBpcyBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdG9rZW4ucXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9nUXVvdGFPdmVyVGhyZXNob2xkKFxuICAgIHRva2VuOiBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9LFxuICAgIHJlc3VsdDogRXh0cmFjdDxBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0LCB7IGtpbmQ6IFwib2tcIiB9PixcbiAgKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogb3Zlcl90aHJlc2hvbGRcIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICBjYWNoZWRVdGlsaXphdGlvbjogcmVzdWx0LnV0aWxpemF0aW9uUGN0LFxuICAgICAgY2FjaGVBZ2U6IHJlc3VsdC5jYWNoZUFnZU1zLFxuICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1F1b3RhTG9va3VwRmFpbE9wZW4oXG4gICAgdG9rZW46IFBvb2xlZFRva2VuICYgeyBxdW90YVRocmVzaG9sZDogbnVtYmVyIH0sXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGxvZ2dlci53YXJuKFwicXVvdGFfdGhyZXNob2xkIGdhdGU6IGxvb2t1cF9mYWlsX29wZW5cIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICByZWFzb246IFwibG9va3VwX2ZhaWxfb3BlblwiLFxuICAgICAgbG9va3VwUmVhc29uOiByZWFzb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZShyZXE6IEdlbmVyYXRlUmVxdWVzdCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5ydW4ocmVxLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZVN0cmVhbShyZXE6IEdlbmVyYXRlUmVxdWVzdCwgY2I6IEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKHJlcSwgY2Iub25EZWx0YSwgeyBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiB0cnVlIH0pO1xuICAgICAgY2Iub25UaHJlYWRJZD8uKHJlc3VsdC50aHJlYWRDb29yZC50aHJlYWRJZCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2Iub25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDqs7XthrUg7Iuk7ZaJLiBvbkRlbHRhIOuKlCDsiqTtirjrprzsnbTrqbQg7KCQ7KeEIOuwqey2nCwg67mE7Iqk7Yq466a87J2066m0IG5vLW9wLlxuICBwcml2YXRlIGFzeW5jIHJ1bihcbiAgICByZXE6IEdlbmVyYXRlUmVxdWVzdCxcbiAgICBvbkRlbHRhOiAodDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9wdHM/OiB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICAvLyDsnbTrr7jsp4Ag7IOd7ISx7J2AIE9wZW5BSShjb2RleCkg6rK966GcIOyghOyaqS4gQW50aHJvcGljIOudvOyasO2MheyXkCDsnbTrr7jsp4Ag7ZSM656Y6re46rCAXG4gICAgLy8g64+E64us7ZWY66m0IOyhsOyaqe2eiCDthY3siqTtirjroZwg7Y+067Cx7ZWY7KeAIOyViuqzoCDrqoXsi5zsoIHsnLzroZwg6rGw67aA7ZWc64ukLlxuICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbWFnZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIEFudGhyb3BpYyByb3V0ZVwiKTtcbiAgICB9XG4gICAgLy8gbW9kZWwg7KCV6rec7ZmU66W8IGRpc3BhdGNoZXIg7KeE7J6F7KCQ7JeQ7IScIO2VnCDrsogg7ZWc64ukOiByZXN1bHQubW9kZWwgLyBydW5DbGF1ZGVTZXNzaW9uIOyghOu2gFxuICAgIC8vIGNhbm9uaWNhbChwcmVmaXgg7JeG64qUIGNvc3Qg7YKkKSDsnYQg7JOw6rKMIO2GteydvC4g66+47KeA7KCV7J2066m0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMIOKAlCBxZ3JpZC5kaXNwYXRjaGVyXG4gICAgLy8g7J2YIFwic29ubmV0XCIg67OE7LmtIOyasO2ajCDssKjri6guIOygleq3nO2ZlCDqt5zsuZnsnYAgZmFsbGJhY2sg6rK966Gc7JmAIOqzteycoChjYW5vbmljYWxBbnRocm9waWNNb2RlbCkuXG4gICAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgICBjb25zdCBqc29uU2NoZW1hID1cbiAgICAgIHJlcS5vdXRwdXRTY2hlbWEgIT09IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KHJlcS5vdXRwdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW50aHJvcGljIHRva2VucyBhdmFpbGFibGVcIik7XG5cbiAgICBjb25zdCBleGVjID0gYXN5bmMgKCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+ID0+IHtcbiAgICAgIC8vIOunjOujjCDsnoTrsJUg7Yag7YGwIHByZWVtcHRpdmUgcmVmcmVzaCjquLDsobQgc3RhbmRhbG9uZSDqsr3roZzsmYAg64+Z7J28KS4g7Iuk7Yyo7ZW064+EIOynhO2WiS5cbiAgICAgIGxldCBhY2Nlc3NUb2tlbiA9IHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuO1xuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZ2V0RXhwaXJlc0F0KHRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhwaXJlc0F0ICYmXG4gICAgICAgIGV4cGlyZXNBdCAtIERhdGUubm93KCkgPCBSRUZSRVNIX1NBRkVUWV9NUyAmJlxuICAgICAgICBnZXRSZWZyZXNoVG9rZW4odG9rZW4uY3JlZGVudGlhbHMpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IFFncmlkRnJhbWUgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lXCIpO1xuICAgICAgICAgIC8vIHByb3ZpZGVyIOulvCDrsJjrk5zsi5wg7LGE7JuM7JW8IHJlZnJlc2hUb2tlbiDrgrTrtoAgVG9rZW5Nb2RlbC5zYXZlIOqwgCDshLHqs7XtlZzri6QuXG4gICAgICAgICAgLy8gcmVmcmVzaFRva2VuKFRva2VuU3Vic2V0QSkg64qUIGlkL3Byb3ZpZGVyL2NyZWRlbnRpYWxzL25hbWUg66eMIOyCrOyaqe2VmOuvgOuhnCDqt7ggNOqwnOunjCDrhJjquLTri6QuXG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbih7XG4gICAgICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdG9rZW4uY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbj5bMF0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGDihpIgJHt0b2tlbi5uYW1lfSAobW9kZWw6ICR7bW9kZWx9KWApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJ1bkNsYXVkZVNlc3Npb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgc3lzdGVtOiByZXEuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgICAgIHRpbWVvdXRNczogREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICAgICAgaW5wdXQ6IHJlcS5jb2xkSW5wdXQsXG4gICAgICAgICAgYWJvcnRTaWduYWw6IHJlcS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiBvcHRzPy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgICAgICB9LFxuICAgICAgICBvbkRlbHRhLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlc3Npb24ucXVvdGFFeGhhdXN0ZWQpIHRocm93IG5ldyBFcnJvcihgcXVvdGEgZXhoYXVzdGVkICgke3Rva2VuLm5hbWV9KWApO1xuICAgICAgaWYgKHNlc3Npb24uaXNFcnJvcikge1xuICAgICAgICAvLyDsp4Tri6goU09OLTQ5NSk6IGlzRXJyb3Ig7YyQ7KCVIOyCrOycoChzdWJ0eXBlL3Rlcm1pbmFsX3JlYXNvbinrpbwg66mU7Iuc7KeAIOyVnuyXkCDrk5zrn6zrgrjri6QuXG4gICAgICAgIC8vIOq3uOuPmeyViCBkZXRhaWwg7J20IHNlc3Npb24udGV4dCjsmYTsoITtlZwgSlNPTiDrs7jrrLgp67+Q7J206528IFwic2NoZW1hIOychOuwmOyduOyngCAvIG1heCByZXRyaWVzIOyduOyngCAvXG4gICAgICAgIC8vIG1heCB0dXJucyDsnbjsp4BcIuulvCDqtazrtoTtlaAg7IiYIOyXhuyXiOuLpC4gdGV4dCDripQg7KeE64uo7JeQIO2VhOyalO2VnCDrp4ztgbzrp4wg7J6Y6528IOuNp+u2meyduOuLpC5cbiAgICAgICAgY29uc3QgcmVhc29uID1cbiAgICAgICAgICBzZXNzaW9uLnN1YnR5cGUgPz8gc2Vzc2lvbi50ZXJtaW5hbFJlYXNvbiA/PyAoc2Vzc2lvbi5pc0Vycm9yID8gXCJpc19lcnJvclwiIDogXCJ1bmtub3duXCIpO1xuICAgICAgICBjb25zdCBib2R5ID0gc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgPyBzZXNzaW9uLnRleHQubGVuZ3RoID4gNTAwXG4gICAgICAgICAgICA/IGAke3Nlc3Npb24udGV4dC5zbGljZSgwLCA1MDApfeKApigke3Nlc3Npb24udGV4dC5sZW5ndGh9IGNoYXJzKWBcbiAgICAgICAgICAgIDogc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgOiBgZW1wdHkgdGV4dCwgb3V0cHV0VG9rZW5zPSR7c2Vzc2lvbi51c2FnZS5vdXRwdXRUb2tlbnN9YDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjbGF1ZGUgZXJyb3IgKCR7dG9rZW4ubmFtZX0pIFske3JlYXNvbn1dOiAke2JvZHl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IHNlc3Npb24udGV4dCxcbiAgICAgICAgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgICB1c2FnZTogc2Vzc2lvbi51c2FnZSxcbiAgICAgICAgZHVyYXRpb25Nczogc2Vzc2lvbi5kdXJhdGlvbk1zLFxuICAgICAgICB0dGZ0TXM6IHNlc3Npb24udHRmdE1zLFxuICAgICAgICBjb3N0VXNkOiBzZXNzaW9uLmNvc3RVc2QsXG4gICAgICAgIG1vZGVsLFxuICAgICAgICAvLyBzeXN0ZW1IYXNoIOuKlCDsg4HsnIQgaXNzdWVDb252Q29udGV4dCDqsIAg7LGE7Jq064ukKOyXrOq4sOyEoCDruYTsmrTri6QpLlxuICAgICAgICB0aHJlYWRDb29yZDoge1xuICAgICAgICAgIHdvcmtlcklkOiBtYWtlQW50aHJvcGljV29ya2VySWQodG9rZW4uaWQpLFxuICAgICAgICAgIHRocmVhZElkOiBzZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgICAgICBlcG9jaDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBleGVjKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsdUJBQXVCLENBQUM7QUFJM0QsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxvQkFBb0I7QUFVMUIsU0FBUyw4QkFDUCxVQUNBLFFBQ1E7Q0FDUixN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
250
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbnRocm9waWNEaXNwYXRjaGVyXG4gKlxuICogT3BlbkFJRGlzcGF0Y2hlcuyZgCDri6zrpqwsIHdvcmtlciBwb29s7J2EIOuRkOuKlCDrjIDsi6Ag7JqU7LKt67OEIGZyZXNoIHNwYXduXG4gKiDthqDtgbDsnYAg7J2466mU66qo66asKE1BUCnsnLzroZwg6rSA66as7ZWY6rOgIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDsnLzroZwg6rOg66W464ukXG4gKlxuICogLSDrqqjrk6Ag7JqU7LKt7J2AIGZyZXNoIGAtLXNlc3Npb24taWRgIOuhnCDsi6TtlolcbiAqIC0g66mA7Yuw7YS0IOusuOunpeydgCDtgbTrnbzsnbTslrjtirjqsIAg66ekIO2YuOy2nCDrs7TrgrTripQgZnVsbCBoaXN0b3J5IOulvCDtj4ntg4TtmZTtlbQg7KCE64us7ZWc64ukLlxuICogLSDrsJzquIntlZwgc2Vzc2lvbi1pZCDrpbwgR2VuZXJhdGVSZXN1bHQudGhyZWFkQ29vcmQodGhyZWFkSWQ9c2Vzc2lvbi1pZCwgd29ya2VySWQ9dG9rZW5JZCxcbiAqICAgZXBvY2g9MCnroZwg7Jis66CkLCDsg4HsnIQoaXNzdWVDb252Q29udGV4dCnqsIAg7YG065287JeQIO2ajOyGoe2VoCDsooztkZzrpbwg66eM65Og64ukLiDri6TsnYwgdHVybiDsnbQg7KKM7ZGc66W8XG4gKiAgIO2ajOyGoe2VtOuPhCBBbnRocm9waWMg65287Jqw7YyF7JeQ64qUIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyBnZXRFeHBpcmVzQXQsIGdldFJlZnJlc2hUb2tlbiB9IGZyb20gXCIuLi9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXF1ZXN0LFxuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzLFxuICB0eXBlIFByb3ZpZGVyRGlzcGF0Y2hlcixcbn0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBTbW9vdGhXZWlnaHRlZFJvdW5kUm9iaW4gfSBmcm9tIFwiLi4vY29tbW9uL3Ntb290aC13ZWlnaHRlZC1yb3VuZC1yb2JpblwiO1xuaW1wb3J0IHsgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeCwgY2Fub25pY2FsQW50aHJvcGljTW9kZWwgfSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZWFkQW50aHJvcGljUXVvdGFVc2FnZSwgdHlwZSBBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0IH0gZnJvbSBcIi4vYW50aHJvcGljLXF1b3RhXCI7XG5pbXBvcnQgeyBtYWtlQW50aHJvcGljV29ya2VySWQsIHJ1bkNsYXVkZVNlc3Npb24gfSBmcm9tIFwiLi9jbGF1ZGUtc2Vzc2lvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJhbnRocm9waWMtZGlzcGF0Y2hlclwiXSk7XG5cbi8vIDFNIGNvbnRleHQg7KCV7IOBIOyDneyEseydgCDsi6TsuKHsg4EgMTAwcyvquYzsp4Ag6rCE64ukLiAyNDBz64qUIOyZhOy2qSDsnqXsuZjsnbwg67+QLFxuLy8g6rGw67aAK+qxsOuMgCBzeXN0ZW0g7J6s7IOd7ISxIOyngOyXsOydhCDsmYTsoITtnogg7ZW06rKw7ZWY64qUIOqwkuydgCDslYTri4jri6QuXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAyNDBfMDAwO1xuLy8gYWNjZXNzIHRva2VuIOunjOujjCDsnoTrsJUg7J6E6rOEIOKAlCDquLDsobQgc3RhbmRhbG9uZSDqsr3roZwocWdyaWQuZGlzcGF0Y2hlci50cynsmYAg64+Z7J28KDYwcykuXG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuaW50ZXJmYWNlIFBvb2xlZFRva2VuIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RhVGhyZXNob2xkRXhjZWVkZWRNZXNzYWdlKFxuICBwcm92aWRlcjogc3RyaW5nLFxuICB0b2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGV0YWlscyA9IHRva2Vuc1xuICAgIC5tYXAoKHRva2VuKSA9PiBgJHt0b2tlbi50b2tlbk5hbWV9ICh0aHJlc2hvbGQgJHt0b2tlbi50aHJlc2hvbGR9JSlgKVxuICAgIC5qb2luKFwiLCBcIik7XG4gIHJldHVybiBkZXRhaWxzLmxlbmd0aCA+IDBcbiAgICA/IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZDogJHtkZXRhaWxzfWBcbiAgICA6IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZGA7XG59XG5cbmV4cG9ydCBjbGFzcyBBbnRocm9waWNEaXNwYXRjaGVyIGltcGxlbWVudHMgUHJvdmlkZXJEaXNwYXRjaGVyIHtcbiAgLy8gdG9rZW5JZCDihpIg7ZKAIO2VreuqqS4gc3RhcnQoKS90b2tlbiDsnbTrsqTtirjroZwg7LGE7JuAXG4gIHByaXZhdGUgdG9rZW5Qb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZFRva2VuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodGVkU2VsZWN0b3IgPSBuZXcgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluKCk7XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT3BlbkFJRGlzcGF0Y2hlci5zdGFydCgpIOyZgCDrj5nsnbztlZjqsowgREIg7JeQ7IScIOq4sOyhtCBhbnRocm9waWMg7Yag7YGw7J2EIHNlbGYtYm9vdHN0cmFwIO2VnOuLpC5cbiAgICAvLyAo7ISc67KEIOyerOyLnOyekSDsi5wgTk9USUZZIOqwgCDslYgg7Jik66+A66GcIOu2gO2KuOyKpO2KuOueqeydtCDsl4bsnLzrqbQg7ZKA7J20IOu5iCDssYTroZwg64Ko64qU64ukLilcbiAgICAvLyDsnbTtm4Qg67OA6rK967aE7J2AIHRva2VuLXN1YnNjcmliZXIg6rCAIG9uVG9rZW5BZGRlZC9VcGRhdGVkL1JlbW92ZWQg66GcIOyghOuLrO2VnOuLpC5cbiAgICAvLyBmaW5kQWN0aXZlQnlQcm92aWRlciDqsIAgYWN0aXZlPXRydWUgKyBwcm92aWRlciDtlYTthLDrpbwgREIg7JeQ7IScIOyymOumrCDihpIgaW5hY3RpdmUg64qUIOyVoOy0iOyXkCDslYgg7Jio64ukLlxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpO1xuICAgIGZvciAoY29uc3QgdCBvZiB0b2tlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5Qb29sLnNldCh0LmlkLCB7XG4gICAgICAgIGlkOiB0LmlkLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogdC5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogdC53ZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZXRUb2tlbih0LmlkLCB0LndlaWdodCk7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyIHNwYXduZWQ6ICR7dC5uYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbLi4udGhpcy50b2tlblBvb2wua2V5cygpXTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRva2VuSWRzKSB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVtb3ZlVG9rZW4oaWQpO1xuICAgIHRoaXMudG9rZW5Qb29sLmNsZWFyKCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlc2V0U2NvcmVzKCk7XG4gIH1cblxuICAvLyDtmITsnqwg7ZKA7J2YIO2GoO2BsCDsiJgoc3RhcnR1cCDroZzqt7gvaGVhbHRoIOyaqSkuXG4gIGdldCB0b2tlbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLnNpemU7XG4gIH1cblxuICAvLyBNb25pdCDtkZzsi5zsmqkg4oCUIO2SgOyXkCDsnojripQg7Yag7YGwIOydtOumhCDsiqTrg4Xsg7cgKOydtOumhOyInCDsoJXroKwpXG4gIGdldCB0b2tlbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXS5tYXAoKHRva2VuKSA9PiB0b2tlbi5uYW1lKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgLy8gREIgYWN0aXZlIGFudGhyb3BpYyDthqDtgbAg66qp66Gd7Jy866GcIO2SgOydhCDsnqzrj5nquLDtmZTtlZzri6QocGVyaW9kaWMgcmVjb25jaWxlL+yerOyXsOqysOyaqSkuXG4gIC8vIExJU1RFTi9OT1RJRlkg6rCAIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CcIOy2lOqwgC/sgq3soJwv67mE7Zmc7ISx7ZmU66W8IERCIOq4sOykgOycvOuhnCDri6Tsi5wg66ee7LaY64ukLlxuICAvLyDsnbTrsqTtirgg7ZW465Ok65+s66W8IOyerOyCrOyaqe2VtCDtkoAg6rCx7Iug7J20IOydvOq0gOuQmOqyjCDsoIHsmqnrkJjrj4TroZ0g7ZWc64ukOlxuICAvLyAgLSBEQiDsl5Ag7JeG64qU642wIO2SgOyXkCDsnojripQg7Yag7YGwIOKGkiBvblRva2VuUmVtb3ZlZFxuICAvLyAgLSBEQiDsl5Ag7J6I64qUIO2GoO2BsCDihpIg7Iug6rec66m0IG9uVG9rZW5BZGRlZCwg6riw7KG07J2066m0IG9uVG9rZW5VcGRhdGVkXG4gIHJlcGxhY2VUb2tlbnMoXG4gICAgcm93czogQXJyYXk8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscztcbiAgICAgIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIHdlaWdodDogbnVtYmVyO1xuICAgIH0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChyb3dzLm1hcCgocikgPT4gci5pZCkpO1xuICAgIC8vIG9uVG9rZW5SZW1vdmVkIOqwgCB0b2tlblBvb2wg7J2EIGRlbGV0ZSDtlZjrr4DroZwg7Iic7ZqMIOykkSDsiJjsoJXsnYQg7ZS87ZWY66CkIO2CpOulvCDrqLzsoIAg7Iqk64OF7IO37ZWc64ukLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5Qb29sLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBjdXJyZW50SWRzKSB7XG4gICAgICBpZiAoIW5leHQuaGFzKGlkKSkgdGhpcy5vblRva2VuUmVtb3ZlZChpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgICBpZiAodGhpcy50b2tlblBvb2wuaGFzKHIuaWQpKSB7XG4gICAgICAgIHRoaXMub25Ub2tlblVwZGF0ZWQoci5pZCwgci5uYW1lLCByLmNyZWRlbnRpYWxzLCByLnF1b3RhVGhyZXNob2xkLCByLndlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uVG9rZW5BZGRlZChyLmlkLCByLm5hbWUsIHIuY3JlZGVudGlhbHMsIHIucXVvdGFUaHJlc2hvbGQsIHIud2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB0b2tlbiBldmVudHMgKHRva2VuLXN1YnNjcmliZXIg6rCAIO2YuOy2nClcbiAgb25Ub2tlbkFkZGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuVXBkYXRlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodCA9IDEsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLnNldChpZCwgeyBpZCwgbmFtZSwgY3JlZGVudGlhbHMsIHF1b3RhVGhyZXNob2xkLCB3ZWlnaHQgfSk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKGlkLCB3ZWlnaHQpO1xuICB9XG5cbiAgb25Ub2tlblJlbW92ZWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLmRlbGV0ZShpZCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKTtcbiAgfVxuXG4gIC8vIHF1b3RhIO2GteqzvCDtm4Trs7Trp4zsnLzroZwg7JqU7LKt66eI64ukIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDshKDtg53tlZzri6QuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0VG9rZW4oKTogUHJvbWlzZTxQb29sZWRUb2tlbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXTtcbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZWxpZ2libGUsIG92ZXJUaHJlc2hvbGRUb2tlbnMgfSA9IGF3YWl0IHRoaXMuZmlsdGVyRWxpZ2libGVUb2tlbnMocm93cyk7XG4gICAgaWYgKGVsaWdpYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogYWxsX2V4Y2VlZGVkXCIsIHtcbiAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgIHRva2VuQ291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICB0aHJlc2hvbGRlZFRva2VuQ291bnQ6IHJvd3MuZmlsdGVyKChyKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHIpKS5sZW5ndGgsXG4gICAgICAgIG92ZXJUaHJlc2hvbGRUb2tlbnMsXG4gICAgICAgIHJlYXNvbjogXCJhbGxfZXhjZWVkZWRcIixcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvcihcbiAgICAgICAgcXVvdGFUaHJlc2hvbGRFeGNlZWRlZE1lc3NhZ2UoXCJhbnRocm9waWNcIiwgb3ZlclRocmVzaG9sZFRva2VucyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2VsZWN0KG5ldyBTZXQoZWxpZ2libGUubWFwKCh0b2tlbikgPT4gdG9rZW4uaWQpKSk7XG4gICAgaWYgKHNlbGVjdGVkSWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRva2VuUG9vbC5nZXQoc2VsZWN0ZWRJZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMocm93czogUG9vbGVkVG9rZW5bXSk6IFByb21pc2U8e1xuICAgIGVsaWdpYmxlOiBQb29sZWRUb2tlbltdO1xuICAgIG92ZXJUaHJlc2hvbGRUb2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+O1xuICB9PiB7XG4gICAgY29uc3QgdGhyZXNob2xkZWQgPSByb3dzLmZpbHRlcigodG9rZW4pID0+IHRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKTtcbiAgICBpZiAodGhyZXNob2xkZWQubGVuZ3RoID09PSAwKSByZXR1cm4geyBlbGlnaWJsZTogcm93cywgb3ZlclRocmVzaG9sZFRva2VuczogW10gfTtcblxuICAgIGNvbnN0IGVsaWdpYmxlSWRzID0gbmV3IFNldChcbiAgICAgIHJvd3MuZmlsdGVyKCh0b2tlbikgPT4gIXRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKS5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCksXG4gICAgKTtcbiAgICBjb25zdCBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHRocmVzaG9sZGVkLm1hcChhc3luYyAodG9rZW4pID0+ICh7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHJlYWRBbnRocm9waWNRdW90YVVzYWdlKHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgY2hlY2tzLmZvckVhY2goKGNoZWNrLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNoZWNrLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhyZXNob2xkZWRbaW5kZXhdO1xuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgU3RyaW5nKGNoZWNrLnJlYXNvbikpO1xuICAgICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gY2hlY2sudmFsdWUudG9rZW47XG4gICAgICBjb25zdCByZXN1bHQgPSBjaGVjay52YWx1ZS5yZXN1bHQ7XG4gICAgICBpZiAocmVzdWx0LmtpbmQgPT09IFwibG9va3VwX2ZhaWxlZFwiKSB7XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICB0aGlzLmxvZ1F1b3RhT3ZlclRocmVzaG9sZCh0b2tlbiwgcmVzdWx0KTtcbiAgICAgICAgb3ZlclRocmVzaG9sZFRva2Vucy5wdXNoKHsgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLCB0aHJlc2hvbGQ6IHRva2VuLnF1b3RhVGhyZXNob2xkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBlbGlnaWJsZTogcm93cy5maWx0ZXIoKHRva2VuKSA9PiBlbGlnaWJsZUlkcy5oYXModG9rZW4uaWQpKSwgb3ZlclRocmVzaG9sZFRva2VucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdW90YVRocmVzaG9sZCh0b2tlbjogUG9vbGVkVG9rZW4pOiB0b2tlbiBpcyBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdG9rZW4ucXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9nUXVvdGFPdmVyVGhyZXNob2xkKFxuICAgIHRva2VuOiBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9LFxuICAgIHJlc3VsdDogRXh0cmFjdDxBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0LCB7IGtpbmQ6IFwib2tcIiB9PixcbiAgKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogb3Zlcl90aHJlc2hvbGRcIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICBjYWNoZWRVdGlsaXphdGlvbjogcmVzdWx0LnV0aWxpemF0aW9uUGN0LFxuICAgICAgY2FjaGVBZ2U6IHJlc3VsdC5jYWNoZUFnZU1zLFxuICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1F1b3RhTG9va3VwRmFpbE9wZW4oXG4gICAgdG9rZW46IFBvb2xlZFRva2VuICYgeyBxdW90YVRocmVzaG9sZDogbnVtYmVyIH0sXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGxvZ2dlci53YXJuKFwicXVvdGFfdGhyZXNob2xkIGdhdGU6IGxvb2t1cF9mYWlsX29wZW5cIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICByZWFzb246IFwibG9va3VwX2ZhaWxfb3BlblwiLFxuICAgICAgbG9va3VwUmVhc29uOiByZWFzb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZShyZXE6IEdlbmVyYXRlUmVxdWVzdCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5ydW4ocmVxLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZVN0cmVhbShyZXE6IEdlbmVyYXRlUmVxdWVzdCwgY2I6IEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKHJlcSwgY2Iub25EZWx0YSwgeyBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiB0cnVlIH0pO1xuICAgICAgY2Iub25UaHJlYWRJZD8uKHJlc3VsdC50aHJlYWRDb29yZC50aHJlYWRJZCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2Iub25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDqs7XthrUg7Iuk7ZaJLiBvbkRlbHRhIOuKlCDsiqTtirjrprzsnbTrqbQg7KCQ7KeEIOuwqey2nCwg67mE7Iqk7Yq466a87J2066m0IG5vLW9wLlxuICBwcml2YXRlIGFzeW5jIHJ1bihcbiAgICByZXE6IEdlbmVyYXRlUmVxdWVzdCxcbiAgICBvbkRlbHRhOiAodDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9wdHM/OiB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICAvLyDsnbTrr7jsp4Ag7IOd7ISx7J2AIE9wZW5BSShjb2RleCkg6rK966GcIOyghOyaqS4gQW50aHJvcGljIOudvOyasO2MheyXkCDsnbTrr7jsp4Ag7ZSM656Y6re46rCAXG4gICAgLy8g64+E64us7ZWY66m0IOyhsOyaqe2eiCDthY3siqTtirjroZwg7Y+067Cx7ZWY7KeAIOyViuqzoCDrqoXsi5zsoIHsnLzroZwg6rGw67aA7ZWc64ukLlxuICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbWFnZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIEFudGhyb3BpYyByb3V0ZVwiKTtcbiAgICB9XG4gICAgLy8gbW9kZWwg7KCV6rec7ZmU66W8IGRpc3BhdGNoZXIg7KeE7J6F7KCQ7JeQ7IScIO2VnCDrsogg7ZWc64ukOiByZXN1bHQubW9kZWwgLyBydW5DbGF1ZGVTZXNzaW9uIOyghOu2gFxuICAgIC8vIGNhbm9uaWNhbChwcmVmaXgg7JeG64qUIGNvc3Qg7YKkKSDsnYQg7JOw6rKMIO2GteydvC4g66+47KeA7KCV7J2066m0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMIOKAlCBxZ3JpZC5kaXNwYXRjaGVyXG4gICAgLy8g7J2YIFwic29ubmV0XCIg67OE7LmtIOyasO2ajCDssKjri6guIOygleq3nO2ZlCDqt5zsuZnsnYAgZmFsbGJhY2sg6rK966Gc7JmAIOqzteycoChjYW5vbmljYWxBbnRocm9waWNNb2RlbCkuXG4gICAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgICBjb25zdCBqc29uU2NoZW1hID1cbiAgICAgIHJlcS5vdXRwdXRTY2hlbWEgIT09IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KHJlcS5vdXRwdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW50aHJvcGljIHRva2VucyBhdmFpbGFibGVcIik7XG5cbiAgICBjb25zdCBleGVjID0gYXN5bmMgKCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+ID0+IHtcbiAgICAgIC8vIOunjOujjCDsnoTrsJUg7Yag7YGwIHByZWVtcHRpdmUgcmVmcmVzaCjquLDsobQgc3RhbmRhbG9uZSDqsr3roZzsmYAg64+Z7J28KS4g7Iuk7Yyo7ZW064+EIOynhO2WiS5cbiAgICAgIGxldCBhY2Nlc3NUb2tlbiA9IHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuO1xuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZ2V0RXhwaXJlc0F0KHRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhwaXJlc0F0ICYmXG4gICAgICAgIGV4cGlyZXNBdCAtIERhdGUubm93KCkgPCBSRUZSRVNIX1NBRkVUWV9NUyAmJlxuICAgICAgICBnZXRSZWZyZXNoVG9rZW4odG9rZW4uY3JlZGVudGlhbHMpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IFFncmlkRnJhbWUgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lXCIpO1xuICAgICAgICAgIC8vIHByb3ZpZGVyIOulvCDrsJjrk5zsi5wg7LGE7JuM7JW8IHJlZnJlc2hUb2tlbiDrgrTrtoAgVG9rZW5Nb2RlbC5zYXZlIOqwgCDshLHqs7XtlZzri6QuXG4gICAgICAgICAgLy8gcmVmcmVzaFRva2VuKFRva2VuU3Vic2V0QSkg64qUIGlkL3Byb3ZpZGVyL2NyZWRlbnRpYWxzL25hbWUg66eMIOyCrOyaqe2VmOuvgOuhnCDqt7ggNOqwnOunjCDrhJjquLTri6QuXG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbih7XG4gICAgICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdG9rZW4uY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbj5bMF0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGDihpIgJHt0b2tlbi5uYW1lfSAobW9kZWw6ICR7bW9kZWx9KWApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJ1bkNsYXVkZVNlc3Npb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgc3lzdGVtOiByZXEuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgICAgIHRpbWVvdXRNczogREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICAgICAgaW5wdXQ6IHJlcS5jb2xkSW5wdXQsXG4gICAgICAgICAgYWJvcnRTaWduYWw6IHJlcS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiBvcHRzPy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgICAgICB9LFxuICAgICAgICBvbkRlbHRhLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlc3Npb24ucXVvdGFFeGhhdXN0ZWQpIHRocm93IG5ldyBFcnJvcihgcXVvdGEgZXhoYXVzdGVkICgke3Rva2VuLm5hbWV9KWApO1xuICAgICAgaWYgKHNlc3Npb24uaXNFcnJvcikge1xuICAgICAgICAvLyDsp4Tri6goU09OLTQ5NSk6IGlzRXJyb3Ig7YyQ7KCVIOyCrOycoChzdWJ0eXBlL3Rlcm1pbmFsX3JlYXNvbinrpbwg66mU7Iuc7KeAIOyVnuyXkCDrk5zrn6zrgrjri6QuXG4gICAgICAgIC8vIOq3uOuPmeyViCBkZXRhaWwg7J20IHNlc3Npb24udGV4dCjsmYTsoITtlZwgSlNPTiDrs7jrrLgp67+Q7J206528IFwic2NoZW1hIOychOuwmOyduOyngCAvIG1heCByZXRyaWVzIOyduOyngCAvXG4gICAgICAgIC8vIG1heCB0dXJucyDsnbjsp4BcIuulvCDqtazrtoTtlaAg7IiYIOyXhuyXiOuLpC4gdGV4dCDripQg7KeE64uo7JeQIO2VhOyalO2VnCDrp4ztgbzrp4wg7J6Y6528IOuNp+u2meyduOuLpC5cbiAgICAgICAgY29uc3QgcmVhc29uID1cbiAgICAgICAgICBzZXNzaW9uLnN1YnR5cGUgPz8gc2Vzc2lvbi50ZXJtaW5hbFJlYXNvbiA/PyAoc2Vzc2lvbi5pc0Vycm9yID8gXCJpc19lcnJvclwiIDogXCJ1bmtub3duXCIpO1xuICAgICAgICBjb25zdCBib2R5ID0gc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgPyBzZXNzaW9uLnRleHQubGVuZ3RoID4gNTAwXG4gICAgICAgICAgICA/IGAke3Nlc3Npb24udGV4dC5zbGljZSgwLCA1MDApfeKApigke3Nlc3Npb24udGV4dC5sZW5ndGh9IGNoYXJzKWBcbiAgICAgICAgICAgIDogc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgOiBgZW1wdHkgdGV4dCwgb3V0cHV0VG9rZW5zPSR7c2Vzc2lvbi51c2FnZS5vdXRwdXRUb2tlbnN9YDtcbiAgICAgICAgY29uc3QgcmVmdXNhbCA9IHNlc3Npb24ucmVmdXNhbCA/IGAgcmVmdXNhbD0ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24ucmVmdXNhbCl9YCA6IFwiXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xhdWRlIGVycm9yICgke3Rva2VuLm5hbWV9KSBbJHtyZWFzb259XTogJHtib2R5fSR7cmVmdXNhbH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogc2Vzc2lvbi50ZXh0LFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgIHVzYWdlOiBzZXNzaW9uLnVzYWdlLFxuICAgICAgICBkdXJhdGlvbk1zOiBzZXNzaW9uLmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRNczogc2Vzc2lvbi50dGZ0TXMsXG4gICAgICAgIGNvc3RVc2Q6IHNlc3Npb24uY29zdFVzZCxcbiAgICAgICAgLy8gQ2xhdWRlIENvZGUg64qUIEZhYmxlIHJlZnVzYWwg7J2EIE9wdXMg66GcIOyekOuPmSBmYWxsYmFjayDtlaAg7IiYIOyeiOuLpC4g7JqU7LKtIOuqqOuNuOydhFxuICAgICAgICAvLyDqt7jrjIDroZwgc2VydmluZyBtb2RlbCDroZwg6riw66Gd7ZWY66m0IOu5hOyaqS/qsJDsgqwg66Gc6re46rCAIOuqqOuRkCDti4DslrTsp4Drr4DroZwg65GY7J2EIOq1rOu2hO2VnOuLpC5cbiAgICAgICAgbW9kZWw6IHNlc3Npb24uc2VydmVkTW9kZWwgPz8gbW9kZWwsXG4gICAgICAgIHJlcXVlc3RlZE1vZGVsOiBtb2RlbCxcbiAgICAgICAgbW9kZWxGYWxsYmFja3M6IHNlc3Npb24ubW9kZWxGYWxsYmFja3MsXG4gICAgICAgIC8vIHN5c3RlbUhhc2gg64qUIOyDgeychCBpc3N1ZUNvbnZDb250ZXh0IOqwgCDssYTsmrTri6Qo7Jes6riw7ISgIOu5hOyatOuLpCkuXG4gICAgICAgIHRocmVhZENvb3JkOiB7XG4gICAgICAgICAgd29ya2VySWQ6IG1ha2VBbnRocm9waWNXb3JrZXJJZCh0b2tlbi5pZCksXG4gICAgICAgICAgdGhyZWFkSWQ6IHNlc3Npb24uc2Vzc2lvbklkLFxuICAgICAgICAgIGVwb2NoOiAwLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGV4ZWMoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyx1QkFBdUIsQ0FBQztBQUkzRCxNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG9CQUFvQjtBQVUxQixTQUFTLDhCQUNQLFVBQ0EsUUFDUTtDQUNSLE1BQU0sVUFBVSxPQUNiLEtBQUssVUFBVSxHQUFHLE1BQU0sVUFBVSxjQUFjLE1BQU0sVUFBVSxJQUFJLENBQ3BFLEtBQUssS0FBSztBQUNiLFFBQU8sUUFBUSxTQUFTLElBQ3BCLE9BQU8sU0FBUyxvQ0FBb0MsWUFDcEQsT0FBTyxTQUFTOztBQUd0QixJQUFhLHNCQUFiLE1BQStEO0NBRTdELDRCQUFvQixJQUFJLEtBQTBCO0NBQ2xELG1CQUFvQyxJQUFJLDBCQUEwQjtDQUVsRSxNQUFNLFFBQXVCO0VBSzNCLE1BQU0sU0FBUyxNQUFNLFdBQVcscUJBQXFCLEtBQUssWUFBWTtBQUN0RSxPQUFLLE1BQU0sS0FBSyxRQUFRO0FBQ3RCLFFBQUssVUFBVSxJQUFJLEVBQUUsSUFBSTtJQUN2QixJQUFJLEVBQUU7SUFDTixNQUFNLEVBQUU7SUFDUixhQUFhLEVBQUU7SUFDZixnQkFBZ0IsRUFBRTtJQUNsQixRQUFRLEVBQUU7SUFDWCxDQUFDO0FBQ0YsUUFBSyxpQkFBaUIsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPO0FB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
@@ -1,6 +1,6 @@
1
1
  import "../../../_virtual/_rolldown/runtime.js";
2
2
  import { createTtftTracker } from "../common/ttft.js";
3
- import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix, supports1MContext } from "./anthropic-constants.js";
3
+ import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix, requiresAdaptiveThinking, supports1MContext } from "./anthropic-constants.js";
4
4
  import { buildStreamJsonInput, handleStreamJsonLine } from "./stream-json-adapter.js";
5
5
  import { mkdirSync, unlinkSync, writeFileSync } from "node:fs";
6
6
  import { spawn } from "node:child_process";
@@ -64,6 +64,12 @@ function applyOneMillionSuffix(model, needsSuffix) {
64
64
  function oneMillionEnv(supported) {
65
65
  return supported ? {} : { CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" };
66
66
  }
67
+ function thinkingEnv(model) {
68
+ return requiresAdaptiveThinking(model) ? {} : {
69
+ CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
70
+ MAX_THINKING_TOKENS: "0"
71
+ };
72
+ }
67
73
  function structuredOutputRetriesEnv(raw = process.env.MAX_STRUCTURED_OUTPUT_RETRIES) {
68
74
  if (!raw) return { MAX_STRUCTURED_OUTPUT_RETRIES: "1" };
69
75
  const parsed = Number.parseInt(raw, 10);
@@ -98,8 +104,7 @@ function buildClaudeArgs(opts) {
98
104
  "--model",
99
105
  applyOneMillionSuffix(opts.model, opts.needsOneMillionSuffix ?? false),
100
106
  ...systemArgs,
101
- "--thinking",
102
- "disabled",
107
+ ...requiresAdaptiveThinking(opts.model) ? [] : ["--thinking", "disabled"],
103
108
  "--effort",
104
109
  opts.effort ?? "low",
105
110
  "--disable-slash-commands",
@@ -160,14 +165,13 @@ function runClaudeSession(req, onDelta) {
160
165
  CLAUDE_CODE_OAUTH_TOKEN: req.token,
161
166
  CLAUDE_CONFIG_DIR: configDir,
162
167
  CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
163
- CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
168
+ ...thinkingEnv(model),
164
169
  ...oneMillionEnv(supportsOneMillion),
165
170
  CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
166
171
  CLAUDE_CODE_DISABLE_TERMINAL_TITLE: "1",
167
172
  CLAUDE_CODE_DISABLE_BUNDLED_SKILLS: "1",
168
173
  CLAUDE_CODE_DISABLE_WORKFLOWS: "1",
169
174
  CLAUDE_CODE_ATTRIBUTION_HEADER: "0",
170
- MAX_THINKING_TOKENS: "0",
171
175
  ...useStructured ? structuredOutputRetriesEnv() : {}
172
176
  }
173
177
  });
@@ -260,6 +264,6 @@ function runClaudeSession(req, onDelta) {
260
264
  });
261
265
  }
262
266
  //#endregion
263
- export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, structuredOutputRetriesEnv, withSessionLock };
267
+ export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, structuredOutputRetriesEnv, thinkingEnv, withSessionLock };
264
268
 
265
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvc2VyZGVfanNvbi9Kc29uVmFsdWVcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgYW50aHJvcGljQ29uZmlnRGlyLFxuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LFxuICBjYW5vbmljYWxBbnRocm9waWNNb2RlbCxcbiAgbmVlZHNDbGkxbVN1ZmZpeCxcbiAgc3VwcG9ydHMxTUNvbnRleHQsXG59IGZyb20gXCIuL2FudGhyb3BpYy1jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkU3RyZWFtSnNvbklucHV0LFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25TdGF0ZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uTGluZSxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1SZXN1bHQsXG4gIGhhbmRsZVN0cmVhbUpzb25MaW5lLFxufSBmcm9tIFwiLi9zdHJlYW0tanNvbi1hZGFwdGVyXCI7XG5cbi8vIOKUgOKUgCBwZXItc2Vzc2lvbiDrnb0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHNlc3Npb24taWQg64uo7JyEIOyngeugrO2ZlCBwcmltaXRpdmUuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggdXVpZCDrnbwg7IKs7Iuk7IOBIG5vLW9wIOydtOyngOunjCxcbi8vIOqwmeydgCBzZXNzaW9uLWlkIOulvCDsp4HsoJEg7JOw64qUIO2YuOy2nOyekOuKlCDsl6zsoITtnogg7KeB66Cs7ZmUIOuztOyepeydhCDrsJvripTri6QuXG5jb25zdCBzZXNzaW9uQ2hhaW5zID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU2Vzc2lvbkxvY2s8VD4oc2Vzc2lvbklkOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAvLyDsnbTsoIQgdHVybiDsnZgg7ISx7Yyo7JmAIOustOq0gO2VmOqyjCDsp4HroKwg7LK07J247J2EIOyeh+uKlOuLpC5cbiAgY29uc3QgbmV4dCA9IHByZXYudGhlbihmbiwgZm4pO1xuICAvLyB0YWlsOiDshLHtjKgg66y06rSAIHNldHRsZSDrkJjripQg7ZW465OkLiDsnbTqsbgg66e17JeQIOuRkOqzoCwgZmluYWxseSDsl5DshJwgXCLsl6zsoITtnogg64K06rCAIOuBnVwi7J28IOuVjOunjCDsgq3soJwuXG4gIC8vIChzZXQg7KeB7ZuEIHVuZGVmaW5lZCDqsoDsgqzroZwg7ZWY66m0IOygiOuMgCDsgq3soJwg7JWIIOuPvCDshLjshZggaWQg6rCAIOuIhOyImOuQqCDigJQgdGFpbCDsnbzsuZgg6rKA7IKs66GcIO2ajO2UvC4pXG4gIGNvbnN0IHRhaWwgPSBuZXh0LnRoZW4oXG4gICAgKCkgPT4ge30sXG4gICAgKCkgPT4ge30sXG4gICk7XG4gIHNlc3Npb25DaGFpbnMuc2V0KHNlc3Npb25JZCwgdGFpbCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5leHQ7XG4gIH0gZmluYWxseSB7XG4gICAgLy8g6re4IOyCrOydtCDri6TrpbggdHVybiDsnbQg7LK07J247J2EIOydtOyWtOuwm+yVmOycvOuptCB0YWlsIOydtCDqtZDssrTrj7wg7J6I64ukIOKAlCDqt7jrlYzripQg7IKt7KCc7ZWY7KeAIOyViuuKlOuLpC5cbiAgICBpZiAoc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA9PT0gdGFpbCkgc2Vzc2lvbkNoYWlucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyDilIDilIAgY29vcmQg66ek7ZWRIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyB0b2tlbiDquLDrsJgg7JWI7KCVIHdvcmtlcklkIO2VqeyEsS4gQW50aHJvcGljIOydgCB3b3JrZXIgcG9vbCDsnbQg7JeG7Jy866+A66GcIHRva2VuSWQg66W8IOq3uOuMgOuhnCDsk7Tri6QuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFudGhyb3BpY1dvcmtlcklkKHRva2VuSWQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0b2tlbklkO1xufVxuXG4vLyDilIDilIAgZW52ZWxvcGUgZGVjb3JhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHN0cmVhbS1qc29uIOyeheugpSDrnbzsnbjsl5AgU0RLIGVudmVsb3BlIOu2gOywqSDtm4Qg7KeB66Cs7ZmULiBzZXNzaW9uIOyGjOycoOyekOyduCDsl6zquLDshJwg7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlQW5kU2VyaWFsaXplKFxuICBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+LFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgbGluZXNcbiAgICAgIC5tYXAoKGxpbmUpID0+XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi5saW5lLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICB1dWlkOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgcGFyZW50X3Rvb2xfdXNlX2lkOiBudWxsLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuICApO1xufVxuXG4vLyDilIDilIAgc3Bhd24gKyBjb25zdW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXF1ZXN0IHtcbiAgdG9rZW5JZDogbnVtYmVyO1xuICB0b2tlbjogc3RyaW5nOyAvLyBPQXV0aCBhY2Nlc3MgdG9rZW5cbiAgbW9kZWw6IHN0cmluZztcbiAgc3lzdGVtPzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nOyAvLyDsnojsnLzrqbQgc3RydWN0dXJlZCBvdXRwdXRcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgY29sZEhpc3Rvcnk/OiBBcnJheTxKc29uVmFsdWU+O1xuICBpbnB1dDogQXJyYXk8VXNlcklucHV0PjtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU2Vzc2lvblJlc3VsdCBleHRlbmRzIENsYXVkZVN0cmVhbVJlc3VsdCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB3b3JrZXJJZDogbnVtYmVyO1xuICB0dGZ0TXM6IG51bWJlciB8IG51bGw7XG59XG5cbi8vIHBlci10b2tlbiBDTEFVREVfQ09ORklHX0RJUiDrs7TsnqUo6rKp66asKS4g6rK966GcIOq3nOy5meydgCBhbnRocm9waWNDb25maWdEaXIo7Iic7IiYIO2VqOyImCnsnbQg7IaM7JygIOKAlFxuLy8g7Jes6riw7ISgIOq3uCDqsr3roZzsl5Ag67mIIHNldHRpbmdzIOulvCDquZTslYQgY2xhdWRlLW1lbSBob29rIOuTseydhCDssKjri6jtlZzri6QuIChSMTAg6rKp66asKVxuLy8g7J20IHNlZWQg7YyM7J287J2AIGNsYXVkZS1tZW0gaG9vayAvIOyCrOyaqeyekCDshKTsoJUg7Jik7Je8IOywqOuLqOydhCDsnITtlZwg6rKp66asIOqyveqzhOuLpC4g66ekIO2YuOy2nOuniOuLpCDri6Tsi5wg7I2o7IScXG4vLyDsmbjrtoAg67OA7KGwwrfsgq3soJwg7ZuE7JeQ64+EIOuLpOydjCDsi6Ttlonsl5DshJwgc2VsZi1oZWFsaW5nIOuQmOuPhOuhnSDquLDsobQgc2VtYW50aWNzIOulvCDsnKDsp4DtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQ29uZmlnRGlyKHRva2VuSWQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGRpciA9IGFudGhyb3BpY0NvbmZpZ0Rpcih0b2tlbklkKTtcbiAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS8uY2xhdWRlLmpzb25gLCBcInt9XCIpO1xuICB3cml0ZUZpbGVTeW5jKGAke2Rpcn0vc2V0dGluZ3MuanNvbmAsIFwie31cIik7XG4gIHJldHVybiBkaXI7XG59XG5cbmxldCBjd2RFbnN1cmVkID0gZmFsc2U7XG5mdW5jdGlvbiBlbnN1cmVDd2QoKTogdm9pZCB7XG4gIGlmIChjd2RFbnN1cmVkKSByZXR1cm47XG4gIG1rZGlyU3luYyhgJHtBTlRIUk9QSUNfQ0xBVURFX0NXRH0vLmNsYXVkZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlL3NldHRpbmdzLmpzb25gLCBcInt9XCIpO1xuICBjd2RFbnN1cmVkID0gdHJ1ZTtcbn1cblxuLy8gc3Bhd24gYXJncyDqtazshLEuIOupgO2LsO2EtC/qsqnrpqwvc3RydWN0dXJlZCDrqqjrk5wg67CY7JiBLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T25lTWlsbGlvblN1ZmZpeChtb2RlbDogc3RyaW5nLCBuZWVkc1N1ZmZpeDogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBjYW5vbmljYWxBbnRocm9waWNNb2RlbChtb2RlbCk7XG4gIHJldHVybiBuZWVkc1N1ZmZpeCA/IGAke2Jhc2V9WzFtXWAgOiBiYXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25lTWlsbGlvbkVudihzdXBwb3J0ZWQ6IGJvb2xlYW4pOiB7IENMQVVERV9DT0RFX0RJU0FCTEVfMU1fQ09OVEVYVD86IFwiMVwiIH0ge1xuICByZXR1cm4gc3VwcG9ydGVkID8ge30gOiB7IENMQVVERV9DT0RFX0RJU0FCTEVfMU1fQ09OVEVYVDogXCIxXCIgfTtcbn1cblxuLy8gU09OLTQ5NTogc3RydWN0dXJlZCBvdXRwdXQgcmV0cnkg66W8IDEg66GcIOqzoOygle2VnOuLpC4gQ0Mg6rCAIGF0dGVtcHQg66W8IHJlamVjdCDtlZjqs6AgcmV0cnkg7ZWY66m0XG4vLyBge3JlamVjdGVkfXthY2NlcHRlZH1gIOuIhOyggeydtCBBSS1TREsg7J2YIEpTT04ucGFyc2Ug66W8IOq5qOucqOumrOuvgOuhnCwgcmV0cnkg7J6Q7LK066W8IOunieyVhCDqt7gg6rK966Gc66W8XG4vLyDsm5Dsspwg7LCo64uo7ZWc64ukLiBgMGAg7J2AIENDIHF1ZXJ5IGxvb3AoYGNhbGxzVGhpc1F1ZXJ5ID49IG1heFJldHJpZXNgKeqwgCDssqsgYXR0ZW1wdCBlbWl0IOyghOyXkFxuLy8g7Iuk7Yyo7Iuc7YKk66+A66GcKGBlcnJvcl9tYXhfc3RydWN0dXJlZF9vdXRwdXRfcmV0cmllc2ApIOyZuOu2gCDqsJLsnbQgMSDrr7jrp4zsnbTslrTrj4QgMSDroZwg7YG0656o7ZSE7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cnVjdHVyZWRPdXRwdXRSZXRyaWVzRW52KHJhdyA9IHByb2Nlc3MuZW52Lk1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTKToge1xuICBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogc3RyaW5nO1xufSB7XG4gIGlmICghcmF3KSByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogXCIxXCIgfTtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyLnBhcnNlSW50KHJhdywgMTApO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpKSByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogXCIxXCIgfTtcbiAgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFN0cmluZyhNYXRoLm1heChwYXJzZWQsIDEpKSB9O1xufVxuXG4vLyBMaW51eCDri6jsnbwgYXJndiDsnbjsnpAg7ZWc6rOEKE1BWF9BUkdfU1RSTEVOID0gUEFHRV9TSVpFw5czMiA9IDEyOEtCLCDsu6TrhJAg7ZWY65Oc7L2U65SpIOyDgeyImClcbi8vIOyLnOyKpO2FnCDtlITroaztlITtirjqsIAg7J2066W8IOuEmOycvOuptCBleGVjdmUg6rCAIEUyQklHIOuhnCDqsbDrtoDrkJzri6QuIGRldGkg65OxIOuMgO2YlSDtlITroaztlITtirjripQg7Iuk7LihXG4vLyDtj4nqt6AgMzQzS0LCt+y1nOuMgCA0ODVLQihvcHVzLTQtOCnrnbwg7J287IOB7KCB7Jy866GcIOy0iOqzvO2VnOuLpC4g7ZWc6rOE7J2YIOygiOuwmCg2NEtCKeydhCDsnoTqs4TqsJLsnLzroZwg7J6h7JWEXG4vLyBVVEYtOCDrqYDti7DrsJTsnbTtirjCt+yYiOy4oSDrqrsg7ZWcIOyXrOycoOu2hOq5jOyngCDslYjsoIQg66eI7KeE7J2EIOuRlOuLpC5cbmV4cG9ydCBjb25zdCBTWVNURU1fUFJPTVBUX0FSR1ZfTUFYX0JZVEVTID0gNjQgKiAxMDI0O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDbGF1ZGVBcmdzKG9wdHM6IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuCDsoITri6zsnYAg7YGs6riw66GcIOu2hOq4sO2VnOuLpCjtmLjstpzrtoDqsIAg6rKw7KCVKTpcbiAgLy8gIC0g7J6R7Jy866m0IHN5c3RlbShpbmxpbmUpIOKGkiAtLXN5c3RlbS1wcm9tcHQgPHRleHQ+ICjtjIzsnbwgSS9PIOyXhuydjCwg6riw7KG0IOqyveuhnClcbiAgLy8gIC0g7YGs66m0IHN5c3RlbVByb21wdEZpbGUo6rK966GcKSDihpIgLS1zeXN0ZW0tcHJvbXB0LWZpbGUgPHBhdGg+IChhcmd2IO2VnOqzhCDtmoztlLwpXG4gIC8vIC0tc3lzdGVtLXByb21wdC1maWxlIOydgCAtLXN5c3RlbS1wcm9tcHQg7JmAIOuPmeydvO2VmOqyjCBkZWZhdWx0IOulvCByZXBsYWNlIO2VnOuLpChhcHBlbmQg7JWE64uYIOKAlFxuICAvLyBSNyDqsqnrpqwg67O07KG0LCDsi6TsuKEg7ZmV7J24KS4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdChkZWZhdWx0IDIzayDso7zsnoUg67Cp7KeAKS5cbiAgc3lzdGVtPzogc3RyaW5nO1xuICBzeXN0ZW1Qcm9tcHRGaWxlPzogc3RyaW5nO1xuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBuZWVkc09uZU1pbGxpb25TdWZmaXg/OiBib29sZWFuO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn0pOiBBcnJheTxzdHJpbmc+IHtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ob3B0cy5qc29uU2NoZW1hICYmIG9wdHMuanNvblNjaGVtYS5sZW5ndGggPiAwKTtcbiAgLy8gLS10b29scyBcIlwiIOuhnCDsoITssrQg7LCo64uoLCBzdHJ1Y3R1cmVkKGpzb25TY2hlbWEg7J6I7J2MKSDrqbQgU3RydWN0dXJlZE91dHB1dCDrp4wg7ZeI7JqpLlxuICBjb25zdCB0b29sQXJncyA9IHVzZVN0cnVjdHVyZWRcbiAgICA/IFtcIi0tdG9vbHNcIiwgXCJcIiwgXCItLWFsbG93ZWQtdG9vbHNcIiwgXCJTdHJ1Y3R1cmVkT3V0cHV0XCJdXG4gICAgOiBbXCItLXRvb2xzXCIsIFwiXCJdO1xuXG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirg6IO2MjOydvCDqsr3roZzqsIAg7Jik66m0IC0tc3lzdGVtLXByb21wdC1maWxlLCDslYTri4jrqbQgaW5saW5lIC0tc3lzdGVtLXByb21wdC5cbiAgLy8gKO2YuOy2nOu2gOqwgCDtgazquLDroZwg67aE6riw7ZW0IOuRmCDspJEg7ZWY64KY66eMIOyxhOyatOuLpC4g65GYIOuLpCDsl4bsnLzrqbQg67mIIC0tc3lzdGVtLXByb21wdC4pXG4gIGNvbnN0IHN5c3RlbUFyZ3MgPSBvcHRzLnN5c3RlbVByb21wdEZpbGVcbiAgICA/IFtcIi0tc3lzdGVtLXByb21wdC1maWxlXCIsIG9wdHMuc3lzdGVtUHJvbXB0RmlsZV1cbiAgICA6IFtcIi0tc3lzdGVtLXByb21wdFwiLCBvcHRzLnN5c3RlbSA/PyBcIlwiXTtcblxuICBjb25zdCBhcmdzOiBBcnJheTxzdHJpbmc+ID0gW1xuICAgIFwiLXBcIixcbiAgICAuLi50b29sQXJncyxcbiAgICBcIi0tZGlzYWxsb3dlZFRvb2xzXCIsXG4gICAgLi4uQU5USFJPUElDX0RJU0FMTE9XRURfVE9PTFMsXG4gICAgXCItLWlucHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tb3V0cHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tdmVyYm9zZVwiLFxuICAgIC4uLihvcHRzLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMgPyBbXCItLWluY2x1ZGUtcGFydGlhbC1tZXNzYWdlc1wiXSA6IFtdKSxcbiAgICBcIi0tcGVybWlzc2lvbi1tb2RlXCIsXG4gICAgXCJieXBhc3NQZXJtaXNzaW9uc1wiLFxuICAgIFwiLS1zZXR0aW5nLXNvdXJjZXNcIixcbiAgICBcInByb2plY3RcIixcbiAgICBcIi0tbW9kZWxcIixcbiAgICBhcHBseU9uZU1pbGxpb25TdWZmaXgob3B0cy5tb2RlbCwgb3B0cy5uZWVkc09uZU1pbGxpb25TdWZmaXggPz8gZmFsc2UpLFxuICAgIC8vIGlubGluZSBbU3lzdGVtXSDquIjsp4Ag4oCUIOygleyLnSDssYTrhJDrp4woUjcpLiDsg53rnrUg7IucIENDIGRlZmF1bHQoMjNrKSDso7zsnoXrkJjrr4DroZwg67CY65Oc7IucIOuqheyLnC5cbiAgICAvLyDtgazquLDsl5Ag65Sw6528IC0tc3lzdGVtLXByb21wdCjsnpHsnYwpIC8gLS1zeXN0ZW0tcHJvbXB0LWZpbGUo7YG8KeuhnCDrtoTquLAoc3lzdGVtQXJncykuXG4gICAgLi4uc3lzdGVtQXJncyxcbiAgICBcIi0tdGhpbmtpbmdcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCItLWVmZm9ydFwiLFxuICAgIG9wdHMuZWZmb3J0ID8/IEFOVEhST1BJQ19ERUZBVUxUX0VGRk9SVCxcbiAgICBcIi0tZGlzYWJsZS1zbGFzaC1jb21tYW5kc1wiLFxuICAgIFwiLS1zZXNzaW9uLWlkXCIsXG4gICAgb3B0cy5zZXNzaW9uSWQsXG4gIF07XG4gIGlmICh1c2VTdHJ1Y3R1cmVkKSBhcmdzLnB1c2goXCItLWpzb24tc2NoZW1hXCIsIG9wdHMuanNvblNjaGVtYSEpO1xuICByZXR1cm4gYXJncztcbn1cblxuLyoqXG4gKiBDbGF1ZGUg7IS47IWY7J2EIHNwYXduIO2VtCDtlZwgdHVybiDsnYQg7Iuk7ZaJ7ZWc64ukLiBwZXItc2Vzc2lvbiDrnb3snLzroZwg7KeB66Cs7ZmU65Cc64ukLlxuICogQHBhcmFtIG9uRGVsdGEg7KCQ7KeEIO2FjeyKpO2KuCBkZWx0YShzdHJlYW1UZXh0KSDrmJDripQgc3RydWN0dXJlZCDrtoDrtoQgSlNPTihzdHJlYW1PYmplY3QpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ2xhdWRlU2Vzc2lvbihcbiAgcmVxOiBDbGF1ZGVTZXNzaW9uUmVxdWVzdCxcbiAgb25EZWx0YTogKHRleHQ6IHN0cmluZykgPT4gdm9pZCxcbik6IFByb21pc2U8Q2xhdWRlU2Vzc2lvblJlc3VsdD4ge1xuICAvLyDsoJXqt5ztmZQg6rec7LmZ7J2AIGNhbm9uaWNhbEFudGhyb3BpY01vZGVsIOydtCDri6jrj4Ug7IaM7JygIOKAlCBkaXNwYXRjaGVyIOqwgCDsnbTrr7ggY2Fub25pY2FsIOydhCDrhJjquLDsp4Drp4wsXG4gIC8vIOyngeygkSDtmLjstpwo7YWM7Iqk7Yq4L+uvuOuemCBjYWxsZXIpIOuMgOu5hCDrsKnslrTsoIHsnLzroZwg7ZWcIOuyiCDrjZQg7Ya16rO87Iuc7YKo64ukKOydtOuvuCBjYW5vbmljYWwg7J2066m0IG5vLW9wKS5cbiAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKHJlcS5tb2RlbCk7XG4gIGNvbnN0IHN1cHBvcnRzT25lTWlsbGlvbiA9IHN1cHBvcnRzMU1Db250ZXh0KG1vZGVsKTtcbiAgY29uc3QgbmVlZHNPbmVNaWxsaW9uU3VmZml4ID0gbmVlZHNDbGkxbVN1ZmZpeChtb2RlbCk7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHJhbmRvbVVVSUQoKTtcbiAgY29uc3QgdXNlU3RydWN0dXJlZCA9IEJvb2xlYW4ocmVxLmpzb25TY2hlbWEgJiYgcmVxLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHdvcmtlcklkID0gbWFrZUFudGhyb3BpY1dvcmtlcklkKHJlcS50b2tlbklkKTtcblxuICByZXR1cm4gd2l0aFNlc3Npb25Mb2NrKHNlc3Npb25JZCwgKCkgPT4ge1xuICAgIGVuc3VyZUN3ZCgpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IGVuc3VyZUNvbmZpZ0RpcihyZXEudG9rZW5JZCk7XG5cbiAgICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq466W8IO2BrOq4sOuhnCDrtoTquLA6IDEyOEtCKGFyZ3Yg7ZWc6rOEKeydmCDsoIjrsJjsnYQg64SY7Jy866m0IO2MjOydvOuhnCDrhJjqsqggRTJCSUcg7ZqM7ZS8LlxuICAgIC8vIOyekeydgCDtlITroaztlITtirjripQg7YyM7J28IEkvTyDsl4bsnbQg6riw7KG0IGlubGluZSDqsr3roZzrpbwg6re464yA66GcIOyTtOuLpCjrjIDrtoDrtoTsnZgg7Zi47LacKS5cbiAgICAvLyDsi6TsoJwg7YyM7J28IOyTsOq4sOuKlCBhYm9ydCDssrTtgawg7J207ZuEKFByb21pc2Ug7JWIKeuhnCDrr7jrpIQsIOydtOuvuCDst6jshozrkJwg7JqU7LKt7JeUIOyTsOyngCDslYrripTri6QuXG4gICAgY29uc3Qgc3lzdGVtID0gcmVxLnN5c3RlbSA/PyBcIlwiO1xuICAgIGNvbnN0IHVzZVN5c3RlbVByb21wdEZpbGUgPSBCdWZmZXIuYnl0ZUxlbmd0aChzeXN0ZW0sIFwidXRmOFwiKSA+IFNZU1RFTV9QUk9NUFRfQVJHVl9NQVhfQllURVM7XG4gICAgY29uc3Qgc3lzdGVtUHJvbXB0RmlsZSA9IHVzZVN5c3RlbVByb21wdEZpbGVcbiAgICAgID8gYCR7Y29uZmlnRGlyfS9zeXN0ZW0tcHJvbXB0LSR7c2Vzc2lvbklkfS50eHRgXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFyZ3MgPSBidWlsZENsYXVkZUFyZ3Moe1xuICAgICAgbW9kZWwsXG4gICAgICBzeXN0ZW06IHVzZVN5c3RlbVByb21wdEZpbGUgPyB1bmRlZmluZWQgOiByZXEuc3lzdGVtLFxuICAgICAgc3lzdGVtUHJvbXB0RmlsZSxcbiAgICAgIGVmZm9ydDogcmVxLmVmZm9ydCxcbiAgICAgIGpzb25TY2hlbWE6IHJlcS5qc29uU2NoZW1hLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgbmVlZHNPbmVNaWxsaW9uU3VmZml4LFxuICAgICAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlczogcmVxLmluY2x1ZGVQYXJ0aWFsTWVzc2FnZXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dExpbmVzID0gYnVpbGRTdHJlYW1Kc29uSW5wdXQoe1xuICAgICAgY29sZEhpc3Rvcnk6IHJlcS5jb2xkSGlzdG9yeSxcbiAgICAgIGlucHV0OiByZXEuaW5wdXQsXG4gICAgfSk7XG4gICAgY29uc3Qgc3RkaW5QYXlsb2FkID0gZGVjb3JhdGVBbmRTZXJpYWxpemUoaW5wdXRMaW5lcywgc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDbGF1ZGVTZXNzaW9uUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyDrjIDtmJUg7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuOuKlCBzcGF3biDsp4HsoITsl5Ag7YyM7J2866GcIOq4sOuhnShhcmd2IEUyQklHIO2ajO2UvCkuIOyiheujjCDsi5wg7KCV66as7ZWc64ukLlxuICAgICAgaWYgKHN5c3RlbVByb21wdEZpbGUpIHdyaXRlRmlsZVN5bmMoc3lzdGVtUHJvbXB0RmlsZSwgc3lzdGVtKTtcblxuICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImNsYXVkZVwiLCBhcmdzLCB7XG4gICAgICAgIC8vIHN0ZGVyciDrj4Qg7Lqh7LKYOiBpbnZhbGlkIE9BdXRoIC8g7J6Y66q765CcIO2UjOuemOq3uCAvIENMSSDqsoDspp0g7Iuk7Yyo6rCAXG4gICAgICAgIC8vIFwiY2xvc2VkIHdpdGhvdXQgcmVzdWx0XCIg66GcIOutieqwnOyngOyngCDslYrqsowgY2xvc2UvZXJyb3Ig7JeQIHN0ZGVyciDrpbwg7Iuk7Ja0IOuztOuCuOuLpC5cbiAgICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgY3dkOiBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgUEFUSDogcHJvY2Vzcy5lbnYuUEFUSCxcbiAgICAgICAgICBUTVBESVI6IHByb2Nlc3MuZW52LlRNUERJUixcbiAgICAgICAgICBDTEFVREVfQ09ERV9PQVVUSF9UT0tFTjogcmVxLnRva2VuLFxuICAgICAgICAgIENMQVVERV9DT05GSUdfRElSOiBjb25maWdEaXIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9BVVRPX01FTU9SWTogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9BREFQVElWRV9USElOS0lORzogXCIxXCIsXG4gICAgICAgICAgLi4ub25lTWlsbGlvbkVudihzdXBwb3J0c09uZU1pbGxpb24pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQ0xBVURFX01EUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9URVJNSU5BTF9USVRMRTogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9CVU5ETEVEX1NLSUxMUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9XT1JLRkxPV1M6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUjogXCIwXCIsXG4gICAgICAgICAgTUFYX1RISU5LSU5HX1RPS0VOUzogXCIwXCIsXG4gICAgICAgICAgLy8gc3RydWN0dXJlZCBvdXRwdXQg7J28IOuVjOunjCByZXRyeSDrpbwg6rOg7KCV7ZWc64ukKFNPTi00OTUpLiB0ZXh0IOuqqOuTnOuKlCDsmIHtlqUg7JeG7J2MLlxuICAgICAgICAgIC4uLih1c2VTdHJ1Y3R1cmVkID8gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYoKSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThDQSxNQUFNLGdDQUFnQixJQUFJLEtBQStCO0FBRXpELGVBQXNCLGdCQUFtQixXQUFtQixJQUFrQztDQUc1RixNQUFNLFFBRk8sY0FBYyxJQUFJLFVBQVUsSUFBSSxRQUFRLFNBQVMsRUFFNUMsS0FBSyxJQUFJLEdBQUc7Q0FHOUIsTUFBTSxPQUFPLEtBQUssV0FDVixVQUNBLEdBQ1A7QUFDRCxlQUFjLElBQUksV0FBVyxLQUFLO0FBQ2xDLEtBQUk7QUFDRixTQUFPLE1BQU07V0FDTDtBQUVSLE1BQUksY0FBYyxJQUFJLFVBQVUs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
269
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvc2VyZGVfanNvbi9Kc29uVmFsdWVcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgYW50aHJvcGljQ29uZmlnRGlyLFxuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LFxuICBjYW5vbmljYWxBbnRocm9waWNNb2RlbCxcbiAgbmVlZHNDbGkxbVN1ZmZpeCxcbiAgcmVxdWlyZXNBZGFwdGl2ZVRoaW5raW5nLFxuICBzdXBwb3J0czFNQ29udGV4dCxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRTdHJlYW1Kc29uSW5wdXQsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtSnNvblN0YXRlLFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25MaW5lLFxuICB0eXBlIENsYXVkZVN0cmVhbVJlc3VsdCxcbiAgaGFuZGxlU3RyZWFtSnNvbkxpbmUsXG59IGZyb20gXCIuL3N0cmVhbS1qc29uLWFkYXB0ZXJcIjtcblxuLy8g4pSA4pSAIHBlci1zZXNzaW9uIOudvSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gc2Vzc2lvbi1pZCDri6jsnIQg7KeB66Cs7ZmUIHByaW1pdGl2ZS4g6riw67O4IOqyveuhnOyXkOyEnOuKlCDrp6Qg7Zi47LacIOyDiCB1dWlkIOudvCDsgqzsi6Tsg4Egbm8tb3Ag7J207KeA66eMLFxuLy8g6rCZ7J2AIHNlc3Npb24taWQg66W8IOyngeygkSDsk7DripQg7Zi47Lac7J6Q64qUIOyXrOyghO2eiCDsp4HroKztmZQg67O07J6l7J2EIOuwm+uKlOuLpC5cbmNvbnN0IHNlc3Npb25DaGFpbnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4oKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhTZXNzaW9uTG9jazxUPihzZXNzaW9uSWQ6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcHJldiA9IHNlc3Npb25DaGFpbnMuZ2V0KHNlc3Npb25JZCkgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIC8vIOydtOyghCB0dXJuIOydmCDshLHtjKjsmYAg66y06rSA7ZWY6rKMIOyngeugrCDssrTsnbjsnYQg7J6H64qU64ukLlxuICBjb25zdCBuZXh0ID0gcHJldi50aGVuKGZuLCBmbik7XG4gIC8vIHRhaWw6IOyEse2MqCDrrLTqtIAgc2V0dGxlIOuQmOuKlCDtlbjrk6QuIOydtOqxuCDrp7Xsl5Ag65GQ6rOgLCBmaW5hbGx5IOyXkOyEnCBcIuyXrOyghO2eiCDrgrTqsIAg64GdXCLsnbwg65WM66eMIOyCreygnC5cbiAgLy8gKHNldCDsp4Htm4QgdW5kZWZpbmVkIOqygOyCrOuhnCDtlZjrqbQg7KCI64yAIOyCreygnCDslYgg64+8IOyEuOyFmCBpZCDqsIAg64iE7IiY65CoIOKAlCB0YWlsIOydvOy5mCDqsoDsgqzroZwg7ZqM7ZS8LilcbiAgY29uc3QgdGFpbCA9IG5leHQudGhlbihcbiAgICAoKSA9PiB7fSxcbiAgICAoKSA9PiB7fSxcbiAgKTtcbiAgc2Vzc2lvbkNoYWlucy5zZXQoc2Vzc2lvbklkLCB0YWlsKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV4dDtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyDqt7gg7IKs7J20IOuLpOuluCB0dXJuIOydtCDssrTsnbjsnYQg7J207Ja067Cb7JWY7Jy866m0IHRhaWwg7J20IOq1kOyytOuPvCDsnojri6Qg4oCUIOq3uOuVjOuKlCDsgq3soJztlZjsp4Ag7JWK64qU64ukLlxuICAgIGlmIChzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID09PSB0YWlsKSBzZXNzaW9uQ2hhaW5zLmRlbGV0ZShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIOKUgOKUgCBjb29yZCDrp6TtlZEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHRva2VuIOq4sOuwmCDslYjsoJUgd29ya2VySWQg7ZWp7ISxLiBBbnRocm9waWMg7J2AIHdvcmtlciBwb29sIOydtCDsl4bsnLzrr4DroZwgdG9rZW5JZCDrpbwg6re464yA66GcIOyTtOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQW50aHJvcGljV29ya2VySWQodG9rZW5JZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHRva2VuSWQ7XG59XG5cbi8vIOKUgOKUgCBlbnZlbG9wZSBkZWNvcmF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gc3RyZWFtLWpzb24g7J6F66ClIOudvOyduOyXkCBTREsgZW52ZWxvcGUg67aA7LCpIO2bhCDsp4HroKztmZQuIHNlc3Npb24g7IaM7Jyg7J6Q7J24IOyXrOq4sOyEnCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVBbmRTZXJpYWxpemUoXG4gIGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4sXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBsaW5lc1xuICAgICAgLm1hcCgobGluZSkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLmxpbmUsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICBwYXJlbnRfdG9vbF91c2VfaWQ6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiXG4gICk7XG59XG5cbi8vIOKUgOKUgCBzcGF3biArIGNvbnN1bWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU2Vzc2lvblJlcXVlc3Qge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuOiBzdHJpbmc7IC8vIE9BdXRoIGFjY2VzcyB0b2tlblxuICBtb2RlbDogc3RyaW5nO1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7IC8vIOyeiOycvOuptCBzdHJ1Y3R1cmVkIG91dHB1dFxuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIGlucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVzdWx0IGV4dGVuZHMgQ2xhdWRlU3RyZWFtUmVzdWx0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdvcmtlcklkOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gcGVyLXRva2VuIENMQVVERV9DT05GSUdfRElSIOuztOyepSjqsqnrpqwpLiDqsr3roZwg6rec7LmZ7J2AIGFudGhyb3BpY0NvbmZpZ0RpcijsiJzsiJgg7ZWo7IiYKeydtCDshozsnKAg4oCUXG4vLyDsl6zquLDshKAg6re4IOqyveuhnOyXkCDruYggc2V0dGluZ3Mg66W8IOq5lOyVhCBjbGF1ZGUtbWVtIGhvb2sg65Ox7J2EIOywqOuLqO2VnOuLpC4gKFIxMCDqsqnrpqwpXG4vLyDsnbQgc2VlZCDtjIzsnbzsnYAgY2xhdWRlLW1lbSBob29rIC8g7IKs7Jqp7J6QIOyEpOyglSDsmKTsl7wg7LCo64uo7J2EIOychO2VnCDqsqnrpqwg6rK96rOE64ukLiDrp6Qg7Zi47Lac66eI64ukIOuLpOyLnCDsjajshJxcbi8vIOyZuOu2gCDrs4DsobDCt+yCreygnCDtm4Tsl5Drj4Qg64uk7J2MIOyLpO2WieyXkOyEnCBzZWxmLWhlYWxpbmcg65CY64+E66GdIOq4sOyhtCBzZW1hbnRpY3Mg66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyID0gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQpO1xuICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9Ly5jbGF1ZGUuanNvbmAsIFwie31cIik7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgcmV0dXJuIGRpcjtcbn1cblxubGV0IGN3ZEVuc3VyZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGVuc3VyZUN3ZCgpOiB2b2lkIHtcbiAgaWYgKGN3ZEVuc3VyZWQpIHJldHVybjtcbiAgbWtkaXJTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbmAsIFwie31cIik7XG4gIGN3ZEVuc3VyZWQgPSB0cnVlO1xufVxuXG4vLyBzcGF3biBhcmdzIOq1rOyEsS4g66mA7Yuw7YS0L+qyqeumrC9zdHJ1Y3R1cmVkIOuqqOuTnCDrsJjsmIEuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPbmVNaWxsaW9uU3VmZml4KG1vZGVsOiBzdHJpbmcsIG5lZWRzU3VmZml4OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKTtcbiAgcmV0dXJuIG5lZWRzU3VmZml4ID8gYCR7YmFzZX1bMW1dYCA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVNaWxsaW9uRW52KHN1cHBvcnRlZDogYm9vbGVhbik6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUPzogXCIxXCIgfSB7XG4gIHJldHVybiBzdXBwb3J0ZWQgPyB7fSA6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpbmtpbmdFbnYobW9kZWw6IHN0cmluZyk6IHtcbiAgQ0xBVURFX0NPREVfRElTQUJMRV9BREFQVElWRV9USElOS0lORz86IFwiMVwiO1xuICBNQVhfVEhJTktJTkdfVE9LRU5TPzogXCIwXCI7XG59IHtcbiAgcmV0dXJuIHJlcXVpcmVzQWRhcHRpdmVUaGlua2luZyhtb2RlbClcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQURBUFRJVkVfVEhJTktJTkc6IFwiMVwiLFxuICAgICAgICBNQVhfVEhJTktJTkdfVE9LRU5TOiBcIjBcIixcbiAgICAgIH07XG59XG5cbi8vIFNPTi00OTU6IHN0cnVjdHVyZWQgb3V0cHV0IHJldHJ5IOulvCAxIOuhnCDqs6DsoJXtlZzri6QuIENDIOqwgCBhdHRlbXB0IOulvCByZWplY3Qg7ZWY6rOgIHJldHJ5IO2VmOuptFxuLy8gYHtyZWplY3RlZH17YWNjZXB0ZWR9YCDriITsoIHsnbQgQUktU0RLIOydmCBKU09OLnBhcnNlIOulvCDquajrnKjrpqzrr4DroZwsIHJldHJ5IOyekOyytOulvCDrp4nslYQg6re4IOqyveuhnOulvFxuLy8g7JuQ7LKcIOywqOuLqO2VnOuLpC4gYDBgIOydgCBDQyBxdWVyeSBsb29wKGBjYWxsc1RoaXNRdWVyeSA+PSBtYXhSZXRyaWVzYCnqsIAg7LKrIGF0dGVtcHQgZW1pdCDsoITsl5Bcbi8vIOyLpO2MqOyLnO2CpOuvgOuhnChgZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXNgKSDsmbjrtoAg6rCS7J20IDEg66+466eM7J207Ja064+EIDEg66GcIO2BtOueqO2UhO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkT3V0cHV0UmV0cmllc0VudihyYXcgPSBwcm9jZXNzLmVudi5NQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUyk6IHtcbiAgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IHN0cmluZztcbn0ge1xuICBpZiAoIXJhdykgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFwiMVwiIH07XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFwiMVwiIH07XG4gIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBTdHJpbmcoTWF0aC5tYXgocGFyc2VkLCAxKSkgfTtcbn1cblxuLy8gTGludXgg64uo7J28IGFyZ3Yg7J247J6QIO2VnOqzhChNQVhfQVJHX1NUUkxFTiA9IFBBR0VfU0laRcOXMzIgPSAxMjhLQiwg7Luk64SQIO2VmOuTnOy9lOuUqSDsg4HsiJgpXG4vLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq46rCAIOydtOulvCDrhJjsnLzrqbQgZXhlY3ZlIOqwgCBFMkJJRyDroZwg6rGw67aA65Cc64ukLiBkZXRpIOuTsSDrjIDtmJUg7ZSE66Gs7ZSE7Yq464qUIOyLpOy4oVxuLy8g7Y+J6regIDM0M0tCwrfstZzrjIAgNDg1S0Iob3B1cy00LTgp6528IOydvOyDgeyggeycvOuhnCDstIjqs7ztlZzri6QuIO2VnOqzhOydmCDsoIjrsJgoNjRLQinsnYQg7J6E6rOE6rCS7Jy866GcIOyeoeyVhFxuLy8gVVRGLTgg66mA7Yuw67CU7J207Yq4wrfsmIjsuKEg66q7IO2VnCDsl6zsnKDrtoTquYzsp4Ag7JWI7KCEIOuniOynhOydhCDrkZTri6QuXG5leHBvcnQgY29uc3QgU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUyA9IDY0ICogMTAyNDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhdWRlQXJncyhvcHRzOiB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirgg7KCE64us7J2AIO2BrOq4sOuhnCDrtoTquLDtlZzri6Qo7Zi47Lac67aA6rCAIOqysOyglSk6XG4gIC8vICAtIOyekeycvOuptCBzeXN0ZW0oaW5saW5lKSDihpIgLS1zeXN0ZW0tcHJvbXB0IDx0ZXh0PiAo7YyM7J28IEkvTyDsl4bsnYwsIOq4sOyhtCDqsr3roZwpXG4gIC8vICAtIO2BrOuptCBzeXN0ZW1Qcm9tcHRGaWxlKOqyveuhnCkg4oaSIC0tc3lzdGVtLXByb21wdC1maWxlIDxwYXRoPiAoYXJndiDtlZzqs4Qg7ZqM7ZS8KVxuICAvLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSDsnYAgLS1zeXN0ZW0tcHJvbXB0IOyZgCDrj5nsnbztlZjqsowgZGVmYXVsdCDrpbwgcmVwbGFjZSDtlZzri6QoYXBwZW5kIOyVhOuLmCDigJRcbiAgLy8gUjcg6rKp66asIOuztOyhtCwg7Iuk7LihIO2ZleyduCkuIOuRmCDri6Qg7JeG7Jy866m0IOu5iCAtLXN5c3RlbS1wcm9tcHQoZGVmYXVsdCAyM2sg7KO87J6FIOuwqeyngCkuXG4gIHN5c3RlbT86IHN0cmluZztcbiAgc3lzdGVtUHJvbXB0RmlsZT86IHN0cmluZztcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbmVlZHNPbmVNaWxsaW9uU3VmZml4PzogYm9vbGVhbjtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59KTogQXJyYXk8c3RyaW5nPiB7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWQgPSBCb29sZWFuKG9wdHMuanNvblNjaGVtYSAmJiBvcHRzLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIC8vIC0tdG9vbHMgXCJcIiDroZwg7KCE7LK0IOywqOuLqCwgc3RydWN0dXJlZChqc29uU2NoZW1hIOyeiOydjCkg66m0IFN0cnVjdHVyZWRPdXRwdXQg66eMIO2XiOyaqS5cbiAgY29uc3QgdG9vbEFyZ3MgPSB1c2VTdHJ1Y3R1cmVkXG4gICAgPyBbXCItLXRvb2xzXCIsIFwiXCIsIFwiLS1hbGxvd2VkLXRvb2xzXCIsIFwiU3RydWN0dXJlZE91dHB1dFwiXVxuICAgIDogW1wiLS10b29sc1wiLCBcIlwiXTtcblxuICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4OiDtjIzsnbwg6rK966Gc6rCAIOyYpOuptCAtLXN5c3RlbS1wcm9tcHQtZmlsZSwg7JWE64uI66m0IGlubGluZSAtLXN5c3RlbS1wcm9tcHQuXG4gIC8vICjtmLjstpzrtoDqsIAg7YGs6riw66GcIOu2hOq4sO2VtCDrkZgg7KSRIO2VmOuCmOunjCDssYTsmrTri6QuIOuRmCDri6Qg7JeG7Jy866m0IOu5iCAtLXN5c3RlbS1wcm9tcHQuKVxuICBjb25zdCBzeXN0ZW1BcmdzID0gb3B0cy5zeXN0ZW1Qcm9tcHRGaWxlXG4gICAgPyBbXCItLXN5c3RlbS1wcm9tcHQtZmlsZVwiLCBvcHRzLnN5c3RlbVByb21wdEZpbGVdXG4gICAgOiBbXCItLXN5c3RlbS1wcm9tcHRcIiwgb3B0cy5zeXN0ZW0gPz8gXCJcIl07XG5cbiAgY29uc3QgYXJnczogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICBcIi1wXCIsXG4gICAgLi4udG9vbEFyZ3MsXG4gICAgXCItLWRpc2FsbG93ZWRUb29sc1wiLFxuICAgIC4uLkFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICAgIFwiLS1pbnB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLW91dHB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLXZlcmJvc2VcIixcbiAgICAuLi4ob3B0cy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzID8gW1wiLS1pbmNsdWRlLXBhcnRpYWwtbWVzc2FnZXNcIl0gOiBbXSksXG4gICAgXCItLXBlcm1pc3Npb24tbW9kZVwiLFxuICAgIFwiYnlwYXNzUGVybWlzc2lvbnNcIixcbiAgICBcIi0tc2V0dGluZy1zb3VyY2VzXCIsXG4gICAgXCJwcm9qZWN0XCIsXG4gICAgXCItLW1vZGVsXCIsXG4gICAgYXBwbHlPbmVNaWxsaW9uU3VmZml4KG9wdHMubW9kZWwsIG9wdHMubmVlZHNPbmVNaWxsaW9uU3VmZml4ID8/IGZhbHNlKSxcbiAgICAvLyBpbmxpbmUgW1N5c3RlbV0g6riI7KeAIOKAlCDsoJXsi50g7LGE64SQ66eMKFI3KS4g7IOd6561IOyLnCBDQyBkZWZhdWx0KDIzaykg7KO87J6F65CY66+A66GcIOuwmOuTnOyLnCDrqoXsi5wuXG4gICAgLy8g7YGs6riw7JeQIOuUsOudvCAtLXN5c3RlbS1wcm9tcHQo7J6R7J2MKSAvIC0tc3lzdGVtLXByb21wdC1maWxlKO2BvCnroZwg67aE6riwKHN5c3RlbUFyZ3MpLlxuICAgIC4uLnN5c3RlbUFyZ3MsXG4gICAgLy8gRmFibGUgNSDripQgYWRhcHRpdmUgdGhpbmtpbmcg7J20IO2VreyDgSDsvJzsoLgg7J6I7Ja0IGRpc2FibGVkIOulvCDqsbDrtoDtlZzri6QuXG4gICAgLi4uKHJlcXVpcmVzQWRhcHRpdmVUaGlua2luZyhvcHRzLm1vZGVsKSA/IFtdIDogW1wiLS10aGlua2luZ1wiLCBcImRpc2FibGVkXCJdKSxcbiAgICBcIi0tZWZmb3J0XCIsXG4gICAgb3B0cy5lZmZvcnQgPz8gQU5USFJPUElDX0RFRkFVTFRfRUZGT1JULFxuICAgIFwiLS1kaXNhYmxlLXNsYXNoLWNvbW1hbmRzXCIsXG4gICAgXCItLXNlc3Npb24taWRcIixcbiAgICBvcHRzLnNlc3Npb25JZCxcbiAgXTtcbiAgaWYgKHVzZVN0cnVjdHVyZWQpIGFyZ3MucHVzaChcIi0tanNvbi1zY2hlbWFcIiwgb3B0cy5qc29uU2NoZW1hISk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIENsYXVkZSDshLjshZjsnYQgc3Bhd24g7ZW0IO2VnCB0dXJuIOydhCDsi6TtlontlZzri6QuIHBlci1zZXNzaW9uIOudveycvOuhnCDsp4HroKztmZTrkJzri6QuXG4gKiBAcGFyYW0gb25EZWx0YSDsoJDsp4Qg7YWN7Iqk7Yq4IGRlbHRhKHN0cmVhbVRleHQpIOuYkOuKlCBzdHJ1Y3R1cmVkIOu2gOu2hCBKU09OKHN0cmVhbU9iamVjdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5DbGF1ZGVTZXNzaW9uKFxuICByZXE6IENsYXVkZVNlc3Npb25SZXF1ZXN0LFxuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxDbGF1ZGVTZXNzaW9uUmVzdWx0PiB7XG4gIC8vIOygleq3nO2ZlCDqt5zsuZnsnYAgY2Fub25pY2FsQW50aHJvcGljTW9kZWwg7J20IOuLqOuPhSDshozsnKAg4oCUIGRpc3BhdGNoZXIg6rCAIOydtOuvuCBjYW5vbmljYWwg7J2EIOuEmOq4sOyngOunjCxcbiAgLy8g7KeB7KCRIO2YuOy2nCjthYzsiqTtirgv66+4656YIGNhbGxlcikg64yA67mEIOuwqeyWtOyggeycvOuhnCDtlZwg67KIIOuNlCDthrXqs7zsi5ztgqjri6Qo7J2066+4IGNhbm9uaWNhbCDsnbTrqbQgbm8tb3ApLlxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KHJlcS5tb2RlbCk7XG4gIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgY29uc3Qgc3VwcG9ydHNPbmVNaWxsaW9uID0gc3VwcG9ydHMxTUNvbnRleHQobW9kZWwpO1xuICBjb25zdCBuZWVkc09uZU1pbGxpb25TdWZmaXggPSBuZWVkc0NsaTFtU3VmZml4KG1vZGVsKTtcbiAgY29uc3Qgc2Vzc2lvbklkID0gcmFuZG9tVVVJRCgpO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkID0gQm9vbGVhbihyZXEuanNvblNjaGVtYSAmJiByZXEuanNvblNjaGVtYS5sZW5ndGggPiAwKTtcbiAgY29uc3Qgd29ya2VySWQgPSBtYWtlQW50aHJvcGljV29ya2VySWQocmVxLnRva2VuSWQpO1xuXG4gIHJldHVybiB3aXRoU2Vzc2lvbkxvY2soc2Vzc2lvbklkLCAoKSA9PiB7XG4gICAgZW5zdXJlQ3dkKCk7XG4gICAgY29uc3QgY29uZmlnRGlyID0gZW5zdXJlQ29uZmlnRGlyKHJlcS50b2tlbklkKTtcblxuICAgIC8vIOyLnOyKpO2FnCDtlITroaztlITtirjrpbwg7YGs6riw66GcIOu2hOq4sDogMTI4S0IoYXJndiDtlZzqs4Qp7J2YIOygiOuwmOydhCDrhJjsnLzrqbQg7YyM7J2866GcIOuEmOqyqCBFMkJJRyDtmoztlLwuXG4gICAgLy8g7J6R7J2AIO2UhOuhrO2UhO2KuOuKlCDtjIzsnbwgSS9PIOyXhuydtCDquLDsobQgaW5saW5lIOqyveuhnOulvCDqt7jrjIDroZwg7JO064ukKOuMgOu2gOu2hOydmCDtmLjstpwpLlxuICAgIC8vIOyLpOygnCDtjIzsnbwg7JOw6riw64qUIGFib3J0IOyytO2BrCDsnbTtm4QoUHJvbWlzZSDslYgp66GcIOuvuOukhCwg7J2066+4IOy3qOyGjOuQnCDsmpTssq3sl5Qg7JOw7KeAIOyViuuKlOuLpC5cbiAgICBjb25zdCBzeXN0ZW0gPSByZXEuc3lzdGVtID8/IFwiXCI7XG4gICAgY29uc3QgdXNlU3lzdGVtUHJvbXB0RmlsZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHN5c3RlbSwgXCJ1dGY4XCIpID4gU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUztcbiAgICBjb25zdCBzeXN0ZW1Qcm9tcHRGaWxlID0gdXNlU3lzdGVtUHJvbXB0RmlsZVxuICAgICAgPyBgJHtjb25maWdEaXJ9L3N5c3RlbS1wcm9tcHQtJHtzZXNzaW9uSWR9LnR4dGBcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkQ2xhdWRlQXJncyh7XG4gICAgICBtb2RlbCxcbiAgICAgIHN5c3RlbTogdXNlU3lzdGVtUHJvbXB0RmlsZSA/IHVuZGVmaW5lZCA6IHJlcS5zeXN0ZW0sXG4gICAgICBzeXN0ZW1Qcm9tcHRGaWxlLFxuICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAganNvblNjaGVtYTogcmVxLmpzb25TY2hlbWEsXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBuZWVkc09uZU1pbGxpb25TdWZmaXgsXG4gICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiByZXEuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0TGluZXMgPSBidWlsZFN0cmVhbUpzb25JbnB1dCh7XG4gICAgICBjb2xkSGlzdG9yeTogcmVxLmNvbGRIaXN0b3J5LFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICB9KTtcbiAgICBjb25zdCBzdGRpblBheWxvYWQgPSBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShpbnB1dExpbmVzLCBzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXEuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImFib3J0ZWRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIOuMgO2YlSDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq464qUIHNwYXduIOyngeyghOyXkCDtjIzsnbzroZwg6riw66GdKGFyZ3YgRTJCSUcg7ZqM7ZS8KS4g7KKF66OMIOyLnCDsoJXrpqztlZzri6QuXG4gICAgICBpZiAoc3lzdGVtUHJvbXB0RmlsZSkgd3JpdGVGaWxlU3luYyhzeXN0ZW1Qcm9tcHRGaWxlLCBzeXN0ZW0pO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgICAgLy8gc3RkZXJyIOuPhCDsuqHsspg6IGludmFsaWQgT0F1dGggLyDsnpjrqrvrkJwg7ZSM656Y6re4IC8gQ0xJIOqygOymnSDsi6TtjKjqsIBcbiAgICAgICAgLy8gXCJjbG9zZWQgd2l0aG91dCByZXN1bHRcIiDroZwg662J6rCc7KeA7KeAIOyViuqyjCBjbG9zZS9lcnJvciDsl5Agc3RkZXJyIOulvCDsi6TslrQg67O064K464ukLlxuICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICBjd2Q6IEFOVEhST1BJQ19DTEFVREVfQ1dELFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgICAgICAgIENMQVVERV9DT0RFX09BVVRIX1RPS0VOOiByZXEudG9rZW4sXG4gICAgICAgICAgQ0xBVURFX0NPTkZJR19ESVI6IGNvbmZpZ0RpcixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZOiBcIjFcIixcbiAgICAgICAgICAuLi50aGlua2luZ0Vudihtb2RlbCksXG4gICAgICAgICAgLi4ub25lTWlsbGlvbkVudihzdXBwb3J0c09uZU1pbGxpb24pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQ0xBVURFX01EUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9URVJNSU5BTF9USVRMRTogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9CVU5ETEVEX1NLSUxMUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9XT1JLRkxPV1M6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUjogXCIwXCIsXG4gICAgICAgICAgLy8gc3RydWN0dXJlZCBvdXRwdXQg7J28IOuVjOunjCByZXRyeSDrpbwg6rOg7KCV7ZWc64ukKFNPTi00OTUpLiB0ZXh0IOuqqOuTnOuKlCDsmIHtlqUg7JeG7J2MLlxuICAgICAgICAgIC4uLih1c2VTdHJ1Y3R1cmVkID8gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYoKSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxNQUFNLGdDQUFnQixJQUFJLEtBQStCO0FBRXpELGVBQXNCLGdCQUFtQixXQUFtQixJQUFrQztDQUc1RixNQUFNLFFBRk8sY0FBYyxJQUFJLFVBQVUsSUFBSSxRQUFRLFNBQVMsRUFFNUMsS0FBSyxJQUFJLEdBQUc7Q0FHOUIsTUFBTSxPQUFPLEtBQUssV0FDVixVQUNBLEdBQ1A7QUFDRCxlQUFjLElBQUksV0FBVyxLQUFLO0FBQ2xDLEtBQUk7QUFDRixTQUFPLE1BQU07V0FDTDtBQUVSLE1BQUksY0FBYyxJQUFJLFVBQVUsS0FBSyxLQUFNLGVBQWMsT0FBTyxVQUFVOzs7QUFPOUUsU0FBZ0Isc0JBQXNCLFNBQXlCO0FBQzdELFFBQU87O0FBTVQsU0FBZ0IscUJBQ2QsT0FDQSxXQUNRO0FBQ1IsUUFDRSxNQUNHLEtBQUssU0FDSixLQUFLLFVBQVU7RUFDYixHQUFHO0VBQ0gsWUFBWTtFQUNaLE1BQU0sWUFBWTtFQUNsQixvQkFBb0I7RUFDckIsQ0FBQyxDQUNILENBQ0EsS0FBSyxLQUFLLEdBQUc7O0FBOEJwQixTQUFnQixnQkFBZ0IsU0FBeUI7Q0FDdkQsTUFBTSxNQUFNLG1CQUFtQixRQUFRO0FBQ3ZDLFdBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQ25DLGVBQWMsR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQzFDLGVBQWMsR0FBRyxJQUFJLGlCQUFpQixLQUFLO0FBQzNDLFFBQU87O0FBR1QsSUFBSSxhQUFhO0FBQ2pCLFNBQVMsWUFBa0I7QUFDekIsS0FBSSxXQUFZO0FBQ2hCLFdBQVUsR0FBRyxxQkFBcUIsV0FBVyxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQ2pFLGVBQWMsR0FBRyxxQkFB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