@projectcor/maia-components 2.35.4-4 → 2.35.6

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 (213) hide show
  1. package/lib/components/atoms/ActionableButton.js +6 -1
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +4 -63
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +4 -16
  4. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  5. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +20 -4
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +18 -7
  11. package/lib/components/atoms/MAIAInput/MAIAInput.js +42 -243
  12. package/lib/components/atoms/MAIAInput/styles.js +44 -41
  13. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  14. package/lib/components/atoms/icons/index.js +1 -5
  15. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +11 -34
  16. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
  17. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +16 -5
  18. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +23 -2
  19. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +33 -5
  20. package/lib/components/molecules/ChatAIHome/styles.js +11 -2
  21. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +31 -20
  22. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -4
  23. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +21 -61
  24. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  25. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +8 -1
  26. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +15 -9
  27. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +14 -3
  28. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  29. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +17 -11
  30. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +14 -5
  31. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  32. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +12 -2
  33. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  34. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +272 -334
  35. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +109 -132
  36. package/lib/components/molecules/ChatFooter/ChatFooter.js +63 -57
  37. package/lib/components/molecules/ChatFooter/styles.js +12 -6
  38. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  39. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +15 -5
  40. package/lib/components/molecules/Sidebar/Sidebar.js +7 -15
  41. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  42. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +33 -0
  43. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +47 -0
  44. package/lib/components/molecules/UsageBlockedBanner/index.js +2 -0
  45. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +46 -30
  46. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +38 -26
  47. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +209 -430
  48. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +74 -131
  49. package/lib/components/organisms/ChatAI/ChatAI.js +6 -1
  50. package/lib/constants/config.js +4 -1
  51. package/lib/constants/permissions/utils.js +3 -3
  52. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  53. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  54. package/lib/hooks/useChatManager/useChatManager.js +58 -38
  55. package/lib/hooks/useContextMentions.js +56 -96
  56. package/lib/hooks/useEntitySearch.js +278 -92
  57. package/lib/hooks/useEvent.js +2 -15
  58. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  59. package/lib/hooks/useMentionPopover.js +33 -9
  60. package/lib/lang/br/index.js +12 -39
  61. package/lib/lang/en/index.js +12 -39
  62. package/lib/lang/es/index.js +13 -40
  63. package/lib/lang/fr/index.js +13 -40
  64. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  65. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  66. package/lib/services/maia/Orchestrator/orchestrator.js +7 -16
  67. package/lib/services/maia/Skills/createSkill.js +1 -1
  68. package/lib/services/maia/Skills/getSkills.js +40 -70
  69. package/lib/services/maia/Skills/updateSkill.js +1 -1
  70. package/lib/services/maia/Usage/getUsage.js +45 -0
  71. package/lib/services/maia/Usage/index.js +6 -0
  72. package/lib/services/maia/index.js +4 -2
  73. package/lib/services/utils/MaiaApiError.js +34 -0
  74. package/lib/services/utils/fetchCOR.js +106 -57
  75. package/lib/services/utils/index.js +2 -1
  76. package/lib/store/faqsStore.types.js +1 -1
  77. package/lib/store/index.js +2 -1
  78. package/lib/store/sessions/sessionStreamManager.js +61 -35
  79. package/lib/store/sessions/sessions.types.js +1 -1
  80. package/lib/store/useChatsStore.js +3 -3
  81. package/lib/store/useUsageStore.js +108 -0
  82. package/lib/types/Chat.js +1 -1
  83. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  84. package/lib/types/agentModal.js +1 -1
  85. package/lib/types/skill.js +1 -1
  86. package/lib/types/usage.js +9 -0
  87. package/lib/utils/contextMentionTriggers.js +5 -2
  88. package/lib/utils/normalizeAgentConnectors.js +16 -44
  89. package/lib/utils/renderContextMentions.js +18 -39
  90. package/package.json +6 -9
  91. package/CHANGELOG.md +0 -727
  92. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  93. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  94. package/lib/components/atoms/Chip/Chip.spec.js +0 -32
  95. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  96. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  97. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  98. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -283
  99. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -68
  100. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  101. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  102. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  103. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  104. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  105. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  106. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  107. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  108. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  109. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  110. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -77
  111. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  112. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -291
  113. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  114. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  115. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -105
  116. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  117. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  118. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -192
  119. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -335
  120. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -315
  121. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  122. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  123. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  124. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  125. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -95
  126. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -96
  127. package/lib/hooks/useCaretPosition.spec.js +0 -58
  128. package/lib/hooks/useDebounce.spec.js +0 -42
  129. package/lib/hooks/useEvent.spec.js +0 -40
  130. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  131. package/lib/hooks/useModal/useModal.spec.js +0 -73
  132. package/lib/hooks/useResize.spec.js +0 -37
  133. package/lib/hooks/useSkillsCatalog.js +0 -66
  134. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  135. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  136. package/lib/hooks/useT.spec.js +0 -20
  137. package/lib/hooks/useToggle.spec.js +0 -33
  138. package/lib/services/maia/Access/updateAccess.spec.js +0 -108
  139. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -69
  140. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -74
  141. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  142. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -42
  143. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  144. package/lib/services/maia/Agents/getAgentById.spec.js +0 -55
  145. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -82
  146. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  147. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -47
  148. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  149. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  150. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  151. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  152. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  153. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  154. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  155. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  156. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  157. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  158. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  159. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -72
  160. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  161. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -83
  162. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  163. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  164. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  165. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  166. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  167. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  168. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  169. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  170. package/lib/services/maia/client.spec.js +0 -56
  171. package/lib/services/utils/fetchCOR.spec.js +0 -211
  172. package/lib/services/utils/getCookie.spec.js +0 -20
  173. package/lib/store/chatsSidebarOptimistic.spec.js +0 -120
  174. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  175. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  176. package/lib/store/sessions/sessions.types.spec.js +0 -16
  177. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  178. package/lib/store/useChatsStore.spec.js +0 -619
  179. package/lib/store/useFaqsStore.spec.js +0 -57
  180. package/lib/test/buttonMock.js +0 -22
  181. package/lib/test/fetchPolyfill.js +0 -160
  182. package/lib/test/fileMock.js +0 -2
  183. package/lib/test/global-context.js +0 -49
  184. package/lib/test/iconMock.js +0 -19
  185. package/lib/test/mockFetch.js +0 -49
  186. package/lib/test/portalRoot.js +0 -13
  187. package/lib/test/styleMock.js +0 -2
  188. package/lib/test/test-utils.js +0 -26
  189. package/lib/test/tooltipMock.js +0 -11
  190. package/lib/utils/agentDisplayName.spec.js +0 -44
  191. package/lib/utils/autoApproveStorage.spec.js +0 -25
  192. package/lib/utils/chatInputFiles.spec.js +0 -39
  193. package/lib/utils/contextMentionLabel.spec.js +0 -13
  194. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  195. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  196. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  197. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  198. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  199. package/lib/utils/formatUnreadCount.spec.js +0 -12
  200. package/lib/utils/getUnitFileSize.spec.js +0 -18
  201. package/lib/utils/hitlAnalytics.spec.js +0 -100
  202. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  203. package/lib/utils/mapBackendLang.spec.js +0 -19
  204. package/lib/utils/normalizeAgentConnectors.spec.js +0 -89
  205. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  206. package/lib/utils/reasoningMappers.spec.js +0 -103
  207. package/lib/utils/retryCompletion.spec.js +0 -99
  208. package/lib/utils/skillContentSize.spec.js +0 -13
  209. package/lib/utils/slashCommandMarker.spec.js +0 -43
  210. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  211. package/lib/utils/sseStreamContent.spec.js +0 -31
  212. package/lib/utils/streamActivityMessages.spec.js +0 -98
  213. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -6,6 +6,7 @@ import { useState, useCallback } from 'react';
