@projectcor/maia-components 2.11.66-6 → 2.11.66-8
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/components/atoms/Chip/Chip.js +50 -15
- package/lib/components/atoms/Chip/styles.js +9 -5
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +5 -9
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +2 -4
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +8 -35
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +28 -37
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +42 -30
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
- package/lib/components/atoms/MAIAInput/MAIAInput.js +33 -15
- package/lib/components/atoms/icons/MAIAIsologo.js +2 -5
- package/lib/components/atoms/icons/index.js +1 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +2 -19
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +298 -48
- package/lib/components/molecules/ChatAIHome/styles.js +63 -26
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +57 -150
- package/lib/components/molecules/ChatAIMessages/newStyles.js +20 -11
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +224 -80
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +27 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +18 -18
- package/lib/components/molecules/ChatAIModal/constants.js +2 -6
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +28 -123
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +41 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.js +76 -20
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +22 -7
- package/lib/components/molecules/ChatFooter/styles.js +11 -2
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
- package/lib/components/molecules/Sidebar/Sidebar.js +21 -66
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +26 -40
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +7 -10
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +1 -8
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/config.js +1 -4
- package/lib/constants/maiaTaskPanelAccess.js +7 -5
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/constants/taskLinkIcon.js +6 -15
- package/lib/constants/taskUrls.js +3 -1
- package/lib/context/global-context.js +8 -1
- package/lib/hooks/index.js +2 -1
- package/lib/hooks/useChatManager/useChatManager.js +149 -125
- package/lib/hooks/useChatMessages/useChatMessages.js +34 -5
- package/lib/hooks/useContextMentions.js +15 -60
- package/lib/hooks/useContextPinPopover.js +235 -0
- package/lib/hooks/useEntitySearch.js +96 -337
- package/lib/hooks/useEvent.js +3 -4
- package/lib/hooks/useFrequentlyAskedQuestions.js +12 -10
- package/lib/hooks/useFrequentlyUsedActions.js +5 -3
- package/lib/hooks/useMentionAllowedTypes.js +16 -41
- package/lib/hooks/useMentionPopover.js +49 -54
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +27 -18
- package/lib/hooks/useProjectSearch.js +4 -28
- package/lib/hooks/useProjectSummaryConfig.js +74 -4
- package/lib/hooks/useRecentClientsSearch.js +4 -34
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +24 -16
- package/lib/lang/br/index.js +32 -60
- package/lib/lang/en/index.js +32 -60
- package/lib/lang/es/index.js +32 -60
- package/lib/lang/fr/index.js +32 -60
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +6 -3
- package/lib/services/maia/Agents/getAgents.js +199 -223
- package/lib/services/maia/Chats/getChatMessages.js +34 -6
- package/lib/services/maia/Chats/getChatsByUserId.js +10 -2
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +6 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +21 -5
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/agent.js +1 -1
- package/lib/types/contextMention.js +1 -1
- package/lib/utils/agentDisplayName.js +11 -19
- package/lib/utils/contextMentionIcons.js +16 -35
- package/lib/utils/entityLinkRender.js +132 -0
- package/lib/utils/hitlAnalytics.js +5 -6
- package/lib/utils/renderContextMentions.js +6 -9
- package/package.json +1 -1
- package/lib/components/atoms/icons/SkillIcon.js +0 -30
- package/lib/components/atoms/icons/SkillsNavIcon.js +0 -27
- package/lib/components/atoms/icons/TaskLinkIcon.js +0 -27
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +0 -357
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +0 -145
- package/lib/components/molecules/ChatAIMySkills/index.js +0 -2
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +0 -160
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +0 -34
- package/lib/components/organisms/AbmSkillGenerateModal/index.js +0 -2
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +0 -446
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +0 -98
- package/lib/components/organisms/AbmSkillModal/index.js +0 -2
- package/lib/services/maia/Skills/createSkill.js +0 -39
- package/lib/services/maia/Skills/deleteSkill.js +0 -38
- package/lib/services/maia/Skills/generateSkill.js +0 -41
- package/lib/services/maia/Skills/getSkills.js +0 -90
- package/lib/services/maia/Skills/updateSkill.js +0 -39
- package/lib/types/skill.js +0 -2
- package/lib/utils/contextMentionTriggers.js +0 -53
- package/lib/utils/corConnectorMentionTypes.js +0 -37
- package/lib/utils/normalizeAgentConnectors.js +0 -32
|
@@ -62,9 +62,7 @@ var detectMentionTrigger = function detectMentionTrigger(editorEl, range) {
|
|
|
62
62
|
anchor: null
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
|
-
var
|
|
66
|
-
var queryStart = hasSlashSuffix ? runEnd + 2 : runEnd + 1;
|
|
67
|
-
var query = text.slice(queryStart, caret);
|
|
65
|
+
var query = text.slice(runEnd + 1, caret);
|
|
68
66
|
if (/\n|\r/.test(query)) {
|
|
69
67
|
return {
|
|
70
68
|
active: false,
|
|
@@ -84,7 +82,7 @@ var detectMentionTrigger = function detectMentionTrigger(editorEl, range) {
|
|
|
84
82
|
return {
|
|
85
83
|
active: true,
|
|
86
84
|
query: query,
|
|
87
|
-
atRunLength:
|
|
85
|
+
atRunLength: atRunLength,
|
|
88
86
|
anchor: {
|
|
89
87
|
node: node,
|
|
90
88
|
offset: runStart
|
|
@@ -232,8 +230,7 @@ export var useContextMentions = function useContextMentions() {
|
|
|
232
230
|
* Ej.: `@@abc` -> `@abc` al cambiar de tab.
|
|
233
231
|
*/
|
|
234
232
|
var syncTriggerAtRunLength = useCallback(function (nextAtRunLength) {
|
|
235
|
-
var
|
|
236
|
-
var safeNext = Math.max(1, Math.floor(Math.abs(nextAtRunLength)));
|
|
233
|
+
var safeNext = Math.max(1, Math.floor(nextAtRunLength));
|
|
237
234
|
var current = detectTrigger();
|
|
238
235
|
if (!current.active || !current.anchor) return;
|
|
239
236
|
var _current$anchor = current.anchor,
|
|
@@ -242,57 +239,18 @@ export var useContextMentions = function useContextMentions() {
|
|
|
242
239
|
if (node.nodeType !== Node.TEXT_NODE) return;
|
|
243
240
|
var textNode = node;
|
|
244
241
|
var full = textNode.data;
|
|
245
|
-
var
|
|
246
|
-
var currentHasSlash = current.atRunLength < 0;
|
|
247
|
-
var queryLen = currentRunLen + (currentHasSlash ? 1 : 0) + current.query.length;
|
|
242
|
+
var queryLen = current.atRunLength + current.query.length;
|
|
248
243
|
var before = full.slice(0, offset);
|
|
249
244
|
var after = full.slice(offset + queryLen);
|
|
250
|
-
var nextRun =
|
|
251
|
-
var
|
|
252
|
-
var nextValue = "".concat(before).concat(nextRun).concat(cleanQuery).concat(after);
|
|
245
|
+
var nextRun = '@'.repeat(safeNext);
|
|
246
|
+
var nextValue = "".concat(before).concat(nextRun).concat(current.query).concat(after);
|
|
253
247
|
|
|
254
248
|
// eslint-disable-next-line no-param-reassign
|
|
255
249
|
textNode.data = nextValue;
|
|
256
250
|
var selection = window.getSelection();
|
|
257
251
|
if (selection) {
|
|
258
252
|
var range = document.createRange();
|
|
259
|
-
var caretOffset = before.length + nextRun.length +
|
|
260
|
-
range.setStart(textNode, Math.min(caretOffset, textNode.data.length));
|
|
261
|
-
range.collapse(true);
|
|
262
|
-
selection.removeAllRanges();
|
|
263
|
-
selection.addRange(range);
|
|
264
|
-
}
|
|
265
|
-
var updated = detectTrigger();
|
|
266
|
-
setTrigger(updated);
|
|
267
|
-
}, [detectTrigger]);
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Convierte el trigger `@{n}query` activo en `@/query`.
|
|
271
|
-
* Se usa al cambiar a la tab de skills (cuyo trigger es `@/`).
|
|
272
|
-
*/
|
|
273
|
-
var syncSkillTrigger = useCallback(function () {
|
|
274
|
-
var current = detectTrigger();
|
|
275
|
-
if (!current.active || !current.anchor) return;
|
|
276
|
-
var _current$anchor2 = current.anchor,
|
|
277
|
-
node = _current$anchor2.node,
|
|
278
|
-
offset = _current$anchor2.offset;
|
|
279
|
-
if (node.nodeType !== Node.TEXT_NODE) return;
|
|
280
|
-
var textNode = node;
|
|
281
|
-
var full = textNode.data;
|
|
282
|
-
var currentRunLen = Math.abs(current.atRunLength);
|
|
283
|
-
var currentHasSlash = current.atRunLength < 0;
|
|
284
|
-
var queryLen = currentRunLen + (currentHasSlash ? 1 : 0) + current.query.length;
|
|
285
|
-
var before = full.slice(0, offset);
|
|
286
|
-
var after = full.slice(offset + queryLen);
|
|
287
|
-
var cleanQuery = current.query.startsWith('/') ? current.query.slice(1) : current.query;
|
|
288
|
-
var nextValue = "".concat(before, "@/").concat(cleanQuery).concat(after);
|
|
289
|
-
|
|
290
|
-
// eslint-disable-next-line no-param-reassign
|
|
291
|
-
textNode.data = nextValue;
|
|
292
|
-
var selection = window.getSelection();
|
|
293
|
-
if (selection) {
|
|
294
|
-
var range = document.createRange();
|
|
295
|
-
var caretOffset = before.length + 2 + cleanQuery.length;
|
|
253
|
+
var caretOffset = before.length + nextRun.length + current.query.length;
|
|
296
254
|
range.setStart(textNode, Math.min(caretOffset, textNode.data.length));
|
|
297
255
|
range.collapse(true);
|
|
298
256
|
selection.removeAllRanges();
|
|
@@ -309,14 +267,12 @@ export var useContextMentions = function useContextMentions() {
|
|
|
309
267
|
var replaceTriggerWithChip = useCallback(function (chipNode, mention) {
|
|
310
268
|
var current = detectTrigger();
|
|
311
269
|
if (!current.active || !current.anchor) return;
|
|
312
|
-
var _current$
|
|
313
|
-
node = _current$
|
|
314
|
-
offset = _current$
|
|
270
|
+
var _current$anchor2 = current.anchor,
|
|
271
|
+
node = _current$anchor2.node,
|
|
272
|
+
offset = _current$anchor2.offset;
|
|
315
273
|
var textNode = node;
|
|
316
274
|
var full = textNode.data;
|
|
317
|
-
var
|
|
318
|
-
var currentHasSlash = current.atRunLength < 0;
|
|
319
|
-
var queryLen = currentRunLen + (currentHasSlash ? 1 : 0) + current.query.length;
|
|
275
|
+
var queryLen = current.atRunLength + current.query.length;
|
|
320
276
|
var after = full.slice(offset + queryLen);
|
|
321
277
|
|
|
322
278
|
// Truncar el texto hasta antes del run de `@…`
|
|
@@ -349,9 +305,9 @@ export var useContextMentions = function useContextMentions() {
|
|
|
349
305
|
var replaceTriggerWithSlashChip = useCallback(function (chipNode, slashCommand) {
|
|
350
306
|
var current = detectSlash();
|
|
351
307
|
if (!current.active || !current.anchor) return;
|
|
352
|
-
var _current$
|
|
353
|
-
node = _current$
|
|
354
|
-
offset = _current$
|
|
308
|
+
var _current$anchor3 = current.anchor,
|
|
309
|
+
node = _current$anchor3.node,
|
|
310
|
+
offset = _current$anchor3.offset;
|
|
355
311
|
var textNode = node;
|
|
356
312
|
var full = textNode.data;
|
|
357
313
|
var triggerLen = 1 + current.query.length;
|
|
@@ -445,7 +401,6 @@ export var useContextMentions = function useContextMentions() {
|
|
|
445
401
|
updateTrigger: updateTrigger,
|
|
446
402
|
closeTrigger: closeTrigger,
|
|
447
403
|
syncTriggerAtRunLength: syncTriggerAtRunLength,
|
|
448
|
-
syncSkillTrigger: syncSkillTrigger,
|
|
449
404
|
replaceTriggerWithChip: replaceTriggerWithChip,
|
|
450
405
|
slashTrigger: slashTrigger,
|
|
451
406
|
updateSlashTrigger: updateSlashTrigger,
|
|
@@ -456,4 +411,4 @@ export var useContextMentions = function useContextMentions() {
|
|
|
456
411
|
focus: focus
|
|
457
412
|
};
|
|
458
413
|
};
|
|
459
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdE1lbnRpb25UcmlnZ2VyIiwiZWRpdG9yRWwiLCJyYW5nZSIsImNvbnRhaW5zIiwic3RhcnRDb250YWluZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHQiLCJkYXRhIiwiY2FyZXQiLCJzdGFydE9mZnNldCIsImkiLCJydW5FbmQiLCJydW5TdGFydCIsInByZXYiLCJjaGFyQXQiLCJpc0JvdW5kYXJ5IiwidGVzdCIsImhhc1NsYXNoU3VmZml4IiwicXVlcnlTdGFydCIsInNsaWNlIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJkZXRlY3RTbGFzaFRyaWdnZXIiLCJzbGFzaEluZGV4IiwidXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidHJpZ2dlciIsInNldFRyaWdnZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNsYXNoVHJpZ2dlciIsInNldFNsYXNoVHJpZ2dlciIsImRldGVjdFRyaWdnZXIiLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiY3VycmVudCIsImdldFJhbmdlQXQiLCJkZXRlY3RTbGFzaCIsInVwZGF0ZVRyaWdnZXIiLCJuZXh0IiwiY2xvc2VUcmlnZ2VyIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwiY2xvc2VTbGFzaFRyaWdnZXIiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwibmV4dEF0UnVuTGVuZ3RoIiwibmV4dEhhc1NsYXNoIiwic2FmZU5leHQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJhYnMiLCJfY3VycmVudCRhbmNob3IiLCJ0ZXh0Tm9kZSIsImZ1bGwiLCJjdXJyZW50UnVuTGVuIiwiY3VycmVudEhhc1NsYXNoIiwicXVlcnlMZW4iLCJsZW5ndGgiLCJiZWZvcmUiLCJhZnRlciIsIm5leHRSdW4iLCJjb25jYXQiLCJyZXBlYXQiLCJjbGVhblF1ZXJ5Iiwic3RhcnRzV2l0aCIsIm5leHRWYWx1ZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJjYXJldE9mZnNldCIsInNldFN0YXJ0IiwibWluIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVwZGF0ZWQiLCJzeW5jU2tpbGxUcmlnZ2VyIiwiX2N1cnJlbnQkYW5jaG9yMiIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJjaGlwTm9kZSIsIm1lbnRpb24iLCJfY3VycmVudCRhbmNob3IzIiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwiaWQiLCJ0eXBlIiwibGFiZWwiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwic3BhY2VOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsInJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCIsInNsYXNoQ29tbWFuZCIsIl9jdXJyZW50JGFuY2hvcjQiLCJ0cmlnZ2VyTGVuIiwic2VyaWFsaXplIiwiZWwiLCJtZW50aW9ucyIsInNsYXNoQ29tbWFuZHMiLCJ3YWxrIiwiRUxFTUVOVF9OT0RFIiwiX2VsTm9kZSRkYXRhc2V0IiwiX2VsTm9kZSRkYXRhc2V0MiIsImVsTm9kZSIsImRhdGFzZXQiLCJfZWxOb2RlJGRhdGFzZXQkbWVudGkiLCJfcmVmIiwiX3JlZjIiLCJfZWxOb2RlJGRhdGFzZXQkbWVudGkyIiwibWVudGlvbklkIiwibWVudGlvblR5cGUiLCJtZW50aW9uTGFiZWwiLCJ0ZXh0Q29udGVudCIsInB1c2giLCJfZWxOb2RlJGRhdGFzZXQkc2xhc2giLCJfcmVmMyIsIl9lbE5vZGUkZGF0YXNldCRzbGFzaDIiLCJfZWxOb2RlJHRleHRDb250ZW50Iiwic2xhc2giLCJzbGFzaElkIiwic2xhc2hMYWJlbCIsInJlcGxhY2UiLCJ0YWdOYW1lIiwiY2hpbGROb2RlcyIsImZvckVhY2giLCJjbGVhciIsImlubmVySFRNTCIsImZvY3VzIiwiX2VkaXRvclJlZiRjdXJyZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IHNlcmlhbGl6ZU1lbnRpb24gfSBmcm9tICcuLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5pbXBvcnQgeyBzZXJpYWxpemVTbGFzaENvbW1hbmQgfSBmcm9tICcuLi91dGlscy9zbGFzaENvbW1hbmRNYXJrZXInXG5pbXBvcnQgdHlwZSB7IFNsYXNoQ29tbWFuZENoaXBEYXRhIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmRDaGlwL2J1aWxkU2xhc2hDaGlwRWxlbWVudCdcblxuZXhwb3J0IHR5cGUgTWVudGlvblRyaWdnZXJTdGF0ZSA9IHtcbiAgYWN0aXZlOiBib29sZWFuXG4gIHF1ZXJ5OiBzdHJpbmdcbiAgLyoqIENhbnRpZGFkIGRlIGBAYCBjb25zZWN1dGl2b3MgZGVsIHRyaWdnZXIgKGBAYCDihpIgMSwgYEBAYCDihpIgMikuIE1hcGVhIGEgbGEgdGFiIGVuIG9yZGVuLiAqL1xuICBhdFJ1bkxlbmd0aDogbnVtYmVyXG4gIC8qKiBQb3NpY2nDs24gZGVsIHByaW1lciBgQGAgZGVsIHJ1biAocmVlbXBsYXpvIGRlbCBjaGlwKS4gKi9cbiAgYW5jaG9yOiB7IG5vZGU6IE5vZGU7IG9mZnNldDogbnVtYmVyIH0gfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFNsYXNoVHJpZ2dlclN0YXRlID0ge1xuICBhY3RpdmU6IGJvb2xlYW5cbiAgcXVlcnk6IHN0cmluZ1xuICBhbmNob3I6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGxcbn1cblxuLyoqXG4gKiBJbnNwZWNjaW9uYSBsYSBzZWxlY2Npw7NuIGFjdHVhbC4gRm9ybWF0bzogW2zDrW1pdGUgZGUgcGFsYWJyYV0gQCsgcXVlcnkgaGFzdGEgZWwgY2FyZXQuXG4gKiBQZXJtaXRlIGVzcGFjaW9zIHNpbXBsZXMgZGVudHJvIGRlbCBxdWVyeSAocC4gZWouIFwiQEp1YW4gUGVyZXpcIikgeSBjaWVycmFcbiAqIGVsIHRyaWdnZXIgY3VhbmRvIGRldGVjdGEgZG9zIGVzcGFjaW9zIGNvbnNlY3V0aXZvcy5cbiAqIExhIHRhYiBvYmpldGl2byBlcyBsYSBxdWUgY29ycmVzcG9uZGUgYWwgbsO6bWVybyBkZSBgQGAgKDEgPSBwcmltZXJhIHRhYiB2aXNpYmxlLCBldGMuKS5cbiAqL1xuY29uc3QgZGV0ZWN0TWVudGlvblRyaWdnZXIgPSAoZWRpdG9yRWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgcmFuZ2U6IFJhbmdlKTogTWVudGlvblRyaWdnZXJTdGF0ZSA9PiB7XG4gIGlmICghZWRpdG9yRWwgfHwgIWVkaXRvckVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3QgdGV4dCA9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgY29uc3QgY2FyZXQgPSByYW5nZS5zdGFydE9mZnNldFxuICBsZXQgaSA9IGNhcmV0IC0gMVxuICBpZiAoaSA8IDApIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgd2hpbGUgKGkgPj0gMCAmJiB0ZXh0W2ldICE9PSAnQCcpIGkgLT0gMVxuICBpZiAoaSA8IDAgfHwgdGV4dFtpXSAhPT0gJ0AnKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHJ1bkVuZCA9IGlcbiAgd2hpbGUgKGkgPj0gMCAmJiB0ZXh0W2ldID09PSAnQCcpIHtcbiAgICBpIC09IDFcbiAgfVxuICBjb25zdCBydW5TdGFydCA9IGkgKyAxXG4gIGNvbnN0IGF0UnVuTGVuZ3RoID0gcnVuRW5kIC0gcnVuU3RhcnQgKyAxXG4gIGNvbnN0IHByZXYgPSBydW5TdGFydCA+IDAgPyB0ZXh0LmNoYXJBdChydW5TdGFydCAtIDEpIDogJydcbiAgY29uc3QgaXNCb3VuZGFyeSA9ICFwcmV2IHx8IC9bXFxzKFt7XS8udGVzdChwcmV2KVxuICBpZiAoIWlzQm91bmRhcnkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgaGFzU2xhc2hTdWZmaXggPSB0ZXh0W3J1bkVuZCArIDFdID09PSAnLydcbiAgY29uc3QgcXVlcnlTdGFydCA9IGhhc1NsYXNoU3VmZml4ID8gcnVuRW5kICsgMiA6IHJ1bkVuZCArIDFcbiAgY29uc3QgcXVlcnkgPSB0ZXh0LnNsaWNlKHF1ZXJ5U3RhcnQsIGNhcmV0KVxuICBpZiAoL1xcbnxcXHIvLnRlc3QocXVlcnkpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBpZiAocXVlcnkuaW5jbHVkZXMoJyAgJykpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgcXVlcnksXG4gICAgYXRSdW5MZW5ndGg6IGhhc1NsYXNoU3VmZml4ID8gLWF0UnVuTGVuZ3RoIDogYXRSdW5MZW5ndGgsXG4gICAgYW5jaG9yOiB7IG5vZGUsIG9mZnNldDogcnVuU3RhcnQgfSxcbiAgfVxufVxuXG5jb25zdCBkZXRlY3RTbGFzaFRyaWdnZXIgPSAoZWRpdG9yRWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgcmFuZ2U6IFJhbmdlKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICBpZiAoIWVkaXRvckVsIHx8ICFlZGl0b3JFbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSAhPT0gJy8nKSBpIC09IDFcbiAgaWYgKGkgPCAwIHx8IHRleHRbaV0gIT09ICcvJykge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHNsYXNoSW5kZXggPSBpXG4gIGNvbnN0IHByZXYgPSBzbGFzaEluZGV4ID4gMCA/IHRleHQuY2hhckF0KHNsYXNoSW5kZXggLSAxKSA6ICcnXG4gIGNvbnN0IGlzQm91bmRhcnkgPSAhcHJldiB8fCAvW1xccyhbe10vLnRlc3QocHJldilcbiAgaWYgKCFpc0JvdW5kYXJ5KSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgcXVlcnkgPSB0ZXh0LnNsaWNlKHNsYXNoSW5kZXggKyAxLCBjYXJldClcbiAgaWYgKC9cXG58XFxyLy50ZXN0KHF1ZXJ5KSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBpZiAocXVlcnkuaW5jbHVkZXMoJyAgJykpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICByZXR1cm4geyBhY3RpdmU6IHRydWUsIHF1ZXJ5LCBhbmNob3I6IHsgbm9kZSwgb2Zmc2V0OiBzbGFzaEluZGV4IH0gfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dE1lbnRpb25zID0gKCkgPT4ge1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbdHJpZ2dlciwgc2V0VHJpZ2dlcl0gPSB1c2VTdGF0ZTxNZW50aW9uVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYXRSdW5MZW5ndGg6IDAsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuICBjb25zdCBbc2xhc2hUcmlnZ2VyLCBzZXRTbGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8U2xhc2hUcmlnZ2VyU3RhdGU+KHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhbmNob3I6IG51bGwsXG4gIH0pXG5cbiAgY29uc3QgZGV0ZWN0VHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpOiBNZW50aW9uVHJpZ2dlclN0YXRlID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RNZW50aW9uVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGRldGVjdFNsYXNoID0gdXNlQ2FsbGJhY2soKCk6IFNsYXNoVHJpZ2dlclN0YXRlID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgICB9XG4gICAgcmV0dXJuIGRldGVjdFNsYXNoVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGRldGVjdFRyaWdnZXIoKVxuICAgIHNldFRyaWdnZXIobmV4dClcbiAgICByZXR1cm4gbmV4dFxuICB9LCBbZGV0ZWN0VHJpZ2dlcl0pXG5cbiAgY29uc3QgY2xvc2VUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRyaWdnZXIoeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlU2xhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RTbGFzaCgpXG4gICAgc2V0U2xhc2hUcmlnZ2VyKG5leHQpXG4gICAgcmV0dXJuIG5leHRcbiAgfSwgW2RldGVjdFNsYXNoXSlcblxuICBjb25zdCBjbG9zZVNsYXNoVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTbGFzaFRyaWdnZXIoeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9KVxuICB9LCBbXSlcblxuICAvKipcbiAgICogQWp1c3RhIGxhIGNhbnRpZGFkIGRlIGBAYCBkZWwgdHJpZ2dlciBhY3Rpdm8gc2luIHBlcmRlciBlbCBxdWVyeSBhY3R1YWwuXG4gICAqIEVqLjogYEBAYWJjYCAtPiBgQGFiY2AgYWwgY2FtYmlhciBkZSB0YWIuXG4gICAqL1xuICBjb25zdCBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHRBdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXh0SGFzU2xhc2ggPSBuZXh0QXRSdW5MZW5ndGggPCAwXG4gICAgICBjb25zdCBzYWZlTmV4dCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoTWF0aC5hYnMobmV4dEF0UnVuTGVuZ3RoKSkpXG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm5cbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgICBjb25zdCBjdXJyZW50SGFzU2xhc2ggPSBjdXJyZW50LmF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50UnVuTGVuICsgKGN1cnJlbnRIYXNTbGFzaCA/IDEgOiAwKSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBiZWZvcmUgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcbiAgICAgIGNvbnN0IG5leHRSdW4gPSBuZXh0SGFzU2xhc2ggPyBgJHsnQCcucmVwZWF0KHNhZmVOZXh0KX0vYCA6ICdAJy5yZXBlYXQoc2FmZU5leHQpXG4gICAgICBjb25zdCBjbGVhblF1ZXJ5ID0gY3VycmVudC5xdWVyeS5zdGFydHNXaXRoKCcvJykgPyBjdXJyZW50LnF1ZXJ5LnNsaWNlKDEpIDogY3VycmVudC5xdWVyeVxuICAgICAgY29uc3QgbmV4dFZhbHVlID0gYCR7YmVmb3JlfSR7bmV4dFJ1bn0ke2NsZWFuUXVlcnl9JHthZnRlcn1gXG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IG5leHRWYWx1ZVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gYmVmb3JlLmxlbmd0aCArIG5leHRSdW4ubGVuZ3RoICsgY2xlYW5RdWVyeS5sZW5ndGhcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIE1hdGgubWluKGNhcmV0T2Zmc2V0LCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCkpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICAgIHNldFRyaWdnZXIodXBkYXRlZClcbiAgICB9LFxuICAgIFtkZXRlY3RUcmlnZ2VyXVxuICApXG5cbiAgLyoqXG4gICAqIENvbnZpZXJ0ZSBlbCB0cmlnZ2VyIGBAe259cXVlcnlgIGFjdGl2byBlbiBgQC9xdWVyeWAuXG4gICAqIFNlIHVzYSBhbCBjYW1iaWFyIGEgbGEgdGFiIGRlIHNraWxscyAoY3V5byB0cmlnZ2VyIGVzIGBAL2ApLlxuICAgKi9cbiAgY29uc3Qgc3luY1NraWxsVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm5cbiAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgIGNvbnN0IGZ1bGwgPSB0ZXh0Tm9kZS5kYXRhXG4gICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICBjb25zdCBxdWVyeUxlbiA9IGN1cnJlbnRSdW5MZW4gKyAoY3VycmVudEhhc1NsYXNoID8gMSA6IDApICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICBjb25zdCBiZWZvcmUgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcbiAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgcXVlcnlMZW4pXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IGN1cnJlbnQucXVlcnkuc3RhcnRzV2l0aCgnLycpID8gY3VycmVudC5xdWVyeS5zbGljZSgxKSA6IGN1cnJlbnQucXVlcnlcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBgJHtiZWZvcmV9QC8ke2NsZWFuUXVlcnl9JHthZnRlcn1gXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0ZXh0Tm9kZS5kYXRhID0gbmV4dFZhbHVlXG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gYmVmb3JlLmxlbmd0aCArIDIgKyBjbGVhblF1ZXJ5Lmxlbmd0aFxuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIE1hdGgubWluKGNhcmV0T2Zmc2V0LCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCkpXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZCA9IGRldGVjdFRyaWdnZXIoKVxuICAgIHNldFRyaWdnZXIodXBkYXRlZClcbiAgfSwgW2RldGVjdFRyaWdnZXJdKVxuXG4gIC8qKlxuICAgKiBSZWVtcGxhemEgZWwgYEBxdWVyeWAgcGVuZGllbnRlIHBvciB1biBjaGlwIGF0w7NtaWNvIGNvbiBsYSBtZW50aW9uLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgY2FsbGVyIHByb3ZlYSBlbCBET00gZGVsIGNoaXAgKHNlIGluc2VydGEgdGFsIGN1YWwpLlxuICAgKi9cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGlwTm9kZTogSFRNTEVsZW1lbnQsIG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgY29uc3QgdGV4dE5vZGUgPSBub2RlIGFzIFRleHRcbiAgICAgIGNvbnN0IGZ1bGwgPSB0ZXh0Tm9kZS5kYXRhXG4gICAgICBjb25zdCBjdXJyZW50UnVuTGVuID0gTWF0aC5hYnMoY3VycmVudC5hdFJ1bkxlbmd0aClcbiAgICAgIGNvbnN0IGN1cnJlbnRIYXNTbGFzaCA9IGN1cnJlbnQuYXRSdW5MZW5ndGggPCAwXG4gICAgICBjb25zdCBxdWVyeUxlbiA9IGN1cnJlbnRSdW5MZW4gKyAoY3VycmVudEhhc1NsYXNoID8gMSA6IDApICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcblxuICAgICAgLy8gVHJ1bmNhciBlbCB0ZXh0byBoYXN0YSBhbnRlcyBkZWwgcnVuIGRlIGBA4oCmYFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIC8vIEluc2VydGFyIGVsIGNoaXAganVzdG8gZGVzcHXDqXMgZGVsIG5vZG8gZGUgdGV4dG9cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24taWQnLCBTdHJpbmcobWVudGlvbi5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tbGFiZWwnLCBtZW50aW9uLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHUwMGEwJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIC8vIFJlcG9zaWNpb25hciBjYXJldCBkZXNwdcOpcyBkZWwgY2hpcCAoYW50ZXMgZGVsIGVzcGFjaW8gbm9uLWJyZWFraW5nKVxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgfSxcbiAgICBbZGV0ZWN0VHJpZ2dlciwgY2xvc2VUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgc2xhc2hDb21tYW5kOiBTbGFzaENvbW1hbmRDaGlwRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFNsYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1jb21tYW5kJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWlkJywgU3RyaW5nKHNsYXNoQ29tbWFuZC5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtbGFiZWwnLCBzbGFzaENvbW1hbmQubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlU2xhc2hUcmlnZ2VyKClcbiAgICB9LFxuICAgIFtkZXRlY3RTbGFzaCwgY2xvc2VTbGFzaFRyaWdnZXJdXG4gIClcblxuICBjb25zdCBzZXJpYWxpemUgPSB1c2VDYWxsYmFjaygoKToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9ID0+IHtcbiAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuIHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgIGNvbnN0IG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdID0gW11cbiAgICBjb25zdCBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdID0gW11cbiAgICBsZXQgdGV4dCA9ICcnXG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29uc3QgZWxOb2RlID0gbm9kZSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAoZWxOb2RlLmRhdGFzZXQ/Lm1lbnRpb24gPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIHR5cGU6IChlbE5vZGUuZGF0YXNldC5tZW50aW9uVHlwZSBhcyBDb250ZXh0TWVudGlvblsndHlwZSddKSA/PyAndXNlcicsXG4gICAgICAgICAgICBsYWJlbDogZWxOb2RlLmRhdGFzZXQubWVudGlvbkxhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudCA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVudGlvbnMucHVzaChtZW50aW9uKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplTWVudGlvbihtZW50aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8uc2xhc2hDb21tYW5kID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zdCBzbGFzaDogU2xhc2hDb21tYW5kQ2hpcERhdGEgPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQuc2xhc2hJZCA/PyAnJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5zbGFzaExhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXlxcLy8sICcnKSA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgc2xhc2hDb21tYW5kcy5wdXNoKHNsYXNoKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplU2xhc2hDb21tYW5kKHNsYXNoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbidcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBlbE5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWxOb2RlLnRhZ05hbWUgPT09ICdQJykgdGV4dCArPSAnXFxuJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKVxuICAgIHJldHVybiB7IHRleHQ6IHRleHQucmVwbGFjZSgvXFxuKyQvLCAnJyksIG1lbnRpb25zLCBzbGFzaENvbW1hbmRzIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSBlZGl0b3JSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJ1xuICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICB9LCBbY2xvc2VUcmlnZ2VyLCBjbG9zZVNsYXNoVHJpZ2dlcl0pXG5cbiAgY29uc3QgZm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBlZGl0b3JSZWYsXG4gICAgdHJpZ2dlcixcbiAgICB1cGRhdGVUcmlnZ2VyLFxuICAgIGNsb3NlVHJpZ2dlcixcbiAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgIHN5bmNTa2lsbFRyaWdnZXIsXG4gICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICBzbGFzaFRyaWdnZXIsXG4gICAgdXBkYXRlU2xhc2hUcmlnZ2VyLFxuICAgIGNsb3NlU2xhc2hUcmlnZ2VyLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICBzZXJpYWxpemUsXG4gICAgY2xlYXIsXG4gICAgZm9jdXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUVyRCxTQUFTQyxnQkFBZ0IsUUFBUSxnQ0FBZ0M7QUFDakUsU0FBU0MscUJBQXFCLFFBQVEsNkJBQTZCO0FBa0JuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJQyxRQUE0QixFQUFFQyxLQUFZLEVBQTBCO0VBQ2hHLElBQUksQ0FBQ0QsUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0UsUUFBUSxDQUFDRCxLQUFLLENBQUNFLGNBQWMsQ0FBQyxFQUFFO0lBQ3pELE9BQU87TUFBRUMsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRTtFQUNBLElBQU1DLElBQUksR0FBR1AsS0FBSyxDQUFDRSxjQUFjO0VBQ2pDLElBQUlLLElBQUksQ0FBQ0MsUUFBUSxLQUFLQyxJQUFJLENBQUNDLFNBQVMsRUFBRTtJQUNwQyxPQUFPO01BQUVQLE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVDLFdBQVcsRUFBRSxDQUFDO01BQUVDLE1BQU0sRUFBRTtJQUFLLENBQUM7RUFDbkU7RUFDQSxJQUFNSyxJQUFJLEdBQUlKLElBQUksQ0FBVUssSUFBSTtFQUNoQyxJQUFNQyxLQUFLLEdBQUdiLEtBQUssQ0FBQ2MsV0FBVztFQUMvQixJQUFJQyxDQUFDLEdBQUdGLEtBQUssR0FBRyxDQUFDO0VBQ2pCLElBQUlFLENBQUMsR0FB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
|
|
414
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdE1lbnRpb25UcmlnZ2VyIiwiZWRpdG9yRWwiLCJyYW5nZSIsImNvbnRhaW5zIiwic3RhcnRDb250YWluZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHQiLCJkYXRhIiwiY2FyZXQiLCJzdGFydE9mZnNldCIsImkiLCJydW5FbmQiLCJydW5TdGFydCIsInByZXYiLCJjaGFyQXQiLCJpc0JvdW5kYXJ5IiwidGVzdCIsInNsaWNlIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJkZXRlY3RTbGFzaFRyaWdnZXIiLCJzbGFzaEluZGV4IiwidXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidHJpZ2dlciIsInNldFRyaWdnZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNsYXNoVHJpZ2dlciIsInNldFNsYXNoVHJpZ2dlciIsImRldGVjdFRyaWdnZXIiLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiY3VycmVudCIsImdldFJhbmdlQXQiLCJkZXRlY3RTbGFzaCIsInVwZGF0ZVRyaWdnZXIiLCJuZXh0IiwiY2xvc2VUcmlnZ2VyIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwiY2xvc2VTbGFzaFRyaWdnZXIiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwibmV4dEF0UnVuTGVuZ3RoIiwic2FmZU5leHQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJfY3VycmVudCRhbmNob3IiLCJ0ZXh0Tm9kZSIsImZ1bGwiLCJxdWVyeUxlbiIsImxlbmd0aCIsImJlZm9yZSIsImFmdGVyIiwibmV4dFJ1biIsInJlcGVhdCIsIm5leHRWYWx1ZSIsImNvbmNhdCIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJjYXJldE9mZnNldCIsInNldFN0YXJ0IiwibWluIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVwZGF0ZWQiLCJyZXBsYWNlVHJpZ2dlcldpdGhDaGlwIiwiY2hpcE5vZGUiLCJtZW50aW9uIiwiX2N1cnJlbnQkYW5jaG9yMiIsInNldEF0dHJpYnV0ZSIsIlN0cmluZyIsImlkIiwidHlwZSIsImxhYmVsIiwicGFyZW50IiwicGFyZW50Tm9kZSIsInNwYWNlTm9kZSIsImNyZWF0ZVRleHROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJyZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAiLCJzbGFzaENvbW1hbmQiLCJfY3VycmVudCRhbmNob3IzIiwidHJpZ2dlckxlbiIsInNlcmlhbGl6ZSIsImVsIiwibWVudGlvbnMiLCJzbGFzaENvbW1hbmRzIiwid2FsayIsIkVMRU1FTlRfTk9ERSIsIl9lbE5vZGUkZGF0YXNldCIsIl9lbE5vZGUkZGF0YXNldDIiLCJlbE5vZGUiLCJkYXRhc2V0IiwiX2VsTm9kZSRkYXRhc2V0JG1lbnRpIiwiX3JlZiIsIl9yZWYyIiwiX2VsTm9kZSRkYXRhc2V0JG1lbnRpMiIsIm1lbnRpb25JZCIsIm1lbnRpb25UeXBlIiwibWVudGlvbkxhYmVsIiwidGV4dENvbnRlbnQiLCJwdXNoIiwiX2VsTm9kZSRkYXRhc2V0JHNsYXNoIiwiX3JlZjMiLCJfZWxOb2RlJGRhdGFzZXQkc2xhc2gyIiwiX2VsTm9kZSR0ZXh0Q29udGVudCIsInNsYXNoIiwic2xhc2hJZCIsInNsYXNoTGFiZWwiLCJyZXBsYWNlIiwidGFnTmFtZSIsImNoaWxkTm9kZXMiLCJmb3JFYWNoIiwiY2xlYXIiLCJpbm5lckhUTUwiLCJmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb250ZXh0TWVudGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBzZXJpYWxpemVNZW50aW9uIH0gZnJvbSAnLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuaW1wb3J0IHsgc2VyaWFsaXplU2xhc2hDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvc2xhc2hDb21tYW5kTWFya2VyJ1xuaW1wb3J0IHR5cGUgeyBTbGFzaENvbW1hbmRDaGlwRGF0YSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvU2xhc2hDb21tYW5kQ2hpcC9idWlsZFNsYXNoQ2hpcEVsZW1lbnQnXG5cbmV4cG9ydCB0eXBlIE1lbnRpb25UcmlnZ2VyU3RhdGUgPSB7XG4gIGFjdGl2ZTogYm9vbGVhblxuICBxdWVyeTogc3RyaW5nXG4gIC8qKiBDYW50aWRhZCBkZSBgQGAgY29uc2VjdXRpdm9zIGRlbCB0cmlnZ2VyIChgQGAg4oaSIDEsIGBAQGAg4oaSIDIpLiBNYXBlYSBhIGxhIHRhYiBlbiBvcmRlbi4gKi9cbiAgYXRSdW5MZW5ndGg6IG51bWJlclxuICAvKiogUG9zaWNpw7NuIGRlbCBwcmltZXIgYEBgIGRlbCBydW4gKHJlZW1wbGF6byBkZWwgY2hpcCkuICovXG4gIGFuY2hvcjogeyBub2RlOiBOb2RlOyBvZmZzZXQ6IG51bWJlciB9IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBTbGFzaFRyaWdnZXJTdGF0ZSA9IHtcbiAgYWN0aXZlOiBib29sZWFuXG4gIHF1ZXJ5OiBzdHJpbmdcbiAgYW5jaG9yOiB7IG5vZGU6IE5vZGU7IG9mZnNldDogbnVtYmVyIH0gfCBudWxsXG59XG5cbi8qKlxuICogSW5zcGVjY2lvbmEgbGEgc2VsZWNjacOzbiBhY3R1YWwuIEZvcm1hdG86IFtsw61taXRlIGRlIHBhbGFicmFdIEArIHF1ZXJ5IGhhc3RhIGVsIGNhcmV0LlxuICogUGVybWl0ZSBlc3BhY2lvcyBzaW1wbGVzIGRlbnRybyBkZWwgcXVlcnkgKHAuIGVqLiBcIkBKdWFuIFBlcmV6XCIpIHkgY2llcnJhXG4gKiBlbCB0cmlnZ2VyIGN1YW5kbyBkZXRlY3RhIGRvcyBlc3BhY2lvcyBjb25zZWN1dGl2b3MuXG4gKiBMYSB0YWIgb2JqZXRpdm8gZXMgbGEgcXVlIGNvcnJlc3BvbmRlIGFsIG7Dum1lcm8gZGUgYEBgICgxID0gcHJpbWVyYSB0YWIgdmlzaWJsZSwgZXRjLikuXG4gKi9cbmNvbnN0IGRldGVjdE1lbnRpb25UcmlnZ2VyID0gKGVkaXRvckVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHJhbmdlOiBSYW5nZSk6IE1lbnRpb25UcmlnZ2VyU3RhdGUgPT4ge1xuICBpZiAoIWVkaXRvckVsIHx8ICFlZGl0b3JFbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG4gIGNvbnN0IG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lclxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG4gIGNvbnN0IHRleHQgPSAobm9kZSBhcyBUZXh0KS5kYXRhXG4gIGNvbnN0IGNhcmV0ID0gcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgbGV0IGkgPSBjYXJldCAtIDFcbiAgaWYgKGkgPCAwKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSAhPT0gJ0AnKSBpIC09IDFcbiAgaWYgKGkgPCAwIHx8IHRleHRbaV0gIT09ICdAJykge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBydW5FbmQgPSBpXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSA9PT0gJ0AnKSB7XG4gICAgaSAtPSAxXG4gIH1cbiAgY29uc3QgcnVuU3RhcnQgPSBpICsgMVxuICBjb25zdCBhdFJ1bkxlbmd0aCA9IHJ1bkVuZCAtIHJ1blN0YXJ0ICsgMVxuICBjb25zdCBwcmV2ID0gcnVuU3RhcnQgPiAwID8gdGV4dC5jaGFyQXQocnVuU3RhcnQgLSAxKSA6ICcnXG4gIGNvbnN0IGlzQm91bmRhcnkgPSAhcHJldiB8fCAvW1xccyhbe10vLnRlc3QocHJldilcbiAgaWYgKCFpc0JvdW5kYXJ5KSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5ID0gdGV4dC5zbGljZShydW5FbmQgKyAxLCBjYXJldClcbiAgaWYgKC9cXG58XFxyLy50ZXN0KHF1ZXJ5KSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgaWYgKHF1ZXJ5LmluY2x1ZGVzKCcgICcpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHJldHVybiB7IGFjdGl2ZTogdHJ1ZSwgcXVlcnksIGF0UnVuTGVuZ3RoLCBhbmNob3I6IHsgbm9kZSwgb2Zmc2V0OiBydW5TdGFydCB9IH1cbn1cblxuY29uc3QgZGV0ZWN0U2xhc2hUcmlnZ2VyID0gKGVkaXRvckVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHJhbmdlOiBSYW5nZSk6IFNsYXNoVHJpZ2dlclN0YXRlID0+IHtcbiAgaWYgKCFlZGl0b3JFbCB8fCAhZWRpdG9yRWwuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG4gIGNvbnN0IG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lclxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3QgdGV4dCA9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgY29uc3QgY2FyZXQgPSByYW5nZS5zdGFydE9mZnNldFxuICBsZXQgaSA9IGNhcmV0IC0gMVxuICBpZiAoaSA8IDApIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICB3aGlsZSAoaSA+PSAwICYmIHRleHRbaV0gIT09ICcvJykgaSAtPSAxXG4gIGlmIChpIDwgMCB8fCB0ZXh0W2ldICE9PSAnLycpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBzbGFzaEluZGV4ID0gaVxuICBjb25zdCBwcmV2ID0gc2xhc2hJbmRleCA+IDAgPyB0ZXh0LmNoYXJBdChzbGFzaEluZGV4IC0gMSkgOiAnJ1xuICBjb25zdCBpc0JvdW5kYXJ5ID0gIXByZXYgfHwgL1tcXHMoW3tdLy50ZXN0KHByZXYpXG4gIGlmICghaXNCb3VuZGFyeSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5ID0gdGV4dC5zbGljZShzbGFzaEluZGV4ICsgMSwgY2FyZXQpXG4gIGlmICgvXFxufFxcci8udGVzdChxdWVyeSkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgaWYgKHF1ZXJ5LmluY2x1ZGVzKCcgICcpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aXZlOiB0cnVlLCBxdWVyeSwgYW5jaG9yOiB7IG5vZGUsIG9mZnNldDogc2xhc2hJbmRleCB9IH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHRNZW50aW9ucyA9ICgpID0+IHtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3RyaWdnZXIsIHNldFRyaWdnZXJdID0gdXNlU3RhdGU8TWVudGlvblRyaWdnZXJTdGF0ZT4oe1xuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgcXVlcnk6ICcnLFxuICAgIGF0UnVuTGVuZ3RoOiAwLFxuICAgIGFuY2hvcjogbnVsbCxcbiAgfSlcbiAgY29uc3QgW3NsYXNoVHJpZ2dlciwgc2V0U2xhc2hUcmlnZ2VyXSA9IHVzZVN0YXRlPFNsYXNoVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuXG4gIGNvbnN0IGRldGVjdFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKTogTWVudGlvblRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICAgIH1cbiAgICByZXR1cm4gZGV0ZWN0TWVudGlvblRyaWdnZXIoZWRpdG9yUmVmLmN1cnJlbnQsIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApKVxuICB9LCBbXSlcblxuICBjb25zdCBkZXRlY3RTbGFzaCA9IHVzZUNhbGxiYWNrKCgpOiBTbGFzaFRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RTbGFzaFRyaWdnZXIoZWRpdG9yUmVmLmN1cnJlbnQsIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApKVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICBzZXRUcmlnZ2VyKG5leHQpXG4gICAgcmV0dXJuIG5leHRcbiAgfSwgW2RldGVjdFRyaWdnZXJdKVxuXG4gIGNvbnN0IGNsb3NlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVNsYXNoVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gZGV0ZWN0U2xhc2goKVxuICAgIHNldFNsYXNoVHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RTbGFzaF0pXG5cbiAgY29uc3QgY2xvc2VTbGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2xhc2hUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEFqdXN0YSBsYSBjYW50aWRhZCBkZSBgQGAgZGVsIHRyaWdnZXIgYWN0aXZvIHNpbiBwZXJkZXIgZWwgcXVlcnkgYWN0dWFsLlxuICAgKiBFai46IGBAQGFiY2AgLT4gYEBhYmNgIGFsIGNhbWJpYXIgZGUgdGFiLlxuICAgKi9cbiAgY29uc3Qgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0QXRSdW5MZW5ndGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgc2FmZU5leHQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKG5leHRBdFJ1bkxlbmd0aCkpXG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm5cbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50LmF0UnVuTGVuZ3RoICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGJlZm9yZSA9IGZ1bGwuc2xpY2UoMCwgb2Zmc2V0KVxuICAgICAgY29uc3QgYWZ0ZXIgPSBmdWxsLnNsaWNlKG9mZnNldCArIHF1ZXJ5TGVuKVxuICAgICAgY29uc3QgbmV4dFJ1biA9ICdAJy5yZXBlYXQoc2FmZU5leHQpXG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSBgJHtiZWZvcmV9JHtuZXh0UnVufSR7Y3VycmVudC5xdWVyeX0ke2FmdGVyfWBcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gbmV4dFZhbHVlXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBiZWZvcmUubGVuZ3RoICsgbmV4dFJ1bi5sZW5ndGggKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgTWF0aC5taW4oY2FyZXRPZmZzZXQsIHRleHROb2RlLmRhdGEubGVuZ3RoKSlcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgc2V0VHJpZ2dlcih1cGRhdGVkKVxuICAgIH0sXG4gICAgW2RldGVjdFRyaWdnZXJdXG4gIClcblxuICAvKipcbiAgICogUmVlbXBsYXphIGVsIGBAcXVlcnlgIHBlbmRpZW50ZSBwb3IgdW4gY2hpcCBhdMOzbWljbyBjb24gbGEgbWVudGlvbi5cbiAgICogUmVxdWllcmUgcXVlIGVsIGNhbGxlciBwcm92ZWEgZWwgRE9NIGRlbCBjaGlwIChzZSBpbnNlcnRhIHRhbCBjdWFsKS5cbiAgICovXG4gIGNvbnN0IHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hpcE5vZGU6IEhUTUxFbGVtZW50LCBtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50LmF0UnVuTGVuZ3RoICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcblxuICAgICAgLy8gVHJ1bmNhciBlbCB0ZXh0byBoYXN0YSBhbnRlcyBkZWwgcnVuIGRlIGBA4oCmYFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIC8vIEluc2VydGFyIGVsIGNoaXAganVzdG8gZGVzcHXDqXMgZGVsIG5vZG8gZGUgdGV4dG9cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24taWQnLCBTdHJpbmcobWVudGlvbi5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tbGFiZWwnLCBtZW50aW9uLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHUwMGEwJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIC8vIFJlcG9zaWNpb25hciBjYXJldCBkZXNwdcOpcyBkZWwgY2hpcCAoYW50ZXMgZGVsIGVzcGFjaW8gbm9uLWJyZWFraW5nKVxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgfSxcbiAgICBbZGV0ZWN0VHJpZ2dlciwgY2xvc2VUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgc2xhc2hDb21tYW5kOiBTbGFzaENvbW1hbmRDaGlwRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFNsYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1jb21tYW5kJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWlkJywgU3RyaW5nKHNsYXNoQ29tbWFuZC5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtbGFiZWwnLCBzbGFzaENvbW1hbmQubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlU2xhc2hUcmlnZ2VyKClcbiAgICB9LFxuICAgIFtkZXRlY3RTbGFzaCwgY2xvc2VTbGFzaFRyaWdnZXJdXG4gIClcblxuICBjb25zdCBzZXJpYWxpemUgPSB1c2VDYWxsYmFjaygoKToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9ID0+IHtcbiAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuIHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgIGNvbnN0IG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdID0gW11cbiAgICBjb25zdCBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdID0gW11cbiAgICBsZXQgdGV4dCA9ICcnXG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29uc3QgZWxOb2RlID0gbm9kZSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAoZWxOb2RlLmRhdGFzZXQ/Lm1lbnRpb24gPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIHR5cGU6IChlbE5vZGUuZGF0YXNldC5tZW50aW9uVHlwZSBhcyBDb250ZXh0TWVudGlvblsndHlwZSddKSA/PyAndXNlcicsXG4gICAgICAgICAgICBsYWJlbDogZWxOb2RlLmRhdGFzZXQubWVudGlvbkxhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudCA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVudGlvbnMucHVzaChtZW50aW9uKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplTWVudGlvbihtZW50aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8uc2xhc2hDb21tYW5kID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zdCBzbGFzaDogU2xhc2hDb21tYW5kQ2hpcERhdGEgPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQuc2xhc2hJZCA/PyAnJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5zbGFzaExhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXlxcLy8sICcnKSA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgc2xhc2hDb21tYW5kcy5wdXNoKHNsYXNoKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplU2xhc2hDb21tYW5kKHNsYXNoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbidcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBlbE5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWxOb2RlLnRhZ05hbWUgPT09ICdQJykgdGV4dCArPSAnXFxuJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKVxuICAgIHJldHVybiB7IHRleHQ6IHRleHQucmVwbGFjZSgvXFxuKyQvLCAnJyksIG1lbnRpb25zLCBzbGFzaENvbW1hbmRzIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSBlZGl0b3JSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJ1xuICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICB9LCBbY2xvc2VUcmlnZ2VyLCBjbG9zZVNsYXNoVHJpZ2dlcl0pXG5cbiAgY29uc3QgZm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBlZGl0b3JSZWYsXG4gICAgdHJpZ2dlcixcbiAgICB1cGRhdGVUcmlnZ2VyLFxuICAgIGNsb3NlVHJpZ2dlcixcbiAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgc2xhc2hUcmlnZ2VyLFxuICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICBjbG9zZVNsYXNoVHJpZ2dlcixcbiAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgc2VyaWFsaXplLFxuICAgIGNsZWFyLFxuICAgIGZvY3VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFckQsU0FBU0MsZ0JBQWdCLFFBQVEsZ0NBQWdDO0FBQ2pFLFNBQVNDLHFCQUFxQixRQUFRLDZCQUE2QjtBQWtCbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsUUFBNEIsRUFBRUMsS0FBWSxFQUEwQjtFQUNoRyxJQUFJLENBQUNELFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNFLFFBQVEsQ0FBQ0Qs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
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
|
+
import { ContextMentionPopover, MAIA_TASK_PANEL_OVERLAY_ATTR, SCMPAnchor } from '../components/atoms/ContextMentionPopover';
|
|
7
|
+
import { useMaiaTaskPanelZIndex } from './useMaiaTaskPanelZIndex';
|
|
8
|
+
import { useGlobalContext } from '../context/global-context';
|
|
9
|
+
import { useT } from './useT';
|
|
10
|
+
// eslint-disable-next-line import/no-cycle
|
|
11
|
+
import { useEntitySearch } from './useEntitySearch';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
/** Tipos pineables como contexto persistente (RFC §6: no incluye `user`, que es solo mención). */
|
|
14
|
+
var PIN_ALLOWED_TYPES = ['client', 'project', 'task'];
|
|
15
|
+
var PIN_DEFAULT_TYPE = 'project';
|
|
16
|
+
/**
|
|
17
|
+
* Segundo punto de entrada del buscador de contexto (RFC §6): el mismo motor
|
|
18
|
+
* (`useEntitySearch` + `ContextMentionPopover`) pero el commit fija un **pin**
|
|
19
|
+
* persistente en el contexto global en vez de insertar una mención.
|
|
20
|
+
*
|
|
21
|
+
* Jerarquía mono-contexto (RFC §5.1): un pin a la vez; fijar uno reemplaza al
|
|
22
|
+
* anterior y arrastra su scope hacia arriba (tarea ⇒ proyecto+cliente, etc.).
|
|
23
|
+
*/
|
|
24
|
+
export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
25
|
+
var popoverAnchorRef = _ref.popoverAnchorRef,
|
|
26
|
+
topAnchorRef = _ref.topAnchorRef,
|
|
27
|
+
triggerRef = _ref.triggerRef,
|
|
28
|
+
enabledTypes = _ref.enabledTypes,
|
|
29
|
+
onPinned = _ref.onPinned;
|
|
30
|
+
var _useT = useT(),
|
|
31
|
+
t = _useT.t;
|
|
32
|
+
var _useGlobalContext = useGlobalContext(),
|
|
33
|
+
setProject = _useGlobalContext.setProject,
|
|
34
|
+
setClient = _useGlobalContext.setClient,
|
|
35
|
+
setTask = _useGlobalContext.setTask,
|
|
36
|
+
setChipsProject = _useGlobalContext.setChipsProject;
|
|
37
|
+
var zIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
38
|
+
var allowedTypes = enabledTypes && enabledTypes.length > 0 ? enabledTypes : PIN_ALLOWED_TYPES;
|
|
39
|
+
var _useState = useState(allowedTypes.includes(PIN_DEFAULT_TYPE) ? PIN_DEFAULT_TYPE : allowedTypes[0]),
|
|
40
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
41
|
+
activeType = _useState2[0],
|
|
42
|
+
setActiveType = _useState2[1];
|
|
43
|
+
var _useState3 = useState(false),
|
|
44
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
45
|
+
open = _useState4[0],
|
|
46
|
+
setOpen = _useState4[1];
|
|
47
|
+
var _useState5 = useState({
|
|
48
|
+
bottom: 0,
|
|
49
|
+
left: 0,
|
|
50
|
+
width: 0
|
|
51
|
+
}),
|
|
52
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
53
|
+
pos = _useState6[0],
|
|
54
|
+
setPos = _useState6[1];
|
|
55
|
+
|
|
56
|
+
// Scope sin restricción: desde el botón se busca libremente cualquier entidad (modo global).
|
|
57
|
+
var _useEntitySearch = useEntitySearch(activeType),
|
|
58
|
+
items = _useEntitySearch.items,
|
|
59
|
+
loading = _useEntitySearch.loading,
|
|
60
|
+
error = _useEntitySearch.error,
|
|
61
|
+
hideRecentsLabel = _useEntitySearch.hideRecentsLabel,
|
|
62
|
+
hasMore = _useEntitySearch.hasMore,
|
|
63
|
+
isLoadingMore = _useEntitySearch.isLoadingMore,
|
|
64
|
+
loadMore = _useEntitySearch.loadMore,
|
|
65
|
+
searchValue = _useEntitySearch.searchValue,
|
|
66
|
+
updateSearchValue = _useEntitySearch.updateSearchValue;
|
|
67
|
+
var positionPopover = useCallback(function () {
|
|
68
|
+
var _popoverAnchorRef$cur, _topAnchorRef$current, _topRect$top;
|
|
69
|
+
var inputRect = (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
|
|
70
|
+
if (!inputRect || inputRect.width <= 0) return;
|
|
71
|
+
var topRect = topAnchorRef === null || topAnchorRef === void 0 || (_topAnchorRef$current = topAnchorRef.current) === null || _topAnchorRef$current === void 0 ? void 0 : _topAnchorRef$current.getBoundingClientRect();
|
|
72
|
+
var anchorTop = (_topRect$top = topRect === null || topRect === void 0 ? void 0 : topRect.top) !== null && _topRect$top !== void 0 ? _topRect$top : inputRect.top;
|
|
73
|
+
var viewportW = window.innerWidth;
|
|
74
|
+
var viewportH = window.innerHeight;
|
|
75
|
+
var width = inputRect.width;
|
|
76
|
+
var left = Math.max(8, Math.min(viewportW - width - 8, inputRect.left));
|
|
77
|
+
/** ~4px sobre el borde superior de la barra de contexto (chip), no del input. */
|
|
78
|
+
setPos({
|
|
79
|
+
width: width,
|
|
80
|
+
left: left,
|
|
81
|
+
bottom: viewportH - anchorTop + 4
|
|
82
|
+
});
|
|
83
|
+
}, [popoverAnchorRef, topAnchorRef]);
|
|
84
|
+
var close = useCallback(function () {
|
|
85
|
+
setOpen(false);
|
|
86
|
+
updateSearchValue('');
|
|
87
|
+
}, [updateSearchValue]);
|
|
88
|
+
var toggle = useCallback(function () {
|
|
89
|
+
setOpen(function (prev) {
|
|
90
|
+
if (prev) {
|
|
91
|
+
updateSearchValue('');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
positionPopover();
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
97
|
+
}, [positionPopover, updateSearchValue]);
|
|
98
|
+
var commitPin = useCallback(function (item) {
|
|
99
|
+
var _raw$clientName;
|
|
100
|
+
var raw = item.raw;
|
|
101
|
+
var clientId = raw.clientId != null ? Number(raw.clientId) : undefined;
|
|
102
|
+
var clientName = (_raw$clientName = raw.clientName) !== null && _raw$clientName !== void 0 ? _raw$clientName : undefined;
|
|
103
|
+
console.info('[useContextPinPopover] commitPin — ASIGNANDO contexto:', {
|
|
104
|
+
type: item.type,
|
|
105
|
+
rawId: raw.id,
|
|
106
|
+
rawName: raw.name,
|
|
107
|
+
projectName: raw.projectName,
|
|
108
|
+
clientId: clientId
|
|
109
|
+
});
|
|
110
|
+
if (item.type === 'client') {
|
|
111
|
+
var _raw$totalProyectos;
|
|
112
|
+
setProject(null);
|
|
113
|
+
setTask(null);
|
|
114
|
+
setChipsProject(null);
|
|
115
|
+
setClient({
|
|
116
|
+
id: Number(raw.id),
|
|
117
|
+
name: raw.name,
|
|
118
|
+
totalProyectos: (_raw$totalProyectos = raw.totalProyectos) !== null && _raw$totalProyectos !== void 0 ? _raw$totalProyectos : undefined
|
|
119
|
+
});
|
|
120
|
+
} else if (item.type === 'project') {
|
|
121
|
+
setTask(null);
|
|
122
|
+
setProject(_objectSpread(_objectSpread(_objectSpread({
|
|
123
|
+
id: Number(raw.id),
|
|
124
|
+
name: raw.name
|
|
125
|
+
}, clientId != null ? {
|
|
126
|
+
clientId: clientId
|
|
127
|
+
} : {}), raw.feeId != null ? {
|
|
128
|
+
feeId: raw.feeId
|
|
129
|
+
} : {}), clientId != null ? {
|
|
130
|
+
client: {
|
|
131
|
+
id: clientId,
|
|
132
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
133
|
+
}
|
|
134
|
+
} : {}));
|
|
135
|
+
// chipsProject hace visible el pin en el chip del orquestador (RFC §7).
|
|
136
|
+
setChipsProject({
|
|
137
|
+
projectId: String(raw.id),
|
|
138
|
+
projectName: raw.name,
|
|
139
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
140
|
+
});
|
|
141
|
+
setClient(clientId != null ? {
|
|
142
|
+
id: clientId,
|
|
143
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
144
|
+
} : null);
|
|
145
|
+
} else if (item.type === 'task') {
|
|
146
|
+
// El item de tarea no trae projectId fiable; subimos lo disponible (proyecto por nombre, cliente por id).
|
|
147
|
+
setTask(_objectSpread({
|
|
148
|
+
id: raw.id,
|
|
149
|
+
name: raw.name
|
|
150
|
+
}, clientId != null ? {
|
|
151
|
+
clientId: clientId
|
|
152
|
+
} : {}));
|
|
153
|
+
setChipsProject(raw.projectName ? {
|
|
154
|
+
projectId: '',
|
|
155
|
+
projectName: raw.projectName,
|
|
156
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
157
|
+
} : null);
|
|
158
|
+
if (clientId != null) setClient({
|
|
159
|
+
id: clientId,
|
|
160
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
onPinned === null || onPinned === void 0 || onPinned(item);
|
|
164
|
+
close();
|
|
165
|
+
}, [setProject, setClient, setTask, setChipsProject, onPinned, close]);
|
|
166
|
+
useEffect(function () {
|
|
167
|
+
if (!open) return undefined;
|
|
168
|
+
var handler = function handler() {
|
|
169
|
+
return positionPopover();
|
|
170
|
+
};
|
|
171
|
+
window.addEventListener('scroll', handler, true);
|
|
172
|
+
window.addEventListener('resize', handler);
|
|
173
|
+
return function () {
|
|
174
|
+
window.removeEventListener('scroll', handler, true);
|
|
175
|
+
window.removeEventListener('resize', handler);
|
|
176
|
+
};
|
|
177
|
+
}, [open, positionPopover]);
|
|
178
|
+
useEffect(function () {
|
|
179
|
+
if (!open) return undefined;
|
|
180
|
+
var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
|
|
181
|
+
var _popoverAnchorRef$cur2, _triggerRef$current, _closest, _ref2;
|
|
182
|
+
var target = mouseEvent.target;
|
|
183
|
+
if (!target) return;
|
|
184
|
+
if ((_popoverAnchorRef$cur2 = popoverAnchorRef.current) !== null && _popoverAnchorRef$cur2 !== void 0 && _popoverAnchorRef$cur2.contains(target)) return;
|
|
185
|
+
if (triggerRef !== null && triggerRef !== void 0 && (_triggerRef$current = triggerRef.current) !== null && _triggerRef$current !== void 0 && _triggerRef$current.contains(target)) return;
|
|
186
|
+
var overlay = target === null || target === void 0 || (_closest = (_ref2 = target).closest) === null || _closest === void 0 ? void 0 : _closest.call(_ref2, "[".concat(MAIA_TASK_PANEL_OVERLAY_ATTR, "]"));
|
|
187
|
+
if (overlay) return;
|
|
188
|
+
close();
|
|
189
|
+
};
|
|
190
|
+
document.addEventListener('mousedown', handlePointerDownOutside);
|
|
191
|
+
return function () {
|
|
192
|
+
return document.removeEventListener('mousedown', handlePointerDownOutside);
|
|
193
|
+
};
|
|
194
|
+
}, [open, close, popoverAnchorRef, triggerRef]);
|
|
195
|
+
var popoverNode = useMemo(function () {
|
|
196
|
+
if (!open) return null;
|
|
197
|
+
return /*#__PURE__*/_jsx(SCMPAnchor, _objectSpread(_objectSpread({}, _defineProperty({}, MAIA_TASK_PANEL_OVERLAY_ATTR, '')), {}, {
|
|
198
|
+
$bottom: pos.bottom,
|
|
199
|
+
$left: pos.left,
|
|
200
|
+
$width: pos.width,
|
|
201
|
+
$zIndex: zIndex,
|
|
202
|
+
onMouseDown: function onMouseDown(e) {
|
|
203
|
+
return e.stopPropagation();
|
|
204
|
+
},
|
|
205
|
+
children: /*#__PURE__*/_jsx(ContextMentionPopover, {
|
|
206
|
+
allowedTypes: allowedTypes,
|
|
207
|
+
activeType: activeType,
|
|
208
|
+
onTypeChange: setActiveType,
|
|
209
|
+
items: items,
|
|
210
|
+
loading: loading,
|
|
211
|
+
error: error,
|
|
212
|
+
hideRecentsLabel: hideRecentsLabel,
|
|
213
|
+
hasMore: hasMore,
|
|
214
|
+
isLoadingMore: isLoadingMore,
|
|
215
|
+
onReachListEnd: loadMore,
|
|
216
|
+
searchValue: searchValue,
|
|
217
|
+
onItemSelected: commitPin,
|
|
218
|
+
showSearchInput: true,
|
|
219
|
+
hideTabPrefix: true,
|
|
220
|
+
searchPlaceholder: t('contextPin.searchPlaceholder', {
|
|
221
|
+
defaultValue: 'Buscar contexto…'
|
|
222
|
+
}),
|
|
223
|
+
onSearchChange: updateSearchValue,
|
|
224
|
+
onRequestClose: close
|
|
225
|
+
})
|
|
226
|
+
}));
|
|
227
|
+
}, [open, pos, zIndex, allowedTypes, activeType, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, commitPin, updateSearchValue, close, t]);
|
|
228
|
+
return {
|
|
229
|
+
open: open,
|
|
230
|
+
toggle: toggle,
|
|
231
|
+
close: close,
|
|
232
|
+
popoverNode: popoverNode
|
|
233
|
+
};
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwianN4IiwiX2pzeCIsIlBJTl9BTExPV0VEX1RZUEVTIiwiUElOX0RFRkFVTFRfVFlQRSIsInVzZUNvbnRleHRQaW5Qb3BvdmVyIiwiX3JlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJ0b3BBbmNob3JSZWYiLCJ0cmlnZ2VyUmVmIiwiZW5hYmxlZFR5cGVzIiwib25QaW5uZWQiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiekluZGV4IiwiYWxsb3dlZFR5cGVzIiwibGVuZ3RoIiwiX3VzZVN0YXRlIiwiaW5jbHVkZXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib3BlbiIsInNldE9wZW4iLCJfdXNlU3RhdGU1IiwiYm90dG9tIiwibGVmdCIsIndpZHRoIiwiX3VzZVN0YXRlNiIsInBvcyIsInNldFBvcyIsIl91c2VFbnRpdHlTZWFyY2giLCJpdGVtcyIsImxvYWRpbmciLCJlcnJvciIsImhpZGVSZWNlbnRzTGFiZWwiLCJoYXNNb3JlIiwiaXNMb2FkaW5nTW9yZSIsImxvYWRNb3JlIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl90b3BBbmNob3JSZWYkY3VycmVudCIsIl90b3BSZWN0JHRvcCIsImlucHV0UmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BSZWN0IiwiYW5jaG9yVG9wIiwidG9wIiwidmlld3BvcnRXIiwid2luZG93IiwiaW5uZXJXaWR0aCIsInZpZXdwb3J0SCIsImlubmVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm1pbiIsImNsb3NlIiwidG9nZ2xlIiwicHJldiIsImNvbW1pdFBpbiIsIml0ZW0iLCJfcmF3JGNsaWVudE5hbWUiLCJyYXciLCJjbGllbnRJZCIsIk51bWJlciIsInVuZGVmaW5lZCIsImNsaWVudE5hbWUiLCJjb25zb2xlIiwiaW5mbyIsInR5cGUiLCJyYXdJZCIsImlkIiwicmF3TmFtZSIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsIl9yYXckdG90YWxQcm95ZWN0b3MiLCJ0b3RhbFByb3llY3RvcyIsIl9vYmplY3RTcHJlYWQiLCJmZWVJZCIsImNsaWVudCIsInByb2plY3RJZCIsIlN0cmluZyIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSIsIm1vdXNlRXZlbnQiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIyIiwiX3RyaWdnZXJSZWYkY3VycmVudCIsIl9jbG9zZXN0IiwiX3JlZjIiLCJ0YXJnZXQiLCJjb250YWlucyIsIm92ZXJsYXkiLCJjbG9zZXN0IiwiY2FsbCIsImNvbmNhdCIsImRvY3VtZW50IiwicG9wb3Zlck5vZGUiLCJfZGVmaW5lUHJvcGVydHkiLCIkYm90dG9tIiwiJGxlZnQiLCIkd2lkdGgiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2hpbGRyZW4iLCJvblR5cGVDaGFuZ2UiLCJvblJlYWNoTGlzdEVuZCIsIm9uSXRlbVNlbGVjdGVkIiwic2hvd1NlYXJjaElucHV0IiwiaGlkZVRhYlByZWZpeCIsInNlYXJjaFBsYWNlaG9sZGVyIiwiZGVmYXVsdFZhbHVlIiwib25TZWFyY2hDaGFuZ2UiLCJvblJlcXVlc3RDbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb250ZXh0UGluUG9wb3Zlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDb250ZXh0TWVudGlvblBvcG92ZXIsXG4gIE1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIsXG4gIFNDTVBBbmNob3IsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25Qb3BvdmVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4vdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZUVudGl0eVNlYXJjaCB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG4vKiogVGlwb3MgcGluZWFibGVzIGNvbW8gY29udGV4dG8gcGVyc2lzdGVudGUgKFJGQyDCpzY6IG5vIGluY2x1eWUgYHVzZXJgLCBxdWUgZXMgc29sbyBtZW5jacOzbikuICovXG5jb25zdCBQSU5fQUxMT1dFRF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzayddXG5jb25zdCBQSU5fREVGQVVMVF9UWVBFOiBDb250ZXh0RW50aXR5VHlwZSA9ICdwcm9qZWN0J1xuXG5leHBvcnQgdHlwZSBVc2VDb250ZXh0UGluUG9wb3Zlck9wdGlvbnMgPSB7XG4gIC8qKiBXcmFwcGVyIGRlbCBNQUlBSW5wdXQ6IGRlZmluZSBhbmNobyB5IGFsaW5lYWNpw7NuIGhvcml6b250YWwgKGlndWFsIHF1ZSBALW1lbnRpb25zKS4gKi9cbiAgcG9wb3ZlckFuY2hvclJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIEZpbGEgZGVsIGNoaXAgLyBiYXJyYSBkZSBjb250ZXh0bzogZGVmaW5lIGVsIGJvcmRlIHN1cGVyaW9yIHZlcnRpY2FsIGRlbCBwb3BvdmVyLiAqL1xuICB0b3BBbmNob3JSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogQm90w7NuIFwiKyBDb250ZXh0b1wiOyBubyBjZXJyYXIgYWwgaGFjZXIgY2xpY2sgZW4gZWwgdHJpZ2dlci4gKi9cbiAgdHJpZ2dlclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBPdmVycmlkZSBkZWwgc2V0IGRlIHRhYnMgcGluZWFibGVzOyBwb3IgZGVmZWN0byBjbGllbnRlL3Byb3llY3RvL3RhcmVhLiAqL1xuICBlbmFibGVkVHlwZXM/OiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIC8qKiBDYWxsYmFjayB0cmFzIGZpamFyIHVuIGNvbnRleHRvIChhbmFseXRpY3MgLyBjaWVycmUgZXh0ZXJubykuICovXG4gIG9uUGlubmVkPzogKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VDb250ZXh0UGluUG9wb3ZlclJldHVybiA9IHtcbiAgb3BlbjogYm9vbGVhblxuICAvKiogQWJyZS9jaWVycmEgZWwgcG9wb3ZlciAoaGFuZGxlciBkZWwgYm90w7NuIFwiKyBDb250ZXh0b1wiKS4gKi9cbiAgdG9nZ2xlOiAoKSA9PiB2b2lkXG4gIGNsb3NlOiAoKSA9PiB2b2lkXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbn1cblxuLyoqXG4gKiBTZWd1bmRvIHB1bnRvIGRlIGVudHJhZGEgZGVsIGJ1c2NhZG9yIGRlIGNvbnRleHRvIChSRkMgwqc2KTogZWwgbWlzbW8gbW90b3JcbiAqIChgdXNlRW50aXR5U2VhcmNoYCArIGBDb250ZXh0TWVudGlvblBvcG92ZXJgKSBwZXJvIGVsIGNvbW1pdCBmaWphIHVuICoqcGluKipcbiAqIHBlcnNpc3RlbnRlIGVuIGVsIGNvbnRleHRvIGdsb2JhbCBlbiB2ZXogZGUgaW5zZXJ0YXIgdW5hIG1lbmNpw7NuLlxuICpcbiAqIEplcmFycXXDrWEgbW9uby1jb250ZXh0byAoUkZDIMKnNS4xKTogdW4gcGluIGEgbGEgdmV6OyBmaWphciB1bm8gcmVlbXBsYXphIGFsXG4gKiBhbnRlcmlvciB5IGFycmFzdHJhIHN1IHNjb3BlIGhhY2lhIGFycmliYSAodGFyZWEg4oeSIHByb3llY3RvK2NsaWVudGUsIGV0Yy4pLlxuICovXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dFBpblBvcG92ZXIgPSAoe1xuICBwb3BvdmVyQW5jaG9yUmVmLFxuICB0b3BBbmNob3JSZWYsXG4gIHRyaWdnZXJSZWYsXG4gIGVuYWJsZWRUeXBlcyxcbiAgb25QaW5uZWQsXG59OiBVc2VDb250ZXh0UGluUG9wb3Zlck9wdGlvbnMpOiBVc2VDb250ZXh0UGluUG9wb3ZlclJldHVybiA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB6SW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcblxuICBjb25zdCBhbGxvd2VkVHlwZXMgPSBlbmFibGVkVHlwZXMgJiYgZW5hYmxlZFR5cGVzLmxlbmd0aCA+IDAgPyBlbmFibGVkVHlwZXMgOiBQSU5fQUxMT1dFRF9UWVBFU1xuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oXG4gICAgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKFBJTl9ERUZBVUxUX1RZUEUpID8gUElOX0RFRkFVTFRfVFlQRSA6IGFsbG93ZWRUeXBlc1swXVxuICApXG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9zLCBzZXRQb3NdID0gdXNlU3RhdGU8eyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0+KHsgYm90dG9tOiAwLCBsZWZ0OiAwLCB3aWR0aDogMCB9KVxuXG4gIC8vIFNjb3BlIHNpbiByZXN0cmljY2nDs246IGRlc2RlIGVsIGJvdMOzbiBzZSBidXNjYSBsaWJyZW1lbnRlIGN1YWxxdWllciBlbnRpZGFkIChtb2RvIGdsb2JhbCkuXG4gIGNvbnN0IHsgaXRlbXMsIGxvYWRpbmcsIGVycm9yLCBoaWRlUmVjZW50c0xhYmVsLCBoYXNNb3JlLCBpc0xvYWRpbmdNb3JlLCBsb2FkTW9yZSwgc2VhcmNoVmFsdWUsIHVwZGF0ZVNlYXJjaFZhbHVlIH0gPVxuICAgIHVzZUVudGl0eVNlYXJjaChhY3RpdmVUeXBlKVxuXG4gIGNvbnN0IHBvc2l0aW9uUG9wb3ZlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFJlY3QgPSBwb3BvdmVyQW5jaG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKCFpbnB1dFJlY3QgfHwgaW5wdXRSZWN0LndpZHRoIDw9IDApIHJldHVyblxuICAgIGNvbnN0IHRvcFJlY3QgPSB0b3BBbmNob3JSZWY/LmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3QgYW5jaG9yVG9wID0gdG9wUmVjdD8udG9wID8/IGlucHV0UmVjdC50b3BcbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGlucHV0UmVjdFxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih2aWV3cG9ydFcgLSB3aWR0aCAtIDgsIGlucHV0UmVjdC5sZWZ0KSlcbiAgICAvKiogfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZSBsYSBiYXJyYSBkZSBjb250ZXh0byAoY2hpcCksIG5vIGRlbCBpbnB1dC4gKi9cbiAgICBzZXRQb3MoeyB3aWR0aCwgbGVmdCwgYm90dG9tOiB2aWV3cG9ydEggLSBhbmNob3JUb3AgKyA0IH0pXG4gIH0sIFtwb3BvdmVyQW5jaG9yUmVmLCB0b3BBbmNob3JSZWZdKVxuXG4gIGNvbnN0IGNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICB1cGRhdGVTZWFyY2hWYWx1ZSgnJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9LCBbcG9zaXRpb25Qb3BvdmVyLCB1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgY29tbWl0UGluID0gdXNlQ2FsbGJhY2soXG4gICAgKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3QgeyByYXcgfSA9IGl0ZW1cbiAgICAgIGNvbnN0IGNsaWVudElkID0gcmF3LmNsaWVudElkICE9IG51bGwgPyBOdW1iZXIocmF3LmNsaWVudElkKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgY2xpZW50TmFtZSA9IHJhdy5jbGllbnROYW1lID8/IHVuZGVmaW5lZFxuXG4gICAgICBjb25zb2xlLmluZm8oJ1t1c2VDb250ZXh0UGluUG9wb3Zlcl0gY29tbWl0UGluIOKAlCBBU0lHTkFORE8gY29udGV4dG86Jywge1xuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgIHJhd0lkOiByYXcuaWQsXG4gICAgICAgIHJhd05hbWU6IHJhdy5uYW1lLFxuICAgICAgICBwcm9qZWN0TmFtZTogcmF3LnByb2plY3ROYW1lLFxuICAgICAgICBjbGllbnRJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50KHsgaWQ6IE51bWJlcihyYXcuaWQpLCBuYW1lOiByYXcubmFtZSwgdG90YWxQcm95ZWN0b3M6IHJhdy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogTnVtYmVyKHJhdy5pZCksXG4gICAgICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHJhdy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogcmF3LmZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICAvLyBjaGlwc1Byb2plY3QgaGFjZSB2aXNpYmxlIGVsIHBpbiBlbiBlbCBjaGlwIGRlbCBvcnF1ZXN0YWRvciAoUkZDIMKnNykuXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHJhdy5pZCksIHByb2plY3ROYW1lOiByYXcubmFtZSwgY2xpZW50TmFtZTogY2xpZW50TmFtZSA/PyAnJyB9KVxuICAgICAgICBzZXRDbGllbnQoY2xpZW50SWQgIT0gbnVsbCA/IHsgaWQ6IGNsaWVudElkLCBuYW1lOiBjbGllbnROYW1lID8/ICcnIH0gOiBudWxsKVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICAvLyBFbCBpdGVtIGRlIHRhcmVhIG5vIHRyYWUgcHJvamVjdElkIGZpYWJsZTsgc3ViaW1vcyBsbyBkaXNwb25pYmxlIChwcm95ZWN0byBwb3Igbm9tYnJlLCBjbGllbnRlIHBvciBpZCkuXG4gICAgICAgIHNldFRhc2soeyBpZDogcmF3LmlkLCBuYW1lOiByYXcubmFtZSwgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSkgfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KFxuICAgICAgICAgIHJhdy5wcm9qZWN0TmFtZSA/IHsgcHJvamVjdElkOiAnJywgcHJvamVjdE5hbWU6IHJhdy5wcm9qZWN0TmFtZSwgY2xpZW50TmFtZTogY2xpZW50TmFtZSA/PyAnJyB9IDogbnVsbFxuICAgICAgICApXG4gICAgICAgIGlmIChjbGllbnRJZCAhPSBudWxsKSBzZXRDbGllbnQoeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSlcbiAgICAgIH1cblxuICAgICAgb25QaW5uZWQ/LihpdGVtKVxuICAgICAgY2xvc2UoKVxuICAgIH0sXG4gICAgW3NldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBvblBpbm5lZCwgY2xvc2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW29wZW4sIHBvc2l0aW9uUG9wb3Zlcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGxcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgaWYgKHRyaWdnZXJSZWY/LmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgY29uc3Qgb3ZlcmxheSA9ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgWyR7TUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUn1dYClcbiAgICAgIGlmIChvdmVybGF5KSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gIH0sIFtvcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZiwgdHJpZ2dlclJlZl0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01QQW5jaG9yXG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9zLmJvdHRvbX1cbiAgICAgICAgJGxlZnQ9e3Bvcy5sZWZ0fVxuICAgICAgICAkd2lkdGg9e3Bvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17ekluZGV4fVxuICAgICAgICBvbk1vdXNlRG93bj17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgPlxuICAgICAgICA8Q29udGV4dE1lbnRpb25Qb3BvdmVyXG4gICAgICAgICAgYWxsb3dlZFR5cGVzPXthbGxvd2VkVHlwZXN9XG4gICAgICAgICAgYWN0aXZlVHlwZT17YWN0aXZlVHlwZX1cbiAgICAgICAgICBvblR5cGVDaGFuZ2U9e3NldEFjdGl2ZVR5cGV9XG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgIGhpZGVSZWNlbnRzTGFiZWw9e2hpZGVSZWNlbnRzTGFiZWx9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBpc0xvYWRpbmdNb3JlPXtpc0xvYWRpbmdNb3JlfVxuICAgICAgICAgIG9uUmVhY2hMaXN0RW5kPXtsb2FkTW9yZX1cbiAgICAgICAgICBzZWFyY2hWYWx1ZT17c2VhcmNoVmFsdWV9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2NvbW1pdFBpbn1cbiAgICAgICAgICBzaG93U2VhcmNoSW5wdXRcbiAgICAgICAgICBoaWRlVGFiUHJlZml4XG4gICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9e3QoJ2NvbnRleHRQaW4uc2VhcmNoUGxhY2Vob2xkZXInLCB7IGRlZmF1bHRWYWx1ZTogJ0J1c2NhciBjb250ZXh0b+KApicgfSl9XG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2U9e3VwZGF0ZVNlYXJjaFZhbHVlfVxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXtjbG9zZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU0NNUEFuY2hvcj5cbiAgICApXG4gIH0sIFtcbiAgICBvcGVuLFxuICAgIHBvcyxcbiAgICB6SW5kZXgsXG4gICAgYWxsb3dlZFR5cGVzLFxuICAgIGFjdGl2ZVR5cGUsXG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBoaWRlUmVjZW50c0xhYmVsLFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICBjb21taXRQaW4sXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgY2xvc2UsXG4gICAgdCxcbiAgXSlcblxuICByZXR1cm4geyBvcGVuLCB0b2dnbGUsIGNsb3NlLCBwb3BvdmVyTm9kZSB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUErQkEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDdkYsU0FDRUMscUJBQXFCLEVBQ3JCQyw0QkFBNEIsRUFDNUJDLFVBQVUsUUFDTCwyQ0FBMkM7QUFDbEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDJCQUEyQjtBQUM1RCxTQUFTQyxJQUFJLFFBQVEsUUFBUTtBQUM3QjtBQUNBLFNBQVNDLGVBQWUsUUFBUSxtQkFBbUI7QUFBQSxTQUFB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
|