@projectcor/maia-components 2.11.26-2 → 2.11.26-4

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 (47) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +56 -25
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +45 -47
  3. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  4. package/lib/components/atoms/icons/index.js +1 -3
  5. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
  6. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +44 -54
  7. package/lib/components/molecules/ChatAIHome/styles.js +35 -43
  8. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -1
  9. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -120
  10. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +15 -28
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +16 -81
  12. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +1 -16
  13. package/lib/components/molecules/Sidebar/Sidebar.js +322 -257
  14. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +23 -18
  15. package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
  16. package/lib/dev/Providers.js +2 -2
  17. package/lib/hooks/useChatManager/useChatManager.js +28 -4
  18. package/lib/hooks/useChats/useChats.js +4 -12
  19. package/lib/hooks/useOrchestratorStream/streamRevealSmooth.js +198 -0
  20. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +33 -6
  21. package/lib/lang/br/index.js +50 -34
  22. package/lib/lang/en/index.js +42 -26
  23. package/lib/lang/es/index.js +41 -15
  24. package/lib/lang/fr/index.js +20 -15
  25. package/lib/mocks/mockChats.js +395 -0
  26. package/lib/mocks/mockedUser.js +169 -0
  27. package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
  28. package/lib/services/maia/Chats/index.js +1 -5
  29. package/lib/services/maia/client.js +9 -44
  30. package/lib/services/utils/mapChatMessages.js +21 -4
  31. package/lib/store/chatsStore.types.js +2 -10
  32. package/lib/store/useChatsStore.js +37 -75
  33. package/lib/types/Chat.js +1 -3
  34. package/package.json +1 -1
  35. package/lib/components/atoms/icons/ChatConversation.js +0 -40
  36. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
  37. package/lib/components/molecules/ChatAIModal/layout.js +0 -35
  38. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
  39. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
  40. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -151
  41. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
  42. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
  43. package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
  44. package/lib/dev/fixtures/devUser.js +0 -173
  45. package/lib/dev/fixtures/mockedUser.js +0 -169
  46. package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
  47. package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
@@ -1,25 +1,32 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
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; }
5
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; }
6
- import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  /* eslint-disable no-param-reassign */
8
8
  /* eslint-disable @typescript-eslint/no-shadow */
9
9
  /* eslint-disable @typescript-eslint/no-explicit-any */
10
10
  /* eslint-disable no-nested-ternary */
11
11
  /* eslint-disable jsx-a11y/click-events-have-key-events */
12
12
  /* eslint-disable jsx-a11y/no-static-element-interactions */
13
- import { useEffect, useMemo, useRef, useState } from 'react';
14
- import { AnimatePresence } from 'framer-motion';
13
+ import { useEffect, useRef, useState } from 'react';
15
14
  import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
15
+ import { CUButton } from '@projectcor/button/lib/components/CUButton';
16
+ import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
17
+ import { Pencil } from '@projectcor/icons/lib/components/Pencil';
18
+ import { Trash } from '@projectcor/icons/lib/components/Trash';
16
19
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
17
20
  import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
21
+ import { useResizeListener } from '../../../hooks/useResize';
18
22
  import { useChats } from '../../../hooks/useChats';
19
23
  import { Loader } from '../../atoms/Loader';