6
6
  import { ArrowRight } from '@projectcor/icons/lib/components/ArrowRight';
7
7
  import { useT } from '../../../hooks/useT';
8
8
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
9
+ import { useUsageStore } from '../../../store/useUsageStore';
9
10
  import { fetchAgentDetailAndParsedForAbm } from '../../../services/maia/Agents/fetchAgentDetail';
10
11
  import { SCSuggestionsWrapper, SCSuggestionsTitle, SCSuggestionsList, SCSuggestionButton, SCSuggestionText } from './ChatAISuggestions.styles';
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -19,38 +20,48 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
19
20
  t = _useT.t;
20
21
  var _useSnackBarManager = useSnackBarManager(),
21
22
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
23
+ var usageBlocked = useUsageStore(function (state) {
24
+ return state.blocked;
25
+ });
22
26
  var _useState = useState(null),
23
27
  _useState2 = _slicedToArray(_useState, 2),
24
28
  busy = _useState2[0],
25
29
  setBusy = _useState2[1];
30
+ var isActionDisabled = disabled || hidden || usageBlocked;
26
31
  var runAction = useCallback(/*#__PURE__*/function () {
27
32
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(action) {
28
33
  var _yield$fetchAgentDeta, chatAgent, abmParsed, message, _t;
29
34
  return _regeneratorRuntime.wrap(function (_context) {
30
35
  while (1) switch (_context.prev = _context.next) {
31
36
  case 0:
32
- if (!(!(agentId !== null && agentId !== void 0 && agentId.trim()) || disabled || hidden || busy)) {
37
+ if (!(!(agentId !== null && agentId !== void 0 && agentId.trim()) || isActionDisabled || busy)) {
33
38
  _context.next = 1;
34
39
  break;
35
40
  }
36
41
  return _context.abrupt("return");
37
42
  case 1:
38
- if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
43
+ if (!(action === 'knowledge' && usageBlocked)) {
39
44
  _context.next = 2;
40
45
  break;
41
46
  }
42
47
  return _context.abrupt("return");
43
48
  case 2:
49
+ if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
50
+ _context.next = 3;
51
+ break;
52
+ }
53
+ return _context.abrupt("return");
54
+ case 3:
44
55
  setBusy(action);
45
- _context.prev = 3;
46
- _context.next = 4;
56
+ _context.prev = 4;
57
+ _context.next = 5;
47
58
  return fetchAgentDetailAndParsedForAbm(agentId);
48
- case 4:
59
+ case 5:
49
60
  _yield$fetchAgentDeta = _context.sent;
50
61
  chatAgent = _yield$fetchAgentDeta.chatAgent;
51
62
  abmParsed = _yield$fetchAgentDeta.abmParsed;
52
63
  if (!(action === 'start_chat')) {
53
- _context.next = 5;
64
+ _context.next = 6;
54
65
  break;
55
66
  }
56
67
  // Igual que ChatAIMyAgents: setProject/client, selectAgent, volver al home del modal
@@ -60,7 +71,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
60
71
  }
61
72
  }));
62
73
  return _context.abrupt("return");
63
- case 5:
74
+ case 6:
64
75
  document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
65
76
  detail: {
66
77
  agentValues: {
@@ -77,27 +88,27 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
77
88
  }
78
89
  }
79
90
  }));
