@projectcor/maia-components 2.11.40-5 → 2.11.40-6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +22 -11
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +36 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +181 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +324 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +195 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +280 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +130 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +143 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +75 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +238 -321
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +269 -0
- package/lib/components/atoms/MAIAInput/styles.js +75 -46
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
- package/lib/components/atoms/icons/index.js +2 -1
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +31 -3
- package/lib/components/molecules/ChatAIMessages/newStyles.js +5 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +9 -71
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +68 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
- package/lib/components/organisms/ChatAI/ChatAI.js +4 -37
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
- package/lib/constants/config.js +3 -1
- package/lib/constants/taskLinkIcon.js +6 -0
- package/lib/context/cor-user.js +1 -1
- package/lib/context/global-context.js +1 -5
- package/lib/dev/DevContextMentionInput.js +65 -0
- package/lib/dev/Providers.js +11 -6
- package/lib/hooks/useCaretPosition.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +22 -24
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
- package/lib/hooks/useClientSearch.js +3 -2
- package/lib/hooks/useContextMentions.js +270 -0
- package/lib/hooks/useEntitySearch.js +690 -0
- package/lib/hooks/useEvent.js +6 -1
- package/lib/hooks/useMentionAllowedTypes.js +103 -0
- package/lib/hooks/useMentionPopover.js +327 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/hooks/useProjectSearch.js +3 -2
- package/lib/hooks/useRecentClientsSearch.js +3 -2
- package/lib/hooks/useTaskPanel.js +3 -10
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +35 -0
- package/lib/lang/br/index.js +24 -1
- package/lib/lang/en/index.js +24 -1
- package/lib/lang/es/index.js +24 -1
- package/lib/lang/fr/index.js +23 -1
- package/lib/services/maia/Chats/getChatMessages.js +29 -4
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -8
- package/lib/services/maia/Orchestrator/orchestrator.js +8 -11
- package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
- package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
- package/lib/services/maia/RecentTasks/index.js +6 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
- package/lib/services/maia/RecentUsers/index.js +6 -0
- package/lib/services/query/entitySearchQuery.js +18 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/utils/mapChatMessages.js +12 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/contextMention.js +37 -0
- package/lib/utils/contextMentionIcons.js +115 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
- package/lib/utils/openTaskInCorPanel.js +18 -0
- package/lib/utils/renderContextMentions.js +293 -0
- package/package.json +1 -1
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
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; }
|
|
7
|
+
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; }
|
|
8
|
+
import { useLazyQuery } from '@apollo/client';
|
|
9
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
10
|
+
import { getRecentClients } from '../services/maia/RecentClients/getRecentClients';
|
|
11
|
+
import { getRecentProjects } from '../services/maia/RecentProjects/getRecentProjects';
|
|
12
|
+
import { getRecentTasks } from '../services/maia/RecentTasks/getRecentTasks';
|
|
13
|
+
import { useUser } from '../context/cor-user';
|
|
14
|
+
import { PROJECTS_FALLBACK, SEARCH_ENTITIES, TASK_FAMILY_FALLBACK } from '../services/query/entitySearchQuery';
|
|
15
|
+
import { SEARCH_CLIENTS } from '../services/query/ClientSearchQuery';
|
|
16
|
+
import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
|
|
17
|
+
import { SEARCH_QUERY_DEBOUNCE_MS } from '../constants/config';
|
|
18
|
+
import { useDebounce } from './useDebounce';
|
|
19
|
+
import { useT } from './useT';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Restringe los resultados al `clientId`/`projectId` del agente activo.
|
|
23
|
+
* Cuando el agente está scopeado a un client/project, tanto los recents como
|
|
24
|
+
* el search deben filtrar por ese contexto. Si el backend no entiende algún
|
|
25
|
+
* campo lo ignora y se cae al comportamiento global.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
var BASE_FILTERS_BY_TYPE = {
|
|
29
|
+
project: {
|
|
30
|
+
project: 'true',
|
|
31
|
+
archived: 'all'
|
|
32
|
+
},
|
|
33
|
+
task: {
|
|
34
|
+
task: 'true',
|
|
35
|
+
archived: 'false'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Entradas para el argumento GraphQL `extra` (JSON string de array) al buscar tareas con contexto.
|
|
41
|
+
* Ej.: [{"projectId":"881552"}]
|
|
42
|
+
*/
|
|
43
|
+
var buildTaskSearchExtraEntries = function buildTaskSearchExtraEntries(scope) {
|
|
44
|
+
var rawClient = (scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== '' ? String(scope.clientId) : null;
|
|
45
|
+
var rawProject = (scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== '' ? String(scope.projectId) : null;
|
|
46
|
+
var agentEntity = scope === null || scope === void 0 ? void 0 : scope.agentEntity;
|
|
47
|
+
var entries = [];
|
|
48
|
+
var pushClient = function pushClient() {
|
|
49
|
+
if (rawClient) entries.push({
|
|
50
|
+
clientId: rawClient
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var pushProject = function pushProject() {
|
|
54
|
+
if (rawProject) entries.push({
|
|
55
|
+
projectId: rawProject
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
if (agentEntity === 'project') {
|
|
59
|
+
if (rawProject) {
|
|
60
|
+
pushProject();
|
|
61
|
+
} else if (rawClient) {
|
|
62
|
+
pushClient();
|
|
63
|
+
}
|
|
64
|
+
} else if (agentEntity === 'client') {
|
|
65
|
+
pushClient();
|
|
66
|
+
pushProject();
|
|
67
|
+
} else {
|
|
68
|
+
pushClient();
|
|
69
|
+
pushProject();
|
|
70
|
+
}
|
|
71
|
+
return entries;
|
|
72
|
+
};
|
|
73
|
+
var buildTaskSearchExtra = function buildTaskSearchExtra(scope) {
|
|
74
|
+
var entries = buildTaskSearchExtraEntries(scope);
|
|
75
|
+
if (entries.length === 0) return undefined;
|
|
76
|
+
return JSON.stringify(entries);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Tab proyecto: con `clientId` en el scope, `extra` acota la búsqueda a proyectos de ese cliente.
|
|
81
|
+
* Ej.: `[{"clientId":"47105"}]` junto a `filters` `{"project":"true","archived":"all"}`.
|
|
82
|
+
*/
|
|
83
|
+
var buildProjectSearchExtra = function buildProjectSearchExtra(scope) {
|
|
84
|
+
var rawClient = (scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== '' ? String(scope.clientId) : null;
|
|
85
|
+
if (!rawClient) return undefined;
|
|
86
|
+
return JSON.stringify([{
|
|
87
|
+
clientId: rawClient
|
|
88
|
+
}]);
|
|
89
|
+
};
|
|
90
|
+
var buildSearchEntitiesExtra = function buildSearchEntitiesExtra(type, scope) {
|
|
91
|
+
if (type === 'task') return buildTaskSearchExtra(scope);
|
|
92
|
+
if (type === 'project') return buildProjectSearchExtra(scope);
|
|
93
|
+
return undefined;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Tab `task` / `project`: `filters` sólo tipo + archived (tareas: no archivadas); scope (clientId / projectId en tareas) en `extra`.
|
|
98
|
+
*/
|
|
99
|
+
var buildFiltersForType = function buildFiltersForType(type) {
|
|
100
|
+
if (type === 'project') {
|
|
101
|
+
return JSON.stringify(BASE_FILTERS_BY_TYPE.project);
|
|
102
|
+
}
|
|
103
|
+
return JSON.stringify(BASE_FILTERS_BY_TYPE.task);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Filtros para usersDirectory. El backend espera un JSON string con
|
|
108
|
+
* withPosition, withTeams y searchInput. Le agregamos clientId/projectId
|
|
109
|
+
* del scope en caso de que el backend los aproveche para filtrar por
|
|
110
|
+
* contexto (si no los entiende los ignora).
|
|
111
|
+
*/
|
|
112
|
+
var buildUsersDirectoryFilters = function buildUsersDirectoryFilters(q) {
|
|
113
|
+
var base = {
|
|
114
|
+
withPosition: true,
|
|
115
|
+
withTeams: true
|
|
116
|
+
};
|
|
117
|
+
var trimmedQ = q.trim();
|
|
118
|
+
if (trimmedQ) {
|
|
119
|
+
base.searchInput = trimmedQ;
|
|
120
|
+
}
|
|
121
|
+
return JSON.stringify(base);
|
|
122
|
+
};
|
|
123
|
+
var highlightRange = function highlightRange(text, searchValue) {
|
|
124
|
+
if (!searchValue) return undefined;
|
|
125
|
+
var idx = text.toLowerCase().indexOf(searchValue.toLowerCase());
|
|
126
|
+
if (idx < 0) return undefined;
|
|
127
|
+
return {
|
|
128
|
+
start: idx,
|
|
129
|
+
length: searchValue.length
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
var firstDefined = function firstDefined() {
|
|
133
|
+
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
134
|
+
values[_key] = arguments[_key];
|
|
135
|
+
}
|
|
136
|
+
return values.find(function (value) {
|
|
137
|
+
return value !== undefined && value !== null;
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
var mapClientToItem = function mapClientToItem(c, searchValue) {
|
|
141
|
+
var _c$totalProyectos, _c$totalProyectos2;
|
|
142
|
+
return {
|
|
143
|
+
id: c.id,
|
|
144
|
+
type: 'client',
|
|
145
|
+
primary: c.name,
|
|
146
|
+
primaryHighlight: highlightRange(c.name, searchValue),
|
|
147
|
+
breadcrumb: {
|
|
148
|
+
count: (_c$totalProyectos = c.totalProyectos) !== null && _c$totalProyectos !== void 0 ? _c$totalProyectos : undefined,
|
|
149
|
+
countLabel: 'projects'
|
|
150
|
+
},
|
|
151
|
+
raw: {
|
|
152
|
+
id: c.id,
|
|
153
|
+
name: c.name,
|
|
154
|
+
totalProyectos: (_c$totalProyectos2 = c.totalProyectos) !== null && _c$totalProyectos2 !== void 0 ? _c$totalProyectos2 : null
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
var mapUserToItem = function mapUserToItem(u, searchValue) {
|
|
159
|
+
var _u$firstName, _u$lastName, _u$picture, _u$positionName, _u$email;
|
|
160
|
+
var fullName = "".concat((_u$firstName = u.firstName) !== null && _u$firstName !== void 0 ? _u$firstName : '', " ").concat((_u$lastName = u.lastName) !== null && _u$lastName !== void 0 ? _u$lastName : '').trim();
|
|
161
|
+
var primary = fullName || u.email || String(u.id);
|
|
162
|
+
return {
|
|
163
|
+
id: u.id,
|
|
164
|
+
type: 'user',
|
|
165
|
+
primary: primary,
|
|
166
|
+
primaryHighlight: highlightRange(primary, searchValue),
|
|
167
|
+
raw: {
|
|
168
|
+
id: u.id,
|
|
169
|
+
name: primary,
|
|
170
|
+
picture: (_u$picture = u.picture) !== null && _u$picture !== void 0 ? _u$picture : null,
|
|
171
|
+
positionName: (_u$positionName = u.positionName) !== null && _u$positionName !== void 0 ? _u$positionName : null,
|
|
172
|
+
email: (_u$email = u.email) !== null && _u$email !== void 0 ? _u$email : null
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
var mapCorUserToUserItem = function mapCorUserToUserItem(user, searchValue, meLabel) {
|
|
177
|
+
var _user$firstName, _user$lastName, _user$user_position, _user$role;
|
|
178
|
+
var fullName = "".concat((_user$firstName = user.firstName) !== null && _user$firstName !== void 0 ? _user$firstName : '', " ").concat((_user$lastName = user.lastName) !== null && _user$lastName !== void 0 ? _user$lastName : '').trim();
|
|
179
|
+
var positionLine = ((_user$user_position = user.user_position) === null || _user$user_position === void 0 ? void 0 : _user$user_position.trim()) || ((_user$role = user.role) === null || _user$role === void 0 ? void 0 : _user$role.trim()) || null;
|
|
180
|
+
return {
|
|
181
|
+
id: user.id,
|
|
182
|
+
type: 'user',
|
|
183
|
+
primary: meLabel,
|
|
184
|
+
primaryHighlight: highlightRange(meLabel, searchValue),
|
|
185
|
+
raw: {
|
|
186
|
+
id: user.id,
|
|
187
|
+
name: fullName || String(user.id),
|
|
188
|
+
picture: user.picture || null,
|
|
189
|
+
positionName: positionLine,
|
|
190
|
+
email: null
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
var mapRecentTaskToItem = function mapRecentTaskToItem(task, searchValue) {
|
|
195
|
+
var _task$projectName;
|
|
196
|
+
var showProjectNameInTaskRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
197
|
+
var primary = task.title && task.title.trim() || String(task.id);
|
|
198
|
+
var projectName = showProjectNameInTaskRow ? (_task$projectName = task.projectName) !== null && _task$projectName !== void 0 ? _task$projectName : null : null;
|
|
199
|
+
return {
|
|
200
|
+
id: task.id,
|
|
201
|
+
type: 'task',
|
|
202
|
+
primary: primary,
|
|
203
|
+
primaryHighlight: highlightRange(primary, searchValue),
|
|
204
|
+
breadcrumb: projectName ? {
|
|
205
|
+
parent: projectName
|
|
206
|
+
} : undefined,
|
|
207
|
+
raw: {
|
|
208
|
+
id: task.id,
|
|
209
|
+
name: primary,
|
|
210
|
+
projectName: projectName
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
var normalizeTaskFamilyRecord = function normalizeTaskFamilyRecord(record) {
|
|
215
|
+
var _firstDefined, _firstDefined2, _record$project, _record$father, _record$father2;
|
|
216
|
+
var taskFamilyId = record._id;
|
|
217
|
+
var id = firstDefined(taskFamilyId, record.id);
|
|
218
|
+
if (id === undefined || id === null || String(id) === '') return null;
|
|
219
|
+
var title = (_firstDefined = firstDefined(record.title, record.name)) !== null && _firstDefined !== void 0 ? _firstDefined : '';
|
|
220
|
+
var projectName = (_firstDefined2 = firstDefined((_record$project = record.project) === null || _record$project === void 0 ? void 0 : _record$project.name, (_record$father = record.father) === null || _record$father === void 0 ? void 0 : _record$father.title)) !== null && _firstDefined2 !== void 0 ? _firstDefined2 : null;
|
|
221
|
+
var hasFather = !!firstDefined(record.taskFather, (_record$father2 = record.father) === null || _record$father2 === void 0 ? void 0 : _record$father2.id);
|
|
222
|
+
return {
|
|
223
|
+
id: id,
|
|
224
|
+
title: title,
|
|
225
|
+
type: hasFather ? 'subtask' : 'task',
|
|
226
|
+
projectName: projectName
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
var normalizeProjectsFallbackRecord = function normalizeProjectsFallbackRecord(record) {
|
|
230
|
+
var _record$name, _firstDefined3, _record$client, _record$client$name, _record$client2;
|
|
231
|
+
var id = record.id;
|
|
232
|
+
if (id === undefined || id === null || String(id) === '') return null;
|
|
233
|
+
var title = (_record$name = record.name) !== null && _record$name !== void 0 ? _record$name : '';
|
|
234
|
+
var clientId = (_firstDefined3 = firstDefined(record.clientId, (_record$client = record.client) === null || _record$client === void 0 ? void 0 : _record$client.id)) !== null && _firstDefined3 !== void 0 ? _firstDefined3 : null;
|
|
235
|
+
var clientName = (_record$client$name = (_record$client2 = record.client) === null || _record$client2 === void 0 ? void 0 : _record$client2.name) !== null && _record$client$name !== void 0 ? _record$client$name : null;
|
|
236
|
+
return {
|
|
237
|
+
id: id,
|
|
238
|
+
title: title,
|
|
239
|
+
type: 'project',
|
|
240
|
+
clientId: clientId,
|
|
241
|
+
clientName: clientName
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
var mapSearchToItem = function mapSearchToItem(r, type, searchValue) {
|
|
245
|
+
var _r$projectName, _r$projectName2, _r$clientId, _r$clientName, _r$feeId, _father$title;
|
|
246
|
+
var showProjectNameInTaskRow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
247
|
+
var primary = r.title || r.projectName || '';
|
|
248
|
+
var parent;
|
|
249
|
+
if (type === 'project') parent = r.clientName;else if (type === 'task') parent = undefined;else parent = (_r$projectName = r.projectName) !== null && _r$projectName !== void 0 ? _r$projectName : r.clientName;
|
|
250
|
+
var father = type === 'task' ? r.father : null;
|
|
251
|
+
var hasFather = type === 'task' && father != null && father.id != null && String(father.id).length > 0;
|
|
252
|
+
var taskProjectName = type === 'task' && !showProjectNameInTaskRow ? null : (_r$projectName2 = r.projectName) !== null && _r$projectName2 !== void 0 ? _r$projectName2 : null;
|
|
253
|
+
return {
|
|
254
|
+
id: r.id,
|
|
255
|
+
type: type,
|
|
256
|
+
primary: primary,
|
|
257
|
+
primaryHighlight: highlightRange(primary, searchValue),
|
|
258
|
+
breadcrumb: parent ? {
|
|
259
|
+
parent: parent
|
|
260
|
+
} : undefined,
|
|
261
|
+
raw: {
|
|
262
|
+
id: r.id,
|
|
263
|
+
name: primary,
|
|
264
|
+
clientId: (_r$clientId = r.clientId) !== null && _r$clientId !== void 0 ? _r$clientId : null,
|
|
265
|
+
clientName: (_r$clientName = r.clientName) !== null && _r$clientName !== void 0 ? _r$clientName : null,
|
|
266
|
+
projectName: taskProjectName,
|
|
267
|
+
feeId: (_r$feeId = r.feeId) !== null && _r$feeId !== void 0 ? _r$feeId : null,
|
|
268
|
+
fatherId: hasFather ? father.id : null,
|
|
269
|
+
fatherTitle: hasFather ? ((_father$title = father.title) === null || _father$title === void 0 ? void 0 : _father$title.trim()) || null : null
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
var formatMcpPrimaryLabel = function formatMcpPrimaryLabel(slug) {
|
|
274
|
+
return slug.replace(/_/g, ' ').replace(/\b\w/g, function (_char) {
|
|
275
|
+
return _char.toUpperCase();
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
var mapMcpSlugsToItems = function mapMcpSlugsToItems(slugs, searchValue) {
|
|
279
|
+
var q = searchValue.trim().toLowerCase();
|
|
280
|
+
var filtered = slugs;
|
|
281
|
+
if (q) {
|
|
282
|
+
filtered = slugs.filter(function (s) {
|
|
283
|
+
var primary = formatMcpPrimaryLabel(s);
|
|
284
|
+
return s.toLowerCase().includes(q) || primary.toLowerCase().includes(q);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return filtered.map(function (slug) {
|
|
288
|
+
var primary = formatMcpPrimaryLabel(slug);
|
|
289
|
+
return {
|
|
290
|
+
id: slug,
|
|
291
|
+
type: 'mcp',
|
|
292
|
+
primary: primary,
|
|
293
|
+
primaryHighlight: highlightRange(primary, searchValue),
|
|
294
|
+
raw: {
|
|
295
|
+
id: slug,
|
|
296
|
+
name: primary
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
});
|
|
300
|
+
};
|
|
301
|
+
export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
302
|
+
var _scope$mcpSlugs;
|
|
303
|
+
var corUser = useUser();
|
|
304
|
+
var _useT = useT(),
|
|
305
|
+
t = _useT.t;
|
|
306
|
+
var _useState = useState(''),
|
|
307
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
308
|
+
searchValue = _useState2[0],
|
|
309
|
+
setSearchValue = _useState2[1];
|
|
310
|
+
var debouncedSearchValue = useDebounce(searchValue, SEARCH_QUERY_DEBOUNCE_MS);
|
|
311
|
+
var _useState3 = useState([]),
|
|
312
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
313
|
+
items = _useState4[0],
|
|
314
|
+
setItems = _useState4[1];
|
|
315
|
+
var _useState5 = useState(false),
|
|
316
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
317
|
+
loading = _useState6[0],
|
|
318
|
+
setLoading = _useState6[1];
|
|
319
|
+
var _useState7 = useState(false),
|
|
320
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
321
|
+
error = _useState8[0],
|
|
322
|
+
setError = _useState8[1];
|
|
323
|
+
var _useState9 = useState(false),
|
|
324
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
325
|
+
hideRecentsLabel = _useState0[0],
|
|
326
|
+
setHideRecentsLabel = _useState0[1];
|
|
327
|
+
var mcpSlugsKey = ((_scope$mcpSlugs = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs !== void 0 ? _scope$mcpSlugs : []).join('|');
|
|
328
|
+
var showProjectNameInTaskRow = (scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== 'project';
|
|
329
|
+
|
|
330
|
+
// Estabilizamos el scope para no disparar fetchs por cambios de identidad de objeto.
|
|
331
|
+
var stableScope = useMemo(function () {
|
|
332
|
+
var _scope$clientId, _scope$projectId, _scope$mcpSlugs2, _scope$agentEntity;
|
|
333
|
+
return {
|
|
334
|
+
clientId: (_scope$clientId = scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && _scope$clientId !== void 0 ? _scope$clientId : null,
|
|
335
|
+
projectId: (_scope$projectId = scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && _scope$projectId !== void 0 ? _scope$projectId : null,
|
|
336
|
+
mcpSlugs: (_scope$mcpSlugs2 = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs2 !== void 0 ? _scope$mcpSlugs2 : [],
|
|
337
|
+
agentEntity: (_scope$agentEntity = scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== null && _scope$agentEntity !== void 0 ? _scope$agentEntity : null
|
|
338
|
+
};
|
|
339
|
+
}, [scope === null || scope === void 0 ? void 0 : scope.clientId, scope === null || scope === void 0 ? void 0 : scope.projectId, mcpSlugsKey, scope === null || scope === void 0 ? void 0 : scope.agentEntity]);
|
|
340
|
+
|
|
341
|
+
// --- Search: project | task (GraphQL: search) ---
|
|
342
|
+
var _useLazyQuery = useLazyQuery(SEARCH_ENTITIES, {
|
|
343
|
+
variables: {
|
|
344
|
+
limit: 20
|
|
345
|
+
},
|
|
346
|
+
fetchPolicy: 'network-only'
|
|
347
|
+
}),
|
|
348
|
+
_useLazyQuery2 = _slicedToArray(_useLazyQuery, 2),
|
|
349
|
+
fetchSearchEntities = _useLazyQuery2[0],
|
|
350
|
+
_useLazyQuery2$ = _useLazyQuery2[1],
|
|
351
|
+
searchData = _useLazyQuery2$.data,
|
|
352
|
+
searchLoading = _useLazyQuery2$.loading,
|
|
353
|
+
searchError = _useLazyQuery2$.error;
|
|
354
|
+
|
|
355
|
+
// --- Search: client (GraphQL) ---
|
|
356
|
+
var _useLazyQuery3 = useLazyQuery(SEARCH_CLIENTS, {
|
|
357
|
+
fetchPolicy: 'network-only'
|
|
358
|
+
}),
|
|
359
|
+
_useLazyQuery4 = _slicedToArray(_useLazyQuery3, 2),
|
|
360
|
+
fetchSearchClients = _useLazyQuery4[0],
|
|
361
|
+
_useLazyQuery4$ = _useLazyQuery4[1],
|
|
362
|
+
clientsData = _useLazyQuery4$.data,
|
|
363
|
+
clientsLoading = _useLazyQuery4$.loading,
|
|
364
|
+
clientsError = _useLazyQuery4$.error;
|
|
365
|
+
|
|
366
|
+
// --- Search: user (GraphQL: usersDirectory) ---
|
|
367
|
+
var _useLazyQuery5 = useLazyQuery(USERS_DIRECTORY, {
|
|
368
|
+
fetchPolicy: 'network-only'
|
|
369
|
+
}),
|
|
370
|
+
_useLazyQuery6 = _slicedToArray(_useLazyQuery5, 2),
|
|
371
|
+
fetchUsersDirectory = _useLazyQuery6[0],
|
|
372
|
+
_useLazyQuery6$ = _useLazyQuery6[1],
|
|
373
|
+
usersData = _useLazyQuery6$.data,
|
|
374
|
+
usersLoading = _useLazyQuery6$.loading,
|
|
375
|
+
usersError = _useLazyQuery6$.error;
|
|
376
|
+
var _useLazyQuery7 = useLazyQuery(TASK_FAMILY_FALLBACK, {
|
|
377
|
+
fetchPolicy: 'network-only'
|
|
378
|
+
}),
|
|
379
|
+
_useLazyQuery8 = _slicedToArray(_useLazyQuery7, 1),
|
|
380
|
+
fetchTaskFamilyFallback = _useLazyQuery8[0];
|
|
381
|
+
var _useLazyQuery9 = useLazyQuery(PROJECTS_FALLBACK, {
|
|
382
|
+
fetchPolicy: 'network-only'
|
|
383
|
+
}),
|
|
384
|
+
_useLazyQuery0 = _slicedToArray(_useLazyQuery9, 1),
|
|
385
|
+
fetchProjectsFallback = _useLazyQuery0[0];
|
|
386
|
+
var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
387
|
+
var _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped, _fallbackData$project, _fallbackData$project2, argumentsFilter, _yield$fetchProjectsF, fallbackData, fallbackMapped, recentTaskFilters, _data2, taskItems, _fallbackData$taskFam, _fallbackData$taskFam2, filter, _yield$fetchTaskFamil, _fallbackData, _data3$usersDirectory, _data3$usersDirectory2, _yield$fetchUsersDire, _data3, _mapped2, meItem, withoutMe, _t;
|
|
388
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
389
|
+
while (1) switch (_context.prev = _context.next) {
|
|
390
|
+
case 0:
|
|
391
|
+
if (!(type === 'mcp')) {
|
|
392
|
+
_context.next = 1;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
slugs = (_stableScope$mcpSlugs = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs !== void 0 ? _stableScope$mcpSlugs : [];
|
|
396
|
+
setLoading(false);
|
|
397
|
+
setError(false);
|
|
398
|
+
setItems(mapMcpSlugsToItems(slugs, ''));
|
|
399
|
+
setHideRecentsLabel(false);
|
|
400
|
+
return _context.abrupt("return");
|
|
401
|
+
case 1:
|
|
402
|
+
setLoading(true);
|
|
403
|
+
setError(false);
|
|
404
|
+
_context.prev = 2;
|
|
405
|
+
if (!(type === 'client')) {
|
|
406
|
+
_context.next = 4;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
_context.next = 3;
|
|
410
|
+
return getRecentClients();
|
|
411
|
+
case 3:
|
|
412
|
+
data = _context.sent;
|
|
413
|
+
mapped = (data !== null && data !== void 0 ? data : []).map(function (c) {
|
|
414
|
+
return mapClientToItem(c, '');
|
|
415
|
+
});
|
|
416
|
+
setItems(mapped);
|
|
417
|
+
setHideRecentsLabel(false);
|
|
418
|
+
_context.next = 17;
|
|
419
|
+
break;
|
|
420
|
+
case 4:
|
|
421
|
+
if (!(type === 'project')) {
|
|
422
|
+
_context.next = 9;
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
_context.next = 5;
|
|
426
|
+
return getRecentProjects(stableScope.clientId ? {
|
|
427
|
+
clientId: stableScope.clientId
|
|
428
|
+
} : undefined);
|
|
429
|
+
case 5:
|
|
430
|
+
_data = _context.sent;
|
|
431
|
+
_mapped = (Array.isArray(_data) ? _data : []).map(function (p) {
|
|
432
|
+
return mapSearchToItem({
|
|
433
|
+
id: p.id,
|
|
434
|
+
title: p.title,
|
|
435
|
+
type: 'project',
|
|
436
|
+
clientId: p.clientId,
|
|
437
|
+
feeId: p.feeId,
|
|
438
|
+
clientName: p.clientName
|
|
439
|
+
}, 'project', '');
|
|
440
|
+
});
|
|
441
|
+
if (!(_mapped.length === 0)) {
|
|
442
|
+
_context.next = 7;
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
argumentsFilter = stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '' ? {
|
|
446
|
+
client_id: [String(stableScope.clientId)]
|
|
447
|
+
} : undefined;
|
|
448
|
+
_context.next = 6;
|
|
449
|
+
return fetchProjectsFallback({
|
|
450
|
+
variables: _objectSpread(_objectSpread({}, argumentsFilter ? {
|
|
451
|
+
arguments: argumentsFilter
|
|
452
|
+
} : {}), {}, {
|
|
453
|
+
page: 1,
|
|
454
|
+
perPage: 20
|
|
455
|
+
})
|
|
456
|
+
});
|
|
457
|
+
case 6:
|
|
458
|
+
_yield$fetchProjectsF = _context.sent;
|
|
459
|
+
fallbackData = _yield$fetchProjectsF.data;
|
|
460
|
+
fallbackMapped = ((_fallbackData$project = fallbackData === null || fallbackData === void 0 || (_fallbackData$project2 = fallbackData.projects) === null || _fallbackData$project2 === void 0 ? void 0 : _fallbackData$project2.data) !== null && _fallbackData$project !== void 0 ? _fallbackData$project : []).map(normalizeProjectsFallbackRecord).filter(function (item) {
|
|
461
|
+
return item !== null;
|
|
462
|
+
}).map(function (item) {
|
|
463
|
+
return mapSearchToItem(item, 'project', '');
|
|
464
|
+
});
|
|
465
|
+
_mapped = fallbackMapped;
|
|
466
|
+
setHideRecentsLabel(fallbackMapped.length > 0);
|
|
467
|
+
_context.next = 8;
|
|
468
|
+
break;
|
|
469
|
+
case 7:
|
|
470
|
+
setHideRecentsLabel(false);
|
|
471
|
+
case 8:
|
|
472
|
+
setItems(_mapped);
|
|
473
|
+
_context.next = 17;
|
|
474
|
+
break;
|
|
475
|
+
case 9:
|
|
476
|
+
if (!(type === 'task')) {
|
|
477
|
+
_context.next = 14;
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
if (stableScope.agentEntity === 'project') {
|
|
481
|
+
recentTaskFilters = {
|
|
482
|
+
projectId: stableScope.projectId
|
|
483
|
+
};
|
|
484
|
+
} else if (stableScope.agentEntity === 'client') {
|
|
485
|
+
recentTaskFilters = {
|
|
486
|
+
clientId: stableScope.clientId
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
_context.next = 10;
|
|
490
|
+
return getRecentTasks(recentTaskFilters);
|
|
491
|
+
case 10:
|
|
492
|
+
_data2 = _context.sent;
|
|
493
|
+
taskItems = (_data2 !== null && _data2 !== void 0 ? _data2 : []).map(function (task) {
|
|
494
|
+
return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
|
|
495
|
+
});
|
|
496
|
+
if (!(taskItems.length === 0)) {
|
|
497
|
+
_context.next = 12;
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
filter = {};
|
|
501
|
+
if (stableScope.projectId !== null && stableScope.projectId !== undefined && stableScope.projectId !== '') {
|
|
502
|
+
filter.projectIds = [String(stableScope.projectId)];
|
|
503
|
+
}
|
|
504
|
+
if (stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '') {
|
|
505
|
+
filter.clientIds = [String(stableScope.clientId)];
|
|
506
|
+
}
|
|
507
|
+
_context.next = 11;
|
|
508
|
+
return fetchTaskFamilyFallback({
|
|
509
|
+
variables: _objectSpread(_objectSpread({}, Object.keys(filter).length > 0 ? {
|
|
510
|
+
filter: filter
|
|
511
|
+
} : {}), {}, {
|
|
512
|
+
pagination: {
|
|
513
|
+
offset: 0,
|
|
514
|
+
size: 20
|
|
515
|
+
}
|
|
516
|
+
})
|
|
517
|
+
});
|
|
518
|
+
case 11:
|
|
519
|
+
_yield$fetchTaskFamil = _context.sent;
|
|
520
|
+
_fallbackData = _yield$fetchTaskFamil.data;
|
|
521
|
+
taskItems = ((_fallbackData$taskFam = _fallbackData === null || _fallbackData === void 0 || (_fallbackData$taskFam2 = _fallbackData.taskFamily) === null || _fallbackData$taskFam2 === void 0 ? void 0 : _fallbackData$taskFam2.data) !== null && _fallbackData$taskFam !== void 0 ? _fallbackData$taskFam : []).map(normalizeTaskFamilyRecord).filter(function (item) {
|
|
522
|
+
return item !== null;
|
|
523
|
+
}).map(function (task) {
|
|
524
|
+
return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
|
|
525
|
+
});
|
|
526
|
+
setHideRecentsLabel(taskItems.length > 0);
|
|
527
|
+
_context.next = 13;
|
|
528
|
+
break;
|
|
529
|
+
case 12:
|
|
530
|
+
setHideRecentsLabel(false);
|
|
531
|
+
case 13:
|
|
532
|
+
setItems(taskItems);
|
|
533
|
+
_context.next = 17;
|
|
534
|
+
break;
|
|
535
|
+
case 14:
|
|
536
|
+
if (!(type === 'user')) {
|
|
537
|
+
_context.next = 16;
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
540
|
+
_context.next = 15;
|
|
541
|
+
return fetchUsersDirectory({
|
|
542
|
+
variables: {
|
|
543
|
+
filters: buildUsersDirectoryFilters(''),
|
|
544
|
+
page: 1
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
case 15:
|
|
548
|
+
_yield$fetchUsersDire = _context.sent;
|
|
549
|
+
_data3 = _yield$fetchUsersDire.data;
|
|
550
|
+
_mapped2 = ((_data3$usersDirectory = _data3 === null || _data3 === void 0 || (_data3$usersDirectory2 = _data3.usersDirectory) === null || _data3$usersDirectory2 === void 0 ? void 0 : _data3$usersDirectory2.data) !== null && _data3$usersDirectory !== void 0 ? _data3$usersDirectory : []).map(function (u) {
|
|
551
|
+
return mapUserToItem(u, '');
|
|
552
|
+
});
|
|
553
|
+
meItem = mapCorUserToUserItem(corUser, '', t('contextMention.me'));
|
|
554
|
+
withoutMe = _mapped2.filter(function (item) {
|
|
555
|
+
return String(item.id) !== String(meItem.id);
|
|
556
|
+
});
|
|
557
|
+
setItems([meItem].concat(_toConsumableArray(withoutMe)));
|
|
558
|
+
setHideRecentsLabel(false);
|
|
559
|
+
_context.next = 17;
|
|
560
|
+
break;
|
|
561
|
+
case 16:
|
|
562
|
+
setItems([]);
|
|
563
|
+
setHideRecentsLabel(false);
|
|
564
|
+
case 17:
|
|
565
|
+
_context.next = 19;
|
|
566
|
+
break;
|
|
567
|
+
case 18:
|
|
568
|
+
_context.prev = 18;
|
|
569
|
+
_t = _context["catch"](2);
|
|
570
|
+
setError(true);
|
|
571
|
+
setItems([]);
|
|
572
|
+
setHideRecentsLabel(false);
|
|
573
|
+
case 19:
|
|
574
|
+
_context.prev = 19;
|
|
575
|
+
setLoading(false);
|
|
576
|
+
return _context.finish(19);
|
|
577
|
+
case 20:
|
|
578
|
+
case "end":
|
|
579
|
+
return _context.stop();
|
|
580
|
+
}
|
|
581
|
+
}, _callee, null, [[2, 18, 19, 20]]);
|
|
582
|
+
})), [type, stableScope, fetchUsersDirectory, fetchTaskFamilyFallback, fetchProjectsFallback, showProjectNameInTaskRow, corUser, t]);
|
|
583
|
+
|
|
584
|
+
// Disparar search al cambiar debounced value
|
|
585
|
+
useEffect(function () {
|
|
586
|
+
var q = debouncedSearchValue.trim();
|
|
587
|
+
if (type === 'mcp') {
|
|
588
|
+
var _stableScope$mcpSlugs2;
|
|
589
|
+
var slugs = (_stableScope$mcpSlugs2 = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs2 !== void 0 ? _stableScope$mcpSlugs2 : [];
|
|
590
|
+
setLoading(false);
|
|
591
|
+
setError(false);
|
|
592
|
+
setItems(mapMcpSlugsToItems(slugs, q));
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
if (!q) return;
|
|
596
|
+
if (type === 'client') {
|
|
597
|
+
fetchSearchClients({
|
|
598
|
+
variables: {
|
|
599
|
+
filter: {
|
|
600
|
+
name: q
|
|
601
|
+
},
|
|
602
|
+
page: 1,
|
|
603
|
+
perPage: 20
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
} else if (type === 'user') {
|
|
607
|
+
fetchUsersDirectory({
|
|
608
|
+
variables: {
|
|
609
|
+
filters: buildUsersDirectoryFilters(q),
|
|
610
|
+
page: 1
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
} else {
|
|
614
|
+
var filters = buildFiltersForType(type);
|
|
615
|
+
var extra = buildSearchEntitiesExtra(type, stableScope);
|
|
616
|
+
fetchSearchEntities({
|
|
617
|
+
variables: _objectSpread({
|
|
618
|
+
q: q,
|
|
619
|
+
filters: filters
|
|
620
|
+
}, extra !== undefined ? {
|
|
621
|
+
extra: extra
|
|
622
|
+
} : {})
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
}, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
|
|
626
|
+
|
|
627
|
+
// Sincronizar resultados de search
|
|
628
|
+
useEffect(function () {
|
|
629
|
+
if (type === 'mcp') return;
|
|
630
|
+
var q = debouncedSearchValue.trim();
|
|
631
|
+
if (!q) return;
|
|
632
|
+
setHideRecentsLabel(false);
|
|
633
|
+
if (type === 'client') {
|
|
634
|
+
var _clientsData$clients;
|
|
635
|
+
setLoading(clientsLoading);
|
|
636
|
+
if (clientsError) {
|
|
637
|
+
setError(true);
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
if (clientsData !== null && clientsData !== void 0 && (_clientsData$clients = clientsData.clients) !== null && _clientsData$clients !== void 0 && _clientsData$clients.data) {
|
|
641
|
+
setItems(clientsData.clients.data.map(function (c) {
|
|
642
|
+
return mapClientToItem(c, q);
|
|
643
|
+
}));
|
|
644
|
+
setError(false);
|
|
645
|
+
}
|
|
646
|
+
} else if (type === 'user') {
|
|
647
|
+
var _usersData$usersDirec;
|
|
648
|
+
setLoading(usersLoading);
|
|
649
|
+
if (usersError) {
|
|
650
|
+
setError(true);
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
if (usersData !== null && usersData !== void 0 && (_usersData$usersDirec = usersData.usersDirectory) !== null && _usersData$usersDirec !== void 0 && _usersData$usersDirec.data) {
|
|
654
|
+
setItems(usersData.usersDirectory.data.map(function (u) {
|
|
655
|
+
return mapUserToItem(u, q);
|
|
656
|
+
}));
|
|
657
|
+
setError(false);
|
|
658
|
+
}
|
|
659
|
+
} else {
|
|
660
|
+
setLoading(searchLoading);
|
|
661
|
+
if (searchError) {
|
|
662
|
+
setError(true);
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
if (searchData !== null && searchData !== void 0 && searchData.search) {
|
|
666
|
+
setItems(searchData.search.map(function (r) {
|
|
667
|
+
return mapSearchToItem(r, type, q, showProjectNameInTaskRow);
|
|
668
|
+
}));
|
|
669
|
+
setError(false);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
}, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type, showProjectNameInTaskRow]);
|
|
673
|
+
|
|
674
|
+
// Cuando se limpia el search, volver a recents
|
|
675
|
+
useEffect(function () {
|
|
676
|
+
if (!debouncedSearchValue.trim()) {
|
|
677
|
+
fetchRecent();
|
|
678
|
+
}
|
|
679
|
+
}, [debouncedSearchValue, fetchRecent]);
|
|
680
|
+
return {
|
|
681
|
+
items: items,
|
|
682
|
+
loading: loading,
|
|
683
|
+
error: error,
|
|
684
|
+
hideRecentsLabel: hideRecentsLabel,
|
|
685
|
+
searchValue: searchValue,
|
|
686
|
+
updateSearchValue: setSearchValue,
|
|
687
|
+
fetchRecent: fetchRecent
|
|
688
|
+
};
|
|
689
|
+
};
|
|
690
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsIkJBU0VfRklMVEVSU19CWV9UWVBFIiwicHJvamVjdCIsImFyY2hpdmVkIiwidGFzayIsImJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyIsInNjb3BlIiwicmF3Q2xpZW50IiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJyYXdQcm9qZWN0IiwicHJvamVjdElkIiwiYWdlbnRFbnRpdHkiLCJlbnRyaWVzIiwicHVzaENsaWVudCIsInB1c2giLCJwdXNoUHJvamVjdCIsImJ1aWxkVGFza1NlYXJjaEV4dHJhIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhIiwiYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhIiwidHlwZSIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsInEiLCJiYXNlIiwid2l0aFBvc2l0aW9uIiwid2l0aFRlYW1zIiwidHJpbW1lZFEiLCJ0cmltIiwic2VhcmNoSW5wdXQiLCJoaWdobGlnaHRSYW5nZSIsInRleHQiLCJzZWFyY2hWYWx1ZSIsImlkeCIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsInN0YXJ0IiwiZmlyc3REZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsInZhbHVlcyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJ2YWx1ZSIsIm1hcENsaWVudFRvSXRlbSIsImMiLCJfYyR0b3RhbFByb3llY3RvcyIsIl9jJHRvdGFsUHJveWVjdG9zMiIsImlkIiwicHJpbWFyeSIsIm5hbWUiLCJwcmltYXJ5SGlnaGxpZ2h0IiwiYnJlYWRjcnVtYiIsImNvdW50IiwidG90YWxQcm95ZWN0b3MiLCJjb3VudExhYmVsIiwicmF3IiwibWFwVXNlclRvSXRlbSIsInUiLCJfdSRmaXJzdE5hbWUiLCJfdSRsYXN0TmFtZSIsIl91JHBpY3R1cmUiLCJfdSRwb3NpdGlvbk5hbWUiLCJfdSRlbWFpbCIsImZ1bGxOYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJtYXBDb3JVc2VyVG9Vc2VySXRlbSIsInVzZXIiLCJtZUxhYmVsIiwiX3VzZXIkZmlyc3ROYW1lIiwiX3VzZXIkbGFzdE5hbWUiLCJfdXNlciR1c2VyX3Bvc2l0aW9uIiwiX3VzZXIkcm9sZSIsInBvc2l0aW9uTGluZSIsInVzZXJfcG9zaXRpb24iLCJyb2xlIiwibWFwUmVjZW50VGFza1RvSXRlbSIsIl90YXNrJHByb2plY3ROYW1lIiwic2hvd1Byb2plY3ROYW1lSW5UYXNrUm93IiwidGl0bGUiLCJwcm9qZWN0TmFtZSIsInBhcmVudCIsIm5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQiLCJyZWNvcmQiLCJfZmlyc3REZWZpbmVkIiwiX2ZpcnN0RGVmaW5lZDIiLCJfcmVjb3JkJHByb2plY3QiLCJfcmVjb3JkJGZhdGhlciIsIl9yZWNvcmQkZmF0aGVyMiIsInRhc2tGYW1pbHlJZCIsIl9pZCIsImZhdGhlciIsImhhc0ZhdGhlciIsInRhc2tGYXRoZXIiLCJub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkIiwiX3JlY29yZCRuYW1lIiwiX2ZpcnN0RGVmaW5lZDMiLCJfcmVjb3JkJGNsaWVudCIsIl9yZWNvcmQkY2xpZW50JG5hbWUiLCJfcmVjb3JkJGNsaWVudDIiLCJjbGllbnQiLCJjbGllbnROYW1lIiwibWFwU2VhcmNoVG9JdGVtIiwiciIsIl9yJHByb2plY3ROYW1lIiwiX3IkcHJvamVjdE5hbWUyIiwiX3IkY2xpZW50SWQiLCJfciRjbGllbnROYW1lIiwiX3IkZmVlSWQiLCJfZmF0aGVyJHRpdGxlIiwidGFza1Byb2plY3ROYW1lIiwiZmVlSWQiLCJmYXRoZXJJZCIsImZhdGhlclRpdGxlIiwiZm9ybWF0TWNwUHJpbWFyeUxhYmVsIiwic2x1ZyIsInJlcGxhY2UiLCJjaGFyIiwidG9VcHBlckNhc2UiLCJtYXBNY3BTbHVnc1RvSXRlbXMiLCJzbHVncyIsImZpbHRlcmVkIiwiZmlsdGVyIiwicyIsImluY2x1ZGVzIiwibWFwIiwidXNlRW50aXR5U2VhcmNoIiwiX3Njb3BlJG1jcFNsdWdzIiwiY29yVXNlciIsIl91c2VUIiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFNlYXJjaFZhbHVlIiwiZGVib3VuY2VkU2VhcmNoVmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIml0ZW1zIiwic2V0SXRlbXMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJoaWRlUmVjZW50c0xhYmVsIiwic2V0SGlkZVJlY2VudHNMYWJlbCIsIm1jcFNsdWdzS2V5IiwibWNwU2x1Z3MiLCJqb2luIiwic3RhYmxlU2NvcGUiLCJfc2NvcGUkY2xpZW50SWQiLCJfc2NvcGUkcHJvamVjdElkIiwiX3Njb3BlJG1jcFNsdWdzMiIsIl9zY29wZSRhZ2VudEVudGl0eSIsIl91c2VMYXp5UXVlcnkiLCJ2YXJpYWJsZXMiLCJsaW1pdCIsImZldGNoUG9saWN5IiwiX3VzZUxhenlRdWVyeTIiLCJmZXRjaFNlYXJjaEVudGl0aWVzIiwiX3VzZUxhenlRdWVyeTIkIiwic2VhcmNoRGF0YSIsImRhdGEiLCJzZWFyY2hMb2FkaW5nIiwic2VhcmNoRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5MyIsIl91c2VMYXp5UXVlcnk0IiwiZmV0Y2hTZWFyY2hDbGllbnRzIiwiX3VzZUxhenlRdWVyeTQkIiwiY2xpZW50c0RhdGEiLCJjbGllbnRzTG9hZGluZyIsImNsaWVudHNFcnJvciIsIl91c2VMYXp5UXVlcnk1IiwiX3VzZUxhenlRdWVyeTYiLCJmZXRjaFVzZXJzRGlyZWN0b3J5IiwiX3VzZUxhenlRdWVyeTYkIiwidXNlcnNEYXRhIiwidXNlcnNMb2FkaW5nIiwidXNlcnNFcnJvciIsIl91c2VMYXp5UXVlcnk3IiwiX3VzZUxhenlRdWVyeTgiLCJmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayIsIl91c2VMYXp5UXVlcnk5IiwiX3VzZUxhenlRdWVyeTAiLCJmZXRjaFByb2plY3RzRmFsbGJhY2siLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzIiwibWFwcGVkIiwiX2RhdGEiLCJfbWFwcGVkIiwiX2ZhbGxiYWNrRGF0YSRwcm9qZWN0IiwiX2ZhbGxiYWNrRGF0YSRwcm9qZWN0MiIsImFyZ3VtZW50c0ZpbHRlciIsIl95aWVsZCRmZXRjaFByb2plY3RzRiIsImZhbGxiYWNrRGF0YSIsImZhbGxiYWNrTWFwcGVkIiwicmVjZW50VGFza0ZpbHRlcnMiLCJfZGF0YTIiLCJ0YXNrSXRlbXMiLCJfZmFsbGJhY2tEYXRhJHRhc2tGYW0iLCJfZmFsbGJhY2tEYXRhJHRhc2tGYW0yIiwiX3lpZWxkJGZldGNoVGFza0ZhbWlsIiwiX2ZhbGxiYWNrRGF0YSIsIl9kYXRhMyR1c2Vyc0RpcmVjdG9yeSIsIl9kYXRhMyR1c2Vyc0RpcmVjdG9yeTIiLCJfeWllbGQkZmV0Y2hVc2Vyc0RpcmUiLCJfZGF0YTMiLCJfbWFwcGVkMiIsIm1lSXRlbSIsIndpdGhvdXRNZSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhYnJ1cHQiLCJzZW50IiwiaXNBcnJheSIsInAiLCJjbGllbnRfaWQiLCJfb2JqZWN0U3ByZWFkIiwicGFnZSIsInBlclBhZ2UiLCJwcm9qZWN0cyIsIml0ZW0iLCJwcm9qZWN0SWRzIiwiY2xpZW50SWRzIiwiT2JqZWN0Iiwia2V5cyIsInBhZ2luYXRpb24iLCJvZmZzZXQiLCJzaXplIiwidGFza0ZhbWlseSIsImZpbHRlcnMiLCJ1c2Vyc0RpcmVjdG9yeSIsIl90b0NvbnN1bWFibGVBcnJheSIsImZpbmlzaCIsInN0b3AiLCJfc3RhYmxlU2NvcGUkbWNwU2x1Z3MyIiwiZXh0cmEiLCJfY2xpZW50c0RhdGEkY2xpZW50cyIsImNsaWVudHMiLCJfdXNlcnNEYXRhJHVzZXJzRGlyZWMiLCJzZWFyY2giLCJ1cGRhdGVTZWFyY2hWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VFbnRpdHlTZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTGF6eVF1ZXJ5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0UmVjZW50Q2xpZW50cyB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q2xpZW50cy9nZXRSZWNlbnRDbGllbnRzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50UHJvamVjdHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFByb2plY3RzL2dldFJlY2VudFByb2plY3RzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50VGFza3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRUYXNrSXRlbSB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50VGFza3MvZ2V0UmVjZW50VGFza3MnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IFBST0pFQ1RTX0ZBTExCQUNLLCBTRUFSQ0hfRU5USVRJRVMsIFRBU0tfRkFNSUxZX0ZBTExCQUNLIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvZW50aXR5U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfQ0xJRU5UUyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0NsaWVudFNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgVVNFUlNfRElSRUNUT1JZIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvdXNlcnNEaXJlY3RvcnlRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uL3R5cGVzL2FnZW50J1xuXG50eXBlIFJhd1NlYXJjaFJlc3VsdCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIHR5cGU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGZlZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZmF0aGVyPzogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0aXRsZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBSYXdDbGllbnQgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRvdGFsUHJveWVjdG9zPzogbnVtYmVyIHwgbnVsbFxufVxuXG50eXBlIFJhd0RpcmVjdG9yeVVzZXIgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBsYXN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZW1haWw/OiBzdHJpbmcgfCBudWxsXG4gIHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsXG4gIHBvc2l0aW9uTmFtZT86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hFbnRpdGllc0RhdGEgPSB7IHNlYXJjaDogUmF3U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cbnR5cGUgU2VhcmNoQ2xpZW50c0RhdGEgPSB7XG4gIGNsaWVudHM6IHtcbiAgICBkYXRhOiBSYXdDbGllbnRbXVxuICB9IHwgbnVsbFxufVxudHlwZSBVc2Vyc0RpcmVjdG9yeURhdGEgPSB7XG4gIHVzZXJzRGlyZWN0b3J5OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3RGlyZWN0b3J5VXNlcltdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIFRhc2tGYW1pbHlSZWNvcmQgPSB7XG4gIF9pZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRhc2tGYXRoZXI/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGZhdGhlcj86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbiAgcHJvamVjdD86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFRhc2tGYW1pbHlEYXRhID0ge1xuICB0YXNrRmFtaWx5Pzoge1xuICAgIGRhdGE/OiBUYXNrRmFtaWx5UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgRmFsbGJhY2tQcm9qZWN0UmVjb3JkID0ge1xuICBpZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgbmFtZT86IHN0cmluZyB8IG51bGxcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudD86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFByb2plY3RzRmFsbGJhY2tEYXRhID0ge1xuICBwcm9qZWN0cz86IHtcbiAgICBkYXRhPzogRmFsbGJhY2tQcm9qZWN0UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbi8qKlxuICogUmVzdHJpbmdlIGxvcyByZXN1bHRhZG9zIGFsIGBjbGllbnRJZGAvYHByb2plY3RJZGAgZGVsIGFnZW50ZSBhY3Rpdm8uXG4gKiBDdWFuZG8gZWwgYWdlbnRlIGVzdMOhIHNjb3BlYWRvIGEgdW4gY2xpZW50L3Byb2plY3QsIHRhbnRvIGxvcyByZWNlbnRzIGNvbW9cbiAqIGVsIHNlYXJjaCBkZWJlbiBmaWx0cmFyIHBvciBlc2UgY29udGV4dG8uIFNpIGVsIGJhY2tlbmQgbm8gZW50aWVuZGUgYWxnw7puXG4gKiBjYW1wbyBsbyBpZ25vcmEgeSBzZSBjYWUgYWwgY29tcG9ydGFtaWVudG8gZ2xvYmFsLlxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlTZWFyY2hTY29wZSA9IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIFNsdWdzIGRlbCBjb25lY3RvciBNQ1AgZGVsIGFnZW50ZSAobGlzdGFkbyBsb2NhbCwgc2luIEdyYXBoUUwpLiAqL1xuICBtY3BTbHVncz86IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBgZW50aXR5YCBkZWwgYWdlbnRlIGFjdGl2by4gUGFyYSBlc3BlY2lhbGlzdGFzOlxuICAgKiAtIGBwcm9qZWN0YDogYsO6c3F1ZWRhIGRlIHRhcmVhcyBmdWVyemEgZmlsdHJvIHBvciBgcHJvamVjdElkYCBkZWwgY29udGV4dG8uXG4gICAqIC0gYGNsaWVudGA6IGLDunNxdWVkYSBkZSBwcm95ZWN0b3MgcG9yIGBjbGllbnRJZGA7IHRhcmVhcyBwb3IgY2xpZW50ZSAoeSBwcm95ZWN0byBzaSBhcGxpY2EpLlxuICAgKi9cbiAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eSB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hGaWx0ZXJhYmxlVHlwZSA9ICdwcm9qZWN0JyB8ICd0YXNrJ1xuXG5jb25zdCBCQVNFX0ZJTFRFUlNfQllfVFlQRTogUmVjb3JkPFNlYXJjaEZpbHRlcmFibGVUeXBlLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogeyBwcm9qZWN0OiAndHJ1ZScsIGFyY2hpdmVkOiAnYWxsJyB9LFxuICB0YXNrOiB7IHRhc2s6ICd0cnVlJywgYXJjaGl2ZWQ6ICdmYWxzZScgfSxcbn1cblxuLyoqXG4gKiBFbnRyYWRhcyBwYXJhIGVsIGFyZ3VtZW50byBHcmFwaFFMIGBleHRyYWAgKEpTT04gc3RyaW5nIGRlIGFycmF5KSBhbCBidXNjYXIgdGFyZWFzIGNvbiBjb250ZXh0by5cbiAqIEVqLjogW3tcInByb2plY3RJZFwiOlwiODgxNTUyXCJ9XVxuICovXG5jb25zdCBidWlsZFRhc2tTZWFyY2hFeHRyYUVudHJpZXMgPSAoc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGNvbnN0IHJhd1Byb2plY3QgPVxuICAgIHNjb3BlPy5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8ucHJvamVjdElkICE9PSBudWxsICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09ICcnXG4gICAgICA/IFN0cmluZyhzY29wZS5wcm9qZWN0SWQpXG4gICAgICA6IG51bGxcblxuICBjb25zdCBhZ2VudEVudGl0eSA9IHNjb3BlPy5hZ2VudEVudGl0eVxuICBjb25zdCBlbnRyaWVzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IFtdXG5cbiAgY29uc3QgcHVzaENsaWVudCA9ICgpID0+IHtcbiAgICBpZiAocmF3Q2xpZW50KSBlbnRyaWVzLnB1c2goeyBjbGllbnRJZDogcmF3Q2xpZW50IH0pXG4gIH1cbiAgY29uc3QgcHVzaFByb2plY3QgPSAoKSA9PiB7XG4gICAgaWYgKHJhd1Byb2plY3QpIGVudHJpZXMucHVzaCh7IHByb2plY3RJZDogcmF3UHJvamVjdCB9KVxuICB9XG5cbiAgaWYgKGFnZW50RW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICBpZiAocmF3UHJvamVjdCkge1xuICAgICAgcHVzaFByb2plY3QoKVxuICAgIH0gZWxzZSBpZiAocmF3Q2xpZW50KSB7XG4gICAgICBwdXNoQ2xpZW50KClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgcHVzaENsaWVudCgpXG4gICAgcHVzaFByb2plY3QoKVxuICB9IGVsc2Uge1xuICAgIHB1c2hDbGllbnQoKVxuICAgIHB1c2hQcm9qZWN0KClcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbmNvbnN0IGJ1aWxkVGFza1NlYXJjaEV4dHJhID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBlbnRyaWVzID0gYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzKHNjb3BlKVxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpXG59XG5cbi8qKlxuICogVGFiIHByb3llY3RvOiBjb24gYGNsaWVudElkYCBlbiBlbCBzY29wZSwgYGV4dHJhYCBhY290YSBsYSBiw7pzcXVlZGEgYSBwcm95ZWN0b3MgZGUgZXNlIGNsaWVudGUuXG4gKiBFai46IGBbe1wiY2xpZW50SWRcIjpcIjQ3MTA1XCJ9XWAganVudG8gYSBgZmlsdGVyc2AgYHtcInByb2plY3RcIjpcInRydWVcIixcImFyY2hpdmVkXCI6XCJhbGxcIn1gLlxuICovXG5jb25zdCBidWlsZFByb2plY3RTZWFyY2hFeHRyYSA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGlmICghcmF3Q2xpZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbeyBjbGllbnRJZDogcmF3Q2xpZW50IH1dKVxufVxuXG5jb25zdCBidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Rhc2snKSByZXR1cm4gYnVpbGRUYXNrU2VhcmNoRXh0cmEoc2NvcGUpXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHJldHVybiBidWlsZFByb2plY3RTZWFyY2hFeHRyYShzY29wZSlcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFRhYiBgdGFza2AgLyBgcHJvamVjdGA6IGBmaWx0ZXJzYCBzw7NsbyB0aXBvICsgYXJjaGl2ZWQgKHRhcmVhczogbm8gYXJjaGl2YWRhcyk7IHNjb3BlIChjbGllbnRJZCAvIHByb2plY3RJZCBlbiB0YXJlYXMpIGVuIGBleHRyYWAuXG4gKi9cbmNvbnN0IGJ1aWxkRmlsdGVyc0ZvclR5cGUgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnByb2plY3QpXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnRhc2spXG59XG5cbi8qKlxuICogRmlsdHJvcyBwYXJhIHVzZXJzRGlyZWN0b3J5LiBFbCBiYWNrZW5kIGVzcGVyYSB1biBKU09OIHN0cmluZyBjb25cbiAqIHdpdGhQb3NpdGlvbiwgd2l0aFRlYW1zIHkgc2VhcmNoSW5wdXQuIExlIGFncmVnYW1vcyBjbGllbnRJZC9wcm9qZWN0SWRcbiAqIGRlbCBzY29wZSBlbiBjYXNvIGRlIHF1ZSBlbCBiYWNrZW5kIGxvcyBhcHJvdmVjaGUgcGFyYSBmaWx0cmFyIHBvclxuICogY29udGV4dG8gKHNpIG5vIGxvcyBlbnRpZW5kZSBsb3MgaWdub3JhKS5cbiAqL1xuY29uc3QgYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMgPSAocTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgYmFzZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgd2l0aFBvc2l0aW9uOiB0cnVlLFxuICAgIHdpdGhUZWFtczogdHJ1ZSxcbiAgfVxuICBjb25zdCB0cmltbWVkUSA9IHEudHJpbSgpXG4gIGlmICh0cmltbWVkUSkge1xuICAgIGJhc2Uuc2VhcmNoSW5wdXQgPSB0cmltbWVkUVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShiYXNlKVxufVxuXG5jb25zdCBoaWdobGlnaHRSYW5nZSA9ICh0ZXh0OiBzdHJpbmcsIHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzZWFyY2hWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBpZHggPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoaWR4IDwgMCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4geyBzdGFydDogaWR4LCBsZW5ndGg6IHNlYXJjaFZhbHVlLmxlbmd0aCB9XG59XG5cbmNvbnN0IGZpcnN0RGVmaW5lZCA9IDxUPiguLi52YWx1ZXM6IEFycmF5PFQgfCBudWxsIHwgdW5kZWZpbmVkPik6IFQgfCB1bmRlZmluZWQgPT5cbiAgdmFsdWVzLmZpbmQodmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcblxuY29uc3QgbWFwQ2xpZW50VG9JdGVtID0gKGM6IFJhd0NsaWVudCwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiAoe1xuICBpZDogYy5pZCxcbiAgdHlwZTogJ2NsaWVudCcsXG4gIHByaW1hcnk6IGMubmFtZSxcbiAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UoYy5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBjb3VudDogYy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQsXG4gICAgY291bnRMYWJlbDogJ3Byb2plY3RzJyxcbiAgfSxcbiAgcmF3OiB7XG4gICAgaWQ6IGMuaWQsXG4gICAgbmFtZTogYy5uYW1lLFxuICAgIHRvdGFsUHJveWVjdG9zOiBjLnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gIH0sXG59KVxuXG5jb25zdCBtYXBVc2VyVG9JdGVtID0gKHU6IFJhd0RpcmVjdG9yeVVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3UuZmlyc3ROYW1lID8/ICcnfSAke3UubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcHJpbWFyeSA9IGZ1bGxOYW1lIHx8IHUuZW1haWwgfHwgU3RyaW5nKHUuaWQpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdS5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdS5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwaWN0dXJlOiB1LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogdS5wb3NpdGlvbk5hbWUgPz8gbnVsbCxcbiAgICAgIGVtYWlsOiB1LmVtYWlsID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBDb3JVc2VyVG9Vc2VySXRlbSA9IChcbiAgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIG1lTGFiZWw6IHN0cmluZ1xuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgZnVsbE5hbWUgPSBgJHt1c2VyLmZpcnN0TmFtZSA/PyAnJ30gJHt1c2VyLmxhc3ROYW1lID8/ICcnfWAudHJpbSgpXG4gIGNvbnN0IHBvc2l0aW9uTGluZSA9IHVzZXIudXNlcl9wb3NpdGlvbj8udHJpbSgpIHx8IHVzZXIucm9sZT8udHJpbSgpIHx8IG51bGxcblxuICByZXR1cm4ge1xuICAgIGlkOiB1c2VyLmlkLFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICBwcmltYXJ5OiBtZUxhYmVsLFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKG1lTGFiZWwsIHNlYXJjaFZhbHVlKSxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgbmFtZTogZnVsbE5hbWUgfHwgU3RyaW5nKHVzZXIuaWQpLFxuICAgICAgcGljdHVyZTogdXNlci5waWN0dXJlIHx8IG51bGwsXG4gICAgICBwb3NpdGlvbk5hbWU6IHBvc2l0aW9uTGluZSxcbiAgICAgIGVtYWlsOiBudWxsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwUmVjZW50VGFza1RvSXRlbSA9IChcbiAgdGFzazogUmVjZW50VGFza0l0ZW0sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHRydWVcbik6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IHByaW1hcnkgPSAodGFzay50aXRsZSAmJiB0YXNrLnRpdGxlLnRyaW0oKSkgfHwgU3RyaW5nKHRhc2suaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID8gKHRhc2sucHJvamVjdE5hbWUgPz8gbnVsbCkgOiBudWxsXG4gIHJldHVybiB7XG4gICAgaWQ6IHRhc2suaWQsXG4gICAgdHlwZTogJ3Rhc2snLFxuICAgIHByaW1hcnksXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgIGJyZWFkY3J1bWI6IHByb2plY3ROYW1lID8geyBwYXJlbnQ6IHByb2plY3ROYW1lIH0gOiB1bmRlZmluZWQsXG4gICAgcmF3OiB7XG4gICAgICBpZDogdGFzay5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwcm9qZWN0TmFtZSxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQgPSAocmVjb3JkOiBUYXNrRmFtaWx5UmVjb3JkKTogUmVjZW50VGFza0l0ZW0gfCBudWxsID0+IHtcbiAgY29uc3QgeyBfaWQ6IHRhc2tGYW1pbHlJZCB9ID0gcmVjb3JkXG4gIGNvbnN0IGlkID0gZmlyc3REZWZpbmVkKHRhc2tGYW1pbHlJZCwgcmVjb3JkLmlkKVxuICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCB8fCBTdHJpbmcoaWQpID09PSAnJykgcmV0dXJuIG51bGxcbiAgY29uc3QgdGl0bGUgPSBmaXJzdERlZmluZWQocmVjb3JkLnRpdGxlLCByZWNvcmQubmFtZSkgPz8gJydcbiAgY29uc3QgcHJvamVjdE5hbWUgPSBmaXJzdERlZmluZWQocmVjb3JkLnByb2plY3Q/Lm5hbWUsIHJlY29yZC5mYXRoZXI/LnRpdGxlKSA/PyBudWxsXG4gIGNvbnN0IGhhc0ZhdGhlciA9ICEhZmlyc3REZWZpbmVkKHJlY29yZC50YXNrRmF0aGVyLCByZWNvcmQuZmF0aGVyPy5pZClcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICB0aXRsZSxcbiAgICB0eXBlOiBoYXNGYXRoZXIgPyAnc3VidGFzaycgOiAndGFzaycsXG4gICAgcHJvamVjdE5hbWUsXG4gIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplUHJvamVjdHNGYWxsYmFja1JlY29yZCA9IChyZWNvcmQ6IEZhbGxiYWNrUHJvamVjdFJlY29yZCk6IFJhd1NlYXJjaFJlc3VsdCB8IG51bGwgPT4ge1xuICBjb25zdCB7IGlkIH0gPSByZWNvcmRcbiAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwgfHwgU3RyaW5nKGlkKSA9PT0gJycpIHJldHVybiBudWxsXG4gIGNvbnN0IHRpdGxlID0gcmVjb3JkLm5hbWUgPz8gJydcbiAgY29uc3QgY2xpZW50SWQgPSBmaXJzdERlZmluZWQocmVjb3JkLmNsaWVudElkLCByZWNvcmQuY2xpZW50Py5pZCkgPz8gbnVsbFxuICBjb25zdCBjbGllbnROYW1lID0gcmVjb3JkLmNsaWVudD8ubmFtZSA/PyBudWxsXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogJ3Byb2plY3QnLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gIH1cbn1cblxuY29uc3QgbWFwU2VhcmNoVG9JdGVtID0gKFxuICByOiBSYXdTZWFyY2hSZXN1bHQsXG4gIHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLFxuICBzZWFyY2hWYWx1ZTogc3RyaW5nLFxuICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPSB0cnVlXG4pOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBwcmltYXJ5ID0gci50aXRsZSB8fCByLnByb2plY3ROYW1lIHx8ICcnXG4gIGxldCBwYXJlbnQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcGFyZW50ID0gci5jbGllbnROYW1lXG4gIGVsc2UgaWYgKHR5cGUgPT09ICd0YXNrJykgcGFyZW50ID0gdW5kZWZpbmVkXG4gIGVsc2UgcGFyZW50ID0gci5wcm9qZWN0TmFtZSA/PyByLmNsaWVudE5hbWVcblxuICBjb25zdCBmYXRoZXIgPSB0eXBlID09PSAndGFzaycgPyByLmZhdGhlciA6IG51bGxcbiAgY29uc3QgaGFzRmF0aGVyID0gdHlwZSA9PT0gJ3Rhc2snICYmIGZhdGhlciAhPSBudWxsICYmIGZhdGhlci5pZCAhPSBudWxsICYmIFN0cmluZyhmYXRoZXIuaWQpLmxlbmd0aCA+IDBcblxuICBjb25zdCB0YXNrUHJvamVjdE5hbWUgPSB0eXBlID09PSAndGFzaycgJiYgIXNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA/IG51bGwgOiAoci5wcm9qZWN0TmFtZSA/PyBudWxsKVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHIuaWQsXG4gICAgdHlwZSxcbiAgICBwcmltYXJ5LFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICBicmVhZGNydW1iOiBwYXJlbnQgPyB7IHBhcmVudCB9IDogdW5kZWZpbmVkLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgY2xpZW50SWQ6IHIuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIGNsaWVudE5hbWU6IHIuY2xpZW50TmFtZSA/PyBudWxsLFxuICAgICAgcHJvamVjdE5hbWU6IHRhc2tQcm9qZWN0TmFtZSxcbiAgICAgIGZlZUlkOiByLmZlZUlkID8/IG51bGwsXG4gICAgICBmYXRoZXJJZDogaGFzRmF0aGVyID8gZmF0aGVyLmlkIDogbnVsbCxcbiAgICAgIGZhdGhlclRpdGxlOiBoYXNGYXRoZXIgPyBmYXRoZXIudGl0bGU/LnRyaW0oKSB8fCBudWxsIDogbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IGZvcm1hdE1jcFByaW1hcnlMYWJlbCA9IChzbHVnOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc2x1Zy5yZXBsYWNlKC9fL2csICcgJykucmVwbGFjZSgvXFxiXFx3L2csIGNoYXIgPT4gY2hhci50b1VwcGVyQ2FzZSgpKVxuXG5jb25zdCBtYXBNY3BTbHVnc1RvSXRlbXMgPSAoc2x1Z3M6IHN0cmluZ1tdLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtW10gPT4ge1xuICBjb25zdCBxID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgbGV0IGZpbHRlcmVkID0gc2x1Z3NcbiAgaWYgKHEpIHtcbiAgICBmaWx0ZXJlZCA9IHNsdWdzLmZpbHRlcihzID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwocylcbiAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHwgcHJpbWFyeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZmlsdGVyZWQubWFwKHNsdWcgPT4ge1xuICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwoc2x1ZylcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNsdWcsXG4gICAgICB0eXBlOiAnbWNwJyBhcyBjb25zdCxcbiAgICAgIHByaW1hcnksXG4gICAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgICByYXc6IHtcbiAgICAgICAgaWQ6IHNsdWcsXG4gICAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICB9LFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUVudGl0eVNlYXJjaCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSkgPT4ge1xuICBjb25zdCBjb3JVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUylcblxuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPENvbnRleHRNZW50aW9uSXRlbVtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoaWRlUmVjZW50c0xhYmVsLCBzZXRIaWRlUmVjZW50c0xhYmVsXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKHNjb3BlPy5tY3BTbHVncyA/PyBbXSkuam9pbignfCcpXG4gIGNvbnN0IHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHNjb3BlPy5hZ2VudEVudGl0eSAhPT0gJ3Byb2plY3QnXG5cbiAgLy8gRXN0YWJpbGl6YW1vcyBlbCBzY29wZSBwYXJhIG5vIGRpc3BhcmFyIGZldGNocyBwb3IgY2FtYmlvcyBkZSBpZGVudGlkYWQgZGUgb2JqZXRvLlxuICBjb25zdCBzdGFibGVTY29wZSA9IHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7XG4gICAgICBjbGllbnRJZDogc2NvcGU/LmNsaWVudElkID8/IG51bGwsXG4gICAgICBwcm9qZWN0SWQ6IHNjb3BlPy5wcm9qZWN0SWQgPz8gbnVsbCxcbiAgICAgIG1jcFNsdWdzOiBzY29wZT8ubWNwU2x1Z3MgPz8gW10sXG4gICAgICBhZ2VudEVudGl0eTogc2NvcGU/LmFnZW50RW50aXR5ID8/IG51bGwsXG4gICAgfSksXG4gICAgW3Njb3BlPy5jbGllbnRJZCwgc2NvcGU/LnByb2plY3RJZCwgbWNwU2x1Z3NLZXksIHNjb3BlPy5hZ2VudEVudGl0eV1cbiAgKVxuXG4gIC8vIC0tLSBTZWFyY2g6IHByb2plY3QgfCB0YXNrIChHcmFwaFFMOiBzZWFyY2gpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hFbnRpdGllcywgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBzZWFyY2hMb2FkaW5nLCBlcnJvcjogc2VhcmNoRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hFbnRpdGllc0RhdGE+KFNFQVJDSF9FTlRJVElFUywge1xuICAgICAgdmFyaWFibGVzOiB7IGxpbWl0OiAyMCB9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogY2xpZW50IChHcmFwaFFMKSAtLS1cbiAgY29uc3QgW2ZldGNoU2VhcmNoQ2xpZW50cywgeyBkYXRhOiBjbGllbnRzRGF0YSwgbG9hZGluZzogY2xpZW50c0xvYWRpbmcsIGVycm9yOiBjbGllbnRzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxTZWFyY2hDbGllbnRzRGF0YT4oU0VBUkNIX0NMSUVOVFMsIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIC8vIC0tLSBTZWFyY2g6IHVzZXIgKEdyYXBoUUw6IHVzZXJzRGlyZWN0b3J5KSAtLS1cbiAgY29uc3QgW2ZldGNoVXNlcnNEaXJlY3RvcnksIHsgZGF0YTogdXNlcnNEYXRhLCBsb2FkaW5nOiB1c2Vyc0xvYWRpbmcsIGVycm9yOiB1c2Vyc0Vycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8VXNlcnNEaXJlY3RvcnlEYXRhPihVU0VSU19ESVJFQ1RPUlksIHtcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIGNvbnN0IFtmZXRjaFRhc2tGYW1pbHlGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8VGFza0ZhbWlseURhdGE+KFRBU0tfRkFNSUxZX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IFtmZXRjaFByb2plY3RzRmFsbGJhY2tdID0gdXNlTGF6eVF1ZXJ5PFByb2plY3RzRmFsbGJhY2tEYXRhPihQUk9KRUNUU19GQUxMQkFDSywge1xuICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlY2VudCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgJycpKVxuICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRDbGllbnRzKClcbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRQcm9qZWN0cyhzdGFibGVTY29wZS5jbGllbnRJZCA/IHsgY2xpZW50SWQ6IHN0YWJsZVNjb3BlLmNsaWVudElkIH0gOiB1bmRlZmluZWQpXG4gICAgICAgIGxldCBtYXBwZWQgPSAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSkubWFwKHAgPT5cbiAgICAgICAgICBtYXBTZWFyY2hUb0l0ZW0oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3Byb2plY3QnLFxuICAgICAgICAgICAgICBjbGllbnRJZDogcC5jbGllbnRJZCxcbiAgICAgICAgICAgICAgZmVlSWQ6IHAuZmVlSWQsXG4gICAgICAgICAgICAgIGNsaWVudE5hbWU6IHAuY2xpZW50TmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAncHJvamVjdCcsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50c0ZpbHRlciA9XG4gICAgICAgICAgICBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSAnJ1xuICAgICAgICAgICAgICA/IHsgY2xpZW50X2lkOiBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV0gfVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmFsbGJhY2tEYXRhIH0gPSBhd2FpdCBmZXRjaFByb2plY3RzRmFsbGJhY2soe1xuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIC4uLihhcmd1bWVudHNGaWx0ZXIgPyB7IGFyZ3VtZW50czogYXJndW1lbnRzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTWFwcGVkID0gKGZhbGxiYWNrRGF0YT8ucHJvamVjdHM/LmRhdGEgPz8gW10pXG4gICAgICAgICAgICAubWFwKG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQpXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYXdTZWFyY2hSZXN1bHQgPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBtYXBTZWFyY2hUb0l0ZW0oaXRlbSwgJ3Byb2plY3QnLCAnJykpXG4gICAgICAgICAgbWFwcGVkID0gZmFsbGJhY2tNYXBwZWRcbiAgICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbGxiYWNrTWFwcGVkLmxlbmd0aCA+IDApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBzZXRJdGVtcyhtYXBwZWQpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBsZXQgcmVjZW50VGFza0ZpbHRlcnM6IHsgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDsgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIH0gfCB1bmRlZmluZWRcbiAgICAgICAgaWYgKHN0YWJsZVNjb3BlLmFnZW50RW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgICByZWNlbnRUYXNrRmlsdGVycyA9IHsgcHJvamVjdElkOiBzdGFibGVTY29wZS5wcm9qZWN0SWQgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YWJsZVNjb3BlLmFnZW50RW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgICAgICAgIHJlY2VudFRhc2tGaWx0ZXJzID0geyBjbGllbnRJZDogc3RhYmxlU2NvcGUuY2xpZW50SWQgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRUYXNrcyhyZWNlbnRUYXNrRmlsdGVycylcbiAgICAgICAgbGV0IHRhc2tJdGVtcyA9IChkYXRhID8/IFtdKS5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBpZiAodGFza0l0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge31cbiAgICAgICAgICBpZiAoc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpbHRlci5wcm9qZWN0SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5wcm9qZWN0SWQpXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpbHRlci5jbGllbnRJZHMgPSBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBkYXRhOiBmYWxsYmFja0RhdGEgfSA9IGF3YWl0IGZldGNoVGFza0ZhbWlseUZhbGxiYWNrKHtcbiAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPiAwID8geyBmaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgICAgcGFnaW5hdGlvbjogeyBvZmZzZXQ6IDAsIHNpemU6IDIwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGFza0l0ZW1zID0gKGZhbGxiYWNrRGF0YT8udGFza0ZhbWlseT8uZGF0YSA/PyBbXSlcbiAgICAgICAgICAgIC5tYXAobm9ybWFsaXplVGFza0ZhbWlseVJlY29yZClcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFJlY2VudFRhc2tJdGVtID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgICAgICAubWFwKHRhc2sgPT4gbWFwUmVjZW50VGFza1RvSXRlbSh0YXNrLCAnJywgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSlcbiAgICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKHRhc2tJdGVtcy5sZW5ndGggPiAwKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgc2V0SXRlbXModGFza0l0ZW1zKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKCcnKSxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGE/LnVzZXJzRGlyZWN0b3J5Py5kYXRhID8/IFtdKS5tYXAodSA9PiBtYXBVc2VyVG9JdGVtKHUsICcnKSlcbiAgICAgICAgY29uc3QgbWVJdGVtID0gbWFwQ29yVXNlclRvVXNlckl0ZW0oY29yVXNlciwgJycsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXG4gICAgICAgIGNvbnN0IHdpdGhvdXRNZSA9IG1hcHBlZC5maWx0ZXIoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkgIT09IFN0cmluZyhtZUl0ZW0uaWQpKVxuICAgICAgICBzZXRJdGVtcyhbbWVJdGVtLCAuLi53aXRob3V0TWVdKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SXRlbXMoW10pXG4gICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SXRlbXMoW10pXG4gICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW1xuICAgIHR5cGUsXG4gICAgc3RhYmxlU2NvcGUsXG4gICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICAgIGNvclVzZXIsXG4gICAgdCxcbiAgXSlcblxuICAvLyBEaXNwYXJhciBzZWFyY2ggYWwgY2FtYmlhciBkZWJvdW5jZWQgdmFsdWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG5cbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgcSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXEpIHJldHVyblxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXI6IHsgbmFtZTogcSB9LFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMocSksXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBidWlsZEZpbHRlcnNGb3JUeXBlKHR5cGUpXG4gICAgICBjb25zdCBleHRyYSA9IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSh0eXBlLCBzdGFibGVTY29wZSlcbiAgICAgIGZldGNoU2VhcmNoRW50aXRpZXMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBxLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgLi4uKGV4dHJhICE9PSB1bmRlZmluZWQgPyB7IGV4dHJhIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCB0eXBlLCBzdGFibGVTY29wZSwgZmV0Y2hTZWFyY2hFbnRpdGllcywgZmV0Y2hTZWFyY2hDbGllbnRzLCBmZXRjaFVzZXJzRGlyZWN0b3J5XSlcblxuICAvLyBTaW5jcm9uaXphciByZXN1bHRhZG9zIGRlIHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnbWNwJykgcmV0dXJuXG5cbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG4gICAgaWYgKCFxKSByZXR1cm5cbiAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBzZXRMb2FkaW5nKGNsaWVudHNMb2FkaW5nKVxuICAgICAgaWYgKGNsaWVudHNFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChjbGllbnRzRGF0YT8uY2xpZW50cz8uZGF0YSkge1xuICAgICAgICBzZXRJdGVtcyhjbGllbnRzRGF0YS5jbGllbnRzLmRhdGEubWFwKGMgPT4gbWFwQ2xpZW50VG9JdGVtKGMsIHEpKSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIHNldExvYWRpbmcodXNlcnNMb2FkaW5nKVxuICAgICAgaWYgKHVzZXJzRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAodXNlcnNEYXRhPy51c2Vyc0RpcmVjdG9yeT8uZGF0YSkge1xuICAgICAgICBzZXRJdGVtcyh1c2Vyc0RhdGEudXNlcnNEaXJlY3RvcnkuZGF0YS5tYXAodSA9PiBtYXBVc2VyVG9JdGVtKHUsIHEpKSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldExvYWRpbmcoc2VhcmNoTG9hZGluZylcbiAgICAgIGlmIChzZWFyY2hFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hEYXRhPy5zZWFyY2gpIHtcbiAgICAgICAgc2V0SXRlbXMoc2VhcmNoRGF0YS5zZWFyY2gubWFwKHIgPT4gbWFwU2VhcmNoVG9JdGVtKHIsIHR5cGUsIHEsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzZWFyY2hEYXRhLFxuICAgIGNsaWVudHNEYXRhLFxuICAgIHVzZXJzRGF0YSxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGNsaWVudHNMb2FkaW5nLFxuICAgIHVzZXJzTG9hZGluZyxcbiAgICBzZWFyY2hFcnJvcixcbiAgICBjbGllbnRzRXJyb3IsXG4gICAgdXNlcnNFcnJvcixcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICB0eXBlLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgXSlcblxuICAvLyBDdWFuZG8gc2UgbGltcGlhIGVsIHNlYXJjaCwgdm9sdmVyIGEgcmVjZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICBmZXRjaFJlY2VudCgpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIGZldGNoUmVjZW50XSlcblxuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZTogc2V0U2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hSZWNlbnQsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLFNBQVNBLFlBQVksUUFBUSxnQkFBZ0I7QUFDN0MsU0FBU0MsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsaURBQWlEO0FBQ2xGLFNBQVNDLGlCQUFpQixRQUFRLG1EQUFtRDtBQUNyRixTQUFT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
|