20
- import { ErrorState, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
24
+ import { ErrorState, MAIAIcon, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
21
25
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
22
26
  import { useT } from '../../../hooks/useT';
27
+ import { OptionItem } from '../../atoms/CardMenu/CardMenu';
28
+ import { EditQuestionModal } from '../../organisms/EditQuestionModal';
29
+ import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
23
30
  import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
24
31
  import { useUser } from '../../../context/cor-user';
25
32
  import { OnboardingModalButton } from '../../atoms/OnboardingModalButton';
@@ -27,61 +34,190 @@ import { FeedbackButton } from '../../atoms/FeedbackButton';
27
34
  import { useGlobalContext } from '../../../context/global-context';
28
35
  import { fetchMaia } from '../../../services/maia/client';
29
36
  import { mapCORLang } from '../../../lang/utils';
30
- import { SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
31
- import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
32
- import { SCSSidebarSectionModalBackdropMotion } from './SidebarChats.styles';
33
- import { SidebarChatsSection } from './SidebarChatsSection';
34
- import { SidebarChatsSectionModal } from './SidebarChatsSectionModal';
35
- import { buildSidebarSections, groupChatsBySidebarSection } from './sidebarChats.helpers';
36
- import { SIDEBAR_SECTION_TRANSLATION_KEYS } from './sidebarChats.types';
37
- import { getChatsStoreState } from '../../../store/useChatsStore';
38
- import { SECTION_MODAL_SESSIONS_PAGE_LIMIT, SIDEBAR_SESSIONS_PAGE_LIMIT } from '../../../store/chatsStore.types';
37
+ import { SCLHCWrapper, SCLHCWrapperAgent, SCLHCWrapperAgentText, SCLHCWrapperButtonActions, SCLHCWrapperContent, SCLHCWrapperTitle, SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
38
+ import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsHeading, SCSSidebarAgentsHeadingText, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarConversationsHeading, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
39
39
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
40
- export var Sidebar = function Sidebar(_ref) {
41
- var _user$permissions;
42
- var onGoToChat = _ref.onGoToChat,
43
- _ref$onError = _ref.onError,
44
- onError = _ref$onError === void 0 ? function () {
45
- return null;
46
- } : _ref$onError,
47
- handleGoToHome = _ref.handleGoToHome,
48
- handleOpenMarketplace = _ref.handleOpenMarketplace,
49
- showNewChat = _ref.showNewChat,
50
- refetchChats = _ref.refetchChats,
51
- handleSetRefetchChats = _ref.handleSetRefetchChats,
52
- hasError = _ref.hasError,
53
- resetSelectedChatRef = _ref.resetSelectedChatRef,
54
- _ref$agentsNavActive = _ref.agentsNavActive,
55
- agentsNavActive = _ref$agentsNavActive === void 0 ? null : _ref$agentsNavActive;
40
+ var actions = {
41
+ edit: function edit(props) {
42
+ return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
43
+ },
44
+ "delete": function _delete(props) {
45
+ return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
46
+ }
47
+ };
48
+
49
+ /** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
50
+ function abbreviateSpecialistInAgentName(agentName) {
51
+ if (!agentName || typeof agentName !== 'string') return agentName;
52
+ return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
53
+ }
54
+ var ListHistoryChat = function ListHistoryChat(_ref) {
55
+ var chat = _ref.chat,
56
+ _onClick = _ref.onClick,
57
+ isModalOpen = _ref.isModalOpen,
58
+ onOpenModal = _ref.onOpenModal,
59
+ onCloseModal = _ref.onCloseModal,
60
+ handlers = _ref.handlers,
61
+ isSelected = _ref.isSelected;
62
+ var textRef = useRef(null);
63
+ var agentRef = useRef(null);
64
+ var _useResizeListener = useResizeListener(textRef, [chat.title]),
65
+ showTooltip = _useResizeListener.showTooltip;
66
+ var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
67
+ showTooltipAgent = _useResizeListener2.showTooltip;
56
68
  var _useT = useT(),
57
- t = _useT.t,
58
- i18n = _useT.i18n;
59
- var _useState = useState(true),
69
+ t = _useT.t;
70
+ var _useState = useState(null),
60
71
  _useState2 = _slicedToArray(_useState, 2),
61
- isOpen = _useState2[0],
62
- setIsOpen = _useState2[1];
63
- var _useState3 = useState(null),
72
+ action = _useState2[0],
73
+ setAction = _useState2[1];
74
+ var menuItems = [{
75
+ label: t('history.menu.rename'),
76
+ onClickItem: function onClickItem(chatId) {
77
+ setAction('edit');
78
+ onOpenModal(chatId);
79
+ },
80
+ Icon: Pencil,
81
+ eventKey: EVENTS.pmAiMenuEdit
82
+ }, {
83
+ label: t('history.menu.delete'),
84
+ onClickItem: function onClickItem(chatId) {
85
+ setAction('delete');
86
+ onOpenModal(chatId);
87
+ },
88
+ Icon: Trash,
89
+ eventKey: EVENTS.pmAiMenuDelete
90
+ }];
91
+ var handleConfirmAction = function handleConfirmAction(chatData) {
92
+ if (action === 'edit') {
93
+ handlers.handleUpdateChat(chatData);
94
+ } else {
95
+ handlers.handleDeleteChat(chatData);
96
+ }
97
+ setAction(null);
98
+ onCloseModal();
99
+ };
100
+ return /*#__PURE__*/_jsxs(_Fragment, {
101
+ children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
102
+ onClick: function onClick(e) {
103
+ e.stopPropagation();
104
+ _onClick(chat);
105
+ },
106
+ isModalOpen: isModalOpen,
107
+ isSelected: isSelected,
108
+ children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
109
+ children: [/*#__PURE__*/_jsx(Tooltip, {
110
+ title: showTooltip ? chat.title : '',
111
+ children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
112
+ ref: textRef,
113
+ children: chat.title || t('conversations.emptyLabel')
114
+ })
115
+ }), /*#__PURE__*/_jsx(Tooltip, {
116
+ title: showTooltipAgent ? chat.agent + (chat.projectName ? " - ".concat(chat.projectName) : '') : '',
117
+ children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
118
+ children: [chat.agentType === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
119
+ width: 14,
120
+ height: 14
121
+ }) : /*#__PURE__*/_jsx("span", {
122
+ style: {
123
+ fontSize: '14px'
124
+ },
125
+ children: chat.emoji
126
+ }), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
127
+ ref: agentRef,
128
+ children: [chat.agentType === 'clone' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
129
+ })]
130
+ })
131
+ })]
132
+ }), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
133
+ children: [/*#__PURE__*/_jsx(CUButton, {
134
+ iconOnly: true,
135
+ size: "small",
136
+ variant: "text",
137
+ onClick: function onClick(event) {
138
+ event.stopPropagation();
139
+ onOpenModal(chat.id);
140
+ },
141
+ children: /*#__PURE__*/_jsx(MenuDots, {
142
+ width: 20,
143
+ height: 20
144
+ })
145
+ }), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
146
+ "data-modal-container": true,
147
+ style: {
148
+ position: 'absolute',
149
+ top: '32px',
150
+ right: '16px',
151
+ backgroundColor: 'white',
152
+ zIndex: 1000,
153
+ display: 'flex',
154
+ flexDirection: 'column',
155
+ borderRadius: '4px',
156
+ border: '1px solid rgba(224, 224, 224, 1)',
157
+ minWidth: '124px'
158
+ },
159
+ children: menuItems.map(function (_ref2) {
160
+ var label = _ref2.label,
161
+ onClickItem = _ref2.onClickItem,
162
+ Icon = _ref2.Icon,
163
+ eventKey = _ref2.eventKey;
164
+ return /*#__PURE__*/_jsx(OptionItem, {
165
+ label: label,
166
+ onClick: function onClick() {
167
+ return onClickItem(chat.id);
168
+ },
169
+ Icon: Icon,
170
+ eventKey: eventKey
171
+ }, label);
172
+ })
173
+ })]
174
+ })]
175
+ }, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
176
+ onClose: function onClose() {
177
+ onCloseModal();
178
+ setAction(null);
179
+ },
180
+ chat: chat,
181
+ handlers: {
182
+ handleConfirmAction: handleConfirmAction,
183
+ handleSetIsOpenModal: onCloseModal
184
+ }
185
+ })]
186
+ });
187
+ };
188
+ export var Sidebar = function Sidebar(_ref3) {
189
+ var _user$permissions;
190
+ var onGoToChat = _ref3.onGoToChat,
191
+ _ref3$onError = _ref3.onError,
192
+ onError = _ref3$onError === void 0 ? function () {
193
+ return null;
194
+ } : _ref3$onError,
195
+ handleGoToHome = _ref3.handleGoToHome,
196
+ handleOpenMarketplace = _ref3.handleOpenMarketplace,
197
+ showNewChat = _ref3.showNewChat,
198
+ refetchChats = _ref3.refetchChats,
199
+ handleSetRefetchChats = _ref3.handleSetRefetchChats,
200
+ hasError = _ref3.hasError,
201
+ resetSelectedChatRef = _ref3.resetSelectedChatRef,
202
+ _ref3$agentsNavActive = _ref3.agentsNavActive,
203
+ agentsNavActive = _ref3$agentsNavActive === void 0 ? null : _ref3$agentsNavActive;
204
+ var _useT2 = useT(),
205
+ t = _useT2.t,
206
+ i18n = _useT2.i18n;
207
+ var _useState3 = useState(true),
64
208
  _useState4 = _slicedToArray(_useState3, 2),
65
- chatMenuState = _useState4[0],
66
- setChatMenuState = _useState4[1];
209
+ isOpen = _useState4[0],
210
+ setIsOpen = _useState4[1];
67
211
  var _useState5 = useState(null),
68
212
  _useState6 = _slicedToArray(_useState5, 2),
69
- expandedSectionModalKey = _useState6[0],
70
- setExpandedSectionModalKey = _useState6[1];
71
- var _useState7 = useState({
72
- clients: false,
73
- projects: false,
74
- agentsByCompany: false
75
- }),
213
+ isOpenModal = _useState6[0],
214
+ setIsOpenModal = _useState6[1];
215
+ var _useState7 = useState(null),
76
216
  _useState8 = _slicedToArray(_useState7, 2),
77
- collapsedSections = _useState8[0],
78
- setCollapsedSections = _useState8[1];
79
- var _useState9 = useState(null),
80
- _useState0 = _slicedToArray(_useState9, 2),
81
- selectedChat = _useState0[0],
82
- setSelectedChat = _useState0[1];
217
+ selectedChat = _useState8[0],
218
+ setSelectedChat = _useState8[1];
83
219
  var chatsFetchedRef = useRef(false);
84
- var sidebarScrollRef = useRef(null);
220
+ var chatsContainerRef = useRef(null);
85
221
  var user = useUser();
86
222
  var eventAmplitude = useEvent();
87
223
  var _useGlobalContext = useGlobalContext(),
@@ -97,32 +233,17 @@ export var Sidebar = function Sidebar(_ref) {
97
233
  deleteChat = _useChats.deleteChat,
98
234
  updateChat = _useChats.updateChat,
99
235
  fetchChats = _useChats.fetchChats,
236
+ limit = _useChats.limit,
237
+ offset = _useChats.offset,
100
238
  hasMoreChats = _useChats.hasMoreChats,
101
239
  loadMoreChats = _useChats.loadMoreChats,
102
- isLoadingMoreChats = _useChats.isLoadingMoreChats,
103
- sessionsGroupHasMore = _useChats.sessionsGroupHasMore;
104
- var showFullSidebarErrorColumn = hasError && !chats.length;
105
- var showSidebarErrorFooterBanner = hasError && chats.length > 0;
240
+ isLoadingMoreChats = _useChats.isLoadingMoreChats;
106
241
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
107
242
  var canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
108
243
  var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view);
109
244
  var showMarketplaceSidebarButton = !!canCreateAgents && !!window.MAIA_MARKETPLACE_MAIAKER;
110
245
  var agentNavButtonCount = (showMarketplaceSidebarButton ? 1 : 0) + (canViewAgents ? 1 : 0);
111
246
  var showAgentsNavBlock = showMarketplaceSidebarButton || canViewAgents;
112
- var groupedChats = useMemo(function () {
113
- return groupChatsBySidebarSection(chats);
114
- }, [chats]);
115
- var sidebarSections = useMemo(function () {
116
- return buildSidebarSections(groupedChats, function (key) {
117
- var _user$company;
118
- return key === 'agentsByCompany' ? t(SIDEBAR_SECTION_TRANSLATION_KEYS[key], {
119
- companyName: ((_user$company = user.company) === null || _user$company === void 0 ? void 0 : _user$company.trim()) || '—'
120
- }) : t(SIDEBAR_SECTION_TRANSLATION_KEYS[key]);
121
- }, sessionsGroupHasMore);
122
- }, [groupedChats, t, user.company, sessionsGroupHasMore]);
123
- var expandedSection = expandedSectionModalKey ? sidebarSections.find(function (section) {
124
- return section.key === expandedSectionModalKey;
125
- }) || null : null;
126
247
  useEffect(function () {
127
248
  if (resetSelectedChatRef) {
128
249
  resetSelectedChatRef.current = function () {
@@ -136,12 +257,12 @@ export var Sidebar = function Sidebar(_ref) {
136
257
  };
137
258
  }, [resetSelectedChatRef]);
138
259
  var handleDeleteChat = /*#__PURE__*/function () {
139
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
260
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
140
261
  return _regeneratorRuntime.wrap(function (_context) {
141
262
  while (1) switch (_context.prev = _context.next) {
142
263
  case 0:
143
264
  deleteChat(chat.sessionExternalId);
144
- setChatMenuState(null);
265
+ setIsOpenModal(null);
145
266
  handleGoToHome();
146
267
  case 1:
147
268
  case "end":
@@ -150,121 +271,69 @@ export var Sidebar = function Sidebar(_ref) {
150
271
  }, _callee);
151
272
  }));
152
273
  return function handleDeleteChat(_x) {
153
- return _ref2.apply(this, arguments);
274
+ return _ref4.apply(this, arguments);
154
275
  };
155
276
  }();
156
277
  var handleUpdateChat = function handleUpdateChat(chat) {
157
278
  updateChat(chat);
158
- setChatMenuState(null);
279
+ setIsOpenModal(null);
159
280
  };
160
- var handleOpenChatMenu = function handleOpenChatMenu(chatId, surface) {
161
- setChatMenuState(function (prev) {
162
- return (prev === null || prev === void 0 ? void 0 : prev.chatId) === chatId && (prev === null || prev === void 0 ? void 0 : prev.surface) === surface ? null : {
163
- chatId: chatId,
164
- surface: surface
165
- };
166
- });
167
- };
168
- var handleCloseChatMenu = function handleCloseChatMenu() {
169
- setChatMenuState(null);
170
- };
171
- var handleOpenSectionModal = /*#__PURE__*/function () {
172
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sectionKey) {
173
- var _getChatsStoreState, storeLimit;
174
- return _regeneratorRuntime.wrap(function (_context2) {
175
- while (1) switch (_context2.prev = _context2.next) {
176
- case 0:
177
- setChatMenuState(null);
178
- _getChatsStoreState = getChatsStoreState(), storeLimit = _getChatsStoreState.limit;
179
- if (!(storeLimit === SIDEBAR_SESSIONS_PAGE_LIMIT)) {
180
- _context2.next = 1;
181
- break;
182
- }
183
- _context2.next = 1;
184
- return fetchChats({
185
- limit: SECTION_MODAL_SESSIONS_PAGE_LIMIT,
186
- offset: 0,
187
- showGlobalLoader: false
188
- });
189
- case 1:
190
- setExpandedSectionModalKey(sectionKey);
191
- case 2:
192
- case "end":
193
- return _context2.stop();
194
- }
195
- }, _callee2);
196
- }));
197
- return function handleOpenSectionModal(_x2) {
198
- return _ref3.apply(this, arguments);
199
- };
200
- }();
201
- var handleCloseSectionModal = function handleCloseSectionModal() {
202
- setExpandedSectionModalKey(null);
203
- setChatMenuState(null);
204
- };
205
- var handleToggleSectionCollapse = function handleToggleSectionCollapse(sectionKey) {
206
- setCollapsedSections(function (prev) {
207
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, sectionKey, !prev[sectionKey]));
208
- });
281
+ var handleOpenModal = function handleOpenModal(chatId) {
282
+ if (isOpenModal && isOpenModal !== chatId) {
283
+ setIsOpenModal(null);
284
+ } else {
285
+ setIsOpenModal(chatId);
286
+ }
209
287
  };
