@cartanova/qgrid-cli 2.7.1 → 2.7.3

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 (1213) hide show
  1. package/README.ko.md +3 -2
  2. package/README.md +3 -2
  3. package/bundle/dist/application/monit/monit.frame.js +27 -14
  4. package/bundle/dist/application/monit/monit.types.js +22 -13
  5. package/bundle/dist/application/qgrid/conv-routing.js +21 -11
  6. package/bundle/dist/application/qgrid/oauth.js +1 -1
  7. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +15 -4
  8. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +18 -9
  9. package/bundle/dist/application/qgrid/qgrid.frame.js +50 -73
  10. package/bundle/dist/application/qgrid/qgrid.types.js +4 -1
  11. package/bundle/dist/application/qgrid/token-subscriber.js +5 -5
  12. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -1
  13. package/bundle/dist/application/qgrid/tool-emulation.js +1 -1
  14. package/bundle/dist/application/queries.generated.js +3 -1
  15. package/bundle/dist/application/request-log/json-schema-type-text.js +55 -0
  16. package/bundle/dist/application/request-log/request-log.model.js +85 -3
  17. package/bundle/dist/application/request-log/request-log.types.js +3 -2
  18. package/bundle/dist/application/request-log/zod-code-format.js +71 -0
  19. package/bundle/dist/application/setting/setting.constant.js +2 -62
  20. package/bundle/dist/application/setting/setting.model.js +3 -3
  21. package/bundle/dist/application/setting/setting.store.js +2 -2
  22. package/bundle/dist/application/sonamu.generated.js +11 -4
  23. package/bundle/dist/application/sonamu.generated.sso.js +7 -3
  24. package/bundle/dist/i18n/sd.generated.js +5 -2
  25. package/bundle/dist/migrations/20260814130113_alter_request_logs_add1_alter1.js +15 -0
  26. package/bundle/dist/migrations/20260814131051_alter_request_logs_add1_alter1.js +15 -0
  27. package/bundle/dist/migrations/20260814134846_alter_request_logs_add1_alter1.js +15 -0
  28. package/bundle/dist/migrations/20260814140759_alter_request_logs_alter1.js +13 -0
  29. package/bundle/dist/node_modules/.pnpm/{vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d → vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50}/node_modules/vite/dist/node/module-runner.js +2 -2
  30. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +2 -2
  31. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +2 -2
  32. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +3 -3
  33. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +2 -2
  34. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +2 -2
  35. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +2 -2
  36. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +2 -2
  37. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +2 -2
  38. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/index.js +2 -2
  39. package/bundle/dist/sonamu.config.js +10 -9
  40. package/bundle/dist/testing/setup-mocks.js +2 -2
  41. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +14 -2
  42. package/bundle/dist/utils/providers/anthropic/claude-session.js +1 -1
  43. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +1 -1
  44. package/bundle/dist/utils/providers/common/model-cost.js +1 -1
  45. package/bundle/dist/utils/providers/common/schema-validation.js +1 -1
  46. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +144 -0
  47. package/bundle/dist/utils/providers/openai/openai-constants.js +4 -2
  48. package/bundle/dist/utils/providers/openai/openai-direct-client.js +327 -0
  49. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +358 -781
  50. package/bundle/dist/utils/providers/openai/openai-oauth.js +84 -0
  51. package/bundle/dist/utils/providers/openai/openai-quota.js +76 -5
  52. package/bundle/dist/utils/providers/openai/openai-refresh.js +3 -3
  53. package/bundle/dist/utils/providers/openai/openai-sse.js +72 -0
  54. package/bundle/dist/utils/providers/openai/openai-transport-config.js +14 -0
  55. package/bundle/src/application/monit/monit.frame.test.ts +14 -17
  56. package/bundle/src/application/monit/monit.frame.ts +23 -12
  57. package/bundle/src/application/monit/monit.types.ts +40 -11
  58. package/bundle/src/application/qgrid/conv-routing.test.ts +67 -0
  59. package/bundle/src/application/qgrid/conv-routing.ts +46 -12
  60. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +92 -2
  61. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +3 -0
  62. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +15 -1
  63. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +36 -6
  64. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +22 -9
  65. package/bundle/src/application/qgrid/qgrid.frame.ts +55 -94
  66. package/bundle/src/application/qgrid/qgrid.types.ts +11 -4
  67. package/bundle/src/application/qgrid/token-subscriber.ts +4 -4
  68. package/bundle/src/application/qgrid/tool-emulation-schema.ts +1 -1
  69. package/bundle/src/application/qgrid/tool-emulation.test.ts +1 -0
  70. package/bundle/src/application/queries.generated.ts +6 -0
  71. package/bundle/src/application/request-log/json-schema-type-text.test.ts +96 -0
  72. package/bundle/src/application/request-log/json-schema-type-text.ts +83 -0
  73. package/bundle/src/application/request-log/request-log.entity.json +147 -21
  74. package/bundle/src/application/request-log/request-log.model.ts +108 -0
  75. package/bundle/src/application/request-log/request-log.types.ts +2 -0
  76. package/bundle/src/application/request-log/zod-code-format.test.ts +31 -0
  77. package/bundle/src/application/request-log/zod-code-format.ts +73 -0
  78. package/bundle/src/application/setting/setting.constant.test.ts +22 -24
  79. package/bundle/src/application/setting/setting.constant.ts +2 -63
  80. package/bundle/src/application/setting/setting.entity.json +1 -1
  81. package/bundle/src/application/setting/setting.store.ts +1 -1
  82. package/bundle/src/application/sonamu.generated.http +20 -1
  83. package/bundle/src/application/sonamu.generated.sso.ts +4 -0
  84. package/bundle/src/application/sonamu.generated.ts +10 -0
  85. package/bundle/src/i18n/sd.generated.ts +6 -1
  86. package/bundle/src/migrations/20260814130113_alter_request_logs_add1_alter1.ts +15 -0
  87. package/bundle/src/migrations/20260814131051_alter_request_logs_add1_alter1.ts +15 -0
  88. package/bundle/src/migrations/20260814134846_alter_request_logs_add1_alter1.ts +15 -0
  89. package/bundle/src/migrations/20260814140759_alter_request_logs_alter1.ts +13 -0
  90. package/bundle/src/sonamu.config.ts +9 -13
  91. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +17 -2
  92. package/bundle/src/utils/providers/anthropic/claude-session.ts +1 -3
  93. package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +1 -2
  94. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +2 -3
  95. package/bundle/src/utils/providers/common/model-cost.ts +4 -9
  96. package/bundle/src/utils/providers/common/provider-dispatcher.ts +10 -8
  97. package/bundle/src/utils/providers/common/provider-types.ts +48 -0
  98. package/bundle/src/utils/providers/common/schema-validation.ts +1 -1
  99. package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +106 -0
  100. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +255 -0
  101. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  102. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +610 -0
  103. package/bundle/src/utils/providers/openai/openai-direct-client.ts +478 -0
  104. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +336 -1723
  105. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +458 -1175
  106. package/bundle/src/utils/providers/openai/openai-oauth.test.ts +95 -0
  107. package/bundle/src/utils/providers/openai/openai-oauth.ts +141 -0
  108. package/bundle/src/utils/providers/openai/openai-quota.test.ts +80 -7
  109. package/bundle/src/utils/providers/openai/openai-quota.ts +105 -4
  110. package/bundle/src/utils/providers/openai/openai-refresh.test.ts +120 -0
  111. package/bundle/src/utils/providers/openai/openai-refresh.ts +3 -1
  112. package/bundle/src/utils/providers/openai/openai-sse.test.ts +52 -0
  113. package/bundle/src/utils/providers/openai/openai-sse.ts +79 -0
  114. package/bundle/src/utils/providers/openai/openai-transport-config.ts +17 -0
  115. package/bundle/web-dist/client/assets/index-BldeEvAK.css +1 -0
  116. package/bundle/web-dist/client/assets/index-QxWJK2qE.js +106 -0
  117. package/bundle/web-dist/client/assets/logs-DaNYzis5.js +1 -0
  118. package/bundle/web-dist/client/assets/monit-BngOoU4n.js +1 -0
  119. package/bundle/web-dist/client/assets/{routes-J4bnHVfl.js → routes-BnQE0rPF.js} +1 -1
  120. package/bundle/web-dist/client/assets/{services.generated-jGypfumC.js → services.generated-CSW8bhCP.js} +4 -4
  121. package/bundle/web-dist/client/assets/settings-CPeAjsL3.js +1 -0
  122. package/bundle/web-dist/client/assets/show-DUOfuZj1.js +2 -0
  123. package/bundle/web-dist/client/assets/{tokens-DDrATjGA.js → tokens-LHoEigmF.js} +1 -1
  124. package/bundle/web-dist/client/assets/{use-oauth-login-flow-CptleCFM.js → use-oauth-login-flow-YyU4TDzU.js} +1 -1
  125. package/bundle/web-dist/client/index.html +3 -3
  126. package/bundle/web-dist/server/assets/{lazyRouteComponent-DOc8TV-P.js → lazyRouteComponent-0y-znAfz.js} +2 -2
  127. package/bundle/web-dist/server/assets/{logs-CfF3nmLM.js → logs-CJBbHM3_.js} +35 -5
  128. package/bundle/web-dist/server/assets/{monit-BSaKhh5D.js → monit-8WAsPETB.js} +144 -51
  129. package/bundle/web-dist/server/assets/{plus-DLFUHsfx.js → plus-9das21ju.js} +1 -1
  130. package/bundle/web-dist/server/assets/{react-dom-BotjLnTK.js → react-dom-zmEq8BVp.js} +1 -1
  131. package/bundle/web-dist/server/assets/{routes-CHMxrTT0.js → routes-B6bX3o41.js} +3 -3
  132. package/bundle/web-dist/server/assets/{services.generated-D3Q3FYot.js → services.generated-DyPeBI00.js} +76 -2
  133. package/bundle/web-dist/server/assets/{settings-DOQjV28c.js → settings-D1u5WdpP.js} +2 -3
  134. package/bundle/web-dist/server/assets/{show-Cn_C6Qvl.js → show-Cr7vwR0l.js} +93 -8
  135. package/bundle/web-dist/server/assets/{tokens-c0EN3iCx.js → tokens-BumM0gnH.js} +3 -3
  136. package/bundle/web-dist/server/assets/{use-oauth-login-flow-B68AbMDE.js → use-oauth-login-flow-DmsHGOlx.js} +1 -1
  137. package/bundle/web-dist/server/entry-server.generated.js +12 -12
  138. package/dist/cli.d.ts +10 -1
  139. package/dist/cli.js +1 -6
  140. package/package.json +11 -5
  141. package/skills/qgrid/SKILL.md +5 -5
  142. package/skills/qgrid/references/ai-sdk-provider-contract.md +16 -10
  143. package/skills/qgrid/references/cli-env-and-server-boot.md +6 -13
  144. package/skills/qgrid/references/decision-rationale.md +15 -23
  145. package/skills/qgrid/references/docs-workflow.md +1 -1
  146. package/skills/qgrid/references/openai-codex-runtime.md +39 -156
  147. package/skills/qgrid/references/prompt-cache-and-usage.md +35 -71
  148. package/skills/qgrid/references/provider-runtime-differences.md +17 -17
  149. package/skills/qgrid/references/repo-map.md +2 -2
  150. package/skills/qgrid/references/request-log-run-lifecycle.md +12 -2
  151. package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
  152. package/skills/qgrid/references/token-auth-quota-lifecycle.md +14 -24
  153. package/skills/qgrid/references/tool-calling-and-multiturn.md +3 -3
  154. package/skills/qgrid/references/verification-and-debugging.md +17 -15
  155. package/bundle/dist/codex-protocol/AgentPath.js +0 -1
  156. package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
  157. package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
  158. package/bundle/dist/codex-protocol/AuthMode.js +0 -1
  159. package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
  160. package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
  161. package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
  162. package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
  163. package/bundle/dist/codex-protocol/ContentItem.js +0 -1
  164. package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
  165. package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
  166. package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
  167. package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
  168. package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
  169. package/bundle/dist/codex-protocol/FileChange.js +0 -1
  170. package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
  171. package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
  172. package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
  173. package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
  174. package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
  175. package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
  176. package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
  177. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
  178. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
  179. package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
  180. package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
  181. package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
  182. package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
  183. package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
  184. package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
  185. package/bundle/dist/codex-protocol/GitSha.js +0 -1
  186. package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
  187. package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
  188. package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
  189. package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
  190. package/bundle/dist/codex-protocol/InputModality.js +0 -1
  191. package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
  192. package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
  193. package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
  194. package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
  195. package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
  196. package/bundle/dist/codex-protocol/ModeKind.js +0 -1
  197. package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
  198. package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
  199. package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
  200. package/bundle/dist/codex-protocol/Personality.js +0 -1
  201. package/bundle/dist/codex-protocol/PlanType.js +0 -1
  202. package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
  203. package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
  204. package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
  205. package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
  206. package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
  207. package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
  208. package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
  209. package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
  210. package/bundle/dist/codex-protocol/RequestId.js +0 -1
  211. package/bundle/dist/codex-protocol/Resource.js +0 -1
  212. package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
  213. package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
  214. package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
  215. package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
  216. package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
  217. package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
  218. package/bundle/dist/codex-protocol/SessionSource.js +0 -1
  219. package/bundle/dist/codex-protocol/Settings.js +0 -1
  220. package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
  221. package/bundle/dist/codex-protocol/ThreadId.js +0 -1
  222. package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
  223. package/bundle/dist/codex-protocol/Tool.js +0 -1
  224. package/bundle/dist/codex-protocol/Verbosity.js +0 -1
  225. package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
  226. package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
  227. package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
  228. package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
  229. package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
  230. package/bundle/dist/codex-protocol/index.js +0 -2
  231. package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
  232. package/bundle/dist/codex-protocol/v2/Account.js +0 -1
  233. package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
  234. package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
  235. package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
  236. package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
  237. package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
  238. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
  239. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
  240. package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
  241. package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
  242. package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
  243. package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
  244. package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
  245. package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
  246. package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
  247. package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
  248. package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
  249. package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
  250. package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
  251. package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
  252. package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
  253. package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
  254. package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
  255. package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
  256. package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
  257. package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
  258. package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
  259. package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
  260. package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
  261. package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
  262. package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
  263. package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
  264. package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
  265. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
  266. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
  267. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
  268. package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
  269. package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
  270. package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
  271. package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
  272. package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
  273. package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
  274. package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
  275. package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
  276. package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
  277. package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
  278. package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
  279. package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
  280. package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
  281. package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
  282. package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
  283. package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
  284. package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
  285. package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
  286. package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
  287. package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
  288. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
  289. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
  290. package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
  291. package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
  292. package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
  293. package/bundle/dist/codex-protocol/v2/Config.js +0 -1
  294. package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
  295. package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
  296. package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
  297. package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
  298. package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
  299. package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
  300. package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
  301. package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
  302. package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
  303. package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
  304. package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
  305. package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
  306. package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
  307. package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
  308. package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
  309. package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
  310. package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
  311. package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
  312. package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
  313. package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
  314. package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
  315. package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
  316. package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
  317. package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
  318. package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
  319. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
  320. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
  321. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
  322. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
  323. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
  324. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
  325. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
  326. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
  327. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
  328. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
  329. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
  330. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
  331. package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
  332. package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
  333. package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
  334. package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
  335. package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
  336. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
  337. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
  338. package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
  339. package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
  340. package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
  341. package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
  342. package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
  343. package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
  344. package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
  345. package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
  346. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
  347. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
  348. package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
  349. package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
  350. package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
  351. package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
  352. package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
  353. package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
  354. package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
  355. package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
  356. package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
  357. package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
  358. package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
  359. package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
  360. package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
  361. package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
  362. package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
  363. package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
  364. package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
  365. package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
  366. package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
  367. package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
  368. package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
  369. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
  370. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
  371. package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
  372. package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
  373. package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
  374. package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
  375. package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
  376. package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
  377. package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
  378. package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
  379. package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
  380. package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
  381. package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
  382. package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
  383. package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
  384. package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
  385. package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
  386. package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
  387. package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
  388. package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
  389. package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
  390. package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
  391. package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
  392. package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
  393. package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
  394. package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
  395. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
  396. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
  397. package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
  398. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
  399. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
  400. package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
  401. package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
  402. package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
  403. package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
  404. package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
  405. package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
  406. package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
  407. package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
  408. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
  409. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
  410. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
  411. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
  412. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
  413. package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
  414. package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
  415. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
  416. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
  417. package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
  418. package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
  419. package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
  420. package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
  421. package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
  422. package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
  423. package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
  424. package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
  425. package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
  426. package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
  427. package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
  428. package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
  429. package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
  430. package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
  431. package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
  432. package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
  433. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
  434. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
  435. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
  436. package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
  437. package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
  438. package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
  439. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
  440. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
  441. package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
  442. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
  443. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
  444. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
  445. package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
  446. package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
  447. package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
  448. package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
  449. package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
  450. package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
  451. package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
  452. package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
  453. package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
  454. package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
  455. package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
  456. package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
  457. package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
  458. package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
  459. package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
  460. package/bundle/dist/codex-protocol/v2/Model.js +0 -1
  461. package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
  462. package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
  463. package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
  464. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
  465. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
  466. package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
  467. package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
  468. package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
  469. package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
  470. package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
  471. package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
  472. package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
  473. package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
  474. package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
  475. package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
  476. package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
  477. package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
  478. package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
  479. package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
  480. package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
  481. package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
  482. package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
  483. package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
  484. package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
  485. package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
  486. package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
  487. package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
  488. package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
  489. package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
  490. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
  491. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
  492. package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
  493. package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
  494. package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
  495. package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
  496. package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
  497. package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
  498. package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
  499. package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
  500. package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
  501. package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
  502. package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
  503. package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
  504. package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
  505. package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
  506. package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
  507. package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
  508. package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
  509. package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
  510. package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
  511. package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
  512. package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
  513. package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
  514. package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
  515. package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
  516. package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
  517. package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
  518. package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
  519. package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
  520. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
  521. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
  522. package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
  523. package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
  524. package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
  525. package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
  526. package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
  527. package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
  528. package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
  529. package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
  530. package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
  531. package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
  532. package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
  533. package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
  534. package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
  535. package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
  536. package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
  537. package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
  538. package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
  539. package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
  540. package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
  541. package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
  542. package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
  543. package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
  544. package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
  545. package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
  546. package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
  547. package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
  548. package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
  549. package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
  550. package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
  551. package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
  552. package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
  553. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
  554. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
  555. package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
  556. package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
  557. package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
  558. package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
  559. package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
  560. package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
  561. package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
  562. package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
  563. package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
  564. package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
  565. package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
  566. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
  567. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
  568. package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
  569. package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
  570. package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
  571. package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
  572. package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
  573. package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
  574. package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
  575. package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
  576. package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
  577. package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
  578. package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
  579. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
  580. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
  581. package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
  582. package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
  583. package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
  584. package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
  585. package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
  586. package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
  587. package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
  588. package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
  589. package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
  590. package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
  591. package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
  592. package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
  593. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
  594. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
  595. package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
  596. package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
  597. package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
  598. package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
  599. package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
  600. package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
  601. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
  602. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
  603. package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
  604. package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
  605. package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
  606. package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
  607. package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
  608. package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
  609. package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
  610. package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
  611. package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
  612. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
  613. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
  614. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
  615. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
  616. package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
  617. package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
  618. package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
  619. package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
  620. package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
  621. package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
  622. package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
  623. package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
  624. package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
  625. package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
  626. package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
  627. package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
  628. package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
  629. package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
  630. package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
  631. package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
  632. package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
  633. package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
  634. package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
  635. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
  636. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
  637. package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
  638. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
  639. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
  640. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
  641. package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
  642. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
  643. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
  644. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
  645. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
  646. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
  647. package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
  648. package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
  649. package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
  650. package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
  651. package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
  652. package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
  653. package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
  654. package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
  655. package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
  656. package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
  657. package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
  658. package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
  659. package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
  660. package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
  661. package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
  662. package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
  663. package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
  664. package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
  665. package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
  666. package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
  667. package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
  668. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
  669. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
  670. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
  671. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
  672. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
  673. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
  674. package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
  675. package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
  676. package/bundle/dist/codex-protocol/v2/index.js +0 -7
  677. package/bundle/dist/utils/providers/openai/codex-rpc.js +0 -153
  678. package/bundle/dist/utils/providers/openai/codex-worker.js +0 -642
  679. package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +0 -51
  680. package/bundle/src/codex-protocol/AbsolutePathBuf.ts +0 -14
  681. package/bundle/src/codex-protocol/AgentPath.ts +0 -5
  682. package/bundle/src/codex-protocol/ApplyPatchApprovalParams.ts +0 -24
  683. package/bundle/src/codex-protocol/ApplyPatchApprovalResponse.ts +0 -6
  684. package/bundle/src/codex-protocol/AuthMode.ts +0 -8
  685. package/bundle/src/codex-protocol/ClientInfo.ts +0 -5
  686. package/bundle/src/codex-protocol/ClientNotification.ts +0 -5
  687. package/bundle/src/codex-protocol/ClientRequest.ts +0 -176
  688. package/bundle/src/codex-protocol/CollaborationMode.ts +0 -10
  689. package/bundle/src/codex-protocol/ContentItem.ts +0 -9
  690. package/bundle/src/codex-protocol/ConversationGitInfo.ts +0 -9
  691. package/bundle/src/codex-protocol/ConversationSummary.ts +0 -19
  692. package/bundle/src/codex-protocol/ExecCommandApprovalParams.ts +0 -22
  693. package/bundle/src/codex-protocol/ExecCommandApprovalResponse.ts +0 -6
  694. package/bundle/src/codex-protocol/ExecPolicyAmendment.ts +0 -12
  695. package/bundle/src/codex-protocol/FileChange.ts +0 -8
  696. package/bundle/src/codex-protocol/ForcedLoginMethod.ts +0 -5
  697. package/bundle/src/codex-protocol/FunctionCallOutputBody.ts +0 -6
  698. package/bundle/src/codex-protocol/FunctionCallOutputContentItem.ts +0 -12
  699. package/bundle/src/codex-protocol/FuzzyFileSearchMatchType.ts +0 -5
  700. package/bundle/src/codex-protocol/FuzzyFileSearchParams.ts +0 -9
  701. package/bundle/src/codex-protocol/FuzzyFileSearchResponse.ts +0 -6
  702. package/bundle/src/codex-protocol/FuzzyFileSearchResult.ts +0 -16
  703. package/bundle/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  704. package/bundle/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +0 -10
  705. package/bundle/src/codex-protocol/GetAuthStatusParams.ts +0 -5
  706. package/bundle/src/codex-protocol/GetAuthStatusResponse.ts +0 -10
  707. package/bundle/src/codex-protocol/GetConversationSummaryParams.ts +0 -6
  708. package/bundle/src/codex-protocol/GetConversationSummaryResponse.ts +0 -6
  709. package/bundle/src/codex-protocol/GitDiffToRemoteParams.ts +0 -5
  710. package/bundle/src/codex-protocol/GitDiffToRemoteResponse.ts +0 -6
  711. package/bundle/src/codex-protocol/GitSha.ts +0 -5
  712. package/bundle/src/codex-protocol/ImageDetail.ts +0 -5
  713. package/bundle/src/codex-protocol/InitializeCapabilities.ts +0 -18
  714. package/bundle/src/codex-protocol/InitializeParams.ts +0 -10
  715. package/bundle/src/codex-protocol/InitializeResponse.ts +0 -22
  716. package/bundle/src/codex-protocol/InputModality.ts +0 -8
  717. package/bundle/src/codex-protocol/InternalSessionSource.ts +0 -5
  718. package/bundle/src/codex-protocol/LocalShellAction.ts +0 -6
  719. package/bundle/src/codex-protocol/LocalShellExecAction.ts +0 -11
  720. package/bundle/src/codex-protocol/LocalShellStatus.ts +0 -5
  721. package/bundle/src/codex-protocol/MessagePhase.ts +0 -11
  722. package/bundle/src/codex-protocol/ModeKind.ts +0 -8
  723. package/bundle/src/codex-protocol/NetworkPolicyAmendment.ts +0 -6
  724. package/bundle/src/codex-protocol/NetworkPolicyRuleAction.ts +0 -5
  725. package/bundle/src/codex-protocol/ParsedCommand.ts +0 -20
  726. package/bundle/src/codex-protocol/Personality.ts +0 -5
  727. package/bundle/src/codex-protocol/PlanType.ts +0 -17
  728. package/bundle/src/codex-protocol/RealtimeConversationVersion.ts +0 -5
  729. package/bundle/src/codex-protocol/RealtimeOutputModality.ts +0 -5
  730. package/bundle/src/codex-protocol/RealtimeVoice.ts +0 -24
  731. package/bundle/src/codex-protocol/RealtimeVoicesList.ts +0 -11
  732. package/bundle/src/codex-protocol/ReasoningEffort.ts +0 -8
  733. package/bundle/src/codex-protocol/ReasoningItemContent.ts +0 -7
  734. package/bundle/src/codex-protocol/ReasoningItemReasoningSummary.ts +0 -5
  735. package/bundle/src/codex-protocol/ReasoningSummary.ts +0 -10
  736. package/bundle/src/codex-protocol/RequestId.ts +0 -5
  737. package/bundle/src/codex-protocol/Resource.ts +0 -19
  738. package/bundle/src/codex-protocol/ResourceContent.ts +0 -27
  739. package/bundle/src/codex-protocol/ResourceTemplate.ts +0 -16
  740. package/bundle/src/codex-protocol/ResponseItem.ts +0 -63
  741. package/bundle/src/codex-protocol/ReviewDecision.ts +0 -17
  742. package/bundle/src/codex-protocol/ServerNotification.ts +0 -154
  743. package/bundle/src/codex-protocol/ServerRequest.ts +0 -47
  744. package/bundle/src/codex-protocol/SessionSource.ts +0 -15
  745. package/bundle/src/codex-protocol/Settings.ts +0 -13
  746. package/bundle/src/codex-protocol/SubAgentSource.ts +0 -20
  747. package/bundle/src/codex-protocol/ThreadId.ts +0 -5
  748. package/bundle/src/codex-protocol/ThreadMemoryMode.ts +0 -5
  749. package/bundle/src/codex-protocol/Tool.ts +0 -18
  750. package/bundle/src/codex-protocol/Verbosity.ts +0 -9
  751. package/bundle/src/codex-protocol/WebSearchAction.ts +0 -9
  752. package/bundle/src/codex-protocol/WebSearchContextSize.ts +0 -5
  753. package/bundle/src/codex-protocol/WebSearchLocation.ts +0 -10
  754. package/bundle/src/codex-protocol/WebSearchMode.ts +0 -5
  755. package/bundle/src/codex-protocol/WebSearchToolConfig.ts +0 -11
  756. package/bundle/src/codex-protocol/index.ts +0 -79
  757. package/bundle/src/codex-protocol/serde_json/JsonValue.ts +0 -11
  758. package/bundle/src/codex-protocol/v2/Account.ts +0 -9
  759. package/bundle/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +0 -9
  760. package/bundle/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  761. package/bundle/src/codex-protocol/v2/AccountUpdatedNotification.ts +0 -7
  762. package/bundle/src/codex-protocol/v2/ActivePermissionProfile.ts +0 -22
  763. package/bundle/src/codex-protocol/v2/ActivePermissionProfileModification.ts +0 -9
  764. package/bundle/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +0 -5
  765. package/bundle/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +0 -5
  766. package/bundle/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +0 -18
  767. package/bundle/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +0 -5
  768. package/bundle/src/codex-protocol/v2/AdditionalPermissionProfile.ts +0 -13
  769. package/bundle/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +0 -10
  770. package/bundle/src/codex-protocol/v2/AnalyticsConfig.ts +0 -14
  771. package/bundle/src/codex-protocol/v2/AppBranding.ts +0 -15
  772. package/bundle/src/codex-protocol/v2/AppInfo.ts +0 -32
  773. package/bundle/src/codex-protocol/v2/AppListUpdatedNotification.ts +0 -9
  774. package/bundle/src/codex-protocol/v2/AppMetadata.ts +0 -20
  775. package/bundle/src/codex-protocol/v2/AppReview.ts +0 -5
  776. package/bundle/src/codex-protocol/v2/AppScreenshot.ts +0 -5
  777. package/bundle/src/codex-protocol/v2/AppSummary.ts +0 -14
  778. package/bundle/src/codex-protocol/v2/AppToolApproval.ts +0 -5
  779. package/bundle/src/codex-protocol/v2/AppToolsConfig.ts +0 -8
  780. package/bundle/src/codex-protocol/v2/ApprovalsReviewer.ts +0 -12
  781. package/bundle/src/codex-protocol/v2/AppsConfig.ts +0 -17
  782. package/bundle/src/codex-protocol/v2/AppsDefaultConfig.ts +0 -9
  783. package/bundle/src/codex-protocol/v2/AppsListParams.ts +0 -25
  784. package/bundle/src/codex-protocol/v2/AppsListResponse.ts +0 -16
  785. package/bundle/src/codex-protocol/v2/AskForApproval.ts +0 -18
  786. package/bundle/src/codex-protocol/v2/AutoReviewDecisionSource.ts +0 -8
  787. package/bundle/src/codex-protocol/v2/ByteRange.ts +0 -5
  788. package/bundle/src/codex-protocol/v2/CancelLoginAccountParams.ts +0 -5
  789. package/bundle/src/codex-protocol/v2/CancelLoginAccountResponse.ts +0 -6
  790. package/bundle/src/codex-protocol/v2/CancelLoginAccountStatus.ts +0 -5
  791. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +0 -18
  792. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  793. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +0 -9
  794. package/bundle/src/codex-protocol/v2/CodexErrorInfo.ts +0 -27
  795. package/bundle/src/codex-protocol/v2/CollabAgentState.ts +0 -6
  796. package/bundle/src/codex-protocol/v2/CollabAgentStatus.ts +0 -12
  797. package/bundle/src/codex-protocol/v2/CollabAgentTool.ts +0 -5
  798. package/bundle/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +0 -5
  799. package/bundle/src/codex-protocol/v2/CollaborationModeMask.ts +0 -15
  800. package/bundle/src/codex-protocol/v2/CommandAction.ts +0 -10
  801. package/bundle/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +0 -31
  802. package/bundle/src/codex-protocol/v2/CommandExecOutputStream.ts +0 -8
  803. package/bundle/src/codex-protocol/v2/CommandExecParams.ts +0 -87
  804. package/bundle/src/codex-protocol/v2/CommandExecResizeParams.ts +0 -19
  805. package/bundle/src/codex-protocol/v2/CommandExecResizeResponse.ts +0 -8
  806. package/bundle/src/codex-protocol/v2/CommandExecResponse.ts +0 -25
  807. package/bundle/src/codex-protocol/v2/CommandExecTerminalSize.ts +0 -17
  808. package/bundle/src/codex-protocol/v2/CommandExecTerminateParams.ts +0 -14
  809. package/bundle/src/codex-protocol/v2/CommandExecTerminateResponse.ts +0 -8
  810. package/bundle/src/codex-protocol/v2/CommandExecWriteParams.ts +0 -23
  811. package/bundle/src/codex-protocol/v2/CommandExecWriteResponse.ts +0 -8
  812. package/bundle/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +0 -13
  813. package/bundle/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +0 -10
  814. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +0 -47
  815. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +0 -8
  816. package/bundle/src/codex-protocol/v2/CommandExecutionSource.ts +0 -9
  817. package/bundle/src/codex-protocol/v2/CommandExecutionStatus.ts +0 -5
  818. package/bundle/src/codex-protocol/v2/CommandMigration.ts +0 -5
  819. package/bundle/src/codex-protocol/v2/Config.ts +0 -53
  820. package/bundle/src/codex-protocol/v2/ConfigBatchWriteParams.ts +0 -17
  821. package/bundle/src/codex-protocol/v2/ConfigEdit.ts +0 -7
  822. package/bundle/src/codex-protocol/v2/ConfigLayer.ts +0 -12
  823. package/bundle/src/codex-protocol/v2/ConfigLayerMetadata.ts +0 -6
  824. package/bundle/src/codex-protocol/v2/ConfigLayerSource.ts +0 -27
  825. package/bundle/src/codex-protocol/v2/ConfigReadParams.ts +0 -13
  826. package/bundle/src/codex-protocol/v2/ConfigReadResponse.ts +0 -12
  827. package/bundle/src/codex-protocol/v2/ConfigRequirements.ts +0 -15
  828. package/bundle/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +0 -11
  829. package/bundle/src/codex-protocol/v2/ConfigValueWriteParams.ts +0 -16
  830. package/bundle/src/codex-protocol/v2/ConfigWarningNotification.ts +0 -23
  831. package/bundle/src/codex-protocol/v2/ConfigWriteResponse.ts +0 -16
  832. package/bundle/src/codex-protocol/v2/ConfiguredHookHandler.ts +0 -14
  833. package/bundle/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +0 -9
  834. package/bundle/src/codex-protocol/v2/ContextCompactedNotification.ts +0 -8
  835. package/bundle/src/codex-protocol/v2/CreditsSnapshot.ts +0 -5
  836. package/bundle/src/codex-protocol/v2/DeprecationNoticeNotification.ts +0 -14
  837. package/bundle/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +0 -7
  838. package/bundle/src/codex-protocol/v2/DynamicToolCallParams.ts +0 -13
  839. package/bundle/src/codex-protocol/v2/DynamicToolCallResponse.ts +0 -9
  840. package/bundle/src/codex-protocol/v2/DynamicToolCallStatus.ts +0 -5
  841. package/bundle/src/codex-protocol/v2/DynamicToolSpec.ts +0 -12
  842. package/bundle/src/codex-protocol/v2/ErrorNotification.ts +0 -11
  843. package/bundle/src/codex-protocol/v2/ExecPolicyAmendment.ts +0 -5
  844. package/bundle/src/codex-protocol/v2/ExperimentalFeature.ts +0 -38
  845. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +0 -13
  846. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +0 -10
  847. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +0 -14
  848. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +0 -13
  849. package/bundle/src/codex-protocol/v2/ExperimentalFeatureStage.ts +0 -10
  850. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +0 -14
  851. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +0 -6
  852. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +0 -5
  853. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +0 -8
  854. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +0 -5
  855. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +0 -15
  856. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +0 -14
  857. package/bundle/src/codex-protocol/v2/FeedbackUploadParams.ts +0 -12
  858. package/bundle/src/codex-protocol/v2/FeedbackUploadResponse.ts +0 -5
  859. package/bundle/src/codex-protocol/v2/FileChangeApprovalDecision.ts +0 -5
  860. package/bundle/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +0 -15
  861. package/bundle/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +0 -11
  862. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +0 -22
  863. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +0 -6
  864. package/bundle/src/codex-protocol/v2/FileSystemAccessMode.ts +0 -5
  865. package/bundle/src/codex-protocol/v2/FileSystemPath.ts +0 -10
  866. package/bundle/src/codex-protocol/v2/FileSystemSandboxEntry.ts +0 -7
  867. package/bundle/src/codex-protocol/v2/FileSystemSpecialPath.ts +0 -11
  868. package/bundle/src/codex-protocol/v2/FileUpdateChange.ts +0 -6
  869. package/bundle/src/codex-protocol/v2/FsChangedNotification.ts +0 -18
  870. package/bundle/src/codex-protocol/v2/FsCopyParams.ts +0 -22
  871. package/bundle/src/codex-protocol/v2/FsCopyResponse.ts +0 -8
  872. package/bundle/src/codex-protocol/v2/FsCreateDirectoryParams.ts +0 -18
  873. package/bundle/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +0 -8
  874. package/bundle/src/codex-protocol/v2/FsGetMetadataParams.ts +0 -14
  875. package/bundle/src/codex-protocol/v2/FsGetMetadataResponse.ts +0 -29
  876. package/bundle/src/codex-protocol/v2/FsReadDirectoryEntry.ts +0 -21
  877. package/bundle/src/codex-protocol/v2/FsReadDirectoryParams.ts +0 -14
  878. package/bundle/src/codex-protocol/v2/FsReadDirectoryResponse.ts +0 -14
  879. package/bundle/src/codex-protocol/v2/FsReadFileParams.ts +0 -14
  880. package/bundle/src/codex-protocol/v2/FsReadFileResponse.ts +0 -13
  881. package/bundle/src/codex-protocol/v2/FsRemoveParams.ts +0 -22
  882. package/bundle/src/codex-protocol/v2/FsRemoveResponse.ts +0 -8
  883. package/bundle/src/codex-protocol/v2/FsUnwatchParams.ts +0 -13
  884. package/bundle/src/codex-protocol/v2/FsUnwatchResponse.ts +0 -8
  885. package/bundle/src/codex-protocol/v2/FsWatchParams.ts +0 -18
  886. package/bundle/src/codex-protocol/v2/FsWatchResponse.ts +0 -14
  887. package/bundle/src/codex-protocol/v2/FsWriteFileParams.ts +0 -18
  888. package/bundle/src/codex-protocol/v2/FsWriteFileResponse.ts +0 -8
  889. package/bundle/src/codex-protocol/v2/GetAccountParams.ts +0 -14
  890. package/bundle/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +0 -15
  891. package/bundle/src/codex-protocol/v2/GetAccountResponse.ts +0 -6
  892. package/bundle/src/codex-protocol/v2/GitInfo.ts +0 -5
  893. package/bundle/src/codex-protocol/v2/GrantedPermissionProfile.ts +0 -10
  894. package/bundle/src/codex-protocol/v2/GuardianApprovalReview.ts +0 -18
  895. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +0 -34
  896. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +0 -13
  897. package/bundle/src/codex-protocol/v2/GuardianCommandSource.ts +0 -5
  898. package/bundle/src/codex-protocol/v2/GuardianRiskLevel.ts +0 -8
  899. package/bundle/src/codex-protocol/v2/GuardianUserAuthorization.ts +0 -8
  900. package/bundle/src/codex-protocol/v2/GuardianWarningNotification.ts +0 -14
  901. package/bundle/src/codex-protocol/v2/HookCompletedNotification.ts +0 -10
  902. package/bundle/src/codex-protocol/v2/HookErrorInfo.ts +0 -5
  903. package/bundle/src/codex-protocol/v2/HookEventName.ts +0 -13
  904. package/bundle/src/codex-protocol/v2/HookExecutionMode.ts +0 -5
  905. package/bundle/src/codex-protocol/v2/HookHandlerType.ts +0 -5
  906. package/bundle/src/codex-protocol/v2/HookMetadata.ts +0 -26
  907. package/bundle/src/codex-protocol/v2/HookMigration.ts +0 -5
  908. package/bundle/src/codex-protocol/v2/HookOutputEntry.ts +0 -6
  909. package/bundle/src/codex-protocol/v2/HookOutputEntryKind.ts +0 -5
  910. package/bundle/src/codex-protocol/v2/HookPromptFragment.ts +0 -5
  911. package/bundle/src/codex-protocol/v2/HookRunStatus.ts +0 -5
  912. package/bundle/src/codex-protocol/v2/HookRunSummary.ts +0 -28
  913. package/bundle/src/codex-protocol/v2/HookScope.ts +0 -5
  914. package/bundle/src/codex-protocol/v2/HookSource.ts +0 -15
  915. package/bundle/src/codex-protocol/v2/HookStartedNotification.ts +0 -10
  916. package/bundle/src/codex-protocol/v2/HookTrustStatus.ts +0 -5
  917. package/bundle/src/codex-protocol/v2/HooksListEntry.ts +0 -12
  918. package/bundle/src/codex-protocol/v2/HooksListParams.ts +0 -10
  919. package/bundle/src/codex-protocol/v2/HooksListResponse.ts +0 -6
  920. package/bundle/src/codex-protocol/v2/ItemCompletedNotification.ts +0 -14
  921. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +0 -44
  922. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +0 -38
  923. package/bundle/src/codex-protocol/v2/ItemStartedNotification.ts +0 -14
  924. package/bundle/src/codex-protocol/v2/ListMcpServerStatusParams.ts +0 -20
  925. package/bundle/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +0 -13
  926. package/bundle/src/codex-protocol/v2/LoginAccountParams.ts +0 -27
  927. package/bundle/src/codex-protocol/v2/LoginAccountResponse.ts +0 -27
  928. package/bundle/src/codex-protocol/v2/LogoutAccountResponse.ts +0 -5
  929. package/bundle/src/codex-protocol/v2/ManagedHooksRequirements.ts +0 -17
  930. package/bundle/src/codex-protocol/v2/MarketplaceAddParams.ts +0 -9
  931. package/bundle/src/codex-protocol/v2/MarketplaceAddResponse.ts +0 -10
  932. package/bundle/src/codex-protocol/v2/MarketplaceInterface.ts +0 -5
  933. package/bundle/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +0 -6
  934. package/bundle/src/codex-protocol/v2/MarketplaceRemoveParams.ts +0 -5
  935. package/bundle/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +0 -9
  936. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +0 -5
  937. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +0 -5
  938. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +0 -11
  939. package/bundle/src/codex-protocol/v2/McpAuthStatus.ts +0 -5
  940. package/bundle/src/codex-protocol/v2/McpElicitationArrayType.ts +0 -5
  941. package/bundle/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +0 -11
  942. package/bundle/src/codex-protocol/v2/McpElicitationBooleanType.ts +0 -5
  943. package/bundle/src/codex-protocol/v2/McpElicitationConstOption.ts +0 -5
  944. package/bundle/src/codex-protocol/v2/McpElicitationEnumSchema.ts +0 -11
  945. package/bundle/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +0 -13
  946. package/bundle/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +0 -9
  947. package/bundle/src/codex-protocol/v2/McpElicitationNumberSchema.ts +0 -13
  948. package/bundle/src/codex-protocol/v2/McpElicitationNumberType.ts +0 -5
  949. package/bundle/src/codex-protocol/v2/McpElicitationObjectType.ts +0 -5
  950. package/bundle/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +0 -13
  951. package/bundle/src/codex-protocol/v2/McpElicitationSchema.ts +0 -18
  952. package/bundle/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +0 -9
  953. package/bundle/src/codex-protocol/v2/McpElicitationStringFormat.ts +0 -5
  954. package/bundle/src/codex-protocol/v2/McpElicitationStringSchema.ts +0 -15
  955. package/bundle/src/codex-protocol/v2/McpElicitationStringType.ts +0 -5
  956. package/bundle/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +0 -6
  957. package/bundle/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +0 -15
  958. package/bundle/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +0 -13
  959. package/bundle/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +0 -9
  960. package/bundle/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +0 -15
  961. package/bundle/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +0 -12
  962. package/bundle/src/codex-protocol/v2/McpResourceReadParams.ts +0 -5
  963. package/bundle/src/codex-protocol/v2/McpResourceReadResponse.ts +0 -6
  964. package/bundle/src/codex-protocol/v2/McpServerElicitationAction.ts +0 -5
  965. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +0 -27
  966. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +0 -19
  967. package/bundle/src/codex-protocol/v2/McpServerMigration.ts +0 -5
  968. package/bundle/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +0 -9
  969. package/bundle/src/codex-protocol/v2/McpServerOauthLoginParams.ts +0 -9
  970. package/bundle/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +0 -5
  971. package/bundle/src/codex-protocol/v2/McpServerRefreshResponse.ts +0 -5
  972. package/bundle/src/codex-protocol/v2/McpServerStartupState.ts +0 -5
  973. package/bundle/src/codex-protocol/v2/McpServerStatus.ts +0 -15
  974. package/bundle/src/codex-protocol/v2/McpServerStatusDetail.ts +0 -5
  975. package/bundle/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +0 -10
  976. package/bundle/src/codex-protocol/v2/McpServerToolCallParams.ts +0 -12
  977. package/bundle/src/codex-protocol/v2/McpServerToolCallResponse.ts +0 -11
  978. package/bundle/src/codex-protocol/v2/McpToolCallError.ts +0 -5
  979. package/bundle/src/codex-protocol/v2/McpToolCallProgressNotification.ts +0 -10
  980. package/bundle/src/codex-protocol/v2/McpToolCallResult.ts +0 -10
  981. package/bundle/src/codex-protocol/v2/McpToolCallStatus.ts +0 -5
  982. package/bundle/src/codex-protocol/v2/MemoryCitation.ts +0 -6
  983. package/bundle/src/codex-protocol/v2/MemoryCitationEntry.ts +0 -10
  984. package/bundle/src/codex-protocol/v2/MergeStrategy.ts +0 -5
  985. package/bundle/src/codex-protocol/v2/MigrationDetails.ts +0 -18
  986. package/bundle/src/codex-protocol/v2/Model.ts +0 -30
  987. package/bundle/src/codex-protocol/v2/ModelAvailabilityNux.ts +0 -5
  988. package/bundle/src/codex-protocol/v2/ModelListParams.ts +0 -18
  989. package/bundle/src/codex-protocol/v2/ModelListResponse.ts +0 -13
  990. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +0 -5
  991. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +0 -9
  992. package/bundle/src/codex-protocol/v2/ModelRerouteReason.ts +0 -5
  993. package/bundle/src/codex-protocol/v2/ModelReroutedNotification.ts +0 -12
  994. package/bundle/src/codex-protocol/v2/ModelServiceTier.ts +0 -5
  995. package/bundle/src/codex-protocol/v2/ModelUpgradeInfo.ts +0 -10
  996. package/bundle/src/codex-protocol/v2/ModelVerification.ts +0 -5
  997. package/bundle/src/codex-protocol/v2/ModelVerificationNotification.ts +0 -10
  998. package/bundle/src/codex-protocol/v2/NetworkAccess.ts +0 -5
  999. package/bundle/src/codex-protocol/v2/NetworkApprovalContext.ts +0 -6
  1000. package/bundle/src/codex-protocol/v2/NetworkApprovalProtocol.ts +0 -5
  1001. package/bundle/src/codex-protocol/v2/NetworkDomainPermission.ts +0 -5
  1002. package/bundle/src/codex-protocol/v2/NetworkPolicyAmendment.ts +0 -6
  1003. package/bundle/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +0 -5
  1004. package/bundle/src/codex-protocol/v2/NetworkRequirements.ts +0 -40
  1005. package/bundle/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +0 -5
  1006. package/bundle/src/codex-protocol/v2/NonSteerableTurnKind.ts +0 -5
  1007. package/bundle/src/codex-protocol/v2/OverriddenMetadata.ts +0 -11
  1008. package/bundle/src/codex-protocol/v2/PatchApplyStatus.ts +0 -5
  1009. package/bundle/src/codex-protocol/v2/PatchChangeKind.ts +0 -8
  1010. package/bundle/src/codex-protocol/v2/PermissionGrantScope.ts +0 -5
  1011. package/bundle/src/codex-protocol/v2/PermissionProfile.ts +0 -14
  1012. package/bundle/src/codex-protocol/v2/PermissionProfileFileSystemPermissions.ts +0 -8
  1013. package/bundle/src/codex-protocol/v2/PermissionProfileModificationParams.ts +0 -9
  1014. package/bundle/src/codex-protocol/v2/PermissionProfileNetworkPermissions.ts +0 -5
  1015. package/bundle/src/codex-protocol/v2/PermissionProfileSelectionParams.ts +0 -10
  1016. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +0 -18
  1017. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +0 -14
  1018. package/bundle/src/codex-protocol/v2/PlanDeltaNotification.ts +0 -14
  1019. package/bundle/src/codex-protocol/v2/PluginAuthPolicy.ts +0 -5
  1020. package/bundle/src/codex-protocol/v2/PluginAvailability.ts +0 -5
  1021. package/bundle/src/codex-protocol/v2/PluginDetail.ts +0 -19
  1022. package/bundle/src/codex-protocol/v2/PluginHookSummary.ts +0 -6
  1023. package/bundle/src/codex-protocol/v2/PluginInstallParams.ts +0 -10
  1024. package/bundle/src/codex-protocol/v2/PluginInstallPolicy.ts +0 -5
  1025. package/bundle/src/codex-protocol/v2/PluginInstallResponse.ts +0 -10
  1026. package/bundle/src/codex-protocol/v2/PluginInterface.ts +0 -46
  1027. package/bundle/src/codex-protocol/v2/PluginListMarketplaceKind.ts +0 -5
  1028. package/bundle/src/codex-protocol/v2/PluginListParams.ts +0 -18
  1029. package/bundle/src/codex-protocol/v2/PluginListResponse.ts +0 -11
  1030. package/bundle/src/codex-protocol/v2/PluginMarketplaceEntry.ts +0 -17
  1031. package/bundle/src/codex-protocol/v2/PluginReadParams.ts +0 -10
  1032. package/bundle/src/codex-protocol/v2/PluginReadResponse.ts +0 -6
  1033. package/bundle/src/codex-protocol/v2/PluginShareContext.ts +0 -12
  1034. package/bundle/src/codex-protocol/v2/PluginShareDeleteParams.ts +0 -5
  1035. package/bundle/src/codex-protocol/v2/PluginShareDeleteResponse.ts +0 -5
  1036. package/bundle/src/codex-protocol/v2/PluginShareDiscoverability.ts +0 -5
  1037. package/bundle/src/codex-protocol/v2/PluginShareListItem.ts +0 -11
  1038. package/bundle/src/codex-protocol/v2/PluginShareListParams.ts +0 -5
  1039. package/bundle/src/codex-protocol/v2/PluginShareListResponse.ts +0 -6
  1040. package/bundle/src/codex-protocol/v2/PluginSharePrincipal.ts +0 -10
  1041. package/bundle/src/codex-protocol/v2/PluginSharePrincipalType.ts +0 -5
  1042. package/bundle/src/codex-protocol/v2/PluginShareSaveParams.ts +0 -13
  1043. package/bundle/src/codex-protocol/v2/PluginShareSaveResponse.ts +0 -5
  1044. package/bundle/src/codex-protocol/v2/PluginShareTarget.ts +0 -6
  1045. package/bundle/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +0 -5
  1046. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +0 -11
  1047. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +0 -10
  1048. package/bundle/src/codex-protocol/v2/PluginSkillReadParams.ts +0 -9
  1049. package/bundle/src/codex-protocol/v2/PluginSkillReadResponse.ts +0 -5
  1050. package/bundle/src/codex-protocol/v2/PluginSource.ts +0 -9
  1051. package/bundle/src/codex-protocol/v2/PluginSummary.ts +0 -29
  1052. package/bundle/src/codex-protocol/v2/PluginUninstallParams.ts +0 -5
  1053. package/bundle/src/codex-protocol/v2/PluginUninstallResponse.ts +0 -5
  1054. package/bundle/src/codex-protocol/v2/PluginsMigration.ts +0 -5
  1055. package/bundle/src/codex-protocol/v2/ProcessExitedNotification.ts +0 -43
  1056. package/bundle/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +0 -27
  1057. package/bundle/src/codex-protocol/v2/ProcessOutputStream.ts +0 -8
  1058. package/bundle/src/codex-protocol/v2/ProcessTerminalSize.ts +0 -17
  1059. package/bundle/src/codex-protocol/v2/ProfileV2.ts +0 -37
  1060. package/bundle/src/codex-protocol/v2/RateLimitReachedType.ts +0 -10
  1061. package/bundle/src/codex-protocol/v2/RateLimitSnapshot.ts +0 -17
  1062. package/bundle/src/codex-protocol/v2/RateLimitWindow.ts +0 -9
  1063. package/bundle/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +0 -10
  1064. package/bundle/src/codex-protocol/v2/ReasoningEffortOption.ts +0 -6
  1065. package/bundle/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +0 -10
  1066. package/bundle/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +0 -11
  1067. package/bundle/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +0 -11
  1068. package/bundle/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +0 -5
  1069. package/bundle/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +0 -12
  1070. package/bundle/src/codex-protocol/v2/RequestPermissionProfile.ts +0 -10
  1071. package/bundle/src/codex-protocol/v2/ResidencyRequirement.ts +0 -5
  1072. package/bundle/src/codex-protocol/v2/ReviewDelivery.ts +0 -5
  1073. package/bundle/src/codex-protocol/v2/ReviewStartParams.ts +0 -15
  1074. package/bundle/src/codex-protocol/v2/ReviewStartResponse.ts +0 -15
  1075. package/bundle/src/codex-protocol/v2/ReviewTarget.ts +0 -16
  1076. package/bundle/src/codex-protocol/v2/SandboxMode.ts +0 -5
  1077. package/bundle/src/codex-protocol/v2/SandboxPolicy.ts +0 -17
  1078. package/bundle/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +0 -10
  1079. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +0 -6
  1080. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +0 -6
  1081. package/bundle/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +0 -6
  1082. package/bundle/src/codex-protocol/v2/SessionMigration.ts +0 -5
  1083. package/bundle/src/codex-protocol/v2/SessionSource.ts +0 -13
  1084. package/bundle/src/codex-protocol/v2/SkillDependencies.ts +0 -6
  1085. package/bundle/src/codex-protocol/v2/SkillErrorInfo.ts +0 -5
  1086. package/bundle/src/codex-protocol/v2/SkillInterface.ts +0 -13
  1087. package/bundle/src/codex-protocol/v2/SkillMetadata.ts +0 -21
  1088. package/bundle/src/codex-protocol/v2/SkillScope.ts +0 -5
  1089. package/bundle/src/codex-protocol/v2/SkillSummary.ts +0 -14
  1090. package/bundle/src/codex-protocol/v2/SkillToolDependency.ts +0 -12
  1091. package/bundle/src/codex-protocol/v2/SkillsChangedNotification.ts +0 -11
  1092. package/bundle/src/codex-protocol/v2/SkillsConfigWriteParams.ts +0 -16
  1093. package/bundle/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +0 -5
  1094. package/bundle/src/codex-protocol/v2/SkillsListEntry.ts +0 -11
  1095. package/bundle/src/codex-protocol/v2/SkillsListParams.ts +0 -14
  1096. package/bundle/src/codex-protocol/v2/SkillsListResponse.ts +0 -6
  1097. package/bundle/src/codex-protocol/v2/SortDirection.ts +0 -5
  1098. package/bundle/src/codex-protocol/v2/SubagentMigration.ts +0 -5
  1099. package/bundle/src/codex-protocol/v2/TerminalInteractionNotification.ts +0 -11
  1100. package/bundle/src/codex-protocol/v2/TextElement.ts +0 -15
  1101. package/bundle/src/codex-protocol/v2/TextPosition.ts +0 -14
  1102. package/bundle/src/codex-protocol/v2/TextRange.ts +0 -6
  1103. package/bundle/src/codex-protocol/v2/Thread.ts +0 -88
  1104. package/bundle/src/codex-protocol/v2/ThreadActiveFlag.ts +0 -5
  1105. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +0 -12
  1106. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +0 -5
  1107. package/bundle/src/codex-protocol/v2/ThreadArchiveParams.ts +0 -5
  1108. package/bundle/src/codex-protocol/v2/ThreadArchiveResponse.ts +0 -5
  1109. package/bundle/src/codex-protocol/v2/ThreadArchivedNotification.ts +0 -5
  1110. package/bundle/src/codex-protocol/v2/ThreadClosedNotification.ts +0 -5
  1111. package/bundle/src/codex-protocol/v2/ThreadCompactStartParams.ts +0 -5
  1112. package/bundle/src/codex-protocol/v2/ThreadCompactStartResponse.ts +0 -5
  1113. package/bundle/src/codex-protocol/v2/ThreadForkParams.ts +0 -40
  1114. package/bundle/src/codex-protocol/v2/ThreadForkResponse.ts +0 -30
  1115. package/bundle/src/codex-protocol/v2/ThreadGoal.ts +0 -15
  1116. package/bundle/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +0 -5
  1117. package/bundle/src/codex-protocol/v2/ThreadGoalStatus.ts +0 -5
  1118. package/bundle/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +0 -10
  1119. package/bundle/src/codex-protocol/v2/ThreadInjectItemsParams.ts +0 -12
  1120. package/bundle/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +0 -5
  1121. package/bundle/src/codex-protocol/v2/ThreadItem.ts +0 -156
  1122. package/bundle/src/codex-protocol/v2/ThreadListParams.ts +0 -55
  1123. package/bundle/src/codex-protocol/v2/ThreadListResponse.ts +0 -20
  1124. package/bundle/src/codex-protocol/v2/ThreadLoadedListParams.ts +0 -14
  1125. package/bundle/src/codex-protocol/v2/ThreadLoadedListResponse.ts +0 -15
  1126. package/bundle/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +0 -21
  1127. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +0 -14
  1128. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +0 -6
  1129. package/bundle/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +0 -5
  1130. package/bundle/src/codex-protocol/v2/ThreadReadParams.ts +0 -11
  1131. package/bundle/src/codex-protocol/v2/ThreadReadResponse.ts +0 -6
  1132. package/bundle/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +0 -14
  1133. package/bundle/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +0 -8
  1134. package/bundle/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +0 -8
  1135. package/bundle/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +0 -9
  1136. package/bundle/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +0 -12
  1137. package/bundle/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +0 -8
  1138. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +0 -17
  1139. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +0 -13
  1140. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +0 -16
  1141. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +0 -16
  1142. package/bundle/src/codex-protocol/v2/ThreadResumeParams.ts +0 -39
  1143. package/bundle/src/codex-protocol/v2/ThreadResumeResponse.ts +0 -30
  1144. package/bundle/src/codex-protocol/v2/ThreadRollbackParams.ts +0 -14
  1145. package/bundle/src/codex-protocol/v2/ThreadRollbackResponse.ts +0 -15
  1146. package/bundle/src/codex-protocol/v2/ThreadSetNameParams.ts +0 -5
  1147. package/bundle/src/codex-protocol/v2/ThreadSetNameResponse.ts +0 -5
  1148. package/bundle/src/codex-protocol/v2/ThreadShellCommandParams.ts +0 -14
  1149. package/bundle/src/codex-protocol/v2/ThreadShellCommandResponse.ts +0 -5
  1150. package/bundle/src/codex-protocol/v2/ThreadSortKey.ts +0 -5
  1151. package/bundle/src/codex-protocol/v2/ThreadSource.ts +0 -5
  1152. package/bundle/src/codex-protocol/v2/ThreadSourceKind.ts +0 -15
  1153. package/bundle/src/codex-protocol/v2/ThreadStartParams.ts +0 -33
  1154. package/bundle/src/codex-protocol/v2/ThreadStartResponse.ts +0 -30
  1155. package/bundle/src/codex-protocol/v2/ThreadStartSource.ts +0 -5
  1156. package/bundle/src/codex-protocol/v2/ThreadStartedNotification.ts +0 -6
  1157. package/bundle/src/codex-protocol/v2/ThreadStatus.ts +0 -10
  1158. package/bundle/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +0 -6
  1159. package/bundle/src/codex-protocol/v2/ThreadTokenUsage.ts +0 -10
  1160. package/bundle/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +0 -10
  1161. package/bundle/src/codex-protocol/v2/ThreadUnarchiveParams.ts +0 -5
  1162. package/bundle/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +0 -6
  1163. package/bundle/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +0 -5
  1164. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +0 -5
  1165. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +0 -6
  1166. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +0 -5
  1167. package/bundle/src/codex-protocol/v2/TokenUsageBreakdown.ts +0 -11
  1168. package/bundle/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +0 -8
  1169. package/bundle/src/codex-protocol/v2/ToolRequestUserInputOption.ts +0 -8
  1170. package/bundle/src/codex-protocol/v2/ToolRequestUserInputParams.ts +0 -14
  1171. package/bundle/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +0 -16
  1172. package/bundle/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +0 -11
  1173. package/bundle/src/codex-protocol/v2/ToolsV2.ts +0 -6
  1174. package/bundle/src/codex-protocol/v2/Turn.ts +0 -36
  1175. package/bundle/src/codex-protocol/v2/TurnCompletedNotification.ts +0 -6
  1176. package/bundle/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +0 -9
  1177. package/bundle/src/codex-protocol/v2/TurnEnvironmentParams.ts +0 -6
  1178. package/bundle/src/codex-protocol/v2/TurnError.ts +0 -10
  1179. package/bundle/src/codex-protocol/v2/TurnInterruptParams.ts +0 -5
  1180. package/bundle/src/codex-protocol/v2/TurnInterruptResponse.ts +0 -5
  1181. package/bundle/src/codex-protocol/v2/TurnItemsView.ts +0 -5
  1182. package/bundle/src/codex-protocol/v2/TurnPlanStep.ts +0 -6
  1183. package/bundle/src/codex-protocol/v2/TurnPlanStepStatus.ts +0 -5
  1184. package/bundle/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +0 -11
  1185. package/bundle/src/codex-protocol/v2/TurnStartParams.ts +0 -48
  1186. package/bundle/src/codex-protocol/v2/TurnStartResponse.ts +0 -6
  1187. package/bundle/src/codex-protocol/v2/TurnStartedNotification.ts +0 -6
  1188. package/bundle/src/codex-protocol/v2/TurnStatus.ts +0 -5
  1189. package/bundle/src/codex-protocol/v2/TurnSteerParams.ts +0 -13
  1190. package/bundle/src/codex-protocol/v2/TurnSteerResponse.ts +0 -5
  1191. package/bundle/src/codex-protocol/v2/UserInput.ts +0 -18
  1192. package/bundle/src/codex-protocol/v2/WarningNotification.ts +0 -14
  1193. package/bundle/src/codex-protocol/v2/WebSearchAction.ts +0 -9
  1194. package/bundle/src/codex-protocol/v2/WindowsSandboxReadiness.ts +0 -5
  1195. package/bundle/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +0 -6
  1196. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +0 -10
  1197. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +0 -5
  1198. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +0 -10
  1199. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +0 -5
  1200. package/bundle/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +0 -9
  1201. package/bundle/src/codex-protocol/v2/WriteStatus.ts +0 -5
  1202. package/bundle/src/codex-protocol/v2/index.ts +0 -446
  1203. package/bundle/src/utils/providers/openai/codex-rpc.ts +0 -238
  1204. package/bundle/src/utils/providers/openai/codex-worker.test.ts +0 -1006
  1205. package/bundle/src/utils/providers/openai/codex-worker.ts +0 -927
  1206. package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +0 -112
  1207. package/bundle/web-dist/client/assets/index-C0594sjh.js +0 -106
  1208. package/bundle/web-dist/client/assets/index-CcMEpCgt.css +0 -1
  1209. package/bundle/web-dist/client/assets/logs-BotUcOEB.js +0 -1
  1210. package/bundle/web-dist/client/assets/monit-kk3vnGvu.js +0 -1
  1211. package/bundle/web-dist/client/assets/settings-CAAQSIyg.js +0 -1
  1212. package/bundle/web-dist/client/assets/show-BryNvjUT.js +0 -2
  1213. /package/bundle/dist/{codex-protocol/AbsolutePathBuf.js → utils/providers/common/provider-types.js} +0 -0
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vite@8.0.3_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2_@types+node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d/node_modules/vite/dist/node/module-runner.js
1
+ //#region ../../node_modules/.pnpm/vite@8.0.3_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2_@types+node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js
2
2
  let SOURCEMAPPING_URL = "sourceMa";
3
3
  SOURCEMAPPING_URL += "ppingURL";
4
4
  const isWindows = typeof process < "u" && process.platform === "win32";
@@ -1262,4 +1262,4 @@ function exportAll(exports, sourceModule) {
1262
1262
  //#endregion
1263
1263
  export { ESModulesEvaluator, EvaluatedModules, ModuleRunner, createDefaultImportMeta, createNodeImportMeta, createWebSocketModuleRunnerTransport, normalizeModuleId, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, ssrImportKey, ssrImportMetaKey, ssrModuleExportsKey };
1264
1264
 
1265
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXJ1bm5lci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZUA4LjAuM19AZW1uYXBpK2NvcmVAMS4xMS4yX0BlbW5hcGkrcnVudGltZUAxLjExLjJfQHR5cGVzK25vZGVAMjUuMC43X2VzYnVpbGRAMC4yNy40XzI1MTljMmU4ZDgwMTNmY2JjN2I0NDM4NzliYzlkYTZkL25vZGVfbW9kdWxlcy92aXRlL2Rpc3Qvbm9kZS9tb2R1bGUtcnVubmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBTT1VSQ0VNQVBQSU5HX1VSTCA9IFwic291cmNlTWFcIjtcblNPVVJDRU1BUFBJTkdfVVJMICs9IFwicHBpbmdVUkxcIjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvdXRpbHMudHNcbmNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzIDwgXCJ1XCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuLyoqXG4qIFVuZG8ge0BsaW5rIHdyYXBJZH0ncyBgL0BpZC9gIGFuZCBudWxsIGJ5dGUgcmVwbGFjZW1lbnRzLlxuKi9cbmZ1bmN0aW9uIHVud3JhcElkKGlkKSB7XG5cdHJldHVybiBpZC5zdGFydHNXaXRoKFwiL0BpZC9cIikgPyBpZC5zbGljZSg1KS5yZXBsYWNlKFwiX194MDBfX1wiLCBcIlxcMFwiKSA6IGlkO1xufVxuY29uc3Qgd2luZG93c1NsYXNoUkUgPSAvXFxcXC9nO1xuZnVuY3Rpb24gc2xhc2gocCkge1xuXHRyZXR1cm4gcC5yZXBsYWNlKHdpbmRvd3NTbGFzaFJFLCBcIi9cIik7XG59XG5jb25zdCBwb3N0Zml4UkUgPSAvWz8jXS4qJC87XG5mdW5jdGlvbiBjbGVhblVybCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKHBvc3RmaXhSRSwgXCJcIik7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPSBcImZ1bmN0aW9uXCI7XG59XG5jb25zdCBBc3luY0Z1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24oKSB7fS5jb25zdHJ1Y3RvcjtcbmxldCBhc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50O1xuZnVuY3Rpb24gZ2V0QXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCgpIHtcblx0aWYgKGFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblBhZGRpbmdMaW5lQ291bnQgPT09IHZvaWQgMCkge1xuXHRcdGxldCBib2R5ID0gXCIvKmNvZGUqL1wiLCBzb3VyY2UgPSBuZXcgQXN5bmNGdW5jdGlvbihcImFcIiwgXCJiXCIsIGJvZHkpLnRvU3RyaW5nKCk7XG5cdFx0YXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCA9IHNvdXJjZS5zbGljZSgwLCBzb3VyY2UuaW5kZXhPZihib2R5KSkuc3BsaXQoXCJcXG5cIikubGVuZ3RoIC0gMTtcblx0fVxuXHRyZXR1cm4gYXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudDtcbn1cbmZ1bmN0aW9uIHByb21pc2VXaXRoUmVzb2x2ZXJzKCkge1xuXHRsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuXHRyZXR1cm4ge1xuXHRcdHByb21pc2U6IG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IF9yZXNvbHZlLCByZWplY3QgPSBfcmVqZWN0O1xuXHRcdH0pLFxuXHRcdHJlc29sdmUsXG5cdFx0cmVqZWN0XG5cdH07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMi4wLjMvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3Qvc2hhcmVkL3BhdGhlLk0tZVRodE5aLm1qc1xuY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuXHRyZXR1cm4gaW5wdXQgJiYgaW5wdXQucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZShfRFJJVkVfTEVUVEVSX1NUQVJUX1JFLCAocikgPT4gci50b1VwcGVyQ2FzZSgpKTtcbn1cbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS8sIF9EUklWRV9MRVRURVJfUkUgPSAvXltBLVphLXpdOiQvO1xuZnVuY3Rpb24gY3dkKCkge1xuXHRyZXR1cm4gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT0gXCJmdW5jdGlvblwiID8gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSA6IFwiL1wiO1xufVxuY29uc3QgcmVzb2x2ZSA9IGZ1bmN0aW9uKC4uLmFyZ3VtZW50c18pIHtcblx0YXJndW1lbnRzXyA9IGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT4gbm9ybWFsaXplV2luZG93c1BhdGgoYXJndW1lbnQpKTtcblx0bGV0IHJlc29sdmVkUGF0aCA9IFwiXCIsIHJlc29sdmVkQWJzb2x1dGUgPSAhMTtcblx0Zm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG5cdFx0bGV0IHBhdGggPSBpbmRleCA+PSAwID8gYXJndW1lbnRzX1tpbmRleF0gOiBjd2QoKTtcblx0XHQhcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCB8fCAocmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YCwgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCkpO1xuXHR9XG5cdHJldHVybiByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSksIHJlc29sdmVkQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aC5sZW5ndGggPiAwID8gcmVzb2x2ZWRQYXRoIDogXCIuXCI7XG59O1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG5cdGxldCByZXMgPSBcIlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDAsIGxhc3RTbGFzaCA9IC0xLCBkb3RzID0gMCwgY2hhciA9IG51bGw7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcblx0XHRpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkgY2hhciA9IHBhdGhbaW5kZXhdO1xuXHRcdGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSBicmVhaztcblx0XHRlbHNlIGNoYXIgPSBcIi9cIjtcblx0XHRpZiAoY2hhciA9PT0gXCIvXCIpIHtcblx0XHRcdGlmICghKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpKSBpZiAoZG90cyA9PT0gMikge1xuXHRcdFx0XHRpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcblx0XHRcdFx0XHRpZiAocmVzLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRcdGxldCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdFx0XHRsYXN0U2xhc2hJbmRleCA9PT0gLTEgPyAocmVzID0gXCJcIiwgbGFzdFNlZ21lbnRMZW5ndGggPSAwKSA6IChyZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpLCBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKSksIGxhc3RTbGFzaCA9IGluZGV4LCBkb3RzID0gMDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJlcyA9IFwiXCIsIGxhc3RTZWdtZW50TGVuZ3RoID0gMCwgbGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFsbG93QWJvdmVSb290ICYmIChyZXMgKz0gcmVzLmxlbmd0aCA+IDAgPyBcIi8uLlwiIDogXCIuLlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDIpO1xuXHRcdFx0fSBlbHNlIHJlcy5sZW5ndGggPiAwID8gcmVzICs9IGAvJHtwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KX1gIDogcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCksIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxO1xuXHRcdFx0bGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdH0gZWxzZSBjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSA/ICsrZG90cyA6IGRvdHMgPSAtMTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcblx0cmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufSwgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcblx0bGV0IHNlZ21lbnRzID0gbm9ybWFsaXplV2luZG93c1BhdGgocCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSk7XG5cdHJldHVybiBzZWdtZW50cy5sZW5ndGggPT09IDEgJiYgX0RSSVZFX0xFVFRFUl9SRS50ZXN0KHNlZ21lbnRzWzBdKSAmJiAoc2VnbWVudHNbMF0gKz0gXCIvXCIpLCBzZWdtZW50cy5qb2luKFwiL1wiKSB8fCAoaXNBYnNvbHV0ZShwKSA/IFwiL1wiIDogXCIuXCIpO1xufSwgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKSwgZGVjb2RlQmFzZTY0ID0gdHlwZW9mIEJ1ZmZlciA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIEJ1ZmZlci5mcm9tID09IFwiZnVuY3Rpb25cIiA/IChiYXNlNjQpID0+IEJ1ZmZlci5mcm9tKGJhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSA6IChiYXNlNjQpID0+IHRleHREZWNvZGVyLmRlY29kZShVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjQpLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSksIHBlcmNlbnRSZWdFeCA9IC8lL2csIGJhY2tzbGFzaFJlZ0V4ID0gL1xcXFwvZywgbmV3bGluZVJlZ0V4ID0gL1xcbi9nLCBjYXJyaWFnZVJldHVyblJlZ0V4ID0gL1xcci9nLCB0YWJSZWdFeCA9IC9cXHQvZywgcXVlc3Rpb25SZWdleCA9IC9cXD8vZywgaGFzaFJlZ2V4ID0gLyMvZztcbmZ1bmN0aW9uIGVuY29kZVBhdGhDaGFycyhmaWxlcGF0aCkge1xuXHRyZXR1cm4gZmlsZXBhdGguaW5kZXhPZihcIiVcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UocGVyY2VudFJlZ0V4LCBcIiUyNVwiKSksICFpc1dpbmRvd3MgJiYgZmlsZXBhdGguaW5kZXhPZihcIlxcXFxcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UoYmFja3NsYXNoUmVnRXgsIFwiJTVDXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcblwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShuZXdsaW5lUmVnRXgsIFwiJTBBXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcclwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShjYXJyaWFnZVJldHVyblJlZ0V4LCBcIiUwRFwiKSksIGZpbGVwYXRoLmluZGV4T2YoXCJcdFwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZSh0YWJSZWdFeCwgXCIlMDlcIikpLCBmaWxlcGF0aDtcbn1cbmNvbnN0IHBvc2l4RGlybmFtZSA9IGRpcm5hbWUsIHBvc2l4UmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiBwb3NpeFBhdGhUb0ZpbGVIcmVmKHBvc2l4UGF0aCkge1xuXHRsZXQgcmVzb2x2ZWQgPSBwb3NpeFJlc29sdmUocG9zaXhQYXRoKSwgZmlsZVBhdGhMYXN0ID0gcG9zaXhQYXRoLmNoYXJDb2RlQXQocG9zaXhQYXRoLmxlbmd0aCAtIDEpO1xuXHRyZXR1cm4gKGZpbGVQYXRoTGFzdCA9PT0gNDcgfHwgaXNXaW5kb3dzICYmIGZpbGVQYXRoTGFzdCA9PT0gOTIpICYmIHJlc29sdmVkW3Jlc29sdmVkLmxlbmd0aCAtIDFdICE9PSBcIi9cIiAmJiAocmVzb2x2ZWQgKz0gXCIvXCIpLCByZXNvbHZlZCA9IGVuY29kZVBhdGhDaGFycyhyZXNvbHZlZCksIHJlc29sdmVkLmluZGV4T2YoXCI/XCIpICE9PSAtMSAmJiAocmVzb2x2ZWQgPSByZXNvbHZlZC5yZXBsYWNlKHF1ZXN0aW9uUmVnZXgsIFwiJTNGXCIpKSwgcmVzb2x2ZWQuaW5kZXhPZihcIiNcIikgIT09IC0xICYmIChyZXNvbHZlZCA9IHJlc29sdmVkLnJlcGxhY2UoaGFzaFJlZ2V4LCBcIiUyM1wiKSksIG5ldyBVUkwoYGZpbGU6Ly8ke3Jlc29sdmVkfWApLmhyZWY7XG59XG5mdW5jdGlvbiB0b1dpbmRvd3NQYXRoKHBhdGgpIHtcblx0cmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanNcbnZhciBjb21tYSA9IDQ0LCBjaGFycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCksIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG5cdGxldCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcblx0aW50VG9DaGFyW2ldID0gYywgY2hhclRvSW50W2NdID0gaTtcbn1cbmZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyLCByZWxhdGl2ZSkge1xuXHRsZXQgdmFsdWUgPSAwLCBzaGlmdCA9IDAsIGludGVnZXIgPSAwO1xuXHRkb1xuXHRcdGludGVnZXIgPSBjaGFyVG9JbnRbcmVhZGVyLm5leHQoKV0sIHZhbHVlIHw9IChpbnRlZ2VyICYgMzEpIDw8IHNoaWZ0LCBzaGlmdCArPSA1O1xuXHR3aGlsZSAoaW50ZWdlciAmIDMyKTtcblx0bGV0IHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcblx0cmV0dXJuIHZhbHVlID4+Pj0gMSwgc2hvdWxkTmVnYXRlICYmICh2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlKSwgcmVsYXRpdmUgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhc01vcmVWbHEocmVhZGVyLCBtYXgpIHtcblx0cmV0dXJuIHJlYWRlci5wb3MgPj0gbWF4ID8gITEgOiByZWFkZXIucGVlaygpICE9PSBjb21tYTtcbn1cbnZhciBTdHJpbmdSZWFkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlcikge1xuXHRcdHRoaXMucG9zID0gMCwgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdH1cblx0bmV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcblx0fVxuXHRwZWVrKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblx0fVxuXHRpbmRleE9mKGNoYXIpIHtcblx0XHRsZXQgeyBidWZmZXIsIHBvcyB9ID0gdGhpcywgaWR4ID0gYnVmZmVyLmluZGV4T2YoY2hhciwgcG9zKTtcblx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IGJ1ZmZlci5sZW5ndGggOiBpZHg7XG5cdH1cbn07XG5mdW5jdGlvbiBkZWNvZGUobWFwcGluZ3MpIHtcblx0bGV0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncywgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihtYXBwaW5ncyksIGRlY29kZWQgPSBbXSwgZ2VuQ29sdW1uID0gMCwgc291cmNlc0luZGV4ID0gMCwgc291cmNlTGluZSA9IDAsIHNvdXJjZUNvbHVtbiA9IDAsIG5hbWVzSW5kZXggPSAwO1xuXHRkbyB7XG5cdFx0bGV0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIiksIGxpbmUgPSBbXSwgc29ydGVkID0gITAsIGxhc3RDb2wgPSAwO1xuXHRcdGZvciAoZ2VuQ29sdW1uID0gMDsgcmVhZGVyLnBvcyA8IHNlbWk7KSB7XG5cdFx0XHRsZXQgc2VnO1xuXHRcdFx0Z2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbiksIGdlbkNvbHVtbiA8IGxhc3RDb2wgJiYgKHNvcnRlZCA9ICExKSwgbGFzdENvbCA9IGdlbkNvbHVtbiwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKHNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VzSW5kZXgpLCBzb3VyY2VMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUxpbmUpLCBzb3VyY2VDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlQ29sdW1uKSwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKG5hbWVzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbmFtZXNJbmRleCksIHNlZyA9IFtcblx0XHRcdFx0Z2VuQ29sdW1uLFxuXHRcdFx0XHRzb3VyY2VzSW5kZXgsXG5cdFx0XHRcdHNvdXJjZUxpbmUsXG5cdFx0XHRcdHNvdXJjZUNvbHVtbixcblx0XHRcdFx0bmFtZXNJbmRleFxuXHRcdFx0XSkgOiBzZWcgPSBbXG5cdFx0XHRcdGdlbkNvbHVtbixcblx0XHRcdFx0c291cmNlc0luZGV4LFxuXHRcdFx0XHRzb3VyY2VMaW5lLFxuXHRcdFx0XHRzb3VyY2VDb2x1bW5cblx0XHRcdF0pIDogc2VnID0gW2dlbkNvbHVtbl0sIGxpbmUucHVzaChzZWcpLCByZWFkZXIucG9zKys7XG5cdFx0fVxuXHRcdHNvcnRlZCB8fCBzb3J0KGxpbmUpLCBkZWNvZGVkLnB1c2gobGluZSksIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcblx0fSB3aGlsZSAocmVhZGVyLnBvcyA8PSBsZW5ndGgpO1xuXHRyZXR1cm4gZGVjb2RlZDtcbn1cbmZ1bmN0aW9uIHNvcnQobGluZSkge1xuXHRsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYSwgYikge1xuXHRyZXR1cm4gYVswXSAtIGJbMF07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGpyaWRnZXdlbGwrdHJhY2UtbWFwcGluZ0AwLjMuMzEvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvZGlzdC90cmFjZS1tYXBwaW5nLm1qc1xudmFyIENPTFVNTiA9IDAsIFNPVVJDRVNfSU5ERVggPSAxLCBTT1VSQ0VfTElORSA9IDIsIFNPVVJDRV9DT0xVTU4gPSAzLCBOQU1FU19JTkRFWCA9IDQsIGZvdW5kID0gITE7XG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSB7XG5cdGZvciAoOyBsb3cgPD0gaGlnaDspIHtcblx0XHRsZXQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cgPj4gMSksIGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblx0XHRpZiAoY21wID09PSAwKSByZXR1cm4gZm91bmQgPSAhMCwgbWlkO1xuXHRcdGNtcCA8IDAgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZCAtIDE7XG5cdH1cblx0cmV0dXJuIGZvdW5kID0gITEsIGxvdyAtIDE7XG59XG5mdW5jdGlvbiB1cHBlckJvdW5kKGhheXN0YWNrLCBuZWVkbGUsIGluZGV4KSB7XG5cdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBoYXlzdGFjay5sZW5ndGggJiYgaGF5c3RhY2tbaV1bQ09MVU1OXSA9PT0gbmVlZGxlOyBpbmRleCA9IGkrKyk7XG5cdHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGxvd2VyQm91bmQoaGF5c3RhY2ssIG5lZWRsZSwgaW5kZXgpIHtcblx0Zm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwICYmIGhheXN0YWNrW2ldW0NPTFVNTl0gPT09IG5lZWRsZTsgaW5kZXggPSBpLS0pO1xuXHRyZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChoYXlzdGFjaywgbmVlZGxlLCBzdGF0ZSwga2V5KSB7XG5cdGxldCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGUsIGxvdyA9IDAsIGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuXHRpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG5cdFx0aWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkgcmV0dXJuIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZSwgbGFzdEluZGV4O1xuXHRcdG5lZWRsZSA+PSBsYXN0TmVlZGxlID8gbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXggOiBoaWdoID0gbGFzdEluZGV4O1xuXHR9XG5cdHJldHVybiBzdGF0ZS5sYXN0S2V5ID0ga2V5LCBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlLCBzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKTtcbn1cbnZhciBMSU5FX0dUUl9aRVJPID0gXCJgbGluZWAgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCAobGluZXMgc3RhcnQgYXQgbGluZSAxKVwiLCBDT0xfR1RSX0VRX1pFUk8gPSBcImBjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApXCI7XG5mdW5jdGlvbiBjYXN0KG1hcCkge1xuXHRyZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcCkge1xuXHR2YXIgX2E7XG5cdHJldHVybiAoX2EgPSBjYXN0KG1hcCkpLl9kZWNvZGVkIHx8IChfYS5fZGVjb2RlZCA9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQpKTtcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsUG9zaXRpb25Gb3IobWFwLCBuZWVkbGUpIHtcblx0bGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG5cdGlmIChsaW5lLS0sIGxpbmUgPCAwKSB0aHJvdyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcblx0aWYgKGNvbHVtbiA8IDApIHRocm93IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cdGxldCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cdGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV0sIGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCAxKTtcblx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXHRsZXQgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcblx0aWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblx0cmV0dXJuIE9NYXBwaW5nKHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSwgc2VnbWVudFtTT1VSQ0VfTElORV0gKyAxLCBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLCBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwpO1xufVxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUpIHtcblx0cmV0dXJuIHtcblx0XHRzb3VyY2UsXG5cdFx0bGluZSxcblx0XHRjb2x1bW4sXG5cdFx0bmFtZVxuXHR9O1xufVxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcykge1xuXHRsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcblx0cmV0dXJuIGZvdW5kID8gaW5kZXggPSAoYmlhcyA9PT0gLTEgPyB1cHBlckJvdW5kIDogbG93ZXJCb3VuZCkoc2VnbWVudHMsIGNvbHVtbiwgaW5kZXgpIDogYmlhcyA9PT0gLTEgJiYgaW5kZXgrKywgaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggPyAtMSA6IGluZGV4O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvc291cmNlbWFwL2RlY29kZXIudHNcbnZhciBEZWNvZGVkTWFwID0gY2xhc3Mge1xuXHRfZW5jb2RlZDtcblx0X2RlY29kZWQ7XG5cdF9kZWNvZGVkTWVtbztcblx0dXJsO1xuXHRmaWxlO1xuXHR2ZXJzaW9uO1xuXHRuYW1lcyA9IFtdO1xuXHRyZXNvbHZlZFNvdXJjZXM7XG5cdGNvbnN0cnVjdG9yKG1hcCwgZnJvbSkge1xuXHRcdHRoaXMubWFwID0gbWFwO1xuXHRcdGxldCB7IG1hcHBpbmdzLCBuYW1lcywgc291cmNlcyB9ID0gbWFwO1xuXHRcdHRoaXMudmVyc2lvbiA9IG1hcC52ZXJzaW9uLCB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW10sIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncyB8fCBcIlwiLCB0aGlzLl9kZWNvZGVkTWVtbyA9IG1lbW9pemVkU3RhdGUoKSwgdGhpcy51cmwgPSBmcm9tLCB0aGlzLmZpbGUgPSBmcm9tO1xuXHRcdGxldCBvcmlnaW5EaXIgPSBwb3NpeERpcm5hbWUoZnJvbSk7XG5cdFx0dGhpcy5yZXNvbHZlZFNvdXJjZXMgPSAoc291cmNlcyB8fCBbXSkubWFwKChzKSA9PiBwb3NpeFJlc29sdmUob3JpZ2luRGlyLCBzIHx8IFwiXCIpKTtcblx0fVxufTtcbmZ1bmN0aW9uIG1lbW9pemVkU3RhdGUoKSB7XG5cdHJldHVybiB7XG5cdFx0bGFzdEtleTogLTEsXG5cdFx0bGFzdE5lZWRsZTogLTEsXG5cdFx0bGFzdEluZGV4OiAtMVxuXHR9O1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxQb3NpdGlvbihtYXAsIG5lZWRsZSkge1xuXHRsZXQgcmVzdWx0ID0gb3JpZ2luYWxQb3NpdGlvbkZvcihtYXAsIG5lZWRsZSk7XG5cdHJldHVybiByZXN1bHQuY29sdW1uID09IG51bGwgPyBudWxsIDogcmVzdWx0O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvZXZhbHVhdGVkTW9kdWxlcy50c1xuY29uc3QgTU9EVUxFX1JVTk5FUl9TT1VSQ0VNQVBQSU5HX1JFR0VYUCA9IFJlZ0V4cChgLy8jICR7U09VUkNFTUFQUElOR19VUkx9PWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsKC4rKWApO1xudmFyIEV2YWx1YXRlZE1vZHVsZU5vZGUgPSBjbGFzcyB7XG5cdGltcG9ydGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGltcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRldmFsdWF0ZWQgPSAhMTtcblx0bWV0YTtcblx0cHJvbWlzZTtcblx0ZXhwb3J0cztcblx0ZmlsZTtcblx0bWFwO1xuXHRjb25zdHJ1Y3RvcihpZCwgdXJsKSB7XG5cdFx0dGhpcy5pZCA9IGlkLCB0aGlzLnVybCA9IHVybCwgdGhpcy5maWxlID0gY2xlYW5VcmwoaWQpO1xuXHR9XG59LCBFdmFsdWF0ZWRNb2R1bGVzID0gY2xhc3Mge1xuXHRpZFRvTW9kdWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0ZmlsZVRvTW9kdWxlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHVybFRvSWRNb2R1bGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHQvKipcblx0KiBSZXR1cm5zIHRoZSBtb2R1bGUgbm9kZSBieSB0aGUgcmVzb2x2ZWQgbW9kdWxlIElELiBVc3VhbGx5LCBtb2R1bGUgSUQgaXNcblx0KiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCB3aXRoIHF1ZXJ5IGFuZC9vciBoYXNoLiBJdCBjYW4gYWxzbyBiZSBhIHZpcnR1YWwgbW9kdWxlLlxuXHQqXG5cdCogTW9kdWxlIHJ1bm5lciBncmFwaCB3aWxsIGhhdmUgMSB0byAxIG1hcHBpbmcgd2l0aCB0aGUgc2VydmVyIG1vZHVsZSBncmFwaC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZUJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5pZFRvTW9kdWxlTWFwLmdldChpZCk7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJucyBhbGwgbW9kdWxlcyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBwYXRoLiBEaWZmZXJlbnQgbW9kdWxlc1xuXHQqIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGFzaCwgc28gaXQncyBwb3NzaWJsZSB0byBoYXZlXG5cdCogbXVsdGlwbGUgbW9kdWxlcyBmb3IgdGhlIHNhbWUgZmlsZS5cblx0KiBAcGFyYW0gZmlsZSBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvZiB0aGUgbW9kdWxlXG5cdCovXG5cdGdldE1vZHVsZXNCeUZpbGUoZmlsZSkge1xuXHRcdHJldHVybiB0aGlzLmZpbGVUb01vZHVsZXNNYXAuZ2V0KGZpbGUpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgdGhlIG1vZHVsZSBub2RlIGJ5IHRoZSBVUkwgdGhhdCB3YXMgdXNlZCBpbiB0aGUgaW1wb3J0IHN0YXRlbWVudC5cblx0KiBVbmxpa2UgbW9kdWxlIGdyYXBoIG9uIHRoZSBzZXJ2ZXIsIHRoZSBVUkwgaXMgbm90IHJlc29sdmVkIGFuZCBpcyB1c2VkIGFzIGlzLlxuXHQqIEBwYXJhbSB1cmwgU2VydmVyIFVSTCB0aGF0IHdhcyB1c2VkIGluIHRoZSBpbXBvcnQgc3RhdGVtZW50XG5cdCovXG5cdGdldE1vZHVsZUJ5VXJsKHVybCkge1xuXHRcdHJldHVybiB0aGlzLnVybFRvSWRNb2R1bGVNYXAuZ2V0KHVud3JhcElkKHVybCkpO1xuXHR9XG5cdC8qKlxuXHQqIEVuc3VyZSB0aGF0IG1vZHVsZSBpcyBpbiB0aGUgZ3JhcGguIElmIHRoZSBtb2R1bGUgaXMgYWxyZWFkeSBpbiB0aGUgZ3JhcGgsXG5cdCogaXQgd2lsbCByZXR1cm4gdGhlIGV4aXN0aW5nIG1vZHVsZSBub2RlLiBPdGhlcndpc2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3XG5cdCogbW9kdWxlIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguXG5cdCogQHBhcmFtIGlkIFJlc29sdmVkIG1vZHVsZSBJRFxuXHQqIEBwYXJhbSB1cmwgVVJMIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGltcG9ydCBzdGF0ZW1lbnRcblx0Ki9cblx0ZW5zdXJlTW9kdWxlKGlkLCB1cmwpIHtcblx0XHRpZiAoaWQgPSBub3JtYWxpemVNb2R1bGVJZChpZCksIHRoaXMuaWRUb01vZHVsZU1hcC5oYXMoaWQpKSB7XG5cdFx0XHRsZXQgbW9kdWxlTm9kZSA9IHRoaXMuaWRUb01vZHVsZU1hcC5nZXQoaWQpO1xuXHRcdFx0cmV0dXJuIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5zZXQodXJsLCBtb2R1bGVOb2RlKSwgbW9kdWxlTm9kZTtcblx0XHR9XG5cdFx0bGV0IG1vZHVsZU5vZGUgPSBuZXcgRXZhbHVhdGVkTW9kdWxlTm9kZShpZCwgdXJsKTtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuc2V0KGlkLCBtb2R1bGVOb2RlKSwgdGhpcy51cmxUb0lkTW9kdWxlTWFwLnNldCh1cmwsIG1vZHVsZU5vZGUpO1xuXHRcdGxldCBmaWxlTW9kdWxlcyA9IHRoaXMuZmlsZVRvTW9kdWxlc01hcC5nZXQobW9kdWxlTm9kZS5maWxlKSB8fCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdHJldHVybiBmaWxlTW9kdWxlcy5hZGQobW9kdWxlTm9kZSksIHRoaXMuZmlsZVRvTW9kdWxlc01hcC5zZXQobW9kdWxlTm9kZS5maWxlLCBmaWxlTW9kdWxlcyksIG1vZHVsZU5vZGU7XG5cdH1cblx0aW52YWxpZGF0ZU1vZHVsZShub2RlKSB7XG5cdFx0bm9kZS5ldmFsdWF0ZWQgPSAhMSwgbm9kZS5tZXRhID0gdm9pZCAwLCBub2RlLm1hcCA9IHZvaWQgMCwgbm9kZS5wcm9taXNlID0gdm9pZCAwLCBub2RlLmV4cG9ydHMgPSB2b2lkIDAsIG5vZGUuaW1wb3J0cy5jbGVhcigpO1xuXHR9XG5cdC8qKlxuXHQqIEV4dHJhY3RzIHRoZSBpbmxpbmVkIHNvdXJjZSBtYXAgZnJvbSB0aGUgbW9kdWxlIGNvZGUgYW5kIHJldHVybnMgdGhlIGRlY29kZWRcblx0KiBzb3VyY2UgbWFwLiBJZiB0aGUgc291cmNlIG1hcCBpcyBub3QgaW5saW5lZCwgaXQgd2lsbCByZXR1cm4gbnVsbC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZVNvdXJjZU1hcEJ5SWQoaWQpIHtcblx0XHRsZXQgbW9kID0gdGhpcy5nZXRNb2R1bGVCeUlkKGlkKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKG1vZC5tYXApIHJldHVybiBtb2QubWFwO1xuXHRcdGlmICghbW9kLm1ldGEgfHwgIShcImNvZGVcIiBpbiBtb2QubWV0YSkpIHJldHVybiBudWxsO1xuXHRcdGxldCBwYXR0ZXJuID0gYC8vIyAke1NPVVJDRU1BUFBJTkdfVVJMfT1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGAsIGxhc3RJbmRleCA9IG1vZC5tZXRhLmNvZGUubGFzdEluZGV4T2YocGF0dGVybik7XG5cdFx0aWYgKGxhc3RJbmRleCA9PT0gLTEpIHJldHVybiBudWxsO1xuXHRcdGxldCBtYXBTdHJpbmcgPSBNT0RVTEVfUlVOTkVSX1NPVVJDRU1BUFBJTkdfUkVHRVhQLmV4ZWMobW9kLm1ldGEuY29kZS5zbGljZShsYXN0SW5kZXgpKT8uWzFdO1xuXHRcdHJldHVybiBtYXBTdHJpbmcgPyAobW9kLm1hcCA9IG5ldyBEZWNvZGVkTWFwKEpTT04ucGFyc2UoZGVjb2RlQmFzZTY0KG1hcFN0cmluZykpLCBtb2QuZmlsZSksIG1vZC5tYXApIDogbnVsbDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuY2xlYXIoKSwgdGhpcy5maWxlVG9Nb2R1bGVzTWFwLmNsZWFyKCksIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5jbGVhcigpO1xuXHR9XG59O1xuY29uc3QgcHJlZml4ZWRCdWlsdGlucyA9IG5ldyBTZXQoW1xuXHRcIm5vZGU6c2VhXCIsXG5cdFwibm9kZTpzcWxpdGVcIixcblx0XCJub2RlOnRlc3RcIixcblx0XCJub2RlOnRlc3QvcmVwb3J0ZXJzXCJcbl0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlSWQoZmlsZSkge1xuXHRyZXR1cm4gcHJlZml4ZWRCdWlsdGlucy5oYXMoZmlsZSkgPyBmaWxlIDogc2xhc2goZmlsZSkucmVwbGFjZSgvXlxcL0Bmc1xcLy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIikucmVwbGFjZSgvXm5vZGU6LywgXCJcIikucmVwbGFjZSgvXlxcLysvLCBcIi9cIikucmVwbGFjZSgvXmZpbGU6XFwvKy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIik7XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hhcmVkL2htci50c1xudmFyIEhNUkNvbnRleHQgPSBjbGFzcyB7XG5cdG5ld0xpc3RlbmVycztcblx0Y29uc3RydWN0b3IoaG1yQ2xpZW50LCBvd25lclBhdGgpIHtcblx0XHR0aGlzLmhtckNsaWVudCA9IGhtckNsaWVudCwgdGhpcy5vd25lclBhdGggPSBvd25lclBhdGgsIGhtckNsaWVudC5kYXRhTWFwLmhhcyhvd25lclBhdGgpIHx8IGhtckNsaWVudC5kYXRhTWFwLnNldChvd25lclBhdGgsIHt9KTtcblx0XHRsZXQgbW9kID0gaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuZ2V0KG93bmVyUGF0aCk7XG5cdFx0bW9kICYmIChtb2QuY2FsbGJhY2tzID0gW10pO1xuXHRcdGxldCBzdGFsZUxpc3RlbmVycyA9IGhtckNsaWVudC5jdHhUb0xpc3RlbmVyc01hcC5nZXQob3duZXJQYXRoKTtcblx0XHRpZiAoc3RhbGVMaXN0ZW5lcnMpIGZvciAobGV0IFtldmVudCwgc3RhbGVGbnNdIG9mIHN0YWxlTGlzdGVuZXJzKSB7XG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXHRcdFx0bGlzdGVuZXJzICYmIGhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXAuc2V0KGV2ZW50LCBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhc3RhbGVGbnMuaW5jbHVkZXMobCkpKTtcblx0XHR9XG5cdFx0dGhpcy5uZXdMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBobXJDbGllbnQuY3R4VG9MaXN0ZW5lcnNNYXAuc2V0KG93bmVyUGF0aCwgdGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdGdldCBkYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmhtckNsaWVudC5kYXRhTWFwLmdldCh0aGlzLm93bmVyUGF0aCk7XG5cdH1cblx0YWNjZXB0KGRlcHMsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKHR5cGVvZiBkZXBzID09IFwiZnVuY3Rpb25cIiB8fCAhZGVwcykgdGhpcy5hY2NlcHREZXBzKFt0aGlzLm93bmVyUGF0aF0sIChbbW9kXSkgPT4gZGVwcz8uKG1vZCkpO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXBzID09IFwic3RyaW5nXCIpIHRoaXMuYWNjZXB0RGVwcyhbZGVwc10sIChbbW9kXSkgPT4gY2FsbGJhY2s/Lihtb2QpKTtcblx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlcHMpKSB0aGlzLmFjY2VwdERlcHMoZGVwcywgY2FsbGJhY2spO1xuXHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhvdC5hY2NlcHQoKSB1c2FnZS5cIik7XG5cdH1cblx0YWNjZXB0RXhwb3J0cyhfLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuYWNjZXB0RGVwcyhbdGhpcy5vd25lclBhdGhdLCAoW21vZF0pID0+IGNhbGxiYWNrPy4obW9kKSk7XG5cdH1cblx0ZGlzcG9zZShjYikge1xuXHRcdHRoaXMuaG1yQ2xpZW50LmRpc3Bvc2VNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBjYik7XG5cdH1cblx0cHJ1bmUoY2IpIHtcblx0XHR0aGlzLmhtckNsaWVudC5wcnVuZU1hcC5zZXQodGhpcy5vd25lclBhdGgsIGNiKTtcblx0fVxuXHRkZWNsaW5lKCkge31cblx0aW52YWxpZGF0ZShtZXNzYWdlKSB7XG5cdFx0bGV0IGZpcnN0SW52YWxpZGF0ZWRCeSA9IHRoaXMuaG1yQ2xpZW50LmN1cnJlbnRGaXJzdEludmFsaWRhdGVkQnkgPz8gdGhpcy5vd25lclBhdGg7XG5cdFx0dGhpcy5obXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTppbnZhbGlkYXRlXCIsIHtcblx0XHRcdHBhdGg6IHRoaXMub3duZXJQYXRoLFxuXHRcdFx0bWVzc2FnZSxcblx0XHRcdGZpcnN0SW52YWxpZGF0ZWRCeVxuXHRcdH0pLCB0aGlzLnNlbmQoXCJ2aXRlOmludmFsaWRhdGVcIiwge1xuXHRcdFx0cGF0aDogdGhpcy5vd25lclBhdGgsXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0Zmlyc3RJbnZhbGlkYXRlZEJ5XG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhgaW52YWxpZGF0ZSAke3RoaXMub3duZXJQYXRofSR7bWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIn1gKTtcblx0fVxuXHRvbihldmVudCwgY2IpIHtcblx0XHRsZXQgYWRkVG9NYXAgPSAobWFwKSA9PiB7XG5cdFx0XHRsZXQgZXhpc3RpbmcgPSBtYXAuZ2V0KGV2ZW50KSB8fCBbXTtcblx0XHRcdGV4aXN0aW5nLnB1c2goY2IpLCBtYXAuc2V0KGV2ZW50LCBleGlzdGluZyk7XG5cdFx0fTtcblx0XHRhZGRUb01hcCh0aGlzLmhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXApLCBhZGRUb01hcCh0aGlzLm5ld0xpc3RlbmVycyk7XG5cdH1cblx0b2ZmKGV2ZW50LCBjYikge1xuXHRcdGxldCByZW1vdmVGcm9tTWFwID0gKG1hcCkgPT4ge1xuXHRcdFx0bGV0IGV4aXN0aW5nID0gbWFwLmdldChldmVudCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcgPT09IHZvaWQgMCkgcmV0dXJuO1xuXHRcdFx0bGV0IHBydW5lZCA9IGV4aXN0aW5nLmZpbHRlcigobCkgPT4gbCAhPT0gY2IpO1xuXHRcdFx0aWYgKHBydW5lZC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWFwLmRlbGV0ZShldmVudCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG1hcC5zZXQoZXZlbnQsIHBydW5lZCk7XG5cdFx0fTtcblx0XHRyZW1vdmVGcm9tTWFwKHRoaXMuaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcCksIHJlbW92ZUZyb21NYXAodGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdHNlbmQoZXZlbnQsIGRhdGEpIHtcblx0XHR0aGlzLmhtckNsaWVudC5zZW5kKHtcblx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRldmVudCxcblx0XHRcdGRhdGFcblx0XHR9KTtcblx0fVxuXHRhY2NlcHREZXBzKGRlcHMsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcblx0XHRsZXQgbW9kID0gdGhpcy5obXJDbGllbnQuaG90TW9kdWxlc01hcC5nZXQodGhpcy5vd25lclBhdGgpIHx8IHtcblx0XHRcdGlkOiB0aGlzLm93bmVyUGF0aCxcblx0XHRcdGNhbGxiYWNrczogW11cblx0XHR9O1xuXHRcdG1vZC5jYWxsYmFja3MucHVzaCh7XG5cdFx0XHRkZXBzLFxuXHRcdFx0Zm46IGNhbGxiYWNrXG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBtb2QpO1xuXHR9XG59LCBITVJDbGllbnQgPSBjbGFzcyB7XG5cdGhvdE1vZHVsZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkaXNwb3NlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cHJ1bmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkYXRhTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3VzdG9tTGlzdGVuZXJzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3R4VG9MaXN0ZW5lcnNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjdXJyZW50Rmlyc3RJbnZhbGlkYXRlZEJ5O1xuXHRjb25zdHJ1Y3Rvcihsb2dnZXIsIHRyYW5zcG9ydCwgaW1wb3J0VXBkYXRlZE1vZHVsZSkge1xuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2VyLCB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydCwgdGhpcy5pbXBvcnRVcGRhdGVkTW9kdWxlID0gaW1wb3J0VXBkYXRlZE1vZHVsZTtcblx0fVxuXHRhc3luYyBub3RpZnlMaXN0ZW5lcnMoZXZlbnQsIGRhdGEpIHtcblx0XHRsZXQgY2JzID0gdGhpcy5jdXN0b21MaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50KTtcblx0XHRjYnMgJiYgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNicy5tYXAoKGNiKSA9PiBjYihkYXRhKSkpO1xuXHR9XG5cdHNlbmQocGF5bG9hZCkge1xuXHRcdHRoaXMudHJhbnNwb3J0LnNlbmQocGF5bG9hZCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoZXJyKTtcblx0XHR9KTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmhvdE1vZHVsZXNNYXAuY2xlYXIoKSwgdGhpcy5kaXNwb3NlTWFwLmNsZWFyKCksIHRoaXMucHJ1bmVNYXAuY2xlYXIoKSwgdGhpcy5kYXRhTWFwLmNsZWFyKCksIHRoaXMuY3VzdG9tTGlzdGVuZXJzTWFwLmNsZWFyKCksIHRoaXMuY3R4VG9MaXN0ZW5lcnNNYXAuY2xlYXIoKTtcblx0fVxuXHRhc3luYyBwcnVuZVBhdGhzKHBhdGhzKSB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHMubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGRpc3Bvc2VyKSByZXR1cm4gZGlzcG9zZXIodGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpLCBhd2FpdCBQcm9taXNlLmFsbChwYXRocy5tYXAoKHBhdGgpID0+IHtcblx0XHRcdGxldCBmbiA9IHRoaXMucHJ1bmVNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGZuKSByZXR1cm4gZm4odGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpO1xuXHR9XG5cdHdhcm5GYWlsZWRVcGRhdGUoZXJyLCBwYXRoKSB7XG5cdFx0KCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHx8ICFlcnIubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSAmJiB0aGlzLmxvZ2dlci5lcnJvcihlcnIpLCB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3BhdGh9LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBzeW50YXggZXJyb3JzIG9yIGltcG9ydGluZyBub24tZXhpc3RlbnQgbW9kdWxlcy4gKHNlZSBlcnJvcnMgYWJvdmUpYCk7XG5cdH1cblx0dXBkYXRlUXVldWUgPSBbXTtcblx0cGVuZGluZ1VwZGF0ZVF1ZXVlID0gITE7XG5cdC8qKlxuXHQqIGJ1ZmZlciBtdWx0aXBsZSBob3QgdXBkYXRlcyB0cmlnZ2VyZWQgYnkgdGhlIHNhbWUgc3JjIGNoYW5nZVxuXHQqIHNvIHRoYXQgdGhleSBhcmUgaW52b2tlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgc2VudC5cblx0KiAob3RoZXJ3aXNlIHRoZSBvcmRlciBtYXkgYmUgaW5jb25zaXN0ZW50IGJlY2F1c2Ugb2YgdGhlIGh0dHAgcmVxdWVzdCByb3VuZCB0cmlwKVxuXHQqL1xuXHRhc3luYyBxdWV1ZVVwZGF0ZShwYXlsb2FkKSB7XG5cdFx0aWYgKHRoaXMudXBkYXRlUXVldWUucHVzaCh0aGlzLmZldGNoVXBkYXRlKHBheWxvYWQpKSwgIXRoaXMucGVuZGluZ1VwZGF0ZVF1ZXVlKSB7XG5cdFx0XHR0aGlzLnBlbmRpbmdVcGRhdGVRdWV1ZSA9ICEwLCBhd2FpdCBQcm9taXNlLnJlc29sdmUoKSwgdGhpcy5wZW5kaW5nVXBkYXRlUXVldWUgPSAhMTtcblx0XHRcdGxldCBsb2FkaW5nID0gWy4uLnRoaXMudXBkYXRlUXVldWVdO1xuXHRcdFx0dGhpcy51cGRhdGVRdWV1ZSA9IFtdLCAoYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZykpLmZvckVhY2goKGZuKSA9PiBmbiAmJiBmbigpKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZmV0Y2hVcGRhdGUodXBkYXRlKSB7XG5cdFx0bGV0IHsgcGF0aCwgYWNjZXB0ZWRQYXRoLCBmaXJzdEludmFsaWRhdGVkQnkgfSA9IHVwZGF0ZSwgbW9kID0gdGhpcy5ob3RNb2R1bGVzTWFwLmdldChwYXRoKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuO1xuXHRcdGxldCBmZXRjaGVkTW9kdWxlLCBpc1NlbGZVcGRhdGUgPSBwYXRoID09PSBhY2NlcHRlZFBhdGgsIHF1YWxpZmllZENhbGxiYWNrcyA9IG1vZC5jYWxsYmFja3MuZmlsdGVyKCh7IGRlcHMgfSkgPT4gZGVwcy5pbmNsdWRlcyhhY2NlcHRlZFBhdGgpKTtcblx0XHRpZiAoaXNTZWxmVXBkYXRlIHx8IHF1YWxpZmllZENhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KGFjY2VwdGVkUGF0aCk7XG5cdFx0XHRkaXNwb3NlciAmJiBhd2FpdCBkaXNwb3Nlcih0aGlzLmRhdGFNYXAuZ2V0KGFjY2VwdGVkUGF0aCkpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZmV0Y2hlZE1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0VXBkYXRlZE1vZHVsZSh1cGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLndhcm5GYWlsZWRVcGRhdGUoZSwgYWNjZXB0ZWRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IGZpcnN0SW52YWxpZGF0ZWRCeTtcblx0XHRcdFx0Zm9yIChsZXQgeyBkZXBzLCBmbiB9IG9mIHF1YWxpZmllZENhbGxiYWNrcykgZm4oZGVwcy5tYXAoKGRlcCkgPT4gZGVwID09PSBhY2NlcHRlZFBhdGggPyBmZXRjaGVkTW9kdWxlIDogdm9pZCAwKSk7XG5cdFx0XHRcdGxldCBsb2dnZWRQYXRoID0gaXNTZWxmVXBkYXRlID8gcGF0aCA6IGAke2FjY2VwdGVkUGF0aH0gdmlhICR7cGF0aH1gO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5kZWJ1ZyhgaG90IHVwZGF0ZWQ6ICR7bG9nZ2VkUGF0aH1gKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IHZvaWQgMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9zc3JUcmFuc2Zvcm0udHNcbi8qKlxuKiBWaXRlIGNvbnZlcnRzIGBpbXBvcnQgeyB9IGZyb20gJ2ZvbydgIHRvIGBjb25zdCBfID0gX192aXRlX3Nzcl9pbXBvcnRfXygnZm9vJylgLlxuKiBUb3AtbGV2ZWwgaW1wb3J0cyBhbmQgZHluYW1pYyBpbXBvcnRzIHdvcmsgc2xpZ2h0bHkgZGlmZmVyZW50bHkgaW4gTm9kZS5qcy5cbiogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRoZSBkaWZmZXJlbmNlcyBzbyBpdCBtYXRjaGVzIHByb2QgYmVoYXZpb3VyLlxuKi9cbmZ1bmN0aW9uIGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UobW9kLCByYXdJZCwgbW9kdWxlVHlwZSwgbWV0YWRhdGEpIHtcblx0aWYgKCFtZXRhZGF0YT8uaXNEeW5hbWljSW1wb3J0ICYmIG1ldGFkYXRhPy5pbXBvcnRlZE5hbWVzPy5sZW5ndGgpIHtcblx0XHRsZXQgbWlzc2luZ0JpbmRpbmdzID0gbWV0YWRhdGEuaW1wb3J0ZWROYW1lcy5maWx0ZXIoKHMpID0+ICEocyBpbiBtb2QpKTtcblx0XHRpZiAobWlzc2luZ0JpbmRpbmdzLmxlbmd0aCkge1xuXHRcdFx0bGV0IGxhc3RCaW5kaW5nID0gbWlzc2luZ0JpbmRpbmdzW21pc3NpbmdCaW5kaW5ncy5sZW5ndGggLSAxXTtcblx0XHRcdHRocm93IFN5bnRheEVycm9yKG1vZHVsZVR5cGUgPT09IFwibW9kdWxlXCIgPyBgW3ZpdGVdIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgZG9lcyBub3QgcHJvdmlkZSBhbiBleHBvcnQgbmFtZWQgJyR7bGFzdEJpbmRpbmd9J2AgOiBgXFxcblt2aXRlXSBOYW1lZCBleHBvcnQgJyR7bGFzdEJpbmRpbmd9JyBub3QgZm91bmQuIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgaXMgYSBDb21tb25KUyBtb2R1bGUsIHdoaWNoIG1heSBub3Qgc3VwcG9ydCBhbGwgbW9kdWxlLmV4cG9ydHMgYXMgbmFtZWQgZXhwb3J0cy5cbkNvbW1vbkpTIG1vZHVsZXMgY2FuIGFsd2F5cyBiZSBpbXBvcnRlZCB2aWEgdGhlIGRlZmF1bHQgZXhwb3J0LCBmb3IgZXhhbXBsZSB1c2luZzpcblxuaW1wb3J0IHBrZyBmcm9tICcke3Jhd0lkfSc7XG5jb25zdCB7JHttaXNzaW5nQmluZGluZ3Muam9pbihcIiwgXCIpfX0gPSBwa2c7XG5gKTtcblx0XHR9XG5cdH1cbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9uYW5vaWRANS4xLjcvbm9kZV9tb2R1bGVzL25hbm9pZC9ub24tc2VjdXJlL2luZGV4LmpzXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuXHRsZXQgaWQgPSBcIlwiLCBpID0gc2l6ZSB8IDA7XG5cdGZvciAoOyBpLS07KSBpZCArPSBcInVzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3RcIltNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcblx0cmV0dXJuIGlkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvbW9kdWxlUnVubmVyVHJhbnNwb3J0LnRzXG5mdW5jdGlvbiByZXZpdmVJbnZva2VFcnJvcihlKSB7XG5cdGxldCBlcnJvciA9IEVycm9yKGUubWVzc2FnZSB8fCBcIlVua25vd24gaW52b2tlIGVycm9yXCIpO1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgZSwgeyBydW5uZXJFcnJvcjogLyogQF9fUFVSRV9fICovIEVycm9yKFwiUnVubmVyRXJyb3JcIikgfSksIGVycm9yO1xufVxuY29uc3QgY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCA9ICh0cmFuc3BvcnQpID0+IHtcblx0aWYgKHRyYW5zcG9ydC5pbnZva2UpIHJldHVybiB7XG5cdFx0Li4udHJhbnNwb3J0LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdHJhbnNwb3J0Lmludm9rZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6aW52b2tlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRpZDogXCJzZW5kXCIsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKFwiZXJyb3JcIiBpbiByZXN1bHQpIHRocm93IHJldml2ZUludm9rZUVycm9yKHJlc3VsdC5lcnJvcik7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlc3VsdDtcblx0XHR9XG5cdH07XG5cdGlmICghdHJhbnNwb3J0LnNlbmQgfHwgIXRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcInRyYW5zcG9ydCBtdXN0IGltcGxlbWVudCBzZW5kIGFuZCBjb25uZWN0IHdoZW4gaW52b2tlIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcblx0bGV0IHJwY1Byb21pc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmV0dXJuIHtcblx0XHQuLi50cmFuc3BvcnQsXG5cdFx0Y29ubmVjdCh7IG9uTWVzc2FnZSwgb25EaXNjb25uZWN0aW9uIH0pIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZShwYXlsb2FkKSB7XG5cdFx0XHRcdFx0aWYgKHBheWxvYWQudHlwZSA9PT0gXCJjdXN0b21cIiAmJiBwYXlsb2FkLmV2ZW50ID09PSBcInZpdGU6aW52b2tlXCIpIHtcblx0XHRcdFx0XHRcdGxldCBkYXRhID0gcGF5bG9hZC5kYXRhO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaWQuc3RhcnRzV2l0aChcInJlc3BvbnNlOlwiKSkge1xuXHRcdFx0XHRcdFx0XHRsZXQgaW52b2tlSWQgPSBkYXRhLmlkLnNsaWNlKDkpLCBwcm9taXNlID0gcnBjUHJvbWlzZXMuZ2V0KGludm9rZUlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9taXNlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdHByb21pc2UudGltZW91dElkICYmIGNsZWFyVGltZW91dChwcm9taXNlLnRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShpbnZva2VJZCk7XG5cdFx0XHRcdFx0XHRcdGxldCB7IGVycm9yLCByZXN1bHQgfSA9IGRhdGEuZGF0YTtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPyBwcm9taXNlLnJlamVjdChlcnJvcikgOiBwcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvbk1lc3NhZ2UocGF5bG9hZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvblxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0cmV0dXJuIHJwY1Byb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHtcblx0XHRcdFx0cHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIEVycm9yKGB0cmFuc3BvcnQgd2FzIGRpc2Nvbm5lY3RlZCwgY2Fubm90IGNhbGwgJHtKU09OLnN0cmluZ2lmeShwcm9taXNlLm5hbWUpfWApKTtcblx0XHRcdH0pLCBycGNQcm9taXNlcy5jbGVhcigpLCB0cmFuc3BvcnQuZGlzY29ubmVjdD8uKCk7XG5cdFx0fSxcblx0XHRzZW5kKGRhdGEpIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcHJvbWlzZUlkID0gbmFub2lkKCksIHdyYXBwZWREYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRldmVudDogXCJ2aXRlOmludm9rZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpZDogYHNlbmQ6JHtwcm9taXNlSWR9YCxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0sIHNlbmRQcm9taXNlID0gdHJhbnNwb3J0LnNlbmQod3JhcHBlZERhdGEpLCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKSwgdGltZW91dCA9IHRyYW5zcG9ydC50aW1lb3V0ID8/IDZlNCwgdGltZW91dElkO1xuXHRcdFx0dGltZW91dCA+IDAgJiYgKHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRycGNQcm9taXNlcy5kZWxldGUocHJvbWlzZUlkKSwgcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBFcnJvcihgdHJhbnNwb3J0IGludm9rZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zIChkYXRhOiAke0pTT04uc3RyaW5naWZ5KHdyYXBwZWREYXRhKX0pYCkpO1xuXHRcdFx0fSwgdGltZW91dCksIHRpbWVvdXRJZD8udW5yZWY/LigpKSwgcnBjUHJvbWlzZXMuc2V0KHByb21pc2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHRpbWVvdXRJZFxuXHRcdFx0fSksIHNlbmRQcm9taXNlICYmIHNlbmRQcm9taXNlLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShwcm9taXNlSWQpLCByZWplY3QoZXJyKTtcblx0XHRcdH0pO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHByb21pc2U7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgcmV2aXZlSW52b2tlRXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59LCBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQgPSAodHJhbnNwb3J0KSA9PiB7XG5cdGxldCBpbnZva2VhYmxlVHJhbnNwb3J0ID0gY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCh0cmFuc3BvcnQpLCBpc0Nvbm5lY3RlZCA9ICFpbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QsIGNvbm5lY3RpbmdQcm9taXNlO1xuXHRyZXR1cm4ge1xuXHRcdC4uLnRyYW5zcG9ydCxcblx0XHQuLi5pbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QgPyB7IGFzeW5jIGNvbm5lY3Qob25NZXNzYWdlKSB7XG5cdFx0XHRpZiAoaXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHRcdGlmIChjb25uZWN0aW5nUHJvbWlzZSkge1xuXHRcdFx0XHRhd2FpdCBjb25uZWN0aW5nUHJvbWlzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG1heWJlUHJvbWlzZSA9IGludm9rZWFibGVUcmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZTogb25NZXNzYWdlID8/ICgoKSA9PiB7fSksXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvbigpIHtcblx0XHRcdFx0XHRpc0Nvbm5lY3RlZCA9ICExO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1heWJlUHJvbWlzZSAmJiAoY29ubmVjdGluZ1Byb21pc2UgPSBtYXliZVByb21pc2UsIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBjb25uZWN0aW5nUHJvbWlzZSA9IHZvaWQgMCksIGlzQ29ubmVjdGVkID0gITA7XG5cdFx0fSB9IDoge30sXG5cdFx0Li4uaW52b2tlYWJsZVRyYW5zcG9ydC5kaXNjb25uZWN0ID8geyBhc3luYyBkaXNjb25uZWN0KCkge1xuXHRcdFx0aXNDb25uZWN0ZWQgJiYgKGNvbm5lY3RpbmdQcm9taXNlICYmIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBpc0Nvbm5lY3RlZCA9ICExLCBhd2FpdCBpbnZva2VhYmxlVHJhbnNwb3J0LmRpc2Nvbm5lY3QoKSk7XG5cdFx0fSB9IDoge30sXG5cdFx0YXN5bmMgc2VuZChkYXRhKSB7XG5cdFx0XHRpZiAoaW52b2tlYWJsZVRyYW5zcG9ydC5zZW5kKSB7XG5cdFx0XHRcdGlmICghaXNDb25uZWN0ZWQpIGlmIChjb25uZWN0aW5nUHJvbWlzZSkgYXdhaXQgY29ubmVjdGluZ1Byb21pc2U7XG5cdFx0XHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJzZW5kIHdhcyBjYWxsZWQgYmVmb3JlIGNvbm5lY3RcIik7XG5cdFx0XHRcdGF3YWl0IGludm9rZWFibGVUcmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRpZiAoIWlzQ29ubmVjdGVkKSBpZiAoY29ubmVjdGluZ1Byb21pc2UpIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlO1xuXHRcdFx0ZWxzZSB0aHJvdyBFcnJvcihcImludm9rZSB3YXMgY2FsbGVkIGJlZm9yZSBjb25uZWN0XCIpO1xuXHRcdFx0cmV0dXJuIGludm9rZWFibGVUcmFuc3BvcnQuaW52b2tlKG5hbWUsIGRhdGEpO1xuXHRcdH1cblx0fTtcbn0sIGNyZWF0ZVdlYlNvY2tldE1vZHVsZVJ1bm5lclRyYW5zcG9ydCA9IChvcHRpb25zKSA9PiB7XG5cdGxldCBwaW5nSW50ZXJ2YWwgPSBvcHRpb25zLnBpbmdJbnRlcnZhbCA/PyAzZTQsIHdzLCBwaW5nSW50ZXJ2YWxJZDtcblx0cmV0dXJuIHtcblx0XHRhc3luYyBjb25uZWN0KHsgb25NZXNzYWdlLCBvbkRpc2Nvbm5lY3Rpb24gfSkge1xuXHRcdFx0bGV0IHNvY2tldCA9IG9wdGlvbnMuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuXHRcdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShkYXRhKSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBpc09wZW5lZCA9IHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTjtcblx0XHRcdGlzT3BlbmVkIHx8IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsICgpID0+IHtcblx0XHRcdFx0XHRpc09wZW5lZCA9ICEwLCByZXNvbHZlKCk7XG5cdFx0XHRcdH0sIHsgb25jZTogITAgfSksIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICghaXNPcGVuZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gRXJyb3IoXCJXZWJTb2NrZXQgY2xvc2VkIHdpdGhvdXQgb3BlbmVkLlwiKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9uTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFwidml0ZTp3czpkaXNjb25uZWN0XCIsXG5cdFx0XHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdFx0XHR9KSwgb25EaXNjb25uZWN0aW9uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksIG9uTWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6d3M6Y29ubmVjdFwiLFxuXHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdH0pLCB3cyA9IHNvY2tldCwgcGluZ0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTiAmJiBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicGluZ1wiIH0pKTtcblx0XHRcdH0sIHBpbmdJbnRlcnZhbCk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwaW5nSW50ZXJ2YWxJZCksIHdzPy5jbG9zZSgpO1xuXHRcdH0sXG5cdFx0c2VuZChkYXRhKSB7XG5cdFx0XHR3cy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHR9XG5cdH07XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9idWlsdGluLnRzXG5mdW5jdGlvbiBjcmVhdGVJc0J1aWx0aW4oYnVpbHRpbnMpIHtcblx0bGV0IHBsYWluQnVpbHRpbnNTZXQgPSBuZXcgU2V0KGJ1aWx0aW5zLmZpbHRlcigoYnVpbHRpbikgPT4gdHlwZW9mIGJ1aWx0aW4gPT0gXCJzdHJpbmdcIikpLCByZWdleEJ1aWx0aW5zID0gYnVpbHRpbnMuZmlsdGVyKChidWlsdGluKSA9PiB0eXBlb2YgYnVpbHRpbiAhPSBcInN0cmluZ1wiKTtcblx0cmV0dXJuIChpZCkgPT4gcGxhaW5CdWlsdGluc1NldC5oYXMoaWQpIHx8IHJlZ2V4QnVpbHRpbnMuc29tZSgocmVnZXhwKSA9PiByZWdleHAudGVzdChpZCkpO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvY29uc3RhbnRzLnRzXG5jb25zdCBzc3JNb2R1bGVFeHBvcnRzS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydHNfX1wiLCBzc3JJbXBvcnRLZXkgPSBcIl9fdml0ZV9zc3JfaW1wb3J0X19cIiwgc3NyRHluYW1pY0ltcG9ydEtleSA9IFwiX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fXCIsIHNzckV4cG9ydEFsbEtleSA9IFwiX192aXRlX3Nzcl9leHBvcnRBbGxfX1wiLCBzc3JFeHBvcnROYW1lS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydE5hbWVfX1wiLCBzc3JJbXBvcnRNZXRhS2V5ID0gXCJfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX19cIiwgbm9vcCA9ICgpID0+IHt9LCBzaWxlbnRDb25zb2xlID0ge1xuXHRkZWJ1Zzogbm9vcCxcblx0ZXJyb3I6IG5vb3Bcbn0sIGhtckxvZ2dlciA9IHtcblx0ZGVidWc6ICguLi5tc2cpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIC4uLm1zZyksXG5cdGVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIGVycm9yKVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvaG1ySGFuZGxlci50c1xuZnVuY3Rpb24gY3JlYXRlSE1SSGFuZGxlcihoYW5kbGVyKSB7XG5cdGxldCBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXHRyZXR1cm4gKHBheWxvYWQpID0+IHF1ZXVlLmVucXVldWUoKCkgPT4gaGFuZGxlcihwYXlsb2FkKSk7XG59XG52YXIgUXVldWUgPSBjbGFzcyB7XG5cdHF1ZXVlID0gW107XG5cdHBlbmRpbmcgPSAhMTtcblx0ZW5xdWV1ZShwcm9taXNlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucXVldWUucHVzaCh7XG5cdFx0XHRcdHByb21pc2UsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdFxuXHRcdFx0fSksIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdGRlcXVldWUoKSB7XG5cdFx0aWYgKHRoaXMucGVuZGluZykgcmV0dXJuICExO1xuXHRcdGxldCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuXHRcdHJldHVybiBpdGVtID8gKHRoaXMucGVuZGluZyA9ICEwLCBpdGVtLnByb21pc2UoKS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5wZW5kaW5nID0gITEsIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pLCAhMCkgOiAhMTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2htckhhbmRsZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIocnVubmVyKSB7XG5cdHJldHVybiBjcmVhdGVITVJIYW5kbGVyKGFzeW5jIChwYXlsb2FkKSA9PiB7XG5cdFx0bGV0IGhtckNsaWVudCA9IHJ1bm5lci5obXJDbGllbnQ7XG5cdFx0aWYgKCEoIWhtckNsaWVudCB8fCBydW5uZXIuaXNDbG9zZWQoKSkpIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29ubmVjdGVkXCI6XG5cdFx0XHRcdGhtckNsaWVudC5sb2dnZXIuZGVidWcoXCJjb25uZWN0ZWQuXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1cGRhdGVcIjpcblx0XHRcdFx0YXdhaXQgaG1yQ2xpZW50Lm5vdGlmeUxpc3RlbmVycyhcInZpdGU6YmVmb3JlVXBkYXRlXCIsIHBheWxvYWQpLCBhd2FpdCBQcm9taXNlLmFsbChwYXlsb2FkLnVwZGF0ZXMubWFwKGFzeW5jICh1cGRhdGUpID0+IHtcblx0XHRcdFx0XHRpZiAodXBkYXRlLnR5cGUgPT09IFwianMtdXBkYXRlXCIpIHJldHVybiB1cGRhdGUuYWNjZXB0ZWRQYXRoID0gdW53cmFwSWQodXBkYXRlLmFjY2VwdGVkUGF0aCksIHVwZGF0ZS5wYXRoID0gdW53cmFwSWQodXBkYXRlLnBhdGgpLCBobXJDbGllbnQucXVldWVVcGRhdGUodXBkYXRlKTtcblx0XHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKFwiY3NzIGhtciBpcyBub3Qgc3VwcG9ydGVkIGluIHJ1bm5lciBtb2RlLlwiKTtcblx0XHRcdFx0fSkpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTphZnRlclVwZGF0ZVwiLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY3VzdG9tXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMocGF5bG9hZC5ldmVudCwgcGF5bG9hZC5kYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZnVsbC1yZWxvYWRcIjoge1xuXHRcdFx0XHRsZXQgeyB0cmlnZ2VyZWRCeSB9ID0gcGF5bG9hZCwgY2xlYXJFbnRyeXBvaW50VXJscyA9IHRyaWdnZXJlZEJ5ID8gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgZ2V0TW9kdWxlc0J5RmlsZShydW5uZXIsIHNsYXNoKHRyaWdnZXJlZEJ5KSkpIDogZmluZEFsbEVudHJ5cG9pbnRzKHJ1bm5lcik7XG5cdFx0XHRcdGlmICghY2xlYXJFbnRyeXBvaW50VXJscy5zaXplKSBicmVhaztcblx0XHRcdFx0aG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhcInByb2dyYW0gcmVsb2FkXCIpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTpiZWZvcmVGdWxsUmVsb2FkXCIsIHBheWxvYWQpLCBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpO1xuXHRcdFx0XHRmb3IgKGxldCB1cmwgb2YgY2xlYXJFbnRyeXBvaW50VXJscykge1xuXHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bm5lci5pbXBvcnQodXJsKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSAhPT0gXCJFUlJfT1VUREFURURfT1BUSU1JWkVEX0RFUFwiICYmIGhtckNsaWVudC5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBmdWxsIHJlbG9hZFxcbiR7ZXJyLm1lc3NhZ2V9XFxuJHtlcnIuc3RhY2t9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInBydW5lXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMoXCJ2aXRlOmJlZm9yZVBydW5lXCIsIHBheWxvYWQpLCBhd2FpdCBobXJDbGllbnQucHJ1bmVQYXRocyhwYXlsb2FkLnBhdGhzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZXJyb3JcIjoge1xuXHRcdFx0XHRhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTplcnJvclwiLCBwYXlsb2FkKTtcblx0XHRcdFx0bGV0IGVyciA9IHBheWxvYWQuZXJyO1xuXHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcXG4ke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJwaW5nXCI6IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIHBheWxvYWQ7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXNCeUZpbGUocnVubmVyLCBmaWxlKSB7XG5cdGxldCBub2RlcyA9IHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG5cdHJldHVybiBub2RlcyA/IFsuLi5ub2Rlc10ubWFwKChub2RlKSA9PiBub2RlLmlkKSA6IFtdO1xufVxuZnVuY3Rpb24gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgbW9kdWxlcywgdmlzaXRlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGVudHJ5cG9pbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkge1xuXHRmb3IgKGxldCBtb2R1bGVJZCBvZiBtb2R1bGVzKSB7XG5cdFx0aWYgKHZpc2l0ZWQuaGFzKG1vZHVsZUlkKSkgY29udGludWU7XG5cdFx0dmlzaXRlZC5hZGQobW9kdWxlSWQpO1xuXHRcdGxldCBtb2R1bGUgPSBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeUlkKG1vZHVsZUlkKTtcblx0XHRpZiAobW9kdWxlKSB7XG5cdFx0XHRpZiAoIW1vZHVsZS5pbXBvcnRlcnMuc2l6ZSkge1xuXHRcdFx0XHRlbnRyeXBvaW50cy5hZGQobW9kdWxlLnVybCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgbW9kdWxlLmltcG9ydGVycykgZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgW2ltcG9ydGVyXSwgdmlzaXRlZCwgZW50cnlwb2ludHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlwb2ludHM7XG59XG5mdW5jdGlvbiBmaW5kQWxsRW50cnlwb2ludHMocnVubmVyLCBlbnRyeXBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHtcblx0Zm9yIChsZXQgbW9kIG9mIHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmlkVG9Nb2R1bGVNYXAudmFsdWVzKCkpIG1vZC5pbXBvcnRlcnMuc2l6ZSB8fCBlbnRyeXBvaW50cy5hZGQobW9kLnVybCk7XG5cdHJldHVybiBlbnRyeXBvaW50cztcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbnRlcmNlcHRvci50c1xuY29uc3Qgc291cmNlTWFwQ2FjaGUgPSB7fSwgZmlsZUNvbnRlbnRzQ2FjaGUgPSB7fSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgY3JlYXRlRXhlY0hhbmRsZXJzID0gKGhhbmRsZXJzKSA9PiAoKC4uLmFyZ3MpID0+IHtcblx0Zm9yIChsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdGxldCByZXN1bHQgPSBoYW5kbGVyKC4uLmFyZ3MpO1xuXHRcdGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59KSwgcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzID0gY3JlYXRlRXhlY0hhbmRsZXJzKHJldHJpZXZlRmlsZUhhbmRsZXJzKSwgcmV0cmlldmVTb3VyY2VNYXBGcm9tSGFuZGxlcnMgPSBjcmVhdGVFeGVjSGFuZGxlcnMocmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycyk7XG5sZXQgb3ZlcnJpZGRlbiA9ICExO1xuY29uc3Qgb3JpZ2luYWxQcmVwYXJlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG5mdW5jdGlvbiByZXNldEludGVyY2VwdG9yKHJ1bm5lciwgb3B0aW9ucykge1xuXHRldmFsdWF0ZWRNb2R1bGVzQ2FjaGUuZGVsZXRlKHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzKSwgb3B0aW9ucy5yZXRyaWV2ZUZpbGUgJiYgcmV0cmlldmVGaWxlSGFuZGxlcnMuZGVsZXRlKG9wdGlvbnMucmV0cmlldmVGaWxlKSwgb3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCAmJiByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzLmRlbGV0ZShvcHRpb25zLnJldHJpZXZlU291cmNlTWFwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLnNpemUgPT09IDAgJiYgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZ2luYWxQcmVwYXJlLCBvdmVycmlkZGVuID0gITEpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0U3RhY2tUcmFjZShydW5uZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gb3ZlcnJpZGRlbiB8fD0gKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcGFyZVN0YWNrVHJhY2UsICEwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLmFkZChydW5uZXIuZXZhbHVhdGVkTW9kdWxlcyksIG9wdGlvbnMucmV0cmlldmVGaWxlICYmIHJldHJpZXZlRmlsZUhhbmRsZXJzLmFkZChvcHRpb25zLnJldHJpZXZlRmlsZSksIG9wdGlvbnMucmV0cmlldmVTb3VyY2VNYXAgJiYgcmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycy5hZGQob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCksICgpID0+IHJlc2V0SW50ZXJjZXB0b3IocnVubmVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN1cHBvcnRSZWxhdGl2ZVVSTChmaWxlLCB1cmwpIHtcblx0aWYgKCFmaWxlKSByZXR1cm4gdXJsO1xuXHRsZXQgZGlyID0gcG9zaXhEaXJuYW1lKHNsYXNoKGZpbGUpKSwgbWF0Y2ggPSAvXlxcdys6XFwvXFwvW14vXSovLmV4ZWMoZGlyKSwgcHJvdG9jb2wgPSBtYXRjaCA/IG1hdGNoWzBdIDogXCJcIiwgc3RhcnRQYXRoID0gZGlyLnNsaWNlKHByb3RvY29sLmxlbmd0aCk7XG5cdHJldHVybiBwcm90b2NvbCAmJiAvXlxcL1xcdzovLnRlc3Qoc3RhcnRQYXRoKSA/IChwcm90b2NvbCArPSBcIi9cIiwgcHJvdG9jb2wgKyBzbGFzaChwb3NpeFJlc29sdmUoc3RhcnRQYXRoLCB1cmwpKSkgOiBwcm90b2NvbCArIHBvc2l4UmVzb2x2ZShzdGFydFBhdGgsIHVybCk7XG59XG5mdW5jdGlvbiBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pIHtcblx0Zm9yIChsZXQgbW9kdWxlR3JhcGggb2YgZXZhbHVhdGVkTW9kdWxlc0NhY2hlKSB7XG5cdFx0bGV0IHNvdXJjZU1hcCA9IG1vZHVsZUdyYXBoLmdldE1vZHVsZVNvdXJjZU1hcEJ5SWQocG9zaXRpb24uc291cmNlKTtcblx0XHRpZiAoc291cmNlTWFwKSByZXR1cm4ge1xuXHRcdFx0dXJsOiBwb3NpdGlvbi5zb3VyY2UsXG5cdFx0XHRtYXA6IHNvdXJjZU1hcCxcblx0XHRcdHZpdGU6ICEwXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlRmlsZShwYXRoKSB7XG5cdGlmIChwYXRoIGluIGZpbGVDb250ZW50c0NhY2hlKSByZXR1cm4gZmlsZUNvbnRlbnRzQ2FjaGVbcGF0aF07XG5cdGxldCBjb250ZW50ID0gcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzKHBhdGgpO1xuXHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IChmaWxlQ29udGVudHNDYWNoZVtwYXRoXSA9IGNvbnRlbnQsIGNvbnRlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSkge1xuXHRsZXQgZmlsZURhdGEgPSByZXRyaWV2ZUZpbGUoc291cmNlKTtcblx0aWYgKCFmaWxlRGF0YSkgcmV0dXJuIG51bGw7XG5cdGxldCByZSA9IC9cXC9cXC9bQCNdXFxzKnNvdXJjZU1hcHBpbmdVUkw9KFteXFxzJ1wiXSspXFxzKiR8XFwvXFwqW0AjXVxccypzb3VyY2VNYXBwaW5nVVJMPVteXFxzKidcIl0rXFxzKlxcKlxcL1xccyokL2dtLCBsYXN0TWF0Y2gsIG1hdGNoO1xuXHRmb3IgKDsgbWF0Y2ggPSByZS5leGVjKGZpbGVEYXRhKTspIGxhc3RNYXRjaCA9IG1hdGNoO1xuXHRyZXR1cm4gbGFzdE1hdGNoID8gbGFzdE1hdGNoWzFdIDogbnVsbDtcbn1cbmNvbnN0IHJlU291cmNlTWFwID0gL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvblteLF0rYmFzZTY0LC87XG5mdW5jdGlvbiByZXRyaWV2ZVNvdXJjZU1hcChzb3VyY2UpIHtcblx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwRnJvbUhhbmRsZXJzKHNvdXJjZSk7XG5cdGlmICh1cmxBbmRNYXApIHJldHVybiB1cmxBbmRNYXA7XG5cdGxldCBzb3VyY2VNYXBwaW5nVVJMID0gcmV0cmlldmVTb3VyY2VNYXBVUkwoc291cmNlKTtcblx0aWYgKCFzb3VyY2VNYXBwaW5nVVJMKSByZXR1cm4gbnVsbDtcblx0bGV0IHNvdXJjZU1hcERhdGE7XG5cdGlmIChyZVNvdXJjZU1hcC50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG5cdFx0bGV0IHJhd0RhdGEgPSBzb3VyY2VNYXBwaW5nVVJMLnNsaWNlKHNvdXJjZU1hcHBpbmdVUkwuaW5kZXhPZihcIixcIikgKyAxKTtcblx0XHRzb3VyY2VNYXBEYXRhID0gQnVmZmVyLmZyb20ocmF3RGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKSwgc291cmNlTWFwcGluZ1VSTCA9IHNvdXJjZTtcblx0fSBlbHNlIHNvdXJjZU1hcHBpbmdVUkwgPSBzdXBwb3J0UmVsYXRpdmVVUkwoc291cmNlLCBzb3VyY2VNYXBwaW5nVVJMKSwgc291cmNlTWFwRGF0YSA9IHJldHJpZXZlRmlsZShzb3VyY2VNYXBwaW5nVVJMKTtcblx0cmV0dXJuIHNvdXJjZU1hcERhdGEgPyB7XG5cdFx0dXJsOiBzb3VyY2VNYXBwaW5nVVJMLFxuXHRcdG1hcDogc291cmNlTWFwRGF0YVxuXHR9IDogbnVsbDtcbn1cbmZ1bmN0aW9uIG1hcFNvdXJjZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG5cdGlmICghcG9zaXRpb24uc291cmNlKSByZXR1cm4gcG9zaXRpb247XG5cdGxldCBzb3VyY2VNYXAgPSBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pO1xuXHRpZiAoc291cmNlTWFwIHx8PSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdLCAhc291cmNlTWFwKSB7XG5cdFx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwKHBvc2l0aW9uLnNvdXJjZSk7XG5cdFx0aWYgKHVybEFuZE1hcCAmJiB1cmxBbmRNYXAubWFwKSB7XG5cdFx0XHRsZXQgdXJsID0gdXJsQW5kTWFwLnVybDtcblx0XHRcdHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHRcdHVybCxcblx0XHRcdFx0bWFwOiBuZXcgRGVjb2RlZE1hcCh0eXBlb2YgdXJsQW5kTWFwLm1hcCA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh1cmxBbmRNYXAubWFwKSA6IHVybEFuZE1hcC5tYXAsIHVybClcblx0XHRcdH07XG5cdFx0XHRsZXQgY29udGVudHMgPSBzb3VyY2VNYXAubWFwPy5tYXAuc291cmNlc0NvbnRlbnQ7XG5cdFx0XHRzb3VyY2VNYXAubWFwICYmIGNvbnRlbnRzICYmIHNvdXJjZU1hcC5tYXAucmVzb2x2ZWRTb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaSkgPT4ge1xuXHRcdFx0XHRsZXQgY29udGVudCA9IGNvbnRlbnRzW2ldO1xuXHRcdFx0XHRpZiAoY29udGVudCAmJiBzb3VyY2UgJiYgdXJsKSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRlbnRVcmwgPSBzdXBwb3J0UmVsYXRpdmVVUkwodXJsLCBzb3VyY2UpO1xuXHRcdFx0XHRcdGZpbGVDb250ZW50c0NhY2hlW2NvbnRlbnRVcmxdID0gY29udGVudDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRtYXA6IG51bGxcblx0XHR9O1xuXHR9XG5cdGlmIChzb3VyY2VNYXAubWFwICYmIHNvdXJjZU1hcC51cmwpIHtcblx0XHRsZXQgb3JpZ2luYWxQb3NpdGlvbiA9IGdldE9yaWdpbmFsUG9zaXRpb24oc291cmNlTWFwLm1hcCwgcG9zaXRpb24pO1xuXHRcdGlmIChvcmlnaW5hbFBvc2l0aW9uICYmIG9yaWdpbmFsUG9zaXRpb24uc291cmNlICE9IG51bGwpIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSA9IHN1cHBvcnRSZWxhdGl2ZVVSTChzb3VyY2VNYXAudXJsLCBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSksIHNvdXJjZU1hcC52aXRlICYmIChvcmlnaW5hbFBvc2l0aW9uLl92aXRlID0gITApLCBvcmlnaW5hbFBvc2l0aW9uO1xuXHR9XG5cdHJldHVybiBwb3NpdGlvbjtcbn1cbmZ1bmN0aW9uIG1hcEV2YWxPcmlnaW4ob3JpZ2luKSB7XG5cdGxldCBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQvLmV4ZWMob3JpZ2luKTtcblx0aWYgKG1hdGNoKSB7XG5cdFx0bGV0IHBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb24oe1xuXHRcdFx0bmFtZTogbnVsbCxcblx0XHRcdHNvdXJjZTogbWF0Y2hbMl0sXG5cdFx0XHRsaW5lOiArbWF0Y2hbM10sXG5cdFx0XHRjb2x1bW46IG1hdGNoWzRdIC0gMVxuXHRcdH0pO1xuXHRcdHJldHVybiBgZXZhbCBhdCAke21hdGNoWzFdfSAoJHtwb3NpdGlvbi5zb3VyY2V9OiR7cG9zaXRpb24ubGluZX06JHtwb3NpdGlvbi5jb2x1bW4gKyAxfSlgO1xuXHR9XG5cdHJldHVybiBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKylcXCkkLy5leGVjKG9yaWdpbiksIG1hdGNoID8gYGV2YWwgYXQgJHttYXRjaFsxXX0gKCR7bWFwRXZhbE9yaWdpbihtYXRjaFsyXSl9KWAgOiBvcmlnaW47XG59XG5mdW5jdGlvbiBDYWxsU2l0ZVRvU3RyaW5nKCkge1xuXHRsZXQgZmlsZU5hbWUsIGZpbGVMb2NhdGlvbiA9IFwiXCI7XG5cdGlmICh0aGlzLmlzTmF0aXZlKCkpIGZpbGVMb2NhdGlvbiA9IFwibmF0aXZlXCI7XG5cdGVsc2Uge1xuXHRcdGZpbGVOYW1lID0gdGhpcy5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwoKSwgIWZpbGVOYW1lICYmIHRoaXMuaXNFdmFsKCkgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0RXZhbE9yaWdpbigpLCBmaWxlTG9jYXRpb24gKz0gXCIsIFwiKSwgZmlsZU5hbWUgPyBmaWxlTG9jYXRpb24gKz0gZmlsZU5hbWUgOiBmaWxlTG9jYXRpb24gKz0gXCI8YW5vbnltb3VzPlwiO1xuXHRcdGxldCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKCk7XG5cdFx0aWYgKGxpbmVOdW1iZXIgIT0gbnVsbCkge1xuXHRcdFx0ZmlsZUxvY2F0aW9uICs9IGA6JHtsaW5lTnVtYmVyfWA7XG5cdFx0XHRsZXQgY29sdW1uTnVtYmVyID0gdGhpcy5nZXRDb2x1bW5OdW1iZXIoKTtcblx0XHRcdGNvbHVtbk51bWJlciAmJiAoZmlsZUxvY2F0aW9uICs9IGA6JHtjb2x1bW5OdW1iZXJ9YCk7XG5cdFx0fVxuXHR9XG5cdGxldCBsaW5lID0gXCJcIiwgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSwgYWRkU3VmZml4ID0gITAsIGlzQ29uc3RydWN0b3IgPSB0aGlzLmlzQ29uc3RydWN0b3IoKTtcblx0aWYgKHRoaXMuaXNUb3BsZXZlbCgpIHx8IGlzQ29uc3RydWN0b3IpIGlzQ29uc3RydWN0b3IgPyBsaW5lICs9IGBuZXcgJHtmdW5jdGlvbk5hbWUgfHwgXCI8YW5vbnltb3VzPlwifWAgOiBmdW5jdGlvbk5hbWUgPyBsaW5lICs9IGZ1bmN0aW9uTmFtZSA6IChsaW5lICs9IGZpbGVMb2NhdGlvbiwgYWRkU3VmZml4ID0gITEpO1xuXHRlbHNlIHtcblx0XHRsZXQgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG5cdFx0dHlwZU5hbWUgPT09IFwiW29iamVjdCBPYmplY3RdXCIgJiYgKHR5cGVOYW1lID0gXCJudWxsXCIpO1xuXHRcdGxldCBtZXRob2ROYW1lID0gdGhpcy5nZXRNZXRob2ROYW1lKCk7XG5cdFx0ZnVuY3Rpb25OYW1lID8gKHR5cGVOYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKHR5cGVOYW1lKSAhPT0gMCAmJiAobGluZSArPSBgJHt0eXBlTmFtZX0uYCksIGxpbmUgKz0gZnVuY3Rpb25OYW1lLCBtZXRob2ROYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKGAuJHttZXRob2ROYW1lfWApICE9PSBmdW5jdGlvbk5hbWUubGVuZ3RoIC0gbWV0aG9kTmFtZS5sZW5ndGggLSAxICYmIChsaW5lICs9IGAgW2FzICR7bWV0aG9kTmFtZX1dYCkpIDogbGluZSArPSBgJHt0eXBlTmFtZX0uJHttZXRob2ROYW1lIHx8IFwiPGFub255bW91cz5cIn1gO1xuXHR9XG5cdHJldHVybiBhZGRTdWZmaXggJiYgKGxpbmUgKz0gYCAoJHtmaWxlTG9jYXRpb259KWApLCBsaW5lO1xufVxuZnVuY3Rpb24gY2xvbmVDYWxsU2l0ZShmcmFtZSkge1xuXHRsZXQgb2JqZWN0ID0ge307XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJhbWUpKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0bGV0IGtleSA9IG5hbWU7XG5cdFx0b2JqZWN0W2tleV0gPSAvXig/OmlzfGdldCkvLnRlc3QobmFtZSkgPyBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmcmFtZVtrZXldLmNhbGwoZnJhbWUpO1xuXHRcdH0gOiBmcmFtZVtrZXldO1xuXHR9KSwgb2JqZWN0LnRvU3RyaW5nID0gQ2FsbFNpdGVUb1N0cmluZywgb2JqZWN0O1xufVxuZnVuY3Rpb24gd3JhcENhbGxTaXRlKGZyYW1lLCBzdGF0ZSkge1xuXHRpZiAoc3RhdGUgPT09IHZvaWQgMCAmJiAoc3RhdGUgPSB7XG5cdFx0bmV4dFBvc2l0aW9uOiBudWxsLFxuXHRcdGN1clBvc2l0aW9uOiBudWxsXG5cdH0pLCBmcmFtZS5pc05hdGl2ZSgpKSByZXR1cm4gc3RhdGUuY3VyUG9zaXRpb24gPSBudWxsLCBmcmFtZTtcblx0bGV0IHNvdXJjZSA9IGZyYW1lLmdldEZpbGVOYW1lKCkgfHwgZnJhbWUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRsZXQgcG9zaXRpb24gPSBtYXBTb3VyY2VQb3NpdGlvbih7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0c291cmNlLFxuXHRcdFx0bGluZTogZnJhbWUuZ2V0TGluZU51bWJlcigpID8/IDAsXG5cdFx0XHRjb2x1bW46IChmcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSA/PyAxKSAtIDFcblx0XHR9KTtcblx0XHRzdGF0ZS5jdXJQb3NpdGlvbiA9IHBvc2l0aW9uLCBmcmFtZSA9IGNsb25lQ2FsbFNpdGUoZnJhbWUpO1xuXHRcdGxldCBvcmlnaW5hbEZ1bmN0aW9uTmFtZSA9IGZyYW1lLmdldEZ1bmN0aW9uTmFtZTtcblx0XHRyZXR1cm4gZnJhbWUuZ2V0RnVuY3Rpb25OYW1lID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRsZXQgbmFtZSA9IHN0YXRlLm5leHRQb3NpdGlvbiA9PSBudWxsID8gb3JpZ2luYWxGdW5jdGlvbk5hbWUoKSA6IHN0YXRlLm5leHRQb3NpdGlvbi5uYW1lIHx8IG9yaWdpbmFsRnVuY3Rpb25OYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJldmFsXCIgJiYgXCJfdml0ZVwiIGluIHBvc2l0aW9uID8gbnVsbCA6IG5hbWU7XG5cdFx0fSwgZnJhbWUuZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5zb3VyY2UgPz8gbnVsbDtcblx0XHR9LCBmcmFtZS5nZXRMaW5lTnVtYmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcG9zaXRpb24ubGluZTtcblx0XHR9LCBmcmFtZS5nZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5jb2x1bW4gKyAxO1xuXHRcdH0sIGZyYW1lLmdldFNjcmlwdE5hbWVPclNvdXJjZVVSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHBvc2l0aW9uLnNvdXJjZTtcblx0XHR9LCBmcmFtZTtcblx0fVxuXHRsZXQgb3JpZ2luID0gZnJhbWUuaXNFdmFsKCkgJiYgZnJhbWUuZ2V0RXZhbE9yaWdpbigpO1xuXHRyZXR1cm4gb3JpZ2luID8gKG9yaWdpbiA9IG1hcEV2YWxPcmlnaW4ob3JpZ2luKSwgZnJhbWUgPSBjbG9uZUNhbGxTaXRlKGZyYW1lKSwgZnJhbWUuZ2V0RXZhbE9yaWdpbiA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBvcmlnaW4gfHwgdm9pZCAwO1xuXHR9LCBmcmFtZSkgOiBmcmFtZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVTdGFja1RyYWNlKGVycm9yLCBzdGFjaykge1xuXHRsZXQgZXJyb3JTdHJpbmcgPSBgJHtlcnJvci5uYW1lIHx8IFwiRXJyb3JcIn06ICR7ZXJyb3IubWVzc2FnZSB8fCBcIlwifWAsIHN0YXRlID0ge1xuXHRcdG5leHRQb3NpdGlvbjogbnVsbCxcblx0XHRjdXJQb3NpdGlvbjogbnVsbFxuXHR9LCBwcm9jZXNzZWRTdGFjayA9IFtdO1xuXHRmb3IgKGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHByb2Nlc3NlZFN0YWNrLnB1c2goYFxcbiAgICBhdCAke3dyYXBDYWxsU2l0ZShzdGFja1tpXSwgc3RhdGUpfWApLCBzdGF0ZS5uZXh0UG9zaXRpb24gPSBzdGF0ZS5jdXJQb3NpdGlvbjtcblx0cmV0dXJuIHN0YXRlLmN1clBvc2l0aW9uID0gc3RhdGUubmV4dFBvc2l0aW9uID0gbnVsbCwgZXJyb3JTdHJpbmcgKyBwcm9jZXNzZWRTdGFjay5yZXZlcnNlKCkuam9pbihcIlwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbmRleC50c1xuZnVuY3Rpb24gZW5hYmxlU291cmNlTWFwU3VwcG9ydChydW5uZXIpIHtcblx0aWYgKHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yID09PSBcIm5vZGVcIikge1xuXHRcdGlmICh0eXBlb2YgcHJvY2VzcyA+IFwidVwiKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIFxcXCJzb3VyY2VtYXBJbnRlcmNlcHRvcjogJ25vZGUnXFxcIiBiZWNhdXNlIGdsb2JhbCBcXFwicHJvY2Vzc1xcXCIgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZS5cIik7XG5cdFx0aWYgKHR5cGVvZiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkICE9IFwiZnVuY3Rpb25cIikgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBcXFwic291cmNlbWFwSW50ZXJjZXB0b3I6ICdub2RlJ1xcXCIgYmVjYXVzZSBcXFwicHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZFxcXCIgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIHVzZSBOb2RlID49IDE2LjYuMC5cIik7XG5cdFx0bGV0IGlzRW5hYmxlZEFscmVhZHkgPSBwcm9jZXNzLnNvdXJjZU1hcHNFbmFibGVkID8/ICExO1xuXHRcdHJldHVybiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkKCEwKSwgKCkgPT4gIWlzRW5hYmxlZEFscmVhZHkgJiYgcHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZCghMSk7XG5cdH1cblx0cmV0dXJuIGludGVyY2VwdFN0YWNrVHJhY2UocnVubmVyLCB0eXBlb2YgcnVubmVyLm9wdGlvbnMuc291cmNlbWFwSW50ZXJjZXB0b3IgPT0gXCJvYmplY3RcIiA/IHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yIDogdm9pZCAwKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2VzbUV2YWx1YXRvci50c1xudmFyIEVTTW9kdWxlc0V2YWx1YXRvciA9IGNsYXNzIHtcblx0c3RhcnRPZmZzZXQgPSBnZXRBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50KCk7XG5cdGFzeW5jIHJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSkge1xuXHRcdGF3YWl0IG5ldyBBc3luY0Z1bmN0aW9uKHNzck1vZHVsZUV4cG9ydHNLZXksIHNzckltcG9ydE1ldGFLZXksIHNzckltcG9ydEtleSwgc3NyRHluYW1pY0ltcG9ydEtleSwgc3NyRXhwb3J0QWxsS2V5LCBzc3JFeHBvcnROYW1lS2V5LCBcIlxcXCJ1c2Ugc3RyaWN0XFxcIjtcIiArIGNvZGUpKGNvbnRleHRbc3NyTW9kdWxlRXhwb3J0c0tleV0sIGNvbnRleHRbc3NySW1wb3J0TWV0YUtleV0sIGNvbnRleHRbc3NySW1wb3J0S2V5XSwgY29udGV4dFtzc3JEeW5hbWljSW1wb3J0S2V5XSwgY29udGV4dFtzc3JFeHBvcnRBbGxLZXldLCBjb250ZXh0W3NzckV4cG9ydE5hbWVLZXldKSwgT2JqZWN0LnNlYWwoY29udGV4dFtzc3JNb2R1bGVFeHBvcnRzS2V5XSk7XG5cdH1cblx0cnVuRXh0ZXJuYWxNb2R1bGUoZmlsZXBhdGgpIHtcblx0XHRyZXR1cm4gaW1wb3J0KGZpbGVwYXRoKTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2ltcG9ydE1ldGFSZXNvbHZlci50c1xuY29uc3QgY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UgPSBcInZpdGUtbW9kdWxlLXJ1bm5lcjppbXBvcnQtbWV0YS1yZXNvbHZlL3YxL1wiLCBjdXN0b21pemF0aW9uSG9va3NNb2R1bGUgPSBgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfSkpIHtcbiAgICBjb25zdCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfS5sZW5ndGgpXG4gICAgY29uc3QgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKVxuICAgIHNwZWNpZmllciA9IHBhcnNlZFNwZWNpZmllclxuICAgIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXJcbiAgfVxuICByZXR1cm4gbmV4dFJlc29sdmUoc3BlY2lmaWVyLCBjb250ZXh0KVxufVxuXG5gO1xuZnVuY3Rpb24gY3VzdG9taXphdGlvbkhvb2tSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcblx0aWYgKHNwZWNpZmllci5zdGFydHNXaXRoKGN1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlKSkge1xuXHRcdGxldCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKDQyKSwgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRzcGVjaWZpZXIgPSBwYXJzZWRTcGVjaWZpZXIsIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXI7XG5cdH1cblx0cmV0dXJuIG5leHRSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCk7XG59XG5sZXQgaXNIb29rUmVnaXN0ZXJlZCA9ICExO1xuZnVuY3Rpb24gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCkge1xuXHRpZiAoaXNIb29rUmVnaXN0ZXJlZCkgcmV0dXJuIGltcG9ydE1ldGFSZXNvbHZlV2l0aEN1c3RvbUhvb2s7XG5cdGxldCBtb2R1bGU7XG5cdHRyeSB7XG5cdFx0bW9kdWxlID0gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiA/IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6bW9kdWxlXCIpLk1vZHVsZSA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChtb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLnJlZ2lzdGVySG9va3MpIHJldHVybiBtb2R1bGUucmVnaXN0ZXJIb29rcyh7IHJlc29sdmU6IGN1c3RvbWl6YXRpb25Ib29rUmVzb2x2ZSB9KSwgaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdGlmIChtb2R1bGUucmVnaXN0ZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCBob29rTW9kdWxlQ29udGVudCA9IGBkYXRhOnRleHQvamF2YXNjcmlwdCwke2VuY29kZVVSSShjdXN0b21pemF0aW9uSG9va3NNb2R1bGUpfWA7XG5cdFx0XHRcdG1vZHVsZS5yZWdpc3Rlcihob29rTW9kdWxlQ29udGVudCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChcImNvZGVcIiBpbiBlICYmIGUuY29kZSA9PT0gXCJFUlJfTkVUV09SS19JTVBPUlRfRElTQUxMT1dFRFwiKSByZXR1cm47XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gaW1wb3J0TWV0YVJlc29sdmVXaXRoQ3VzdG9tSG9vayhzcGVjaWZpZXIsIGltcG9ydGVyKSB7XG5cdHJldHVybiBpbXBvcnQubWV0YS5yZXNvbHZlKGAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfSR7SlNPTi5zdHJpbmdpZnkoW3NwZWNpZmllciwgaW1wb3J0ZXJdKX1gKTtcbn1cbmAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfWA7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbW9kdWxlLXJ1bm5lci9jcmVhdGVJbXBvcnRNZXRhLnRzXG5jb25zdCBlbnZQcm94eSA9IG5ldyBQcm94eSh7fSwgeyBnZXQoXywgcCkge1xuXHR0aHJvdyBFcnJvcihgW21vZHVsZSBydW5uZXJdIER5bmFtaWMgYWNjZXNzIG9mIFwiaW1wb3J0Lm1ldGEuZW52XCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlLCB1c2UgXCJpbXBvcnQubWV0YS5lbnYuJHtTdHJpbmcocCl9XCIgaW5zdGVhZC5gKTtcbn0gfSk7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSB7XG5cdGxldCBocmVmID0gcG9zaXhQYXRoVG9GaWxlSHJlZihtb2R1bGVQYXRoKSwgZmlsZW5hbWUgPSBtb2R1bGVQYXRoLCBkaXJuYW1lID0gcG9zaXhEaXJuYW1lKG1vZHVsZVBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGZpbGVuYW1lOiBpc1dpbmRvd3MgPyB0b1dpbmRvd3NQYXRoKGZpbGVuYW1lKSA6IGZpbGVuYW1lLFxuXHRcdGRpcm5hbWU6IGlzV2luZG93cyA/IHRvV2luZG93c1BhdGgoZGlybmFtZSkgOiBkaXJuYW1lLFxuXHRcdHVybDogaHJlZixcblx0XHRlbnY6IGVudlByb3h5LFxuXHRcdHJlc29sdmUoX2lkLCBfcGFyZW50KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBcXFwiaW1wb3J0Lm1ldGEucmVzb2x2ZVxcXCIgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fSxcblx0XHRnbG9iKCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJbbW9kdWxlIHJ1bm5lcl0gXFxcImltcG9ydC5tZXRhLmdsb2JcXFwiIGlzIHN0YXRpY2FsbHkgcmVwbGFjZWQgZHVyaW5nIGZpbGUgdHJhbnNmb3JtYXRpb24uIE1ha2Ugc3VyZSB0byByZWZlcmVuY2UgaXQgYnkgdGhlIGZ1bGwgbmFtZS5cIik7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4qIENyZWF0ZSBpbXBvcnQubWV0YSBvYmplY3QgZm9yIE5vZGUuanMuXG4qL1xuZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1ldGEobW9kdWxlUGF0aCkge1xuXHRsZXQgZGVmYXVsdE1ldGEgPSBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgaHJlZiA9IGRlZmF1bHRNZXRhLnVybCwgaW1wb3J0TWV0YVJlc29sdmVyID0gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCk7XG5cdHJldHVybiB7XG5cdFx0Li4uZGVmYXVsdE1ldGEsXG5cdFx0bWFpbjogITEsXG5cdFx0cmVzb2x2ZShpZCwgcGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gKGltcG9ydE1ldGFSZXNvbHZlciA/PyBkZWZhdWx0TWV0YS5yZXNvbHZlKShpZCwgcGFyZW50ID8/IGhyZWYpO1xuXHRcdH1cblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3J1bm5lci50c1xudmFyIE1vZHVsZVJ1bm5lciA9IGNsYXNzIHtcblx0ZXZhbHVhdGVkTW9kdWxlcztcblx0aG1yQ2xpZW50O1xuXHR0cmFuc3BvcnQ7XG5cdHJlc2V0U291cmNlTWFwU3VwcG9ydDtcblx0Y29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGlzQnVpbHRpbjtcblx0YnVpbHRpbnNQcm9taXNlO1xuXHRjbG9zZWQgPSAhMTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgZXZhbHVhdG9yID0gbmV3IEVTTW9kdWxlc0V2YWx1YXRvcigpLCBkZWJ1Zykge1xuXHRcdGlmICh0aGlzLm9wdGlvbnMgPSBvcHRpb25zLCB0aGlzLmV2YWx1YXRvciA9IGV2YWx1YXRvciwgdGhpcy5kZWJ1ZyA9IGRlYnVnLCB0aGlzLmV2YWx1YXRlZE1vZHVsZXMgPSBvcHRpb25zLmV2YWx1YXRlZE1vZHVsZXMgPz8gbmV3IEV2YWx1YXRlZE1vZHVsZXMoKSwgdGhpcy50cmFuc3BvcnQgPSBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpLCBvcHRpb25zLmhtciAhPT0gITEpIHtcblx0XHRcdGxldCBvcHRpb25zSG1yID0gb3B0aW9ucy5obXIgPz8gITA7XG5cdFx0XHRpZiAodGhpcy5obXJDbGllbnQgPSBuZXcgSE1SQ2xpZW50KG9wdGlvbnNIbXIgPT09ICEwIHx8IG9wdGlvbnNIbXIubG9nZ2VyID09PSB2b2lkIDAgPyBobXJMb2dnZXIgOiBvcHRpb25zSG1yLmxvZ2dlciA9PT0gITEgPyBzaWxlbnRDb25zb2xlIDogb3B0aW9uc0htci5sb2dnZXIsIHRoaXMudHJhbnNwb3J0LCAoeyBhY2NlcHRlZFBhdGggfSkgPT4gdGhpcy5pbXBvcnQoYWNjZXB0ZWRQYXRoKSksICF0aGlzLnRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcIkhNUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcnVubmVyIHRyYW5zcG9ydCwgYnV0IGBobXJgIG9wdGlvbiB3YXMgc2V0IHRvIHRydWVcIik7XG5cdFx0XHR0aGlzLnRyYW5zcG9ydC5jb25uZWN0KGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIodGhpcykpO1xuXHRcdH0gZWxzZSB0aGlzLnRyYW5zcG9ydC5jb25uZWN0Py4oKTtcblx0XHRvcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yICE9PSAhMSAmJiAodGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQgPSBlbmFibGVTb3VyY2VNYXBTdXBwb3J0KHRoaXMpKTtcblx0fVxuXHQvKipcblx0KiBVUkwgdG8gZXhlY3V0ZS4gQWNjZXB0cyBmaWxlIHBhdGgsIHNlcnZlciBwYXRoIG9yIGlkIHJlbGF0aXZlIHRvIHRoZSByb290LlxuXHQqL1xuXHRhc3luYyBpbXBvcnQodXJsKSB7XG5cdFx0bGV0IGZldGNoZWRNb2R1bGUgPSBhd2FpdCB0aGlzLmNhY2hlZE1vZHVsZSh1cmwpO1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QodXJsLCBmZXRjaGVkTW9kdWxlKTtcblx0fVxuXHQvKipcblx0KiBDbGVhciBhbGwgY2FjaGVzIGluY2x1ZGluZyBITVIgbGlzdGVuZXJzLlxuXHQqL1xuXHRjbGVhckNhY2hlKCkge1xuXHRcdHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpLCB0aGlzLmhtckNsaWVudD8uY2xlYXIoKTtcblx0fVxuXHQvKipcblx0KiBDbGVhcnMgYWxsIGNhY2hlcywgcmVtb3ZlcyBhbGwgSE1SIGxpc3RlbmVycywgYW5kIHJlc2V0cyBzb3VyY2UgbWFwIHN1cHBvcnQuXG5cdCogVGhpcyBtZXRob2QgZG9lc24ndCBzdG9wIHRoZSBITVIgY29ubmVjdGlvbi5cblx0Ki9cblx0YXN5bmMgY2xvc2UoKSB7XG5cdFx0dGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQ/LigpLCB0aGlzLmNsZWFyQ2FjaGUoKSwgdGhpcy5obXJDbGllbnQgPSB2b2lkIDAsIHRoaXMuY2xvc2VkID0gITAsIGF3YWl0IHRoaXMudHJhbnNwb3J0LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgYHRydWVgIGlmIHRoZSBydW50aW1lIGhhcyBiZWVuIGNsb3NlZCBieSBjYWxsaW5nIGBjbG9zZSgpYCBtZXRob2QuXG5cdCovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiB0aGlzLmNsb3NlZDtcblx0fVxuXHRwcm9jZXNzSW1wb3J0KGV4cG9ydHMsIGZldGNoUmVzdWx0LCBtZXRhZGF0YSkge1xuXHRcdGlmICghKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkpIHJldHVybiBleHBvcnRzO1xuXHRcdGxldCB7IHVybCwgdHlwZSB9ID0gZmV0Y2hSZXN1bHQ7XG5cdFx0cmV0dXJuIHR5cGUgIT09IFwibW9kdWxlXCIgJiYgdHlwZSAhPT0gXCJjb21tb25qc1wiIHx8IGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UoZXhwb3J0cywgdXJsLCB0eXBlLCBtZXRhZGF0YSksIGV4cG9ydHM7XG5cdH1cblx0aXNDaXJjdWxhck1vZHVsZShtb2QpIHtcblx0XHRmb3IgKGxldCBpbXBvcnRlZEZpbGUgb2YgbW9kLmltcG9ydHMpIGlmIChtb2QuaW1wb3J0ZXJzLmhhcyhpbXBvcnRlZEZpbGUpKSByZXR1cm4gITA7XG5cdFx0cmV0dXJuICExO1xuXHR9XG5cdGlzQ2lyY3VsYXJJbXBvcnQoaW1wb3J0ZXJzLCBtb2R1bGVVcmwsIHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG5cdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgaW1wb3J0ZXJzKSB7XG5cdFx0XHRpZiAodmlzaXRlZC5oYXMoaW1wb3J0ZXIpKSBjb250aW51ZTtcblx0XHRcdGlmICh2aXNpdGVkLmFkZChpbXBvcnRlciksIGltcG9ydGVyID09PSBtb2R1bGVVcmwpIHJldHVybiAhMDtcblx0XHRcdGxldCBtb2QgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZ2V0TW9kdWxlQnlJZChpbXBvcnRlcik7XG5cdFx0XHRpZiAobW9kICYmIG1vZC5pbXBvcnRlcnMuc2l6ZSAmJiB0aGlzLmlzQ2lyY3VsYXJJbXBvcnQobW9kLmltcG9ydGVycywgbW9kdWxlVXJsLCB2aXNpdGVkKSkgcmV0dXJuICEwO1xuXHRcdH1cblx0XHRyZXR1cm4gITE7XG5cdH1cblx0YXN5bmMgY2FjaGVkUmVxdWVzdCh1cmwsIG1vZCwgY2FsbHN0YWNrID0gW10sIG1ldGFkYXRhKSB7XG5cdFx0bGV0IG1ldGEgPSBtb2QubWV0YSwgbW9kdWxlSWQgPSBtZXRhLmlkLCB7IGltcG9ydGVycyB9ID0gbW9kLCBpbXBvcnRlZSA9IGNhbGxzdGFja1tjYWxsc3RhY2subGVuZ3RoIC0gMV07XG5cdFx0aWYgKGltcG9ydGVlICYmIGltcG9ydGVycy5hZGQoaW1wb3J0ZWUpLCBtb2QuZXZhbHVhdGVkICYmIG1vZC5wcm9taXNlKSByZXR1cm4gdGhpcy5wcm9jZXNzSW1wb3J0KGF3YWl0IG1vZC5wcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0aWYgKChjYWxsc3RhY2suaW5jbHVkZXMobW9kdWxlSWQpIHx8IHRoaXMuaXNDaXJjdWxhck1vZHVsZShtb2QpIHx8IHRoaXMuaXNDaXJjdWxhckltcG9ydChpbXBvcnRlcnMsIG1vZHVsZUlkKSkgJiYgbW9kLmV4cG9ydHMpIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQobW9kLmV4cG9ydHMsIG1ldGEsIG1ldGFkYXRhKTtcblx0XHRsZXQgZGVidWdUaW1lcjtcblx0XHR0aGlzLmRlYnVnICYmIChkZWJ1Z1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRlYnVnKGBbbW9kdWxlIHJ1bm5lcl0gbW9kdWxlICR7bW9kdWxlSWR9IHRha2VzIG92ZXIgMnMgdG8gbG9hZC5cXG4ke2BzdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIG1vZHVsZUlkXS5yZXZlcnNlKCkubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpfWB9YCk7XG5cdFx0fSwgMmUzKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2QucHJvbWlzZSkgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBtb2QucHJvbWlzZSwgbWV0YSwgbWV0YWRhdGEpO1xuXHRcdFx0bGV0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QodXJsLCBtb2QsIGNhbGxzdGFjayk7XG5cdFx0XHRyZXR1cm4gbW9kLnByb21pc2UgPSBwcm9taXNlLCBtb2QuZXZhbHVhdGVkID0gITEsIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBwcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdG1vZC5ldmFsdWF0ZWQgPSAhMCwgZGVidWdUaW1lciAmJiBjbGVhclRpbWVvdXQoZGVidWdUaW1lcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNhY2hlZE1vZHVsZSh1cmwsIGltcG9ydGVyKSB7XG5cdFx0bGV0IGNhY2hlZCA9IHRoaXMuY29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcy5nZXQodXJsKTtcblx0XHRpZiAoY2FjaGVkKSB0aGlzLmRlYnVnPy4oXCJbbW9kdWxlIHJ1bm5lcl0gdXNpbmcgY2FjaGVkIG1vZHVsZSBpbmZvIGZvclwiLCB1cmwpO1xuXHRcdGVsc2Uge1xuXHRcdFx0bGV0IGNhY2hlZE1vZHVsZSA9IHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeVVybCh1cmwpO1xuXHRcdFx0Y2FjaGVkID0gdGhpcy5nZXRNb2R1bGVJbmZvcm1hdGlvbih1cmwsIGltcG9ydGVyLCBjYWNoZWRNb2R1bGUpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmN1cnJlbnRNb2R1bGVOb2RlUHJvbWlzZXMuZGVsZXRlKHVybCk7XG5cdFx0XHR9KSwgdGhpcy5jb25jdXJyZW50TW9kdWxlTm9kZVByb21pc2VzLnNldCh1cmwsIGNhY2hlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0ZW5zdXJlQnVpbHRpbnMoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnVpbHRpbikgcmV0dXJuIHRoaXMuYnVpbHRpbnNQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nIGJ1aWx0aW5zIGZyb20gc2VydmVyXCIpO1xuXHRcdFx0XHRsZXQgYnVpbHRpbnMgPSAoYXdhaXQgdGhpcy50cmFuc3BvcnQuaW52b2tlKFwiZ2V0QnVpbHRpbnNcIiwgW10pKS5tYXAoKGJ1aWx0aW4pID0+IHR5cGVvZiBidWlsdGluID09IFwib2JqZWN0XCIgJiYgYnVpbHRpbiAmJiBcInR5cGVcIiBpbiBidWlsdGluID8gYnVpbHRpbi50eXBlID09PSBcInN0cmluZ1wiID8gYnVpbHRpbi52YWx1ZSA6IG5ldyBSZWdFeHAoYnVpbHRpbi5zb3VyY2UsIGJ1aWx0aW4uZmxhZ3MpIDogYnVpbHRpbik7XG5cdFx0XHRcdHRoaXMuaXNCdWlsdGluID0gY3JlYXRlSXNCdWlsdGluKGJ1aWx0aW5zKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGJ1aWx0aW5zIGxvYWRlZDpcIiwgYnVpbHRpbnMpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5idWlsdGluc1Byb21pc2UgPSB2b2lkIDA7XG5cdFx0XHR9XG5cdFx0fSkoKSwgdGhpcy5idWlsdGluc1Byb21pc2U7XG5cdH1cblx0YXN5bmMgZ2V0TW9kdWxlSW5mb3JtYXRpb24odXJsLCBpbXBvcnRlciwgY2FjaGVkTW9kdWxlKSB7XG5cdFx0aWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBFcnJvcihcIlZpdGUgbW9kdWxlIHJ1bm5lciBoYXMgYmVlbiBjbG9zZWQuXCIpO1xuXHRcdGF3YWl0IHRoaXMuZW5zdXJlQnVpbHRpbnMoKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nXCIsIHVybCk7XG5cdFx0bGV0IGlzQ2FjaGVkID0gISEodHlwZW9mIGNhY2hlZE1vZHVsZSA9PSBcIm9iamVjdFwiICYmIGNhY2hlZE1vZHVsZS5tZXRhKSwgZmV0Y2hlZE1vZHVsZSA9IHVybC5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHwgdGhpcy5pc0J1aWx0aW4/Lih1cmwpID8ge1xuXHRcdFx0ZXh0ZXJuYWxpemU6IHVybCxcblx0XHRcdHR5cGU6IFwiYnVpbHRpblwiXG5cdFx0fSA6IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmludm9rZShcImZldGNoTW9kdWxlXCIsIFtcblx0XHRcdHVybCxcblx0XHRcdGltcG9ydGVyLFxuXHRcdFx0e1xuXHRcdFx0XHRjYWNoZWQ6IGlzQ2FjaGVkLFxuXHRcdFx0XHRzdGFydE9mZnNldDogdGhpcy5ldmFsdWF0b3Iuc3RhcnRPZmZzZXRcblx0XHRcdH1cblx0XHRdKTtcblx0XHRpZiAoXCJjYWNoZVwiIGluIGZldGNoZWRNb2R1bGUpIHtcblx0XHRcdGlmICghY2FjaGVkTW9kdWxlIHx8ICFjYWNoZWRNb2R1bGUubWV0YSkgdGhyb3cgRXJyb3IoYE1vZHVsZSBcIiR7dXJsfVwiIHdhcyBtaXN0YWtlbmx5IGludmFsaWRhdGVkIGR1cmluZyBmZXRjaCBwaGFzZS5gKTtcblx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGU7XG5cdFx0fVxuXHRcdGxldCBtb2R1bGVJZCA9IFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaGVkTW9kdWxlID8gZmV0Y2hlZE1vZHVsZS5leHRlcm5hbGl6ZSA6IGZldGNoZWRNb2R1bGUuaWQsIG1vZHVsZVVybCA9IFwidXJsXCIgaW4gZmV0Y2hlZE1vZHVsZSA/IGZldGNoZWRNb2R1bGUudXJsIDogdXJsLCBtb2R1bGUgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZW5zdXJlTW9kdWxlKG1vZHVsZUlkLCBtb2R1bGVVcmwpO1xuXHRcdHJldHVybiBcImludmFsaWRhdGVcIiBpbiBmZXRjaGVkTW9kdWxlICYmIGZldGNoZWRNb2R1bGUuaW52YWxpZGF0ZSAmJiB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuaW52YWxpZGF0ZU1vZHVsZShtb2R1bGUpLCBmZXRjaGVkTW9kdWxlLnVybCA9IG1vZHVsZVVybCwgZmV0Y2hlZE1vZHVsZS5pZCA9IG1vZHVsZUlkLCBtb2R1bGUubWV0YSA9IGZldGNoZWRNb2R1bGUsIG1vZHVsZTtcblx0fVxuXHRhc3luYyBkaXJlY3RSZXF1ZXN0KHVybCwgbW9kLCBfY2FsbHN0YWNrKSB7XG5cdFx0bGV0IGZldGNoUmVzdWx0ID0gbW9kLm1ldGEsIG1vZHVsZUlkID0gZmV0Y2hSZXN1bHQuaWQsIGNhbGxzdGFjayA9IFsuLi5fY2FsbHN0YWNrLCBtb2R1bGVJZF0sIHJlcXVlc3QgPSBhc3luYyAoZGVwLCBtZXRhZGF0YSkgPT4ge1xuXHRcdFx0bGV0IGltcG9ydGVyID0gXCJmaWxlXCIgaW4gZmV0Y2hSZXN1bHQgJiYgZmV0Y2hSZXN1bHQuZmlsZSB8fCBtb2R1bGVJZCwgZGVwTW9kID0gYXdhaXQgdGhpcy5jYWNoZWRNb2R1bGUoZGVwLCBpbXBvcnRlcik7XG5cdFx0XHRyZXR1cm4gZGVwTW9kLmltcG9ydGVycy5hZGQobW9kdWxlSWQpLCBtb2QuaW1wb3J0cy5hZGQoZGVwTW9kLmlkKSwgdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgZGVwTW9kLCBjYWxsc3RhY2ssIG1ldGFkYXRhKTtcblx0XHR9LCBkeW5hbWljUmVxdWVzdCA9IGFzeW5jIChkZXApID0+IChkZXAgPSBTdHJpbmcoZGVwKSwgZGVwWzBdID09PSBcIi5cIiAmJiAoZGVwID0gcG9zaXhSZXNvbHZlKHBvc2l4RGlybmFtZSh1cmwpLCBkZXApKSwgcmVxdWVzdChkZXAsIHsgaXNEeW5hbWljSW1wb3J0OiAhMCB9KSk7XG5cdFx0aWYgKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkge1xuXHRcdFx0bGV0IHsgZXh0ZXJuYWxpemUgfSA9IGZldGNoUmVzdWx0O1xuXHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGV4dGVybmFsaXppbmdcIiwgZXh0ZXJuYWxpemUpO1xuXHRcdFx0bGV0IGV4cG9ydHMgPSBhd2FpdCB0aGlzLmV2YWx1YXRvci5ydW5FeHRlcm5hbE1vZHVsZShleHRlcm5hbGl6ZSk7XG5cdFx0XHRyZXR1cm4gbW9kLmV4cG9ydHMgPSBleHBvcnRzLCBleHBvcnRzO1xuXHRcdH1cblx0XHRsZXQgeyBjb2RlLCBmaWxlIH0gPSBmZXRjaFJlc3VsdDtcblx0XHRpZiAoY29kZSA9PSBudWxsKSB7XG5cdFx0XHRsZXQgaW1wb3J0ZXIgPSBjYWxsc3RhY2tbY2FsbHN0YWNrLmxlbmd0aCAtIDJdO1xuXHRcdFx0dGhyb3cgRXJyb3IoYFttb2R1bGUgcnVubmVyXSBGYWlsZWQgdG8gbG9hZCBcIiR7dXJsfVwiJHtpbXBvcnRlciA/IGAgaW1wb3J0ZWQgZnJvbSAke2ltcG9ydGVyfWAgOiBcIlwifWApO1xuXHRcdH1cblx0XHRsZXQgY3JlYXRlSW1wb3J0TWV0YSA9IHRoaXMub3B0aW9ucy5jcmVhdGVJbXBvcnRNZXRhID8/IGNyZWF0ZURlZmF1bHRJbXBvcnRNZXRhLCBtb2R1bGVQYXRoID0gY2xlYW5VcmwoZmlsZSB8fCBtb2R1bGVJZCksIGhyZWYgPSBwb3NpeFBhdGhUb0ZpbGVIcmVmKG1vZHVsZVBhdGgpLCBtZXRhID0gYXdhaXQgY3JlYXRlSW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdFx0dmFsdWU6IFwiTW9kdWxlXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiAhMSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogITFcblx0XHR9KSwgbW9kLmV4cG9ydHMgPSBleHBvcnRzO1xuXHRcdGxldCBob3RDb250ZXh0O1xuXHRcdHRoaXMuaG1yQ2xpZW50ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRhLCBcImhvdFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaG1yQ2xpZW50KSB0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBITVIgY2xpZW50IHdhcyBjbG9zZWQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGNyZWF0aW5nIGhtciBjb250ZXh0IGZvclwiLCBtb2QudXJsKSwgaG90Q29udGV4dCB8fD0gbmV3IEhNUkNvbnRleHQodGhpcy5obXJDbGllbnQsIG1vZC51cmwpLCBob3RDb250ZXh0O1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGhvdENvbnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRsZXQgY29udGV4dCA9IHtcblx0XHRcdFtzc3JJbXBvcnRLZXldOiByZXF1ZXN0LFxuXHRcdFx0W3NzckR5bmFtaWNJbXBvcnRLZXldOiBkeW5hbWljUmVxdWVzdCxcblx0XHRcdFtzc3JNb2R1bGVFeHBvcnRzS2V5XTogZXhwb3J0cyxcblx0XHRcdFtzc3JFeHBvcnRBbGxLZXldOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcblx0XHRcdFtzc3JFeHBvcnROYW1lS2V5XTogKG5hbWUsIGdldHRlcikgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogZ2V0dGVyXG5cdFx0XHR9KSxcblx0XHRcdFtzc3JJbXBvcnRNZXRhS2V5XTogbWV0YVxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuZGVidWc/LihcIlttb2R1bGUgcnVubmVyXSBleGVjdXRpbmdcIiwgaHJlZiksIGF3YWl0IHRoaXMuZXZhbHVhdG9yLnJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSwgbW9kKSwgZXhwb3J0cztcblx0fVxufTtcbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcblx0aWYgKGV4cG9ydHMgIT09IHNvdXJjZU1vZHVsZSAmJiAhKGlzUHJpbWl0aXZlKHNvdXJjZU1vZHVsZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2VNb2R1bGUpIHx8IHNvdXJjZU1vZHVsZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZU1vZHVsZSkgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIiAmJiAhKGtleSBpbiBleHBvcnRzKSkgdHJ5IHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogKCkgPT4gc291cmNlTW9kdWxlW2tleV1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2gge31cblx0fVxufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBFU01vZHVsZXNFdmFsdWF0b3IsIEV2YWx1YXRlZE1vZHVsZXMsIE1vZHVsZVJ1bm5lciwgY3JlYXRlRGVmYXVsdEltcG9ydE1ldGEsIGNyZWF0ZU5vZGVJbXBvcnRNZXRhLCBjcmVhdGVXZWJTb2NrZXRNb2R1bGVSdW5uZXJUcmFuc3BvcnQsIG5vcm1hbGl6ZU1vZHVsZUlkLCBzc3JEeW5hbWljSW1wb3J0S2V5LCBzc3JFeHBvcnRBbGxLZXksIHNzckV4cG9ydE5hbWVLZXksIHNzckltcG9ydEtleSwgc3NySW1wb3J0TWV0YUtleSwgc3NyTW9kdWxlRXhwb3J0c0tleSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLG9CQUFvQjtBQUN4QixxQkFBcUI7QUFHckIsTUFBTSxZQUFZLE9BQU8sVUFBVSxPQUFPLFFBQVEsYUFBYTs7OztBQUkvRCxTQUFTLFNBQVMsSUFBSTtDQUNyQixPQUFPLEdBQUcsV0FBVyxPQUFPLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsV0FBVyxJQUFJLElBQUk7QUFDeEU7QUFDQSxNQUFNLGlCQUFpQjtBQUN2QixTQUFTLE1BQU0sR0FBRztDQUNqQixPQUFPLEVBQUUsUUFBUSxnQkFBZ0IsR0FBRztBQUNyQztBQUNBLE1BQU0sWUFBWTtBQUNsQixTQUFTLFNBQVMsS0FBSztDQUN0QixPQUFPLElBQUksUUFBUSxXQUFXLEVBQUU7QUFDakM7QUFDQSxTQUFTLFlBQVksT0FBTztDQUMzQixPQUFPLENBQUMsU0FBUyxPQUFPLFNBQVMsWUFBWSxPQUFPLFNBQVM7QUFDOUQ7QUFDQSxNQUFNLGdCQUFnQixpQkFBaUIsQ0FBQyxFQUFFO0FBQzFDLElBQUk7QUFDSixTQUFTLDhDQUE4QztDQUN0RCxJQUFJLDZDQUE2QyxLQUFLLEdBQUc7RUFDeEQsSUFBSSxPQUFPLFlBQVksU0FBUyxJQUFJLGNBQWMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLFNBQVM7RUFDM0UsMkNBQTJDLE9BQU8sTUFBTSxHQUFHLE9BQU8sUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUztDQUN2RztDQUNBLE9BQU87QUFDUjtBQUNBLFNBQVMsdUJBQXVCO0NBQy9CLElBQUksU0FBUztDQUNiLE9BQU87RUFDTixTQUFTLElBQUksU0FBUyxVQUFVLFlBQVk7R0FDM0MsVUFBVSxVQUFVLFNBQVM7RUFDOUIsQ0FBQztFQUNEO0VBQ0E7Q0FDRDtBQUNEO0FBR0EsTUFBTSx5QkFBeUI7QUFDL0IsU0FBUyxxQkFBcUIsUUFBUSxJQUFJO0NBQ3pDLE9BQU8sU0FBUyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLHlCQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQ2pHO0FBQ0EsTUFBTSxrQkFBa0I7QUFBbUQsTUFBQSxtQkFBbUI7QUFDOUYsU0FBUyxNQUFNO0NBQ2QsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPLFFBQVEsT0FBTyxhQUFhLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLEdBQUcsSUFBSTtBQUN2RztBQUNBLE1BQU0sVUFBVSxTQUFTLEdBQUcsWUFBWTtDQUN2QyxhQUFhLFdBQVcsS0FBSyxhQUFhLHFCQUFxQixRQUFRLENBQUM7Q0FDeEUsSUFBSSxlQUFlLElBQUksbUJBQW1CLENBQUM7Q0FDM0MsS0FBSyxJQUFJLFFBQVEsV0FBVyxTQUFTLEdBQUcsU0FBUyxNQUFNLENBQUMsa0JBQWtCLFNBQVM7RUFDbEYsSUFBSSxPQUFPLFNBQVMsSUFBSSxXQUFXLFNBQVMsSUFBSTtFQUNoRCxDQUFDLFFBQVEsS0FBSyxXQUFXLE1BQU0sZUFBZSxHQUFHLEtBQUssR0FBRyxnQkFBZ0IsbUJBQW1CLFdBQVcsSUFBSTtDQUM1RztDQUNBLE9BQU8sZUFBZSxnQkFBZ0IsY0FBYyxDQUFDLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLFdBQVcsWUFBWSxJQUFJLElBQUksaUJBQWlCLGFBQWEsU0FBUyxJQUFJLGVBQWU7QUFDdkw7QUFDQSxTQUFTLGdCQUFnQixNQUFNLGdCQUFnQjtDQUM5QyxJQUFJLE1BQU0sSUFBSSxvQkFBb0IsR0FBRyxZQUFZLElBQUksT0FBTyxHQUFHLE9BQU87Q0FDdEUsS0FBSyxJQUFJLFFBQVEsR0FBRyxTQUFTLEtBQUssUUFBUSxFQUFFLE9BQU87RUFDbEQsSUFBSSxRQUFRLEtBQUssUUFBUSxPQUFPLEtBQUs7T0FDaEMsSUFBSSxTQUFTLEtBQUs7T0FDbEIsT0FBTztFQUNaLElBQUksU0FBUyxLQUFLO0dBQ2pCLElBQUksRUFBRSxjQUFjLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxTQUFTLEdBQUc7SUFDN0QsSUFBSSxJQUFJLFNBQVMsS0FBSyxzQkFBc0IsS0FBSyxJQUFJLElBQUksU0FBUyxPQUFPLE9BQU8sSUFBSSxJQUFJLFNBQVMsT0FBTyxLQUN2RztTQUFJLElBQUksU0FBUyxHQUFHO01BQ25CLElBQUksaUJBQWlCLElBQUksWUFBWSxHQUFHO01BQ3hDLG1CQUFtQixNQUFNLE1BQU0sSUFBSSxvQkFBb0IsTUFBTSxNQUFNLElBQUksTUFBTSxHQUFHLGNBQWMsR0FBRyxvQkFBb0IsSUFBSSxTQUFTLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxZQUFZLE9BQU8sT0FBTztNQUN2TDtLQUNELE9BQU8sSUFBSSxJQUFJLFNBQVMsR0FBRztNQUMxQixNQUFNLElBQUksb0JBQW9CLEdBQUcsWUFBWSxPQUFPLE9BQU87TUFDM0Q7S0FDRDs7SUFFRCxtQkFBbUIsT0FBTyxJQUFJLFNBQVMsSUFBSSxRQUFRLE1BQU0sb0JBQW9CO0dBQzlFLE9BQU8sSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLEtBQUssTUFBTSxZQUFZLEdBQUcsS0FBSyxNQUFNLE1BQU0sS0FBSyxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQUcsb0JBQW9CLFFBQVEsWUFBWTtHQUN4SixZQUFZLE9BQU8sT0FBTztFQUMzQixPQUFPLFNBQVMsT0FBTyxTQUFTLEtBQUssRUFBRSxPQUFPLE9BQU87Q0FDdEQ7Q0FDQSxPQUFPO0FBQ1I7QUFDQSxNQUFNLGFBQWEsU0FBUyxHQUFHO0NBQzlCLE9BQU8sZ0JBQWdCLEtBQUssQ0FBQztBQUM5QjtBQUFHLE1BQUEsVUFBVSxTQUFTLEdBQUc7Q0FDeEIsSUFBSSxXQUFXLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRTtDQUNoRixPQUFPLFNBQVMsV0FBVyxLQUFLLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxNQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVMsS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksTUFBTTtBQUMxSTtBQUFHLE1BQUEsY0FBYyxJQUFJLFlBQVk7QUFBRyxNQUFBLGVBQWUsT0FBTyxVQUFVLGNBQWMsT0FBTyxPQUFPLFFBQVEsY0FBYyxXQUFXLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FBQyxDQUFDLFNBQVMsT0FBTyxLQUFLLFdBQVcsWUFBWSxPQUFPLFdBQVcsS0FBSyxLQUFLLE1BQU0sSUFBSSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUFHLE1BQUEsZUFBZTtBQUFNLE1BQUEsaUJBQWlCO0FBQU8sTUFBQSxlQUFlO0FBQU8sTUFBQSxzQkFBc0I7QUFBTyxNQUFBLFdBQVc7QUFBTyxNQUFBLGdCQUFnQjtBQUFPLE1BQUEsWUFBWTtBQUMvWixTQUFTLGdCQUFnQixVQUFVO0NBQ2xDLE9BQU8sU0FBUyxRQUFRLEdBQUcsTUFBTSxPQUFPLFdBQVcsU0FBUyxRQUFRLGNBQWMsS0FBSyxJQUFJLENBQUMsYUFBYSxTQUFTLFFBQVEsSUFBSSxNQUFNLE9BQU8sV0FBVyxTQUFTLFFBQVEsZ0JBQWdCLEtBQUssSUFBSSxTQUFTLFFBQVEsSUFBSSxNQUFNLE9BQU8sV0FBVyxTQUFTLFFBQVEsY0FBYyxLQUFLLElBQUksU0FBUyxRQUFRLElBQUksTUFBTSxPQUFPLFdBQVcsU0FBUyxRQUFRLHFCQUFxQixLQUFLLElBQUksU0FBUyxRQUFRLEdBQUcsTUFBTSxPQUFPLFdBQVcsU0FBUyxRQUFRLFVBQVUsS0FBSyxJQUFJO0FBQ2xjO0FBQ0EsTUFBTSxlQUFlO0FBQVMsTUFBQSxlQUFlO0FBQzdDLFNBQVMsb0JBQW9CLFdBQVc7Q0FDdkMsSUFBSSxXQUFXLGFBQWEsU0FBUyxHQUFHLGVBQWUsVUFBVSxXQUFXLFVBQVUsU0FBUyxDQUFDO0NBQ2hHLFFBQVEsaUJBQWlCLE1BQU0sYUFBYSxpQkFBaUIsT0FBTyxTQUFTLFNBQVMsU0FBUyxPQUFPLFFBQVEsWUFBWSxNQUFNLFdBQVcsZ0JBQWdCLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRyxNQUFNLE9BQU8sV0FBVyxTQUFTLFFBQVEsZUFBZSxLQUFLLElBQUksU0FBUyxRQUFRLEdBQUcsTUFBTSxPQUFPLFdBQVcsU0FBUyxRQUFRLFdBQVcsS0FBSyxJQUFJLElBQUksSUFBSSxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQzNXO0FBQ0EsU0FBUyxjQUFjLE1BQU07Q0FDNUIsT0FBTyxLQUFLLFFBQVEsT0FBTyxJQUFJO0FBQ2hDO0FBR0EsSUFBSSxRQUFRO0FBQUksSUFBQSxRQUFRO0FBQW9FLElBQUEsNEJBQVksSUFBSSxXQUFXLEVBQUU7QUFBRyxJQUFBLDRCQUFZLElBQUksV0FBVyxHQUFHO0FBQzFKLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztDQUN0QyxJQUFJLElBQUksTUFBTSxXQUFXLENBQUM7Q0FDMUIsVUFBVSxLQUFLLEdBQUcsVUFBVSxLQUFLO0FBQ2xDO0FBQ0EsU0FBUyxjQUFjLFFBQVEsVUFBVTtDQUN4QyxJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsVUFBVTtDQUNwQztFQUNDLFVBQVUsVUFBVSxPQUFPLEtBQUssSUFBSSxVQUFVLFVBQVUsT0FBTyxPQUFPLFNBQVM7UUFDekUsVUFBVTtDQUNqQixJQUFJLGVBQWUsUUFBUTtDQUMzQixPQUFPLFdBQVcsR0FBRyxpQkFBaUIsUUFBUSxjQUFjLENBQUMsUUFBUSxXQUFXO0FBQ2pGO0FBQ0EsU0FBUyxXQUFXLFFBQVEsS0FBSztDQUNoQyxPQUFPLE9BQU8sT0FBTyxNQUFNLENBQUMsSUFBSSxPQUFPLEtBQUssTUFBTTtBQUNuRDtBQUNBLElBQUksZUFBZSxNQUFNO0NBQ3hCLFlBQVksUUFBUTtFQUNuQixLQUFLLE1BQU0sR0FBRyxLQUFLLFNBQVM7Q0FDN0I7Q0FDQSxPQUFPO0VBQ04sT0FBTyxLQUFLLE9BQU8sV0FBVyxLQUFLLEtBQUs7Q0FDekM7Q0FDQSxPQUFPO0VBQ04sT0FBTyxLQUFLLE9BQU8sV0FBVyxLQUFLLEdBQUc7Q0FDdkM7Q0FDQSxRQUFRLE1BQU07RUFDYixJQUFJLEVBQUUsUUFBUSxRQUFRLE1BQU0sTUFBTSxPQUFPLFFBQVEsTUFBTSxHQUFHO0VBQzFELE9BQU8sUUFBUSxLQUFLLE9BQU8sU0FBUztDQUNyQztBQUNEO0FBQ0EsU0FBUyxPQUFPLFVBQVU7Q0FDekIsSUFBSSxFQUFFLFdBQVcsVUFBVSxTQUFTLElBQUksYUFBYSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsWUFBWSxHQUFHLGVBQWUsR0FBRyxhQUFhLEdBQUcsZUFBZSxHQUFHLGFBQWE7Q0FDOUosR0FBRztFQUNGLElBQUksT0FBTyxPQUFPLFFBQVEsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLFVBQVU7RUFDbEUsS0FBSyxZQUFZLEdBQUcsT0FBTyxNQUFNLE9BQU87R0FDdkMsSUFBSTtHQUNKLFlBQVksY0FBYyxRQUFRLFNBQVMsR0FBRyxZQUFZLFlBQVksU0FBUyxDQUFDLElBQUksVUFBVSxXQUFXLFdBQVcsUUFBUSxJQUFJLEtBQUssZUFBZSxjQUFjLFFBQVEsWUFBWSxHQUFHLGFBQWEsY0FBYyxRQUFRLFVBQVUsR0FBRyxlQUFlLGNBQWMsUUFBUSxZQUFZLEdBQUcsV0FBVyxRQUFRLElBQUksS0FBSyxhQUFhLGNBQWMsUUFBUSxVQUFVLEdBQUcsTUFBTTtJQUM5VztJQUNBO0lBQ0E7SUFDQTtJQUNBO0dBQ0QsS0FBSyxNQUFNO0lBQ1Y7SUFDQTtJQUNBO0lBQ0E7R0FDRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxLQUFLLEdBQUcsR0FBRyxPQUFPO0VBQ2hEO0VBQ0EsVUFBVSxLQUFLLElBQUksR0FBRyxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU8sTUFBTSxPQUFPO0NBQy9ELFNBQVMsT0FBTyxPQUFPO0NBQ3ZCLE9BQU87QUFDUjtBQUNBLFNBQVMsS0FBSyxNQUFNO0NBQ25CLEtBQUssS0FBSyxjQUFjO0FBQ3pCO0FBQ0EsU0FBUyxlQUFlLEdBQUcsR0FBRztDQUM3QixPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pCO0FBR0EsSUFBSSxTQUFTO0FBQUcsSUFBQSxnQkFBZ0I7QUFBRyxJQUFBLGNBQWM7QUFBRyxJQUFBLGdCQUFnQjtBQUFHLElBQUEsY0FBYztBQUFHLElBQUEsUUFBUSxDQUFDO0FBQ2pHLFNBQVMsYUFBYSxVQUFVLFFBQVEsS0FBSyxNQUFNO0NBQ2xELE9BQU8sT0FBTyxPQUFPO0VBQ3BCLElBQUksTUFBTSxPQUFPLE9BQU8sT0FBTyxJQUFJLE1BQU0sU0FBUyxJQUFJLENBQUMsVUFBVTtFQUNqRSxJQUFJLFFBQVEsR0FBRyxPQUFPLFFBQVEsQ0FBQyxHQUFHO0VBQ2xDLE1BQU0sSUFBSSxNQUFNLE1BQU0sSUFBSSxPQUFPLE1BQU07Q0FDeEM7Q0FDQSxPQUFPLFFBQVEsQ0FBQyxHQUFHLE1BQU07QUFDMUI7QUFDQSxTQUFTLFdBQVcsVUFBVSxRQUFRLE9BQU87Q0FDNUMsS0FBSyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksU0FBUyxVQUFVLFNBQVMsRUFBRSxDQUFDLFlBQVksUUFBUSxRQUFRO0NBQ3ZGLE9BQU87QUFDUjtBQUNBLFNBQVMsV0FBVyxVQUFVLFFBQVEsT0FBTztDQUM1QyxLQUFLLElBQUksSUFBSSxRQUFRLEdBQUcsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDLFlBQVksUUFBUSxRQUFRO0NBQzFFLE9BQU87QUFDUjtBQUNBLFNBQVMscUJBQXFCLFVBQVUsUUFBUSxPQUFPLEtBQUs7Q0FDM0QsSUFBSSxFQUFFLFNBQVMsWUFBWSxjQUFjLE9BQU8sTUFBTSxHQUFHLE9BQU8sU0FBUyxTQUFTO0NBQ2xGLElBQUksUUFBUSxTQUFTO0VBQ3BCLElBQUksV0FBVyxZQUFZLE9BQU8sUUFBUSxjQUFjLE1BQU0sU0FBUyxVQUFVLENBQUMsWUFBWSxRQUFRO0VBQ3RHLFVBQVUsYUFBYSxNQUFNLGNBQWMsS0FBSyxJQUFJLFlBQVksT0FBTztDQUN4RTtDQUNBLE9BQU8sTUFBTSxVQUFVLEtBQUssTUFBTSxhQUFhLFFBQVEsTUFBTSxZQUFZLGFBQWEsVUFBVSxRQUFRLEtBQUssSUFBSTtBQUNsSDtBQUNBLElBQUksZ0JBQWdCO0FBQXlELElBQUEsa0JBQWtCO0FBQy9GLFNBQVMsS0FBSyxLQUFLO0NBQ2xCLE9BQU87QUFDUjtBQUNBLFNBQVMsZ0JBQWdCLEtBQUs7Q0FDN0IsSUFBSTtDQUNKLFFBQVEsS0FBSyxLQUFLLEdBQUcsRUFBQSxDQUFHLGFBQWEsR0FBRyxXQUFXLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRO0FBQzdFO0FBQ0EsU0FBUyxvQkFBb0IsS0FBSyxRQUFRO0NBQ3pDLElBQUksRUFBRSxNQUFNLFFBQVEsU0FBUztDQUM3QixJQUFJLFFBQVEsT0FBTyxHQUFHLE1BQU0sTUFBTSxhQUFhO0NBQy9DLElBQUksU0FBUyxHQUFHLE1BQU0sTUFBTSxlQUFlO0NBQzNDLElBQUksVUFBVSxnQkFBZ0IsR0FBRztDQUNqQyxJQUFJLFFBQVEsUUFBUSxRQUFRLE9BQU8sU0FBUyxNQUFNLE1BQU0sTUFBTSxJQUFJO0NBQ2xFLElBQUksV0FBVyxRQUFRLE9BQU8sUUFBUSxxQkFBcUIsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLGNBQWMsTUFBTSxRQUFRLFFBQVEsQ0FBQztDQUNwSCxJQUFJLFVBQVUsSUFBSSxPQUFPLFNBQVMsTUFBTSxNQUFNLE1BQU0sSUFBSTtDQUN4RCxJQUFJLFVBQVUsU0FBUztDQUN2QixJQUFJLFFBQVEsV0FBVyxHQUFHLE9BQU8sU0FBUyxNQUFNLE1BQU0sTUFBTSxJQUFJO0NBQ2hFLElBQUksRUFBRSxPQUFPLG9CQUFvQjtDQUNqQyxPQUFPLFNBQVMsZ0JBQWdCLFFBQVEsaUJBQWlCLFFBQVEsZUFBZSxHQUFHLFFBQVEsZ0JBQWdCLFFBQVEsV0FBVyxJQUFJLE1BQU0sUUFBUSxnQkFBZ0IsSUFBSTtBQUNySztBQUNBLFNBQVMsU0FBUyxRQUFRLE1BQU0sUUFBUSxNQUFNO0NBQzdDLE9BQU87RUFDTjtFQUNBO0VBQ0E7RUFDQTtDQUNEO0FBQ0Q7QUFDQSxTQUFTLHFCQUFxQixVQUFVLE1BQU0sTUFBTSxRQUFRLE1BQU07Q0FDakUsSUFBSSxRQUFRLHFCQUFxQixVQUFVLFFBQVEsTUFBTSxJQUFJO0NBQzdELE9BQU8sUUFBUSxTQUFTLFNBQVMsS0FBSyxhQUFhLFdBQUEsQ0FBWSxVQUFVLFFBQVEsS0FBSyxJQUFJLFNBQVMsTUFBTSxTQUFTLFVBQVUsTUFBTSxVQUFVLFNBQVMsU0FBUyxLQUFLO0FBQ3BLO0FBR0EsSUFBSSxhQUFhLE1BQU07Q0FDdEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsUUFBUSxDQUFDO0NBQ1Q7Q0FDQSxZQUFZLEtBQUssTUFBTTtFQUN0QixLQUFLLE1BQU07RUFDWCxJQUFJLEVBQUUsVUFBVSxPQUFPLFlBQVk7RUFDbkMsS0FBSyxVQUFVLElBQUksU0FBUyxLQUFLLFFBQVEsU0FBUyxDQUFDLEdBQUcsS0FBSyxXQUFXLFlBQVksSUFBSSxLQUFLLGVBQWUsY0FBYyxHQUFHLEtBQUssTUFBTSxNQUFNLEtBQUssT0FBTztFQUN4SixJQUFJLFlBQVksYUFBYSxJQUFJO0VBQ2pDLEtBQUssbUJBQW1CLFdBQVcsQ0FBQyxFQUFBLENBQUcsS0FBSyxNQUFNLGFBQWEsV0FBVyxLQUFLLEVBQUUsQ0FBQztDQUNuRjtBQUNEO0FBQ0EsU0FBUyxnQkFBZ0I7Q0FDeEIsT0FBTztFQUNOLFNBQVM7RUFDVCxZQUFZO0VBQ1osV0FBVztDQUNaO0FBQ0Q7QUFDQSxTQUFTLG9CQUFvQixLQUFLLFFBQVE7Q0FDekMsSUFBSSxTQUFTLG9CQUFvQixLQUFLLE1BQU07Q0FDNUMsT0FBTyxPQUFPLFVBQVUsT0FBTyxPQUFPO0FBQ3ZDO0FBR0EsTUFBTSxxQ0FBcUMsT0FBTyxPQUFPLGtCQUFrQixtQ0FBbUM7QUFDOUcsSUFBSSxzQkFBc0IsTUFBTTtDQUMvQiw0QkFBNEIsSUFBSSxJQUFJO0NBQ3BDLDBCQUEwQixJQUFJLElBQUk7Q0FDbEMsWUFBWSxDQUFDO0NBQ2I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLFlBQVksSUFBSSxLQUFLO0VBQ3BCLEtBQUssS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLEtBQUssT0FBTyxTQUFTLEVBQUU7Q0FDdEQ7QUFDRDtBQUFHLElBQUEsbUJBQW1CLE1BQU07Q0FDM0IsZ0NBQWdDLElBQUksSUFBSTtDQUN4QyxtQ0FBbUMsSUFBSSxJQUFJO0NBQzNDLG1DQUFtQyxJQUFJLElBQUk7Ozs7Ozs7O0NBUTNDLGNBQWMsSUFBSTtFQUNqQixPQUFPLEtBQUssY0FBYyxJQUFJLEVBQUU7Q0FDakM7Ozs7Ozs7Q0FPQSxpQkFBaUIsTUFBTTtFQUN0QixPQUFPLEtBQUssaUJBQWlCLElBQUksSUFBSTtDQUN0Qzs7Ozs7O0NBTUEsZUFBZSxLQUFLO0VBQ25CLE9BQU8sS0FBSyxpQkFBaUIsSUFBSSxTQUFTLEdBQUcsQ0FBQztDQUMvQzs7Ozs7Ozs7Q0FRQSxhQUFhLElBQUksS0FBSztFQUNyQixJQUFJLEtBQUssa0JBQWtCLEVBQUUsR0FBRyxLQUFLLGNBQWMsSUFBSSxFQUFFLEdBQUc7R0FDM0QsSUFBSSxhQUFhLEtBQUssY0FBYyxJQUFJLEVBQUU7R0FDMUMsT0FBTyxLQUFLLGlCQUFpQixJQUFJLEtBQUssVUFBVSxHQUFHO0VBQ3BEO0VBQ0EsSUFBSSxhQUFhLElBQUksb0JBQW9CLElBQUksR0FBRztFQUNoRCxLQUFLLGNBQWMsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLGlCQUFpQixJQUFJLEtBQUssVUFBVTtFQUNqRixJQUFJLGNBQWMsS0FBSyxpQkFBaUIsSUFBSSxXQUFXLElBQUkscUJBQXFCLElBQUksSUFBSTtFQUN4RixPQUFPLFlBQVksSUFBSSxVQUFVLEdBQUcsS0FBSyxpQkFBaUIsSUFBSSxXQUFXLE1BQU0sV0FBVyxHQUFHO0NBQzlGO0NBQ0EsaUJBQWlCLE1BQU07RUFDdEIsS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxLQUFLLEdBQUcsS0FBSyxVQUFVLEtBQUssR0FBRyxLQUFLLFVBQVUsS0FBSyxHQUFHLEtBQUssUUFBUSxNQUFNO0NBQzlIOzs7Ozs7Q0FNQSx1QkFBdUIsSUFBSTtFQUMxQixJQUFJLE1BQU0sS0FBSyxjQUFjLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEtBQUssT0FBTztFQUNqQixJQUFJLElBQUksS0FBSyxPQUFPLElBQUk7RUFDeEIsSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLFVBQVUsSUFBSSxPQUFPLE9BQU87RUFDL0MsSUFBSSxVQUFVLE9BQU8sa0JBQWtCLGlDQUFpQyxZQUFZLElBQUksS0FBSyxLQUFLLFlBQVksT0FBTztFQUNySCxJQUFJLGNBQWMsSUFBSSxPQUFPO0VBQzdCLElBQUksWUFBWSxtQ0FBbUMsS0FBSyxJQUFJLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQyxDQUFDLEdBQUc7RUFDMUYsT0FBTyxhQUFhLElBQUksTUFBTSxJQUFJLFdBQVcsS0FBSyxNQUFNLGFBQWEsU0FBUyxDQUFDLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxPQUFPO0NBQ3pHO0NBQ0EsUUFBUTtFQUNQLEtBQUssY0FBYyxNQUFNLEdBQUcsS0FBSyxpQkFBaUIsTUFBTSxHQUFHLEtBQUssaUJBQWlCLE1BQU07Q0FDeEY7QUFDRDtBQUNBLE1BQU0sbUNBQW1CLElBQUksSUFBSTtDQUNoQztDQUNBO0NBQ0E7Q0FDQTtBQUNELENBQUM7QUFDRCxTQUFTLGtCQUFrQixNQUFNO0NBQ2hDLE9BQU8saUJBQWlCLElBQUksSUFBSSxJQUFJLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLFlBQVksWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxhQUFhLFlBQVksS0FBSyxHQUFHO0FBQ3RMO0FBR0EsSUFBSSxhQUFhLE1BQU07Q0FDdEI7Q0FDQSxZQUFZLFdBQVcsV0FBVztFQUNqQyxLQUFLLFlBQVksV0FBVyxLQUFLLFlBQVksV0FBVyxVQUFVLFFBQVEsSUFBSSxTQUFTLEtBQUssVUFBVSxRQUFRLElBQUksV0FBVyxDQUFDLENBQUM7RUFDL0gsSUFBSSxNQUFNLFVBQVUsY0FBYyxJQUFJLFNBQVM7RUFDL0MsUUFBUSxJQUFJLFlBQVksQ0FBQztFQUN6QixJQUFJLGlCQUFpQixVQUFVLGtCQUFrQixJQUFJLFNBQVM7RUFDOUQsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsT0FBTyxhQUFhLGdCQUFnQjtHQUNqRSxJQUFJLFlBQVksVUFBVSxtQkFBbUIsSUFBSSxLQUFLO0dBQ3RELGFBQWEsVUFBVSxtQkFBbUIsSUFBSSxPQUFPLFVBQVUsUUFBUSxNQUFNLENBQUMsU0FBUyxTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQ3BHO0VBQ0EsS0FBSywrQkFBK0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxrQkFBa0IsSUFBSSxXQUFXLEtBQUssWUFBWTtDQUM1RztDQUNBLElBQUksT0FBTztFQUNWLE9BQU8sS0FBSyxVQUFVLFFBQVEsSUFBSSxLQUFLLFNBQVM7Q0FDakQ7Q0FDQSxPQUFPLE1BQU0sVUFBVTtFQUN0QixJQUFJLE9BQU8sUUFBUSxjQUFjLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLFNBQVMsT0FBTyxHQUFHLENBQUM7T0FDM0YsSUFBSSxPQUFPLFFBQVEsVUFBVSxLQUFLLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLFdBQVcsR0FBRyxDQUFDO09BQy9FLElBQUksTUFBTSxRQUFRLElBQUksR0FBRyxLQUFLLFdBQVcsTUFBTSxRQUFRO09BQ3ZELE1BQU0sTUFBTSw2QkFBNkI7Q0FDL0M7Q0FDQSxjQUFjLEdBQUcsVUFBVTtFQUMxQixLQUFLLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLFNBQVMsV0FBVyxHQUFHLENBQUM7Q0FDN0Q7Q0FDQSxRQUFRLElBQUk7RUFDWCxLQUFLLFVBQVUsV0FBVyxJQUFJLEtBQUssV0FBVyxFQUFFO0NBQ2pEO0NBQ0EsTUFBTSxJQUFJO0VBQ1QsS0FBSyxVQUFVLFNBQVMsSUFBSSxLQUFLLFdBQVcsRUFBRTtDQUMvQztDQUNBLFVBQVUsQ0FBQztDQUNYLFdBQVcsU0FBUztFQUNuQixJQUFJLHFCQUFxQixLQUFLLFVBQVUsNkJBQTZCLEtBQUs7RUFDMUUsS0FBSyxVQUFVLGdCQUFnQixtQkFBbUI7R0FDakQsTUFBTSxLQUFLO0dBQ1g7R0FDQTtFQUNELENBQUMsR0FBRyxLQUFLLEtBQUssbUJBQW1CO0dBQ2hDLE1BQU0sS0FBSztHQUNYO0dBQ0E7RUFDRCxDQUFDLEdBQUcsS0FBSyxVQUFVLE9BQU8sTUFBTSxjQUFjLEtBQUssWUFBWSxVQUFVLEtBQUssWUFBWSxJQUFJO0NBQy9GO0NBQ0EsR0FBRyxPQUFPLElBQUk7RUFDYixJQUFJLFlBQVksUUFBUTtHQUN2QixJQUFJLFdBQVcsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDO0dBQ2xDLFNBQVMsS0FBSyxFQUFFLEdBQUcsSUFBSSxJQUFJLE9BQU8sUUFBUTtFQUMzQztFQUNBLFNBQVMsS0FBSyxVQUFVLGtCQUFrQixHQUFHLFNBQVMsS0FBSyxZQUFZO0NBQ3hFO0NBQ0EsSUFBSSxPQUFPLElBQUk7RUFDZCxJQUFJLGlCQUFpQixRQUFRO0dBQzVCLElBQUksV0FBVyxJQUFJLElBQUksS0FBSztHQUM1QixJQUFJLGFBQWEsS0FBSyxHQUFHO0dBQ3pCLElBQUksU0FBUyxTQUFTLFFBQVEsTUFBTSxNQUFNLEVBQUU7R0FDNUMsSUFBSSxPQUFPLFdBQVcsR0FBRztJQUN4QixJQUFJLE9BQU8sS0FBSztJQUNoQjtHQUNEO0dBQ0EsSUFBSSxJQUFJLE9BQU8sTUFBTTtFQUN0QjtFQUNBLGNBQWMsS0FBSyxVQUFVLGtCQUFrQixHQUFHLGNBQWMsS0FBSyxZQUFZO0NBQ2xGO0NBQ0EsS0FBSyxPQUFPLE1BQU07RUFDakIsS0FBSyxVQUFVLEtBQUs7R0FDbkIsTUFBTTtHQUNOO0dBQ0E7RUFDRCxDQUFDO0NBQ0Y7Q0FDQSxXQUFXLE1BQU0saUJBQWlCLENBQUMsR0FBRztFQUNyQyxJQUFJLE1BQU0sS0FBSyxVQUFVLGNBQWMsSUFBSSxLQUFLLFNBQVMsS0FBSztHQUM3RCxJQUFJLEtBQUs7R0FDVCxXQUFXLENBQUM7RUFDYjtFQUNBLElBQUksVUFBVSxLQUFLO0dBQ2xCO0dBQ0EsSUFBSTtFQUNMLENBQUMsR0FBRyxLQUFLLFVBQVUsY0FBYyxJQUFJLEtBQUssV0FBVyxHQUFHO0NBQ3pEO0FBQ0Q7QUFBRyxJQUFBLFlBQVksTUFBTTtDQUNwQixnQ0FBZ0MsSUFBSSxJQUFJO0NBQ3hDLDZCQUE2QixJQUFJLElBQUk7Q0FDckMsMkJBQTJCLElBQUksSUFBSTtDQUNuQywwQkFBMEIsSUFBSSxJQUFJO0NBQ2xDLHFDQUFxQyxJQUFJLElBQUk7Q0FDN0Msb0NBQW9DLElBQUksSUFBSTtDQUM1QztDQUNBLFlBQVksUUFBUSxXQUFXLHFCQUFxQjtFQUNuRCxLQUFLLFNBQVMsUUFBUSxLQUFLLFlBQVksV0FBVyxLQUFLLHNCQUFzQjtDQUM5RTtDQUNBLE1BQU0sZ0JBQWdCLE9BQU8sTUFBTTtFQUNsQyxJQUFJLE1BQU0sS0FBSyxtQkFBbUIsSUFBSSxLQUFLO0VBQzNDLE9BQU8sTUFBTSxRQUFRLFdBQVcsSUFBSSxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztDQUMxRDtDQUNBLEtBQUssU0FBUztFQUNiLEtBQUssVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sUUFBUTtHQUMzQyxLQUFLLE9BQU8sTUFBTSxHQUFHO0VBQ3RCLENBQUM7Q0FDRjtDQUNBLFFBQVE7RUFDUCxLQUFLLGNBQWMsTUFBTSxHQUFHLEtBQUssV0FBVyxNQUFNLEdBQUcsS0FBSyxTQUFTLE1BQU0sR0FBRyxLQUFLLFFBQVEsTUFBTSxHQUFHLEtBQUssbUJBQW1CLE1BQU0sR0FBRyxLQUFLLGtCQUFrQixNQUFNO0NBQ2pLO0NBQ0EsTUFBTSxXQUFXLE9BQU87RUFDdkIsTUFBTSxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVM7R0FDckMsSUFBSSxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUk7R0FDdkMsSUFBSSxVQUFVLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUM7RUFDckQsQ0FBQyxDQUFDLEdBQUcsTUFBTSxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVM7R0FDMUMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUk7R0FDL0IsSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUM7RUFDekMsQ0FBQyxDQUFDO0NBQ0g7Q0FDQSxpQkFBaUIsS0FBSyxNQUFNO0VBQzNCLENBQUMsRUFBRSxlQUFlLFVBQVUsQ0FBQyxJQUFJLFFBQVEsU0FBUyxPQUFPLE1BQU0sS0FBSyxPQUFPLE1BQU0sR0FBRyxHQUFHLEtBQUssT0FBTyxNQUFNLG9CQUFvQixLQUFLLDJGQUEyRjtDQUM5TjtDQUNBLGNBQWMsQ0FBQztDQUNmLHFCQUFxQixDQUFDOzs7Ozs7Q0FNdEIsTUFBTSxZQUFZLFNBQVM7RUFDMUIsSUFBSSxLQUFLLFlBQVksS0FBSyxLQUFLLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLG9CQUFvQjtHQUMvRSxLQUFLLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxRQUFRLFFBQVEsR0FBRyxLQUFLLHFCQUFxQixDQUFDO0dBQ2xGLElBQUksVUFBVSxDQUFDLEdBQUcsS0FBSyxXQUFXO0dBQ2xDLEtBQUssY0FBYyxDQUFDLElBQUksTUFBTSxRQUFRLElBQUksT0FBTyxFQUFBLENBQUcsU0FBUyxPQUFPLE1BQU0sR0FBRyxDQUFDO0VBQy9FO0NBQ0Q7Q0FDQSxNQUFNLFlBQVksUUFBUTtFQUN6QixJQUFJLEVBQUUsTUFBTSxjQUFjLHVCQUF1QixRQUFRLE1BQU0sS0FBSyxjQUFjLElBQUksSUFBSTtFQUMxRixJQUFJLENBQUMsS0FBSztFQUNWLElBQUksZUFBZSxlQUFlLFNBQVMsY0FBYyxxQkFBcUIsSUFBSSxVQUFVLFFBQVEsRUFBRSxXQUFXLEtBQUssU0FBUyxZQUFZLENBQUM7RUFDNUksSUFBSSxnQkFBZ0IsbUJBQW1CLFNBQVMsR0FBRztHQUNsRCxJQUFJLFdBQVcsS0FBSyxXQUFXLElBQUksWUFBWTtHQUMvQyxZQUFZLE1BQU0sU0FBUyxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUM7R0FDekQsSUFBSTtJQUNILGdCQUFnQixNQUFNLEtBQUssb0JBQW9CLE1BQU07R0FDdEQsU0FBUyxHQUFHO0lBQ1gsS0FBSyxpQkFBaUIsR0FBRyxZQUFZO0dBQ3RDO0VBQ0Q7RUFDQSxhQUFhO0dBQ1osSUFBSTtJQUNILEtBQUssNEJBQTRCO0lBQ2pDLEtBQUssSUFBSSxFQUFFLE1BQU0sUUFBUSxvQkFBb0IsR0FBRyxLQUFLLEtBQUssUUFBUSxRQUFRLGVBQWUsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDO0lBQ2hILElBQUksYUFBYSxlQUFlLE9BQU8sR0FBRyxhQUFhLE9BQU87SUFDOUQsS0FBSyxPQUFPLE1BQU0sZ0JBQWdCLFlBQVk7R0FDL0MsVUFBVTtJQUNULEtBQUssNEJBQTRCLEtBQUs7R0FDdkM7RUFDRDtDQUNEO0FBQ0Q7Ozs7OztBQVFBLFNBQVMsNkJBQTZCLEtBQUssT0FBTyxZQUFZLFVBQVU7Q0FDdkUsSUFBSSxDQUFDLFVBQVUsbUJBQW1CLFVBQVUsZUFBZSxRQUFRO0VBQ2xFLElBQUksa0JBQWtCLFNBQVMsY0FBYyxRQUFRLE1BQU0sRUFBRSxLQUFLLElBQUk7RUFDdEUsSUFBSSxnQkFBZ0IsUUFBUTtHQUMzQixJQUFJLGNBQWMsZ0JBQWdCLGdCQUFnQixTQUFTO0dBQzNELE1BQU0sWUFBWSxlQUFlLFdBQVcsZ0NBQWdDLE1BQU0sc0NBQXNDLFlBQVksS0FBSzt1QkFDckgsWUFBWSxxQ0FBcUMsTUFBTTs7O21CQUczRCxNQUFNO1NBQ2hCLGdCQUFnQixLQUFLLElBQUksRUFBRTtDQUNuQztFQUNDO0NBQ0Q7QUFDRDtBQUdBLElBQUksVUFBVSxPQUFPLE9BQU87Q0FDM0IsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPO0NBQ3hCLE9BQU8sTUFBTSxNQUFNLG1FQUFtRSxLQUFLLE9BQU8sSUFBSSxLQUFLO0NBQzNHLE9BQU87QUFDUjtBQUdBLFNBQVMsa0JBQWtCLEdBQUc7Q0FDN0IsSUFBSSxRQUFRLE1BQU0sRUFBRSxXQUFXLHNCQUFzQjtDQUNyRCxPQUFPLE9BQU8sT0FBTyxPQUFPLEdBQUcsRUFBRSxhQUE2QixzQkFBTSxhQUFhLEVBQUUsQ0FBQyxHQUFHO0FBQ3hGO0FBQ0EsTUFBTSw2QkFBNkIsY0FBYztDQUNoRCxJQUFJLFVBQVUsUUFBUSxPQUFPO0VBQzVCLEdBQUc7RUFDSCxNQUFNLE9BQU8sTUFBTSxNQUFNO0dBQ3hCLElBQUksU0FBUyxNQUFNLFVBQVUsT0FBTztJQUNuQyxNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07S0FDTCxJQUFJO0tBQ0o7S0FDQTtJQUNEO0dBQ0QsQ0FBQztHQUNELElBQUksV0FBVyxRQUFRLE1BQU0sa0JBQWtCLE9BQU8sS0FBSztHQUMzRCxPQUFPLE9BQU87RUFDZjtDQUNEO0NBQ0EsSUFBSSxDQUFDLFVBQVUsUUFBUSxDQUFDLFVBQVUsU0FBUyxNQUFNLE1BQU0sMEVBQTBFO0NBQ2pJLElBQUksOEJBQThCLElBQUksSUFBSTtDQUMxQyxPQUFPO0VBQ04sR0FBRztFQUNILFFBQVEsRUFBRSxXQUFXLG1CQUFtQjtHQUN2QyxPQUFPLFVBQVUsUUFBUTtJQUN4QixVQUFVLFNBQVM7S0FDbEIsSUFBSSxRQUFRLFNBQVMsWUFBWSxRQUFRLFVBQVUsZUFBZTtNQUNqRSxJQUFJLE9BQU8sUUFBUTtNQUNuQixJQUFJLEtBQUssR0FBRyxXQUFXLFdBQVcsR0FBRztPQUNwQyxJQUFJLFdBQVcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLFVBQVUsWUFBWSxJQUFJLFFBQVE7T0FDbkUsSUFBSSxDQUFDLFNBQVM7T0FDZCxRQUFRLGFBQWEsYUFBYSxRQUFRLFNBQVMsR0FBRyxZQUFZLE9BQU8sUUFBUTtPQUNqRixJQUFJLEVBQUUsT0FBTyxXQUFXLEtBQUs7T0FDN0IsUUFBUSxRQUFRLE9BQU8sS0FBSyxJQUFJLFFBQVEsUUFBUSxNQUFNO09BQ3REO01BQ0Q7S0FDRDtLQUNBLFVBQVUsT0FBTztJQUNsQjtJQUNBO0dBQ0QsQ0FBQztFQUNGO0VBQ0EsYUFBYTtHQUNaLE9BQU8sWUFBWSxTQUFTLFlBQVk7SUFDdkMsUUFBUSxPQUF1QixzQkFBTSwyQ0FBMkMsS0FBSyxVQUFVLFFBQVEsSUFBSSxHQUFHLENBQUM7R0FDaEgsQ0FBQyxHQUFHLFlBQVksTUFBTSxHQUFHLFVBQVUsYUFBYTtFQUNqRDtFQUNBLEtBQUssTUFBTTtHQUNWLE9BQU8sVUFBVSxLQUFLLElBQUk7RUFDM0I7RUFDQSxNQUFNLE9BQU8sTUFBTSxNQUFNO0dBQ3hCLElBQUksWUFBWSxPQUFPLEdBQUcsY0FBYztJQUN2QyxNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07S0FDTDtLQUNBLElBQUksUUFBUTtLQUNaO0lBQ0Q7R0FDRCxHQUFHLGNBQWMsVUFBVSxLQUFLLFdBQVcsR0FBRyxFQUFFLFNBQVMsU0FBUyxXQUFXLHFCQUFxQixHQUFHLFVBQVUsVUFBVSxXQUFXLEtBQUs7R0FDekksVUFBVSxNQUFNLFlBQVksaUJBQWlCO0lBQzVDLFlBQVksT0FBTyxTQUFTLEdBQUcsT0FBdUIsc0JBQU0sb0NBQW9DLFFBQVEsWUFBWSxLQUFLLFVBQVUsV0FBVyxFQUFFLEVBQUUsQ0FBQztHQUNwSixHQUFHLE9BQU8sR0FBRyxXQUFXLFFBQVEsSUFBSSxZQUFZLElBQUksV0FBVztJQUM5RDtJQUNBO0lBQ0E7SUFDQTtHQUNELENBQUMsR0FBRyxlQUFlLFlBQVksT0FBTyxRQUFRO0lBQzdDLGFBQWEsU0FBUyxHQUFHLFlBQVksT0FBTyxTQUFTLEdBQUcsT0FBTyxHQUFHO0dBQ25FLENBQUM7R0FDRCxJQUFJO0lBQ0gsT0FBTyxNQUFNO0dBQ2QsU0FBUyxLQUFLO0lBQ2IsTUFBTSxrQkFBa0IsR0FBRztHQUM1QjtFQUNEO0NBQ0Q7QUFDRDtBQUFHLE1BQUEsa0NBQWtDLGNBQWM7Q0FDbEQsSUFBSSxzQkFBc0IsMEJBQTBCLFNBQVMsR0FBRyxjQUFjLENBQUMsb0JBQW9CLFNBQVM7Q0FDNUcsT0FBTztFQUNOLEdBQUc7RUFDSCxHQUFHLG9CQUFvQixVQUFVLEVBQUUsTUFBTSxRQUFRLFdBQVc7R0FDM0QsSUFBSSxhQUFhO0dBQ2pCLElBQUksbUJBQW1CO0lBQ3RCLE1BQU07SUFDTjtHQUNEO0dBQ0EsSUFBSSxlQUFlLG9CQUFvQixRQUFRO0lBQzlDLFdBQVcsb0JBQW9CLENBQUM7SUFDaEMsa0JBQWtCO0tBQ2pCLGNBQWMsQ0FBQztJQUNoQjtHQUNELENBQUM7R0FDRCxpQkFBaUIsb0JBQW9CLGNBQWMsTUFBTSxtQkFBbUIsb0JBQW9CLEtBQUssSUFBSSxjQUFjLENBQUM7RUFDekgsRUFBRSxJQUFJLENBQUM7RUFDUCxHQUFHLG9CQUFvQixhQUFhLEVBQUUsTUFBTSxhQUFhO0dBQ3hELGdCQUFnQixxQkFBcUIsTUFBTSxtQkFBbUIsY0FBYyxDQUFDLEdBQUcsTUFBTSxvQkFBb0IsV0FBVztFQUN0SCxFQUFFLElBQUksQ0FBQztFQUNQLE1BQU0sS0FBSyxNQUFNO0dBQ2hCLElBQUksb0JBQW9CLE1BQU07SUFDN0IsSUFBSSxDQUFDLGFBQWEsSUFBSSxtQkFBbUIsTUFBTTtTQUMxQyxNQUFNLE1BQU0sZ0NBQWdDO0lBQ2pELE1BQU0sb0JBQW9CLEtBQUssSUFBSTtHQUNwQztFQUNEO0VBQ0EsTUFBTSxPQUFPLE1BQU0sTUFBTTtHQUN4QixJQUFJLENBQUMsYUFBYSxJQUFJLG1CQUFtQixNQUFNO1FBQzFDLE1BQU0sTUFBTSxrQ0FBa0M7R0FDbkQsT0FBTyxvQkFBb0IsT0FBTyxNQUFNLElBQUk7RUFDN0M7Q0FDRDtBQUNEO0FBQUcsTUFBQSx3Q0FBd0MsWUFBWTtDQUN0RCxJQUFJLGVBQWUsUUFBUSxnQkFBZ0IsS0FBSyxJQUFJO0NBQ3BELE9BQU87RUFDTixNQUFNLFFBQVEsRUFBRSxXQUFXLG1CQUFtQjtHQUM3QyxJQUFJLFNBQVMsUUFBUSxpQkFBaUI7R0FDdEMsT0FBTyxpQkFBaUIsV0FBVyxPQUFPLEVBQUUsV0FBVztJQUN0RCxVQUFVLEtBQUssTUFBTSxJQUFJLENBQUM7R0FDM0IsQ0FBQztHQUNELElBQUksV0FBVyxPQUFPLGVBQWUsT0FBTztHQUM1QyxZQUFZLE1BQU0sSUFBSSxTQUFTLFNBQVMsV0FBVztJQUNsRCxPQUFPLGlCQUFpQixjQUFjO0tBQ3JDLFdBQVcsQ0FBQyxHQUFHLFFBQVE7SUFDeEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLGlCQUFpQixTQUFTLFlBQVk7S0FDOUQsSUFBSSxDQUFDLFVBQVU7TUFDZCxPQUF1QixzQkFBTSxrQ0FBa0MsQ0FBQztNQUNoRTtLQUNEO0tBQ0EsVUFBVTtNQUNULE1BQU07TUFDTixPQUFPO01BQ1AsTUFBTSxFQUFFLFdBQVcsT0FBTztLQUMzQixDQUFDLEdBQUcsZ0JBQWdCO0lBQ3JCLENBQUM7R0FDRixDQUFDLEdBQUcsVUFBVTtJQUNiLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTSxFQUFFLFdBQVcsT0FBTztHQUMzQixDQUFDLEdBQUcsS0FBSyxRQUFRLGlCQUFpQixrQkFBa0I7SUFDbkQsT0FBTyxlQUFlLE9BQU8sUUFBUSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQztHQUNsRixHQUFHLFlBQVk7RUFDaEI7RUFDQSxhQUFhO0dBQ1osY0FBYyxjQUFjLEdBQUcsSUFBSSxNQUFNO0VBQzFDO0VBQ0EsS0FBSyxNQUFNO0dBQ1YsR0FBRyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUM7RUFDN0I7Q0FDRDtBQUNEO0FBR0EsU0FBUyxnQkFBZ0IsVUFBVTtDQUNsQyxJQUFJLG1CQUFtQixJQUFJLElBQUksU0FBUyxRQUFRLFlBQVksT0FBTyxXQUFXLFFBQVEsQ0FBQyxHQUFHLGdCQUFnQixTQUFTLFFBQVEsWUFBWSxPQUFPLFdBQVcsUUFBUTtDQUNqSyxRQUFRLE9BQU8saUJBQWlCLElBQUksRUFBRSxLQUFLLGNBQWMsTUFBTSxXQUFXLE9BQU8sS0FBSyxFQUFFLENBQUM7QUFDMUY7QUFHQSxNQUFNLHNCQUFzQjtBQUF3QixNQUFBLGVBQWU7QUFBdUIsTUFBQSxzQkFBc0I7QUFBK0IsTUFBQSxrQkFBa0I7QUFBMEIsTUFBQSxtQkFBbUI7QUFBMkIsTUFBQSxtQkFBbUI7QUFBNEIsTUFBQSxhQUFhLENBQUM7QUFBRyxNQUFBLGdCQUFnQjtDQUN4VCxPQUFPO0NBQ1AsT0FBTztBQUNSO0FBQUcsTUFBQSxZQUFZO0NBQ2QsUUFBUSxHQUFHLFFBQVEsUUFBUSxJQUFJLFVBQVUsR0FBRyxHQUFHO0NBQy9DLFFBQVEsVUFBVSxRQUFRLElBQUksVUFBVSxLQUFLO0FBQzlDO0FBR0EsU0FBUyxpQkFBaUIsU0FBUztDQUNsQyxJQUFJLFFBQVEsSUFBSSxNQUFNO0NBQ3RCLFFBQVEsWUFBWSxNQUFNLGNBQWMsUUFBUSxPQUFPLENBQUM7QUFDekQ7QUFDQSxJQUFJLFFBQVEsTUFBTTtDQUNqQixRQUFRLENBQUM7Q0FDVCxVQUFVLENBQUM7Q0FDWCxRQUFRLFNBQVM7RUFDaEIsT0FBTyxJQUFJLFNBQVMsU0FBUyxXQUFXO0dBQ3ZDLEtBQUssTUFBTSxLQUFLO0lBQ2Y7SUFDQTtJQUNBO0dBQ0QsQ0FBQyxHQUFHLEtBQUssUUFBUTtFQUNsQixDQUFDO0NBQ0Y7Q0FDQSxVQUFVO0VBQ1QsSUFBSSxLQUFLLFNBQVMsT0FBTyxDQUFDO0VBQzFCLElBQUksT0FBTyxLQUFLLE1BQU0sTUFBTTtFQUM1QixPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsY0FBYztHQUNwRyxLQUFLLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUTtFQUNqQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Q0FDWjtBQUNEO0FBR0EsU0FBUywwQkFBMEIsUUFBUTtDQUMxQyxPQUFPLGlCQUFpQixPQUFPLFlBQVk7RUFDMUMsSUFBSSxZQUFZLE9BQU87RUFDdkIsSUFBSSxFQUFFLENBQUMsYUFBYSxPQUFPLFNBQVMsSUFBSSxRQUFRLFFBQVEsTUFBaEI7R0FDdkMsS0FBSztJQUNKLFVBQVUsT0FBTyxNQUFNLFlBQVk7SUFDbkM7R0FDRCxLQUFLO0lBQ0osTUFBTSxVQUFVLGdCQUFnQixxQkFBcUIsT0FBTyxHQUFHLE1BQU0sUUFBUSxJQUFJLFFBQVEsUUFBUSxJQUFJLE9BQU8sV0FBVztLQUN0SCxJQUFJLE9BQU8sU0FBUyxhQUFhLE9BQU8sT0FBTyxlQUFlLFNBQVMsT0FBTyxZQUFZLEdBQUcsT0FBTyxPQUFPLFNBQVMsT0FBTyxJQUFJLEdBQUcsVUFBVSxZQUFZLE1BQU07S0FDOUosVUFBVSxPQUFPLE1BQU0sMENBQTBDO0lBQ2xFLENBQUMsQ0FBQyxHQUFHLE1BQU0sVUFBVSxnQkFBZ0Isb0JBQW9CLE9BQU87SUFDaEU7R0FDRCxLQUFLO0lBQ0osTUFBTSxVQUFVLGdCQUFnQixRQUFRLE9BQU8sUUFBUSxJQUFJO0lBQzNEO0dBQ0QsS0FBSyxlQUFlO0lBQ25CLElBQUksRUFBRSxnQkFBZ0IsU0FBUyxzQkFBc0IsY0FBYyxzQkFBc0IsUUFBUSxpQkFBaUIsUUFBUSxNQUFNLFdBQVcsQ0FBQyxDQUFDLElBQUksbUJBQW1CLE1BQU07SUFDMUssSUFBSSxDQUFDLG9CQUFvQixNQUFNO0lBQy9CLFVBQVUsT0FBTyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sVUFBVSxnQkFBZ0IseUJBQXlCLE9BQU8sR0FBRyxPQUFPLGlCQUFpQixNQUFNO0lBQzNJLEtBQUssSUFBSSxPQUFPLHFCQUFxQjtLQUNwQyxJQUFJLE9BQU8sU0FBUyxHQUFHO0tBQ3ZCLElBQUk7TUFDSCxNQUFNLE9BQU8sT0FBTyxHQUFHO0tBQ3hCLFNBQVMsS0FBSztNQUNiLElBQUksT0FBTyxTQUFTLEdBQUc7TUFDdkIsSUFBSSxTQUFTLGdDQUFnQyxVQUFVLE9BQU8sTUFBTSx5Q0FBeUMsSUFBSSxRQUFRLElBQUksSUFBSSxPQUFPO0tBQ3pJO0lBQ0Q7SUFDQTtHQUNEO0dBQ0EsS0FBSztJQUNKLE1BQU0sVUFBVSxnQkFBZ0Isb0JBQW9CLE9BQU8sR0FBRyxNQUFNLFVBQVUsV0FBVyxRQUFRLEtBQUs7SUFDdEc7R0FDRCxLQUFLLFNBQVM7SUFDYixNQUFNLFVBQVUsZ0JBQWdCLGNBQWMsT0FBTztJQUNyRCxJQUFJLE1BQU0sUUFBUTtJQUNsQixVQUFVLE9BQU8sTUFBTSwwQkFBMEIsSUFBSSxRQUFRLElBQUksSUFBSSxPQUFPO0lBQzVFO0dBQ0Q7R0FDQSxLQUFLLFFBQVE7R0FDYixTQUFTLE9BQU87RUFDakI7Q0FDRCxDQUFDO0FBQ0Y7QUFDQSxTQUFTLGlCQUFpQixRQUFRLE1BQU07Q0FDdkMsSUFBSSxRQUFRLE9BQU8saUJBQWlCLGlCQUFpQixJQUFJO0NBQ3pELE9BQU8sUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEtBQUssRUFBRSxJQUFJLENBQUM7QUFDckQ7QUFDQSxTQUFTLHNCQUFzQixRQUFRLFNBQVMsMEJBQTBCLElBQUksSUFBSSxHQUFHLDhCQUE4QixJQUFJLElBQUksR0FBRztDQUM3SCxLQUFLLElBQUksWUFBWSxTQUFTO0VBQzdCLElBQUksUUFBUSxJQUFJLFFBQVEsR0FBRztFQUMzQixRQUFRLElBQUksUUFBUTtFQUNwQixJQUFJLFNBQVMsT0FBTyxpQkFBaUIsY0FBYyxRQUFRO0VBQzNELElBQUksUUFBUTtHQUNYLElBQUksQ0FBQyxPQUFPLFVBQVUsTUFBTTtJQUMzQixZQUFZLElBQUksT0FBTyxHQUFHO0lBQzFCO0dBQ0Q7R0FDQSxLQUFLLElBQUksWUFBWSxPQUFPLFdBQVcsc0JBQXNCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxXQUFXO0VBQ3RHO0NBQ0Q7Q0FDQSxPQUFPO0FBQ1I7QUFDQSxTQUFTLG1CQUFtQixRQUFRLDhCQUE4QixJQUFJLElBQUksR0FBRztDQUM1RSxLQUFLLElBQUksT0FBTyxPQUFPLGlCQUFpQixjQUFjLE9BQU8sR0FBRyxJQUFJLFVBQVUsUUFBUSxZQUFZLElBQUksSUFBSSxHQUFHO0NBQzdHLE9BQU87QUFDUjtBQUdBLE1BQU0saUJBQWlCLENBQUM7QUFBRyxNQUFBLG9CQUFvQixDQUFDO0FBQUcsTUFBQSx3Q0FBd0MsSUFBSSxJQUFJO0FBQUcsTUFBQSx1Q0FBdUMsSUFBSSxJQUFJO0FBQUcsTUFBQSw0Q0FBNEMsSUFBSSxJQUFJO0FBQUcsTUFBQSxzQkFBc0IsZUFBZSxHQUFHLFNBQVM7Q0FDL1AsS0FBSyxJQUFJLFdBQVcsVUFBVTtFQUM3QixJQUFJLFNBQVMsUUFBUSxHQUFHLElBQUk7RUFDNUIsSUFBSSxRQUFRLE9BQU87Q0FDcEI7Q0FDQSxPQUFPO0FBQ1I7QUFBSSxNQUFBLDJCQUEyQixtQkFBbUIsb0JBQW9CO0FBQUcsTUFBQSxnQ0FBZ0MsbUJBQW1CLHlCQUF5QjtBQUNySixJQUFJLGFBQWEsQ0FBQztBQUNsQixNQUFNLGtCQUFrQixNQUFNO0FBQzlCLFNBQVMsaUJBQWlCLFFBQVEsU0FBUztDQUMxQyxzQkFBc0IsT0FBTyxPQUFPLGdCQUFnQixHQUFHLFFBQVEsZ0JBQWdCLHFCQUFxQixPQUFPLFFBQVEsWUFBWSxHQUFHLFFBQVEscUJBQXFCLDBCQUEwQixPQUFPLFFBQVEsaUJBQWlCLEdBQUcsc0JBQXNCLFNBQVMsTUFBTSxNQUFNLG9CQUFvQixpQkFBaUIsYUFBYSxDQUFDO0FBQzNUO0FBQ0EsU0FBUyxvQkFBb0IsUUFBUSxVQUFVLENBQUMsR0FBRztDQUNsRCxPQUFPLGdCQUFnQixNQUFNLG9CQUFvQixtQkFBbUIsQ0FBQyxJQUFJLHNCQUFzQixJQUFJLE9BQU8sZ0JBQWdCLEdBQUcsUUFBUSxnQkFBZ0IscUJBQXFCLElBQUksUUFBUSxZQUFZLEdBQUcsUUFBUSxxQkFBcUIsMEJBQTBCLElBQUksUUFBUSxpQkFBaUIsU0FBUyxpQkFBaUIsUUFBUSxPQUFPO0FBQ25VO0FBQ0EsU0FBUyxtQkFBbUIsTUFBTSxLQUFLO0NBQ3RDLElBQUksQ0FBQyxNQUFNLE9BQU87Q0FDbEIsSUFBSSxNQUFNLGFBQWEsTUFBTSxJQUFJLENBQUMsR0FBRyxRQUFRLGlCQUFpQixLQUFLLEdBQUcsR0FBRyxXQUFXLFFBQVEsTUFBTSxLQUFLLElBQUksWUFBWSxJQUFJLE1BQU0sU0FBUyxNQUFNO0NBQ2hKLE9BQU8sWUFBWSxTQUFTLEtBQUssU0FBUyxLQUFLLFlBQVksS0FBSyxXQUFXLE1BQU0sYUFBYSxXQUFXLEdBQUcsQ0FBQyxLQUFLLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDeko7QUFDQSxTQUFTLG1CQUFtQixVQUFVO0NBQ3JDLEtBQUssSUFBSSxlQUFlLHVCQUF1QjtFQUM5QyxJQUFJLFlBQVksWUFBWSx1QkFBdUIsU0FBUyxNQUFNO0VBQ2xFLElBQUksV0FBVyxPQUFPO0dBQ3JCLEtBQUssU0FBUztHQUNkLEtBQUs7R0FDTCxNQUFNLENBQUM7RUFDUjtDQUNEO0NBQ0EsT0FBTztBQUNSO0FBQ0EsU0FBUyxhQUFhLE1BQU07Q0FDM0IsSUFBSSxRQUFRLG1CQUFtQixPQUFPLGtCQUFrQjtDQUN4RCxJQUFJLFVBQVUseUJBQXlCLElBQUk7Q0FDM0MsT0FBTyxPQUFPLFdBQVcsWUFBWSxrQkFBa0IsUUFBUSxTQUFTLFdBQVc7QUFDcEY7QUFDQSxTQUFTLHFCQUFxQixRQUFRO0NBQ3JDLElBQUksV0FBVyxhQUFhLE1BQU07Q0FDbEMsSUFBSSxDQUFDLFVBQVUsT0FBTztDQUN0QixJQUFJLEtBQUssaUdBQWlHLFdBQVc7Q0FDckgsT0FBTyxRQUFRLEdBQUcsS0FBSyxRQUFRLElBQUksWUFBWTtDQUMvQyxPQUFPLFlBQVksVUFBVSxLQUFLO0FBQ25DO0FBQ0EsTUFBTSxjQUFjO0FBQ3BCLFNBQVMsa0JBQWtCLFFBQVE7Q0FDbEMsSUFBSSxZQUFZLDhCQUE4QixNQUFNO0NBQ3BELElBQUksV0FBVyxPQUFPO0NBQ3RCLElBQUksbUJBQW1CLHFCQUFxQixNQUFNO0NBQ2xELElBQUksQ0FBQyxrQkFBa0IsT0FBTztDQUM5QixJQUFJO0NBQ0osSUFBSSxZQUFZLEtBQUssZ0JBQWdCLEdBQUc7RUFDdkMsSUFBSSxVQUFVLGlCQUFpQixNQUFNLGlCQUFpQixRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQ3RFLGdCQUFnQixPQUFPLEtBQUssU0FBUyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsbUJBQW1CO0NBQy9FLE9BQU8sbUJBQW1CLG1CQUFtQixRQUFRLGdCQUFnQixHQUFHLGdCQUFnQixhQUFhLGdCQUFnQjtDQUNySCxPQUFPLGdCQUFnQjtFQUN0QixLQUFLO0VBQ0wsS0FBSztDQUNOLElBQUk7QUFDTDtBQUNBLFNBQVMsa0JBQWtCLFVBQVU7Q0FDcEMsSUFBSSxDQUFDLFNBQVMsUUFBUSxPQUFPO0NBQzdCLElBQUksWUFBWSxtQkFBbUIsUUFBUTtDQUMzQyxJQUFJLGNBQWMsZUFBZSxTQUFTLFNBQVMsQ0FBQyxXQUFXO0VBQzlELElBQUksWUFBWSxrQkFBa0IsU0FBUyxNQUFNO0VBQ2pELElBQUksYUFBYSxVQUFVLEtBQUs7R0FDL0IsSUFBSSxNQUFNLFVBQVU7R0FDcEIsWUFBWSxlQUFlLFNBQVMsVUFBVTtJQUM3QztJQUNBLEtBQUssSUFBSSxXQUFXLE9BQU8sVUFBVSxPQUFPLFdBQVcsS0FBSyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHO0dBQ3RHO0dBQ0EsSUFBSSxXQUFXLFVBQVUsS0FBSyxJQUFJO0dBQ2xDLFVBQVUsT0FBTyxZQUFZLFVBQVUsSUFBSSxnQkFBZ0IsU0FBUyxRQUFRLE1BQU07SUFDakYsSUFBSSxVQUFVLFNBQVM7SUFDdkIsSUFBSSxXQUFXLFVBQVUsS0FBSztLQUM3QixJQUFJLGFBQWEsbUJBQW1CLEtBQUssTUFBTTtLQUMvQyxrQkFBa0IsY0FBYztJQUNqQztHQUNELENBQUM7RUFDRixPQUFPLFlBQVksZUFBZSxTQUFTLFVBQVU7R0FDcEQsS0FBSztHQUNMLEtBQUs7RUFDTjtDQUNEO0NBQ0EsSUFBSSxVQUFVLE9BQU8sVUFBVSxLQUFLO0VBQ25DLElBQUksbUJBQW1CLG9CQUFvQixVQUFVLEtBQUssUUFBUTtFQUNsRSxJQUFJLG9CQUFvQixpQkFBaUIsVUFBVSxNQUFNLE9BQU8saUJBQWlCLFNBQVMsbUJBQW1CLFVBQVUsS0FBSyxpQkFBaUIsTUFBTSxHQUFHLFVBQVUsU0FBUyxpQkFBaUIsUUFBUSxDQUFDLElBQUk7Q0FDeE07Q0FDQSxPQUFPO0FBQ1I7QUFDQSxTQUFTLGNBQWMsUUFBUTtDQUM5QixJQUFJLFFBQVEseUNBQXlDLEtBQUssTUFBTTtDQUNoRSxJQUFJLE9BQU87RUFDVixJQUFJLFdBQVcsa0JBQWtCO0dBQ2hDLE1BQU07R0FDTixRQUFRLE1BQU07R0FDZCxNQUFNLENBQUMsTUFBTTtHQUNiLFFBQVEsTUFBTSxLQUFLO0VBQ3BCLENBQUM7RUFDRCxPQUFPLFdBQVcsTUFBTSxHQUFHLElBQUksU0FBUyxPQUFPLEdBQUcsU0FBUyxLQUFLLEdBQUcsU0FBUyxTQUFTLEVBQUU7Q0FDeEY7Q0FDQSxPQUFPLFFBQVEsNkJBQTZCLEtBQUssTUFBTSxHQUFHLFFBQVEsV0FBVyxNQUFNLEdBQUcsSUFBSSxjQUFjLE1BQU0sRUFBRSxFQUFFLEtBQUs7QUFDeEg7QUFDQSxTQUFTLG1CQUFtQjtDQUMzQixJQUFJLFVBQVUsZUFBZTtDQUM3QixJQUFJLEtBQUssU0FBUyxHQUFHLGVBQWU7TUFDL0I7RUFDSixXQUFXLEtBQUsseUJBQXlCLEdBQUcsQ0FBQyxZQUFZLEtBQUssT0FBTyxNQUFNLGVBQWUsS0FBSyxjQUFjLEdBQUcsZ0JBQWdCLE9BQU8sV0FBVyxnQkFBZ0IsV0FBVyxnQkFBZ0I7RUFDN0wsSUFBSSxhQUFhLEtBQUssY0FBYztFQUNwQyxJQUFJLGNBQWMsTUFBTTtHQUN2QixnQkFBZ0IsSUFBSTtHQUNwQixJQUFJLGVBQWUsS0FBSyxnQkFBZ0I7R0FDeEMsaUJBQWlCLGdCQUFnQixJQUFJO0VBQ3RDO0NBQ0Q7Q0FDQSxJQUFJLE9BQU8sSUFBSSxlQUFlLEtBQUssZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsZ0JBQWdCLEtBQUssY0FBYztDQUN6RyxJQUFJLEtBQUssV0FBVyxLQUFLLGVBQWUsZ0JBQWdCLFFBQVEsT0FBTyxnQkFBZ0Isa0JBQWtCLGVBQWUsUUFBUSxnQkFBZ0IsUUFBUSxjQUFjLFlBQVksQ0FBQztNQUM5SztFQUNKLElBQUksV0FBVyxLQUFLLFlBQVk7RUFDaEMsYUFBYSxzQkFBc0IsV0FBVztFQUM5QyxJQUFJLGFBQWEsS0FBSyxjQUFjO0VBQ3BDLGdCQUFnQixZQUFZLGFBQWEsUUFBUSxRQUFRLE1BQU0sTUFBTSxRQUFRLEdBQUcsU0FBUyxLQUFLLFFBQVEsY0FBYyxjQUFjLGFBQWEsUUFBUSxJQUFJLFlBQVksTUFBTSxhQUFhLFNBQVMsV0FBVyxTQUFTLE1BQU0sUUFBUSxRQUFRLFdBQVcsT0FBTyxRQUFRLEdBQUcsU0FBUyxHQUFHLGNBQWM7Q0FDclM7Q0FDQSxPQUFPLGNBQWMsUUFBUSxLQUFLLGFBQWEsS0FBSztBQUNyRDtBQUNBLFNBQVMsY0FBYyxPQUFPO0NBQzdCLElBQUksU0FBUyxDQUFDO0NBQ2QsT0FBTyxPQUFPLG9CQUFvQixPQUFPLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLFNBQVM7RUFDakYsSUFBSSxNQUFNO0VBQ1YsT0FBTyxPQUFPLGNBQWMsS0FBSyxJQUFJLElBQUksV0FBVztHQUNuRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssS0FBSztFQUM3QixJQUFJLE1BQU07Q0FDWCxDQUFDLEdBQUcsT0FBTyxXQUFXLGtCQUFrQjtBQUN6QztBQUNBLFNBQVMsYUFBYSxPQUFPLE9BQU87Q0FDbkMsSUFBSSxVQUFVLEtBQUssTUFBTSxRQUFRO0VBQ2hDLGNBQWM7RUFDZCxhQUFhO0NBQ2QsSUFBSSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sY0FBYyxNQUFNO0NBQ3ZELElBQUksU0FBUyxNQUFNLFlBQVksS0FBSyxNQUFNLHlCQUF5QjtDQUNuRSxJQUFJLFFBQVE7RUFDWCxJQUFJLFdBQVcsa0JBQWtCO0dBQ2hDLE1BQU07R0FDTjtHQUNBLE1BQU0sTUFBTSxjQUFjLEtBQUs7R0FDL0IsU0FBUyxNQUFNLGdCQUFnQixLQUFLLEtBQUs7RUFDMUMsQ0FBQztFQUNELE1BQU0sY0FBYyxVQUFVLFFBQVEsY0FBYyxLQUFLO0VBQ3pELElBQUksdUJBQXVCLE1BQU07RUFDakMsT0FBTyxNQUFNLGtCQUFrQixXQUFXO0dBQ3pDLElBQUksT0FBTyxNQUFNLGdCQUFnQixPQUFPLHFCQUFxQixJQUFJLE1BQU0sYUFBYSxRQUFRLHFCQUFxQjtHQUNqSCxPQUFPLFNBQVMsVUFBVSxXQUFXLFdBQVcsT0FBTztFQUN4RCxHQUFHLE1BQU0sY0FBYyxXQUFXO0dBQ2pDLE9BQU8sU0FBUyxVQUFVO0VBQzNCLEdBQUcsTUFBTSxnQkFBZ0IsV0FBVztHQUNuQyxPQUFPLFNBQVM7RUFDakIsR0FBRyxNQUFNLGtCQUFrQixXQUFXO0dBQ3JDLE9BQU8sU0FBUyxTQUFTO0VBQzFCLEdBQUcsTUFBTSwyQkFBMkIsV0FBVztHQUM5QyxPQUFPLFNBQVM7RUFDakIsR0FBRztDQUNKO0NBQ0EsSUFBSSxTQUFTLE1BQU0sT0FBTyxLQUFLLE1BQU0sY0FBYztDQUNuRCxPQUFPLFVBQVUsU0FBUyxjQUFjLE1BQU0sR0FBRyxRQUFRLGNBQWMsS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLFdBQVc7RUFDL0csT0FBTyxVQUFVLEtBQUs7Q0FDdkIsR0FBRyxTQUFTO0FBQ2I7QUFDQSxTQUFTLGtCQUFrQixPQUFPLE9BQU87Q0FDeEMsSUFBSSxjQUFjLEdBQUcsTUFBTSxRQUFRLFFBQVEsSUFBSSxNQUFNLFdBQVcsTUFBTSxRQUFRO0VBQzdFLGNBQWM7RUFDZCxhQUFhO0NBQ2QsR0FBRyxpQkFBaUIsQ0FBQztDQUNyQixLQUFLLElBQUksSUFBSSxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSyxlQUFlLEtBQUssWUFBWSxhQUFhLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxNQUFNLGVBQWUsTUFBTTtDQUN6SSxPQUFPLE1BQU0sY0FBYyxNQUFNLGVBQWUsTUFBTSxjQUFjLGVBQWUsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ3JHO0FBR0EsU0FBUyx1QkFBdUIsUUFBUTtDQUN2QyxJQUFJLE9BQU8sUUFBUSx5QkFBeUIsUUFBUTtFQUNuRCxJQUFJLE9BQU8sVUFBVSxLQUFLLE1BQU0sVUFBVSxtR0FBbUc7RUFDN0ksSUFBSSxPQUFPLFFBQVEsd0JBQXdCLFlBQVksTUFBTSxVQUFVLDRJQUE0STtFQUNuTixJQUFJLG1CQUFtQixRQUFRLHFCQUFxQixDQUFDO0VBQ3JELE9BQU8sUUFBUSxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDO0NBQ3BHO0NBQ0EsT0FBTyxvQkFBb0IsUUFBUSxPQUFPLE9BQU8sUUFBUSx3QkFBd0IsV0FBVyxPQUFPLFFBQVEsdUJBQXVCLEtBQUssQ0FBQztBQUN6STtBQUdBLElBQUkscUJBQXFCLE1BQU07Q0FDOUIsY0FBYyw0Q0FBNEM7Q0FDMUQsTUFBTSxpQkFBaUIsU0FBUyxNQUFNO0VBQ3JDLE1BQU0sSUFBSSxjQUFjLHFCQUFxQixrQkFBa0IsY0FBYyxxQkFBcUIsaUJBQWlCLGtCQUFrQixvQkFBb0IsSUFBSSxDQUFDLENBQUMsUUFBUSxzQkFBc0IsUUFBUSxtQkFBbUIsUUFBUSxlQUFlLFFBQVEsc0JBQXNCLFFBQVEsa0JBQWtCLFFBQVEsaUJBQWlCLEdBQUcsT0FBTyxLQUFLLFFBQVEsb0JBQW9CO0NBQzVXO0NBQ0Esa0JBQWtCLFVBQVU7RUFDM0IsT0FBTyxPQUFPO0NBQ2Y7QUFDRDtBQUdBLE1BQU0sNkJBQTZCO0FBQThDLE1BQUEsMkJBQTJCOzs7NkJBRy9FLEtBQUssVUFBVSwwQkFBMEIsRUFBRTttQ0FDckMsS0FBSyxVQUFVLDBCQUEwQixFQUFFOzs7Ozs7Ozs7QUFTOUUsU0FBUyx5QkFBeUIsV0FBVyxTQUFTLGFBQWE7Q0FDbEUsSUFBSSxVQUFVLFdBQVcsMEJBQTBCLEdBQUc7RUFDckQsSUFBSSxPQUFPLFVBQVUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsa0JBQWtCLEtBQUssTUFBTSxJQUFJO0VBQ25GLFlBQVksaUJBQWlCLFFBQVEsWUFBWTtDQUNsRDtDQUNBLE9BQU8sWUFBWSxXQUFXLE9BQU87QUFDdEM7QUFDQSxJQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFNBQVMsMkJBQTJCO0NBQ25DLElBQUksa0JBQWtCLE9BQU87Q0FDN0IsSUFBSTtDQUNKLElBQUk7RUFDSCxTQUFTLE9BQU8sVUFBVSxNQUFNLFFBQVEsaUJBQWlCLGFBQWEsQ0FBQyxDQUFDLFNBQVMsS0FBSztDQUN2RixRQUFRO0VBQ1A7Q0FDRDtDQUNBLElBQUksUUFBUTtFQUNYLElBQUksT0FBTyxlQUFlLE9BQU8sT0FBTyxjQUFjLEVBQUUsU0FBUyx5QkFBeUIsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUc7RUFDckgsSUFBSSxPQUFPLFVBQVU7R0FDcEIsSUFBSTtJQUNILElBQUksb0JBQW9CLHdCQUF3QixVQUFVLHdCQUF3QjtJQUNsRixPQUFPLFNBQVMsaUJBQWlCO0dBQ2xDLFNBQVMsR0FBRztJQUNYLElBQUksVUFBVSxLQUFLLEVBQUUsU0FBUyxpQ0FBaUM7SUFDL0QsTUFBTTtHQUNQO0dBQ0EsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHO0VBQy9CO0NBQ0Q7QUFDRDtBQUNBLFNBQVMsZ0NBQWdDLFdBQVcsVUFBVTtDQUM3RCxPQUFPLE9BQU8sS0FBSyxRQUFRLEdBQUcsNkJBQTZCLEtBQUssVUFBVSxDQUFDLFdBQVcsUUFBUSxDQUFDLEdBQUc7QUFDbkc7QUFJQSxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHO0NBQzFDLE1BQU0sTUFBTSxzR0FBc0csT0FBTyxDQUFDLEVBQUUsV0FBVztBQUN4SSxFQUFFLENBQUM7QUFDSCxTQUFTLHdCQUF3QixZQUFZO0NBQzVDLElBQUksT0FBTyxvQkFBb0IsVUFBVSxHQUFHLFdBQVcsWUFBWSxVQUFVLGFBQWEsVUFBVTtDQUNwRyxPQUFPO0VBQ04sVUFBVSxZQUFZLGNBQWMsUUFBUSxJQUFJO0VBQ2hELFNBQVMsWUFBWSxjQUFjLE9BQU8sSUFBSTtFQUM5QyxLQUFLO0VBQ0wsS0FBSztFQUNMLFFBQVEsS0FBSyxTQUFTO0dBQ3JCLE1BQU0sTUFBTSwyREFBMkQ7RUFDeEU7RUFDQSxPQUFPO0dBQ04sTUFBTSxNQUFNLHFJQUFxSTtFQUNsSjtDQUNEO0FBQ0Q7Ozs7QUFJQSxTQUFTLHFCQUFxQixZQUFZO0NBQ3pDLElBQUksY0FBYyx3QkFBd0IsVUFBVSxHQUFHLE9BQU8sWUFBWSxLQUFLLHFCQUFxQix5QkFBeUI7Q0FDN0gsT0FBTztFQUNOLEdBQUc7RUFDSCxNQUFNLENBQUM7RUFDUCxRQUFRLElBQUksUUFBUTtHQUNuQixRQUFRLHNCQUFzQixZQUFZLFFBQUEsQ0FBUyxJQUFJLFVBQVUsSUFBSTtFQUN0RTtDQUNEO0FBQ0Q7QUFHQSxJQUFJLGVBQWUsTUFBTTtDQUN4QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLCtDQUErQyxJQUFJLElBQUk7Q0FDdkQ7Q0FDQTtDQUNBLFNBQVMsQ0FBQztDQUNWLFlBQVksU0FBUyxZQUFZLElBQUksbUJBQW1CLEdBQUcsT0FBTztFQUNqRSxJQUFJLEtBQUssVUFBVSxTQUFTLEtBQUssWUFBWSxXQUFXLEtBQUssUUFBUSxPQUFPLEtBQUssbUJBQW1CLFFBQVEsb0JBQW9CLElBQUksaUJBQWlCLEdBQUcsS0FBSyxZQUFZLCtCQUErQixRQUFRLFNBQVMsR0FBRyxRQUFRLFFBQVEsQ0FBQyxHQUFHO0dBQy9PLElBQUksYUFBYSxRQUFRLE9BQU8sQ0FBQztHQUNqQyxJQUFJLEtBQUssWUFBWSxJQUFJLFVBQVUsZUFBZSxDQUFDLEtBQUssV0FBVyxXQUFXLEtBQUssSUFBSSxZQUFZLFdBQVcsV0FBVyxDQUFDLElBQUksZ0JBQWdCLFdBQVcsUUFBUSxLQUFLLFlBQVksRUFBRSxtQkFBbUIsS0FBSyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLFNBQVMsTUFBTSxNQUFNLGlGQUFpRjtHQUN6VixLQUFLLFVBQVUsUUFBUSwwQkFBMEIsSUFBSSxDQUFDO0VBQ3ZELE9BQU8sS0FBSyxVQUFVLFVBQVU7RUFDaEMsUUFBUSx5QkFBeUIsQ0FBQyxNQUFNLEtBQUssd0JBQXdCLHVCQUF1QixJQUFJO0NBQ2pHOzs7O0NBSUEsTUFBTSxPQUFPLEtBQUs7RUFDakIsSUFBSSxnQkFBZ0IsTUFBTSxLQUFLLGFBQWEsR0FBRztFQUMvQyxPQUFPLE1BQU0sS0FBSyxjQUFjLEtBQUssYUFBYTtDQUNuRDs7OztDQUlBLGFBQWE7RUFDWixLQUFLLGlCQUFpQixNQUFNLEdBQUcsS0FBSyxXQUFXLE1BQU07Q0FDdEQ7Ozs7O0NBS0EsTUFBTSxRQUFRO0VBQ2IsS0FBSyx3QkFBd0IsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLFlBQVksS0FBSyxHQUFHLEtBQUssU0FBUyxDQUFDLEdBQUcsTUFBTSxLQUFLLFVBQVUsYUFBYTtDQUNqSTs7OztDQUlBLFdBQVc7RUFDVixPQUFPLEtBQUs7Q0FDYjtDQUNBLGNBQWMsU0FBUyxhQUFhLFVBQVU7RUFDN0MsSUFBSSxFQUFFLGlCQUFpQixjQUFjLE9BQU87RUFDNUMsSUFBSSxFQUFFLEtBQUssU0FBUztFQUNwQixPQUFPLFNBQVMsWUFBWSxTQUFTLGNBQWMsNkJBQTZCLFNBQVMsS0FBSyxNQUFNLFFBQVEsR0FBRztDQUNoSDtDQUNBLGlCQUFpQixLQUFLO0VBQ3JCLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLElBQUksSUFBSSxVQUFVLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQztFQUNuRixPQUFPLENBQUM7Q0FDVDtDQUNBLGlCQUFpQixXQUFXLFdBQVcsMEJBQTBCLElBQUksSUFBSSxHQUFHO0VBQzNFLEtBQUssSUFBSSxZQUFZLFdBQVc7R0FDL0IsSUFBSSxRQUFRLElBQUksUUFBUSxHQUFHO0dBQzNCLElBQUksUUFBUSxJQUFJLFFBQVEsR0FBRyxhQUFhLFdBQVcsT0FBTyxDQUFDO0dBQzNELElBQUksTUFBTSxLQUFLLGlCQUFpQixjQUFjLFFBQVE7R0FDdEQsSUFBSSxPQUFPLElBQUksVUFBVSxRQUFRLEtBQUssaUJBQWlCLElBQUksV0FBVyxXQUFXLE9BQU8sR0FBRyxPQUFPLENBQUM7RUFDcEc7RUFDQSxPQUFPLENBQUM7Q0FDVDtDQUNBLE1BQU0sY0FBYyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQUcsVUFBVTtFQUN2RCxJQUFJLE9BQU8sSUFBSSxNQUFNLFdBQVcsS0FBSyxJQUFJLEVBQUUsY0FBYyxLQUFLLFdBQVcsVUFBVSxVQUFVLFNBQVM7RUFDdEcsSUFBSSxZQUFZLFVBQVUsSUFBSSxRQUFRLEdBQUcsSUFBSSxhQUFhLElBQUksU0FBUyxPQUFPLEtBQUssY0FBYyxNQUFNLElBQUksU0FBUyxNQUFNLFFBQVE7RUFDbEksS0FBSyxVQUFVLFNBQVMsUUFBUSxLQUFLLEtBQUssaUJBQWlCLEdBQUcsS0FBSyxLQUFLLGlCQUFpQixXQUFXLFFBQVEsTUFBTSxJQUFJLFNBQVMsT0FBTyxLQUFLLGNBQWMsSUFBSSxTQUFTLE1BQU0sUUFBUTtFQUNwTCxJQUFJO0VBQ0osS0FBSyxVQUFVLGFBQWEsaUJBQWlCO0dBQzVDLEtBQUssTUFBTSwwQkFBMEIsU0FBUywyQkFBMkIsV0FBVyxDQUFDLEdBQUcsV0FBVyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSztFQUM3SixHQUFHLEdBQUc7RUFDTixJQUFJO0dBQ0gsSUFBSSxJQUFJLFNBQVMsT0FBTyxLQUFLLGNBQWMsTUFBTSxJQUFJLFNBQVMsTUFBTSxRQUFRO0dBQzVFLElBQUksVUFBVSxLQUFLLGNBQWMsS0FBSyxLQUFLLFNBQVM7R0FDcEQsT0FBTyxJQUFJLFVBQVUsU0FBUyxJQUFJLFlBQVksQ0FBQyxHQUFHLEtBQUssY0FBYyxNQUFNLFNBQVMsTUFBTSxRQUFRO0VBQ25HLFVBQVU7R0FDVCxJQUFJLFlBQVksQ0FBQyxHQUFHLGNBQWMsYUFBYSxVQUFVO0VBQzFEO0NBQ0Q7Q0FDQSxNQUFNLGFBQWEsS0FBSyxVQUFVO0VBQ2pDLElBQUksU0FBUyxLQUFLLDZCQUE2QixJQUFJLEdBQUc7RUFDdEQsSUFBSSxRQUFRLEtBQUssUUFBUSxnREFBZ0QsR0FBRztPQUN2RTtHQUNKLElBQUksZUFBZSxLQUFLLGlCQUFpQixlQUFlLEdBQUc7R0FDM0QsU0FBUyxLQUFLLHFCQUFxQixLQUFLLFVBQVUsWUFBWSxDQUFDLENBQUMsY0FBYztJQUM3RSxLQUFLLDZCQUE2QixPQUFPLEdBQUc7R0FDN0MsQ0FBQyxHQUFHLEtBQUssNkJBQTZCLElBQUksS0FBSyxNQUFNO0VBQ3REO0VBQ0EsT0FBTztDQUNSO0NBQ0EsaUJBQWlCO0VBQ2hCLElBQUksQ0FBQyxLQUFLLFdBQVcsT0FBTyxLQUFLLHFCQUFxQixZQUFZO0dBQ2pFLElBQUk7SUFDSCxLQUFLLFFBQVEsK0NBQStDO0lBQzVELElBQUksWUFBWSxNQUFNLEtBQUssVUFBVSxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUEsQ0FBRyxLQUFLLFlBQVksT0FBTyxXQUFXLFlBQVksV0FBVyxVQUFVLFVBQVUsUUFBUSxTQUFTLFdBQVcsUUFBUSxRQUFRLElBQUksT0FBTyxRQUFRLFFBQVEsUUFBUSxLQUFLLElBQUksT0FBTztJQUM3TyxLQUFLLFlBQVksZ0JBQWdCLFFBQVEsR0FBRyxLQUFLLFFBQVEsb0NBQW9DLFFBQVE7R0FDdEcsVUFBVTtJQUNULEtBQUssa0JBQWtCLEtBQUs7R0FDN0I7RUFDRCxFQUFBLENBQUcsR0FBRyxLQUFLO0NBQ1o7Q0FDQSxNQUFNLHFCQUFxQixLQUFLLFVBQVUsY0FBYztFQUN2RCxJQUFJLEtBQUssUUFBUSxNQUFNLE1BQU0scUNBQXFDO0VBQ2xFLE1BQU0sS0FBSyxlQUFlLEdBQUcsS0FBSyxRQUFRLDRCQUE0QixHQUFHO0VBQ3pFLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxnQkFBZ0IsWUFBWSxhQUFhLE9BQU8sZ0JBQWdCLElBQUksV0FBVyxPQUFPLEtBQUssS0FBSyxZQUFZLEdBQUcsSUFBSTtHQUMzSSxhQUFhO0dBQ2IsTUFBTTtFQUNQLElBQUksTUFBTSxLQUFLLFVBQVUsT0FBTyxlQUFlO0dBQzlDO0dBQ0E7R0FDQTtJQUNDLFFBQVE7SUFDUixhQUFhLEtBQUssVUFBVTtHQUM3QjtFQUNELENBQUM7RUFDRCxJQUFJLFdBQVcsZUFBZTtHQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxNQUFNLE1BQU0sTUFBTSxXQUFXLElBQUksaURBQWlEO0dBQ3JILE9BQU87RUFDUjtFQUNBLElBQUksV0FBVyxpQkFBaUIsZ0JBQWdCLGNBQWMsY0FBYyxjQUFjLElBQUksWUFBWSxTQUFTLGdCQUFnQixjQUFjLE1BQU0sS0FBSyxTQUFTLEtBQUssaUJBQWlCLGFBQWEsVUFBVSxTQUFTO0VBQzNOLE9BQU8sZ0JBQWdCLGlCQUFpQixjQUFjLGNBQWMsS0FBSyxpQkFBaUIsaUJBQWlCLE1BQU0sR0FBRyxjQUFjLE1BQU0sV0FBVyxjQUFjLEtBQUssVUFBVSxPQUFPLE9BQU8sZUFBZTtDQUM5TTtDQUNBLE1BQU0sY0FBYyxLQUFLLEtBQUssWUFBWTtFQUN6QyxJQUFJLGNBQWMsSUFBSSxNQUFNLFdBQVcsWUFBWSxJQUFJLFlBQVksQ0FBQyxHQUFHLFlBQVksUUFBUSxHQUFHLFVBQVUsT0FBTyxLQUFLLGFBQWE7R0FDaEksSUFBSSxXQUFXLFVBQVUsZUFBZSxZQUFZLFFBQVEsVUFBVSxTQUFTLE1BQU0sS0FBSyxhQUFhLEtBQUssUUFBUTtHQUNwSCxPQUFPLE9BQU8sVUFBVSxJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUUsR0FBRyxLQUFLLGNBQWMsS0FBSyxRQUFRLFdBQVcsUUFBUTtFQUN2SCxHQUFHLGlCQUFpQixPQUFPLFNBQVMsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLE9BQU8sUUFBUSxNQUFNLGFBQWEsYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztFQUMzSixJQUFJLGlCQUFpQixhQUFhO0dBQ2pDLElBQUksRUFBRSxnQkFBZ0I7R0FDdEIsS0FBSyxRQUFRLGlDQUFpQyxXQUFXO0dBQ3pELElBQUksVUFBVSxNQUFNLEtBQUssVUFBVSxrQkFBa0IsV0FBVztHQUNoRSxPQUFPLElBQUksVUFBVSxTQUFTO0VBQy9CO0VBQ0EsSUFBSSxFQUFFLE1BQU0sU0FBUztFQUNyQixJQUFJLFFBQVEsTUFBTTtHQUNqQixJQUFJLFdBQVcsVUFBVSxVQUFVLFNBQVM7R0FDNUMsTUFBTSxNQUFNLG1DQUFtQyxJQUFJLEdBQUcsV0FBVyxrQkFBa0IsYUFBYSxJQUFJO0VBQ3JHO0VBQ0EsSUFBSSxtQkFBbUIsS0FBSyxRQUFRLG9CQUFvQix5QkFBeUIsYUFBYSxTQUFTLFFBQVEsUUFBUSxHQUFHLE9BQU8sb0JBQW9CLFVBQVUsR0FBRyxPQUFPLE1BQU0saUJBQWlCLFVBQVUsR0FBRyxVQUFVLE9BQU8sT0FBTyxJQUFJO0VBQ3pPLE9BQU8sZUFBZSxTQUFTLE9BQU8sYUFBYTtHQUNsRCxPQUFPO0dBQ1AsWUFBWSxDQUFDO0dBQ2IsY0FBYyxDQUFDO0VBQ2hCLENBQUMsR0FBRyxJQUFJLFVBQVU7RUFDbEIsSUFBSTtFQUNKLEtBQUssYUFBYSxPQUFPLGVBQWUsTUFBTSxPQUFPO0dBQ3BELFlBQVksQ0FBQztHQUNiLFdBQVc7SUFDVixJQUFJLENBQUMsS0FBSyxXQUFXLE1BQU0sTUFBTSx3Q0FBd0M7SUFDekUsT0FBTyxLQUFLLFFBQVEsNENBQTRDLElBQUksR0FBRyxHQUFHLGVBQWUsSUFBSSxXQUFXLEtBQUssV0FBVyxJQUFJLEdBQUcsR0FBRztHQUNuSTtHQUNBLE1BQU0sVUFBVTtJQUNmLGFBQWE7R0FDZDtFQUNELENBQUM7RUFDRCxJQUFJLFVBQVU7SUFDWixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixtQkFBbUIsUUFBUSxVQUFVLFNBQVMsR0FBRztJQUNqRCxvQkFBb0IsTUFBTSxXQUFXLE9BQU8sZUFBZSxTQUFTLE1BQU07SUFDMUUsWUFBWSxDQUFDO0lBQ2IsY0FBYyxDQUFDO0lBQ2YsS0FBSztHQUNOLENBQUM7SUFDQSxtQkFBbUI7RUFDckI7RUFDQSxPQUFPLEtBQUssUUFBUSw2QkFBNkIsSUFBSSxHQUFHLE1BQU0sS0FBSyxVQUFVLGlCQUFpQixTQUFTLE1BQU0sR0FBRyxHQUFHO0NBQ3BIO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsU0FBUyxjQUFjO0NBQ3pDLElBQUksWUFBWSxnQkFBZ0IsRUFBRSxZQUFZLFlBQVksS0FBSyxNQUFNLFFBQVEsWUFBWSxLQUFLLHdCQUF3QixVQUNySDtPQUFLLElBQUksT0FBTyxjQUFjLElBQUksUUFBUSxhQUFhLFFBQVEsZ0JBQWdCLEVBQUUsT0FBTyxVQUFVLElBQUk7R0FDckcsT0FBTyxlQUFlLFNBQVMsS0FBSztJQUNuQyxZQUFZLENBQUM7SUFDYixjQUFjLENBQUM7SUFDZixXQUFXLGFBQWE7R0FDekIsQ0FBQztFQUNGLFFBQVEsQ0FBQzs7QUFFWCJ9
1265
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXJ1bm5lci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZUA4LjAuM19AZW1uYXBpK2NvcmVAMS4xMS4yX0BlbW5hcGkrcnVudGltZUAxLjExLjJfQHR5cGVzK25vZGVAMjUuMC43X2VzYnVpbGRAMC4yNy40XzViMzVmYzFmYjg1ZDJhZjRkMTA1ZTBkNzRmOTQwZjUwL25vZGVfbW9kdWxlcy92aXRlL2Rpc3Qvbm9kZS9tb2R1bGUtcnVubmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBTT1VSQ0VNQVBQSU5HX1VSTCA9IFwic291cmNlTWFcIjtcblNPVVJDRU1BUFBJTkdfVVJMICs9IFwicHBpbmdVUkxcIjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvdXRpbHMudHNcbmNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzIDwgXCJ1XCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuLyoqXG4qIFVuZG8ge0BsaW5rIHdyYXBJZH0ncyBgL0BpZC9gIGFuZCBudWxsIGJ5dGUgcmVwbGFjZW1lbnRzLlxuKi9cbmZ1bmN0aW9uIHVud3JhcElkKGlkKSB7XG5cdHJldHVybiBpZC5zdGFydHNXaXRoKFwiL0BpZC9cIikgPyBpZC5zbGljZSg1KS5yZXBsYWNlKFwiX194MDBfX1wiLCBcIlxcMFwiKSA6IGlkO1xufVxuY29uc3Qgd2luZG93c1NsYXNoUkUgPSAvXFxcXC9nO1xuZnVuY3Rpb24gc2xhc2gocCkge1xuXHRyZXR1cm4gcC5yZXBsYWNlKHdpbmRvd3NTbGFzaFJFLCBcIi9cIik7XG59XG5jb25zdCBwb3N0Zml4UkUgPSAvWz8jXS4qJC87XG5mdW5jdGlvbiBjbGVhblVybCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKHBvc3RmaXhSRSwgXCJcIik7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPSBcImZ1bmN0aW9uXCI7XG59XG5jb25zdCBBc3luY0Z1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24oKSB7fS5jb25zdHJ1Y3RvcjtcbmxldCBhc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50O1xuZnVuY3Rpb24gZ2V0QXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCgpIHtcblx0aWYgKGFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblBhZGRpbmdMaW5lQ291bnQgPT09IHZvaWQgMCkge1xuXHRcdGxldCBib2R5ID0gXCIvKmNvZGUqL1wiLCBzb3VyY2UgPSBuZXcgQXN5bmNGdW5jdGlvbihcImFcIiwgXCJiXCIsIGJvZHkpLnRvU3RyaW5nKCk7XG5cdFx0YXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCA9IHNvdXJjZS5zbGljZSgwLCBzb3VyY2UuaW5kZXhPZihib2R5KSkuc3BsaXQoXCJcXG5cIikubGVuZ3RoIC0gMTtcblx0fVxuXHRyZXR1cm4gYXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudDtcbn1cbmZ1bmN0aW9uIHByb21pc2VXaXRoUmVzb2x2ZXJzKCkge1xuXHRsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuXHRyZXR1cm4ge1xuXHRcdHByb21pc2U6IG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IF9yZXNvbHZlLCByZWplY3QgPSBfcmVqZWN0O1xuXHRcdH0pLFxuXHRcdHJlc29sdmUsXG5cdFx0cmVqZWN0XG5cdH07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMi4wLjMvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3Qvc2hhcmVkL3BhdGhlLk0tZVRodE5aLm1qc1xuY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuXHRyZXR1cm4gaW5wdXQgJiYgaW5wdXQucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZShfRFJJVkVfTEVUVEVSX1NUQVJUX1JFLCAocikgPT4gci50b1VwcGVyQ2FzZSgpKTtcbn1cbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS8sIF9EUklWRV9MRVRURVJfUkUgPSAvXltBLVphLXpdOiQvO1xuZnVuY3Rpb24gY3dkKCkge1xuXHRyZXR1cm4gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT0gXCJmdW5jdGlvblwiID8gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSA6IFwiL1wiO1xufVxuY29uc3QgcmVzb2x2ZSA9IGZ1bmN0aW9uKC4uLmFyZ3VtZW50c18pIHtcblx0YXJndW1lbnRzXyA9IGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT4gbm9ybWFsaXplV2luZG93c1BhdGgoYXJndW1lbnQpKTtcblx0bGV0IHJlc29sdmVkUGF0aCA9IFwiXCIsIHJlc29sdmVkQWJzb2x1dGUgPSAhMTtcblx0Zm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG5cdFx0bGV0IHBhdGggPSBpbmRleCA+PSAwID8gYXJndW1lbnRzX1tpbmRleF0gOiBjd2QoKTtcblx0XHQhcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCB8fCAocmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YCwgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCkpO1xuXHR9XG5cdHJldHVybiByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSksIHJlc29sdmVkQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aC5sZW5ndGggPiAwID8gcmVzb2x2ZWRQYXRoIDogXCIuXCI7XG59O1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG5cdGxldCByZXMgPSBcIlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDAsIGxhc3RTbGFzaCA9IC0xLCBkb3RzID0gMCwgY2hhciA9IG51bGw7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcblx0XHRpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkgY2hhciA9IHBhdGhbaW5kZXhdO1xuXHRcdGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSBicmVhaztcblx0XHRlbHNlIGNoYXIgPSBcIi9cIjtcblx0XHRpZiAoY2hhciA9PT0gXCIvXCIpIHtcblx0XHRcdGlmICghKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpKSBpZiAoZG90cyA9PT0gMikge1xuXHRcdFx0XHRpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcblx0XHRcdFx0XHRpZiAocmVzLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRcdGxldCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdFx0XHRsYXN0U2xhc2hJbmRleCA9PT0gLTEgPyAocmVzID0gXCJcIiwgbGFzdFNlZ21lbnRMZW5ndGggPSAwKSA6IChyZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpLCBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKSksIGxhc3RTbGFzaCA9IGluZGV4LCBkb3RzID0gMDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJlcyA9IFwiXCIsIGxhc3RTZWdtZW50TGVuZ3RoID0gMCwgbGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFsbG93QWJvdmVSb290ICYmIChyZXMgKz0gcmVzLmxlbmd0aCA+IDAgPyBcIi8uLlwiIDogXCIuLlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDIpO1xuXHRcdFx0fSBlbHNlIHJlcy5sZW5ndGggPiAwID8gcmVzICs9IGAvJHtwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KX1gIDogcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCksIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxO1xuXHRcdFx0bGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdH0gZWxzZSBjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSA/ICsrZG90cyA6IGRvdHMgPSAtMTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcblx0cmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufSwgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcblx0bGV0IHNlZ21lbnRzID0gbm9ybWFsaXplV2luZG93c1BhdGgocCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSk7XG5cdHJldHVybiBzZWdtZW50cy5sZW5ndGggPT09IDEgJiYgX0RSSVZFX0xFVFRFUl9SRS50ZXN0KHNlZ21lbnRzWzBdKSAmJiAoc2VnbWVudHNbMF0gKz0gXCIvXCIpLCBzZWdtZW50cy5qb2luKFwiL1wiKSB8fCAoaXNBYnNvbHV0ZShwKSA/IFwiL1wiIDogXCIuXCIpO1xufSwgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKSwgZGVjb2RlQmFzZTY0ID0gdHlwZW9mIEJ1ZmZlciA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIEJ1ZmZlci5mcm9tID09IFwiZnVuY3Rpb25cIiA/IChiYXNlNjQpID0+IEJ1ZmZlci5mcm9tKGJhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSA6IChiYXNlNjQpID0+IHRleHREZWNvZGVyLmRlY29kZShVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjQpLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSksIHBlcmNlbnRSZWdFeCA9IC8lL2csIGJhY2tzbGFzaFJlZ0V4ID0gL1xcXFwvZywgbmV3bGluZVJlZ0V4ID0gL1xcbi9nLCBjYXJyaWFnZVJldHVyblJlZ0V4ID0gL1xcci9nLCB0YWJSZWdFeCA9IC9cXHQvZywgcXVlc3Rpb25SZWdleCA9IC9cXD8vZywgaGFzaFJlZ2V4ID0gLyMvZztcbmZ1bmN0aW9uIGVuY29kZVBhdGhDaGFycyhmaWxlcGF0aCkge1xuXHRyZXR1cm4gZmlsZXBhdGguaW5kZXhPZihcIiVcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UocGVyY2VudFJlZ0V4LCBcIiUyNVwiKSksICFpc1dpbmRvd3MgJiYgZmlsZXBhdGguaW5kZXhPZihcIlxcXFxcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UoYmFja3NsYXNoUmVnRXgsIFwiJTVDXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcblwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShuZXdsaW5lUmVnRXgsIFwiJTBBXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcclwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShjYXJyaWFnZVJldHVyblJlZ0V4LCBcIiUwRFwiKSksIGZpbGVwYXRoLmluZGV4T2YoXCJcdFwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZSh0YWJSZWdFeCwgXCIlMDlcIikpLCBmaWxlcGF0aDtcbn1cbmNvbnN0IHBvc2l4RGlybmFtZSA9IGRpcm5hbWUsIHBvc2l4UmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiBwb3NpeFBhdGhUb0ZpbGVIcmVmKHBvc2l4UGF0aCkge1xuXHRsZXQgcmVzb2x2ZWQgPSBwb3NpeFJlc29sdmUocG9zaXhQYXRoKSwgZmlsZVBhdGhMYXN0ID0gcG9zaXhQYXRoLmNoYXJDb2RlQXQocG9zaXhQYXRoLmxlbmd0aCAtIDEpO1xuXHRyZXR1cm4gKGZpbGVQYXRoTGFzdCA9PT0gNDcgfHwgaXNXaW5kb3dzICYmIGZpbGVQYXRoTGFzdCA9PT0gOTIpICYmIHJlc29sdmVkW3Jlc29sdmVkLmxlbmd0aCAtIDFdICE9PSBcIi9cIiAmJiAocmVzb2x2ZWQgKz0gXCIvXCIpLCByZXNvbHZlZCA9IGVuY29kZVBhdGhDaGFycyhyZXNvbHZlZCksIHJlc29sdmVkLmluZGV4T2YoXCI/XCIpICE9PSAtMSAmJiAocmVzb2x2ZWQgPSByZXNvbHZlZC5yZXBsYWNlKHF1ZXN0aW9uUmVnZXgsIFwiJTNGXCIpKSwgcmVzb2x2ZWQuaW5kZXhPZihcIiNcIikgIT09IC0xICYmIChyZXNvbHZlZCA9IHJlc29sdmVkLnJlcGxhY2UoaGFzaFJlZ2V4LCBcIiUyM1wiKSksIG5ldyBVUkwoYGZpbGU6Ly8ke3Jlc29sdmVkfWApLmhyZWY7XG59XG5mdW5jdGlvbiB0b1dpbmRvd3NQYXRoKHBhdGgpIHtcblx0cmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanNcbnZhciBjb21tYSA9IDQ0LCBjaGFycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCksIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG5cdGxldCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcblx0aW50VG9DaGFyW2ldID0gYywgY2hhclRvSW50W2NdID0gaTtcbn1cbmZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyLCByZWxhdGl2ZSkge1xuXHRsZXQgdmFsdWUgPSAwLCBzaGlmdCA9IDAsIGludGVnZXIgPSAwO1xuXHRkb1xuXHRcdGludGVnZXIgPSBjaGFyVG9JbnRbcmVhZGVyLm5leHQoKV0sIHZhbHVlIHw9IChpbnRlZ2VyICYgMzEpIDw8IHNoaWZ0LCBzaGlmdCArPSA1O1xuXHR3aGlsZSAoaW50ZWdlciAmIDMyKTtcblx0bGV0IHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcblx0cmV0dXJuIHZhbHVlID4+Pj0gMSwgc2hvdWxkTmVnYXRlICYmICh2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlKSwgcmVsYXRpdmUgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhc01vcmVWbHEocmVhZGVyLCBtYXgpIHtcblx0cmV0dXJuIHJlYWRlci5wb3MgPj0gbWF4ID8gITEgOiByZWFkZXIucGVlaygpICE9PSBjb21tYTtcbn1cbnZhciBTdHJpbmdSZWFkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlcikge1xuXHRcdHRoaXMucG9zID0gMCwgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdH1cblx0bmV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcblx0fVxuXHRwZWVrKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblx0fVxuXHRpbmRleE9mKGNoYXIpIHtcblx0XHRsZXQgeyBidWZmZXIsIHBvcyB9ID0gdGhpcywgaWR4ID0gYnVmZmVyLmluZGV4T2YoY2hhciwgcG9zKTtcblx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IGJ1ZmZlci5sZW5ndGggOiBpZHg7XG5cdH1cbn07XG5mdW5jdGlvbiBkZWNvZGUobWFwcGluZ3MpIHtcblx0bGV0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncywgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihtYXBwaW5ncyksIGRlY29kZWQgPSBbXSwgZ2VuQ29sdW1uID0gMCwgc291cmNlc0luZGV4ID0gMCwgc291cmNlTGluZSA9IDAsIHNvdXJjZUNvbHVtbiA9IDAsIG5hbWVzSW5kZXggPSAwO1xuXHRkbyB7XG5cdFx0bGV0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIiksIGxpbmUgPSBbXSwgc29ydGVkID0gITAsIGxhc3RDb2wgPSAwO1xuXHRcdGZvciAoZ2VuQ29sdW1uID0gMDsgcmVhZGVyLnBvcyA8IHNlbWk7KSB7XG5cdFx0XHRsZXQgc2VnO1xuXHRcdFx0Z2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbiksIGdlbkNvbHVtbiA8IGxhc3RDb2wgJiYgKHNvcnRlZCA9ICExKSwgbGFzdENvbCA9IGdlbkNvbHVtbiwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKHNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VzSW5kZXgpLCBzb3VyY2VMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUxpbmUpLCBzb3VyY2VDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlQ29sdW1uKSwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKG5hbWVzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbmFtZXNJbmRleCksIHNlZyA9IFtcblx0XHRcdFx0Z2VuQ29sdW1uLFxuXHRcdFx0XHRzb3VyY2VzSW5kZXgsXG5cdFx0XHRcdHNvdXJjZUxpbmUsXG5cdFx0XHRcdHNvdXJjZUNvbHVtbixcblx0XHRcdFx0bmFtZXNJbmRleFxuXHRcdFx0XSkgOiBzZWcgPSBbXG5cdFx0XHRcdGdlbkNvbHVtbixcblx0XHRcdFx0c291cmNlc0luZGV4LFxuXHRcdFx0XHRzb3VyY2VMaW5lLFxuXHRcdFx0XHRzb3VyY2VDb2x1bW5cblx0XHRcdF0pIDogc2VnID0gW2dlbkNvbHVtbl0sIGxpbmUucHVzaChzZWcpLCByZWFkZXIucG9zKys7XG5cdFx0fVxuXHRcdHNvcnRlZCB8fCBzb3J0KGxpbmUpLCBkZWNvZGVkLnB1c2gobGluZSksIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcblx0fSB3aGlsZSAocmVhZGVyLnBvcyA8PSBsZW5ndGgpO1xuXHRyZXR1cm4gZGVjb2RlZDtcbn1cbmZ1bmN0aW9uIHNvcnQobGluZSkge1xuXHRsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYSwgYikge1xuXHRyZXR1cm4gYVswXSAtIGJbMF07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGpyaWRnZXdlbGwrdHJhY2UtbWFwcGluZ0AwLjMuMzEvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvZGlzdC90cmFjZS1tYXBwaW5nLm1qc1xudmFyIENPTFVNTiA9IDAsIFNPVVJDRVNfSU5ERVggPSAxLCBTT1VSQ0VfTElORSA9IDIsIFNPVVJDRV9DT0xVTU4gPSAzLCBOQU1FU19JTkRFWCA9IDQsIGZvdW5kID0gITE7XG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSB7XG5cdGZvciAoOyBsb3cgPD0gaGlnaDspIHtcblx0XHRsZXQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cgPj4gMSksIGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblx0XHRpZiAoY21wID09PSAwKSByZXR1cm4gZm91bmQgPSAhMCwgbWlkO1xuXHRcdGNtcCA8IDAgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZCAtIDE7XG5cdH1cblx0cmV0dXJuIGZvdW5kID0gITEsIGxvdyAtIDE7XG59XG5mdW5jdGlvbiB1cHBlckJvdW5kKGhheXN0YWNrLCBuZWVkbGUsIGluZGV4KSB7XG5cdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBoYXlzdGFjay5sZW5ndGggJiYgaGF5c3RhY2tbaV1bQ09MVU1OXSA9PT0gbmVlZGxlOyBpbmRleCA9IGkrKyk7XG5cdHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGxvd2VyQm91bmQoaGF5c3RhY2ssIG5lZWRsZSwgaW5kZXgpIHtcblx0Zm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwICYmIGhheXN0YWNrW2ldW0NPTFVNTl0gPT09IG5lZWRsZTsgaW5kZXggPSBpLS0pO1xuXHRyZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChoYXlzdGFjaywgbmVlZGxlLCBzdGF0ZSwga2V5KSB7XG5cdGxldCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGUsIGxvdyA9IDAsIGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuXHRpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG5cdFx0aWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkgcmV0dXJuIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZSwgbGFzdEluZGV4O1xuXHRcdG5lZWRsZSA+PSBsYXN0TmVlZGxlID8gbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXggOiBoaWdoID0gbGFzdEluZGV4O1xuXHR9XG5cdHJldHVybiBzdGF0ZS5sYXN0S2V5ID0ga2V5LCBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlLCBzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKTtcbn1cbnZhciBMSU5FX0dUUl9aRVJPID0gXCJgbGluZWAgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCAobGluZXMgc3RhcnQgYXQgbGluZSAxKVwiLCBDT0xfR1RSX0VRX1pFUk8gPSBcImBjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApXCI7XG5mdW5jdGlvbiBjYXN0KG1hcCkge1xuXHRyZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcCkge1xuXHR2YXIgX2E7XG5cdHJldHVybiAoX2EgPSBjYXN0KG1hcCkpLl9kZWNvZGVkIHx8IChfYS5fZGVjb2RlZCA9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQpKTtcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsUG9zaXRpb25Gb3IobWFwLCBuZWVkbGUpIHtcblx0bGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG5cdGlmIChsaW5lLS0sIGxpbmUgPCAwKSB0aHJvdyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcblx0aWYgKGNvbHVtbiA8IDApIHRocm93IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cdGxldCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cdGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV0sIGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCAxKTtcblx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXHRsZXQgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcblx0aWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblx0cmV0dXJuIE9NYXBwaW5nKHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSwgc2VnbWVudFtTT1VSQ0VfTElORV0gKyAxLCBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLCBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwpO1xufVxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUpIHtcblx0cmV0dXJuIHtcblx0XHRzb3VyY2UsXG5cdFx0bGluZSxcblx0XHRjb2x1bW4sXG5cdFx0bmFtZVxuXHR9O1xufVxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcykge1xuXHRsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcblx0cmV0dXJuIGZvdW5kID8gaW5kZXggPSAoYmlhcyA9PT0gLTEgPyB1cHBlckJvdW5kIDogbG93ZXJCb3VuZCkoc2VnbWVudHMsIGNvbHVtbiwgaW5kZXgpIDogYmlhcyA9PT0gLTEgJiYgaW5kZXgrKywgaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggPyAtMSA6IGluZGV4O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvc291cmNlbWFwL2RlY29kZXIudHNcbnZhciBEZWNvZGVkTWFwID0gY2xhc3Mge1xuXHRfZW5jb2RlZDtcblx0X2RlY29kZWQ7XG5cdF9kZWNvZGVkTWVtbztcblx0dXJsO1xuXHRmaWxlO1xuXHR2ZXJzaW9uO1xuXHRuYW1lcyA9IFtdO1xuXHRyZXNvbHZlZFNvdXJjZXM7XG5cdGNvbnN0cnVjdG9yKG1hcCwgZnJvbSkge1xuXHRcdHRoaXMubWFwID0gbWFwO1xuXHRcdGxldCB7IG1hcHBpbmdzLCBuYW1lcywgc291cmNlcyB9ID0gbWFwO1xuXHRcdHRoaXMudmVyc2lvbiA9IG1hcC52ZXJzaW9uLCB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW10sIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncyB8fCBcIlwiLCB0aGlzLl9kZWNvZGVkTWVtbyA9IG1lbW9pemVkU3RhdGUoKSwgdGhpcy51cmwgPSBmcm9tLCB0aGlzLmZpbGUgPSBmcm9tO1xuXHRcdGxldCBvcmlnaW5EaXIgPSBwb3NpeERpcm5hbWUoZnJvbSk7XG5cdFx0dGhpcy5yZXNvbHZlZFNvdXJjZXMgPSAoc291cmNlcyB8fCBbXSkubWFwKChzKSA9PiBwb3NpeFJlc29sdmUob3JpZ2luRGlyLCBzIHx8IFwiXCIpKTtcblx0fVxufTtcbmZ1bmN0aW9uIG1lbW9pemVkU3RhdGUoKSB7XG5cdHJldHVybiB7XG5cdFx0bGFzdEtleTogLTEsXG5cdFx0bGFzdE5lZWRsZTogLTEsXG5cdFx0bGFzdEluZGV4OiAtMVxuXHR9O1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxQb3NpdGlvbihtYXAsIG5lZWRsZSkge1xuXHRsZXQgcmVzdWx0ID0gb3JpZ2luYWxQb3NpdGlvbkZvcihtYXAsIG5lZWRsZSk7XG5cdHJldHVybiByZXN1bHQuY29sdW1uID09IG51bGwgPyBudWxsIDogcmVzdWx0O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvZXZhbHVhdGVkTW9kdWxlcy50c1xuY29uc3QgTU9EVUxFX1JVTk5FUl9TT1VSQ0VNQVBQSU5HX1JFR0VYUCA9IFJlZ0V4cChgLy8jICR7U09VUkNFTUFQUElOR19VUkx9PWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsKC4rKWApO1xudmFyIEV2YWx1YXRlZE1vZHVsZU5vZGUgPSBjbGFzcyB7XG5cdGltcG9ydGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGltcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRldmFsdWF0ZWQgPSAhMTtcblx0bWV0YTtcblx0cHJvbWlzZTtcblx0ZXhwb3J0cztcblx0ZmlsZTtcblx0bWFwO1xuXHRjb25zdHJ1Y3RvcihpZCwgdXJsKSB7XG5cdFx0dGhpcy5pZCA9IGlkLCB0aGlzLnVybCA9IHVybCwgdGhpcy5maWxlID0gY2xlYW5VcmwoaWQpO1xuXHR9XG59LCBFdmFsdWF0ZWRNb2R1bGVzID0gY2xhc3Mge1xuXHRpZFRvTW9kdWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0ZmlsZVRvTW9kdWxlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHVybFRvSWRNb2R1bGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHQvKipcblx0KiBSZXR1cm5zIHRoZSBtb2R1bGUgbm9kZSBieSB0aGUgcmVzb2x2ZWQgbW9kdWxlIElELiBVc3VhbGx5LCBtb2R1bGUgSUQgaXNcblx0KiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCB3aXRoIHF1ZXJ5IGFuZC9vciBoYXNoLiBJdCBjYW4gYWxzbyBiZSBhIHZpcnR1YWwgbW9kdWxlLlxuXHQqXG5cdCogTW9kdWxlIHJ1bm5lciBncmFwaCB3aWxsIGhhdmUgMSB0byAxIG1hcHBpbmcgd2l0aCB0aGUgc2VydmVyIG1vZHVsZSBncmFwaC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZUJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5pZFRvTW9kdWxlTWFwLmdldChpZCk7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJucyBhbGwgbW9kdWxlcyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBwYXRoLiBEaWZmZXJlbnQgbW9kdWxlc1xuXHQqIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGFzaCwgc28gaXQncyBwb3NzaWJsZSB0byBoYXZlXG5cdCogbXVsdGlwbGUgbW9kdWxlcyBmb3IgdGhlIHNhbWUgZmlsZS5cblx0KiBAcGFyYW0gZmlsZSBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvZiB0aGUgbW9kdWxlXG5cdCovXG5cdGdldE1vZHVsZXNCeUZpbGUoZmlsZSkge1xuXHRcdHJldHVybiB0aGlzLmZpbGVUb01vZHVsZXNNYXAuZ2V0KGZpbGUpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgdGhlIG1vZHVsZSBub2RlIGJ5IHRoZSBVUkwgdGhhdCB3YXMgdXNlZCBpbiB0aGUgaW1wb3J0IHN0YXRlbWVudC5cblx0KiBVbmxpa2UgbW9kdWxlIGdyYXBoIG9uIHRoZSBzZXJ2ZXIsIHRoZSBVUkwgaXMgbm90IHJlc29sdmVkIGFuZCBpcyB1c2VkIGFzIGlzLlxuXHQqIEBwYXJhbSB1cmwgU2VydmVyIFVSTCB0aGF0IHdhcyB1c2VkIGluIHRoZSBpbXBvcnQgc3RhdGVtZW50XG5cdCovXG5cdGdldE1vZHVsZUJ5VXJsKHVybCkge1xuXHRcdHJldHVybiB0aGlzLnVybFRvSWRNb2R1bGVNYXAuZ2V0KHVud3JhcElkKHVybCkpO1xuXHR9XG5cdC8qKlxuXHQqIEVuc3VyZSB0aGF0IG1vZHVsZSBpcyBpbiB0aGUgZ3JhcGguIElmIHRoZSBtb2R1bGUgaXMgYWxyZWFkeSBpbiB0aGUgZ3JhcGgsXG5cdCogaXQgd2lsbCByZXR1cm4gdGhlIGV4aXN0aW5nIG1vZHVsZSBub2RlLiBPdGhlcndpc2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3XG5cdCogbW9kdWxlIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguXG5cdCogQHBhcmFtIGlkIFJlc29sdmVkIG1vZHVsZSBJRFxuXHQqIEBwYXJhbSB1cmwgVVJMIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGltcG9ydCBzdGF0ZW1lbnRcblx0Ki9cblx0ZW5zdXJlTW9kdWxlKGlkLCB1cmwpIHtcblx0XHRpZiAoaWQgPSBub3JtYWxpemVNb2R1bGVJZChpZCksIHRoaXMuaWRUb01vZHVsZU1hcC5oYXMoaWQpKSB7XG5cdFx0XHRsZXQgbW9kdWxlTm9kZSA9IHRoaXMuaWRUb01vZHVsZU1hcC5nZXQoaWQpO1xuXHRcdFx0cmV0dXJuIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5zZXQodXJsLCBtb2R1bGVOb2RlKSwgbW9kdWxlTm9kZTtcblx0XHR9XG5cdFx0bGV0IG1vZHVsZU5vZGUgPSBuZXcgRXZhbHVhdGVkTW9kdWxlTm9kZShpZCwgdXJsKTtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuc2V0KGlkLCBtb2R1bGVOb2RlKSwgdGhpcy51cmxUb0lkTW9kdWxlTWFwLnNldCh1cmwsIG1vZHVsZU5vZGUpO1xuXHRcdGxldCBmaWxlTW9kdWxlcyA9IHRoaXMuZmlsZVRvTW9kdWxlc01hcC5nZXQobW9kdWxlTm9kZS5maWxlKSB8fCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdHJldHVybiBmaWxlTW9kdWxlcy5hZGQobW9kdWxlTm9kZSksIHRoaXMuZmlsZVRvTW9kdWxlc01hcC5zZXQobW9kdWxlTm9kZS5maWxlLCBmaWxlTW9kdWxlcyksIG1vZHVsZU5vZGU7XG5cdH1cblx0aW52YWxpZGF0ZU1vZHVsZShub2RlKSB7XG5cdFx0bm9kZS5ldmFsdWF0ZWQgPSAhMSwgbm9kZS5tZXRhID0gdm9pZCAwLCBub2RlLm1hcCA9IHZvaWQgMCwgbm9kZS5wcm9taXNlID0gdm9pZCAwLCBub2RlLmV4cG9ydHMgPSB2b2lkIDAsIG5vZGUuaW1wb3J0cy5jbGVhcigpO1xuXHR9XG5cdC8qKlxuXHQqIEV4dHJhY3RzIHRoZSBpbmxpbmVkIHNvdXJjZSBtYXAgZnJvbSB0aGUgbW9kdWxlIGNvZGUgYW5kIHJldHVybnMgdGhlIGRlY29kZWRcblx0KiBzb3VyY2UgbWFwLiBJZiB0aGUgc291cmNlIG1hcCBpcyBub3QgaW5saW5lZCwgaXQgd2lsbCByZXR1cm4gbnVsbC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZVNvdXJjZU1hcEJ5SWQoaWQpIHtcblx0XHRsZXQgbW9kID0gdGhpcy5nZXRNb2R1bGVCeUlkKGlkKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKG1vZC5tYXApIHJldHVybiBtb2QubWFwO1xuXHRcdGlmICghbW9kLm1ldGEgfHwgIShcImNvZGVcIiBpbiBtb2QubWV0YSkpIHJldHVybiBudWxsO1xuXHRcdGxldCBwYXR0ZXJuID0gYC8vIyAke1NPVVJDRU1BUFBJTkdfVVJMfT1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGAsIGxhc3RJbmRleCA9IG1vZC5tZXRhLmNvZGUubGFzdEluZGV4T2YocGF0dGVybik7XG5cdFx0aWYgKGxhc3RJbmRleCA9PT0gLTEpIHJldHVybiBudWxsO1xuXHRcdGxldCBtYXBTdHJpbmcgPSBNT0RVTEVfUlVOTkVSX1NPVVJDRU1BUFBJTkdfUkVHRVhQLmV4ZWMobW9kLm1ldGEuY29kZS5zbGljZShsYXN0SW5kZXgpKT8uWzFdO1xuXHRcdHJldHVybiBtYXBTdHJpbmcgPyAobW9kLm1hcCA9IG5ldyBEZWNvZGVkTWFwKEpTT04ucGFyc2UoZGVjb2RlQmFzZTY0KG1hcFN0cmluZykpLCBtb2QuZmlsZSksIG1vZC5tYXApIDogbnVsbDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuY2xlYXIoKSwgdGhpcy5maWxlVG9Nb2R1bGVzTWFwLmNsZWFyKCksIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5jbGVhcigpO1xuXHR9XG59O1xuY29uc3QgcHJlZml4ZWRCdWlsdGlucyA9IG5ldyBTZXQoW1xuXHRcIm5vZGU6c2VhXCIsXG5cdFwibm9kZTpzcWxpdGVcIixcblx0XCJub2RlOnRlc3RcIixcblx0XCJub2RlOnRlc3QvcmVwb3J0ZXJzXCJcbl0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlSWQoZmlsZSkge1xuXHRyZXR1cm4gcHJlZml4ZWRCdWlsdGlucy5oYXMoZmlsZSkgPyBmaWxlIDogc2xhc2goZmlsZSkucmVwbGFjZSgvXlxcL0Bmc1xcLy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIikucmVwbGFjZSgvXm5vZGU6LywgXCJcIikucmVwbGFjZSgvXlxcLysvLCBcIi9cIikucmVwbGFjZSgvXmZpbGU6XFwvKy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIik7XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hhcmVkL2htci50c1xudmFyIEhNUkNvbnRleHQgPSBjbGFzcyB7XG5cdG5ld0xpc3RlbmVycztcblx0Y29uc3RydWN0b3IoaG1yQ2xpZW50LCBvd25lclBhdGgpIHtcblx0XHR0aGlzLmhtckNsaWVudCA9IGhtckNsaWVudCwgdGhpcy5vd25lclBhdGggPSBvd25lclBhdGgsIGhtckNsaWVudC5kYXRhTWFwLmhhcyhvd25lclBhdGgpIHx8IGhtckNsaWVudC5kYXRhTWFwLnNldChvd25lclBhdGgsIHt9KTtcblx0XHRsZXQgbW9kID0gaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuZ2V0KG93bmVyUGF0aCk7XG5cdFx0bW9kICYmIChtb2QuY2FsbGJhY2tzID0gW10pO1xuXHRcdGxldCBzdGFsZUxpc3RlbmVycyA9IGhtckNsaWVudC5jdHhUb0xpc3RlbmVyc01hcC5nZXQob3duZXJQYXRoKTtcblx0XHRpZiAoc3RhbGVMaXN0ZW5lcnMpIGZvciAobGV0IFtldmVudCwgc3RhbGVGbnNdIG9mIHN0YWxlTGlzdGVuZXJzKSB7XG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXHRcdFx0bGlzdGVuZXJzICYmIGhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXAuc2V0KGV2ZW50LCBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhc3RhbGVGbnMuaW5jbHVkZXMobCkpKTtcblx0XHR9XG5cdFx0dGhpcy5uZXdMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBobXJDbGllbnQuY3R4VG9MaXN0ZW5lcnNNYXAuc2V0KG93bmVyUGF0aCwgdGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdGdldCBkYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmhtckNsaWVudC5kYXRhTWFwLmdldCh0aGlzLm93bmVyUGF0aCk7XG5cdH1cblx0YWNjZXB0KGRlcHMsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKHR5cGVvZiBkZXBzID09IFwiZnVuY3Rpb25cIiB8fCAhZGVwcykgdGhpcy5hY2NlcHREZXBzKFt0aGlzLm93bmVyUGF0aF0sIChbbW9kXSkgPT4gZGVwcz8uKG1vZCkpO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXBzID09IFwic3RyaW5nXCIpIHRoaXMuYWNjZXB0RGVwcyhbZGVwc10sIChbbW9kXSkgPT4gY2FsbGJhY2s/Lihtb2QpKTtcblx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlcHMpKSB0aGlzLmFjY2VwdERlcHMoZGVwcywgY2FsbGJhY2spO1xuXHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhvdC5hY2NlcHQoKSB1c2FnZS5cIik7XG5cdH1cblx0YWNjZXB0RXhwb3J0cyhfLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuYWNjZXB0RGVwcyhbdGhpcy5vd25lclBhdGhdLCAoW21vZF0pID0+IGNhbGxiYWNrPy4obW9kKSk7XG5cdH1cblx0ZGlzcG9zZShjYikge1xuXHRcdHRoaXMuaG1yQ2xpZW50LmRpc3Bvc2VNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBjYik7XG5cdH1cblx0cHJ1bmUoY2IpIHtcblx0XHR0aGlzLmhtckNsaWVudC5wcnVuZU1hcC5zZXQodGhpcy5vd25lclBhdGgsIGNiKTtcblx0fVxuXHRkZWNsaW5lKCkge31cblx0aW52YWxpZGF0ZShtZXNzYWdlKSB7XG5cdFx0bGV0IGZpcnN0SW52YWxpZGF0ZWRCeSA9IHRoaXMuaG1yQ2xpZW50LmN1cnJlbnRGaXJzdEludmFsaWRhdGVkQnkgPz8gdGhpcy5vd25lclBhdGg7XG5cdFx0dGhpcy5obXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTppbnZhbGlkYXRlXCIsIHtcblx0XHRcdHBhdGg6IHRoaXMub3duZXJQYXRoLFxuXHRcdFx0bWVzc2FnZSxcblx0XHRcdGZpcnN0SW52YWxpZGF0ZWRCeVxuXHRcdH0pLCB0aGlzLnNlbmQoXCJ2aXRlOmludmFsaWRhdGVcIiwge1xuXHRcdFx0cGF0aDogdGhpcy5vd25lclBhdGgsXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0Zmlyc3RJbnZhbGlkYXRlZEJ5XG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhgaW52YWxpZGF0ZSAke3RoaXMub3duZXJQYXRofSR7bWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIn1gKTtcblx0fVxuXHRvbihldmVudCwgY2IpIHtcblx0XHRsZXQgYWRkVG9NYXAgPSAobWFwKSA9PiB7XG5cdFx0XHRsZXQgZXhpc3RpbmcgPSBtYXAuZ2V0KGV2ZW50KSB8fCBbXTtcblx0XHRcdGV4aXN0aW5nLnB1c2goY2IpLCBtYXAuc2V0KGV2ZW50LCBleGlzdGluZyk7XG5cdFx0fTtcblx0XHRhZGRUb01hcCh0aGlzLmhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXApLCBhZGRUb01hcCh0aGlzLm5ld0xpc3RlbmVycyk7XG5cdH1cblx0b2ZmKGV2ZW50LCBjYikge1xuXHRcdGxldCByZW1vdmVGcm9tTWFwID0gKG1hcCkgPT4ge1xuXHRcdFx0bGV0IGV4aXN0aW5nID0gbWFwLmdldChldmVudCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcgPT09IHZvaWQgMCkgcmV0dXJuO1xuXHRcdFx0bGV0IHBydW5lZCA9IGV4aXN0aW5nLmZpbHRlcigobCkgPT4gbCAhPT0gY2IpO1xuXHRcdFx0aWYgKHBydW5lZC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWFwLmRlbGV0ZShldmVudCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG1hcC5zZXQoZXZlbnQsIHBydW5lZCk7XG5cdFx0fTtcblx0XHRyZW1vdmVGcm9tTWFwKHRoaXMuaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcCksIHJlbW92ZUZyb21NYXAodGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdHNlbmQoZXZlbnQsIGRhdGEpIHtcblx0XHR0aGlzLmhtckNsaWVudC5zZW5kKHtcblx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRldmVudCxcblx0XHRcdGRhdGFcblx0XHR9KTtcblx0fVxuXHRhY2NlcHREZXBzKGRlcHMsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcblx0XHRsZXQgbW9kID0gdGhpcy5obXJDbGllbnQuaG90TW9kdWxlc01hcC5nZXQodGhpcy5vd25lclBhdGgpIHx8IHtcblx0XHRcdGlkOiB0aGlzLm93bmVyUGF0aCxcblx0XHRcdGNhbGxiYWNrczogW11cblx0XHR9O1xuXHRcdG1vZC5jYWxsYmFja3MucHVzaCh7XG5cdFx0XHRkZXBzLFxuXHRcdFx0Zm46IGNhbGxiYWNrXG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBtb2QpO1xuXHR9XG59LCBITVJDbGllbnQgPSBjbGFzcyB7XG5cdGhvdE1vZHVsZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkaXNwb3NlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cHJ1bmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkYXRhTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3VzdG9tTGlzdGVuZXJzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3R4VG9MaXN0ZW5lcnNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjdXJyZW50Rmlyc3RJbnZhbGlkYXRlZEJ5O1xuXHRjb25zdHJ1Y3Rvcihsb2dnZXIsIHRyYW5zcG9ydCwgaW1wb3J0VXBkYXRlZE1vZHVsZSkge1xuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2VyLCB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydCwgdGhpcy5pbXBvcnRVcGRhdGVkTW9kdWxlID0gaW1wb3J0VXBkYXRlZE1vZHVsZTtcblx0fVxuXHRhc3luYyBub3RpZnlMaXN0ZW5lcnMoZXZlbnQsIGRhdGEpIHtcblx0XHRsZXQgY2JzID0gdGhpcy5jdXN0b21MaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50KTtcblx0XHRjYnMgJiYgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNicy5tYXAoKGNiKSA9PiBjYihkYXRhKSkpO1xuXHR9XG5cdHNlbmQocGF5bG9hZCkge1xuXHRcdHRoaXMudHJhbnNwb3J0LnNlbmQocGF5bG9hZCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoZXJyKTtcblx0XHR9KTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmhvdE1vZHVsZXNNYXAuY2xlYXIoKSwgdGhpcy5kaXNwb3NlTWFwLmNsZWFyKCksIHRoaXMucHJ1bmVNYXAuY2xlYXIoKSwgdGhpcy5kYXRhTWFwLmNsZWFyKCksIHRoaXMuY3VzdG9tTGlzdGVuZXJzTWFwLmNsZWFyKCksIHRoaXMuY3R4VG9MaXN0ZW5lcnNNYXAuY2xlYXIoKTtcblx0fVxuXHRhc3luYyBwcnVuZVBhdGhzKHBhdGhzKSB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHMubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGRpc3Bvc2VyKSByZXR1cm4gZGlzcG9zZXIodGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpLCBhd2FpdCBQcm9taXNlLmFsbChwYXRocy5tYXAoKHBhdGgpID0+IHtcblx0XHRcdGxldCBmbiA9IHRoaXMucHJ1bmVNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGZuKSByZXR1cm4gZm4odGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpO1xuXHR9XG5cdHdhcm5GYWlsZWRVcGRhdGUoZXJyLCBwYXRoKSB7XG5cdFx0KCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHx8ICFlcnIubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSAmJiB0aGlzLmxvZ2dlci5lcnJvcihlcnIpLCB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3BhdGh9LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBzeW50YXggZXJyb3JzIG9yIGltcG9ydGluZyBub24tZXhpc3RlbnQgbW9kdWxlcy4gKHNlZSBlcnJvcnMgYWJvdmUpYCk7XG5cdH1cblx0dXBkYXRlUXVldWUgPSBbXTtcblx0cGVuZGluZ1VwZGF0ZVF1ZXVlID0gITE7XG5cdC8qKlxuXHQqIGJ1ZmZlciBtdWx0aXBsZSBob3QgdXBkYXRlcyB0cmlnZ2VyZWQgYnkgdGhlIHNhbWUgc3JjIGNoYW5nZVxuXHQqIHNvIHRoYXQgdGhleSBhcmUgaW52b2tlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgc2VudC5cblx0KiAob3RoZXJ3aXNlIHRoZSBvcmRlciBtYXkgYmUgaW5jb25zaXN0ZW50IGJlY2F1c2Ugb2YgdGhlIGh0dHAgcmVxdWVzdCByb3VuZCB0cmlwKVxuXHQqL1xuXHRhc3luYyBxdWV1ZVVwZGF0ZShwYXlsb2FkKSB7XG5cdFx0aWYgKHRoaXMudXBkYXRlUXVldWUucHVzaCh0aGlzLmZldGNoVXBkYXRlKHBheWxvYWQpKSwgIXRoaXMucGVuZGluZ1VwZGF0ZVF1ZXVlKSB7XG5cdFx0XHR0aGlzLnBlbmRpbmdVcGRhdGVRdWV1ZSA9ICEwLCBhd2FpdCBQcm9taXNlLnJlc29sdmUoKSwgdGhpcy5wZW5kaW5nVXBkYXRlUXVldWUgPSAhMTtcblx0XHRcdGxldCBsb2FkaW5nID0gWy4uLnRoaXMudXBkYXRlUXVldWVdO1xuXHRcdFx0dGhpcy51cGRhdGVRdWV1ZSA9IFtdLCAoYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZykpLmZvckVhY2goKGZuKSA9PiBmbiAmJiBmbigpKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZmV0Y2hVcGRhdGUodXBkYXRlKSB7XG5cdFx0bGV0IHsgcGF0aCwgYWNjZXB0ZWRQYXRoLCBmaXJzdEludmFsaWRhdGVkQnkgfSA9IHVwZGF0ZSwgbW9kID0gdGhpcy5ob3RNb2R1bGVzTWFwLmdldChwYXRoKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuO1xuXHRcdGxldCBmZXRjaGVkTW9kdWxlLCBpc1NlbGZVcGRhdGUgPSBwYXRoID09PSBhY2NlcHRlZFBhdGgsIHF1YWxpZmllZENhbGxiYWNrcyA9IG1vZC5jYWxsYmFja3MuZmlsdGVyKCh7IGRlcHMgfSkgPT4gZGVwcy5pbmNsdWRlcyhhY2NlcHRlZFBhdGgpKTtcblx0XHRpZiAoaXNTZWxmVXBkYXRlIHx8IHF1YWxpZmllZENhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KGFjY2VwdGVkUGF0aCk7XG5cdFx0XHRkaXNwb3NlciAmJiBhd2FpdCBkaXNwb3Nlcih0aGlzLmRhdGFNYXAuZ2V0KGFjY2VwdGVkUGF0aCkpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZmV0Y2hlZE1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0VXBkYXRlZE1vZHVsZSh1cGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLndhcm5GYWlsZWRVcGRhdGUoZSwgYWNjZXB0ZWRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IGZpcnN0SW52YWxpZGF0ZWRCeTtcblx0XHRcdFx0Zm9yIChsZXQgeyBkZXBzLCBmbiB9IG9mIHF1YWxpZmllZENhbGxiYWNrcykgZm4oZGVwcy5tYXAoKGRlcCkgPT4gZGVwID09PSBhY2NlcHRlZFBhdGggPyBmZXRjaGVkTW9kdWxlIDogdm9pZCAwKSk7XG5cdFx0XHRcdGxldCBsb2dnZWRQYXRoID0gaXNTZWxmVXBkYXRlID8gcGF0aCA6IGAke2FjY2VwdGVkUGF0aH0gdmlhICR7cGF0aH1gO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5kZWJ1ZyhgaG90IHVwZGF0ZWQ6ICR7bG9nZ2VkUGF0aH1gKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IHZvaWQgMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9zc3JUcmFuc2Zvcm0udHNcbi8qKlxuKiBWaXRlIGNvbnZlcnRzIGBpbXBvcnQgeyB9IGZyb20gJ2ZvbydgIHRvIGBjb25zdCBfID0gX192aXRlX3Nzcl9pbXBvcnRfXygnZm9vJylgLlxuKiBUb3AtbGV2ZWwgaW1wb3J0cyBhbmQgZHluYW1pYyBpbXBvcnRzIHdvcmsgc2xpZ2h0bHkgZGlmZmVyZW50bHkgaW4gTm9kZS5qcy5cbiogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRoZSBkaWZmZXJlbmNlcyBzbyBpdCBtYXRjaGVzIHByb2QgYmVoYXZpb3VyLlxuKi9cbmZ1bmN0aW9uIGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UobW9kLCByYXdJZCwgbW9kdWxlVHlwZSwgbWV0YWRhdGEpIHtcblx0aWYgKCFtZXRhZGF0YT8uaXNEeW5hbWljSW1wb3J0ICYmIG1ldGFkYXRhPy5pbXBvcnRlZE5hbWVzPy5sZW5ndGgpIHtcblx0XHRsZXQgbWlzc2luZ0JpbmRpbmdzID0gbWV0YWRhdGEuaW1wb3J0ZWROYW1lcy5maWx0ZXIoKHMpID0+ICEocyBpbiBtb2QpKTtcblx0XHRpZiAobWlzc2luZ0JpbmRpbmdzLmxlbmd0aCkge1xuXHRcdFx0bGV0IGxhc3RCaW5kaW5nID0gbWlzc2luZ0JpbmRpbmdzW21pc3NpbmdCaW5kaW5ncy5sZW5ndGggLSAxXTtcblx0XHRcdHRocm93IFN5bnRheEVycm9yKG1vZHVsZVR5cGUgPT09IFwibW9kdWxlXCIgPyBgW3ZpdGVdIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgZG9lcyBub3QgcHJvdmlkZSBhbiBleHBvcnQgbmFtZWQgJyR7bGFzdEJpbmRpbmd9J2AgOiBgXFxcblt2aXRlXSBOYW1lZCBleHBvcnQgJyR7bGFzdEJpbmRpbmd9JyBub3QgZm91bmQuIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgaXMgYSBDb21tb25KUyBtb2R1bGUsIHdoaWNoIG1heSBub3Qgc3VwcG9ydCBhbGwgbW9kdWxlLmV4cG9ydHMgYXMgbmFtZWQgZXhwb3J0cy5cbkNvbW1vbkpTIG1vZHVsZXMgY2FuIGFsd2F5cyBiZSBpbXBvcnRlZCB2aWEgdGhlIGRlZmF1bHQgZXhwb3J0LCBmb3IgZXhhbXBsZSB1c2luZzpcblxuaW1wb3J0IHBrZyBmcm9tICcke3Jhd0lkfSc7XG5jb25zdCB7JHttaXNzaW5nQmluZGluZ3Muam9pbihcIiwgXCIpfX0gPSBwa2c7XG5gKTtcblx0XHR9XG5cdH1cbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9uYW5vaWRANS4xLjcvbm9kZV9tb2R1bGVzL25hbm9pZC9ub24tc2VjdXJlL2luZGV4LmpzXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuXHRsZXQgaWQgPSBcIlwiLCBpID0gc2l6ZSB8IDA7XG5cdGZvciAoOyBpLS07KSBpZCArPSBcInVzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3RcIltNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcblx0cmV0dXJuIGlkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvbW9kdWxlUnVubmVyVHJhbnNwb3J0LnRzXG5mdW5jdGlvbiByZXZpdmVJbnZva2VFcnJvcihlKSB7XG5cdGxldCBlcnJvciA9IEVycm9yKGUubWVzc2FnZSB8fCBcIlVua25vd24gaW52b2tlIGVycm9yXCIpO1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgZSwgeyBydW5uZXJFcnJvcjogLyogQF9fUFVSRV9fICovIEVycm9yKFwiUnVubmVyRXJyb3JcIikgfSksIGVycm9yO1xufVxuY29uc3QgY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCA9ICh0cmFuc3BvcnQpID0+IHtcblx0aWYgKHRyYW5zcG9ydC5pbnZva2UpIHJldHVybiB7XG5cdFx0Li4udHJhbnNwb3J0LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdHJhbnNwb3J0Lmludm9rZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6aW52b2tlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRpZDogXCJzZW5kXCIsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKFwiZXJyb3JcIiBpbiByZXN1bHQpIHRocm93IHJldml2ZUludm9rZUVycm9yKHJlc3VsdC5lcnJvcik7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlc3VsdDtcblx0XHR9XG5cdH07XG5cdGlmICghdHJhbnNwb3J0LnNlbmQgfHwgIXRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcInRyYW5zcG9ydCBtdXN0IGltcGxlbWVudCBzZW5kIGFuZCBjb25uZWN0IHdoZW4gaW52b2tlIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcblx0bGV0IHJwY1Byb21pc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmV0dXJuIHtcblx0XHQuLi50cmFuc3BvcnQsXG5cdFx0Y29ubmVjdCh7IG9uTWVzc2FnZSwgb25EaXNjb25uZWN0aW9uIH0pIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZShwYXlsb2FkKSB7XG5cdFx0XHRcdFx0aWYgKHBheWxvYWQudHlwZSA9PT0gXCJjdXN0b21cIiAmJiBwYXlsb2FkLmV2ZW50ID09PSBcInZpdGU6aW52b2tlXCIpIHtcblx0XHRcdFx0XHRcdGxldCBkYXRhID0gcGF5bG9hZC5kYXRhO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaWQuc3RhcnRzV2l0aChcInJlc3BvbnNlOlwiKSkge1xuXHRcdFx0XHRcdFx0XHRsZXQgaW52b2tlSWQgPSBkYXRhLmlkLnNsaWNlKDkpLCBwcm9taXNlID0gcnBjUHJvbWlzZXMuZ2V0KGludm9rZUlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9taXNlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdHByb21pc2UudGltZW91dElkICYmIGNsZWFyVGltZW91dChwcm9taXNlLnRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShpbnZva2VJZCk7XG5cdFx0XHRcdFx0XHRcdGxldCB7IGVycm9yLCByZXN1bHQgfSA9IGRhdGEuZGF0YTtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPyBwcm9taXNlLnJlamVjdChlcnJvcikgOiBwcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvbk1lc3NhZ2UocGF5bG9hZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvblxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0cmV0dXJuIHJwY1Byb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHtcblx0XHRcdFx0cHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIEVycm9yKGB0cmFuc3BvcnQgd2FzIGRpc2Nvbm5lY3RlZCwgY2Fubm90IGNhbGwgJHtKU09OLnN0cmluZ2lmeShwcm9taXNlLm5hbWUpfWApKTtcblx0XHRcdH0pLCBycGNQcm9taXNlcy5jbGVhcigpLCB0cmFuc3BvcnQuZGlzY29ubmVjdD8uKCk7XG5cdFx0fSxcblx0XHRzZW5kKGRhdGEpIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcHJvbWlzZUlkID0gbmFub2lkKCksIHdyYXBwZWREYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRldmVudDogXCJ2aXRlOmludm9rZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpZDogYHNlbmQ6JHtwcm9taXNlSWR9YCxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0sIHNlbmRQcm9taXNlID0gdHJhbnNwb3J0LnNlbmQod3JhcHBlZERhdGEpLCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKSwgdGltZW91dCA9IHRyYW5zcG9ydC50aW1lb3V0ID8/IDZlNCwgdGltZW91dElkO1xuXHRcdFx0dGltZW91dCA+IDAgJiYgKHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRycGNQcm9taXNlcy5kZWxldGUocHJvbWlzZUlkKSwgcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBFcnJvcihgdHJhbnNwb3J0IGludm9rZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zIChkYXRhOiAke0pTT04uc3RyaW5naWZ5KHdyYXBwZWREYXRhKX0pYCkpO1xuXHRcdFx0fSwgdGltZW91dCksIHRpbWVvdXRJZD8udW5yZWY/LigpKSwgcnBjUHJvbWlzZXMuc2V0KHByb21pc2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHRpbWVvdXRJZFxuXHRcdFx0fSksIHNlbmRQcm9taXNlICYmIHNlbmRQcm9taXNlLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShwcm9taXNlSWQpLCByZWplY3QoZXJyKTtcblx0XHRcdH0pO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHByb21pc2U7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgcmV2aXZlSW52b2tlRXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59LCBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQgPSAodHJhbnNwb3J0KSA9PiB7XG5cdGxldCBpbnZva2VhYmxlVHJhbnNwb3J0ID0gY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCh0cmFuc3BvcnQpLCBpc0Nvbm5lY3RlZCA9ICFpbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QsIGNvbm5lY3RpbmdQcm9taXNlO1xuXHRyZXR1cm4ge1xuXHRcdC4uLnRyYW5zcG9ydCxcblx0XHQuLi5pbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QgPyB7IGFzeW5jIGNvbm5lY3Qob25NZXNzYWdlKSB7XG5cdFx0XHRpZiAoaXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHRcdGlmIChjb25uZWN0aW5nUHJvbWlzZSkge1xuXHRcdFx0XHRhd2FpdCBjb25uZWN0aW5nUHJvbWlzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG1heWJlUHJvbWlzZSA9IGludm9rZWFibGVUcmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZTogb25NZXNzYWdlID8/ICgoKSA9PiB7fSksXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvbigpIHtcblx0XHRcdFx0XHRpc0Nvbm5lY3RlZCA9ICExO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1heWJlUHJvbWlzZSAmJiAoY29ubmVjdGluZ1Byb21pc2UgPSBtYXliZVByb21pc2UsIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBjb25uZWN0aW5nUHJvbWlzZSA9IHZvaWQgMCksIGlzQ29ubmVjdGVkID0gITA7XG5cdFx0fSB9IDoge30sXG5cdFx0Li4uaW52b2tlYWJsZVRyYW5zcG9ydC5kaXNjb25uZWN0ID8geyBhc3luYyBkaXNjb25uZWN0KCkge1xuXHRcdFx0aXNDb25uZWN0ZWQgJiYgKGNvbm5lY3RpbmdQcm9taXNlICYmIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBpc0Nvbm5lY3RlZCA9ICExLCBhd2FpdCBpbnZva2VhYmxlVHJhbnNwb3J0LmRpc2Nvbm5lY3QoKSk7XG5cdFx0fSB9IDoge30sXG5cdFx0YXN5bmMgc2VuZChkYXRhKSB7XG5cdFx0XHRpZiAoaW52b2tlYWJsZVRyYW5zcG9ydC5zZW5kKSB7XG5cdFx0XHRcdGlmICghaXNDb25uZWN0ZWQpIGlmIChjb25uZWN0aW5nUHJvbWlzZSkgYXdhaXQgY29ubmVjdGluZ1Byb21pc2U7XG5cdFx0XHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJzZW5kIHdhcyBjYWxsZWQgYmVmb3JlIGNvbm5lY3RcIik7XG5cdFx0XHRcdGF3YWl0IGludm9rZWFibGVUcmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRpZiAoIWlzQ29ubmVjdGVkKSBpZiAoY29ubmVjdGluZ1Byb21pc2UpIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlO1xuXHRcdFx0ZWxzZSB0aHJvdyBFcnJvcihcImludm9rZSB3YXMgY2FsbGVkIGJlZm9yZSBjb25uZWN0XCIpO1xuXHRcdFx0cmV0dXJuIGludm9rZWFibGVUcmFuc3BvcnQuaW52b2tlKG5hbWUsIGRhdGEpO1xuXHRcdH1cblx0fTtcbn0sIGNyZWF0ZVdlYlNvY2tldE1vZHVsZVJ1bm5lclRyYW5zcG9ydCA9IChvcHRpb25zKSA9PiB7XG5cdGxldCBwaW5nSW50ZXJ2YWwgPSBvcHRpb25zLnBpbmdJbnRlcnZhbCA/PyAzZTQsIHdzLCBwaW5nSW50ZXJ2YWxJZDtcblx0cmV0dXJuIHtcblx0XHRhc3luYyBjb25uZWN0KHsgb25NZXNzYWdlLCBvbkRpc2Nvbm5lY3Rpb24gfSkge1xuXHRcdFx0bGV0IHNvY2tldCA9IG9wdGlvbnMuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuXHRcdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShkYXRhKSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBpc09wZW5lZCA9IHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTjtcblx0XHRcdGlzT3BlbmVkIHx8IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsICgpID0+IHtcblx0XHRcdFx0XHRpc09wZW5lZCA9ICEwLCByZXNvbHZlKCk7XG5cdFx0XHRcdH0sIHsgb25jZTogITAgfSksIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICghaXNPcGVuZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gRXJyb3IoXCJXZWJTb2NrZXQgY2xvc2VkIHdpdGhvdXQgb3BlbmVkLlwiKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9uTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFwidml0ZTp3czpkaXNjb25uZWN0XCIsXG5cdFx0XHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdFx0XHR9KSwgb25EaXNjb25uZWN0aW9uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksIG9uTWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6d3M6Y29ubmVjdFwiLFxuXHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdH0pLCB3cyA9IHNvY2tldCwgcGluZ0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTiAmJiBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicGluZ1wiIH0pKTtcblx0XHRcdH0sIHBpbmdJbnRlcnZhbCk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwaW5nSW50ZXJ2YWxJZCksIHdzPy5jbG9zZSgpO1xuXHRcdH0sXG5cdFx0c2VuZChkYXRhKSB7XG5cdFx0XHR3cy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHR9XG5cdH07XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9idWlsdGluLnRzXG5mdW5jdGlvbiBjcmVhdGVJc0J1aWx0aW4oYnVpbHRpbnMpIHtcblx0bGV0IHBsYWluQnVpbHRpbnNTZXQgPSBuZXcgU2V0KGJ1aWx0aW5zLmZpbHRlcigoYnVpbHRpbikgPT4gdHlwZW9mIGJ1aWx0aW4gPT0gXCJzdHJpbmdcIikpLCByZWdleEJ1aWx0aW5zID0gYnVpbHRpbnMuZmlsdGVyKChidWlsdGluKSA9PiB0eXBlb2YgYnVpbHRpbiAhPSBcInN0cmluZ1wiKTtcblx0cmV0dXJuIChpZCkgPT4gcGxhaW5CdWlsdGluc1NldC5oYXMoaWQpIHx8IHJlZ2V4QnVpbHRpbnMuc29tZSgocmVnZXhwKSA9PiByZWdleHAudGVzdChpZCkpO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvY29uc3RhbnRzLnRzXG5jb25zdCBzc3JNb2R1bGVFeHBvcnRzS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydHNfX1wiLCBzc3JJbXBvcnRLZXkgPSBcIl9fdml0ZV9zc3JfaW1wb3J0X19cIiwgc3NyRHluYW1pY0ltcG9ydEtleSA9IFwiX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fXCIsIHNzckV4cG9ydEFsbEtleSA9IFwiX192aXRlX3Nzcl9leHBvcnRBbGxfX1wiLCBzc3JFeHBvcnROYW1lS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydE5hbWVfX1wiLCBzc3JJbXBvcnRNZXRhS2V5ID0gXCJfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX19cIiwgbm9vcCA9ICgpID0+IHt9LCBzaWxlbnRDb25zb2xlID0ge1xuXHRkZWJ1Zzogbm9vcCxcblx0ZXJyb3I6IG5vb3Bcbn0sIGhtckxvZ2dlciA9IHtcblx0ZGVidWc6ICguLi5tc2cpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIC4uLm1zZyksXG5cdGVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIGVycm9yKVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvaG1ySGFuZGxlci50c1xuZnVuY3Rpb24gY3JlYXRlSE1SSGFuZGxlcihoYW5kbGVyKSB7XG5cdGxldCBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXHRyZXR1cm4gKHBheWxvYWQpID0+IHF1ZXVlLmVucXVldWUoKCkgPT4gaGFuZGxlcihwYXlsb2FkKSk7XG59XG52YXIgUXVldWUgPSBjbGFzcyB7XG5cdHF1ZXVlID0gW107XG5cdHBlbmRpbmcgPSAhMTtcblx0ZW5xdWV1ZShwcm9taXNlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucXVldWUucHVzaCh7XG5cdFx0XHRcdHByb21pc2UsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdFxuXHRcdFx0fSksIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdGRlcXVldWUoKSB7XG5cdFx0aWYgKHRoaXMucGVuZGluZykgcmV0dXJuICExO1xuXHRcdGxldCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuXHRcdHJldHVybiBpdGVtID8gKHRoaXMucGVuZGluZyA9ICEwLCBpdGVtLnByb21pc2UoKS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5wZW5kaW5nID0gITEsIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pLCAhMCkgOiAhMTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2htckhhbmRsZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIocnVubmVyKSB7XG5cdHJldHVybiBjcmVhdGVITVJIYW5kbGVyKGFzeW5jIChwYXlsb2FkKSA9PiB7XG5cdFx0bGV0IGhtckNsaWVudCA9IHJ1bm5lci5obXJDbGllbnQ7XG5cdFx0aWYgKCEoIWhtckNsaWVudCB8fCBydW5uZXIuaXNDbG9zZWQoKSkpIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29ubmVjdGVkXCI6XG5cdFx0XHRcdGhtckNsaWVudC5sb2dnZXIuZGVidWcoXCJjb25uZWN0ZWQuXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1cGRhdGVcIjpcblx0XHRcdFx0YXdhaXQgaG1yQ2xpZW50Lm5vdGlmeUxpc3RlbmVycyhcInZpdGU6YmVmb3JlVXBkYXRlXCIsIHBheWxvYWQpLCBhd2FpdCBQcm9taXNlLmFsbChwYXlsb2FkLnVwZGF0ZXMubWFwKGFzeW5jICh1cGRhdGUpID0+IHtcblx0XHRcdFx0XHRpZiAodXBkYXRlLnR5cGUgPT09IFwianMtdXBkYXRlXCIpIHJldHVybiB1cGRhdGUuYWNjZXB0ZWRQYXRoID0gdW53cmFwSWQodXBkYXRlLmFjY2VwdGVkUGF0aCksIHVwZGF0ZS5wYXRoID0gdW53cmFwSWQodXBkYXRlLnBhdGgpLCBobXJDbGllbnQucXVldWVVcGRhdGUodXBkYXRlKTtcblx0XHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKFwiY3NzIGhtciBpcyBub3Qgc3VwcG9ydGVkIGluIHJ1bm5lciBtb2RlLlwiKTtcblx0XHRcdFx0fSkpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTphZnRlclVwZGF0ZVwiLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY3VzdG9tXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMocGF5bG9hZC5ldmVudCwgcGF5bG9hZC5kYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZnVsbC1yZWxvYWRcIjoge1xuXHRcdFx0XHRsZXQgeyB0cmlnZ2VyZWRCeSB9ID0gcGF5bG9hZCwgY2xlYXJFbnRyeXBvaW50VXJscyA9IHRyaWdnZXJlZEJ5ID8gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgZ2V0TW9kdWxlc0J5RmlsZShydW5uZXIsIHNsYXNoKHRyaWdnZXJlZEJ5KSkpIDogZmluZEFsbEVudHJ5cG9pbnRzKHJ1bm5lcik7XG5cdFx0XHRcdGlmICghY2xlYXJFbnRyeXBvaW50VXJscy5zaXplKSBicmVhaztcblx0XHRcdFx0aG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhcInByb2dyYW0gcmVsb2FkXCIpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTpiZWZvcmVGdWxsUmVsb2FkXCIsIHBheWxvYWQpLCBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpO1xuXHRcdFx0XHRmb3IgKGxldCB1cmwgb2YgY2xlYXJFbnRyeXBvaW50VXJscykge1xuXHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bm5lci5pbXBvcnQodXJsKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSAhPT0gXCJFUlJfT1VUREFURURfT1BUSU1JWkVEX0RFUFwiICYmIGhtckNsaWVudC5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBmdWxsIHJlbG9hZFxcbiR7ZXJyLm1lc3NhZ2V9XFxuJHtlcnIuc3RhY2t9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInBydW5lXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMoXCJ2aXRlOmJlZm9yZVBydW5lXCIsIHBheWxvYWQpLCBhd2FpdCBobXJDbGllbnQucHJ1bmVQYXRocyhwYXlsb2FkLnBhdGhzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZXJyb3JcIjoge1xuXHRcdFx0XHRhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTplcnJvclwiLCBwYXlsb2FkKTtcblx0XHRcdFx0bGV0IGVyciA9IHBheWxvYWQuZXJyO1xuXHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcXG4ke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJwaW5nXCI6IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIHBheWxvYWQ7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXNCeUZpbGUocnVubmVyLCBmaWxlKSB7XG5cdGxldCBub2RlcyA9IHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG5cdHJldHVybiBub2RlcyA/IFsuLi5ub2Rlc10ubWFwKChub2RlKSA9PiBub2RlLmlkKSA6IFtdO1xufVxuZnVuY3Rpb24gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgbW9kdWxlcywgdmlzaXRlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGVudHJ5cG9pbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkge1xuXHRmb3IgKGxldCBtb2R1bGVJZCBvZiBtb2R1bGVzKSB7XG5cdFx0aWYgKHZpc2l0ZWQuaGFzKG1vZHVsZUlkKSkgY29udGludWU7XG5cdFx0dmlzaXRlZC5hZGQobW9kdWxlSWQpO1xuXHRcdGxldCBtb2R1bGUgPSBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeUlkKG1vZHVsZUlkKTtcblx0XHRpZiAobW9kdWxlKSB7XG5cdFx0XHRpZiAoIW1vZHVsZS5pbXBvcnRlcnMuc2l6ZSkge1xuXHRcdFx0XHRlbnRyeXBvaW50cy5hZGQobW9kdWxlLnVybCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgbW9kdWxlLmltcG9ydGVycykgZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgW2ltcG9ydGVyXSwgdmlzaXRlZCwgZW50cnlwb2ludHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlwb2ludHM7XG59XG5mdW5jdGlvbiBmaW5kQWxsRW50cnlwb2ludHMocnVubmVyLCBlbnRyeXBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHtcblx0Zm9yIChsZXQgbW9kIG9mIHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmlkVG9Nb2R1bGVNYXAudmFsdWVzKCkpIG1vZC5pbXBvcnRlcnMuc2l6ZSB8fCBlbnRyeXBvaW50cy5hZGQobW9kLnVybCk7XG5cdHJldHVybiBlbnRyeXBvaW50cztcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbnRlcmNlcHRvci50c1xuY29uc3Qgc291cmNlTWFwQ2FjaGUgPSB7fSwgZmlsZUNvbnRlbnRzQ2FjaGUgPSB7fSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgY3JlYXRlRXhlY0hhbmRsZXJzID0gKGhhbmRsZXJzKSA9PiAoKC4uLmFyZ3MpID0+IHtcblx0Zm9yIChsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdGxldCByZXN1bHQgPSBoYW5kbGVyKC4uLmFyZ3MpO1xuXHRcdGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59KSwgcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzID0gY3JlYXRlRXhlY0hhbmRsZXJzKHJldHJpZXZlRmlsZUhhbmRsZXJzKSwgcmV0cmlldmVTb3VyY2VNYXBGcm9tSGFuZGxlcnMgPSBjcmVhdGVFeGVjSGFuZGxlcnMocmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycyk7XG5sZXQgb3ZlcnJpZGRlbiA9ICExO1xuY29uc3Qgb3JpZ2luYWxQcmVwYXJlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG5mdW5jdGlvbiByZXNldEludGVyY2VwdG9yKHJ1bm5lciwgb3B0aW9ucykge1xuXHRldmFsdWF0ZWRNb2R1bGVzQ2FjaGUuZGVsZXRlKHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzKSwgb3B0aW9ucy5yZXRyaWV2ZUZpbGUgJiYgcmV0cmlldmVGaWxlSGFuZGxlcnMuZGVsZXRlKG9wdGlvbnMucmV0cmlldmVGaWxlKSwgb3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCAmJiByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzLmRlbGV0ZShvcHRpb25zLnJldHJpZXZlU291cmNlTWFwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLnNpemUgPT09IDAgJiYgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZ2luYWxQcmVwYXJlLCBvdmVycmlkZGVuID0gITEpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0U3RhY2tUcmFjZShydW5uZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gb3ZlcnJpZGRlbiB8fD0gKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcGFyZVN0YWNrVHJhY2UsICEwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLmFkZChydW5uZXIuZXZhbHVhdGVkTW9kdWxlcyksIG9wdGlvbnMucmV0cmlldmVGaWxlICYmIHJldHJpZXZlRmlsZUhhbmRsZXJzLmFkZChvcHRpb25zLnJldHJpZXZlRmlsZSksIG9wdGlvbnMucmV0cmlldmVTb3VyY2VNYXAgJiYgcmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycy5hZGQob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCksICgpID0+IHJlc2V0SW50ZXJjZXB0b3IocnVubmVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN1cHBvcnRSZWxhdGl2ZVVSTChmaWxlLCB1cmwpIHtcblx0aWYgKCFmaWxlKSByZXR1cm4gdXJsO1xuXHRsZXQgZGlyID0gcG9zaXhEaXJuYW1lKHNsYXNoKGZpbGUpKSwgbWF0Y2ggPSAvXlxcdys6XFwvXFwvW14vXSovLmV4ZWMoZGlyKSwgcHJvdG9jb2wgPSBtYXRjaCA/IG1hdGNoWzBdIDogXCJcIiwgc3RhcnRQYXRoID0gZGlyLnNsaWNlKHByb3RvY29sLmxlbmd0aCk7XG5cdHJldHVybiBwcm90b2NvbCAmJiAvXlxcL1xcdzovLnRlc3Qoc3RhcnRQYXRoKSA/IChwcm90b2NvbCArPSBcIi9cIiwgcHJvdG9jb2wgKyBzbGFzaChwb3NpeFJlc29sdmUoc3RhcnRQYXRoLCB1cmwpKSkgOiBwcm90b2NvbCArIHBvc2l4UmVzb2x2ZShzdGFydFBhdGgsIHVybCk7XG59XG5mdW5jdGlvbiBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pIHtcblx0Zm9yIChsZXQgbW9kdWxlR3JhcGggb2YgZXZhbHVhdGVkTW9kdWxlc0NhY2hlKSB7XG5cdFx0bGV0IHNvdXJjZU1hcCA9IG1vZHVsZUdyYXBoLmdldE1vZHVsZVNvdXJjZU1hcEJ5SWQocG9zaXRpb24uc291cmNlKTtcblx0XHRpZiAoc291cmNlTWFwKSByZXR1cm4ge1xuXHRcdFx0dXJsOiBwb3NpdGlvbi5zb3VyY2UsXG5cdFx0XHRtYXA6IHNvdXJjZU1hcCxcblx0XHRcdHZpdGU6ICEwXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlRmlsZShwYXRoKSB7XG5cdGlmIChwYXRoIGluIGZpbGVDb250ZW50c0NhY2hlKSByZXR1cm4gZmlsZUNvbnRlbnRzQ2FjaGVbcGF0aF07XG5cdGxldCBjb250ZW50ID0gcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzKHBhdGgpO1xuXHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IChmaWxlQ29udGVudHNDYWNoZVtwYXRoXSA9IGNvbnRlbnQsIGNvbnRlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSkge1xuXHRsZXQgZmlsZURhdGEgPSByZXRyaWV2ZUZpbGUoc291cmNlKTtcblx0aWYgKCFmaWxlRGF0YSkgcmV0dXJuIG51bGw7XG5cdGxldCByZSA9IC9cXC9cXC9bQCNdXFxzKnNvdXJjZU1hcHBpbmdVUkw9KFteXFxzJ1wiXSspXFxzKiR8XFwvXFwqW0AjXVxccypzb3VyY2VNYXBwaW5nVVJMPVteXFxzKidcIl0rXFxzKlxcKlxcL1xccyokL2dtLCBsYXN0TWF0Y2gsIG1hdGNoO1xuXHRmb3IgKDsgbWF0Y2ggPSByZS5leGVjKGZpbGVEYXRhKTspIGxhc3RNYXRjaCA9IG1hdGNoO1xuXHRyZXR1cm4gbGFzdE1hdGNoID8gbGFzdE1hdGNoWzFdIDogbnVsbDtcbn1cbmNvbnN0IHJlU291cmNlTWFwID0gL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvblteLF0rYmFzZTY0LC87XG5mdW5jdGlvbiByZXRyaWV2ZVNvdXJjZU1hcChzb3VyY2UpIHtcblx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwRnJvbUhhbmRsZXJzKHNvdXJjZSk7XG5cdGlmICh1cmxBbmRNYXApIHJldHVybiB1cmxBbmRNYXA7XG5cdGxldCBzb3VyY2VNYXBwaW5nVVJMID0gcmV0cmlldmVTb3VyY2VNYXBVUkwoc291cmNlKTtcblx0aWYgKCFzb3VyY2VNYXBwaW5nVVJMKSByZXR1cm4gbnVsbDtcblx0bGV0IHNvdXJjZU1hcERhdGE7XG5cdGlmIChyZVNvdXJjZU1hcC50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG5cdFx0bGV0IHJhd0RhdGEgPSBzb3VyY2VNYXBwaW5nVVJMLnNsaWNlKHNvdXJjZU1hcHBpbmdVUkwuaW5kZXhPZihcIixcIikgKyAxKTtcblx0XHRzb3VyY2VNYXBEYXRhID0gQnVmZmVyLmZyb20ocmF3RGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKSwgc291cmNlTWFwcGluZ1VSTCA9IHNvdXJjZTtcblx0fSBlbHNlIHNvdXJjZU1hcHBpbmdVUkwgPSBzdXBwb3J0UmVsYXRpdmVVUkwoc291cmNlLCBzb3VyY2VNYXBwaW5nVVJMKSwgc291cmNlTWFwRGF0YSA9IHJldHJpZXZlRmlsZShzb3VyY2VNYXBwaW5nVVJMKTtcblx0cmV0dXJuIHNvdXJjZU1hcERhdGEgPyB7XG5cdFx0dXJsOiBzb3VyY2VNYXBwaW5nVVJMLFxuXHRcdG1hcDogc291cmNlTWFwRGF0YVxuXHR9IDogbnVsbDtcbn1cbmZ1bmN0aW9uIG1hcFNvdXJjZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG5cdGlmICghcG9zaXRpb24uc291cmNlKSByZXR1cm4gcG9zaXRpb247XG5cdGxldCBzb3VyY2VNYXAgPSBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pO1xuXHRpZiAoc291cmNlTWFwIHx8PSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdLCAhc291cmNlTWFwKSB7XG5cdFx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwKHBvc2l0aW9uLnNvdXJjZSk7XG5cdFx0aWYgKHVybEFuZE1hcCAmJiB1cmxBbmRNYXAubWFwKSB7XG5cdFx0XHRsZXQgdXJsID0gdXJsQW5kTWFwLnVybDtcblx0XHRcdHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHRcdHVybCxcblx0XHRcdFx0bWFwOiBuZXcgRGVjb2RlZE1hcCh0eXBlb2YgdXJsQW5kTWFwLm1hcCA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh1cmxBbmRNYXAubWFwKSA6IHVybEFuZE1hcC5tYXAsIHVybClcblx0XHRcdH07XG5cdFx0XHRsZXQgY29udGVudHMgPSBzb3VyY2VNYXAubWFwPy5tYXAuc291cmNlc0NvbnRlbnQ7XG5cdFx0XHRzb3VyY2VNYXAubWFwICYmIGNvbnRlbnRzICYmIHNvdXJjZU1hcC5tYXAucmVzb2x2ZWRTb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaSkgPT4ge1xuXHRcdFx0XHRsZXQgY29udGVudCA9IGNvbnRlbnRzW2ldO1xuXHRcdFx0XHRpZiAoY29udGVudCAmJiBzb3VyY2UgJiYgdXJsKSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRlbnRVcmwgPSBzdXBwb3J0UmVsYXRpdmVVUkwodXJsLCBzb3VyY2UpO1xuXHRcdFx0XHRcdGZpbGVDb250ZW50c0NhY2hlW2NvbnRlbnRVcmxdID0gY29udGVudDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRtYXA6IG51bGxcblx0XHR9O1xuXHR9XG5cdGlmIChzb3VyY2VNYXAubWFwICYmIHNvdXJjZU1hcC51cmwpIHtcblx0XHRsZXQgb3JpZ2luYWxQb3NpdGlvbiA9IGdldE9yaWdpbmFsUG9zaXRpb24oc291cmNlTWFwLm1hcCwgcG9zaXRpb24pO1xuXHRcdGlmIChvcmlnaW5hbFBvc2l0aW9uICYmIG9yaWdpbmFsUG9zaXRpb24uc291cmNlICE9IG51bGwpIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSA9IHN1cHBvcnRSZWxhdGl2ZVVSTChzb3VyY2VNYXAudXJsLCBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSksIHNvdXJjZU1hcC52aXRlICYmIChvcmlnaW5hbFBvc2l0aW9uLl92aXRlID0gITApLCBvcmlnaW5hbFBvc2l0aW9uO1xuXHR9XG5cdHJldHVybiBwb3NpdGlvbjtcbn1cbmZ1bmN0aW9uIG1hcEV2YWxPcmlnaW4ob3JpZ2luKSB7XG5cdGxldCBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQvLmV4ZWMob3JpZ2luKTtcblx0aWYgKG1hdGNoKSB7XG5cdFx0bGV0IHBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb24oe1xuXHRcdFx0bmFtZTogbnVsbCxcblx0XHRcdHNvdXJjZTogbWF0Y2hbMl0sXG5cdFx0XHRsaW5lOiArbWF0Y2hbM10sXG5cdFx0XHRjb2x1bW46IG1hdGNoWzRdIC0gMVxuXHRcdH0pO1xuXHRcdHJldHVybiBgZXZhbCBhdCAke21hdGNoWzFdfSAoJHtwb3NpdGlvbi5zb3VyY2V9OiR7cG9zaXRpb24ubGluZX06JHtwb3NpdGlvbi5jb2x1bW4gKyAxfSlgO1xuXHR9XG5cdHJldHVybiBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKylcXCkkLy5leGVjKG9yaWdpbiksIG1hdGNoID8gYGV2YWwgYXQgJHttYXRjaFsxXX0gKCR7bWFwRXZhbE9yaWdpbihtYXRjaFsyXSl9KWAgOiBvcmlnaW47XG59XG5mdW5jdGlvbiBDYWxsU2l0ZVRvU3RyaW5nKCkge1xuXHRsZXQgZmlsZU5hbWUsIGZpbGVMb2NhdGlvbiA9IFwiXCI7XG5cdGlmICh0aGlzLmlzTmF0aXZlKCkpIGZpbGVMb2NhdGlvbiA9IFwibmF0aXZlXCI7XG5cdGVsc2Uge1xuXHRcdGZpbGVOYW1lID0gdGhpcy5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwoKSwgIWZpbGVOYW1lICYmIHRoaXMuaXNFdmFsKCkgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0RXZhbE9yaWdpbigpLCBmaWxlTG9jYXRpb24gKz0gXCIsIFwiKSwgZmlsZU5hbWUgPyBmaWxlTG9jYXRpb24gKz0gZmlsZU5hbWUgOiBmaWxlTG9jYXRpb24gKz0gXCI8YW5vbnltb3VzPlwiO1xuXHRcdGxldCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKCk7XG5cdFx0aWYgKGxpbmVOdW1iZXIgIT0gbnVsbCkge1xuXHRcdFx0ZmlsZUxvY2F0aW9uICs9IGA6JHtsaW5lTnVtYmVyfWA7XG5cdFx0XHRsZXQgY29sdW1uTnVtYmVyID0gdGhpcy5nZXRDb2x1bW5OdW1iZXIoKTtcblx0XHRcdGNvbHVtbk51bWJlciAmJiAoZmlsZUxvY2F0aW9uICs9IGA6JHtjb2x1bW5OdW1iZXJ9YCk7XG5cdFx0fVxuXHR9XG5cdGxldCBsaW5lID0gXCJcIiwgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSwgYWRkU3VmZml4ID0gITAsIGlzQ29uc3RydWN0b3IgPSB0aGlzLmlzQ29uc3RydWN0b3IoKTtcblx0aWYgKHRoaXMuaXNUb3BsZXZlbCgpIHx8IGlzQ29uc3RydWN0b3IpIGlzQ29uc3RydWN0b3IgPyBsaW5lICs9IGBuZXcgJHtmdW5jdGlvbk5hbWUgfHwgXCI8YW5vbnltb3VzPlwifWAgOiBmdW5jdGlvbk5hbWUgPyBsaW5lICs9IGZ1bmN0aW9uTmFtZSA6IChsaW5lICs9IGZpbGVMb2NhdGlvbiwgYWRkU3VmZml4ID0gITEpO1xuXHRlbHNlIHtcblx0XHRsZXQgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG5cdFx0dHlwZU5hbWUgPT09IFwiW29iamVjdCBPYmplY3RdXCIgJiYgKHR5cGVOYW1lID0gXCJudWxsXCIpO1xuXHRcdGxldCBtZXRob2ROYW1lID0gdGhpcy5nZXRNZXRob2ROYW1lKCk7XG5cdFx0ZnVuY3Rpb25OYW1lID8gKHR5cGVOYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKHR5cGVOYW1lKSAhPT0gMCAmJiAobGluZSArPSBgJHt0eXBlTmFtZX0uYCksIGxpbmUgKz0gZnVuY3Rpb25OYW1lLCBtZXRob2ROYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKGAuJHttZXRob2ROYW1lfWApICE9PSBmdW5jdGlvbk5hbWUubGVuZ3RoIC0gbWV0aG9kTmFtZS5sZW5ndGggLSAxICYmIChsaW5lICs9IGAgW2FzICR7bWV0aG9kTmFtZX1dYCkpIDogbGluZSArPSBgJHt0eXBlTmFtZX0uJHttZXRob2ROYW1lIHx8IFwiPGFub255bW91cz5cIn1gO1xuXHR9XG5cdHJldHVybiBhZGRTdWZmaXggJiYgKGxpbmUgKz0gYCAoJHtmaWxlTG9jYXRpb259KWApLCBsaW5lO1xufVxuZnVuY3Rpb24gY2xvbmVDYWxsU2l0ZShmcmFtZSkge1xuXHRsZXQgb2JqZWN0ID0ge307XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJhbWUpKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0bGV0IGtleSA9IG5hbWU7XG5cdFx0b2JqZWN0W2tleV0gPSAvXig/OmlzfGdldCkvLnRlc3QobmFtZSkgPyBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmcmFtZVtrZXldLmNhbGwoZnJhbWUpO1xuXHRcdH0gOiBmcmFtZVtrZXldO1xuXHR9KSwgb2JqZWN0LnRvU3RyaW5nID0gQ2FsbFNpdGVUb1N0cmluZywgb2JqZWN0O1xufVxuZnVuY3Rpb24gd3JhcENhbGxTaXRlKGZyYW1lLCBzdGF0ZSkge1xuXHRpZiAoc3RhdGUgPT09IHZvaWQgMCAmJiAoc3RhdGUgPSB7XG5cdFx0bmV4dFBvc2l0aW9uOiBudWxsLFxuXHRcdGN1clBvc2l0aW9uOiBudWxsXG5cdH0pLCBmcmFtZS5pc05hdGl2ZSgpKSByZXR1cm4gc3RhdGUuY3VyUG9zaXRpb24gPSBudWxsLCBmcmFtZTtcblx0bGV0IHNvdXJjZSA9IGZyYW1lLmdldEZpbGVOYW1lKCkgfHwgZnJhbWUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRsZXQgcG9zaXRpb24gPSBtYXBTb3VyY2VQb3NpdGlvbih7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0c291cmNlLFxuXHRcdFx0bGluZTogZnJhbWUuZ2V0TGluZU51bWJlcigpID8/IDAsXG5cdFx0XHRjb2x1bW46IChmcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSA/PyAxKSAtIDFcblx0XHR9KTtcblx0XHRzdGF0ZS5jdXJQb3NpdGlvbiA9IHBvc2l0aW9uLCBmcmFtZSA9IGNsb25lQ2FsbFNpdGUoZnJhbWUpO1xuXHRcdGxldCBvcmlnaW5hbEZ1bmN0aW9uTmFtZSA9IGZyYW1lLmdldEZ1bmN0aW9uTmFtZTtcblx0XHRyZXR1cm4gZnJhbWUuZ2V0RnVuY3Rpb25OYW1lID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRsZXQgbmFtZSA9IHN0YXRlLm5leHRQb3NpdGlvbiA9PSBudWxsID8gb3JpZ2luYWxGdW5jdGlvbk5hbWUoKSA6IHN0YXRlLm5leHRQb3NpdGlvbi5uYW1lIHx8IG9yaWdpbmFsRnVuY3Rpb25OYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJldmFsXCIgJiYgXCJfdml0ZVwiIGluIHBvc2l0aW9uID8gbnVsbCA6IG5hbWU7XG5cdFx0fSwgZnJhbWUuZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5zb3VyY2UgPz8gbnVsbDtcblx0XHR9LCBmcmFtZS5nZXRMaW5lTnVtYmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcG9zaXRpb24ubGluZTtcblx0XHR9LCBmcmFtZS5nZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5jb2x1bW4gKyAxO1xuXHRcdH0sIGZyYW1lLmdldFNjcmlwdE5hbWVPclNvdXJjZVVSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHBvc2l0aW9uLnNvdXJjZTtcblx0XHR9LCBmcmFtZTtcblx0fVxuXHRsZXQgb3JpZ2luID0gZnJhbWUuaXNFdmFsKCkgJiYgZnJhbWUuZ2V0RXZhbE9yaWdpbigpO1xuXHRyZXR1cm4gb3JpZ2luID8gKG9yaWdpbiA9IG1hcEV2YWxPcmlnaW4ob3JpZ2luKSwgZnJhbWUgPSBjbG9uZUNhbGxTaXRlKGZyYW1lKSwgZnJhbWUuZ2V0RXZhbE9yaWdpbiA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBvcmlnaW4gfHwgdm9pZCAwO1xuXHR9LCBmcmFtZSkgOiBmcmFtZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVTdGFja1RyYWNlKGVycm9yLCBzdGFjaykge1xuXHRsZXQgZXJyb3JTdHJpbmcgPSBgJHtlcnJvci5uYW1lIHx8IFwiRXJyb3JcIn06ICR7ZXJyb3IubWVzc2FnZSB8fCBcIlwifWAsIHN0YXRlID0ge1xuXHRcdG5leHRQb3NpdGlvbjogbnVsbCxcblx0XHRjdXJQb3NpdGlvbjogbnVsbFxuXHR9LCBwcm9jZXNzZWRTdGFjayA9IFtdO1xuXHRmb3IgKGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHByb2Nlc3NlZFN0YWNrLnB1c2goYFxcbiAgICBhdCAke3dyYXBDYWxsU2l0ZShzdGFja1tpXSwgc3RhdGUpfWApLCBzdGF0ZS5uZXh0UG9zaXRpb24gPSBzdGF0ZS5jdXJQb3NpdGlvbjtcblx0cmV0dXJuIHN0YXRlLmN1clBvc2l0aW9uID0gc3RhdGUubmV4dFBvc2l0aW9uID0gbnVsbCwgZXJyb3JTdHJpbmcgKyBwcm9jZXNzZWRTdGFjay5yZXZlcnNlKCkuam9pbihcIlwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbmRleC50c1xuZnVuY3Rpb24gZW5hYmxlU291cmNlTWFwU3VwcG9ydChydW5uZXIpIHtcblx0aWYgKHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yID09PSBcIm5vZGVcIikge1xuXHRcdGlmICh0eXBlb2YgcHJvY2VzcyA+IFwidVwiKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIFxcXCJzb3VyY2VtYXBJbnRlcmNlcHRvcjogJ25vZGUnXFxcIiBiZWNhdXNlIGdsb2JhbCBcXFwicHJvY2Vzc1xcXCIgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZS5cIik7XG5cdFx0aWYgKHR5cGVvZiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkICE9IFwiZnVuY3Rpb25cIikgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBcXFwic291cmNlbWFwSW50ZXJjZXB0b3I6ICdub2RlJ1xcXCIgYmVjYXVzZSBcXFwicHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZFxcXCIgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIHVzZSBOb2RlID49IDE2LjYuMC5cIik7XG5cdFx0bGV0IGlzRW5hYmxlZEFscmVhZHkgPSBwcm9jZXNzLnNvdXJjZU1hcHNFbmFibGVkID8/ICExO1xuXHRcdHJldHVybiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkKCEwKSwgKCkgPT4gIWlzRW5hYmxlZEFscmVhZHkgJiYgcHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZCghMSk7XG5cdH1cblx0cmV0dXJuIGludGVyY2VwdFN0YWNrVHJhY2UocnVubmVyLCB0eXBlb2YgcnVubmVyLm9wdGlvbnMuc291cmNlbWFwSW50ZXJjZXB0b3IgPT0gXCJvYmplY3RcIiA/IHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yIDogdm9pZCAwKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2VzbUV2YWx1YXRvci50c1xudmFyIEVTTW9kdWxlc0V2YWx1YXRvciA9IGNsYXNzIHtcblx0c3RhcnRPZmZzZXQgPSBnZXRBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50KCk7XG5cdGFzeW5jIHJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSkge1xuXHRcdGF3YWl0IG5ldyBBc3luY0Z1bmN0aW9uKHNzck1vZHVsZUV4cG9ydHNLZXksIHNzckltcG9ydE1ldGFLZXksIHNzckltcG9ydEtleSwgc3NyRHluYW1pY0ltcG9ydEtleSwgc3NyRXhwb3J0QWxsS2V5LCBzc3JFeHBvcnROYW1lS2V5LCBcIlxcXCJ1c2Ugc3RyaWN0XFxcIjtcIiArIGNvZGUpKGNvbnRleHRbc3NyTW9kdWxlRXhwb3J0c0tleV0sIGNvbnRleHRbc3NySW1wb3J0TWV0YUtleV0sIGNvbnRleHRbc3NySW1wb3J0S2V5XSwgY29udGV4dFtzc3JEeW5hbWljSW1wb3J0S2V5XSwgY29udGV4dFtzc3JFeHBvcnRBbGxLZXldLCBjb250ZXh0W3NzckV4cG9ydE5hbWVLZXldKSwgT2JqZWN0LnNlYWwoY29udGV4dFtzc3JNb2R1bGVFeHBvcnRzS2V5XSk7XG5cdH1cblx0cnVuRXh0ZXJuYWxNb2R1bGUoZmlsZXBhdGgpIHtcblx0XHRyZXR1cm4gaW1wb3J0KGZpbGVwYXRoKTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2ltcG9ydE1ldGFSZXNvbHZlci50c1xuY29uc3QgY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UgPSBcInZpdGUtbW9kdWxlLXJ1bm5lcjppbXBvcnQtbWV0YS1yZXNvbHZlL3YxL1wiLCBjdXN0b21pemF0aW9uSG9va3NNb2R1bGUgPSBgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfSkpIHtcbiAgICBjb25zdCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfS5sZW5ndGgpXG4gICAgY29uc3QgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKVxuICAgIHNwZWNpZmllciA9IHBhcnNlZFNwZWNpZmllclxuICAgIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXJcbiAgfVxuICByZXR1cm4gbmV4dFJlc29sdmUoc3BlY2lmaWVyLCBjb250ZXh0KVxufVxuXG5gO1xuZnVuY3Rpb24gY3VzdG9taXphdGlvbkhvb2tSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcblx0aWYgKHNwZWNpZmllci5zdGFydHNXaXRoKGN1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlKSkge1xuXHRcdGxldCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKDQyKSwgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRzcGVjaWZpZXIgPSBwYXJzZWRTcGVjaWZpZXIsIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXI7XG5cdH1cblx0cmV0dXJuIG5leHRSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCk7XG59XG5sZXQgaXNIb29rUmVnaXN0ZXJlZCA9ICExO1xuZnVuY3Rpb24gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCkge1xuXHRpZiAoaXNIb29rUmVnaXN0ZXJlZCkgcmV0dXJuIGltcG9ydE1ldGFSZXNvbHZlV2l0aEN1c3RvbUhvb2s7XG5cdGxldCBtb2R1bGU7XG5cdHRyeSB7XG5cdFx0bW9kdWxlID0gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiA/IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6bW9kdWxlXCIpLk1vZHVsZSA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChtb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLnJlZ2lzdGVySG9va3MpIHJldHVybiBtb2R1bGUucmVnaXN0ZXJIb29rcyh7IHJlc29sdmU6IGN1c3RvbWl6YXRpb25Ib29rUmVzb2x2ZSB9KSwgaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdGlmIChtb2R1bGUucmVnaXN0ZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCBob29rTW9kdWxlQ29udGVudCA9IGBkYXRhOnRleHQvamF2YXNjcmlwdCwke2VuY29kZVVSSShjdXN0b21pemF0aW9uSG9va3NNb2R1bGUpfWA7XG5cdFx0XHRcdG1vZHVsZS5yZWdpc3Rlcihob29rTW9kdWxlQ29udGVudCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChcImNvZGVcIiBpbiBlICYmIGUuY29kZSA9PT0gXCJFUlJfTkVUV09SS19JTVBPUlRfRElTQUxMT1dFRFwiKSByZXR1cm47XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gaW1wb3J0TWV0YVJlc29sdmVXaXRoQ3VzdG9tSG9vayhzcGVjaWZpZXIsIGltcG9ydGVyKSB7XG5cdHJldHVybiBpbXBvcnQubWV0YS5yZXNvbHZlKGAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfSR7SlNPTi5zdHJpbmdpZnkoW3NwZWNpZmllciwgaW1wb3J0ZXJdKX1gKTtcbn1cbmAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfWA7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbW9kdWxlLXJ1bm5lci9jcmVhdGVJbXBvcnRNZXRhLnRzXG5jb25zdCBlbnZQcm94eSA9IG5ldyBQcm94eSh7fSwgeyBnZXQoXywgcCkge1xuXHR0aHJvdyBFcnJvcihgW21vZHVsZSBydW5uZXJdIER5bmFtaWMgYWNjZXNzIG9mIFwiaW1wb3J0Lm1ldGEuZW52XCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlLCB1c2UgXCJpbXBvcnQubWV0YS5lbnYuJHtTdHJpbmcocCl9XCIgaW5zdGVhZC5gKTtcbn0gfSk7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSB7XG5cdGxldCBocmVmID0gcG9zaXhQYXRoVG9GaWxlSHJlZihtb2R1bGVQYXRoKSwgZmlsZW5hbWUgPSBtb2R1bGVQYXRoLCBkaXJuYW1lID0gcG9zaXhEaXJuYW1lKG1vZHVsZVBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGZpbGVuYW1lOiBpc1dpbmRvd3MgPyB0b1dpbmRvd3NQYXRoKGZpbGVuYW1lKSA6IGZpbGVuYW1lLFxuXHRcdGRpcm5hbWU6IGlzV2luZG93cyA/IHRvV2luZG93c1BhdGgoZGlybmFtZSkgOiBkaXJuYW1lLFxuXHRcdHVybDogaHJlZixcblx0XHRlbnY6IGVudlByb3h5LFxuXHRcdHJlc29sdmUoX2lkLCBfcGFyZW50KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBcXFwiaW1wb3J0Lm1ldGEucmVzb2x2ZVxcXCIgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fSxcblx0XHRnbG9iKCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJbbW9kdWxlIHJ1bm5lcl0gXFxcImltcG9ydC5tZXRhLmdsb2JcXFwiIGlzIHN0YXRpY2FsbHkgcmVwbGFjZWQgZHVyaW5nIGZpbGUgdHJhbnNmb3JtYXRpb24uIE1ha2Ugc3VyZSB0byByZWZlcmVuY2UgaXQgYnkgdGhlIGZ1bGwgbmFtZS5cIik7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4qIENyZWF0ZSBpbXBvcnQubWV0YSBvYmplY3QgZm9yIE5vZGUuanMuXG4qL1xuZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1ldGEobW9kdWxlUGF0aCkge1xuXHRsZXQgZGVmYXVsdE1ldGEgPSBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgaHJlZiA9IGRlZmF1bHRNZXRhLnVybCwgaW1wb3J0TWV0YVJlc29sdmVyID0gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCk7XG5cdHJldHVybiB7XG5cdFx0Li4uZGVmYXVsdE1ldGEsXG5cdFx0bWFpbjogITEsXG5cdFx0cmVzb2x2ZShpZCwgcGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gKGltcG9ydE1ldGFSZXNvbHZlciA/PyBkZWZhdWx0TWV0YS5yZXNvbHZlKShpZCwgcGFyZW50ID8/IGhyZWYpO1xuXHRcdH1cblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3J1bm5lci50c1xudmFyIE1vZHVsZVJ1bm5lciA9IGNsYXNzIHtcblx0ZXZhbHVhdGVkTW9kdWxlcztcblx0aG1yQ2xpZW50O1xuXHR0cmFuc3BvcnQ7XG5cdHJlc2V0U291cmNlTWFwU3VwcG9ydDtcblx0Y29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGlzQnVpbHRpbjtcblx0YnVpbHRpbnNQcm9taXNlO1xuXHRjbG9zZWQgPSAhMTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgZXZhbHVhdG9yID0gbmV3IEVTTW9kdWxlc0V2YWx1YXRvcigpLCBkZWJ1Zykge1xuXHRcdGlmICh0aGlzLm9wdGlvbnMgPSBvcHRpb25zLCB0aGlzLmV2YWx1YXRvciA9IGV2YWx1YXRvciwgdGhpcy5kZWJ1ZyA9IGRlYnVnLCB0aGlzLmV2YWx1YXRlZE1vZHVsZXMgPSBvcHRpb25zLmV2YWx1YXRlZE1vZHVsZXMgPz8gbmV3IEV2YWx1YXRlZE1vZHVsZXMoKSwgdGhpcy50cmFuc3BvcnQgPSBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpLCBvcHRpb25zLmhtciAhPT0gITEpIHtcblx0XHRcdGxldCBvcHRpb25zSG1yID0gb3B0aW9ucy5obXIgPz8gITA7XG5cdFx0XHRpZiAodGhpcy5obXJDbGllbnQgPSBuZXcgSE1SQ2xpZW50KG9wdGlvbnNIbXIgPT09ICEwIHx8IG9wdGlvbnNIbXIubG9nZ2VyID09PSB2b2lkIDAgPyBobXJMb2dnZXIgOiBvcHRpb25zSG1yLmxvZ2dlciA9PT0gITEgPyBzaWxlbnRDb25zb2xlIDogb3B0aW9uc0htci5sb2dnZXIsIHRoaXMudHJhbnNwb3J0LCAoeyBhY2NlcHRlZFBhdGggfSkgPT4gdGhpcy5pbXBvcnQoYWNjZXB0ZWRQYXRoKSksICF0aGlzLnRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcIkhNUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcnVubmVyIHRyYW5zcG9ydCwgYnV0IGBobXJgIG9wdGlvbiB3YXMgc2V0IHRvIHRydWVcIik7XG5cdFx0XHR0aGlzLnRyYW5zcG9ydC5jb25uZWN0KGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIodGhpcykpO1xuXHRcdH0gZWxzZSB0aGlzLnRyYW5zcG9ydC5jb25uZWN0Py4oKTtcblx0XHRvcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yICE9PSAhMSAmJiAodGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQgPSBlbmFibGVTb3VyY2VNYXBTdXBwb3J0KHRoaXMpKTtcblx0fVxuXHQvKipcblx0KiBVUkwgdG8gZXhlY3V0ZS4gQWNjZXB0cyBmaWxlIHBhdGgsIHNlcnZlciBwYXRoIG9yIGlkIHJlbGF0aXZlIHRvIHRoZSByb290LlxuXHQqL1xuXHRhc3luYyBpbXBvcnQodXJsKSB7XG5cdFx0bGV0IGZldGNoZWRNb2R1bGUgPSBhd2FpdCB0aGlzLmNhY2hlZE1vZHVsZSh1cmwpO1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QodXJsLCBmZXRjaGVkTW9kdWxlKTtcblx0fVxuXHQvKipcblx0KiBDbGVhciBhbGwgY2FjaGVzIGluY2x1ZGluZyBITVIgbGlzdGVuZXJzLlxuXHQqL1xuXHRjbGVhckNhY2hlKCkge1xuXHRcdHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpLCB0aGlzLmhtckNsaWVudD8uY2xlYXIoKTtcblx0fVxuXHQvKipcblx0KiBDbGVhcnMgYWxsIGNhY2hlcywgcmVtb3ZlcyBhbGwgSE1SIGxpc3RlbmVycywgYW5kIHJlc2V0cyBzb3VyY2UgbWFwIHN1cHBvcnQuXG5cdCogVGhpcyBtZXRob2QgZG9lc24ndCBzdG9wIHRoZSBITVIgY29ubmVjdGlvbi5cblx0Ki9cblx0YXN5bmMgY2xvc2UoKSB7XG5cdFx0dGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQ/LigpLCB0aGlzLmNsZWFyQ2FjaGUoKSwgdGhpcy5obXJDbGllbnQgPSB2b2lkIDAsIHRoaXMuY2xvc2VkID0gITAsIGF3YWl0IHRoaXMudHJhbnNwb3J0LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgYHRydWVgIGlmIHRoZSBydW50aW1lIGhhcyBiZWVuIGNsb3NlZCBieSBjYWxsaW5nIGBjbG9zZSgpYCBtZXRob2QuXG5cdCovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiB0aGlzLmNsb3NlZDtcblx0fVxuXHRwcm9jZXNzSW1wb3J0KGV4cG9ydHMsIGZldGNoUmVzdWx0LCBtZXRhZGF0YSkge1xuXHRcdGlmICghKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkpIHJldHVybiBleHBvcnRzO1xuXHRcdGxldCB7IHVybCwgdHlwZSB9ID0gZmV0Y2hSZXN1bHQ7XG5cdFx0cmV0dXJuIHR5cGUgIT09IFwibW9kdWxlXCIgJiYgdHlwZSAhPT0gXCJjb21tb25qc1wiIHx8IGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UoZXhwb3J0cywgdXJsLCB0eXBlLCBtZXRhZGF0YSksIGV4cG9ydHM7XG5cdH1cblx0aXNDaXJjdWxhck1vZHVsZShtb2QpIHtcblx0XHRmb3IgKGxldCBpbXBvcnRlZEZpbGUgb2YgbW9kLmltcG9ydHMpIGlmIChtb2QuaW1wb3J0ZXJzLmhhcyhpbXBvcnRlZEZpbGUpKSByZXR1cm4gITA7XG5cdFx0cmV0dXJuICExO1xuXHR9XG5cdGlzQ2lyY3VsYXJJbXBvcnQoaW1wb3J0ZXJzLCBtb2R1bGVVcmwsIHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG5cdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgaW1wb3J0ZXJzKSB7XG5cdFx0XHRpZiAodmlzaXRlZC5oYXMoaW1wb3J0ZXIpKSBjb250aW51ZTtcblx0XHRcdGlmICh2aXNpdGVkLmFkZChpbXBvcnRlciksIGltcG9ydGVyID09PSBtb2R1bGVVcmwpIHJldHVybiAhMDtcblx0XHRcdGxldCBtb2QgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZ2V0TW9kdWxlQnlJZChpbXBvcnRlcik7XG5cdFx0XHRpZiAobW9kICYmIG1vZC5pbXBvcnRlcnMuc2l6ZSAmJiB0aGlzLmlzQ2lyY3VsYXJJbXBvcnQobW9kLmltcG9ydGVycywgbW9kdWxlVXJsLCB2aXNpdGVkKSkgcmV0dXJuICEwO1xuXHRcdH1cblx0XHRyZXR1cm4gITE7XG5cdH1cblx0YXN5bmMgY2FjaGVkUmVxdWVzdCh1cmwsIG1vZCwgY2FsbHN0YWNrID0gW10sIG1ldGFkYXRhKSB7XG5cdFx0bGV0IG1ldGEgPSBtb2QubWV0YSwgbW9kdWxlSWQgPSBtZXRhLmlkLCB7IGltcG9ydGVycyB9ID0gbW9kLCBpbXBvcnRlZSA9IGNhbGxzdGFja1tjYWxsc3RhY2subGVuZ3RoIC0gMV07XG5cdFx0aWYgKGltcG9ydGVlICYmIGltcG9ydGVycy5hZGQoaW1wb3J0ZWUpLCBtb2QuZXZhbHVhdGVkICYmIG1vZC5wcm9taXNlKSByZXR1cm4gdGhpcy5wcm9jZXNzSW1wb3J0KGF3YWl0IG1vZC5wcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0aWYgKChjYWxsc3RhY2suaW5jbHVkZXMobW9kdWxlSWQpIHx8IHRoaXMuaXNDaXJjdWxhck1vZHVsZShtb2QpIHx8IHRoaXMuaXNDaXJjdWxhckltcG9ydChpbXBvcnRlcnMsIG1vZHVsZUlkKSkgJiYgbW9kLmV4cG9ydHMpIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQobW9kLmV4cG9ydHMsIG1ldGEsIG1ldGFkYXRhKTtcblx0XHRsZXQgZGVidWdUaW1lcjtcblx0XHR0aGlzLmRlYnVnICYmIChkZWJ1Z1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRlYnVnKGBbbW9kdWxlIHJ1bm5lcl0gbW9kdWxlICR7bW9kdWxlSWR9IHRha2VzIG92ZXIgMnMgdG8gbG9hZC5cXG4ke2BzdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIG1vZHVsZUlkXS5yZXZlcnNlKCkubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpfWB9YCk7XG5cdFx0fSwgMmUzKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2QucHJvbWlzZSkgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBtb2QucHJvbWlzZSwgbWV0YSwgbWV0YWRhdGEpO1xuXHRcdFx0bGV0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QodXJsLCBtb2QsIGNhbGxzdGFjayk7XG5cdFx0XHRyZXR1cm4gbW9kLnByb21pc2UgPSBwcm9taXNlLCBtb2QuZXZhbHVhdGVkID0gITEsIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBwcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdG1vZC5ldmFsdWF0ZWQgPSAhMCwgZGVidWdUaW1lciAmJiBjbGVhclRpbWVvdXQoZGVidWdUaW1lcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNhY2hlZE1vZHVsZSh1cmwsIGltcG9ydGVyKSB7XG5cdFx0bGV0IGNhY2hlZCA9IHRoaXMuY29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcy5nZXQodXJsKTtcblx0XHRpZiAoY2FjaGVkKSB0aGlzLmRlYnVnPy4oXCJbbW9kdWxlIHJ1bm5lcl0gdXNpbmcgY2FjaGVkIG1vZHVsZSBpbmZvIGZvclwiLCB1cmwpO1xuXHRcdGVsc2Uge1xuXHRcdFx0bGV0IGNhY2hlZE1vZHVsZSA9IHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeVVybCh1cmwpO1xuXHRcdFx0Y2FjaGVkID0gdGhpcy5nZXRNb2R1bGVJbmZvcm1hdGlvbih1cmwsIGltcG9ydGVyLCBjYWNoZWRNb2R1bGUpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmN1cnJlbnRNb2R1bGVOb2RlUHJvbWlzZXMuZGVsZXRlKHVybCk7XG5cdFx0XHR9KSwgdGhpcy5jb25jdXJyZW50TW9kdWxlTm9kZVByb21pc2VzLnNldCh1cmwsIGNhY2hlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0ZW5zdXJlQnVpbHRpbnMoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnVpbHRpbikgcmV0dXJuIHRoaXMuYnVpbHRpbnNQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nIGJ1aWx0aW5zIGZyb20gc2VydmVyXCIpO1xuXHRcdFx0XHRsZXQgYnVpbHRpbnMgPSAoYXdhaXQgdGhpcy50cmFuc3BvcnQuaW52b2tlKFwiZ2V0QnVpbHRpbnNcIiwgW10pKS5tYXAoKGJ1aWx0aW4pID0+IHR5cGVvZiBidWlsdGluID09IFwib2JqZWN0XCIgJiYgYnVpbHRpbiAmJiBcInR5cGVcIiBpbiBidWlsdGluID8gYnVpbHRpbi50eXBlID09PSBcInN0cmluZ1wiID8gYnVpbHRpbi52YWx1ZSA6IG5ldyBSZWdFeHAoYnVpbHRpbi5zb3VyY2UsIGJ1aWx0aW4uZmxhZ3MpIDogYnVpbHRpbik7XG5cdFx0XHRcdHRoaXMuaXNCdWlsdGluID0gY3JlYXRlSXNCdWlsdGluKGJ1aWx0aW5zKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGJ1aWx0aW5zIGxvYWRlZDpcIiwgYnVpbHRpbnMpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5idWlsdGluc1Byb21pc2UgPSB2b2lkIDA7XG5cdFx0XHR9XG5cdFx0fSkoKSwgdGhpcy5idWlsdGluc1Byb21pc2U7XG5cdH1cblx0YXN5bmMgZ2V0TW9kdWxlSW5mb3JtYXRpb24odXJsLCBpbXBvcnRlciwgY2FjaGVkTW9kdWxlKSB7XG5cdFx0aWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBFcnJvcihcIlZpdGUgbW9kdWxlIHJ1bm5lciBoYXMgYmVlbiBjbG9zZWQuXCIpO1xuXHRcdGF3YWl0IHRoaXMuZW5zdXJlQnVpbHRpbnMoKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nXCIsIHVybCk7XG5cdFx0bGV0IGlzQ2FjaGVkID0gISEodHlwZW9mIGNhY2hlZE1vZHVsZSA9PSBcIm9iamVjdFwiICYmIGNhY2hlZE1vZHVsZS5tZXRhKSwgZmV0Y2hlZE1vZHVsZSA9IHVybC5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHwgdGhpcy5pc0J1aWx0aW4/Lih1cmwpID8ge1xuXHRcdFx0ZXh0ZXJuYWxpemU6IHVybCxcblx0XHRcdHR5cGU6IFwiYnVpbHRpblwiXG5cdFx0fSA6IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmludm9rZShcImZldGNoTW9kdWxlXCIsIFtcblx0XHRcdHVybCxcblx0XHRcdGltcG9ydGVyLFxuXHRcdFx0e1xuXHRcdFx0XHRjYWNoZWQ6IGlzQ2FjaGVkLFxuXHRcdFx0XHRzdGFydE9mZnNldDogdGhpcy5ldmFsdWF0b3Iuc3RhcnRPZmZzZXRcblx0XHRcdH1cblx0XHRdKTtcblx0XHRpZiAoXCJjYWNoZVwiIGluIGZldGNoZWRNb2R1bGUpIHtcblx0XHRcdGlmICghY2FjaGVkTW9kdWxlIHx8ICFjYWNoZWRNb2R1bGUubWV0YSkgdGhyb3cgRXJyb3IoYE1vZHVsZSBcIiR7dXJsfVwiIHdhcyBtaXN0YWtlbmx5IGludmFsaWRhdGVkIGR1cmluZyBmZXRjaCBwaGFzZS5gKTtcblx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGU7XG5cdFx0fVxuXHRcdGxldCBtb2R1bGVJZCA9IFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaGVkTW9kdWxlID8gZmV0Y2hlZE1vZHVsZS5leHRlcm5hbGl6ZSA6IGZldGNoZWRNb2R1bGUuaWQsIG1vZHVsZVVybCA9IFwidXJsXCIgaW4gZmV0Y2hlZE1vZHVsZSA/IGZldGNoZWRNb2R1bGUudXJsIDogdXJsLCBtb2R1bGUgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZW5zdXJlTW9kdWxlKG1vZHVsZUlkLCBtb2R1bGVVcmwpO1xuXHRcdHJldHVybiBcImludmFsaWRhdGVcIiBpbiBmZXRjaGVkTW9kdWxlICYmIGZldGNoZWRNb2R1bGUuaW52YWxpZGF0ZSAmJiB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuaW52YWxpZGF0ZU1vZHVsZShtb2R1bGUpLCBmZXRjaGVkTW9kdWxlLnVybCA9IG1vZHVsZVVybCwgZmV0Y2hlZE1vZHVsZS5pZCA9IG1vZHVsZUlkLCBtb2R1bGUubWV0YSA9IGZldGNoZWRNb2R1bGUsIG1vZHVsZTtcblx0fVxuXHRhc3luYyBkaXJlY3RSZXF1ZXN0KHVybCwgbW9kLCBfY2FsbHN0YWNrKSB7XG5cdFx0bGV0IGZldGNoUmVzdWx0ID0gbW9kLm1ldGEsIG1vZHVsZUlkID0gZmV0Y2hSZXN1bHQuaWQsIGNhbGxzdGFjayA9IFsuLi5fY2FsbHN0YWNrLCBtb2R1bGVJZF0sIHJlcXVlc3QgPSBhc3luYyAoZGVwLCBtZXRhZGF0YSkgPT4ge1xuXHRcdFx0bGV0IGltcG9ydGVyID0gXCJmaWxlXCIgaW4gZmV0Y2hSZXN1bHQgJiYgZmV0Y2hSZXN1bHQuZmlsZSB8fCBtb2R1bGVJZCwgZGVwTW9kID0gYXdhaXQgdGhpcy5jYWNoZWRNb2R1bGUoZGVwLCBpbXBvcnRlcik7XG5cdFx0XHRyZXR1cm4gZGVwTW9kLmltcG9ydGVycy5hZGQobW9kdWxlSWQpLCBtb2QuaW1wb3J0cy5hZGQoZGVwTW9kLmlkKSwgdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgZGVwTW9kLCBjYWxsc3RhY2ssIG1ldGFkYXRhKTtcblx0XHR9LCBkeW5hbWljUmVxdWVzdCA9IGFzeW5jIChkZXApID0+IChkZXAgPSBTdHJpbmcoZGVwKSwgZGVwWzBdID09PSBcIi5cIiAmJiAoZGVwID0gcG9zaXhSZXNvbHZlKHBvc2l4RGlybmFtZSh1cmwpLCBkZXApKSwgcmVxdWVzdChkZXAsIHsgaXNEeW5hbWljSW1wb3J0OiAhMCB9KSk7XG5cdFx0aWYgKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkge1xuXHRcdFx0bGV0IHsgZXh0ZXJuYWxpemUgfSA9IGZldGNoUmVzdWx0O1xuXHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGV4dGVybmFsaXppbmdcIiwgZXh0ZXJuYWxpemUpO1xuXHRcdFx0bGV0IGV4cG9ydHMgPSBhd2FpdCB0aGlzLmV2YWx1YXRvci5ydW5FeHRlcm5hbE1vZHVsZShleHRlcm5hbGl6ZSk7XG5cdFx0XHRyZXR1cm4gbW9kLmV4cG9ydHMgPSBleHBvcnRzLCBleHBvcnRzO1xuXHRcdH1cblx0XHRsZXQgeyBjb2RlLCBmaWxlIH0gPSBmZXRjaFJlc3VsdDtcblx0XHRpZiAoY29kZSA9PSBudWxsKSB7XG5cdFx0XHRsZXQgaW1wb3J0ZXIgPSBjYWxsc3RhY2tbY2FsbHN0YWNrLmxlbmd0aCAtIDJdO1xuXHRcdFx0dGhyb3cgRXJyb3IoYFttb2R1bGUgcnVubmVyXSBGYWlsZWQgdG8gbG9hZCBcIiR7dXJsfVwiJHtpbXBvcnRlciA/IGAgaW1wb3J0ZWQgZnJvbSAke2ltcG9ydGVyfWAgOiBcIlwifWApO1xuXHRcdH1cblx0XHRsZXQgY3JlYXRlSW1wb3J0TWV0YSA9IHRoaXMub3B0aW9ucy5jcmVhdGVJbXBvcnRNZXRhID8/IGNyZWF0ZURlZmF1bHRJbXBvcnRNZXRhLCBtb2R1bGVQYXRoID0gY2xlYW5VcmwoZmlsZSB8fCBtb2R1bGVJZCksIGhyZWYgPSBwb3NpeFBhdGhUb0ZpbGVIcmVmKG1vZHVsZVBhdGgpLCBtZXRhID0gYXdhaXQgY3JlYXRlSW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdFx0dmFsdWU6IFwiTW9kdWxlXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiAhMSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogITFcblx0XHR9KSwgbW9kLmV4cG9ydHMgPSBleHBvcnRzO1xuXHRcdGxldCBob3RDb250ZXh0O1xuXHRcdHRoaXMuaG1yQ2xpZW50ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRhLCBcImhvdFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaG1yQ2xpZW50KSB0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBITVIgY2xpZW50IHdhcyBjbG9zZWQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGNyZWF0aW5nIGhtciBjb250ZXh0IGZvclwiLCBtb2QudXJsKSwgaG90Q29udGV4dCB8fD0gbmV3IEhNUkNvbnRleHQodGhpcy5obXJDbGllbnQsIG1vZC51cmwpLCBob3RDb250ZXh0O1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGhvdENvbnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRsZXQgY29udGV4dCA9IHtcblx0XHRcdFtzc3JJbXBvcnRLZXldOiByZXF1ZXN0LFxuXHRcdFx0W3NzckR5bmFtaWNJbXBvcnRLZXldOiBkeW5hbWljUmVxdWVzdCxcblx0XHRcdFtzc3JNb2R1bGVFeHBvcnRzS2V5XTogZXhwb3J0cyxcblx0XHRcdFtzc3JFeHBvcnRBbGxLZXldOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcblx0XHRcdFtzc3JFeHBvcnROYW1lS2V5XTogKG5hbWUsIGdldHRlcikgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogZ2V0dGVyXG5cdFx0XHR9KSxcblx0XHRcdFtzc3JJbXBvcnRNZXRhS2V5XTogbWV0YVxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuZGVidWc/LihcIlttb2R1bGUgcnVubmVyXSBleGVjdXRpbmdcIiwgaHJlZiksIGF3YWl0IHRoaXMuZXZhbHVhdG9yLnJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSwgbW9kKSwgZXhwb3J0cztcblx0fVxufTtcbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcblx0aWYgKGV4cG9ydHMgIT09IHNvdXJjZU1vZHVsZSAmJiAhKGlzUHJpbWl0aXZlKHNvdXJjZU1vZHVsZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2VNb2R1bGUpIHx8IHNvdXJjZU1vZHVsZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZU1vZHVsZSkgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIiAmJiAhKGtleSBpbiBleHBvcnRzKSkgdHJ5IHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogKCkgPT4gc291cmNlTW9kdWxlW2tleV1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2gge31cblx0fVxufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBFU01vZHVsZXNFdmFsdWF0b3IsIEV2YWx1YXRlZE1vZHVsZXMsIE1vZHVsZVJ1bm5lciwgY3JlYXRlRGVmYXVsdEltcG9ydE1ldGEsIGNyZWF0ZU5vZGVJbXBvcnRNZXRhLCBjcmVhdGVXZWJTb2NrZXRNb2R1bGVSdW5uZXJUcmFuc3BvcnQsIG5vcm1hbGl6ZU1vZHVsZUlkLCBzc3JEeW5hbWljSW1wb3J0S2V5LCBzc3JFeHBvcnRBbGxLZXksIHNzckV4cG9ydE5hbWVLZXksIHNzckltcG9ydEtleSwgc3NySW1wb3J0TWV0YUtleSwgc3NyTW9kdWxlRXhwb3J0c0tleSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLG9CQUFvQjtBQUN4QixxQkFBcUI7QUFHckIsTUFBTSxZQUFZLE9BQU8sVUFBVSxPQUFPLFFBQVEsYUFB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
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vitest@4.1.10_@opentelemetry+api@1.9.0_@types+node@25.0.7_@vitest+coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js
1
+ //#region ../../node_modules/.pnpm/vitest@4.1.10_@opentelemetry+api@1.9.0_@types+node@25.0.7_@vitest+coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js
2
2
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
3
3
  function getDefaultExportFromCjs(x) {
4
4
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -6,4 +6,4 @@ function getDefaultExportFromCjs(x) {
6
6
  //#endregion
7
7
  export { commonjsGlobal as c, getDefaultExportFromCjs as g };
8
8
 
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZXN0QDQuMS4xMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHR5cGVzK25vZGVAMjUuMC43X0B2aXRlc3QrY292ZXJhZ2UtdjhANC4xLjEwX21zX2Y5Y2ZjZmVkZGQ2M2U2NTZkNDAxMGM5ODUyMWFmMjZjL25vZGVfbW9kdWxlcy92aXRlc3QvZGlzdC9jaHVua3MvX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHt9O1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsIFwiZGVmYXVsdFwiKSA/IHhbXCJkZWZhdWx0XCJdIDogeDtcbn1cblxuZXhwb3J0IHsgY29tbW9uanNHbG9iYWwgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZyB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLGlCQUFpQixPQUFPLGVBQWUsY0FBYyxhQUFhLE9BQU8sV0FBVyxjQUFjLFNBQVMsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFDOUwsU0FBUyx3QkFBd0IsR0FBRztDQUNuQyxPQUFPLEtBQUssRUFBRSxjQUFjLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxhQUFhO0FBQ2pHIn0=
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZXN0QDQuMS4xMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHR5cGVzK25vZGVAMjUuMC43X0B2aXRlc3QrY292ZXJhZ2UtdjhANC4xLjEwX3ZpX2ExOTc3YjkzYWY3YmI2OTMwOGJjYjFkYmFiMzliNjE4L25vZGVfbW9kdWxlcy92aXRlc3QvZGlzdC9jaHVua3MvX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHt9O1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsIFwiZGVmYXVsdFwiKSA/IHhbXCJkZWZhdWx0XCJdIDogeDtcbn1cblxuZXhwb3J0IHsgY29tbW9uanNHbG9iYWwgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZyB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLGlCQUFpQixPQUFPLGVBQWUsY0FBYyxhQUFhLE9BQU8sV0FBVyxjQUFjLFNBQVMsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFDOUwsU0FBUyx3QkFBd0IsR0FBRztDQUNuQyxPQUFPLEtBQUssRUFBRSxjQUFjLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxhQUFhO0FBQ2pHIn0=