80
- _context.next = 7;
91
+ _context.next = 8;
81
92
  break;
82
- case 6:
83
- _context.prev = 6;
84
- _t = _context["catch"](3);
85
- message = _t instanceof Error ? _t.message : t('chat.createAgentActionLoadError');
86
- handleSnackbarError(message);
87
93
  case 7:
88
94
  _context.prev = 7;
89
- setBusy(null);
90
- return _context.finish(7);
95
+ _t = _context["catch"](4);
96
+ message = _t instanceof Error ? _t.message : t('chat.createAgentActionLoadError');
97
+ handleSnackbarError(message);
91
98
  case 8:
99
+ _context.prev = 8;
100
+ setBusy(null);
101
+ return _context.finish(8);
102
+ case 9:
92
103
  case "end":
93
104
  return _context.stop();
94
105
  }
95
- }, _callee, null, [[3, 6, 7, 8]]);
106
+ }, _callee, null, [[4, 7, 8, 9]]);
96
107
  }));
97
108
  return function (_x) {
98
109
  return _ref2.apply(this, arguments);
99
110
  };
100
- }(), [agentId, disabled, hidden, busy, handleSnackbarError, t]);
111
+ }(), [agentId, isActionDisabled, busy, handleSnackbarError, t, usageBlocked]);
101
112
  if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) return null;