210
- var handleSelectConversation = function handleSelectConversation(chatData) {
211
- setSelectedChat(chatData.sessionExternalId);
212
- onGoToChat(chatData);
288
+ var handleCloseModal = function handleCloseModal() {
289
+ setIsOpenModal(null);
213
290
  };
214
291
  useEffect(function () {
215
292
  var handleClickOutside = function handleClickOutside(event) {
216
- var target = event.target;
217
- if (chatMenuState && !target.closest('[data-modal-container]')) {
218
- setChatMenuState(null);
219
- }
220
- if (expandedSectionModalKey && !target.closest('[data-section-modal-container]')) {
221
- setExpandedSectionModalKey(null);
222
- setChatMenuState(null);
293
+ if (isOpenModal && !event.target.closest('[data-modal-container]')) {
294
+ setIsOpenModal(null);
223
295
  }
224
296
  };
225
- if (chatMenuState || expandedSectionModalKey) {
297
+ if (isOpenModal) {
226
298
  document.addEventListener('mousedown', handleClickOutside);
227
299
  }
228
300
  return function () {
229
301
  document.removeEventListener('mousedown', handleClickOutside);
230
302
  };
231
- }, [chatMenuState, expandedSectionModalKey]);
303
+ }, [isOpenModal]);
232
304
  var handleToggleSidebar = function handleToggleSidebar() {
233
- if (chatMenuState) {
234
- setChatMenuState(null);
235
- }
236
- if (expandedSectionModalKey) {
237
- setExpandedSectionModalKey(null);
305
+ if (isOpenModal) {
306
+ setIsOpenModal(null);
238
307
  }
239
308
  setIsOpen(function (prev) {
240
309
  return !prev;
241
310
  });
242
311
  };
243
312
  var handleOpenCreateAgent = /*#__PURE__*/function () {
244
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
313
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
245
314
  var response, data, maiakerAgent;
246
- return _regeneratorRuntime.wrap(function (_context3) {
247
- while (1) switch (_context3.prev = _context3.next) {
315
+ return _regeneratorRuntime.wrap(function (_context2) {
316
+ while (1) switch (_context2.prev = _context2.next) {
248
317
  case 0:
249
- _context3.next = 1;
318
+ _context2.next = 1;
250
319
  return fetchMaia({
251
320
  path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
252
321
  method: 'GET'
253
322
  });
254
323
  case 1:
255
- response = _context3.sent;
256
- _context3.next = 2;
324
+ response = _context2.sent;
325
+ _context2.next = 2;
257
326
  return response.json();
258
327
  case 2:
259
- data = _context3.sent;
328
+ data = _context2.sent;
260
329
  maiakerAgent = (data.data || []).find(function (agent) {
261
330
  return agent.type === 'clone' && agent.entity === 'global';
262
331
  });
263
332
  if (maiakerAgent) {
264
- _context3.next = 3;
333
+ _context2.next = 3;
265
334
  break;
266
335
  }
267
- return _context3.abrupt("return");
336
+ return _context2.abrupt("return");
268
337
  case 3:
269
338
  setProject(null);
270
339
  setClient === null || setClient === void 0 || setClient(null);
@@ -272,64 +341,85 @@ export var Sidebar = function Sidebar(_ref) {
272
341
  handleGoToHome();
273
342
  case 4:
274
343
  case "end":
275
- return _context3.stop();
344
+ return _context2.stop();
276
345
  }
277
- }, _callee3);
346
+ }, _callee2);
278
347
  }));
279
348
  return function handleOpenCreateAgent() {
280
- return _ref4.apply(this, arguments);
349
+ return _ref5.apply(this, arguments);
281
350
  };
282
351
  }();
283
352
  useEffect(function () {
284
353
  if (isOpen && !chatsFetchedRef.current) {
285
354
  chatsFetchedRef.current = true;
286
355
  fetchChats({
287
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
288
- offset: 0
356
+ limit: limit,
357
+ offset: offset
289
358
  });
290
359
  return;
291
360
  }
292
361
  if (refetchChats) {
293
362
  fetchChats({
294
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
295
- offset: 0
363
+ limit: limit,
364
+ offset: offset
296
365
  });
297
366
  handleSetRefetchChats(false);
298
367
  }
299
- }, [isOpen, refetchChats, handleSetRefetchChats, fetchChats]);
300
-
301
- /** El scroll infinito de sesiones vive solo en el modal de sección (`SidebarChatsSectionModal`). */
302
-
368
+ }, [isOpen, refetchChats, handleSetRefetchChats]);
369
+ useEffect(function () {
370
+ var handleScroll = function handleScroll() {
371
+ if (!chatsContainerRef.current || !hasMoreChats || isLoadingMoreChats || hasError) {
372
+ return;
373
+ }
374
+ var _chatsContainerRef$cu = chatsContainerRef.current,
375
+ scrollTop = _chatsContainerRef$cu.scrollTop,
376
+ scrollHeight = _chatsContainerRef$cu.scrollHeight,
377
+ clientHeight = _chatsContainerRef$cu.clientHeight;
378
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
379
+ if (isAtBottom) {
380
+ loadMoreChats();
381
+ }
382
+ };
383
+ var container = chatsContainerRef.current;
384
+ if (container) {
385
+ container.addEventListener('scroll', handleScroll);
386
+ }
387
+ return function () {
388
+ if (container) {
389
+ container.removeEventListener('scroll', handleScroll);
390
+ }
391
+ };
392
+ }, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
303
393
  var handleNewChat = /*#__PURE__*/function () {
304
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
305
- return _regeneratorRuntime.wrap(function (_context4) {
306
- while (1) switch (_context4.prev = _context4.next) {
394
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
395
+ return _regeneratorRuntime.wrap(function (_context3) {
396
+ while (1) switch (_context3.prev = _context3.next) {
307
397
  case 0:
308
- if (chatMenuState) {
309
- setChatMenuState(null);
398
+ if (isOpenModal) {
399
+ setIsOpenModal(null);
310
400
  }
311
401
  setSelectedChat(null);
312
- _context4.next = 1;
402
+ _context3.next = 1;
313
403
  return fetchChats({
314
- limit: expandedSectionModalKey ? SECTION_MODAL_SESSIONS_PAGE_LIMIT : SIDEBAR_SESSIONS_PAGE_LIMIT,
404
+ limit: limit,
315
405
  offset: 0
316
406
  });
317
407
  case 1:
318
408
  handleGoToHome();
319
409
  case 2:
320
410
  case "end":
321
- return _context4.stop();
411
+ return _context3.stop();
322
412
  }
323
- }, _callee4);
413
+ }, _callee3);
324
414
  }));
325
415
  return function handleNewChat() {
326
- return _ref5.apply(this, arguments);
416
+ return _ref6.apply(this, arguments);
327
417
  };
328
418
  }();
329
419
  useEffect(function () {
330
420
  var handleRefetchSession = function handleRefetchSession() {
331
421
  fetchChats({
332
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
422
+ limit: 20,
333
423
  offset: 0
334
424
  });
335
425
  };
@@ -337,7 +427,7 @@ export var Sidebar = function Sidebar(_ref) {
337
427
  return function () {
338
428
  document.removeEventListener('refetch-session', handleRefetchSession);
339
429
  };
340
- }, [fetchChats]);
430
+ }, []);
341
431
  var showNewChatButton = !showNewChat && !hasError && !loadingChats && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access));
342
432
  return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
343
433
  $isOpen: isOpen,
@@ -349,9 +439,9 @@ export var Sidebar = function Sidebar(_ref) {
349
439
  onClick: handleToggleSidebar,
350
440
  isOpen: isOpen,
351
441
  children: /*#__PURE__*/_jsx(ChevronDoubleLeft, {
352
- color: "#4D4D4D",
353
- width: 14,
354
- height: 14
442
+ color: "rgba(102, 102, 102, 1)",
443
+ width: 20,
444
+ height: 20
355
445
  })
356
446
  })
357
447
  }), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
@@ -359,47 +449,53 @@ export var Sidebar = function Sidebar(_ref) {
359
449
  children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
360
450
  onClick: handleNewChat,
361
451
  children: /*#__PURE__*/_jsx(NewChat, {
362
- width: 14,
363
- height: 14,
364
- color: "#4D4D4D"
452
+ width: 20,
453
+ height: 20
365
454
  })
366
455
  })
367
456
  }) : null]
368
457
  }), /*#__PURE__*/_jsxs(SCSSidebarBody, {
369
458
  $isOpen: isOpen,
370
459
  children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
371
- ref: sidebarScrollRef,
372
- children: [/*#__PURE__*/_jsx(SCSSidebarAgentsBlock, {
373
- children: showAgentsNavBlock ? /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
374
- children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
375
- type: "button",
376
- onClick: function onClick() {
377
- eventAmplitude(EVENTS.aiChatMpOpen);
378
- handleOpenCreateAgent();
379
- },
380
- $active: agentsNavActive === 'maiaker',
381
- children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
382
- size: 16
383
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
384
- children: t('conversations.maiakerNav')
385
- })]
386
- }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
387
- type: "button",
388
- onClick: handleOpenMarketplace,
389
- $active: agentsNavActive === 'myAgents',
390
- children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
391
- size: 16
392
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
393
- children: t('conversations.myAgentsNav')
394
- })]
395
- }) : null]
396
- }) : null
460
+ children: [/*#__PURE__*/_jsxs(SCSSidebarAgentsBlock, {
461
+ children: [showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
462
+ children: [/*#__PURE__*/_jsx(SCSSidebarAgentsHeading, {
463
+ children: /*#__PURE__*/_jsx(SCSSidebarAgentsHeadingText, {
464
+ children: t('conversations.agentsSectionTitle')
465
+ })
466
+ }), /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
467
+ children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
468
+ type: "button",
469
+ onClick: function onClick() {
470
+ eventAmplitude(EVENTS.aiChatMpOpen);
471
+ handleOpenCreateAgent();
472
+ },
473
+ $active: agentsNavActive === 'maiaker',
474
+ children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
475
+ size: 16
476
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
477
+ children: t('conversations.maiakerNav')
478
+ })]
479
+ }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
480
+ type: "button",
481
+ onClick: handleOpenMarketplace,
482
+ $active: agentsNavActive === 'myAgents',
483
+ children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
484
+ size: 16
485
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
486
+ children: t('conversations.myAgentsNav')
487
+ })]
488
+ }) : null]
489
+ })]
490
+ }) : null, /*#__PURE__*/_jsx(SCSSidebarConversationsHeading, {
491
+ children: t('conversations.title')
492
+ })]
397
493
  }), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
398
- $hasChats: chats.length > 0 && !showFullSidebarErrorColumn,
494
+ ref: chatsContainerRef,
495
+ $hasChats: chats.length > 0,
399
496
  $offsetVariant: hasError ? 'error' : 'default',
400
497
  $agentNavButtonCount: agentNavButtonCount,
401
- $fillHeight: showFullSidebarErrorColumn,
402
- children: showFullSidebarErrorColumn ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
498
+ children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
403
499
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
404
500
  children: /*#__PURE__*/_jsx(ErrorState, {})
405
501
  }), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
@@ -412,24 +508,25 @@ export var Sidebar = function Sidebar(_ref) {
412
508
  }) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
