@projectcor/maia-components 2.30.1-0 → 2.30.2-0

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 (85) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  3. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  6. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  7. package/lib/components/atoms/MAIAInput/MAIAInput.js +88 -204
  8. package/lib/components/atoms/MAIAInput/styles.js +11 -15
  9. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +116 -0
  10. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +197 -0
  11. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +157 -0
  12. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +123 -0
  13. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +115 -0
  14. package/lib/components/atoms/ReasoningBlock/index.js +3 -0
  15. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +54 -0
  16. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  17. package/lib/components/atoms/icons/index.js +1 -5
  18. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +4 -91
  19. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
  20. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +391 -120
  21. package/lib/components/molecules/ChatAIMessages/newStyles.js +50 -18
  22. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +12 -49
  23. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +5 -10
  24. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +239 -312
  25. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +104 -128
  26. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  27. package/lib/components/molecules/MessageFeedback/styles.js +6 -2
  28. package/lib/components/molecules/Sidebar/Sidebar.js +4 -5
  29. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  30. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +5 -34
  31. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +1 -8
  32. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +185 -338
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +66 -122
  34. package/lib/constants/config.js +4 -1
  35. package/lib/constants/permissions/utils.js +3 -3
  36. package/lib/context/global-context.js +1 -1
  37. package/lib/dev/DevReasoningTimeline.js +235 -0
  38. package/lib/dev/reasoningTraceMock.js +556 -0
  39. package/lib/hooks/useAgentModel/useCreateAgent.js +14 -61
  40. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -58
  41. package/lib/hooks/useChatManager/useChatManager.js +97 -59
  42. package/lib/hooks/useChatMessages/useChatMessages.js +28 -27
  43. package/lib/hooks/useContextMentions.js +56 -93
  44. package/lib/hooks/useEntitySearch.js +278 -92
  45. package/lib/hooks/useEvent.js +1 -2
  46. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  47. package/lib/hooks/useMentionPopover.js +33 -9
  48. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  49. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
  50. package/lib/hooks/useProjectSummaryConfig.js +36 -17
  51. package/lib/hooks/useReasoningTrace/index.js +3 -0
  52. package/lib/hooks/useReasoningTrace/reasoningStore.js +142 -0
  53. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
  54. package/lib/lang/br/index.js +245 -71
  55. package/lib/lang/en/index.js +245 -71
  56. package/lib/lang/es/index.js +246 -72
  57. package/lib/lang/fr/index.js +245 -71
  58. package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
  59. package/lib/services/maia/Skills/createSkill.js +1 -1
  60. package/lib/services/maia/Skills/getSkills.js +40 -70
  61. package/lib/services/maia/Skills/updateSkill.js +1 -1
  62. package/lib/services/utils/mapChatMessages.js +21 -18
  63. package/lib/store/sessions/sessionStreamManager.js +98 -51
  64. package/lib/store/sessions/sessions.types.js +1 -1
  65. package/lib/types/Chat.js +1 -1
  66. package/lib/types/agentModal.js +1 -1
  67. package/lib/types/reasoning.js +2 -0
  68. package/lib/types/skill.js +1 -1
  69. package/lib/utils/autoApproveStorage.js +26 -0
  70. package/lib/utils/contextMentionTriggers.js +5 -2
  71. package/lib/utils/hitlAnalytics.js +4 -3
  72. package/lib/utils/normalizeAgentConnectors.js +3 -28
  73. package/lib/utils/reasoningMappers.js +62 -0
  74. package/lib/utils/renderContextMentions.js +18 -39
  75. package/lib/utils/streamActivityMessages.js +106 -41
  76. package/package.json +1 -1
  77. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  78. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  79. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  80. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  81. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  82. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  83. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  84. package/lib/hooks/useSkillsCatalog.js +0 -66
  85. package/lib/services/maia/Agents/connectors.js +0 -250
@@ -1,42 +1,19 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
9
5
  import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
10
- import { Search } from '@projectcor/icons/lib/components/Search';
11
- import { InformationCircle } from '@projectcor/icons/lib/components/InformationCircle';
12
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
13
6
  import { useTranslation } from 'react-i18next';
7
+ import { useUser } from '../../../context/cor-user';
14
8
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
15
9
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
16
- import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
17
10
  import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal/DeleteQuestionModal';
18
- import { SKILL_USE_AFTER_SAVE_EVENT } from '../../organisms/AbmSkillModal/AbmSkillModal';
11
+ import { SKILL_GENERATE_OPEN_EVENT } from '../../organisms/AbmSkillGenerateModal/AbmSkillGenerateModal';
19
12
  import { SECTIONS } from '../../../constants/config';
20
13
  import { Loader } from '../../atoms/Loader';