102
113
  return /*#__PURE__*/_jsxs(SCSuggestionsWrapper, {
103
114
  $hidden: hidden,
@@ -109,7 +120,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
109
120
  onClick: function onClick() {
110
121
  return runAction('start_chat');
111
122
  },
112
- disabled: disabled || hidden || busy !== null,
123
+ disabled: isActionDisabled || busy !== null,
113
124
  children: [/*#__PURE__*/_jsx(ArrowRight, {
114
125
  width: 12,
115
126
  height: 12,
@@ -122,7 +133,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
122
133
  onClick: function onClick() {
123
134
  return runAction('knowledge');
124
135
  },
125
- disabled: disabled || hidden || busy !== null,
136
+ disabled: isActionDisabled || busy !== null,
126
137
  children: [/*#__PURE__*/_jsx(ArrowRight, {
127
138
  width: 12,
128
139
  height: 12,
@@ -134,4 +145,4 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
134
145
  })]
135
146
  });
136
147
  };
137
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiQXJyb3dSaWdodCIsInVzZVQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtIiwiU0NTdWdnZXN0aW9uc1dyYXBwZXIiLCJTQ1N1Z2dlc3Rpb25zVGl0bGUiLCJTQ1N1Z2dlc3Rpb25zTGlzdCIsIlNDU3VnZ2VzdGlvbkJ1dHRvbiIsIlNDU3VnZ2VzdGlvblRleHQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiX3JlZiIsImFnZW50SWQiLCJfcmVmJGhpZGRlbiIsImhpZGRlbiIsIl9yZWYkZGlzYWJsZWQiLCJkaXNhYmxlZCIsIl91c2VUIiwidCIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYnVzeSIsInNldEJ1c3kiLCJydW5BY3Rpb24iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiYWN0aW9uIiwiX3lpZWxkJGZldGNoQWdlbnREZXRhIiwiY2hhdEFnZW50IiwiYWJtUGFyc2VkIiwibWVzc2FnZSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ0cmltIiwiYWJydXB0Iiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsInNlbnQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50IiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJnZW5lcmFsIiwiaWQiLCJuYW1lIiwicHJlZmV0Y2hlZEFnZW50QnlJZCIsImlzT3BlbiIsImluaXRpYWxTZWN0aW9uIiwiRXJyb3IiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsIiRoaWRkZW4iLCJjaGlsZHJlbiIsInR5cGUiLCJvbkNsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFycm93UmlnaHQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1JpZ2h0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQge1xuICBTQ1N1Z2dlc3Rpb25zV3JhcHBlcixcbiAgU0NTdWdnZXN0aW9uc1RpdGxlLFxuICBTQ1N1Z2dlc3Rpb25zTGlzdCxcbiAgU0NTdWdnZXN0aW9uQnV0dG9uLFxuICBTQ1N1Z2dlc3Rpb25UZXh0LFxufSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zLnN0eWxlcydcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQWdlbnRGb2xsb3dVcEFjdGlvbiA9ICdzdGFydF9jaGF0JyB8ICdrbm93bGVkZ2UnXG5cbnR5cGUgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zUHJvcHMgPSB7XG4gIGFnZW50SWQ6IHN0cmluZ1xuICBoaWRkZW4/OiBib29sZWFuXG4gIGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zID0gKHtcbiAgYWdlbnRJZCxcbiAgaGlkZGVuID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG59OiBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlPENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IHJ1bkFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhY3Rpb246IENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24pID0+IHtcbiAgICAgIGlmICghYWdlbnRJZD8udHJpbSgpIHx8IGRpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5KSByZXR1cm5cbiAgICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldEJ1c3koYWN0aW9uKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjaGF0QWdlbnQsIGFibVBhcnNlZCB9ID0gYXdhaXQgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibShhZ2VudElkKVxuICAgICAgICBpZiAoYWN0aW9uID09PSAnc3RhcnRfY2hhdCcpIHtcbiAgICAgICAgICAvLyBJZ3VhbCBxdWUgQ2hhdEFJTXlBZ2VudHM6IHNldFByb2plY3QvY2xpZW50LCBzZWxlY3RBZ2VudCwgdm9sdmVyIGFsIGhvbWUgZGVsIG1vZGFsXG4gICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogYWJtUGFyc2VkLmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhYm1QYXJzZWQubmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkOiBhYm1QYXJzZWQsXG4gICAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluaXRpYWxTZWN0aW9uOiAna25vd2xlZGdlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogdCgnY2hhdC5jcmVhdGVBZ2VudEFjdGlvbkxvYWRFcnJvcicpXG4gICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IobWVzc2FnZSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEJ1c3kobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudElkLCBkaXNhYmxlZCwgaGlkZGVuLCBidXN5LCBoYW5kbGVTbmFja2JhckVycm9yLCB0XVxuICApXG5cbiAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDxTQ1N1Z2dlc3Rpb25zV3JhcHBlciAkaGlkZGVuPXtoaWRkZW59PlxuICAgICAgPFNDU3VnZ2VzdGlvbnNUaXRsZT57dCgnY2hhdC5jcmVhdGVBZ2VudEFjdGlvbnNUaXRsZScpfTwvU0NTdWdnZXN0aW9uc1RpdGxlPlxuICAgICAgPFNDU3VnZ2VzdGlvbnNMaXN0PlxuICAgICAgICA8U0NTdWdnZXN0aW9uQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gcnVuQWN0aW9uKCdzdGFydF9jaGF0Jyl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uU3RhcnRDaGF0Jyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgICAgPFNDU3VnZ2VzdGlvbkJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJ1bkFjdGlvbigna25vd2xlZGdlJyl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgIDwvU0NTdWdnZXN0aW9uc0xpc3Q+XG4gICAgPC9TQ1N1Z2dlc3Rpb25zV3JhcHBlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDN0MsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQywrQkFBK0IsUUFBUSxnREFBZ0Q7QUFDaEcsU0FDRUMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsUUFDWCw0QkFBNEI7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBVW5DLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBQUMsSUFBQSxFQUlBO0VBQUEsSUFIbkNDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQUFDLFdBQUEsR0FBQUYsSUFBQSxDQUNQRyxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLEtBQUssR0FBQUEsV0FBQTtJQUFBRSxhQUFBLEdBQUFKLElBQUEsQ0FDZEssUUFBUTtJQUFSQSxRQUFRLEdBQUFELGFBQUEsY0FBRyxLQUFLLEdBQUFBLGFBQUE7RUFFaEIsSUFBQUUsS0FBQSxHQUFjbkIsSUFBSSxDQUFDLENBQUM7SUFBWm9CLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1QsSUFBQUMsbUJBQUEsR0FBZ0NwQixrQkFBa0IsQ0FBQyxDQUFD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
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiQXJyb3dSaWdodCIsInVzZVQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VVc2FnZVN0b3JlIiwiZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibSIsIlNDU3VnZ2VzdGlvbnNXcmFwcGVyIiwiU0NTdWdnZXN0aW9uc1RpdGxlIiwiU0NTdWdnZXN0aW9uc0xpc3QiLCJTQ1N1Z2dlc3Rpb25CdXR0b24iLCJTQ1N1Z2dlc3Rpb25UZXh0IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIl9yZWYiLCJhZ2VudElkIiwiX3JlZiRoaWRkZW4iLCJoaWRkZW4iLCJfcmVmJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfdXNlVCIsInQiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsInVzYWdlQmxvY2tlZCIsInN0YXRlIiwiYmxvY2tlZCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImJ1c3kiLCJzZXRCdXN5IiwiaXNBY3Rpb25EaXNhYmxlZCIsInJ1bkFjdGlvbiIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJhY3Rpb24iLCJfeWllbGQkZmV0Y2hBZ2VudERldGEiLCJjaGF0QWdlbnQiLCJhYm1QYXJzZWQiLCJtZXNzYWdlIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInRyaW0iLCJhYnJ1cHQiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwic2VudCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnQiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImdlbmVyYWwiLCJpZCIsIm5hbWUiLCJwcmVmZXRjaGVkQWdlbnRCeUlkIiwiaXNPcGVuIiwiaW5pdGlhbFNlY3Rpb24iLCJFcnJvciIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiJGhpZGRlbiIsImNoaWxkcmVuIiwidHlwZSIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQXJyb3dSaWdodCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93UmlnaHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyB1c2VVc2FnZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlVXNhZ2VTdG9yZSdcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgU0NTdWdnZXN0aW9uc1dyYXBwZXIsXG4gIFNDU3VnZ2VzdGlvbnNUaXRsZSxcbiAgU0NTdWdnZXN0aW9uc0xpc3QsXG4gIFNDU3VnZ2VzdGlvbkJ1dHRvbixcbiAgU0NTdWdnZXN0aW9uVGV4dCxcbn0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucy5zdHlsZXMnXG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gPSAnc3RhcnRfY2hhdCcgfCAna25vd2xlZGdlJ1xuXG50eXBlIENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1Byb3BzID0ge1xuICBhZ2VudElkOiBzdHJpbmdcbiAgaGlkZGVuPzogYm9vbGVhblxuICBkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyA9ICh7XG4gIGFnZW50SWQsXG4gIGhpZGRlbiA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxufTogQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCB1c2FnZUJsb2NrZWQgPSB1c2VVc2FnZVN0b3JlKHN0YXRlID0+IHN0YXRlLmJsb2NrZWQpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlPENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBpc0FjdGlvbkRpc2FibGVkID0gZGlzYWJsZWQgfHwgaGlkZGVuIHx8IHVzYWdlQmxvY2tlZFxuXG4gIGNvbnN0IHJ1bkFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhY3Rpb246IENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24pID0+IHtcbiAgICAgIGlmICghYWdlbnRJZD8udHJpbSgpIHx8IGlzQWN0aW9uRGlzYWJsZWQgfHwgYnVzeSkgcmV0dXJuXG4gICAgICBpZiAoYWN0aW9uID09PSAna25vd2xlZGdlJyAmJiB1c2FnZUJsb2NrZWQpIHJldHVyblxuICAgICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0QnVzeShhY3Rpb24pXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNoYXRBZ2VudCwgYWJtUGFyc2VkIH0gPSBhd2FpdCBmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtKGFnZW50SWQpXG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdzdGFydF9jaGF0Jykge1xuICAgICAgICAgIC8vIElndWFsIHF1ZSBDaGF0QUlNeUFnZW50czogc2V0UHJvamVjdC9jbGllbnQsIHNlbGVjdEFnZW50LCB2b2x2ZXIgYWwgaG9tZSBkZWwgbW9kYWxcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBhYm1QYXJzZWQuaWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGFibVBhcnNlZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWQ6IGFibVBhcnNlZCxcbiAgICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNlY3Rpb246ICdrbm93bGVkZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiB0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uTG9hZEVycm9yJylcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihtZXNzYWdlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0QnVzeShudWxsKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50SWQsIGlzQWN0aW9uRGlzYWJsZWQsIGJ1c3ksIGhhbmRsZVNuYWNrYmFyRXJyb3IsIHQsIHVzYWdlQmxvY2tlZF1cbiAgKVxuXG4gIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTdWdnZXN0aW9uc1dyYXBwZXIgJGhpZGRlbj17aGlkZGVufT5cbiAgICAgIDxTQ1N1Z2dlc3Rpb25zVGl0bGU+e3QoJ2NoYXQuY3JlYXRlQWdlbnRBY3Rpb25zVGl0bGUnKX08L1NDU3VnZ2VzdGlvbnNUaXRsZT5cbiAgICAgIDxTQ1N1Z2dlc3Rpb25zTGlzdD5cbiAgICAgICAgPFNDU3VnZ2VzdGlvbkJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJ1bkFjdGlvbignc3RhcnRfY2hhdCcpfVxuICAgICAgICAgIGRpc2FibGVkPXtpc0FjdGlvbkRpc2FibGVkIHx8IGJ1c3kgIT09IG51bGx9XG4gICAgICAgID5cbiAgICAgICAgICA8QXJyb3dSaWdodCB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGNvbG9yPVwiIzIwMjAxRlwiIC8+XG4gICAgICAgICAgPFNDU3VnZ2VzdGlvblRleHQ+e3QoJ2NoYXQuY3JlYXRlQWdlbnRBY3Rpb25TdGFydENoYXQnKX08L1NDU3VnZ2VzdGlvblRleHQ+XG4gICAgICAgIDwvU0NTdWdnZXN0aW9uQnV0dG9uPlxuICAgICAgICA8U0NTdWdnZXN0aW9uQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gcnVuQWN0aW9uKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICBkaXNhYmxlZD17aXNBY3Rpb25EaXNhYmxlZCB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgIDwvU0NTdWdnZXN0aW9uc0xpc3Q+XG4gICAgPC9TQ1N1Z2dlc3Rpb25zV3JhcHBlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDN0MsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxhQUFhLFFBQVEsOEJBQThCO0FBQzVELFNBQVNDLCtCQUErQixRQUFRLGdEQUFnRDtBQUNoRyxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixRQUNYLDRCQUE0QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFVbkMsT0FBTyxJQUFN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