413
509
  children: /*#__PURE__*/_jsx(Loader, {})
414
510
  }) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
415
- children: [sidebarSections.map(function (section) {
416
- return /*#__PURE__*/_jsx(SidebarChatsSection, {
417
- section: section,
418
- collapsed: collapsedSections[section.key],
419
- onToggleCollapse: function onToggleCollapse() {
420
- return handleToggleSectionCollapse(section.key);
511
+ children: [chats.map(function (chat) {
512
+ return /*#__PURE__*/_jsx(ListHistoryChat, {
513
+ chat: chat,
514
+ onClick: function onClick(chatData) {
515
+ if (isOpenModal) {
516
+ setIsOpenModal(null);
517
+ }
518
+ setSelectedChat(chatData.sessionExternalId);
519
+ onGoToChat(chatData);
421
520
  },
422
- onOpenMore: function onOpenMore() {
423
- return handleOpenSectionModal(section.key);
521
+ isModalOpen: isOpenModal === chat.id,
522
+ onOpenModal: handleOpenModal,
523
+ onCloseModal: handleCloseModal,
524
+ handlers: {
525
+ handleDeleteChat: handleDeleteChat,
526
+ handleUpdateChat: handleUpdateChat
424
527
  },
425
- chatMenuState: chatMenuState,
426
- onOpenChatMenu: handleOpenChatMenu,
427
- onCloseChatMenu: handleCloseChatMenu,
428
- handleDeleteChat: handleDeleteChat,
429
- handleUpdateChat: handleUpdateChat,
430
- selectedChatSessionExternalId: selectedChat,
431
- onGoToChat: handleSelectConversation
432
- }, "chat-section-".concat(section.key));
528
+ isSelected: selectedChat === chat.sessionExternalId
529
+ }, chat.id);
433
530
  }), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
434
531
  children: /*#__PURE__*/_jsx(Loader, {})
435
532
  })]
@@ -439,7 +536,7 @@ export var Sidebar = function Sidebar(_ref) {
439
536
  })]
440
537
  })
441
538
  }), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
442
- children: showSidebarErrorFooterBanner ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
539
+ children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
443
540
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
444
541
  children: /*#__PURE__*/_jsx(ErrorIcon, {})
445
542
  }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
@@ -455,39 +552,7 @@ export var Sidebar = function Sidebar(_ref) {
455
552
  isOpen: isOpen
456
553
  }) : null, /*#__PURE__*/_jsx(OnboardingModalButton, {})]
457
554
  })]
458
- }), /*#__PURE__*/_jsx(AnimatePresence, {
459
- children: expandedSectionModalKey && expandedSection ? /*#__PURE__*/_jsxs(_Fragment, {
460
- children: [/*#__PURE__*/_jsx(SCSSidebarSectionModalBackdropMotion, {
461
- "aria-hidden": true,
462
- initial: {
463
- opacity: 0
464
- },
465
- animate: {
466
- opacity: 1
467
- },
468
- exit: {
469
- opacity: 0
470
- },
471
- transition: {
472
- duration: 0.2,
473
- ease: 'easeOut'
474
- }
475
- }, "sidebar-section-chat-backdrop"), /*#__PURE__*/_jsx(SidebarChatsSectionModal, {
476
- section: expandedSection,
477
- onClose: handleCloseSectionModal,
478
- chatMenuState: chatMenuState,
479
- onOpenChatMenu: handleOpenChatMenu,
480
- onCloseChatMenu: handleCloseChatMenu,
481
- handleDeleteChat: handleDeleteChat,
482
- handleUpdateChat: handleUpdateChat,
483
- selectedChatSessionExternalId: selectedChat,
484
- onGoToChat: handleSelectConversation,
485
- hasMoreChats: hasMoreChats,
486
- loadMoreChats: loadMoreChats,
487
- isLoadingMoreChats: isLoadingMoreChats
488
- }, expandedSectionModalKey)]
489
- }) : null
490
555
  })]
491
556
  });
492
557
  };