21
- import { SkillCreatedByIcon } from '../../atoms/icons/SkillCreatedByIcon';
22
- import { SkillVisibilityEveryoneIcon } from '../../atoms/icons/SkillVisibilityEveryoneIcon';
23
- import { SkillVisibilityOnlyMeIcon } from '../../atoms/icons/SkillVisibilityOnlyMeIcon';
24
- import { SCMSBody, SCMSCardButton, SCMSCardContentText, SCMSCardMenu, SCMSCardMenuItem, SCMSCardTitleName, SCMSCardTopRow, SCMSCardVisibilityRow, SCMSCardVisibilityText, SCMSCardsList, SCMSContainer, SCMSCreateButton, SCMSCreateButtonText, SCMSSharedEmptyStateRoot, SCMSSharedEmptyStateSubtitle, SCMSSharedEmptyStateTitle, SCMSSharedEmptyStateTitleBlock, SCMSKebabButton, SCMSLoadWrapper, SCMSMetaDescription, SCMSMetaRow, SCMSPanel, SCMSPanelHeader, SCMSListScrollArea, SCMSSearchInput, SCMSSearchWrapper, SCMSTabBar, SCMSTabButton, SCMSTabInfoIcon, SCMSTitle, SCMSTitleBlock } from './ChatAIMySkills.styles';
25
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
- var DROPDOWN_GAP_PX = 6;
27
- var CARD_MENU_ITEM_HEIGHT_PX = 44;
28
- var resolveDropdownPlacement = function resolveDropdownPlacement(anchor, dropdownHeight) {
29
- var rect = anchor.getBoundingClientRect();
30
- var spaceBelow = window.innerHeight - rect.bottom - DROPDOWN_GAP_PX;
31
- var spaceAbove = rect.top - DROPDOWN_GAP_PX;
32
- if (spaceBelow >= dropdownHeight) return 'bottom';
33
- if (spaceAbove >= dropdownHeight) return 'top';
34
- return spaceBelow >= spaceAbove ? 'bottom' : 'top';
35
- };
36
- var formatSkillDisplayName = function formatSkillDisplayName(name) {
37
- var normalized = name.replace(/^(@\/|#)/, '');
38
- return "#".concat(normalized);
39
- };
14
+ import { SCMSBody, SCMSCardBody, SCMSCardButton, SCMSCardContentText, SCMSCardFooter, SCMSCardFooterDate, SCMSCardHeader, SCMSCardMenu, SCMSCardMenuItem, SCMSCardMenuItems, SCMSCardTitleName, SCMSCardTopRow, SCMSCardsOuter, SCMSCardsRow, SCMSContainer, SCMSCreateButton, SCMSCreateButtonText, SCMSCreateMenu, SCMSCreateMenuItem, SCMSCreateMenuWrap, SCMSEmptyStateButton, SCMSEmptyStateColumn, SCMSEmptyStateRoot, SCMSEmptyStateSubtitle, SCMSEmptyStateTitle, SCMSEmptyStateTitleBlock, SCMSKebabButton, SCMSLoadWrapper, SCMSTitle, SCMSSubtitle, SCMSActionsRow, SCMSTitleInner, SCMSTitleWrap } from './ChatAIMySkills.styles';
15
+ import { MAIAIsologo } from '../../atoms/icons';
16
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
40
17
  var openSkillModal = function openSkillModal(values) {
41
18
  document.dispatchEvent(new CustomEvent('abm-skill-modal-set-values', {
42
19
  detail: {
@@ -47,131 +24,144 @@ var openSkillModal = function openSkillModal(values) {
47
24
  }
48
25
  }));
49
26
  };
50
- var SkillSearchInput = /*#__PURE__*/React.memo(function (_ref) {
51
- var onSearch = _ref.onSearch,
52
- placeholder = _ref.placeholder;
53
- var _useState = useState(''),
54
- _useState2 = _slicedToArray(_useState, 2),
55
- value = _useState2[0],
56
- setValue = _useState2[1];
57
- var debounceRef = useRef(null);
58
- var handleChange = useCallback(function (event) {
59
- var nextValue = event.target.value;
60
- setValue(nextValue);
61
- if (debounceRef.current) clearTimeout(debounceRef.current);
62
- debounceRef.current = setTimeout(function () {
63
- onSearch(nextValue.trim());
64
- }, 250);
65
- }, [onSearch]);
66
- useEffect(function () {
67
- return function () {
68
- if (debounceRef.current) clearTimeout(debounceRef.current);
69
- };
70
- }, []);
71
- return /*#__PURE__*/_jsxs(SCMSSearchWrapper, {
72
- children: [/*#__PURE__*/_jsx(Search, {
73
- width: 16,
74
- height: 16,
75
- color: "#999"
76
- }), /*#__PURE__*/_jsx(SCMSSearchInput, {
77
- type: "text",
78
- value: value,
79
- onChange: handleChange,
80
- placeholder: placeholder
27
+ var IconChat = function IconChat() {
28
+ return /*#__PURE__*/_jsx("svg", {
29
+ width: "16",
30
+ height: "16",
31
+ viewBox: "0 0 16 16",
32
+ fill: "none",
33
+ "aria-hidden": "true",
34
+ children: /*#__PURE__*/_jsx("path", {
35
+ d: "M14 7.5a5.5 5.5 0 0 1-7.9 4.96L2.5 13.5l1.04-3.1A5.5 5.5 0 1 1 14 7.5Z",
36
+ stroke: "#666",
37
+ strokeWidth: "1.3",
38
+ strokeLinejoin: "round"
39
+ })
40
+ });
41
+ };
42
+ var IconClipboard = function IconClipboard() {
43
+ return /*#__PURE__*/_jsxs("svg", {
44
+ width: "16",
45
+ height: "16",
46
+ viewBox: "0 0 16 16",
47
+ fill: "none",
48
+ "aria-hidden": "true",
49
+ children: [/*#__PURE__*/_jsx("rect", {
50
+ x: "3.5",
51
+ y: "3",
52
+ width: "9",
53
+ height: "11",
54
+ rx: "1.5",
55
+ stroke: "#666",
56
+ strokeWidth: "1.3"
57
+ }), /*#__PURE__*/_jsx("rect", {
58
+ x: "5.75",
59
+ y: "1.75",
60
+ width: "4.5",
61
+ height: "2.5",
62
+ rx: "0.75",
63
+ stroke: "#666",
64
+ strokeWidth: "1.3"
65
+ }), /*#__PURE__*/_jsx("path", {
66
+ d: "M6 7.5h4M6 10h3",
67
+ stroke: "#666",
68
+ strokeWidth: "1.3",
69
+ strokeLinecap: "round"
81
70
  })]
82
71
  });
83
- });
84
- export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
85
- var mySkills = _ref2.mySkills,
86
- sharedSkills = _ref2.sharedSkills,
87
- _ref2$loading = _ref2.loading,
88
- loading = _ref2$loading === void 0 ? false : _ref2$loading,
89
- onDeleteSkill = _ref2.onDeleteSkill;
72
+ };
73
+ var IconUpload = function IconUpload() {
74
+ return /*#__PURE__*/_jsxs("svg", {
75
+ width: "16",
76
+ height: "16",
77
+ viewBox: "0 0 16 16",
78
+ fill: "none",
79
+ "aria-hidden": "true",
80
+ children: [/*#__PURE__*/_jsx("path", {
81
+ d: "M8 10.5V3M8 3 5.5 5.5M8 3l2.5 2.5",
82
+ stroke: "#666",
83
+ strokeWidth: "1.3",
84
+ strokeLinecap: "round",
85
+ strokeLinejoin: "round"
86
+ }), /*#__PURE__*/_jsx("path", {
87
+ d: "M3 10v2a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2",
88
+ stroke: "#666",
89
+ strokeWidth: "1.3",
90
+ strokeLinecap: "round"
91
+ })]
92
+ });
93
+ };
94
+ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
95
+ var _user$permissions;
96
+ var skills = _ref.skills,
97
+ _ref$loading = _ref.loading,
98
+ loading = _ref$loading === void 0 ? false : _ref$loading,
99
+ onDeleteSkill = _ref.onDeleteSkill;
90
100
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
91
101
  t = _useTranslation.t;
102
+ var user = useUser();
92
103
  var _useSnackBarManager = useSnackBarManager(),
93
104
  handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
94
105
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
95
- var tooltipZIndex = useMaiaTaskPanelZIndex(1500, 'overlay');
96
- var listScrollRef = useRef(null);
97
- var _useState3 = useState('mine'),
106
+ var _useState = useState(null),
107
+ _useState2 = _slicedToArray(_useState, 2),
108
+ menuOpenForSkillId = _useState2[0],
109
+ setMenuOpenForSkillId = _useState2[1];
110
+ var _useState3 = useState(false),
98
111
  _useState4 = _slicedToArray(_useState3, 2),
99
- activeTab = _useState4[0],
100
- setActiveTab = _useState4[1];
101
- var _useState5 = useState(''),
112
+ createMenuOpen = _useState4[0],
113
+ setCreateMenuOpen = _useState4[1];
114
+ var _useState5 = useState(null),
102
115
  _useState6 = _slicedToArray(_useState5, 2),
103
- searchQuery = _useState6[0],
104
- setSearchQuery = _useState6[1];
105
- var _useState7 = useState(null),
106
- _useState8 = _slicedToArray(_useState7, 2),
107
- menuOpenForSkillId = _useState8[0],
108
- setMenuOpenForSkillId = _useState8[1];
109
- var _useState9 = useState('bottom'),
110
- _useState0 = _slicedToArray(_useState9, 2),
111
- cardMenuPlacement = _useState0[0],
112
- setCardMenuPlacement = _useState0[1];
113
- var _useState1 = useState(null),
114
- _useState10 = _slicedToArray(_useState1, 2),
115
- skillToDelete = _useState10[0],
116
- setSkillToDelete = _useState10[1];
117
- var isMineTab = activeTab === 'mine';
118
- var tabSkills = isMineTab ? mySkills : sharedSkills;
119
- var filteredSkills = useMemo(function () {
120
- var normalizedQuery = searchQuery.toLowerCase();
121
- var matched = normalizedQuery ? tabSkills.filter(function (skill) {
122
- return skill.name.toLowerCase().includes(normalizedQuery);
123
- }) : tabSkills;
124
- return _toConsumableArray(matched).sort(function (a, b) {
125
- return a.name.localeCompare(b.name);
126
- });
127
- }, [searchQuery, tabSkills]);
128
- var handleCreateSkill = useCallback(function () {
116
+ skillToDelete = _useState6[0],
117
+ setSkillToDelete = _useState6[1];
118
+ var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
119
+ var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
120
+ var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
121
+ var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
122
+ var canShowMenu = canEdit || canDelete;
123
+ var openCreateSkillModal = useCallback(function () {
129
124
  openSkillModal({
130
- isEditing: false,
131
- intent: 'write'
125
+ isEditing: false
132
126
  });
133
127
  }, []);
134
-
135
- // "Mis skills" tiene Editar + Eliminar; "Compartidas" solo Usar skill.
136
- var cardMenuHeightPx = isMineTab ? CARD_MENU_ITEM_HEIGHT_PX * 2 : CARD_MENU_ITEM_HEIGHT_PX;
137
- var handleToggleCardMenu = useCallback(function (event, skillId) {
138
- event.preventDefault();
139
- event.stopPropagation();
140
- var cardAnchor = event.currentTarget.closest('[data-skill-card-id]');
141
- if (cardAnchor instanceof HTMLElement) {
142
- setCardMenuPlacement(resolveDropdownPlacement(cardAnchor, cardMenuHeightPx));
128
+ var handleCreateOption = useCallback(function (intent) {
129
+ setCreateMenuOpen(false);
130
+ if (intent === 'generate') {
131
+ // "Crear con Maia" abre el modal simple de descripción (no el editor).
132
+ document.dispatchEvent(new CustomEvent(SKILL_GENERATE_OPEN_EVENT));
133
+ return;
143
134
  }
144
- setMenuOpenForSkillId(function (prev) {
145
- return prev === skillId ? null : skillId;
135
+ openSkillModal({
136
+ isEditing: false,
137
+ intent: intent
146
138
  });
147
- }, [cardMenuHeightPx]);
148
-
149
- /** Mismo flujo que el botón "Usar skill" del modal: chat nuevo con el primer agente y la mención puesta. */
150
- var handleUseSkill = useCallback(function (skill) {
151
- document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
152
- detail: {
153
- skill: skill,
154
- useFirstAgent: true
155
- }
156
- }));
157
- setMenuOpenForSkillId(null);
158
139
  }, []);
159
- var handleOpenSkill = useCallback(function (skill, isReadOnly) {
140
+ var handleOpenEditSkill = useCallback(function (skill) {
160
141
  openSkillModal({
161
142
  isEditing: true,
162
- isReadOnly: isReadOnly,
163
143
  general: {
164
144
  id: skill.id,
165
145
  name: skill.name,
166
- description: skill.description,
167
- content: skill.content,
168
- access_type: skill.access_type,
169
- created_by_name: skill.created_by_name,
170
- updated_at: skill.updated_at
146
+ content: skill.content
171
147
  }
172
148
  });
173
149
  setMenuOpenForSkillId(null);
174
150
  }, []);
151
+ var getCreatedAtLabel = function getCreatedAtLabel(skill) {
152
+ var createdAt = skill.created_at;
153
+ if (!createdAt) return '';
154
+ var createdAtDate = new Date(createdAt);
155
+ if (Number.isNaN(createdAtDate.getTime())) return '';
156
+ var diffMs = Date.now() - createdAtDate.getTime();
157
+ var dayMs = 1000 * 60 * 60 * 24;
158
+ var days = Math.max(0, Math.floor(diffMs / dayMs));
159
+ if (days === 0) return t('marketplace.myAgentsToday');
160
+ if (days === 1) return t('marketplace.myAgentsOneDayAgo');
161
+ return t('marketplace.myAgentsDaysAgo', {
162
+ days: days
163
+ });
164
+ };
175
165
  var deleteModalChat = useMemo(function () {
176
166
  return skillToDelete ? {
177
167
  title: skillToDelete.name,
@@ -179,7 +169,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
179
169
  } : null;
180
170
  }, [skillToDelete]);
181
171
  var handleConfirmDelete = /*#__PURE__*/function () {
182
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
172
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
183
173
  var _t;
184
174
  return _regeneratorRuntime.wrap(function (_context) {
185
175
  while (1) switch (_context.prev = _context.next) {
@@ -205,7 +195,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
205
195
  }, _callee, null, [[0, 2]]);
206
196
  }));
207
197
  return function handleConfirmDelete(_x) {
208
- return _ref3.apply(this, arguments);
198
+ return _ref2.apply(this, arguments);
209
199
  };
210
200
  }();
211
201
  useEffect(function () {
@@ -213,208 +203,145 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
213
203
  if (menuOpenForSkillId) {
214
204
  setMenuOpenForSkillId(null);
215
205
  }
206
+ if (createMenuOpen) {
207
+ setCreateMenuOpen(false);
208
+ }
216
209
  };
217
210
  document.addEventListener('click', handleClickOutside);
218
211
  return function () {
219
212
  document.removeEventListener('click', handleClickOutside);
220
213
  };
221
- }, [menuOpenForSkillId]);
222
- useEffect(function () {
223
- if (!menuOpenForSkillId) return undefined;
224
- var handleReposition = function handleReposition() {
225
- var _listScrollRef$curren;
226
- var openCard = (_listScrollRef$curren = listScrollRef.current) === null || _listScrollRef$curren === void 0 ? void 0 : _listScrollRef$curren.querySelector("[data-skill-card-id=\"".concat(menuOpenForSkillId, "\"]"));
227
- if (openCard) {
228
- setCardMenuPlacement(resolveDropdownPlacement(openCard, cardMenuHeightPx));
229
- }
230
- };
231
- var scrollContainer = listScrollRef.current;
232
- scrollContainer === null || scrollContainer === void 0 || scrollContainer.addEventListener('scroll', handleReposition, {
233
- passive: true
234
- });
235
- window.addEventListener('resize', handleReposition);
236
- return function () {
237
- scrollContainer === null || scrollContainer === void 0 || scrollContainer.removeEventListener('scroll', handleReposition);
238
- window.removeEventListener('resize', handleReposition);
239
- };
240
- }, [menuOpenForSkillId, cardMenuHeightPx]);
241
- var tabDescription = isMineTab ? t('mySkills.mySkillsDescription') : t('mySkills.sharedSkillsDescription');
242
- var isMineEmpty = isMineTab && !loading && mySkills.length === 0 && !searchQuery;
243
- var showSkillsToolbar = isMineTab ? !isMineEmpty : tabSkills.length > 0 || !!searchQuery;
244
- var renderCreateSkillButton = function renderCreateSkillButton() {
245
- return /*#__PURE__*/_jsx(SCMSCreateButton, {
246
- type: "button",
247
- onClick: handleCreateSkill,
248
- children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
249
- children: t('mySkills.createSkill')
250
- })
251
- });
252
- };
253
- var renderSearchEmptyState = function renderSearchEmptyState() {
254
- return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
255
- children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
256
- children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
257
- children: t('mySkills.searchEmptyStateTitle')
258
- }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
259
- children: t('mySkills.searchEmptyStateDescription')
260
- })]
261
- })
262
- });
263
- };
264
- var renderEmptyState = function renderEmptyState() {
265
- if (!isMineTab) {
266
- if (searchQuery) {
267
- return renderSearchEmptyState();
268
- }
269
- return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
270
- children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
271
- children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
272
- children: t('mySkills.sharedEmptyStateTitle')
273
- }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
274
- children: t('mySkills.sharedEmptyStateDescription')
275
- })]
276
- })
277
- });
278
- }
279
- if (searchQuery) {
280
- return renderSearchEmptyState();
281
- }
282
- return /*#__PURE__*/_jsxs(SCMSSharedEmptyStateRoot, {
283
- children: [/*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
284
- children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
285
- children: t('mySkills.emptyStateTitle')
286
- }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
287
- children: t('mySkills.emptyStateDescription')
288
- })]
289
- }), renderCreateSkillButton()]
290
- });
291
- };
214
+ }, [menuOpenForSkillId, createMenuOpen]);
292
215
  return /*#__PURE__*/_jsxs(SCMSContainer, {
293
- children: [/*#__PURE__*/_jsxs(SCMSBody, {
294
- children: [/*#__PURE__*/_jsx(SCMSTitleBlock, {
295
- children: /*#__PURE__*/_jsx(SCMSTitle, {
296
- children: t('mySkills.title')
297
- })
298
- }), /*#__PURE__*/_jsxs(SCMSPanel, {
299
- children: [/*#__PURE__*/_jsxs(SCMSPanelHeader, {
300
- children: [/*#__PURE__*/_jsxs(SCMSTabBar, {
301
- children: [/*#__PURE__*/_jsx(SCMSTabButton, {
302
- type: "button",
303
- $active: isMineTab,
304
- onClick: function onClick() {
305
- return setActiveTab('mine');
306
- },
307
- children: t('mySkills.tabMySkills')
308
- }), /*#__PURE__*/_jsx(SCMSTabButton, {
216
+ $hasSkills: !!skills.length,
217
+ children: [/*#__PURE__*/_jsx(MAIAIsologo, {}), /*#__PURE__*/_jsxs(SCMSBody, {
218
+ $canCreate: canCreate,
219
+ children: [skills.length ? /*#__PURE__*/_jsxs(SCMSTitleWrap, {
220
+ children: [/*#__PURE__*/_jsxs(SCMSTitleInner, {
221
+ children: [/*#__PURE__*/_jsx(SCMSTitle, {
222
+ children: t('mySkills.title')
223
+ }), /*#__PURE__*/_jsx(SCMSSubtitle, {
224
+ children: t('mySkills.subtitle')
225
+ })]
226
+ }), canCreate ? /*#__PURE__*/_jsx(SCMSActionsRow, {
227
+ children: /*#__PURE__*/_jsxs(SCMSCreateMenuWrap, {
228
+ children: [/*#__PURE__*/_jsx(SCMSCreateButton, {
309
229
  type: "button",
310
- $active: !isMineTab,
311
- onClick: function onClick() {
312
- return setActiveTab('shared');
230
+ onClick: function onClick(event) {
231
+ event.stopPropagation();
232
+ setCreateMenuOpen(function (prev) {
233
+ return !prev;
234
+ });
313
235
  },
314
- children: t('mySkills.tabSharedSkills')
315
- }), /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
316
- title: t('mySkills.infoTooltip')
317
- }, tooltipZIndex != null ? {
318
- zIndex: tooltipZIndex
319
- } : {}), {}, {
320
- children: /*#__PURE__*/_jsx(SCMSTabInfoIcon, {
321
- "aria-label": t('mySkills.infoTooltip'),
322
- children: /*#__PURE__*/_jsx(InformationCircle, {
323
- color: "#808080",
324
- width: 20,
325
- height: 20
326
- })
236
+ children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
237
+ children: t('mySkills.createSkill')
327
238
  })
328
- }))]
329
- }), showSkillsToolbar ? /*#__PURE__*/_jsxs(_Fragment, {
330
- children: [/*#__PURE__*/_jsxs(SCMSMetaRow, {
331
- children: [/*#__PURE__*/_jsx(SCMSMetaDescription, {
332
- children: tabDescription
333
- }), isMineTab ? renderCreateSkillButton() : null]
334
- }), /*#__PURE__*/_jsx(SkillSearchInput, {
335
- onSearch: setSearchQuery,
336
- placeholder: t('mySkills.searchPlaceholder')
337
- })]
338
- }) : null]
339
- }), /*#__PURE__*/_jsxs(SCMSListScrollArea, {
340
- ref: listScrollRef,
341
- children: [loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
342
- children: /*#__PURE__*/_jsx(Loader, {
343
- size: "small"
344
- })
345
- }) : null, !loading && filteredSkills.length ? /*#__PURE__*/_jsx(SCMSCardsList, {
346
- children: filteredSkills.map(function (skill, index) {
347
- return /*#__PURE__*/_jsxs(SCMSCardButton, {
239
+ }), createMenuOpen ? /*#__PURE__*/_jsxs(SCMSCreateMenu, {
240
+ onClick: function onClick(event) {
241
+ return event.stopPropagation();
242
+ },
243
+ children: [/*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
244
+ type: "button",
245
+ onClick: function onClick() {
246
+ return handleCreateOption('generate');
247
+ },
248
+ children: [/*#__PURE__*/_jsx(IconChat, {}), t('mySkills.createWithMaia')]
249
+ }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
348
250
  type: "button",
349
- "data-skill-card-id": skill.id,
350
- $index: index,
351
- $elevated: menuOpenForSkillId === skill.id,
352
251
  onClick: function onClick() {
353
- return handleOpenSkill(skill, !isMineTab);
252
+ return handleCreateOption('write');
354
253
  },
355
- children: [/*#__PURE__*/_jsxs(SCMSCardTopRow, {
254
+ children: [/*#__PURE__*/_jsx(IconClipboard, {}), t('mySkills.writeInstructions')]
255
+ }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
256
+ type: "button",
257
+ onClick: function onClick() {
258
+ return handleCreateOption('upload');
259
+ },
260
+ children: [/*#__PURE__*/_jsx(IconUpload, {}), t('mySkills.uploadSkill')]
261
+ })]
262
+ }) : null]
263
+ })
264
+ }) : null]
265
+ }) : null, loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
266
+ children: /*#__PURE__*/_jsx(Loader, {
267
+ size: "small"
268
+ })
269
+ }) : null, !loading && skills.length ? /*#__PURE__*/_jsx(SCMSCardsOuter, {
270
+ children: /*#__PURE__*/_jsx(SCMSCardsRow, {
271
+ children: skills.map(function (skill) {
272
+ return /*#__PURE__*/_jsxs(SCMSCardButton, {
273
+ type: "button",
274
+ onClick: function onClick() {
275
+ return canEdit && handleOpenEditSkill(skill);
276
+ },
277
+ children: [/*#__PURE__*/_jsx(SCMSCardHeader, {
278
+ children: /*#__PURE__*/_jsxs(SCMSCardTopRow, {
356
279
  children: [/*#__PURE__*/_jsx(SCMSCardTitleName, {
357
- children: formatSkillDisplayName(skill.name)
358
- }), /*#__PURE__*/_jsx(SCMSKebabButton, {
280
+ children: skill.name
281
+ }), canShowMenu ? /*#__PURE__*/_jsx(SCMSKebabButton, {
359
282
  type: "button",
360
- $visible: menuOpenForSkillId === skill.id,
361
283
  "aria-label": t('mySkills.cardMenuAriaLabel'),
362
284
  onClick: function onClick(event) {
363
- return handleToggleCardMenu(event, skill.id);
285
+ event.preventDefault();
286
+ event.stopPropagation();
287
+ setMenuOpenForSkillId(function (prev) {
288
+ return prev === skill.id ? null : skill.id;
289
+ });
364
290
  },
365
291
  children: /*#__PURE__*/_jsx(MenuDots, {
366
- color: "#808080",
367
- width: 20,
368
- height: 20
292
+ color: "#999",
293
+ width: 15,
294
+ height: 15
369
295
  })
370
- })]
371
- }), /*#__PURE__*/_jsx(SCMSCardContentText, {
372
- children: skill.description || skill.content
373
- }), /*#__PURE__*/_jsx(SCMSCardVisibilityRow, {
374
- children: isMineTab ? /*#__PURE__*/_jsxs(_Fragment, {
375
- children: [skill.access_type === 'company' ? /*#__PURE__*/_jsx(SkillVisibilityEveryoneIcon, {}) : /*#__PURE__*/_jsx(SkillVisibilityOnlyMeIcon, {}), /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
376
- children: skill.access_type === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
377
- })]
378
- }) : /*#__PURE__*/_jsxs(_Fragment, {
379
- children: [/*#__PURE__*/_jsx(SkillCreatedByIcon, {}), /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
380
- children: t('mySkills.sharedCreatedBy', {
381
- name: skill.created_by_name || ''
382
- })
383
- })]
296
+ }) : null]
297
+ })
298
+ }), /*#__PURE__*/_jsxs(SCMSCardBody, {
299
+ children: [/*#__PURE__*/_jsx(SCMSCardContentText, {
300
+ children: skill.content
301
+ }), /*#__PURE__*/_jsx(SCMSCardFooter, {
302
+ children: /*#__PURE__*/_jsx(SCMSCardFooterDate, {
303
+ children: getCreatedAtLabel(skill) || t('marketplace.myAgentsFallbackDate')
384
304
  })
385
- }), menuOpenForSkillId === skill.id ? /*#__PURE__*/_jsx(SCMSCardMenu, {
386
- $placement: cardMenuPlacement,
387
- onClick: function onClick(event) {
388
- event.preventDefault();
389
- event.stopPropagation();
390
- },
391
- children: isMineTab ? /*#__PURE__*/_jsxs(_Fragment, {
392
- children: [/*#__PURE__*/_jsx(SCMSCardMenuItem, {
393
- type: "button",
394
- onClick: function onClick() {
395
- return handleOpenSkill(skill, false);
396
- },
397
- children: t('mySkills.edit')
398
- }), /*#__PURE__*/_jsx(SCMSCardMenuItem, {
399
- type: "button",
400
- onClick: function onClick() {
401
- return setSkillToDelete(skill);
402
- },
403
- children: t('mySkills.delete')
404
- })]
405
- }) : /*#__PURE__*/_jsx(SCMSCardMenuItem, {
305
+ })]
306
+ }), menuOpenForSkillId === skill.id && canShowMenu ? /*#__PURE__*/_jsx(SCMSCardMenu, {
307
+ onClick: function onClick(event) {
308
+ event.preventDefault();
309
+ event.stopPropagation();
310
+ },
311
+ children: /*#__PURE__*/_jsxs(SCMSCardMenuItems, {
312
+ children: [canEdit ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
406
313
  type: "button",
407
314
  onClick: function onClick() {
408
- return handleUseSkill(skill);
315
+ return handleOpenEditSkill(skill);
409
316
  },
410
- children: t('mySkills.useSkill')
411
- })
412
- }) : null]
413
- }, skill.id);
414
- })
415
- }) : null, !loading && !filteredSkills.length ? renderEmptyState() : null]
416
- })]
417
- })]
317
+ children: t('mySkills.edit')
318
+ }) : null, canDelete ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
319
+ type: "button",
320
+ onClick: function onClick() {
321
+ return setSkillToDelete(skill);
322
+ },
323
+ children: t('mySkills.delete')
324
+ }) : null]
325
+ })
326
+ }) : null]
327
+ }, skill.id);
328
+ })
329
+ })
330
+ }) : null, !loading && !skills.length ? /*#__PURE__*/_jsxs(SCMSEmptyStateRoot, {
331
+ children: [/*#__PURE__*/_jsx(SCMSEmptyStateColumn, {
332
+ children: /*#__PURE__*/_jsxs(SCMSEmptyStateTitleBlock, {
333
+ children: [/*#__PURE__*/_jsx(SCMSEmptyStateTitle, {
334
+ children: t('mySkills.emptyStateTitle')
335
+ }), /*#__PURE__*/_jsx(SCMSEmptyStateSubtitle, {
336
+ children: canCreate ? t('mySkills.emptyStateDescription') : t('mySkills.emptyStateDescriptionNoPerm')
337
+ })]
338
+ })
339
+ }), canCreate ? /*#__PURE__*/_jsx(SCMSEmptyStateButton, {
340
+ type: "button",
341
+ onClick: openCreateSkillModal,
342
+ children: t('mySkills.emptyStateButton')
343
+ }) : null]
344
+ }) : null]
418
345
  }), deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
