@projectcor/maia-components 2.11.26-11 → 2.11.26-3
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/ApprovalBox/ApprovalBox.js +54 -70
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +39 -30
- package/lib/components/atoms/MAIAInput/MAIAInput.js +9 -3
- package/lib/components/atoms/MAIAInput/styles.js +26 -23
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +2 -2
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -8
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -13
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +7 -7
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +5 -5
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
- package/lib/hooks/useChatManager/useChatManager.js +31 -18
- package/lib/hooks/useOrchestratorStream/streamRevealSmooth.js +198 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +35 -8
- package/lib/lang/br/index.js +49 -22
- package/lib/lang/en/index.js +41 -14
- package/lib/lang/es/index.js +40 -3
- package/lib/lang/fr/index.js +19 -2
- package/lib/services/utils/mapChatMessages.js +21 -4
- package/lib/types/Chat.js +1 -1
- package/package.json +1 -1
- package/lib/utils/hitlAnalytics.js +0 -25
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
/* eslint-disable no-underscore-dangle -- flags globales window.__MAIA_STREAM_REVEAL_DEBUG__ */
|
|
5
|
+
|
|
6
|
+
/** Valores por defecto del reveal: typing suave sin quedarse demasiado atrás del SSE. */
|
|
7
|
+
export var STREAM_REVEAL_DEFAULTS = {
|
|
8
|
+
maxCharsPerFrame: 8,
|
|
9
|
+
minCharsPerFrame: 1,
|
|
10
|
+
backlogDivisor: 28
|
|
11
|
+
};
|
|
12
|
+
var REPORT_INTERVAL_MS = 1000;
|
|
13
|
+
function isRevealDebugEnabled() {
|
|
14
|
+
return typeof window !== 'undefined' && Boolean(window.__MAIA_STREAM_REVEAL_DEBUG__);
|
|
15
|
+
}
|
|
16
|
+
function isRevealDebugVerbose() {
|
|
17
|
+
return typeof window !== 'undefined' && Boolean(window.__MAIA_STREAM_REVEAL_DEBUG_VERBOSE__);
|
|
18
|
+
}
|
|
19
|
+
function emptyPeriod() {
|
|
20
|
+
return {
|
|
21
|
+
tickCount: 0,
|
|
22
|
+
charsRevealed: 0,
|
|
23
|
+
stepSum: 0,
|
|
24
|
+
maxBacklog: 0,
|
|
25
|
+
setTargetCount: 0,
|
|
26
|
+
sseCharsAppended: 0,
|
|
27
|
+
firstTickAt: 0,
|
|
28
|
+
lastTickAt: 0,
|
|
29
|
+
sumInterTickMs: 0,
|
|
30
|
+
interTickSamples: 0
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Convierte ráfagas irregulares del SSE en actualizaciones de UI más frecuentes y
|
|
36
|
+
* acotadas por frame (estilo “persigue al objetivo”).
|
|
37
|
+
*/
|
|
38
|
+
export function createStreamRevealSmooth(onReveal) {
|
|
39
|
+
var _options$maxCharsPerF, _options$minCharsPerF, _options$backlogDivis;
|
|
40
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
41
|
+
var maxPF = (_options$maxCharsPerF = options.maxCharsPerFrame) !== null && _options$maxCharsPerF !== void 0 ? _options$maxCharsPerF : STREAM_REVEAL_DEFAULTS.maxCharsPerFrame;
|
|
42
|
+
var minPF = (_options$minCharsPerF = options.minCharsPerFrame) !== null && _options$minCharsPerF !== void 0 ? _options$minCharsPerF : STREAM_REVEAL_DEFAULTS.minCharsPerFrame;
|
|
43
|
+
var divisor = (_options$backlogDivis = options.backlogDivisor) !== null && _options$backlogDivis !== void 0 ? _options$backlogDivis : STREAM_REVEAL_DEFAULTS.backlogDivisor;
|
|
44
|
+
var target = '';
|
|
45
|
+
var display = '';
|
|
46
|
+
var raf = null;
|
|
47
|
+
var sessionId = 0;
|
|
48
|
+
var lastReportAt = 0;
|
|
49
|
+
var period = emptyPeriod();
|
|
50
|
+
var prevTargetLen = 0;
|
|
51
|
+
var lastTickPerf = 0;
|
|
52
|
+
var logConstantsOnce = function logConstantsOnce() {
|
|
53
|
+
if (!isRevealDebugEnabled()) return;
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
console.log('[MAIA stream reveal] constantes activas', {
|
|
56
|
+
sessionId: sessionId,
|
|
57
|
+
maxCharsPerFrame: maxPF,
|
|
58
|
+
minCharsPerFrame: minPF,
|
|
59
|
+
backlogDivisor: divisor,
|
|
60
|
+
defaults: _objectSpread({}, STREAM_REVEAL_DEFAULTS),
|
|
61
|
+
hint: 'Ajustar en STREAM_REVEAL_DEFAULTS o vía options si staging/prod se siente lento o entrecortado'
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
var flushPeriodReport = function flushPeriodReport(reason) {
|
|
65
|
+
if (!isRevealDebugEnabled() || period.tickCount === 0 && period.setTargetCount === 0) {
|
|
66
|
+
period = emptyPeriod();
|
|
67
|
+
lastReportAt = performance.now();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var now = performance.now();
|
|
71
|
+
var elapsed = Math.max(1, now - lastReportAt);
|
|
72
|
+
var wallMs = period.lastTickAt > 0 && period.firstTickAt > 0 ? period.lastTickAt - period.firstTickAt : 0;
|
|
73
|
+
var avgInterTickMs = period.interTickSamples > 0 ? period.sumInterTickMs / period.interTickSamples : null;
|
|
74
|
+
var revealCharsPerSec = elapsed > 0 ? period.charsRevealed / elapsed * 1000 : 0;
|
|
75
|
+
var avgStep = period.tickCount > 0 ? period.stepSum / period.tickCount : 0;
|
|
76
|
+
var avgSseChunk = period.setTargetCount > 0 ? period.sseCharsAppended / period.setTargetCount : 0;
|
|
77
|
+
|
|
78
|
+
// eslint-disable-next-line no-console
|
|
79
|
+
console.log("[MAIA stream reveal] ".concat(reason), {
|
|
80
|
+
sessionId: sessionId,
|
|
81
|
+
windowMs: Math.round(elapsed),
|
|
82
|
+
ticks: period.tickCount,
|
|
83
|
+
charsRevealedInWindow: period.charsRevealed,
|
|
84
|
+
revealCharsPerSec: Math.round(revealCharsPerSec * 10) / 10,
|
|
85
|
+
maxBacklogInWindow: period.maxBacklog,
|
|
86
|
+
avgStep: Math.round(avgStep * 10) / 10,
|
|
87
|
+
setTargetCalls: period.setTargetCount,
|
|
88
|
+
sseCharsAppendedInWindow: period.sseCharsAppended,
|
|
89
|
+
avgSseDeltaCharsPerSetTarget: Math.round(avgSseChunk * 10) / 10,
|
|
90
|
+
avgMsBetweenRevealTicks: avgInterTickMs != null ? Math.round(avgInterTickMs * 10) / 10 : null,
|
|
91
|
+
revealWallMs: wallMs > 0 ? Math.round(wallMs) : null,
|
|
92
|
+
currentLagChars: target.length - display.length
|
|
93
|
+
});
|
|
94
|
+
period = emptyPeriod();
|
|
95
|
+
lastReportAt = now;
|
|
96
|
+
};
|
|
97
|
+
var _tick = function tick() {
|
|
98
|
+
raf = null;
|
|
99
|
+
if (display.length >= target.length) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
var now = performance.now();
|
|
103
|
+
var backlog = target.length - display.length;
|
|
104
|
+
var step = Math.min(maxPF, Math.max(minPF, Math.ceil(backlog / divisor)));
|
|
105
|
+
if (isRevealDebugEnabled()) {
|
|
106
|
+
if (period.tickCount === 0) {
|
|
107
|
+
period.firstTickAt = now;
|
|
108
|
+
} else if (lastTickPerf > 0) {
|
|
109
|
+
period.sumInterTickMs += now - lastTickPerf;
|
|
110
|
+
period.interTickSamples += 1;
|
|
111
|
+
}
|
|
112
|
+
lastTickPerf = now;
|
|
113
|
+
period.tickCount += 1;
|
|
114
|
+
period.charsRevealed += step;
|
|
115
|
+
period.stepSum += step;
|
|
116
|
+
period.maxBacklog = Math.max(period.maxBacklog, backlog);
|
|
117
|
+
period.lastTickAt = now;
|
|
118
|
+
if (isRevealDebugVerbose()) {
|
|
119
|
+
// eslint-disable-next-line no-console
|
|
120
|
+
console.log('[MAIA stream reveal] tick', {
|
|
121
|
+
sessionId: sessionId,
|
|
122
|
+
backlog: backlog,
|
|
123
|
+
step: step,
|
|
124
|
+
displayLen: display.length + step,
|
|
125
|
+
targetLen: target.length
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (lastReportAt === 0) lastReportAt = now;
|
|
129
|
+
if (now - lastReportAt >= REPORT_INTERVAL_MS) {
|
|
130
|
+
flushPeriodReport('periódico (~1s)');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
display = target.slice(0, display.length + step);
|
|
134
|
+
onReveal(display);
|
|
135
|
+
if (display.length < target.length) {
|
|
136
|
+
raf = requestAnimationFrame(_tick);
|
|
137
|
+
} else if (isRevealDebugEnabled()) {
|
|
138
|
+
lastTickPerf = 0;
|
|
139
|
+
flushPeriodReport('alcanzó target (catch-up)');
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
/** Sustituye el texto objetivo (contenido acumulado del servidor). */setTarget: function setTarget(nextFull) {
|
|
144
|
+
if (isRevealDebugEnabled()) {
|
|
145
|
+
var delta = nextFull.length - prevTargetLen;
|
|
146
|
+
prevTargetLen = nextFull.length;
|
|
147
|
+
period.setTargetCount += 1;
|
|
148
|
+
if (delta > 0) period.sseCharsAppended += delta;
|
|
149
|
+
var now = performance.now();
|
|
150
|
+
if (lastReportAt === 0) lastReportAt = now;
|
|
151
|
+
if (now - lastReportAt >= REPORT_INTERVAL_MS) {
|
|
152
|
+
flushPeriodReport('periódico (~1s, desde setTarget)');
|
|
153
|
+
}
|
|
154
|
+
if (isRevealDebugVerbose()) {
|
|
155
|
+
// eslint-disable-next-line no-console
|
|
156
|
+
console.log('[MAIA stream reveal] setTarget (SSE acumulado)', {
|
|
157
|
+
sessionId: sessionId,
|
|
158
|
+
targetLen: nextFull.length,
|
|
159
|
+
deltaCharsFromPrevTarget: delta,
|
|
160
|
+
displayLen: display.length,
|
|
161
|
+
lagCharsBefore: nextFull.length - display.length
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
target = nextFull;
|
|
166
|
+
if (display.length < target.length && raf == null) {
|
|
167
|
+
raf = requestAnimationFrame(_tick);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
cancel: function cancel() {
|
|
171
|
+
if (isRevealDebugEnabled() && (period.tickCount > 0 || period.setTargetCount > 0)) {
|
|
172
|
+
flushPeriodReport('cancel');
|
|
173
|
+
}
|
|
174
|
+
if (raf != null) {
|
|
175
|
+
cancelAnimationFrame(raf);
|
|
176
|
+
raf = null;
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
/** Limpia estado para un nuevo stream. */reset: function reset() {
|
|
180
|
+
if (isRevealDebugEnabled() && (period.tickCount > 0 || period.setTargetCount > 0)) {
|
|
181
|
+
flushPeriodReport('reset (fin de sesión anterior)');
|
|
182
|
+
}
|
|
183
|
+
if (raf != null) {
|
|
184
|
+
cancelAnimationFrame(raf);
|
|
185
|
+
raf = null;
|
|
186
|
+
}
|
|
187
|
+
target = '';
|
|
188
|
+
display = '';
|
|
189
|
+
sessionId += 1;
|
|
190
|
+
prevTargetLen = 0;
|
|
191
|
+
lastTickPerf = 0;
|
|
192
|
+
period = emptyPeriod();
|
|
193
|
+
lastReportAt = 0;
|
|
194
|
+
logConstantsOnce();
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJFQU1fUkVWRUFMX0RFRkFVTFRTIiwibWF4Q2hhcnNQZXJGcmFtZSIsIm1pbkNoYXJzUGVyRnJhbWUiLCJiYWNrbG9nRGl2aXNvciIsIlJFUE9SVF9JTlRFUlZBTF9NUyIsImlzUmV2ZWFsRGVidWdFbmFibGVkIiwid2luZG93IiwiQm9vbGVhbiIsIl9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18iLCJpc1JldmVhbERlYnVnVmVyYm9zZSIsIl9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX1ZFUkJPU0VfXyIsImVtcHR5UGVyaW9kIiwidGlja0NvdW50IiwiY2hhcnNSZXZlYWxlZCIsInN0ZXBTdW0iLCJtYXhCYWNrbG9nIiwic2V0VGFyZ2V0Q291bnQiLCJzc2VDaGFyc0FwcGVuZGVkIiwiZmlyc3RUaWNrQXQiLCJsYXN0VGlja0F0Iiwic3VtSW50ZXJUaWNrTXMiLCJpbnRlclRpY2tTYW1wbGVzIiwiY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoIiwib25SZXZlYWwiLCJfb3B0aW9ucyRtYXhDaGFyc1BlckYiLCJfb3B0aW9ucyRtaW5DaGFyc1BlckYiLCJfb3B0aW9ucyRiYWNrbG9nRGl2aXMiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibWF4UEYiLCJtaW5QRiIsImRpdmlzb3IiLCJ0YXJnZXQiLCJkaXNwbGF5IiwicmFmIiwic2Vzc2lvbklkIiwibGFzdFJlcG9ydEF0IiwicGVyaW9kIiwicHJldlRhcmdldExlbiIsImxhc3RUaWNrUGVyZiIsImxvZ0NvbnN0YW50c09uY2UiLCJjb25zb2xlIiwibG9nIiwiZGVmYXVsdHMiLCJfb2JqZWN0U3ByZWFkIiwiaGludCIsImZsdXNoUGVyaW9kUmVwb3J0IiwicmVhc29uIiwicGVyZm9ybWFuY2UiLCJub3ciLCJlbGFwc2VkIiwiTWF0aCIsIm1heCIsIndhbGxNcyIsImF2Z0ludGVyVGlja01zIiwicmV2ZWFsQ2hhcnNQZXJTZWMiLCJhdmdTdGVwIiwiYXZnU3NlQ2h1bmsiLCJjb25jYXQiLCJ3aW5kb3dNcyIsInJvdW5kIiwidGlja3MiLCJjaGFyc1JldmVhbGVkSW5XaW5kb3ciLCJtYXhCYWNrbG9nSW5XaW5kb3ciLCJzZXRUYXJnZXRDYWxscyIsInNzZUNoYXJzQXBwZW5kZWRJbldpbmRvdyIsImF2Z1NzZURlbHRhQ2hhcnNQZXJTZXRUYXJnZXQiLCJhdmdNc0JldHdlZW5SZXZlYWxUaWNrcyIsInJldmVhbFdhbGxNcyIsImN1cnJlbnRMYWdDaGFycyIsInRpY2siLCJiYWNrbG9nIiwic3RlcCIsIm1pbiIsImNlaWwiLCJkaXNwbGF5TGVuIiwidGFyZ2V0TGVuIiwic2xpY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUYXJnZXQiLCJuZXh0RnVsbCIsImRlbHRhIiwiZGVsdGFDaGFyc0Zyb21QcmV2VGFyZ2V0IiwibGFnQ2hhcnNCZWZvcmUiLCJjYW5jZWwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS9zdHJlYW1SZXZlYWxTbW9vdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgLS0gZmxhZ3MgZ2xvYmFsZXMgd2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnMgPSB7XG4gIC8qKiBUb3BlIGRlIGNhcmFjdGVyZXMgcmV2ZWxhZG9zIHBvciBmcmFtZSAofjYwZnBzKS4gTcOhcyBiYWpvID0gbcOhcyBzdWF2ZS4gKi9cbiAgbWF4Q2hhcnNQZXJGcmFtZT86IG51bWJlclxuICBtaW5DaGFyc1BlckZyYW1lPzogbnVtYmVyXG4gIC8qKlxuICAgKiBFbnRyZSBtw6FzIGFsdG8sIG3DoXMgcGVxdWXDsW9zIGxvcyBwYXNvcyBjdWFuZG8gaGF5IG11Y2hvIHRleHRvIHBlbmRpZW50ZVxuICAgKiAobcOhcyBmbHVpZGV6OyBtw6FzIGZyYW1lcyBoYXN0YSBhbGNhbnphciBlbCBvYmpldGl2byBzaSBlbCBzdHJlYW0gZXMgbXV5IGxhcmdvKS5cbiAgICovXG4gIGJhY2tsb2dEaXZpc29yPzogbnVtYmVyXG59XG5cbi8qKiBWYWxvcmVzIHBvciBkZWZlY3RvIGRlbCByZXZlYWw6IHR5cGluZyBzdWF2ZSBzaW4gcXVlZGFyc2UgZGVtYXNpYWRvIGF0csOhcyBkZWwgU1NFLiAqL1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9SRVZFQUxfREVGQVVMVFMgPSB7XG4gIG1heENoYXJzUGVyRnJhbWU6IDgsXG4gIG1pbkNoYXJzUGVyRnJhbWU6IDEsXG4gIGJhY2tsb2dEaXZpc29yOiAyOCxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnNcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvKipcbiAgICAgKiBFbiBjb25zb2xhOiBgd2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18gPSB0cnVlYFxuICAgICAqIExvZ3MgZGUgdmVsb2NpZGFkIGRlIHJldmVhbCwgYmFja2xvZyB2cyBTU0UgeSBjb25zdGFudGVzIGFjdGl2YXMgKGxvY2FsL3N0YWdpbmcvcHJvZCkuXG4gICAgICovXG4gICAgX19NQUlBX1NUUkVBTV9SRVZFQUxfREVCVUdfXz86IGJvb2xlYW5cbiAgICAvKiogU2kgYWRlbcOhcyBlc3TDoSBlbiB0cnVlLCB1biBsb2cgcG9yIGNhZGEgZnJhbWUgZGUgcmV2ZWFsIChtdXkgcnVpZG9zbykuICovXG4gICAgX19NQUlBX1NUUkVBTV9SRVZFQUxfREVCVUdfVkVSQk9TRV9fPzogYm9vbGVhblxuICB9XG59XG5cbmNvbnN0IFJFUE9SVF9JTlRFUlZBTF9NUyA9IDEwMDBcblxuZnVuY3Rpb24gaXNSZXZlYWxEZWJ1Z0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBCb29sZWFuKHdpbmRvdy5fX01BSUFfU1RSRUFNX1JFVkVBTF9ERUJVR19fKVxufVxuXG5mdW5jdGlvbiBpc1JldmVhbERlYnVnVmVyYm9zZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIEJvb2xlYW4od2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX1ZFUkJPU0VfXylcbn1cblxudHlwZSBQZXJpb2RTdGF0cyA9IHtcbiAgdGlja0NvdW50OiBudW1iZXJcbiAgY2hhcnNSZXZlYWxlZDogbnVtYmVyXG4gIHN0ZXBTdW06IG51bWJlclxuICBtYXhCYWNrbG9nOiBudW1iZXJcbiAgc2V0VGFyZ2V0Q291bnQ6IG51bWJlclxuICBzc2VDaGFyc0FwcGVuZGVkOiBudW1iZXJcbiAgZmlyc3RUaWNrQXQ6IG51bWJlclxuICBsYXN0VGlja0F0OiBudW1iZXJcbiAgc3VtSW50ZXJUaWNrTXM6IG51bWJlclxuICBpbnRlclRpY2tTYW1wbGVzOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gZW1wdHlQZXJpb2QoKTogUGVyaW9kU3RhdHMge1xuICByZXR1cm4ge1xuICAgIHRpY2tDb3VudDogMCxcbiAgICBjaGFyc1JldmVhbGVkOiAwLFxuICAgIHN0ZXBTdW06IDAsXG4gICAgbWF4QmFja2xvZzogMCxcbiAgICBzZXRUYXJnZXRDb3VudDogMCxcbiAgICBzc2VDaGFyc0FwcGVuZGVkOiAwLFxuICAgIGZpcnN0VGlja0F0OiAwLFxuICAgIGxhc3RUaWNrQXQ6IDAsXG4gICAgc3VtSW50ZXJUaWNrTXM6IDAsXG4gICAgaW50ZXJUaWNrU2FtcGxlczogMCxcbiAgfVxufVxuXG4vKipcbiAqIENvbnZpZXJ0ZSByw6FmYWdhcyBpcnJlZ3VsYXJlcyBkZWwgU1NFIGVuIGFjdHVhbGl6YWNpb25lcyBkZSBVSSBtw6FzIGZyZWN1ZW50ZXMgeVxuICogYWNvdGFkYXMgcG9yIGZyYW1lIChlc3RpbG8g4oCccGVyc2lndWUgYWwgb2JqZXRpdm/igJ0pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoKFxuICBvblJldmVhbDogKGRpc3BsYXlUZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4gIG9wdGlvbnM6IFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnMgPSB7fVxuKSB7XG4gIGNvbnN0IG1heFBGID0gb3B0aW9ucy5tYXhDaGFyc1BlckZyYW1lID8/IFNUUkVBTV9SRVZFQUxfREVGQVVMVFMubWF4Q2hhcnNQZXJGcmFtZVxuICBjb25zdCBtaW5QRiA9IG9wdGlvbnMubWluQ2hhcnNQZXJGcmFtZSA/PyBTVFJFQU1fUkVWRUFMX0RFRkFVTFRTLm1pbkNoYXJzUGVyRnJhbWVcbiAgY29uc3QgZGl2aXNvciA9IG9wdGlvbnMuYmFja2xvZ0Rpdmlzb3IgPz8gU1RSRUFNX1JFVkVBTF9ERUZBVUxUUy5iYWNrbG9nRGl2aXNvclxuXG4gIGxldCB0YXJnZXQgPSAnJ1xuICBsZXQgZGlzcGxheSA9ICcnXG4gIGxldCByYWY6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgbGV0IHNlc3Npb25JZCA9IDBcbiAgbGV0IGxhc3RSZXBvcnRBdCA9IDBcbiAgbGV0IHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgbGV0IHByZXZUYXJnZXRMZW4gPSAwXG4gIGxldCBsYXN0VGlja1BlcmYgPSAwXG5cbiAgY29uc3QgbG9nQ29uc3RhbnRzT25jZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmV2ZWFsRGVidWdFbmFibGVkKCkpIHJldHVyblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ1tNQUlBIHN0cmVhbSByZXZlYWxdIGNvbnN0YW50ZXMgYWN0aXZhcycsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IG1heFBGLFxuICAgICAgbWluQ2hhcnNQZXJGcmFtZTogbWluUEYsXG4gICAgICBiYWNrbG9nRGl2aXNvcjogZGl2aXNvcixcbiAgICAgIGRlZmF1bHRzOiB7IC4uLlNUUkVBTV9SRVZFQUxfREVGQVVMVFMgfSxcbiAgICAgIGhpbnQ6ICdBanVzdGFyIGVuIFNUUkVBTV9SRVZFQUxfREVGQVVMVFMgbyB2w61hIG9wdGlvbnMgc2kgc3RhZ2luZy9wcm9kIHNlIHNpZW50ZSBsZW50byBvIGVudHJlY29ydGFkbycsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVyaW9kUmVwb3J0ID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc1JldmVhbERlYnVnRW5hYmxlZCgpIHx8IChwZXJpb2QudGlja0NvdW50ID09PSAwICYmIHBlcmlvZC5zZXRUYXJnZXRDb3VudCA9PT0gMCkpIHtcbiAgICAgIHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgICAgIGxhc3RSZXBvcnRBdCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5tYXgoMSwgbm93IC0gbGFzdFJlcG9ydEF0KVxuICAgIGNvbnN0IHdhbGxNcyA9IHBlcmlvZC5sYXN0VGlja0F0ID4gMCAmJiBwZXJpb2QuZmlyc3RUaWNrQXQgPiAwID8gcGVyaW9kLmxhc3RUaWNrQXQgLSBwZXJpb2QuZmlyc3RUaWNrQXQgOiAwXG4gICAgY29uc3QgYXZnSW50ZXJUaWNrTXMgPSBwZXJpb2QuaW50ZXJUaWNrU2FtcGxlcyA+IDAgPyBwZXJpb2Quc3VtSW50ZXJUaWNrTXMgLyBwZXJpb2QuaW50ZXJUaWNrU2FtcGxlcyA6IG51bGxcbiAgICBjb25zdCByZXZlYWxDaGFyc1BlclNlYyA9IGVsYXBzZWQgPiAwID8gKHBlcmlvZC5jaGFyc1JldmVhbGVkIC8gZWxhcHNlZCkgKiAxMDAwIDogMFxuICAgIGNvbnN0IGF2Z1N0ZXAgPSBwZXJpb2QudGlja0NvdW50ID4gMCA/IHBlcmlvZC5zdGVwU3VtIC8gcGVyaW9kLnRpY2tDb3VudCA6IDBcbiAgICBjb25zdCBhdmdTc2VDaHVuayA9IHBlcmlvZC5zZXRUYXJnZXRDb3VudCA+IDAgPyBwZXJpb2Quc3NlQ2hhcnNBcHBlbmRlZCAvIHBlcmlvZC5zZXRUYXJnZXRDb3VudCA6IDBcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coYFtNQUlBIHN0cmVhbSByZXZlYWxdICR7cmVhc29ufWAsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHdpbmRvd01zOiBNYXRoLnJvdW5kKGVsYXBzZWQpLFxuICAgICAgdGlja3M6IHBlcmlvZC50aWNrQ291bnQsXG4gICAgICBjaGFyc1JldmVhbGVkSW5XaW5kb3c6IHBlcmlvZC5jaGFyc1JldmVhbGVkLFxuICAgICAgcmV2ZWFsQ2hhcnNQZXJTZWM6IE1hdGgucm91bmQocmV2ZWFsQ2hhcnNQZXJTZWMgKiAxMCkgLyAxMCxcbiAgICAgIG1heEJhY2tsb2dJbldpbmRvdzogcGVyaW9kLm1heEJhY2tsb2csXG4gICAgICBhdmdTdGVwOiBNYXRoLnJvdW5kKGF2Z1N0ZXAgKiAxMCkgLyAxMCxcbiAgICAgIHNldFRhcmdldENhbGxzOiBwZXJpb2Quc2V0VGFyZ2V0Q291bnQsXG4gICAgICBzc2VDaGFyc0FwcGVuZGVkSW5XaW5kb3c6IHBlcmlvZC5zc2VDaGFyc0FwcGVuZGVkLFxuICAgICAgYXZnU3NlRGVsdGFDaGFyc1BlclNldFRhcmdldDogTWF0aC5yb3VuZChhdmdTc2VDaHVuayAqIDEwKSAvIDEwLFxuICAgICAgYXZnTXNCZXR3ZWVuUmV2ZWFsVGlja3M6IGF2Z0ludGVyVGlja01zICE9IG51bGwgPyBNYXRoLnJvdW5kKGF2Z0ludGVyVGlja01zICogMTApIC8gMTAgOiBudWxsLFxuICAgICAgcmV2ZWFsV2FsbE1zOiB3YWxsTXMgPiAwID8gTWF0aC5yb3VuZCh3YWxsTXMpIDogbnVsbCxcbiAgICAgIGN1cnJlbnRMYWdDaGFyczogdGFyZ2V0Lmxlbmd0aCAtIGRpc3BsYXkubGVuZ3RoLFxuICAgIH0pXG5cbiAgICBwZXJpb2QgPSBlbXB0eVBlcmlvZCgpXG4gICAgbGFzdFJlcG9ydEF0ID0gbm93XG4gIH1cblxuICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgIHJhZiA9IG51bGxcbiAgICBpZiAoZGlzcGxheS5sZW5ndGggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgY29uc3QgYmFja2xvZyA9IHRhcmdldC5sZW5ndGggLSBkaXNwbGF5Lmxlbmd0aFxuICAgIGNvbnN0IHN0ZXAgPSBNYXRoLm1pbihtYXhQRiwgTWF0aC5tYXgobWluUEYsIE1hdGguY2VpbChiYWNrbG9nIC8gZGl2aXNvcikpKVxuXG4gICAgaWYgKGlzUmV2ZWFsRGVidWdFbmFibGVkKCkpIHtcbiAgICAgIGlmIChwZXJpb2QudGlja0NvdW50ID09PSAwKSB7XG4gICAgICAgIHBlcmlvZC5maXJzdFRpY2tBdCA9IG5vd1xuICAgICAgfSBlbHNlIGlmIChsYXN0VGlja1BlcmYgPiAwKSB7XG4gICAgICAgIHBlcmlvZC5zdW1JbnRlclRpY2tNcyArPSBub3cgLSBsYXN0VGlja1BlcmZcbiAgICAgICAgcGVyaW9kLmludGVyVGlja1NhbXBsZXMgKz0gMVxuICAgICAgfVxuICAgICAgbGFzdFRpY2tQZXJmID0gbm93XG4gICAgICBwZXJpb2QudGlja0NvdW50ICs9IDFcbiAgICAgIHBlcmlvZC5jaGFyc1JldmVhbGVkICs9IHN0ZXBcbiAgICAgIHBlcmlvZC5zdGVwU3VtICs9IHN0ZXBcbiAgICAgIHBlcmlvZC5tYXhCYWNrbG9nID0gTWF0aC5tYXgocGVyaW9kLm1heEJhY2tsb2csIGJhY2tsb2cpXG4gICAgICBwZXJpb2QubGFzdFRpY2tBdCA9IG5vd1xuXG4gICAgICBpZiAoaXNSZXZlYWxEZWJ1Z1ZlcmJvc2UoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZygnW01BSUEgc3RyZWFtIHJldmVhbF0gdGljaycsIHtcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgYmFja2xvZyxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIGRpc3BsYXlMZW46IGRpc3BsYXkubGVuZ3RoICsgc3RlcCxcbiAgICAgICAgICB0YXJnZXRMZW46IHRhcmdldC5sZW5ndGgsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UmVwb3J0QXQgPT09IDApIGxhc3RSZXBvcnRBdCA9IG5vd1xuICAgICAgaWYgKG5vdyAtIGxhc3RSZXBvcnRBdCA+PSBSRVBPUlRfSU5URVJWQUxfTVMpIHtcbiAgICAgICAgZmx1c2hQZXJpb2RSZXBvcnQoJ3BlcmnDs2RpY28gKH4xcyknKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXkgPSB0YXJnZXQuc2xpY2UoMCwgZGlzcGxheS5sZW5ndGggKyBzdGVwKVxuICAgIG9uUmV2ZWFsKGRpc3BsYXkpXG4gICAgaWYgKGRpc3BsYXkubGVuZ3RoIDwgdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfSBlbHNlIGlmIChpc1JldmVhbERlYnVnRW5hYmxlZCgpKSB7XG4gICAgICBsYXN0VGlja1BlcmYgPSAwXG4gICAgICBmbHVzaFBlcmlvZFJlcG9ydCgnYWxjYW56w7MgdGFyZ2V0IChjYXRjaC11cCknKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLyoqIFN1c3RpdHV5ZSBlbCB0ZXh0byBvYmpldGl2byAoY29udGVuaWRvIGFjdW11bGFkbyBkZWwgc2Vydmlkb3IpLiAqL1xuICAgIHNldFRhcmdldChuZXh0RnVsbDogc3RyaW5nKSB7XG4gICAgICBpZiAoaXNSZXZlYWxEZWJ1Z0VuYWJsZWQoKSkge1xuICAgICAgICBjb25zdCBkZWx0YSA9IG5leHRGdWxsLmxlbmd0aCAtIHByZXZUYXJnZXRMZW5cbiAgICAgICAgcHJldlRhcmdldExlbiA9IG5leHRGdWxsLmxlbmd0aFxuICAgICAgICBwZXJpb2Quc2V0VGFyZ2V0Q291bnQgKz0gMVxuICAgICAgICBpZiAoZGVsdGEgPiAwKSBwZXJpb2Quc3NlQ2hhcnNBcHBlbmRlZCArPSBkZWx0YVxuXG4gICAgICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgIGlmIChsYXN0UmVwb3J0QXQgPT09IDApIGxhc3RSZXBvcnRBdCA9IG5vd1xuICAgICAgICBpZiAobm93IC0gbGFzdFJlcG9ydEF0ID49IFJFUE9SVF9JTlRFUlZBTF9NUykge1xuICAgICAgICAgIGZsdXNoUGVyaW9kUmVwb3J0KCdwZXJpw7NkaWNvICh+MXMsIGRlc2RlIHNldFRhcmdldCknKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmV2ZWFsRGVidWdWZXJib3NlKCkpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbTUFJQSBzdHJlYW0gcmV2ZWFsXSBzZXRUYXJnZXQgKFNTRSBhY3VtdWxhZG8pJywge1xuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGFyZ2V0TGVuOiBuZXh0RnVsbC5sZW5ndGgsXG4gICAgICAgICAgICBkZWx0YUNoYXJzRnJvbVByZXZUYXJnZXQ6IGRlbHRhLFxuICAgICAgICAgICAgZGlzcGxheUxlbjogZGlzcGxheS5sZW5ndGgsXG4gICAgICAgICAgICBsYWdDaGFyc0JlZm9yZTogbmV4dEZ1bGwubGVuZ3RoIC0gZGlzcGxheS5sZW5ndGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0YXJnZXQgPSBuZXh0RnVsbFxuICAgICAgaWYgKGRpc3BsYXkubGVuZ3RoIDwgdGFyZ2V0Lmxlbmd0aCAmJiByYWYgPT0gbnVsbCkge1xuICAgICAgICByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgaWYgKGlzUmV2ZWFsRGVidWdFbmFibGVkKCkgJiYgKHBlcmlvZC50aWNrQ291bnQgPiAwIHx8IHBlcmlvZC5zZXRUYXJnZXRDb3VudCA+IDApKSB7XG4gICAgICAgIGZsdXNoUGVyaW9kUmVwb3J0KCdjYW5jZWwnKVxuICAgICAgfVxuICAgICAgaWYgKHJhZiAhPSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgICAgcmFmID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogTGltcGlhIGVzdGFkbyBwYXJhIHVuIG51ZXZvIHN0cmVhbS4gKi9cbiAgICByZXNldCgpIHtcbiAgICAgIGlmIChpc1JldmVhbERlYnVnRW5hYmxlZCgpICYmIChwZXJpb2QudGlja0NvdW50ID4gMCB8fCBwZXJpb2Quc2V0VGFyZ2V0Q291bnQgPiAwKSkge1xuICAgICAgICBmbHVzaFBlcmlvZFJlcG9ydCgncmVzZXQgKGZpbiBkZSBzZXNpw7NuIGFudGVyaW9yKScpXG4gICAgICB9XG4gICAgICBpZiAocmFmICE9IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKVxuICAgICAgICByYWYgPSBudWxsXG4gICAgICB9XG4gICAgICB0YXJnZXQgPSAnJ1xuICAgICAgZGlzcGxheSA9ICcnXG4gICAgICBzZXNzaW9uSWQgKz0gMVxuICAgICAgcHJldlRhcmdldExlbiA9IDBcbiAgICAgIGxhc3RUaWNrUGVyZiA9IDBcbiAgICAgIHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgICAgIGxhc3RSZXBvcnRBdCA9IDBcbiAgICAgIGxvZ0NvbnN0YW50c09uY2UoKVxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU3RyZWFtUmV2ZWFsU21vb3RoID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoPlxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTs7QUFZQTtBQUNBLE9BQU8sSUFB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
|
|
@@ -19,6 +19,7 @@ import { useState, useCallback, useRef } from 'react';
|
|
|
19
19
|
import { useTranslation } from 'react-i18next';
|
|
20
20
|
import maia from '../../services/maia';
|
|
21
21
|
import { SECTIONS } from '../../constants/config';
|
|
22
|
+
import { createStreamRevealSmooth } from './streamRevealSmooth';
|
|
22
23
|
export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
23
24
|
var onStreamUpdate = _ref.onStreamUpdate,
|
|
24
25
|
onFinishStream = _ref.onFinishStream,
|
|
@@ -46,6 +47,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
46
47
|
setLoadingMessage = _useState8[1];
|
|
47
48
|
var abortControllerRef = useRef(null);
|
|
48
49
|
var isStoppedRef = useRef(false);
|
|
50
|
+
var streamRevealRef = useRef(null);
|
|
49
51
|
var onStreamUpdateRef = useRef(onStreamUpdate);
|
|
50
52
|
var onFinishStreamRef = useRef(onFinishStream);
|
|
51
53
|
var onStartWritingRef = useRef(onStartWriting);
|
|
@@ -58,9 +60,19 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
58
60
|
onStopRef.current = onStop;
|
|
59
61
|
onErrorRef.current = onError;
|
|
60
62
|
onApprovalRequiredRef.current = onApprovalRequired;
|
|
63
|
+
var getStreamReveal = useCallback(function () {
|
|
64
|
+
if (streamRevealRef.current === null) {
|
|
65
|
+
streamRevealRef.current = createStreamRevealSmooth(function (text) {
|
|
66
|
+
var _onStreamUpdateRef$cu;
|
|
67
|
+
setData(text);
|
|
68
|
+
(_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, text, null, '');
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return streamRevealRef.current;
|
|
72
|
+
}, []);
|
|
61
73
|
var handleSSEStream = useCallback(/*#__PURE__*/function () {
|
|
62
74
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
|
|
63
|
-
var
|
|
75
|
+
var _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current;
|
|
64
76
|
var _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, _onStartWritingRef$cu, nodeMessage, finalContent, sources, memorySessionId, suggestions, agentIdRaw, completedAgentId, _onErrorRef$current2, _t, _t2, _t3, _t4;
|
|
65
77
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
66
78
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -150,16 +162,15 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
150
162
|
(_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
|
|
151
163
|
}
|
|
152
164
|
accumulatedContent += _data.content;
|
|
153
|
-
|
|
154
|
-
(_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, accumulatedContent, null, '');
|
|
165
|
+
getStreamReveal().setTarget(accumulatedContent);
|
|
155
166
|
return _context.abrupt("continue", 18);
|
|
156
167
|
case 13:
|
|
157
168
|
// Si el evento node tiene un mensaje, actualizarlo para mostrarlo en el loader
|
|
158
169
|
if (_data.message && typeof _data.message === 'string') {
|
|
159
170
|
// Asegurar que isLoading esté en true para mostrar el loader
|
|
160
171
|
setLoading(true);
|
|
161
|
-
// Mostrar nombre solo para create_task
|
|
162
|
-
nodeMessage = _data.message.includes('create_task')
|
|
172
|
+
// Mostrar nombre solo para create_task, el resto muestra genérico
|
|
173
|
+
nodeMessage = _data.message.includes('create_task') ? _data.message : t('chat.executingAction');
|
|
163
174
|
setLoadingMessage(nodeMessage);
|
|
164
175
|
}
|
|
165
176
|
return _context.abrupt("continue", 18);
|
|
@@ -175,12 +186,16 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
175
186
|
}
|
|
176
187
|
agentIdRaw = (_data$agent_id = _data.agent_id) !== null && _data$agent_id !== void 0 ? _data$agent_id : _data.agentId;
|
|
177
188
|
completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
|
|
189
|
+
getStreamReveal().cancel();
|
|
190
|
+
getStreamReveal().reset();
|
|
178
191
|
setData(finalContent);
|
|
179
192
|
setIsWriting(false);
|
|
180
193
|
setLoadingMessage(null); // Limpiar mensaje cuando se completa
|
|
181
194
|
(_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, suggestions, completedAgentId);
|
|
182
195
|
return _context.abrupt("continue", 18);
|
|
183
196
|
case 15:
|
|
197
|
+
getStreamReveal().cancel();
|
|
198
|
+
getStreamReveal().reset();
|
|
184
199
|
setIsWriting(false);
|
|
185
200
|
setLoading(false);
|
|
186
201
|
setLoadingMessage(null); // Limpiar mensaje cuando se requiere aprobación
|
|
@@ -188,6 +203,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
188
203
|
return _context.abrupt("continue", 18);
|
|
189
204
|
case 16:
|
|
190
205
|
console.error('SSE Error:', _data.error);
|
|
206
|
+
getStreamReveal().cancel();
|
|
207
|
+
getStreamReveal().reset();
|
|
191
208
|
setIsWriting(false);
|
|
192
209
|
setLoadingMessage(null); // Limpiar mensaje cuando hay error
|
|
193
210
|
(_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef);
|
|
@@ -224,6 +241,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
224
241
|
case 26:
|
|
225
242
|
_context.prev = 26;
|
|
226
243
|
_t4 = _context["catch"](0);
|
|
244
|
+
getStreamReveal().cancel();
|
|
245
|
+
getStreamReveal().reset();
|
|
227
246
|
setIsWriting(false);
|
|
228
247
|
|
|
229
248
|
// Solo ejecutar onError si no fue un stop intencional
|
|
@@ -232,6 +251,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
232
251
|
}
|
|
233
252
|
case 27:
|
|
234
253
|
_context.prev = 27;
|
|
254
|
+
getStreamReveal().cancel();
|
|
255
|
+
getStreamReveal().reset();
|
|
235
256
|
setLoading(false);
|
|
236
257
|
setIsWriting(false);
|
|
237
258
|
setLoadingMessage(null);
|
|
@@ -245,7 +266,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
245
266
|
return function (_x) {
|
|
246
267
|
return _ref2.apply(this, arguments);
|
|
247
268
|
};
|
|
248
|
-
}(), [t]);
|
|
269
|
+
}(), [t, getStreamReveal]);
|
|
249
270
|
var askMaia = /*#__PURE__*/function () {
|
|
250
271
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
|
|
251
272
|
var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, faqId, agentSuggestionId, agentEntity, _abortControllerRef$c, response, _t5;
|
|
@@ -256,6 +277,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
256
277
|
_context2.prev = 1;
|
|
257
278
|
setLoading(true);
|
|
258
279
|
setIsWriting(false);
|
|
280
|
+
getStreamReveal().reset();
|
|
259
281
|
setData(null);
|
|
260
282
|
setLoadingMessage(null);
|
|
261
283
|
isStoppedRef.current = false; // Resetear flag al iniciar nueva petición
|
|
@@ -319,10 +341,12 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
319
341
|
}();
|
|
320
342
|
var stopStreaming = useCallback(function () {
|
|
321
343
|
if (abortControllerRef.current) {
|
|
322
|
-
var _onStopRef$current;
|
|
344
|
+
var _streamRevealRef$curr, _streamRevealRef$curr2, _onStopRef$current;
|
|
323
345
|
isStoppedRef.current = true;
|
|
324
346
|
abortControllerRef.current.abort();
|
|
325
347
|
abortControllerRef.current = null;
|
|
348
|
+
(_streamRevealRef$curr = streamRevealRef.current) === null || _streamRevealRef$curr === void 0 || _streamRevealRef$curr.cancel();
|
|
349
|
+
(_streamRevealRef$curr2 = streamRevealRef.current) === null || _streamRevealRef$curr2 === void 0 || _streamRevealRef$curr2.reset();
|
|
326
350
|
setLoading(false);
|
|
327
351
|
setIsWriting(false);
|
|
328
352
|
setLoadingMessage(null);
|
|
@@ -330,6 +354,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
330
354
|
}
|
|
331
355
|
}, []);
|
|
332
356
|
var reset = function reset() {
|
|
357
|
+
var _streamRevealRef$curr3, _streamRevealRef$curr4;
|
|
358
|
+
(_streamRevealRef$curr3 = streamRevealRef.current) === null || _streamRevealRef$curr3 === void 0 || _streamRevealRef$curr3.cancel();
|
|
359
|
+
(_streamRevealRef$curr4 = streamRevealRef.current) === null || _streamRevealRef$curr4 === void 0 || _streamRevealRef$curr4.reset();
|
|
333
360
|
setData(null);
|
|
334
361
|
setLoading(false);
|
|
335
362
|
setIsWriting(false);
|
|
@@ -347,4 +374,4 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
347
374
|
handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
|
|
348
375
|
};
|
|
349
376
|
};
|
|
350
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJfZGF0YSIsIl9vblN0YXJ0V3JpdGluZ1JlZiRjdSIsIm5vZGVNZXNzYWdlIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsInN1Z2dlc3Rpb25zIiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJfb25FcnJvclJlZiRjdXJyZW50MiIsIl90IiwiX3QyIiwiX3QzIiwiX3Q0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwidHJpbSIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJjYWxsIiwiY29udGVudCIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsIm1lbW9yeV9zZXNzaW9uX2lkIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdF9yZXBseSIsImFnZW50X2lkIiwiYWdlbnRJZCIsIlN0cmluZyIsImNvbnNvbGUiLCJlcnJvciIsIndhcm4iLCJlIiwiZiIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiYXNrTWFpYSIsIl9yZWY0IiwiX2NhbGxlZTIiLCJfcmVmMyIsImhpc3RvcnkiLCJwcm9qZWN0SWQiLCJsYW5nIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjaGF0SWQiLCJtZXNzYWdlSWQiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImF0dGFjaG1lbnRzIiwicHJvamVjdE5hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiYWdlbnRFbnRpdHkiLCJfYWJvcnRDb250cm9sbGVyUmVmJGMiLCJfdDUiLCJfY29udGV4dDIiLCJBYm9ydENvbnRyb2xsZXIiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJfb2JqZWN0U3ByZWFkIiwiaW5wdXQiLCJzaWduYWwiLCJfeDIiLCJzdG9wU3RyZWFtaW5nIiwiX29uU3RvcFJlZiRjdXJyZW50IiwiYWJvcnQiLCJyZXNldCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcyB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxufTogVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01lc3NhZ2UsIHNldExvYWRpbmdNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZjxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1N0b3BwZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UodCgnY2hhdC53cml0aW5nJykpXG4gICAgICAgICAgICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gZGF0YS5jb250ZW50XG4gICAgICAgICAgICAgICAgICBzZXREYXRhKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/LihhY2N1bXVsYXRlZENvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gU2kgZWwgZXZlbnRvIG5vZGUgdGllbmUgdW4gbWVuc2FqZSwgYWN0dWFsaXphcmxvIHBhcmEgbW9zdHJhcmxvIGVuIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc2VndXJhciBxdWUgaXNMb2FkaW5nIGVzdMOpIGVuIHRydWUgcGFyYSBtb3N0cmFyIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgbm9tYnJlIHNvbG8gcGFyYSBjcmVhdGVfdGFzayAvIGNsb25lX3Rhc2ssIGVsIHJlc3RvIG11ZXN0cmEgZ2Vuw6lyaWNvXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgZGF0YS5tZXNzYWdlLmluY2x1ZGVzKCdjbG9uZV90YXNrJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gZGF0YS5jb250ZW50IHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlcyA9IGRhdGEuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgICAgICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSBkYXRhLm1lbW9yeV9zZXNzaW9uX2lkIHx8ICcnXG4gICAgICAgICAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnMgPSBudWxsXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0X3JlcGx5XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBkYXRhLnN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZGF0YS5hZ2VudF9pZCA/PyBkYXRhLmFnZW50SWRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgc2V0RGF0YShmaW5hbENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIGNvbXBsZXRhXG4gICAgICAgICAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHN1Z2dlc3Rpb25zLCBjb21wbGV0ZWRBZ2VudElkKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIHJlcXVpZXJlIGFwcm9iYWNpw7NuXG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBTU0UgZXZlbnQgdHlwZTonLCBldmVudFR5cGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuXG4gICAgICAgIC8vIFNvbG8gZWplY3V0YXIgb25FcnJvciBzaSBubyBmdWUgdW4gc3RvcCBpbnRlbmNpb25hbFxuICAgICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICB9XG4gICAgfSxcbiAgICBbdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIGZhcUlkLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgIGFnZW50RW50aXR5LFxuICB9OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgbnVsbFxuICAgIGxhbmc6IHN0cmluZ1xuICAgIHVzZXJJZDogc3RyaW5nXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nXG4gICAgbGFzdE5hbWU/OiBzdHJpbmdcbiAgICBjb21wYW55SWQ6IHN0cmluZ1xuICAgIGNoYXRJZDogc3RyaW5nXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBjbGllbnRJZD86IG51bWJlclxuICAgIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0RGF0YShudWxsKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3I/LigpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIHNldERhdGEobnVsbClcbiAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDckQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUl0QyxTQUFTQyxRQUFRLFFBQVEsd0JBQXdCO0FBRWpELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQU9BO0VBQUEsSUFOaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBTixJQUFBLENBQWxCTSxrQkFBa0I7RUFFbEIsSUFBQUMsZUFBQSxHQUFjWCxjQUFjLENBQUMsQ0FBQ0UsUUFBUSxDQUFDVSxNQUFNLENBQUMsQ0FBQztJQUF2Q0MsQ0FBQyxHQUFBRixlQUFBLENBQURFLENBQUM7RUFDVCxJQUFBQyxTQUFBLEdBQXdCakIsUUFBUSxDQUFnQixJQUFJLENBQUM7SUFBQWtCLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQTlDRyxJQUFJLEdBQUFGLFVBQUE7SUFBRUcsT0FBTyxHQUFBSCxVQUFBO0VBQ3BCLElBQUFJLFVBQUEsR0FBZ0N0QixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUF1QixVQUFBLEdBQUFKLGNBQUEsQ0FBQUcs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
|
|
377
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJjcmVhdGVTdHJlYW1SZXZlYWxTbW9vdGgiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwic3RyZWFtUmV2ZWFsUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJnZXRTdHJlYW1SZXZlYWwiLCJ0ZXh0IiwiX29uU3RyZWFtVXBkYXRlUmVmJGN1IiwiY2FsbCIsImhhbmRsZVNTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsIl9kYXRhJGFnZW50X2lkIiwiX29uRmluaXNoU3RyZWFtUmVmJGN1IiwiX29uQXBwcm92YWxSZXF1aXJlZFJlIiwiX29uRXJyb3JSZWYkY3VycmVudCIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiX29uU3RhcnRXcml0aW5nUmVmJGN1Iiwibm9kZU1lc3NhZ2UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwic3VnZ2VzdGlvbnMiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJ0cmltIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImNvbnRlbnQiLCJzZXRUYXJnZXQiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJTdHJpbmciLCJyZXNldCIsImNvbnNvbGUiLCJlcnJvciIsIndhcm4iLCJlIiwiZiIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiYXNrTWFpYSIsIl9yZWY0IiwiX2NhbGxlZTIiLCJfcmVmMyIsImhpc3RvcnkiLCJwcm9qZWN0SWQiLCJsYW5nIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjaGF0SWQiLCJtZXNzYWdlSWQiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImF0dGFjaG1lbnRzIiwicHJvamVjdE5hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiYWdlbnRFbnRpdHkiLCJfYWJvcnRDb250cm9sbGVyUmVmJGMiLCJfdDUiLCJfY29udGV4dDIiLCJBYm9ydENvbnRyb2xsZXIiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJfb2JqZWN0U3ByZWFkIiwiaW5wdXQiLCJzaWduYWwiLCJfeDIiLCJzdG9wU3RyZWFtaW5nIiwiX3N0cmVhbVJldmVhbFJlZiRjdXJyIiwiX3N0cmVhbVJldmVhbFJlZiRjdXJyMiIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiX3N0cmVhbVJldmVhbFJlZiRjdXJyMyIsIl9zdHJlYW1SZXZlYWxSZWYkY3VycjQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMgfSBmcm9tICcuL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBjcmVhdGVTdHJlYW1SZXZlYWxTbW9vdGggfSBmcm9tICcuL3N0cmVhbVJldmVhbFNtb290aCdcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxufTogVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01lc3NhZ2UsIHNldExvYWRpbmdNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZjxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1N0b3BwZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHN0cmVhbVJldmVhbFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTdHJlYW1SZXZlYWxTbW9vdGg+IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBvblN0cmVhbVVwZGF0ZVJlZiA9IHVzZVJlZihvblN0cmVhbVVwZGF0ZSlcbiAgY29uc3Qgb25GaW5pc2hTdHJlYW1SZWYgPSB1c2VSZWYob25GaW5pc2hTdHJlYW0pXG4gIGNvbnN0IG9uU3RhcnRXcml0aW5nUmVmID0gdXNlUmVmKG9uU3RhcnRXcml0aW5nKVxuICBjb25zdCBvblN0b3BSZWYgPSB1c2VSZWYob25TdG9wKVxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpXG4gIGNvbnN0IG9uQXBwcm92YWxSZXF1aXJlZFJlZiA9IHVzZVJlZihvbkFwcHJvdmFsUmVxdWlyZWQpXG5cbiAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudCA9IG9uU3RyZWFtVXBkYXRlXG4gIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQgPSBvbkZpbmlzaFN0cmVhbVxuICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50ID0gb25TdGFydFdyaXRpbmdcbiAgb25TdG9wUmVmLmN1cnJlbnQgPSBvblN0b3BcbiAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvclxuICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudCA9IG9uQXBwcm92YWxSZXF1aXJlZFxuXG4gIGNvbnN0IGdldFN0cmVhbVJldmVhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc3RyZWFtUmV2ZWFsUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHN0cmVhbVJldmVhbFJlZi5jdXJyZW50ID0gY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoKHRleHQgPT4ge1xuICAgICAgICBzZXREYXRhKHRleHQpXG4gICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0ZXh0LCBudWxsLCAnJylcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHJlYW1SZXZlYWxSZWYuY3VycmVudFxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UodCgnY2hhdC53cml0aW5nJykpXG4gICAgICAgICAgICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gZGF0YS5jb250ZW50XG4gICAgICAgICAgICAgICAgICBnZXRTdHJlYW1SZXZlYWwoKS5zZXRUYXJnZXQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gU2kgZWwgZXZlbnRvIG5vZGUgdGllbmUgdW4gbWVuc2FqZSwgYWN0dWFsaXphcmxvIHBhcmEgbW9zdHJhcmxvIGVuIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc2VndXJhciBxdWUgaXNMb2FkaW5nIGVzdMOpIGVuIHRydWUgcGFyYSBtb3N0cmFyIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgbm9tYnJlIHNvbG8gcGFyYSBjcmVhdGVfdGFzaywgZWwgcmVzdG8gbXVlc3RyYSBnZW7DqXJpY29cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZU1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgPyBkYXRhLm1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG5vZGVNZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IGRhdGEuY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBkYXRhLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gZGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCB8fCAnJ1xuICAgICAgICAgICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zID0gbnVsbFxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IGRhdGEuc3VnZ2VzdF9yZXBseVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGRhdGEuYWdlbnRfaWQgPz8gZGF0YS5hZ2VudElkXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgIGdldFN0cmVhbVJldmVhbCgpLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgICBnZXRTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgICAgICAgICAgICBzZXREYXRhKGZpbmFsQ29udGVudClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gc2UgY29tcGxldGFcbiAgICAgICAgICAgICAgICAgIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQ/LihmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgICAgZ2V0U3RyZWFtUmV2ZWFsKCkuY2FuY2VsKClcbiAgICAgICAgICAgICAgICAgIGdldFN0cmVhbVJldmVhbCgpLnJlc2V0KClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIHJlcXVpZXJlIGFwcm9iYWNpw7NuXG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgICAgIGdldFN0cmVhbVJldmVhbCgpLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgICBnZXRTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIGhheSBlcnJvclxuICAgICAgICAgICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGdldFN0cmVhbVJldmVhbCgpLmNhbmNlbCgpXG4gICAgICAgIGdldFN0cmVhbVJldmVhbCgpLnJlc2V0KClcbiAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuXG4gICAgICAgIC8vIFNvbG8gZWplY3V0YXIgb25FcnJvciBzaSBubyBmdWUgdW4gc3RvcCBpbnRlbmNpb25hbFxuICAgICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBnZXRTdHJlYW1SZXZlYWwoKS5jYW5jZWwoKVxuICAgICAgICBnZXRTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0LCBnZXRTdHJlYW1SZXZlYWxdXG4gIClcblxuICBjb25zdCBhc2tNYWlhID0gYXN5bmMgKHtcbiAgICBtZXNzYWdlLFxuICAgIGhpc3RvcnksXG4gICAgcHJvamVjdElkLFxuICAgIGxhbmcsXG4gICAgdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBjb21wYW55SWQsXG4gICAgY2hhdElkLFxuICAgIG1lc3NhZ2VJZCxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICAgIGFnZW50TmFtZSxcbiAgICBhZ2VudElkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9qZWN0TmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBhZ2VudEVudGl0eSxcbiAgfToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgICBsYW5nOiBzdHJpbmdcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIGZpcnN0TmFtZT86IHN0cmluZ1xuICAgIGxhc3ROYW1lPzogc3RyaW5nXG4gICAgY29tcGFueUlkOiBzdHJpbmdcbiAgICBjaGF0SWQ6IHN0cmluZ1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgY2xpZW50SWQ/OiBudW1iZXJcbiAgICBjbGllbnROYW1lPzogc3RyaW5nXG4gICAgYWdlbnROYW1lOiBzdHJpbmdcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGdldFN0cmVhbVJldmVhbCgpLnJlc2V0KClcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlIC8vIFJlc2V0ZWFyIGZsYWcgYWwgaW5pY2lhciBudWV2YSBwZXRpY2nDs25cblxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBpbnB1dDogbWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIC4uLihmaXJzdE5hbWUgPyB7IGZpcnN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihsYXN0TmFtZSA/IHsgbGFzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICBjb21wYW55SWQsXG4gICAgICAgICAgY2hhdElkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICBhZ2VudE5hbWUsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCA/IHsgcHJvamVjdElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihwcm9qZWN0TmFtZSA/IHsgcHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50TmFtZSA/IHsgY2xpZW50TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50RW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50Py5zaWduYWxcbiAgICAgIClcblxuICAgICAgYXdhaXQgaGFuZGxlU1NFU3RyZWFtKHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yPy4oKVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdG9wU3RyZWFtaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHN0cmVhbVJldmVhbFJlZi5jdXJyZW50Py5jYW5jZWwoKVxuICAgICAgc3RyZWFtUmV2ZWFsUmVmLmN1cnJlbnQ/LnJlc2V0KClcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgICAgb25TdG9wUmVmLmN1cnJlbnQ/LigpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBzdHJlYW1SZXZlYWxSZWYuY3VycmVudD8uY2FuY2VsKClcbiAgICBzdHJlYW1SZXZlYWxSZWYuY3VycmVudD8ucmVzZXQoKVxuICAgIHNldERhdGEobnVsbClcbiAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDckQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUl0QyxTQUFTQyxRQUFRLFFBQVEsd0JBQXdCO0FBQ2pELFNBQVNDLHdCQUF3QixRQUFRLHNCQUFzQjtBQUUvRCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUFDLElBQUEsRUFPQTtFQUFBLElBTmhDQyxjQUFjLEdBQUFELElBQUEsQ0FBZEMsY0FBYztJQUNkQyxjQUFjLEdBQUFGLElBQUEsQ0FBZEUsY0FBYztJQUNkQyxjQUFjLEdBQUFILElBQUEsQ0FBZEcsY0FBYztJQUNkQyxNQUFNLEdBQUFKLElBQUEsQ0FBTkksTUFBTTtJQUNOQyxPQUFPLEdBQUFMLElBQUEsQ0FBUEssT0FBTztJQUNQQyxrQkFBa0IsR0FBQU4sSUFBQSxDQUFsQk0sa0JBQWtCO0VBRWxCLElBQUFDLGVBQUEsR0FBY1osY0FBYyxDQUFDLENBQUNFLFFBQVEsQ0FBQ1csTUFBTSxDQUFDLENBQUM7SUFBdkNDLENBQUMsR0FBQUYsZUFB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
|