493
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJBbmltYXRlUHJlc2VuY2UiLCJDaGV2cm9uRG91YmxlTGVmdCIsIlRvb2x0aXAiLCJFbXB0eUhpc3RvcnlJY29uIiwidXNlQ2hhdHMiLCJMb2FkZXIiLCJFcnJvclN0YXRlIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NTaWRlYmFyUm9vdCIsIlNDU1NpZGViYXJUb29sYmFyIiwiU0NTU2lkZWJhckJvZHkiLCJTQ1NTaWRlYmFyT3BlblBhbmVsIiwiU0NTU2lkZWJhckFnZW50c0Jsb2NrIiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsIlNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvbiIsIlNpZGViYXJDaGF0c1NlY3Rpb24iLCJTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWwiLCJidWlsZFNpZGViYXJTZWN0aW9ucyIsImdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIiwiU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVMiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQiLCJTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTaWRlYmFyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYkb25FcnJvciIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsInNob3dOZXdDaGF0IiwicmVmZXRjaENoYXRzIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiaGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl9yZWYkYWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzTmF2QWN0aXZlIiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY2hhdE1lbnVTdGF0ZSIsInNldENoYXRNZW51U3RhdGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5Iiwic2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkiLCJfdXNlU3RhdGU3IiwiY2xpZW50cyIsInByb2plY3RzIiwiYWdlbnRzQnlDb21wYW55IiwiX3VzZVN0YXRlOCIsImNvbGxhcHNlZFNlY3Rpb25zIiwic2V0Q29sbGFwc2VkU2VjdGlvbnMiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsInNpZGViYXJTY3JvbGxSZWYiLCJ1c2VyIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwiaGFzTW9yZUNoYXRzIiwibG9hZE1vcmVDaGF0cyIsImlzTG9hZGluZ01vcmVDaGF0cyIsInNlc3Npb25zR3JvdXBIYXNNb3JlIiwic2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW4iLCJsZW5ndGgiLCJzaG93U2lkZWJhckVycm9yRm9vdGVyQmFubmVyIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGVBZ2VudHMiLCJjcmVhdGUiLCJjYW5WaWV3QWdlbnRzIiwidmlldyIsInNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24iLCJ3aW5kb3ciLCJNQUlBX01BUktFVFBMQUNFX01BSUFLRVIiLCJhZ2VudE5hdkJ1dHRvbkNvdW50Iiwic2hvd0FnZW50c05hdkJsb2NrIiwiZ3JvdXBlZENoYXRzIiwic2lkZWJhclNlY3Rpb25zIiwia2V5IiwiX3VzZXIkY29tcGFueSIsImNvbXBhbnlOYW1lIiwiY29tcGFueSIsInRyaW0iLCJleHBhbmRlZFNlY3Rpb24iLCJmaW5kIiwic2VjdGlvbiIsImN1cnJlbnQiLCJoYW5kbGVEZWxldGVDaGF0IiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInNlc3Npb25FeHRlcm5hbElkIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVVcGRhdGVDaGF0IiwiaGFuZGxlT3BlbkNoYXRNZW51IiwiY2hhdElkIiwic3VyZmFjZSIsImhhbmRsZUNsb3NlQ2hhdE1lbnUiLCJoYW5kbGVPcGVuU2VjdGlvbk1vZGFsIiwiX3JlZjMiLCJfY2FsbGVlMiIsInNlY3Rpb25LZXkiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwic3RvcmVMaW1pdCIsIl9jb250ZXh0MiIsImxpbWl0Iiwib2Zmc2V0Iiwic2hvd0dsb2JhbExvYWRlciIsIl94MiIsImhhbmRsZUNsb3NlU2VjdGlvbk1vZGFsIiwiaGFuZGxlVG9nZ2xlU2VjdGlvbkNvbGxhcHNlIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZVNlbGVjdENvbnZlcnNhdGlvbiIsImNoYXREYXRhIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVRvZ2dsZVNpZGViYXIiLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnQiLCJfcmVmNCIsIl9jYWxsZWUzIiwicmVzcG9uc2UiLCJkYXRhIiwibWFpYWtlckFnZW50IiwiX2NvbnRleHQzIiwicGF0aCIsImNvbmNhdCIsImxhbmd1YWdlIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJ0eXBlIiwiZW50aXR5IiwiYWJydXB0IiwiaGFuZGxlTmV3Q2hhdCIsIl9yZWY1IiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJoYW5kbGVSZWZldGNoU2Vzc2lvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjaGlsZHJlbiIsInRpdGxlIiwib25DbGljayIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJyZWYiLCJhaUNoYXRNcE9wZW4iLCIkYWN0aXZlIiwic2l6ZSIsIiRoYXNDaGF0cyIsIiRvZmZzZXRWYXJpYW50IiwiJGFnZW50TmF2QnV0dG9uQ291bnQiLCIkZmlsbEhlaWdodCIsIm1hcCIsImNvbGxhcHNlZCIsIm9uVG9nZ2xlQ29sbGFwc2UiLCJvbk9wZW5Nb3JlIiwib25PcGVuQ2hhdE1lbnUiLCJvbkNsb3NlQ2hhdE1lbnUiLCJzZWxlY3RlZENoYXRTZXNzaW9uRXh0ZXJuYWxJZCIsIiRqdXN0aWZ5QmV0d2VlbiIsImluaXRpYWwiLCJvcGFjaXR5IiwiYW5pbWF0ZSIsImV4aXQiLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJlYXNlIiwib25DbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9TaWRlYmFyL1NpZGViYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBNdXRhYmxlUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSB9IGZyb20gJ2ZyYW1lci1tb3Rpb24nXG5pbXBvcnQgeyBDaGV2cm9uRG91YmxlTGVmdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3VibGVMZWZ0J1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7IEVtcHR5SGlzdG9yeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FbXB0eUhpc3RvcnknXG5pbXBvcnQgeyB1c2VDaGF0cyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRXJyb3JTdGF0ZSwgTWFpYVN0b3JlSWNvbiwgTXlBZ2VudHNOYXZJY29uLCBOZXdDaGF0IH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IEVycm9ySWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0Vycm9ySWNvbidcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgT25ib2FyZGluZ01vZGFsQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvT25ib2FyZGluZ01vZGFsQnV0dG9uJ1xuaW1wb3J0IHsgRmVlZGJhY2tCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9GZWVkYmFja0J1dHRvbidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IFNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24sIFNDU1dyYXBwZXJOZXdDaGF0SWNvbiB9IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5pbXBvcnQge1xuICBTQ1NTaWRlYmFyUm9vdCxcbiAgU0NTU2lkZWJhclRvb2xiYXIsXG4gIFNDU1NpZGViYXJCb2R5LFxuICBTQ1NTaWRlYmFyT3BlblBhbmVsLFxuICBTQ1NTaWRlYmFyQWdlbnRzQmxvY2ssXG4gIFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbixcbiAgU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCxcbiAgU0NTU2lkZWJhckNoYXRzU2Nyb2xsLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbixcbiAgU0NTU2lkZWJhckVycm9yU3RhdGVUb3AsXG4gIFNDU1NpZGViYXJFcnJvckJhbm5lcixcbiAgU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAsXG4gIFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2UsXG4gIFNDU1NpZGViYXJMb2FkaW5nQXJlYSxcbiAgU0NTU2lkZWJhckxvYWRNb3JlUm93LFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0cyxcbiAgU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0LFxuICBTQ1NTaWRlYmFyQ2hhdHNGb290ZXIsXG4gIFNDU1NpZGViYXJGb290ZXJBY3Rpb25zLFxufSBmcm9tICcuL1NpZGViYXIubGF5b3V0LnN0eWxlcydcbmltcG9ydCB7IFNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvbiB9IGZyb20gJy4vU2lkZWJhckNoYXRzLnN0eWxlcydcbmltcG9ydCB7IFNpZGViYXJDaGF0c1NlY3Rpb24gfSBmcm9tICcuL1NpZGViYXJDaGF0c1NlY3Rpb24nXG5pbXBvcnQgeyBTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWwgfSBmcm9tICcuL1NpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCdcbmltcG9ydCB7IGJ1aWxkU2lkZWJhclNlY3Rpb25zLCBncm91cENoYXRzQnlTaWRlYmFyU2VjdGlvbiB9IGZyb20gJy4vc2lkZWJhckNoYXRzLmhlbHBlcnMnXG5pbXBvcnQgdHlwZSB7IFNpZGViYXJDaGF0TWVudVN1cmZhY2UsIFNpZGViYXJDaGF0TWVudVN0YXRlLCBTaWRlYmFyU2VjdGlvbktleSB9IGZyb20gJy4vc2lkZWJhckNoYXRzLnR5cGVzJ1xuaW1wb3J0IHsgU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVMgfSBmcm9tICcuL3NpZGViYXJDaGF0cy50eXBlcydcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQsIFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxuICBhZ2VudHNOYXZBY3RpdmUgPSBudWxsLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2U6ICgpID0+IHZvaWRcbiAgc2hvd05ld0NoYXQ6IGJvb2xlYW5cbiAgcmVmZXRjaENoYXRzOiBib29sZWFuXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0czogKHJlZmV0Y2g6IGJvb2xlYW4pID0+IHZvaWRcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgcmVzZXRTZWxlY3RlZENoYXRSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PCgoKSA9PiB2b2lkKSB8IG51bGw+XG4gIC8qKiBSZXNhbHRhIE1haWFrZXIgbyBNaXMgYWdlbnRlcyAqL1xuICBhZ2VudHNOYXZBY3RpdmU/OiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgbnVsbFxufSkgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2NoYXRNZW51U3RhdGUsIHNldENoYXRNZW51U3RhdGVdID0gdXNlU3RhdGU8U2lkZWJhckNoYXRNZW51U3RhdGU+KG51bGwpXG4gIGNvbnN0IFtleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSwgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXldID0gdXNlU3RhdGU8U2lkZWJhclNlY3Rpb25LZXkgfCBudWxsPihudWxsKVxuICBjb25zdCBbY29sbGFwc2VkU2VjdGlvbnMsIHNldENvbGxhcHNlZFNlY3Rpb25zXSA9IHVzZVN0YXRlPFJlY29yZDxTaWRlYmFyU2VjdGlvbktleSwgYm9vbGVhbj4+KHtcbiAgICBjbGllbnRzOiBmYWxzZSxcbiAgICBwcm9qZWN0czogZmFsc2UsXG4gICAgYWdlbnRzQnlDb21wYW55OiBmYWxzZSxcbiAgfSlcbiAgY29uc3QgW3NlbGVjdGVkQ2hhdCwgc2V0U2VsZWN0ZWRDaGF0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNoYXRzRmV0Y2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2lkZWJhclNjcm9sbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgaGFzTW9yZUNoYXRzLFxuICAgIGxvYWRNb3JlQ2hhdHMsXG4gICAgaXNMb2FkaW5nTW9yZUNoYXRzLFxuICAgIHNlc3Npb25zR3JvdXBIYXNNb3JlLFxuICB9ID0gdXNlQ2hhdHMoe1xuICAgIG9uRXJyb3IsXG4gIH0pXG5cbiAgY29uc3Qgc2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW4gPSBoYXNFcnJvciAmJiAhY2hhdHMubGVuZ3RoXG4gIGNvbnN0IHNob3dTaWRlYmFyRXJyb3JGb290ZXJCYW5uZXIgPSBoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPiAwXG5cbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBjYW5DcmVhdGVBZ2VudHMgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlXG4gIGNvbnN0IGNhblZpZXdBZ2VudHMgPSAhIXVzZXJQZXJtaXNzaW9ucz8udmlld1xuICBjb25zdCBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID0gISFjYW5DcmVhdGVBZ2VudHMgJiYgISF3aW5kb3cuTUFJQV9NQVJLRVRQTEFDRV9NQUlBS0VSXG4gIGNvbnN0IGFnZW50TmF2QnV0dG9uQ291bnQgPSAoKHNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAxIDogMCkgKyAoY2FuVmlld0FnZW50cyA/IDEgOiAwKSkgYXMgMCB8IDEgfCAyXG4gIGNvbnN0IHNob3dBZ2VudHNOYXZCbG9jayA9IHNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gfHwgY2FuVmlld0FnZW50c1xuXG4gIGNvbnN0IGdyb3VwZWRDaGF0cyA9IHVzZU1lbW8oKCkgPT4gZ3JvdXBDaGF0c0J5U2lkZWJhclNlY3Rpb24oY2hhdHMpLCBbY2hhdHNdKVxuXG4gIGNvbnN0IHNpZGViYXJTZWN0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGJ1aWxkU2lkZWJhclNlY3Rpb25zKFxuICAgICAgICBncm91cGVkQ2hhdHMsXG4gICAgICAgIGtleSA9PlxuICAgICAgICAgIGtleSA9PT0gJ2FnZW50c0J5Q29tcGFueSdcbiAgICAgICAgICAgID8gdChTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZU1trZXldLCB7IGNvbXBhbnlOYW1lOiB1c2VyLmNvbXBhbnk/LnRyaW0oKSB8fCAn4oCUJyB9KVxuICAgICAgICAgICAgOiB0KFNJREVCQVJfU0VDVElPTl9UUkFOU0xBVElPTl9LRVlTW2tleV0pLFxuICAgICAgICBzZXNzaW9uc0dyb3VwSGFzTW9yZVxuICAgICAgKSxcbiAgICBbZ3JvdXBlZENoYXRzLCB0LCB1c2VyLmNvbXBhbnksIHNlc3Npb25zR3JvdXBIYXNNb3JlXVxuICApXG5cbiAgY29uc3QgZXhwYW5kZWRTZWN0aW9uID0gZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXlcbiAgICA/IHNpZGViYXJTZWN0aW9ucy5maW5kKHNlY3Rpb24gPT4gc2VjdGlvbi5rZXkgPT09IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KSB8fCBudWxsXG4gICAgOiBudWxsXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSAoKSA9PiBzZXRTZWxlY3RlZENoYXQobnVsbClcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgW3Jlc2V0U2VsZWN0ZWRDaGF0UmVmXSlcblxuICBjb25zdCBoYW5kbGVEZWxldGVDaGF0ID0gYXN5bmMgKGNoYXQ6IGFueSkgPT4ge1xuICAgIGRlbGV0ZUNoYXQoY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlbkNoYXRNZW51ID0gKGNoYXRJZDogc3RyaW5nLCBzdXJmYWNlOiBTaWRlYmFyQ2hhdE1lbnVTdXJmYWNlKSA9PiB7XG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShwcmV2ID0+IChwcmV2Py5jaGF0SWQgPT09IGNoYXRJZCAmJiBwcmV2Py5zdXJmYWNlID09PSBzdXJmYWNlID8gbnVsbCA6IHsgY2hhdElkLCBzdXJmYWNlIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VDaGF0TWVudSA9ICgpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuU2VjdGlvbk1vZGFsID0gYXN5bmMgKHNlY3Rpb25LZXk6IFNpZGViYXJTZWN0aW9uS2V5KSA9PiB7XG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIGNvbnN0IHsgbGltaXQ6IHN0b3JlTGltaXQgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgaWYgKHN0b3JlTGltaXQgPT09IFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCkge1xuICAgICAgYXdhaXQgZmV0Y2hDaGF0cyh7XG4gICAgICAgIGxpbWl0OiBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgc2hvd0dsb2JhbExvYWRlcjogZmFsc2UsXG4gICAgICB9KVxuICAgIH1cbiAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShzZWN0aW9uS2V5KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VTZWN0aW9uTW9kYWwgPSAoKSA9PiB7XG4gICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkobnVsbClcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVUb2dnbGVTZWN0aW9uQ29sbGFwc2UgPSAoc2VjdGlvbktleTogU2lkZWJhclNlY3Rpb25LZXkpID0+IHtcbiAgICBzZXRDb2xsYXBzZWRTZWN0aW9ucyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW3NlY3Rpb25LZXldOiAhcHJldltzZWN0aW9uS2V5XSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdENvbnZlcnNhdGlvbiA9IChjaGF0RGF0YTogYW55KSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRDaGF0KGNoYXREYXRhLnNlc3Npb25FeHRlcm5hbElkKVxuICAgIG9uR29Ub0NoYXQoY2hhdERhdGEpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnRcbiAgICAgIGlmIChjaGF0TWVudVN0YXRlICYmICF0YXJnZXQuY2xvc2VzdCgnW2RhdGEtbW9kYWwtY29udGFpbmVyXScpKSB7XG4gICAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNlY3Rpb24tbW9kYWwtY29udGFpbmVyXScpKSB7XG4gICAgICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KG51bGwpXG4gICAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhdE1lbnVTdGF0ZSB8fCBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbY2hhdE1lbnVTdGF0ZSwgZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXldKVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVNpZGViYXIgPSAoKSA9PiB7XG4gICAgaWYgKGNoYXRNZW51U3RhdGUpIHtcbiAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICB9XG4gICAgaWYgKGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KSB7XG4gICAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShudWxsKVxuICAgIH1cbiAgICBzZXRJc09wZW4ocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5DcmVhdGVBZ2VudCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSlcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgY29uc3QgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYWdlbnQ6IGFueSkgPT4gYWdlbnQudHlwZSA9PT0gJ2Nsb25lJyAmJiBhZ2VudC5lbnRpdHkgPT09ICdnbG9iYWwnKVxuXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgIWNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULCBvZmZzZXQ6IDAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmZXRjaENoYXRzKSB7XG4gICAgICBmZXRjaENoYXRzKHsgbGltaXQ6IFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCwgb2Zmc2V0OiAwIH0pXG4gICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNPcGVuLCByZWZldGNoQ2hhdHMsIGhhbmRsZVNldFJlZmV0Y2hDaGF0cywgZmV0Y2hDaGF0c10pXG5cbiAgLyoqIEVsIHNjcm9sbCBpbmZpbml0byBkZSBzZXNpb25lcyB2aXZlIHNvbG8gZW4gZWwgbW9kYWwgZGUgc2VjY2nDs24gKGBTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWxgKS4gKi9cblxuICBjb25zdCBoYW5kbGVOZXdDaGF0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjaGF0TWVudVN0YXRlKSB7XG4gICAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgfVxuICAgIHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIGF3YWl0IGZldGNoQ2hhdHMoe1xuICAgICAgbGltaXQ6IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5ID8gU0VDVElPTl9NT0RBTF9TRVNTSU9OU19QQUdFX0xJTUlUIDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH0pXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZldGNoU2Vzc2lvbiA9ICgpID0+IHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULCBvZmZzZXQ6IDAgfSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlZmV0Y2gtc2Vzc2lvbicsIGhhbmRsZVJlZmV0Y2hTZXNzaW9uKVxuICAgIH1cbiAgfSwgW2ZldGNoQ2hhdHNdKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0QnV0dG9uID1cbiAgICAhc2hvd05ld0NoYXQgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZ0NoYXRzICYmXG4gICAgKCh1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSB8fFxuICAgICAgKCF1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSlcblxuICByZXR1cm4gKFxuICAgIDxTQ1NTaWRlYmFyUm9vdCAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgPFNDU1NpZGViYXJUb29sYmFyICRpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc09wZW4gPyB0KCdjb252ZXJzYXRpb25zLmNvbGxhcHNlJykgOiB0KCdjb252ZXJzYXRpb25zLmV4cGFuZCcpfT5cbiAgICAgICAgICA8U0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVUb2dnbGVTaWRlYmFyfSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgICAgICA8Q2hldnJvbkRvdWJsZUxlZnQgY29sb3I9XCIjNEQ0RDREXCIgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgIDwvU0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbj5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICB7c2hvd05ld0NoYXRCdXR0b24gPyAoXG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NvbnZlcnNhdGlvbnMubmV3Q2hhdCcpfT5cbiAgICAgICAgICAgIDxTQ1NXcmFwcGVyTmV3Q2hhdEljb24gb25DbGljaz17aGFuZGxlTmV3Q2hhdH0+XG4gICAgICAgICAgICAgIDxOZXdDaGF0IHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gY29sb3I9XCIjNEQ0RDREXCIgLz5cbiAgICAgICAgICAgIDwvU0NTV3JhcHBlck5ld0NoYXRJY29uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDU1NpZGViYXJUb29sYmFyPlxuICAgICAgPFNDU1NpZGViYXJCb2R5ICRpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpc09wZW4gPyAoXG4gICAgICAgICAgPFNDU1NpZGViYXJPcGVuUGFuZWwgcmVmPXtzaWRlYmFyU2Nyb2xsUmVmfT5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQmxvY2s+XG4gICAgICAgICAgICAgIHtzaG93QWdlbnRzTmF2QmxvY2sgPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRNcE9wZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQoKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17YWdlbnRzTmF2QWN0aXZlID09PSAnbWFpYWtlcid9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD57dCgnY29udmVyc2F0aW9ucy5tYWlha2VyTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7Y2FuVmlld0FnZW50cyA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJ31cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxNeUFnZW50c05hdkljb24gc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubXlBZ2VudHNOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b24+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJBZ2VudHNBY3Rpb25zPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDAgJiYgIXNob3dGdWxsU2lkZWJhckVycm9yQ29sdW1ufVxuICAgICAgICAgICAgICAkb2Zmc2V0VmFyaWFudD17aGFzRXJyb3IgPyAnZXJyb3InIDogJ2RlZmF1bHQnfVxuICAgICAgICAgICAgICAkYWdlbnROYXZCdXR0b25Db3VudD17YWdlbnROYXZCdXR0b25Db3VudH1cbiAgICAgICAgICAgICAgJGZpbGxIZWlnaHQ9e3Nob3dGdWxsU2lkZWJhckVycm9yQ29sdW1ufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW4gPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcD5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgICA8RXJyb3JJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPnt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9PC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgICAgKSA6IGxvYWRpbmdDaGF0cyA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckxvYWRpbmdBcmVhPlxuICAgICAgICAgICAgICAgICAgPExvYWRlciAvPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRpbmdBcmVhPlxuICAgICAgICAgICAgICApIDogY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7c2lkZWJhclNlY3Rpb25zLm1hcChzZWN0aW9uID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFNpZGViYXJDaGF0c1NlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BjaGF0LXNlY3Rpb24tJHtzZWN0aW9uLmtleX1gfVxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb249e3NlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWRTZWN0aW9uc1tzZWN0aW9uLmtleV19XG4gICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGVDb2xsYXBzZT17KCkgPT4gaGFuZGxlVG9nZ2xlU2VjdGlvbkNvbGxhcHNlKHNlY3Rpb24ua2V5KX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk9wZW5Nb3JlPXsoKSA9PiBoYW5kbGVPcGVuU2VjdGlvbk1vZGFsKHNlY3Rpb24ua2V5KX1cbiAgICAgICAgICAgICAgICAgICAgICBjaGF0TWVudVN0YXRlPXtjaGF0TWVudVN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uT3BlbkNoYXRNZW51PXtoYW5kbGVPcGVuQ2hhdE1lbnV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbG9zZUNoYXRNZW51PXtoYW5kbGVDbG9zZUNoYXRNZW51fVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURlbGV0ZUNoYXQ9e2hhbmRsZURlbGV0ZUNoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdD17aGFuZGxlVXBkYXRlQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoYXRTZXNzaW9uRXh0ZXJuYWxJZD17c2VsZWN0ZWRDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uR29Ub0NoYXQ9e2hhbmRsZVNlbGVjdENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmVDaGF0cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZE1vcmVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5SGlzdG9yeUljb24gLz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQ+e3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX08L1NDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQ2hhdHNTY3JvbGw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgICAgICB7c2hvd1NpZGViYXJFcnJvckZvb3RlckJhbm5lciA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICA8RXJyb3JJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQ2hhdHNGb290ZXI+XG4gICAgICAgICAgPC9TQ1NTaWRlYmFyT3BlblBhbmVsPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPFNDU1NpZGViYXJGb290ZXJBY3Rpb25zICRpc09wZW49e2lzT3Blbn0gJGp1c3RpZnlCZXR3ZWVuPXshIXNlbGVjdGVkQWdlbnR9PlxuICAgICAgICAgIHtzZWxlY3RlZEFnZW50ID8gPEZlZWRiYWNrQnV0dG9uIHNlbGVjdGVkQWdlbnQ9e3NlbGVjdGVkQWdlbnR9IGlzT3Blbj17aXNPcGVufSAvPiA6IG51bGx9XG4gICAgICAgICAgPE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiAvPlxuICAgICAgICA8L1NDU1NpZGViYXJGb290ZXJBY3Rpb25zPlxuICAgICAgPC9TQ1NTaWRlYmFyQm9keT5cbiAgICAgIDxBbmltYXRlUHJlc2VuY2U+XG4gICAgICAgIHtleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSAmJiBleHBhbmRlZFNlY3Rpb24gPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyU2VjdGlvbk1vZGFsQmFja2Ryb3BNb3Rpb25cbiAgICAgICAgICAgICAga2V5PVwic2lkZWJhci1zZWN0aW9uLWNoYXQtYmFja2Ryb3BcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjIsIGVhc2U6ICdlYXNlT3V0JyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWxcbiAgICAgICAgICAgICAga2V5PXtleHBhbmRlZFNlY3Rpb25Nb2RhbEtleX1cbiAgICAgICAgICAgICAgc2VjdGlvbj17ZXhwYW5kZWRTZWN0aW9ufVxuICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbH1cbiAgICAgICAgICAgICAgY2hhdE1lbnVTdGF0ZT17Y2hhdE1lbnVTdGF0ZX1cbiAgICAgICAgICAgICAgb25PcGVuQ2hhdE1lbnU9e2hhbmRsZU9wZW5DaGF0TWVudX1cbiAgICAgICAgICAgICAgb25DbG9zZUNoYXRNZW51PXtoYW5kbGVDbG9zZUNoYXRNZW51fVxuICAgICAgICAgICAgICBoYW5kbGVEZWxldGVDaGF0PXtoYW5kbGVEZWxldGVDaGF0fVxuICAgICAgICAgICAgICBoYW5kbGVVcGRhdGVDaGF0PXtoYW5kbGVVcGRhdGVDaGF0fVxuICAgICAgICAgICAgICBzZWxlY3RlZENoYXRTZXNzaW9uRXh0ZXJuYWxJZD17c2VsZWN0ZWRDaGF0fVxuICAgICAgICAgICAgICBvbkdvVG9DaGF0PXtoYW5kbGVTZWxlY3RDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGhhc01vcmVDaGF0cz17aGFzTW9yZUNoYXRzfVxuICAgICAgICAgICAgICBsb2FkTW9yZUNoYXRzPXtsb2FkTW9yZUNoYXRzfVxuICAgICAgICAgICAgICBpc0xvYWRpbmdNb3JlQ2hhdHM9e2lzTG9hZGluZ01vcmVDaGF0c31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgPC9TQ1NTaWRlYmFyUm9vdD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUEyQkEsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDOUUsU0FBU0MsZUFBZSxRQUFRLGVBQWU7QUFDL0MsU0FBU0MsaUJBQWlCLFFBQVEsb0RBQW9EO0FBRXRGLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FBU0MsZ0JBQWdCLFFBQVEsZ0NBQWdDO0FBQ2pFLFNBQVNDLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLFFBQVEsbUJBQW1CO0FBQ3ZGLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLFNBQVMsUUFBUSw2QkFBNkI7QUFDdkQsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxxQkFBcUIsUUFBUSxtQ0FBbUM7QUFDekUsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUMzRCxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsU0FBUyxRQUFRLCtCQUErQjtBQUN6RCxTQUFT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
558
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25Eb3VibGVMZWZ0IiwiQ1VCdXR0b24iLCJNZW51RG90cyIsIlBlbmNpbCIsIlRyYXNoIiwiVG9vbHRpcCIsIkVtcHR5SGlzdG9yeUljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsInVzZUNoYXRzIiwiTG9hZGVyIiwiRXJyb3JTdGF0ZSIsIk1BSUFJY29uIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJPcHRpb25JdGVtIiwiRWRpdFF1ZXN0aW9uTW9kYWwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiRXJyb3JJY29uIiwidXNlVXNlciIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIkZlZWRiYWNrQnV0dG9uIiwidXNlR2xvYmFsQ29udGV4dCIsImZldGNoTWFpYSIsIm1hcENPUkxhbmciLCJTQ0xIQ1dyYXBwZXIiLCJTQ0xIQ1dyYXBwZXJBZ2VudCIsIlNDTEhDV3JhcHBlckFnZW50VGV4dCIsIlNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMiLCJTQ0xIQ1dyYXBwZXJDb250ZW50IiwiU0NMSENXcmFwcGVyVGl0bGUiLCJTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIiwiU0NTV3JhcHBlck5ld0NoYXRJY29uIiwiU0NTU2lkZWJhclJvb3QiLCJTQ1NTaWRlYmFyVG9vbGJhciIsIlNDU1NpZGViYXJCb2R5IiwiU0NTU2lkZWJhck9wZW5QYW5lbCIsIlNDU1NpZGViYXJBZ2VudHNCbG9jayIsIlNDU1NpZGViYXJBZ2VudHNIZWFkaW5nIiwiU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0IiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmciLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImFjdGlvbnMiLCJlZGl0IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiZGVsZXRlIiwiYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZSIsImFnZW50TmFtZSIsInJlcGxhY2UiLCJMaXN0SGlzdG9yeUNoYXQiLCJfcmVmIiwiY2hhdCIsIm9uQ2xpY2siLCJpc01vZGFsT3BlbiIsIm9uT3Blbk1vZGFsIiwib25DbG9zZU1vZGFsIiwiaGFuZGxlcnMiLCJpc1NlbGVjdGVkIiwidGV4dFJlZiIsImFnZW50UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwidGl0bGUiLCJzaG93VG9vbHRpcCIsIl91c2VSZXNpemVMaXN0ZW5lcjIiLCJhZ2VudCIsInNob3dUb29sdGlwQWdlbnQiLCJfdXNlVCIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3Rpb24iLCJzZXRBY3Rpb24iLCJtZW51SXRlbXMiLCJsYWJlbCIsIm9uQ2xpY2tJdGVtIiwiY2hhdElkIiwiSWNvbiIsImV2ZW50S2V5IiwicG1BaU1lbnVFZGl0IiwicG1BaU1lbnVEZWxldGUiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiY2hhdERhdGEiLCJoYW5kbGVVcGRhdGVDaGF0IiwiaGFuZGxlRGVsZXRlQ2hhdCIsImNoaWxkcmVuIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInJlZiIsInByb2plY3ROYW1lIiwiY29uY2F0IiwiYWdlbnRUeXBlIiwid2lkdGgiLCJoZWlnaHQiLCJzdHlsZSIsImZvbnRTaXplIiwiZW1vamkiLCJpY29uT25seSIsInNpemUiLCJ2YXJpYW50IiwiZXZlbnQiLCJpZCIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ6SW5kZXgiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsIm1pbldpZHRoIiwibWFwIiwiX3JlZjIiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsIm9uQ2xvc2UiLCJoYW5kbGVTZXRJc09wZW5Nb2RhbCIsIlNpZGViYXIiLCJfcmVmMyIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYzJG9uRXJyb3IiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJzaG93TmV3Q2hhdCIsInJlZmV0Y2hDaGF0cyIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJfcmVmMyRhZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNOYXZBY3RpdmUiLCJfdXNlVDIiLCJpMThuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwiX3VzZUNoYXRzIiwibG9hZGluZ0NoYXRzIiwiY2hhdHMiLCJkZWxldGVDaGF0IiwidXBkYXRlQ2hhdCIsImZldGNoQ2hhdHMiLCJsaW1pdCIsIm9mZnNldCIsImhhc01vcmVDaGF0cyIsImxvYWRNb3JlQ2hhdHMiLCJpc0xvYWRpbmdNb3JlQ2hhdHMiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50cyIsImNyZWF0ZSIsImNhblZpZXdBZ2VudHMiLCJ2aWV3Iiwic2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiIsIndpbmRvdyIsIk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUiIsImFnZW50TmF2QnV0dG9uQ291bnQiLCJzaG93QWdlbnRzTmF2QmxvY2siLCJjdXJyZW50IiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVPcGVuTW9kYWwiLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50IiwiX3JlZjUiLCJfY2FsbGVlMiIsInJlc3BvbnNlIiwiZGF0YSIsIm1haWFrZXJBZ2VudCIsIl9jb250ZXh0MiIsInBhdGgiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiZmluZCIsInR5cGUiLCJlbnRpdHkiLCJhYnJ1cHQiLCJoYW5kbGVTY3JvbGwiLCJfY2hhdHNDb250YWluZXJSZWYkY3UiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc0F0Qm90dG9tIiwiY29udGFpbmVyIiwiaGFuZGxlTmV3Q2hhdCIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVSZWZldGNoU2Vzc2lvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjb2xvciIsImFpQ2hhdE1wT3BlbiIsIiRhY3RpdmUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwiJGp1c3RpZnlCZXR3ZWVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvdWJsZUxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG91YmxlTGVmdCdcbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IFBlbmNpbCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BlbmNpbCdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZVJlc2l6ZUxpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVzaXplJ1xuaW1wb3J0IHsgdXNlQ2hhdHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0cydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEVycm9yU3RhdGUsIE1BSUFJY29uLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgT3B0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2F0b21zL0NhcmRNZW51L0NhcmRNZW51J1xuaW1wb3J0IHsgRWRpdFF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRWRpdFF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBFcnJvckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FcnJvckljb24nXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL09uYm9hcmRpbmdNb2RhbEJ1dHRvbidcbmltcG9ydCB7IEZlZWRiYWNrQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmVlZGJhY2tCdXR0b24nXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uLFxuICBTQ1NXcmFwcGVyTmV3Q2hhdEljb24sXG59IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5pbXBvcnQge1xuICBTQ1NTaWRlYmFyUm9vdCxcbiAgU0NTU2lkZWJhclRvb2xiYXIsXG4gIFNDU1NpZGViYXJCb2R5LFxuICBTQ1NTaWRlYmFyT3BlblBhbmVsLFxuICBTQ1NTaWRlYmFyQWdlbnRzQmxvY2ssXG4gIFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQWdlbnRzSGVhZGluZ1RleHQsXG4gIFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbixcbiAgU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCxcbiAgU0NTU2lkZWJhckNvbnZlcnNhdGlvbnNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuXG5jb25zdCBhY3Rpb25zID0ge1xuICBlZGl0OiAocHJvcHM6IGFueSkgPT4gPEVkaXRRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG4gIGRlbGV0ZTogKHByb3BzOiBhbnkpID0+IDxEZWxldGVRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG59XG5cbi8qKiBBYnJldmlhIFwiZXNwZWNpYWxpc3RhXCIvXCJlc3BlY2lhbGlzdFwiIOKGkiBcIkVzcC5cIiAoRVMvUFQpIHkgXCJzcGVjaWFsaXN0XCIg4oaSIFwiU3BlYy5cIiAoRU4pIGVuIGVsIG5vbWJyZSBkZWwgYWdlbnRlLiAqL1xuZnVuY3Rpb24gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShhZ2VudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghYWdlbnROYW1lIHx8IHR5cGVvZiBhZ2VudE5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gYWdlbnROYW1lXG4gIHJldHVybiBhZ2VudE5hbWUucmVwbGFjZSgvXFxiKGVzcGVjaWFsaXN0YXxlc3BlY2lhbGlzdClcXGIvZ2ksICdFc3AuJykucmVwbGFjZSgvXFxic3BlY2lhbGlzdFxcYi9naSwgJ1NwZWMuJylcbn1cblxuY29uc3QgTGlzdEhpc3RvcnlDaGF0ID0gKHtcbiAgY2hhdCxcbiAgb25DbGljayxcbiAgaXNNb2RhbE9wZW4sXG4gIG9uT3Blbk1vZGFsLFxuICBvbkNsb3NlTW9kYWwsXG4gIGhhbmRsZXJzLFxuICBpc1NlbGVjdGVkLFxufToge1xuICBjaGF0OiBhbnlcbiAgb25DbGljazogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICBpc01vZGFsT3BlbjogYm9vbGVhblxuICBvbk9wZW5Nb2RhbDogKGNoYXRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uQ2xvc2VNb2RhbDogKCkgPT4gdm9pZFxuICBoYW5kbGVyczoge1xuICAgIGhhbmRsZURlbGV0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgICBoYW5kbGVVcGRhdGVDaGF0OiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIH1cbiAgaXNTZWxlY3RlZDogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBhZ2VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2NoYXQudGl0bGVdKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcihhZ2VudFJlZiwgW2NoYXQuYWdlbnRdKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBbYWN0aW9uLCBzZXRBY3Rpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBtZW51SXRlbXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5yZW5hbWUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdlZGl0JylcbiAgICAgICAgb25PcGVuTW9kYWwoY2hhdElkKVxuICAgICAgfSxcbiAgICAgIEljb246IFBlbmNpbCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVFZGl0LFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5kZWxldGUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdkZWxldGUnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogVHJhc2gsXG4gICAgICBldmVudEtleTogRVZFTlRTLnBtQWlNZW51RGVsZXRlLFxuICAgIH0sXG4gIF1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZVVwZGF0ZUNoYXQoY2hhdERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZURlbGV0ZUNoYXQoY2hhdERhdGEpXG4gICAgfVxuICAgIHNldEFjdGlvbihudWxsKVxuICAgIG9uQ2xvc2VNb2RhbCgpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U0NMSENXcmFwcGVyQ29udGVudFxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgb25DbGljayhjaGF0KVxuICAgICAgICB9fVxuICAgICAgICBrZXk9e2Bjb252ZXJzYXRpb24tJHtjaGF0LnNlc3Npb25FeHRlcm5hbElkfWB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc01vZGFsT3Blbn1cbiAgICAgICAgaXNTZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgID5cbiAgICAgICAgPFNDTEhDV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXAgPyBjaGF0LnRpdGxlIDogJyd9PlxuICAgICAgICAgICAgPFNDTEhDV3JhcHBlclRpdGxlIHJlZj17dGV4dFJlZn0+e2NoYXQudGl0bGUgfHwgdCgnY29udmVyc2F0aW9ucy5lbXB0eUxhYmVsJyl9PC9TQ0xIQ1dyYXBwZXJUaXRsZT5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3dUb29sdGlwQWdlbnQgPyBjaGF0LmFnZW50ICsgKGNoYXQucHJvamVjdE5hbWUgPyBgIC0gJHtjaGF0LnByb2plY3ROYW1lfWAgOiAnJykgOiAnJ30+XG4gICAgICAgICAgICA8U0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgICAgIHtjaGF0LmFnZW50VHlwZSA9PT0gJ2Nsb25lJyA/IChcbiAgICAgICAgICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcgfX0+e2NoYXQuZW1vaml9PC9zcGFuPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudFRleHQgcmVmPXthZ2VudFJlZn0+XG4gICAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnID8gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShjaGF0LmFnZW50KSA6IGNoYXQuYWdlbnR9XG4gICAgICAgICAgICAgICAge2NoYXQucHJvamVjdE5hbWUgJiYgYCAtICR7Y2hhdC5wcm9qZWN0TmFtZX1gfVxuICAgICAgICAgICAgICA8L1NDTEhDV3JhcHBlckFnZW50VGV4dD5cbiAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDTEhDV3JhcHBlcj5cbiAgICAgICAgPFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnM+XG4gICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICBpY29uT25seVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgb25PcGVuTW9kYWwoY2hhdC5pZClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVEb3RzIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIHtpc01vZGFsT3BlbiAmJiAhYWN0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS1tb2RhbC1jb250YWluZXJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0b3A6ICczMnB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMSknLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTI0cHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVudUl0ZW1zLm1hcCgoeyBsYWJlbCwgb25DbGlja0l0ZW0sIEljb24sIGV2ZW50S2V5IH0pID0+IChcbiAgICAgICAgICAgICAgICA8T3B0aW9uSXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2tJdGVtKGNoYXQuaWQpfVxuICAgICAgICAgICAgICAgICAgSWNvbj17SWNvbn1cbiAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtldmVudEtleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgIDwvU0NMSENXcmFwcGVyQ29udGVudD5cbiAgICAgIHshIWFjdGlvbiAmJlxuICAgICAgICBhY3Rpb25zW2FjdGlvbl0oe1xuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIG9uQ2xvc2VNb2RhbCgpXG4gICAgICAgICAgICBzZXRBY3Rpb24obnVsbClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYXQsXG4gICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb24sXG4gICAgICAgICAgICBoYW5kbGVTZXRJc09wZW5Nb2RhbDogb25DbG9zZU1vZGFsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxuICBhZ2VudHNOYXZBY3RpdmUgPSBudWxsLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2U6ICgpID0+IHZvaWRcbiAgc2hvd05ld0NoYXQ6IGJvb2xlYW5cbiAgcmVmZXRjaENoYXRzOiBib29sZWFuXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0czogKHJlZmV0Y2g6IGJvb2xlYW4pID0+IHZvaWRcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgcmVzZXRTZWxlY3RlZENoYXRSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PCgoKSA9PiB2b2lkKSB8IG51bGw+XG4gIC8qKiBSZXNhbHRhIE1haWFrZXIgbyBNaXMgYWdlbnRlcyAqL1xuICBhZ2VudHNOYXZBY3RpdmU/OiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgbnVsbFxufSkgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2lzT3Blbk1vZGFsLCBzZXRJc09wZW5Nb2RhbF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBjaGF0c0NvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgbGltaXQsXG4gICAgb2Zmc2V0LFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5WaWV3QWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LnZpZXdcbiAgY29uc3Qgc2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiA9ICEhY2FuQ3JlYXRlQWdlbnRzICYmICEhd2luZG93Lk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUlxuICBjb25zdCBhZ2VudE5hdkJ1dHRvbkNvdW50ID0gKChzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID8gMSA6IDApICsgKGNhblZpZXdBZ2VudHMgPyAxIDogMCkpIGFzIDAgfCAxIHwgMlxuICBjb25zdCBzaG93QWdlbnRzTmF2QmxvY2sgPSBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uIHx8IGNhblZpZXdBZ2VudHNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbCA9IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCAmJiBpc09wZW5Nb2RhbCAhPT0gY2hhdElkKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChjaGF0SWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChpc09wZW5Nb2RhbCAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzT3Blbk1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgIGNvbnN0IG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGFnZW50OiBhbnkpID0+IGFnZW50LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJylcblxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmICFjaGF0c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBmZXRjaENoYXRzKHsgbGltaXQsIG9mZnNldCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNPcGVuLCByZWZldGNoQ2hhdHMsIGhhbmRsZVNldFJlZmV0Y2hDaGF0c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnQgfHwgIWhhc01vcmVDaGF0cyB8fCBpc0xvYWRpbmdNb3JlQ2hhdHMgfHwgaGFzRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY2hhdHNDb250YWluZXJSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSAxMFxuXG4gICAgICBpZiAoaXNBdEJvdHRvbSkge1xuICAgICAgICBsb2FkTW9yZUNoYXRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hhc01vcmVDaGF0cywgaXNMb2FkaW5nTW9yZUNoYXRzLCBsb2FkTW9yZUNoYXRzLCBoYXNFcnJvcl0pXG5cbiAgY29uc3QgaGFuZGxlTmV3Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgfVxuICAgIHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIGF3YWl0IGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0OiAwIH0pXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZldGNoU2Vzc2lvbiA9ICgpID0+IHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogMjAsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdEJ1dHRvbiA9XG4gICAgIXNob3dOZXdDaGF0ICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmdDaGF0cyAmJlxuICAgICgodXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykgfHxcbiAgICAgICghdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTU2lkZWJhclJvb3QgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxTQ1NTaWRlYmFyVG9vbGJhciAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNPcGVuID8gdCgnY29udmVyc2F0aW9ucy5jb2xsYXBzZScpIDogdCgnY29udmVyc2F0aW9ucy5leHBhbmQnKX0+XG4gICAgICAgICAgPFNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24gb25DbGljaz17aGFuZGxlVG9nZ2xlU2lkZWJhcn0gaXNPcGVuPXtpc09wZW59PlxuICAgICAgICAgICAgPENoZXZyb25Eb3VibGVMZWZ0IGNvbG9yPVwicmdiYSgxMDIsIDEwMiwgMTAyLCAxKVwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L1NDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAge3Nob3dOZXdDaGF0QnV0dG9uID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm5ld0NoYXQnKX0+XG4gICAgICAgICAgICA8U0NTV3JhcHBlck5ld0NoYXRJY29uIG9uQ2xpY2s9e2hhbmRsZU5ld0NoYXR9PlxuICAgICAgICAgICAgICA8TmV3Q2hhdCB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ1NTaWRlYmFyVG9vbGJhcj5cbiAgICAgIDxTQ1NTaWRlYmFyQm9keSAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXNPcGVuID8gKFxuICAgICAgICAgIDxTQ1NTaWRlYmFyT3BlblBhbmVsPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmFnZW50c1NlY3Rpb25UaXRsZScpfTwvU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0PlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdE1wT3BlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkNyZWF0ZUFnZW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm1haWFrZXJOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtjYW5WaWV3QWdlbnRzID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cyd9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE15QWdlbnRzTmF2SWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm15QWdlbnRzTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmc+e3QoJ2NvbnZlcnNhdGlvbnMudGl0bGUnKX08L1NDU1NpZGViYXJDb252ZXJzYXRpb25zSGVhZGluZz5cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICByZWY9e2NoYXRzQ29udGFpbmVyUmVmfVxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtjaGF0cy5tYXAoY2hhdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpc3RIaXN0b3J5Q2hhdFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhdD17Y2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NoYXREYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3Blbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uR29Ub0NoYXQoY2hhdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2RhbE9wZW49e2lzT3Blbk1vZGFsID09PSBjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25PcGVuTW9kYWw9e2hhbmRsZU9wZW5Nb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VNb2RhbD17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURlbGV0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRDaGF0ID09PSBjaGF0LnNlc3Npb25FeHRlcm5hbElkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmVDaGF0cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZE1vcmVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5SGlzdG9yeUljb24gLz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQ+e3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX08L1NDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQ2hhdHNTY3JvbGw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c0Zvb3Rlcj5cbiAgICAgICAgICA8L1NDU1NpZGViYXJPcGVuUGFuZWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U0NTU2lkZWJhckZvb3RlckFjdGlvbnMgJGlzT3Blbj17aXNPcGVufSAkanVzdGlmeUJldHdlZW49eyEhc2VsZWN0ZWRBZ2VudH0+XG4gICAgICAgICAge3NlbGVjdGVkQWdlbnQgPyA8RmVlZGJhY2tCdXR0b24gc2VsZWN0ZWRBZ2VudD17c2VsZWN0ZWRBZ2VudH0gaXNPcGVuPXtpc09wZW59IC8+IDogbnVsbH1cbiAgICAgICAgICA8T25ib2FyZGluZ01vZGFsQnV0dG9uIC8+XG4gICAgICAgIDwvU0NTU2lkZWJhckZvb3RlckFjdGlvbnM+XG4gICAgICA8L1NDU1NpZGViYXJCb2R5PlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNyRSxTQUFTQyxpQkFBaUIsUUFBUSxvREFBb0Q7QUFDdEYsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFT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