419
346
  onClose: function onClose() {
420
347
  return setSkillToDelete(null);
@@ -427,4 +354,4 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
427
354
  }) : null]
428
355
  });
429
356
  };
430
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJJbmZvcm1hdGlvbkNpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUcmFuc2xhdGlvbiIsImRlbGV0ZVNraWxsIiwidXNlU25hY2tCYXJNYW5hZ2VyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIlNFQ1RJT05TIiwiTG9hZGVyIiwiU2tpbGxDcmVhdGVkQnlJY29uIiwiU2tpbGxWaXNpYmlsaXR5RXZlcnlvbmVJY29uIiwiU2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbiIsIlNDTVNCb2R5IiwiU0NNU0NhcmRCdXR0b24iLCJTQ01TQ2FyZENvbnRlbnRUZXh0IiwiU0NNU0NhcmRNZW51IiwiU0NNU0NhcmRNZW51SXRlbSIsIlNDTVNDYXJkVGl0bGVOYW1lIiwiU0NNU0NhcmRUb3BSb3ciLCJTQ01TQ2FyZFZpc2liaWxpdHlSb3ciLCJTQ01TQ2FyZFZpc2liaWxpdHlUZXh0IiwiU0NNU0NhcmRzTGlzdCIsIlNDTVNDb250YWluZXIiLCJTQ01TQ3JlYXRlQnV0dG9uIiwiU0NNU0NyZWF0ZUJ1dHRvblRleHQiLCJTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3QiLCJTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZSIsIlNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTVNLZWJhYkJ1dHRvbiIsIlNDTVNMb2FkV3JhcHBlciIsIlNDTVNNZXRhRGVzY3JpcHRpb24iLCJTQ01TTWV0YVJvdyIsIlNDTVNQYW5lbCIsIlNDTVNQYW5lbEhlYWRlciIsIlNDTVNMaXN0U2Nyb2xsQXJlYSIsIlNDTVNTZWFyY2hJbnB1dCIsIlNDTVNTZWFyY2hXcmFwcGVyIiwiU0NNU1RhYkJhciIsIlNDTVNUYWJCdXR0b24iLCJTQ01TVGFiSW5mb0ljb24iLCJTQ01TVGl0bGUiLCJTQ01TVGl0bGVCbG9jayIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkRST1BET1dOX0dBUF9QWCIsIkNBUkRfTUVOVV9JVEVNX0hFSUdIVF9QWCIsInJlc29sdmVEcm9wZG93blBsYWNlbWVudCIsImFuY2hvciIsImRyb3Bkb3duSGVpZ2h0IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNwYWNlQmVsb3ciLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsImJvdHRvbSIsInNwYWNlQWJvdmUiLCJ0b3AiLCJmb3JtYXRTa2lsbERpc3BsYXlOYW1lIiwibmFtZSIsIm5vcm1hbGl6ZWQiLCJyZXBsYWNlIiwiY29uY2F0Iiwib3BlblNraWxsTW9kYWwiLCJ2YWx1ZXMiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsInNraWxsVmFsdWVzIiwiaXNPcGVuIiwiU2tpbGxTZWFyY2hJbnB1dCIsIm1lbW8iLCJfcmVmIiwib25TZWFyY2giLCJwbGFjZWhvbGRlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlIiwic2V0VmFsdWUiLCJkZWJvdW5jZVJlZiIsImhhbmRsZUNoYW5nZSIsImV2ZW50IiwibmV4dFZhbHVlIiwidGFyZ2V0IiwiY3VycmVudCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ0cmltIiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidHlwZSIsIm9uQ2hhbmdlIiwiQ2hhdEFJTXlTa2lsbHMiLCJfcmVmMiIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwiX3JlZjIkbG9hZGluZyIsImxvYWRpbmciLCJvbkRlbGV0ZVNraWxsIiwiX3VzZVRyYW5zbGF0aW9uIiwiY2hhdEFJIiwidCIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhclN1Y2Nlc3MiLCJoYW5kbGVTbmFja2JhckVycm9yIiwidG9vbHRpcFpJbmRleCIsImxpc3RTY3JvbGxSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFjdGl2ZVRhYiIsInNldEFjdGl2ZVRhYiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibWVudU9wZW5Gb3JTa2lsbElkIiwic2V0TWVudU9wZW5Gb3JTa2lsbElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJjYXJkTWVudVBsYWNlbWVudCIsInNldENhcmRNZW51UGxhY2VtZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2tpbGxUb0RlbGV0ZSIsInNldFNraWxsVG9EZWxldGUiLCJpc01pbmVUYWIiLCJ0YWJTa2lsbHMiLCJmaWx0ZXJlZFNraWxscyIsIm5vcm1hbGl6ZWRRdWVyeSIsInRvTG93ZXJDYXNlIiwibWF0Y2hlZCIsImZpbHRlciIsInNraWxsIiwiaW5jbHVkZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaGFuZGxlQ3JlYXRlU2tpbGwiLCJpc0VkaXRpbmciLCJpbnRlbnQiLCJjYXJkTWVudUhlaWdodFB4IiwiaGFuZGxlVG9nZ2xlQ2FyZE1lbnUiLCJza2lsbElkIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjYXJkQW5jaG9yIiwiY3VycmVudFRhcmdldCIsImNsb3Nlc3QiLCJIVE1MRWxlbWVudCIsInByZXYiLCJoYW5kbGVVc2VTa2lsbCIsInVzZUZpcnN0QWdlbnQiLCJoYW5kbGVPcGVuU2tpbGwiLCJpc1JlYWRPbmx5IiwiZ2VuZXJhbCIsImlkIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiYWNjZXNzX3R5cGUiLCJjcmVhdGVkX2J5X25hbWUiLCJ1cGRhdGVkX2F0IiwiZGVsZXRlTW9kYWxDaGF0IiwidGl0bGUiLCJoYW5kbGVDb25maXJtRGVsZXRlIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5kZWZpbmVkIiwiaGFuZGxlUmVwb3NpdGlvbiIsIl9saXN0U2Nyb2xsUmVmJGN1cnJlbiIsIm9wZW5DYXJkIiwicXVlcnlTZWxlY3RvciIsInNjcm9sbENvbnRhaW5lciIsInBhc3NpdmUiLCJ0YWJEZXNjcmlwdGlvbiIsImlzTWluZUVtcHR5IiwibGVuZ3RoIiwic2hvd1NraWxsc1Rvb2xiYXIiLCJyZW5kZXJDcmVhdGVTa2lsbEJ1dHRvbiIsIm9uQ2xpY2siLCJyZW5kZXJTZWFyY2hFbXB0eVN0YXRlIiwicmVuZGVyRW1wdHlTdGF0ZSIsIiRhY3RpdmUiLCJfb2JqZWN0U3ByZWFkIiwiekluZGV4IiwicmVmIiwic2l6ZSIsIm1hcCIsImluZGV4IiwiJGluZGV4IiwiJGVsZXZhdGVkIiwiJHZpc2libGUiLCIkcGxhY2VtZW50Iiwib25DbG9zZSIsImhhbmRsZXJzIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNeVNraWxscy9DaGF0QUlNeVNraWxscy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE1lbnVEb3RzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTWVudURvdHMnXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TZWFyY2gnXG5pbXBvcnQgeyBJbmZvcm1hdGlvbkNpcmNsZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0luZm9ybWF0aW9uQ2lyY2xlJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0RlbGV0ZVF1ZXN0aW9uTW9kYWwvRGVsZXRlUXVlc3Rpb25Nb2RhbCdcbmltcG9ydCB7IFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsTW9kYWwvQWJtU2tpbGxNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IFNraWxsQ3JlYXRlZEJ5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL1NraWxsQ3JlYXRlZEJ5SWNvbidcbmltcG9ydCB7IFNraWxsVmlzaWJpbGl0eUV2ZXJ5b25lSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL1NraWxsVmlzaWJpbGl0eUV2ZXJ5b25lSWNvbidcbmltcG9ydCB7IFNraWxsVmlzaWJpbGl0eU9ubHlNZUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9Ta2lsbFZpc2liaWxpdHlPbmx5TWVJY29uJ1xuaW1wb3J0IHtcbiAgU0NNU0JvZHksXG4gIFNDTVNDYXJkQnV0dG9uLFxuICBTQ01TQ2FyZENvbnRlbnRUZXh0LFxuICBTQ01TQ2FyZE1lbnUsXG4gIFNDTVNDYXJkTWVudUl0ZW0sXG4gIFNDTVNDYXJkVGl0bGVOYW1lLFxuICBTQ01TQ2FyZFRvcFJvdyxcbiAgU0NNU0NhcmRWaXNpYmlsaXR5Um93LFxuICBTQ01TQ2FyZFZpc2liaWxpdHlUZXh0LFxuICBTQ01TQ2FyZHNMaXN0LFxuICBTQ01TQ29udGFpbmVyLFxuICBTQ01TQ3JlYXRlQnV0dG9uLFxuICBTQ01TQ3JlYXRlQnV0dG9uVGV4dCxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVSb290LFxuICBTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlLFxuICBTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlLFxuICBTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2ssXG4gIFNDTVNLZWJhYkJ1dHRvbixcbiAgU0NNU0xvYWRXcmFwcGVyLFxuICBTQ01TTWV0YURlc2NyaXB0aW9uLFxuICBTQ01TTWV0YVJvdyxcbiAgU0NNU1BhbmVsLFxuICBTQ01TUGFuZWxIZWFkZXIsXG4gIFNDTVNMaXN0U2Nyb2xsQXJlYSxcbiAgU0NNU1NlYXJjaElucHV0LFxuICBTQ01TU2VhcmNoV3JhcHBlcixcbiAgU0NNU1RhYkJhcixcbiAgU0NNU1RhYkJ1dHRvbixcbiAgU0NNU1RhYkluZm9JY29uLFxuICBTQ01TVGl0bGUsXG4gIFNDTVNUaXRsZUJsb2NrLFxufSBmcm9tICcuL0NoYXRBSU15U2tpbGxzLnN0eWxlcydcblxudHlwZSBDaGF0QUlNeVNraWxsc1Byb3BzID0ge1xuICBteVNraWxsczogU2tpbGxbXVxuICBzaGFyZWRTa2lsbHM6IFNraWxsW11cbiAgbG9hZGluZz86IGJvb2xlYW5cbiAgb25EZWxldGVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxudHlwZSBTa2lsbHNUYWIgPSAnbWluZScgfCAnc2hhcmVkJ1xuXG50eXBlIFNraWxsTW9kYWxJbnRlbnQgPSAnZ2VuZXJhdGUnIHwgJ3dyaXRlJ1xuXG50eXBlIERyb3Bkb3duUGxhY2VtZW50ID0gJ3RvcCcgfCAnYm90dG9tJ1xuXG5jb25zdCBEUk9QRE9XTl9HQVBfUFggPSA2XG5jb25zdCBDQVJEX01FTlVfSVRFTV9IRUlHSFRfUFggPSA0NFxuXG5jb25zdCByZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQgPSAoYW5jaG9yOiBIVE1MRWxlbWVudCwgZHJvcGRvd25IZWlnaHQ6IG51bWJlcik6IERyb3Bkb3duUGxhY2VtZW50ID0+IHtcbiAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20gLSBEUk9QRE9XTl9HQVBfUFhcbiAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wIC0gRFJPUERPV05fR0FQX1BYXG5cbiAgaWYgKHNwYWNlQmVsb3cgPj0gZHJvcGRvd25IZWlnaHQpIHJldHVybiAnYm90dG9tJ1xuICBpZiAoc3BhY2VBYm92ZSA+PSBkcm9wZG93bkhlaWdodCkgcmV0dXJuICd0b3AnXG4gIHJldHVybiBzcGFjZUJlbG93ID49IHNwYWNlQWJvdmUgPyAnYm90dG9tJyA6ICd0b3AnXG59XG5cbmNvbnN0IGZvcm1hdFNraWxsRGlzcGxheU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuYW1lLnJlcGxhY2UoL14oQFxcL3wjKS8sICcnKVxuICByZXR1cm4gYCMke25vcm1hbGl6ZWR9YFxufVxuXG5jb25zdCBvcGVuU2tpbGxNb2RhbCA9ICh2YWx1ZXM6IHtcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuXG4gIGludGVudD86IFNraWxsTW9kYWxJbnRlbnRcbiAgZ2VuZXJhbD86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICBhY2Nlc3NfdHlwZT86IFNraWxsWydhY2Nlc3NfdHlwZSddXG4gICAgY3JlYXRlZF9ieV9uYW1lPzogc3RyaW5nXG4gICAgdXBkYXRlZF9hdD86IHN0cmluZ1xuICB9XG59KSA9PiB7XG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBza2lsbFZhbHVlczoge1xuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIClcbn1cblxuY29uc3QgU2tpbGxTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciB9OiB7IG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDsgcGxhY2Vob2xkZXI6IHN0cmluZyB9KSA9PiB7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJylcbiAgICBjb25zdCBkZWJvdW5jZVJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIHNldFZhbHVlKG5leHRWYWx1ZSlcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25TZWFyY2gobmV4dFZhbHVlLnRyaW0oKSlcbiAgICAgICAgfSwgMjUwKVxuICAgICAgfSxcbiAgICAgIFtvblNlYXJjaF1cbiAgICApXG5cbiAgICB1c2VFZmZlY3QoXG4gICAgICAoKSA9PiAoKSA9PiB7XG4gICAgICAgIGlmIChkZWJvdW5jZVJlZi5jdXJyZW50KSBjbGVhclRpbWVvdXQoZGVib3VuY2VSZWYuY3VycmVudClcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NNU1NlYXJjaFdyYXBwZXI+XG4gICAgICAgIDxTZWFyY2ggd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSBjb2xvcj1cIiM5OTlcIiAvPlxuICAgICAgICA8U0NNU1NlYXJjaElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8+XG4gICAgICA8L1NDTVNTZWFyY2hXcmFwcGVyPlxuICAgIClcbiAgfVxuKVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTXlTa2lsbHMgPSAoeyBteVNraWxscywgc2hhcmVkU2tpbGxzLCBsb2FkaW5nID0gZmFsc2UsIG9uRGVsZXRlU2tpbGwgfTogQ2hhdEFJTXlTa2lsbHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBsaXN0U2Nyb2xsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGU8U2tpbGxzVGFiPignbWluZScpXG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFttZW51T3BlbkZvclNraWxsSWQsIHNldE1lbnVPcGVuRm9yU2tpbGxJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbY2FyZE1lbnVQbGFjZW1lbnQsIHNldENhcmRNZW51UGxhY2VtZW50XSA9IHVzZVN0YXRlPERyb3Bkb3duUGxhY2VtZW50PignYm90dG9tJylcbiAgY29uc3QgW3NraWxsVG9EZWxldGUsIHNldFNraWxsVG9EZWxldGVdID0gdXNlU3RhdGU8U2tpbGwgfCBudWxsPihudWxsKVxuICBjb25zdCBpc01pbmVUYWIgPSBhY3RpdmVUYWIgPT09ICdtaW5lJ1xuXG4gIGNvbnN0IHRhYlNraWxscyA9IGlzTWluZVRhYiA/IG15U2tpbGxzIDogc2hhcmVkU2tpbGxzXG5cbiAgY29uc3QgZmlsdGVyZWRTa2lsbHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBzZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRRdWVyeVxuICAgICAgPyB0YWJTa2lsbHMuZmlsdGVyKHNraWxsID0+IHNraWxsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpKVxuICAgICAgOiB0YWJTa2lsbHNcbiAgICByZXR1cm4gWy4uLm1hdGNoZWRdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpXG4gIH0sIFtzZWFyY2hRdWVyeSwgdGFiU2tpbGxzXSlcblxuICBjb25zdCBoYW5kbGVDcmVhdGVTa2lsbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvcGVuU2tpbGxNb2RhbCh7IGlzRWRpdGluZzogZmFsc2UsIGludGVudDogJ3dyaXRlJyB9KVxuICB9LCBbXSlcblxuICAvLyBcIk1pcyBza2lsbHNcIiB0aWVuZSBFZGl0YXIgKyBFbGltaW5hcjsgXCJDb21wYXJ0aWRhc1wiIHNvbG8gVXNhciBza2lsbC5cbiAgY29uc3QgY2FyZE1lbnVIZWlnaHRQeCA9IGlzTWluZVRhYiA/IENBUkRfTUVOVV9JVEVNX0hFSUdIVF9QWCAqIDIgOiBDQVJEX01FTlVfSVRFTV9IRUlHSFRfUFhcblxuICBjb25zdCBoYW5kbGVUb2dnbGVDYXJkTWVudSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4sIHNraWxsSWQ6IHN0cmluZykgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGNvbnN0IGNhcmRBbmNob3IgPSBldmVudC5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNraWxsLWNhcmQtaWRdJylcbiAgICAgIGlmIChjYXJkQW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgc2V0Q2FyZE1lbnVQbGFjZW1lbnQocmVzb2x2ZURyb3Bkb3duUGxhY2VtZW50KGNhcmRBbmNob3IsIGNhcmRNZW51SGVpZ2h0UHgpKVxuICAgICAgfVxuICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKHByZXYgPT4gKHByZXYgPT09IHNraWxsSWQgPyBudWxsIDogc2tpbGxJZCkpXG4gICAgfSxcbiAgICBbY2FyZE1lbnVIZWlnaHRQeF1cbiAgKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgZWwgYm90w7NuIFwiVXNhciBza2lsbFwiIGRlbCBtb2RhbDogY2hhdCBudWV2byBjb24gZWwgcHJpbWVyIGFnZW50ZSB5IGxhIG1lbmNpw7NuIHB1ZXN0YS4gKi9cbiAgY29uc3QgaGFuZGxlVXNlU2tpbGwgPSB1c2VDYWxsYmFjaygoc2tpbGw6IFNraWxsKSA9PiB7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudChTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwge1xuICAgICAgICBkZXRhaWw6IHsgc2tpbGwsIHVzZUZpcnN0QWdlbnQ6IHRydWUgfSxcbiAgICAgIH0pXG4gICAgKVxuICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVPcGVuU2tpbGwgPSB1c2VDYWxsYmFjaygoc2tpbGw6IFNraWxsLCBpc1JlYWRPbmx5OiBib29sZWFuKSA9PiB7XG4gICAgb3BlblNraWxsTW9kYWwoe1xuICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgaXNSZWFkT25seSxcbiAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgaWQ6IHNraWxsLmlkLFxuICAgICAgICBuYW1lOiBza2lsbC5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogc2tpbGwuZGVzY3JpcHRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHNraWxsLmNvbnRlbnQsXG4gICAgICAgIGFjY2Vzc190eXBlOiBza2lsbC5hY2Nlc3NfdHlwZSxcbiAgICAgICAgY3JlYXRlZF9ieV9uYW1lOiBza2lsbC5jcmVhdGVkX2J5X25hbWUsXG4gICAgICAgIHVwZGF0ZWRfYXQ6IHNraWxsLnVwZGF0ZWRfYXQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGRlbGV0ZU1vZGFsQ2hhdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHNraWxsVG9EZWxldGUgPyB7IHRpdGxlOiBza2lsbFRvRGVsZXRlLm5hbWUsIGlkOiBza2lsbFRvRGVsZXRlLmlkIH0gOiBudWxsKSxcbiAgICBbc2tpbGxUb0RlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSBhc3luYyAoY2hhdDogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2tpbGwoY2hhdC5pZClcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5kZWxldGVTdWNjZXNzJykpXG4gICAgICBvbkRlbGV0ZVNraWxsPy4oY2hhdC5pZClcbiAgICAgIHNldFNraWxsVG9EZWxldGUobnVsbClcbiAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLmRlbGV0ZUVycm9yJykpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgICBpZiAobWVudU9wZW5Gb3JTa2lsbElkKSB7XG4gICAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFttZW51T3BlbkZvclNraWxsSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZW51T3BlbkZvclNraWxsSWQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhhbmRsZVJlcG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVuQ2FyZCA9IGxpc3RTY3JvbGxSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgIGBbZGF0YS1za2lsbC1jYXJkLWlkPVwiJHttZW51T3BlbkZvclNraWxsSWR9XCJdYFxuICAgICAgKVxuICAgICAgaWYgKG9wZW5DYXJkKSB7XG4gICAgICAgIHNldENhcmRNZW51UGxhY2VtZW50KHJlc29sdmVEcm9wZG93blBsYWNlbWVudChvcGVuQ2FyZCwgY2FyZE1lbnVIZWlnaHRQeCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gbGlzdFNjcm9sbFJlZi5jdXJyZW50XG4gICAgc2Nyb2xsQ29udGFpbmVyPy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVSZXBvc2l0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzY3JvbGxDb250YWluZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVJlcG9zaXRpb24pXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcbiAgICB9XG4gIH0sIFttZW51T3BlbkZvclNraWxsSWQsIGNhcmRNZW51SGVpZ2h0UHhdKVxuXG4gIGNvbnN0IHRhYkRlc2NyaXB0aW9uID0gaXNNaW5lVGFiID8gdCgnbXlTa2lsbHMubXlTa2lsbHNEZXNjcmlwdGlvbicpIDogdCgnbXlTa2lsbHMuc2hhcmVkU2tpbGxzRGVzY3JpcHRpb24nKVxuXG4gIGNvbnN0IGlzTWluZUVtcHR5ID0gaXNNaW5lVGFiICYmICFsb2FkaW5nICYmIG15U2tpbGxzLmxlbmd0aCA9PT0gMCAmJiAhc2VhcmNoUXVlcnlcbiAgY29uc3Qgc2hvd1NraWxsc1Rvb2xiYXIgPSBpc01pbmVUYWIgPyAhaXNNaW5lRW1wdHkgOiB0YWJTa2lsbHMubGVuZ3RoID4gMCB8fCAhIXNlYXJjaFF1ZXJ5XG5cbiAgY29uc3QgcmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24gPSAoKSA9PiAoXG4gICAgPFNDTVNDcmVhdGVCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNyZWF0ZVNraWxsfT5cbiAgICAgIDxTQ01TQ3JlYXRlQnV0dG9uVGV4dD57dCgnbXlTa2lsbHMuY3JlYXRlU2tpbGwnKX08L1NDTVNDcmVhdGVCdXR0b25UZXh0PlxuICAgIDwvU0NNU0NyZWF0ZUJ1dHRvbj5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclNlYXJjaEVtcHR5U3RhdGUgPSAoKSA9PiAoXG4gICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPnt0KCdteVNraWxscy5zZWFyY2hFbXB0eVN0YXRlVGl0bGUnKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPnt0KCdteVNraWxscy5zZWFyY2hFbXB0eVN0YXRlRGVzY3JpcHRpb24nKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlckVtcHR5U3RhdGUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01pbmVUYWIpIHtcbiAgICAgIGlmIChzZWFyY2hRdWVyeSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyU2VhcmNoRW1wdHlTdGF0ZSgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPnt0KCdteVNraWxscy5zaGFyZWRFbXB0eVN0YXRlVGl0bGUnKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZT57dCgnbXlTa2lsbHMuc2hhcmVkRW1wdHlTdGF0ZURlc2NyaXB0aW9uJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoUXVlcnkpIHtcbiAgICAgIHJldHVybiByZW5kZXJTZWFyY2hFbXB0eVN0YXRlKClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZT57dCgnbXlTa2lsbHMuZW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPnt0KCdteVNraWxscy5lbXB0eVN0YXRlRGVzY3JpcHRpb24nKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICB7cmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24oKX1cbiAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVSb290PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTVNDb250YWluZXI+XG4gICAgICA8U0NNU0JvZHk+XG4gICAgICAgIDxTQ01TVGl0bGVCbG9jaz5cbiAgICAgICAgICA8U0NNU1RpdGxlPnt0KCdteVNraWxscy50aXRsZScpfTwvU0NNU1RpdGxlPlxuICAgICAgICA8L1NDTVNUaXRsZUJsb2NrPlxuXG4gICAgICAgIDxTQ01TUGFuZWw+XG4gICAgICAgICAgPFNDTVNQYW5lbEhlYWRlcj5cbiAgICAgICAgICAgIDxTQ01TVGFiQmFyPlxuICAgICAgICAgICAgICA8U0NNU1RhYkJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17aXNNaW5lVGFifSBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIoJ21pbmUnKX0+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnRhYk15U2tpbGxzJyl9XG4gICAgICAgICAgICAgIDwvU0NNU1RhYkJ1dHRvbj5cbiAgICAgICAgICAgICAgPFNDTVNUYWJCdXR0b24gdHlwZT1cImJ1dHRvblwiICRhY3RpdmU9eyFpc01pbmVUYWJ9IG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYignc2hhcmVkJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy50YWJTaGFyZWRTa2lsbHMnKX1cbiAgICAgICAgICAgICAgPC9TQ01TVGFiQnV0dG9uPlxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnbXlTa2lsbHMuaW5mb1Rvb2x0aXAnKX0gey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfT5cbiAgICAgICAgICAgICAgICA8U0NNU1RhYkluZm9JY29uIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmluZm9Ub29sdGlwJyl9PlxuICAgICAgICAgICAgICAgICAgPEluZm9ybWF0aW9uQ2lyY2xlIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICA8L1NDTVNUYWJJbmZvSWNvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ01TVGFiQmFyPlxuXG4gICAgICAgICAgICB7c2hvd1NraWxsc1Rvb2xiYXIgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDTVNNZXRhUm93PlxuICAgICAgICAgICAgICAgICAgPFNDTVNNZXRhRGVzY3JpcHRpb24+e3RhYkRlc2NyaXB0aW9ufTwvU0NNU01ldGFEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIHtpc01pbmVUYWIgPyByZW5kZXJDcmVhdGVTa2lsbEJ1dHRvbigpIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1NDTVNNZXRhUm93PlxuXG4gICAgICAgICAgICAgICAgPFNraWxsU2VhcmNoSW5wdXQgb25TZWFyY2g9e3NldFNlYXJjaFF1ZXJ5fSBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuc2VhcmNoUGxhY2Vob2xkZXInKX0gLz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTVNQYW5lbEhlYWRlcj5cblxuICAgICAgICAgIDxTQ01TTGlzdFNjcm9sbEFyZWEgcmVmPXtsaXN0U2Nyb2xsUmVmfT5cbiAgICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgICA8U0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgPC9TQ01TTG9hZFdyYXBwZXI+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgeyFsb2FkaW5nICYmIGZpbHRlcmVkU2tpbGxzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPFNDTVNDYXJkc0xpc3Q+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkU2tpbGxzLm1hcCgoc2tpbGwsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8U0NNU0NhcmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXtza2lsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2tpbGwtY2FyZC1pZD17c2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgICRpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICRlbGV2YXRlZD17bWVudU9wZW5Gb3JTa2lsbElkID09PSBza2lsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3BlblNraWxsKHNraWxsLCAhaXNNaW5lVGFiKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRpdGxlTmFtZT57Zm9ybWF0U2tpbGxEaXNwbGF5TmFtZShza2lsbC5uYW1lKX08L1NDTVNDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJHZpc2libGU9e21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jYXJkTWVudUFyaWFMYWJlbCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gaGFuZGxlVG9nZ2xlQ2FyZE1lbnUoZXZlbnQsIHNraWxsLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0tlYmFiQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRDb250ZW50VGV4dD57c2tpbGwuZGVzY3JpcHRpb24gfHwgc2tpbGwuY29udGVudH08L1NDTVNDYXJkQ29udGVudFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFZpc2liaWxpdHlSb3c+XG4gICAgICAgICAgICAgICAgICAgICAge2lzTWluZVRhYiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtza2lsbC5hY2Nlc3NfdHlwZSA9PT0gJ2NvbXBhbnknID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTa2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRWaXNpYmlsaXR5VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2tpbGwuYWNjZXNzX3R5cGUgPT09ICdjb21wYW55J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdteVNraWxscy52aXNpYmlsaXR5RXZlcnlvbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdteVNraWxscy52aXNpYmlsaXR5T25seU1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRWaXNpYmlsaXR5VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2tpbGxDcmVhdGVkQnlJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFZpc2liaWxpdHlUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5zaGFyZWRDcmVhdGVkQnknLCB7IG5hbWU6IHNraWxsLmNyZWF0ZWRfYnlfbmFtZSB8fCAnJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZFZpc2liaWxpdHlUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZFZpc2liaWxpdHlSb3c+XG4gICAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvclNraWxsSWQgPT09IHNraWxsLmlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFjZW1lbnQ9e2NhcmRNZW51UGxhY2VtZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc01pbmVUYWIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkTWVudUl0ZW0gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5Ta2lsbChza2lsbCwgZmFsc2UpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5lZGl0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKHNraWxsKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZGVsZXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVVc2VTa2lsbChza2lsbCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy51c2VTa2lsbCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRNZW51PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCdXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvU0NNU0NhcmRzTGlzdD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWZpbHRlcmVkU2tpbGxzLmxlbmd0aCA/IHJlbmRlckVtcHR5U3RhdGUoKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01TTGlzdFNjcm9sbEFyZWE+XG4gICAgICAgIDwvU0NNU1BhbmVsPlxuICAgICAgPC9TQ01TQm9keT5cblxuICAgICAge2RlbGV0ZU1vZGFsQ2hhdCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKG51bGwpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17ZGVsZXRlTW9kYWxDaGF0fVxuICAgICAgICAgIGFjdGlvbj1cInNraWxsXCJcbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU0NNU0NvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hGLFNBQVNDLFFBQVEsUUFBUSwyQ0FBMkM7QUFDcEUsU0FBU0MsTUFBTSxRQUFRLHlDQUF5QztBQUNoRSxTQUFTQyxpQkFBaUIsUUFBUSxvREFBb0Q7QUFDdEYsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxzQkFBc0IsUUFBUSx1Q0FBdUM7QUFDOUUsU0FBU0MsbUJBQW1CLFFBQVEseURBQXlEO0FBQzdGLFNBQVNDLDBCQUEwQixRQUFRLDZDQUE2QztBQUN4RixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0Msa0JBQWtCLFFBQVEsc0NBQXNDO0FBQ3pFLFNBQVNDLDJCQUEyQixRQUFRLCtDQUErQztBQUMzRixTQUFTQyx5QkFBeUIsUUFBUSw2Q0FBNkM7QUFDdkYsU0FDRUMsUUFBUSxFQUNSQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsY0FB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LFFBQUEsZ0JBQ0VsRCxJQUFBLENBQUM1QixnQkFBZ0I7c0JBQUNrRixJQUFJLEVBQUMsUUFBUTtzQkFBQzJHLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO3dCQUFBLE9BQVF6QyxlQUFlLENBQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDO3NCQUFBLENBQUM7c0JBQUFoRCxRQUFBLEVBQzFFZSxDQUFDLENBQUMsZUFBZTtvQkFBQyxDQUNILENBQUMsZUFDbkJqRSxJQUFBLENBQUM1QixnQkFBZ0I7c0JBQUNrRixJQUFJLEVBQUMsUUFBUTtzQkFBQzJHLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO3dCQUFBLE9BQVF2RSxnQkFBZ0IsQ0FBQ1EsS0FBSyxDQUFDO3NCQUFBLENBQUM7c0JBQUFoRCxRQUFBLEVBQ3BFZSxDQUFDLENBQUMsaUJBQWlCO29CQUFDLENBQ0wsQ0FBQztrQkFBQSxDQUNuQixDQUFDLGdCQUVIakUsSUFBQSxDQUFDNUIsZ0JBQWdCO29CQUFDa0YsSUFBSSxFQUFDLFFBQVE7b0JBQUMyRyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtzQkFBQSxPQUFRM0MsY0FBYyxDQUFDcEIsS0FBSyxDQUFDO29CQUFBLENBQUM7b0JBQUFoRCxRQUFBLEVBQ2xFZSxDQUFDLENBQUMsbUJBQW1CO2tCQUFDLENBQ1A7Z0JBQ25CLENBQ1csQ0FBQyxHQUNiLElBQUk7Y0FBQSxHQWpFSGlDLEtBQUssQ0FBQ3lCLEVBa0VHLENBQUM7WUFBQSxDQUNsQjtVQUFDLENBQ1csQ0FBQyxHQUNkLElBQUksRUFFUCxDQUFDOUQsT0FBTyxJQUFJLENBQUNnQyxjQUFjLENBQUNpRSxNQUFNLEdBQUdLLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJO1FBQUEsQ0FDN0MsQ0FBQztNQUFBLENBQ1osQ0FBQztJQUFBLENBQ0osQ0FBQyxFQUVWbEMsZUFBZSxnQkFDZGpJLElBQUEsQ0FBQ3ZDLG1CQUFtQjtNQUNsQnNOLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUXJGLGdCQUFnQixDQUFDLElBQUksQ0FBQztNQUFBLENBQUM7TUFDdENzRixRQUFRLEVBQUU7UUFDUkMsbUJBQW1CLEVBQUU5QztNQUN2QixDQUFFO01BQ0ZNLElBQUksRUFBRVIsZUFBZ0I7TUFDdEJpRCxNQUFNLEVBQUM7SUFBTyxDQUNmLENBQUMsR0FDQSxJQUFJO0VBQUEsQ0FDSyxDQUFDO0FBRXBCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
357
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJ1c2VUcmFuc2xhdGlvbiIsInVzZVVzZXIiLCJkZWxldGVTa2lsbCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIiwiU0VDVElPTlMiLCJMb2FkZXIiLCJTQ01TQm9keSIsIlNDTVNDYXJkQm9keSIsIlNDTVNDYXJkQnV0dG9uIiwiU0NNU0NhcmRDb250ZW50VGV4dCIsIlNDTVNDYXJkRm9vdGVyIiwiU0NNU0NhcmRGb290ZXJEYXRlIiwiU0NNU0NhcmRIZWFkZXIiLCJTQ01TQ2FyZE1lbnUiLCJTQ01TQ2FyZE1lbnVJdGVtIiwiU0NNU0NhcmRNZW51SXRlbXMiLCJTQ01TQ2FyZFRpdGxlTmFtZSIsIlNDTVNDYXJkVG9wUm93IiwiU0NNU0NhcmRzT3V0ZXIiLCJTQ01TQ2FyZHNSb3ciLCJTQ01TQ29udGFpbmVyIiwiU0NNU0NyZWF0ZUJ1dHRvbiIsIlNDTVNDcmVhdGVCdXR0b25UZXh0IiwiU0NNU0NyZWF0ZU1lbnUiLCJTQ01TQ3JlYXRlTWVudUl0ZW0iLCJTQ01TQ3JlYXRlTWVudVdyYXAiLCJTQ01TRW1wdHlTdGF0ZUJ1dHRvbiIsIlNDTVNFbXB0eVN0YXRlQ29sdW1uIiwiU0NNU0VtcHR5U3RhdGVSb290IiwiU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZSIsIlNDTVNFbXB0eVN0YXRlVGl0bGUiLCJTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2siLCJTQ01TS2ViYWJCdXR0b24iLCJTQ01TTG9hZFdyYXBwZXIiLCJTQ01TVGl0bGUiLCJTQ01TU3VidGl0bGUiLCJTQ01TQWN0aW9uc1JvdyIsIlNDTVNUaXRsZUlubmVyIiwiU0NNU1RpdGxlV3JhcCIsIk1BSUFJc29sb2dvIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIm9wZW5Ta2lsbE1vZGFsIiwidmFsdWVzIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImlzT3BlbiIsIkljb25DaGF0Iiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsImNoaWxkcmVuIiwiZCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWpvaW4iLCJJY29uQ2xpcGJvYXJkIiwieCIsInkiLCJyeCIsInN0cm9rZUxpbmVjYXAiLCJJY29uVXBsb2FkIiwiQ2hhdEFJTXlTa2lsbHMiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJza2lsbHMiLCJfcmVmJGxvYWRpbmciLCJsb2FkaW5nIiwib25EZWxldGVTa2lsbCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJ1c2VyIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJtZW51T3BlbkZvclNraWxsSWQiLCJzZXRNZW51T3BlbkZvclNraWxsSWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImNyZWF0ZU1lbnVPcGVuIiwic2V0Q3JlYXRlTWVudU9wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNraWxsVG9EZWxldGUiLCJzZXRTa2lsbFRvRGVsZXRlIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGUiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY2FuRWRpdCIsImVkaXQiLCJjYW5EZWxldGUiLCJjYW5TaG93TWVudSIsIm9wZW5DcmVhdGVTa2lsbE1vZGFsIiwiaXNFZGl0aW5nIiwiaGFuZGxlQ3JlYXRlT3B0aW9uIiwiaW50ZW50IiwiaGFuZGxlT3BlbkVkaXRTa2lsbCIsInNraWxsIiwiZ2VuZXJhbCIsImlkIiwibmFtZSIsImNvbnRlbnQiLCJnZXRDcmVhdGVkQXRMYWJlbCIsImNyZWF0ZWRBdCIsImNyZWF0ZWRfYXQiLCJjcmVhdGVkQXREYXRlIiwiRGF0ZSIsIk51bWJlciIsImlzTmFOIiwiZ2V0VGltZSIsImRpZmZNcyIsIm5vdyIsImRheU1zIiwiZGF5cyIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImRlbGV0ZU1vZGFsQ2hhdCIsInRpdGxlIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIkaGFzU2tpbGxzIiwibGVuZ3RoIiwiJGNhbkNyZWF0ZSIsInR5cGUiLCJvbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJzaXplIiwibWFwIiwicHJldmVudERlZmF1bHQiLCJjb2xvciIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlTa2lsbHMvQ2hhdEFJTXlTa2lsbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQge1xuICBTQ01TQm9keSxcbiAgU0NNU0NhcmRCb2R5LFxuICBTQ01TQ2FyZEJ1dHRvbixcbiAgU0NNU0NhcmRDb250ZW50VGV4dCxcbiAgU0NNU0NhcmRGb290ZXIsXG4gIFNDTVNDYXJkRm9vdGVyRGF0ZSxcbiAgU0NNU0NhcmRIZWFkZXIsXG4gIFNDTVNDYXJkTWVudSxcbiAgU0NNU0NhcmRNZW51SXRlbSxcbiAgU0NNU0NhcmRNZW51SXRlbXMsXG4gIFNDTVNDYXJkVGl0bGVOYW1lLFxuICBTQ01TQ2FyZFRvcFJvdyxcbiAgU0NNU0NhcmRzT3V0ZXIsXG4gIFNDTVNDYXJkc1JvdyxcbiAgU0NNU0NvbnRhaW5lcixcbiAgU0NNU0NyZWF0ZUJ1dHRvbixcbiAgU0NNU0NyZWF0ZUJ1dHRvblRleHQsXG4gIFNDTVNDcmVhdGVNZW51LFxuICBTQ01TQ3JlYXRlTWVudUl0ZW0sXG4gIFNDTVNDcmVhdGVNZW51V3JhcCxcbiAgU0NNU0VtcHR5U3RhdGVCdXR0b24sXG4gIFNDTVNFbXB0eVN0YXRlQ29sdW1uLFxuICBTQ01TRW1wdHlTdGF0ZVJvb3QsXG4gIFNDTVNFbXB0eVN0YXRlU3VidGl0bGUsXG4gIFNDTVNFbXB0eVN0YXRlVGl0bGUsXG4gIFNDTVNFbXB0eVN0YXRlVGl0bGVCbG9jayxcbiAgU0NNU0tlYmFiQnV0dG9uLFxuICBTQ01TTG9hZFdyYXBwZXIsXG4gIFNDTVNUaXRsZSxcbiAgU0NNU1N1YnRpdGxlLFxuICBTQ01TQWN0aW9uc1JvdyxcbiAgU0NNU1RpdGxlSW5uZXIsXG4gIFNDTVNUaXRsZVdyYXAsXG59IGZyb20gJy4vQ2hhdEFJTXlTa2lsbHMuc3R5bGVzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcblxudHlwZSBDaGF0QUlNeVNraWxsc1Byb3BzID0ge1xuICBza2lsbHM6IFNraWxsW11cbiAgbG9hZGluZz86IGJvb2xlYW5cbiAgb25EZWxldGVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxudHlwZSBTa2lsbE1vZGFsSW50ZW50ID0gJ2dlbmVyYXRlJyB8ICd3cml0ZScgfCAndXBsb2FkJ1xuXG5jb25zdCBvcGVuU2tpbGxNb2RhbCA9ICh2YWx1ZXM6IHtcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4gIGludGVudD86IFNraWxsTW9kYWxJbnRlbnRcbiAgZ2VuZXJhbD86IHsgaWQ/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmcgfVxufSkgPT4ge1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgc2tpbGxWYWx1ZXM6IHtcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICApXG59XG5cbmNvbnN0IEljb25DaGF0ID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTE0IDcuNWE1LjUgNS41IDAgMCAxLTcuOSA0Ljk2TDIuNSAxMy41bDEuMDQtMy4xQTUuNSA1LjUgMCAxIDEgMTQgNy41WlwiXG4gICAgICBzdHJva2U9XCIjNjY2XCJcbiAgICAgIHN0cm9rZVdpZHRoPVwiMS4zXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uQ2xpcGJvYXJkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxyZWN0IHg9XCIzLjVcIiB5PVwiM1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjExXCIgcng9XCIxLjVcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiAvPlxuICAgIDxyZWN0IHg9XCI1Ljc1XCIgeT1cIjEuNzVcIiB3aWR0aD1cIjQuNVwiIGhlaWdodD1cIjIuNVwiIHJ4PVwiMC43NVwiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIC8+XG4gICAgPHBhdGggZD1cIk02IDcuNWg0TTYgMTBoM1wiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uVXBsb2FkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTggMTAuNVYzTTggMyA1LjUgNS41TTggM2wyLjUgMi41XCJcbiAgICAgIHN0cm9rZT1cIiM2NjZcIlxuICAgICAgc3Ryb2tlV2lkdGg9XCIxLjNcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gICAgPHBhdGggZD1cIk0zIDEwdjJhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTF2LTJcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiAvPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGNvbnN0IENoYXRBSU15U2tpbGxzID0gKHsgc2tpbGxzLCBsb2FkaW5nID0gZmFsc2UsIG9uRGVsZXRlU2tpbGwgfTogQ2hhdEFJTXlTa2lsbHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBbbWVudU9wZW5Gb3JTa2lsbElkLCBzZXRNZW51T3BlbkZvclNraWxsSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2NyZWF0ZU1lbnVPcGVuLCBzZXRDcmVhdGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NraWxsVG9EZWxldGUsIHNldFNraWxsVG9EZWxldGVdID0gdXNlU3RhdGU8U2tpbGwgfCBudWxsPihudWxsKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZSA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5EZWxldGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuU2hvd01lbnUgPSBjYW5FZGl0IHx8IGNhbkRlbGV0ZVxuXG4gIGNvbnN0IG9wZW5DcmVhdGVTa2lsbE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSB9KVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVDcmVhdGVPcHRpb24gPSB1c2VDYWxsYmFjaygoaW50ZW50OiBTa2lsbE1vZGFsSW50ZW50KSA9PiB7XG4gICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgaWYgKGludGVudCA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgLy8gXCJDcmVhciBjb24gTWFpYVwiIGFicmUgZWwgbW9kYWwgc2ltcGxlIGRlIGRlc2NyaXBjacOzbiAobm8gZWwgZWRpdG9yKS5cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFNLSUxMX0dFTkVSQVRFX09QRU5fRVZFTlQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSwgaW50ZW50IH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5FZGl0U2tpbGwgPSB1c2VDYWxsYmFjaygoc2tpbGw6IFNraWxsKSA9PiB7XG4gICAgb3BlblNraWxsTW9kYWwoe1xuICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgZ2VuZXJhbDogeyBpZDogc2tpbGwuaWQsIG5hbWU6IHNraWxsLm5hbWUsIGNvbnRlbnQ6IHNraWxsLmNvbnRlbnQgfSxcbiAgICB9KVxuICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChza2lsbDogU2tpbGwpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZWRfYXQ6IGNyZWF0ZWRBdCB9ID0gc2tpbGxcbiAgICBpZiAoIWNyZWF0ZWRBdCkgcmV0dXJuICcnXG5cbiAgICBjb25zdCBjcmVhdGVkQXREYXRlID0gbmV3IERhdGUoY3JlYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4oY3JlYXRlZEF0RGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gJydcblxuICAgIGNvbnN0IGRpZmZNcyA9IERhdGUubm93KCkgLSBjcmVhdGVkQXREYXRlLmdldFRpbWUoKVxuICAgIGNvbnN0IGRheU1zID0gMTAwMCAqIDYwICogNjAgKiAyNFxuICAgIGNvbnN0IGRheXMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRpZmZNcyAvIGRheU1zKSlcblxuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpXG4gICAgaWYgKGRheXMgPT09IDEpIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c09uZURheUFnbycpXG4gICAgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRGF5c0FnbycsIHsgZGF5cyB9KVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoc2tpbGxUb0RlbGV0ZSA/IHsgdGl0bGU6IHNraWxsVG9EZWxldGUubmFtZSwgaWQ6IHNraWxsVG9EZWxldGUuaWQgfSA6IG51bGwpLFxuICAgIFtza2lsbFRvRGVsZXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTa2lsbChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIG9uRGVsZXRlU2tpbGw/LihjaGF0LmlkKVxuICAgICAgc2V0U2tpbGxUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZGVsZXRlRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZW51T3BlbkZvclNraWxsSWQpIHtcbiAgICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlTWVudU9wZW4pIHtcbiAgICAgICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW21lbnVPcGVuRm9yU2tpbGxJZCwgY3JlYXRlTWVudU9wZW5dKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTVNDb250YWluZXIgJGhhc1NraWxscz17ISFza2lsbHMubGVuZ3RofT5cbiAgICAgIDxNQUlBSXNvbG9nbyAvPlxuXG4gICAgICA8U0NNU0JvZHkgJGNhbkNyZWF0ZT17Y2FuQ3JlYXRlfT5cbiAgICAgICAge3NraWxscy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTVNUaXRsZVdyYXA+XG4gICAgICAgICAgICA8U0NNU1RpdGxlSW5uZXI+XG4gICAgICAgICAgICAgIDxTQ01TVGl0bGU+e3QoJ215U2tpbGxzLnRpdGxlJyl9PC9TQ01TVGl0bGU+XG4gICAgICAgICAgICAgIDxTQ01TU3VidGl0bGU+e3QoJ215U2tpbGxzLnN1YnRpdGxlJyl9PC9TQ01TU3VidGl0bGU+XG4gICAgICAgICAgICA8L1NDTVNUaXRsZUlubmVyPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNBY3Rpb25zUm93PlxuICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudVdyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3JlYXRlTWVudU9wZW4ocHJldiA9PiAhcHJldilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVCdXR0b25UZXh0Pnt0KCdteVNraWxscy5jcmVhdGVTa2lsbCcpfTwvU0NNU0NyZWF0ZUJ1dHRvblRleHQ+XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICB7Y3JlYXRlTWVudU9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudSBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVNZW51SXRlbSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlQ3JlYXRlT3B0aW9uKCdnZW5lcmF0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQ2hhdCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmNyZWF0ZVdpdGhNYWlhJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ3JlYXRlTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVNZW51SXRlbSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlQ3JlYXRlT3B0aW9uKCd3cml0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQ2xpcGJvYXJkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMud3JpdGVJbnN0cnVjdGlvbnMnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZU1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDcmVhdGVPcHRpb24oJ3VwbG9hZCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uVXBsb2FkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXBsb2FkU2tpbGwnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ3JlYXRlTWVudT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NNU0NyZWF0ZU1lbnVXcmFwPlxuICAgICAgICAgICAgICA8L1NDTVNBY3Rpb25zUm93PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01TVGl0bGVXcmFwPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICA8U0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICAgICAgPExvYWRlciBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgIDwvU0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IWxvYWRpbmcgJiYgc2tpbGxzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNU0NhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNU0NhcmRzUm93PlxuICAgICAgICAgICAgICB7c2tpbGxzLm1hcChza2lsbCA9PiAoXG4gICAgICAgICAgICAgICAgPFNDTVNDYXJkQnV0dG9uIGtleT17c2tpbGwuaWR9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBjYW5FZGl0ICYmIGhhbmRsZU9wZW5FZGl0U2tpbGwoc2tpbGwpfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRpdGxlTmFtZT57c2tpbGwubmFtZX08L1NDTVNDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIHtjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNhcmRNZW51QXJpYUxhYmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvclNraWxsSWQocHJldiA9PiAocHJldiA9PT0gc2tpbGwuaWQgPyBudWxsIDogc2tpbGwuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjOTk5XCIgd2lkdGg9ezE1fSBoZWlnaHQ9ezE1fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQ29udGVudFRleHQ+e3NraWxsLmNvbnRlbnR9PC9TQ01TQ2FyZENvbnRlbnRUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDcmVhdGVkQXRMYWJlbChza2lsbCkgfHwgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNGYWxsYmFja0RhdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZEZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCb2R5PlxuICAgICAgICAgICAgICAgICAge21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWQgJiYgY2FuU2hvd01lbnUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FuRWRpdCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkTWVudUl0ZW0gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5FZGl0U2tpbGwoc2tpbGwpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZWRpdCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW5EZWxldGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKHNraWxsKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCdXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TQ01TQ2FyZHNSb3c+XG4gICAgICAgICAgPC9TQ01TQ2FyZHNPdXRlcj5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgeyFsb2FkaW5nICYmICFza2lsbHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlVGl0bGU+e3QoJ215U2tpbGxzLmVtcHR5U3RhdGVUaXRsZScpfTwvU0NNU0VtcHR5U3RhdGVUaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgIHtjYW5DcmVhdGUgPyB0KCdteVNraWxscy5lbXB0eVN0YXRlRGVzY3JpcHRpb24nKSA6IHQoJ215U2tpbGxzLmVtcHR5U3RhdGVEZXNjcmlwdGlvbk5vUGVybScpfVxuICAgICAgICAgICAgICAgIDwvU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICA8L1NDTVNFbXB0eVN0YXRlQ29sdW1uPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtvcGVuQ3JlYXRlU2tpbGxNb2RhbH0+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmVtcHR5U3RhdGVCdXR0b24nKX1cbiAgICAgICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNU0VtcHR5U3RhdGVSb290PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NNU0JvZHk+XG4gICAgICB7ZGVsZXRlTW9kYWxDaGF0ID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNraWxsVG9EZWxldGUobnVsbCl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IGhhbmRsZUNvbmZpcm1EZWxldGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXtkZWxldGVNb2RhbENoYXR9XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TQ01TQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDeEUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBRW5ELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLG1CQUFtQixRQUFRLHlEQUF5RDtBQUM3RixTQUFTQyx5QkFBeUIsUUFBUSw2REFBNkQ7QUFDdkcsU0FBU0MsUUFBUSxRQUFRLDJCQUEyQjtBQUNwRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQ0VDLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMs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