@projectcor/maia-components 2.11.100-1 → 2.11.100-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +4 -1
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +30 -22
  4. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  5. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +157 -35
  6. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +90 -0
  7. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
  8. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
  9. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  10. package/lib/dev/DevStreamTimelineDemo.js +614 -0
  11. package/lib/dev/mockStreamTimelineDemo.js +417 -0
  12. package/lib/dev/mockStreamTimelineRunner.js +298 -0
  13. package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
  14. package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
  15. package/lib/hooks/useChatManager/useChatManager.js +118 -40
  16. package/lib/hooks/useEvent.js +2 -1
  17. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +151 -20
  18. package/lib/hooks/useStreamTimeline/index.js +7 -0
  19. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
  20. package/lib/lang/br/index.js +8 -1
  21. package/lib/lang/en/index.js +8 -1
  22. package/lib/lang/es/index.js +8 -1
  23. package/lib/lang/fr/index.js +8 -1
  24. package/lib/services/maia/Agents/connectors.js +124 -0
  25. package/lib/types/agentModal.js +1 -1
  26. package/lib/types/streamTimeline.js +2 -0
  27. package/lib/utils/normalizeAgentConnectors.js +28 -3
  28. package/lib/utils/streamDebugLog.js +169 -0
  29. package/lib/utils/streamExecutionSteps.js +19 -2
  30. package/lib/utils/streamTimeline.js +161 -0
  31. package/package.json +1 -1
@@ -0,0 +1,417 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
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
+ export var DEMO_TURN_ID = 'demo-stream-timeline-turn';
6
+ export var MOCK_THREAD_ID = 'thread-demo-hitl-1';
7
+ export var MOCK_THREAD_ID_SECOND = 'thread-demo-hitl-2';
8
+ export var MOCK_CHECKPOINT_ID = 'checkpoint-demo-hitl';
9
+ export var MOCK_SESSION_ID = 'session-demo-hitl';
10
+ export var MOCK_CREATE_TASK_APPROVAL = {
11
+ type: 'approval_required',
12
+ pending_actions: [{
13
+ tool_name: 'create_task',
14
+ tool_call_id: 'call_demo_create_task',
15
+ tool_args: {
16
+ title: 'Demo',
17
+ project_id: 1234
18
+ },
19
+ thread_id: MOCK_THREAD_ID
20
+ }],
21
+ total_actions: 1,
22
+ original_thread_id: MOCK_CHECKPOINT_ID,
23
+ session_id: MOCK_SESSION_ID,
24
+ metadata: {
25
+ project_id: '1234',
26
+ lang: 'es'
27
+ }
28
+ };
29
+ export var MOCK_TASK_ASSIGN_APPROVAL = {
30
+ type: 'approval_required',
31
+ pending_actions: [{
32
+ tool_name: 'task_assign',
33
+ tool_call_id: 'call_demo_task_assign',
34
+ tool_args: {
35
+ task_id: 640429,
36
+ user_id: 99
37
+ },
38
+ thread_id: MOCK_THREAD_ID_SECOND
39
+ }],
40
+ total_actions: 1,
41
+ original_thread_id: MOCK_CHECKPOINT_ID,
42
+ session_id: MOCK_SESSION_ID,
43
+ metadata: {
44
+ project_id: '1234',
45
+ lang: 'es'
46
+ }
47
+ };
48
+ export var MOCK_CONTENT_PART_1 = 'Encontré la tarea **#640429 Demo** en el proyecto *Demo Project*. El estado actual es *En proceso*.';
49
+ export var MOCK_CONTENT_PART_2 = '\n\nLa asigné a **Juan Pérez**. ¿Querés que le envíe un mensaje en la tarea?';
50
+ export var MOCK_HITL_PROPOSAL = 'Voy a crear la tarea **Demo** en el proyecto *Demo Project* con prioridad media. ¿Confirmás la acción?';
51
+ export var MOCK_HITL_RESUME_TOKENS = 'Listo, creé la tarea **[Demo](/tasks/640429/detail)**. Podés editarla desde el tablero del proyecto.';
52
+ export var MOCK_HITL_CONTENT_BLOB = 'Listo, creé la tarea **[Demo](/tasks/640429/detail)** con la configuración solicitada. Ya está visible en el tablero del proyecto.';
53
+ export var MOCK_HITL_CHAINED_PARTIAL = 'Creé la tarea. Ahora voy a asignarla a Juan…';
54
+ export var MOCK_FINAL_NORMAL = "".concat(MOCK_CONTENT_PART_1).concat(MOCK_CONTENT_PART_2);
55
+ var RESUME_CONTINUE_EVENTS = [{
56
+ kind: 'wait',
57
+ ms: 400,
58
+ label: 'POST continue-thread'
59
+ }, {
60
+ kind: 'node',
61
+ label: 'node · resuming (genérico backend)',
62
+ payload: {
63
+ node: 'resuming',
64
+ message: 'Ejecutando acción aprobada…',
65
+ thread_id: MOCK_THREAD_ID
66
+ }
67
+ }, {
68
+ kind: 'wait',
69
+ ms: 700,
70
+ label: 'Tool arrancando'
71
+ }, {
72
+ kind: 'node',
73
+ label: 'node · create_task',
74
+ payload: {
75
+ node: 'create_task',
76
+ tool_name: 'create_task',
77
+ message: "Creando tarea 'Demo'…",
78
+ thread_id: MOCK_THREAD_ID
79
+ }
80
+ }, {
81
+ kind: 'writing',
82
+ label: 'writing_started'
83
+ }, {
84
+ kind: 'tokens',
85
+ label: 'token · respuesta final',
86
+ text: MOCK_HITL_RESUME_TOKENS,
87
+ charDelayMs: 14
88
+ }, {
89
+ kind: 'wait',
90
+ ms: 400,
91
+ label: 'Cerrando stream'
92
+ }, {
93
+ kind: 'complete',
94
+ label: 'complete'
95
+ }];
96
+ var RESUME_CONTENT_BLOB_EVENTS = [{
97
+ kind: 'wait',
98
+ ms: 400,
99
+ label: 'POST continue-thread'
100
+ }, {
101
+ kind: 'node',
102
+ label: 'node · resuming',
103
+ payload: {
104
+ node: 'resuming',
105
+ message: 'Executing approved action…',
106
+ thread_id: MOCK_THREAD_ID
107
+ }
108
+ }, {
109
+ kind: 'node',
110
+ label: 'node · create_task (nombre crudo backend)',
111
+ payload: {
112
+ node: 'create_task',
113
+ tool_name: 'create_task',
114
+ message: 'create_task',
115
+ thread_id: MOCK_THREAD_ID
116
+ }
117
+ }, {
118
+ kind: 'writing',
119
+ label: 'writing_started'
120
+ }, {
121
+ kind: 'content',
122
+ label: 'content · texto completo de una',
123
+ text: MOCK_HITL_CONTENT_BLOB
124
+ }, {
125
+ kind: 'complete',
126
+ label: 'complete'
127
+ }];
128
+ var MANUAL_STREAM_TAIL = [{
129
+ kind: 'wait',
130
+ ms: 300,
131
+ label: 'Stream sigue (manual_approval_detected)'
132
+ }, {
133
+ kind: 'node',
134
+ label: 'node · resuming',
135
+ payload: {
136
+ node: 'resuming',
137
+ message: 'Ejecutando acción aprobada…',
138
+ thread_id: MOCK_THREAD_ID
139
+ }
140
+ }, {
141
+ kind: 'node',
142
+ label: 'node · create_task',
143
+ payload: {
144
+ node: 'create_task',
145
+ tool_name: 'create_task',
146
+ message: "Creando tarea 'Demo'…",
147
+ thread_id: MOCK_THREAD_ID
148
+ }
149
+ }, {
150
+ kind: 'writing',
151
+ label: 'writing_started'
152
+ }, {
153
+ kind: 'content',
154
+ label: 'content · blob final (sin tokens)',
155
+ text: MOCK_HITL_CONTENT_BLOB
156
+ }, {
157
+ kind: 'complete',
158
+ label: 'complete'
159
+ }];
160
+ export var MOCK_SCENARIOS = [{
161
+ id: 'normal',
162
+ title: 'Flujo normal',
163
+ description: 'Tools en vivo + tokens intercalados (sin HITL).',
164
+ userQuestion: '¿Podés buscar la tarea Demo y asignarla a Juan?',
165
+ finalAnswer: MOCK_FINAL_NORMAL,
166
+ streamEvents: [{
167
+ kind: 'wait',
168
+ ms: 400,
169
+ label: 'SSE conectado'
170
+ }, {
171
+ kind: 'thinking',
172
+ label: 'thinking'
173
+ }, {
174
+ kind: 'wait',
175
+ ms: 900,
176
+ label: 'Agente analizando'
177
+ }, {
178
+ kind: 'node',
179
+ label: 'node · get_task',
180
+ payload: {
181
+ node: 'get_task',
182
+ tool_name: 'get_task',
183
+ message: 'Buscando la tarea en el proyecto…'
184
+ }
185
+ }, {
186
+ kind: 'wait',
187
+ ms: 600,
188
+ label: 'Tool en ejecución'
189
+ }, {
190
+ kind: 'node',
191
+ label: 'node · get_task (ok)',
192
+ payload: {
193
+ node: 'get_task',
194
+ tool_name: 'get_task',
195
+ message: 'Tarea encontrada'
196
+ }
197
+ }, {
198
+ kind: 'writing',
199
+ label: 'writing_started'
200
+ }, {
201
+ kind: 'tokens',
202
+ label: 'token · parte 1',
203
+ text: MOCK_CONTENT_PART_1,
204
+ charDelayMs: 16
205
+ }, {
206
+ kind: 'wait',
207
+ ms: 350,
208
+ label: 'Pausa'
209
+ }, {
210
+ kind: 'node',
211
+ label: 'node · task_assign',
212
+ payload: {
213
+ node: 'task_assign',
214
+ tool_name: 'task_assign',
215
+ message: 'Asignando usuario a la tarea…'
216
+ }
217
+ }, {
218
+ kind: 'wait',
219
+ ms: 700,
220
+ label: 'Tool en ejecución'
221
+ }, {
222
+ kind: 'node',
223
+ label: 'node · task_assign (ok)',
224
+ payload: {
225
+ node: 'task_assign',
226
+ tool_name: 'task_assign',
227
+ message: 'Usuario asignado'
228
+ }
229
+ }, {
230
+ kind: 'tokens',
231
+ label: 'token · parte 2',
232
+ text: MOCK_CONTENT_PART_2,
233
+ charDelayMs: 14
234
+ }, {
235
+ kind: 'complete',
236
+ label: 'complete'
237
+ }]
238
+ }, {
239
+ id: 'hitl_button',
240
+ title: 'HITL · ApprovalBox',
241
+ description: 'token → approval_required (stream termina) → ApprovalBox → continue-thread con resuming + tool + tokens.',
242
+ userQuestion: 'Creá una tarea Demo en el proyecto.',
243
+ finalAnswer: MOCK_HITL_RESUME_TOKENS,
244
+ streamEvents: [{
245
+ kind: 'wait',
246
+ ms: 400,
247
+ label: 'SSE conectado'
248
+ }, {
249
+ kind: 'thinking',
250
+ label: 'thinking'
251
+ }, {
252
+ kind: 'wait',
253
+ ms: 800,
254
+ label: 'Agente planificando'
255
+ }, {
256
+ kind: 'writing',
257
+ label: 'writing_started'
258
+ }, {
259
+ kind: 'tokens',
260
+ label: 'token · propuesta',
261
+ text: MOCK_HITL_PROPOSAL,
262
+ charDelayMs: 12
263
+ }, {
264
+ kind: 'wait',
265
+ ms: 500,
266
+ label: 'Grafo en human_approval'
267
+ }, {
268
+ kind: 'approval_required',
269
+ label: 'approval_required (botón — stream settled)',
270
+ approval: MOCK_CREATE_TASK_APPROVAL
271
+ }],
272
+ continueEvents: RESUME_CONTINUE_EVENTS
273
+ }, {
274
+ id: 'hitl_manual',
275
+ title: 'HITL · Manual ("Sí, confirmo")',
276
+ description: 'approval_required con manual_approval_detected: sin ApprovalBox, el stream sigue con resuming + content blob.',
277
+ userQuestion: 'Sí, confirmo. Creá la tarea Demo.',
278
+ finalAnswer: MOCK_HITL_CONTENT_BLOB,
279
+ streamEvents: [{
280
+ kind: 'wait',
281
+ ms: 400,
282
+ label: 'SSE conectado'
283
+ }, {
284
+ kind: 'thinking',
285
+ label: 'thinking'
286
+ }, {
287
+ kind: 'wait',
288
+ ms: 600,
289
+ label: 'Detectando manual approval'
290
+ }, {
291
+ kind: 'writing',
292
+ label: 'writing_started'
293
+ }, {
294
+ kind: 'tokens',
295
+ label: 'token · ack',
296
+ text: 'Perfecto, procedo con la creación…',
297
+ charDelayMs: 14
298
+ }, {
299
+ kind: 'wait',
300
+ ms: 400,
301
+ label: 'human_approval + manual detectado'
302
+ }, {
303
+ kind: 'approval_required',
304
+ label: 'approval_required (manual — stream NO termina)',
305
+ approval: _objectSpread(_objectSpread({}, MOCK_CREATE_TASK_APPROVAL), {}, {
306
+ manual_approval_detected: true,
307
+ warning_message: 'Confirmaste la acción por mensaje de texto.'
308
+ })
309
+ }].concat(MANUAL_STREAM_TAIL)
310
+ }, {
311
+ id: 'hitl_content_blob',
312
+ title: 'HITL · Content de una (post-resume)',
313
+ description: 'Tras aprobar: resuming genérico, node con nombre crudo de tool, respuesta en un solo evento content.',
314
+ userQuestion: 'Creá la tarea Demo.',
315
+ finalAnswer: MOCK_HITL_CONTENT_BLOB,
316
+ streamEvents: [{
317
+ kind: 'thinking',
318
+ label: 'thinking'
319
+ }, {
320
+ kind: 'writing',
321
+ label: 'writing_started'
322
+ }, {
323
+ kind: 'tokens',
324
+ label: 'token · propuesta',
325
+ text: MOCK_HITL_PROPOSAL,
326
+ charDelayMs: 12
327
+ }, {
328
+ kind: 'approval_required',
329
+ label: 'approval_required (botón)',
330
+ approval: MOCK_CREATE_TASK_APPROVAL
331
+ }],
332
+ continueEvents: RESUME_CONTENT_BLOB_EVENTS
333
+ }, {
334
+ id: 'hitl_chained',
335
+ title: 'HITL · Encadenado (2 approvals)',
336
+ description: 'Primer continue OK → agente pide otra tool → segundo ApprovalBox → segundo continue.',
337
+ userQuestion: 'Creá la tarea Demo y asignala a Juan.',
338
+ finalAnswer: "".concat(MOCK_HITL_RESUME_TOKENS, "\n\nTambi\xE9n asign\xE9 la tarea a **Juan P\xE9rez**."),
339
+ streamEvents: [{
340
+ kind: 'thinking',
341
+ label: 'thinking'
342
+ }, {
343
+ kind: 'writing',
344
+ label: 'writing_started'
345
+ }, {
346
+ kind: 'tokens',
347
+ label: 'token · propuesta create',
348
+ text: MOCK_HITL_PROPOSAL,
349
+ charDelayMs: 12
350
+ }, {
351
+ kind: 'approval_required',
352
+ label: 'approval_required #1 · create_task',
353
+ approval: MOCK_CREATE_TASK_APPROVAL
354
+ }],
355
+ continueEvents: [].concat(_toConsumableArray(RESUME_CONTINUE_EVENTS.slice(0, -1)), [{
356
+ kind: 'wait',
357
+ ms: 500,
358
+ label: 'Agente pide segunda tool'
359
+ }, {
360
+ kind: 'writing',
361
+ label: 'writing_started'
362
+ }, {
363
+ kind: 'tokens',
364
+ label: 'token · transición',
365
+ text: MOCK_HITL_CHAINED_PARTIAL,
366
+ charDelayMs: 12
367
+ }, {
368
+ kind: 'approval_required',
369
+ label: 'approval_required #2 · task_assign',
370
+ approval: MOCK_TASK_ASSIGN_APPROVAL
371
+ }]),
372
+ continueEventsSecond: [{
373
+ kind: 'wait',
374
+ ms: 400,
375
+ label: 'POST continue-thread #2'
376
+ }, {
377
+ kind: 'node',
378
+ label: 'node · resuming',
379
+ payload: {
380
+ node: 'resuming',
381
+ message: 'Ejecutando acción aprobada…',
382
+ thread_id: MOCK_THREAD_ID_SECOND
383
+ }
384
+ }, {
385
+ kind: 'node',
386
+ label: 'node · task_assign',
387
+ payload: {
388
+ node: 'task_assign',
389
+ tool_name: 'task_assign',
390
+ message: 'Asignando usuario a la tarea…',
391
+ thread_id: MOCK_THREAD_ID_SECOND
392
+ }
393
+ }, {
394
+ kind: 'writing',
395
+ label: 'writing_started'
396
+ }, {
397
+ kind: 'tokens',
398
+ label: 'token · cierre',
399
+ text: '\n\nTambién asigné la tarea a **Juan Pérez**.',
400
+ charDelayMs: 12
401
+ }, {
402
+ kind: 'complete',
403
+ label: 'complete'
404
+ }]
405
+ }];
406
+ export var getScenarioById = function getScenarioById(id) {
407
+ var _MOCK_SCENARIOS$find;
408
+ return (_MOCK_SCENARIOS$find = MOCK_SCENARIOS.find(function (s) {
409
+ return s.id === id;
410
+ })) !== null && _MOCK_SCENARIOS$find !== void 0 ? _MOCK_SCENARIOS$find : MOCK_SCENARIOS[0];
411
+ };
412
+ export var sleep = function sleep(ms) {
413
+ return new Promise(function (resolve) {
414
+ window.setTimeout(resolve, ms);
415
+ });
416
+ };
417
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERU1PX1RVUk5fSUQiLCJNT0NLX1RIUkVBRF9JRCIsIk1PQ0tfVEhSRUFEX0lEX1NFQ09ORCIsIk1PQ0tfQ0hFQ0tQT0lOVF9JRCIsIk1PQ0tfU0VTU0lPTl9JRCIsIk1PQ0tfQ1JFQVRFX1RBU0tfQVBQUk9WQUwiLCJ0eXBlIiwicGVuZGluZ19hY3Rpb25zIiwidG9vbF9uYW1lIiwidG9vbF9jYWxsX2lkIiwidG9vbF9hcmdzIiwidGl0bGUiLCJwcm9qZWN0X2lkIiwidGhyZWFkX2lkIiwidG90YWxfYWN0aW9ucyIsIm9yaWdpbmFsX3RocmVhZF9pZCIsInNlc3Npb25faWQiLCJtZXRhZGF0YSIsImxhbmciLCJNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMIiwidGFza19pZCIsInVzZXJfaWQiLCJNT0NLX0NPTlRFTlRfUEFSVF8xIiwiTU9DS19DT05URU5UX1BBUlRfMiIsIk1PQ0tfSElUTF9QUk9QT1NBTCIsIk1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TIiwiTU9DS19ISVRMX0NPTlRFTlRfQkxPQiIsIk1PQ0tfSElUTF9DSEFJTkVEX1BBUlRJQUwiLCJNT0NLX0ZJTkFMX05PUk1BTCIsImNvbmNhdCIsIlJFU1VNRV9DT05USU5VRV9FVkVOVFMiLCJraW5kIiwibXMiLCJsYWJlbCIsInBheWxvYWQiLCJub2RlIiwibWVzc2FnZSIsInRleHQiLCJjaGFyRGVsYXlNcyIsIlJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTIiwiTUFOVUFMX1NUUkVBTV9UQUlMIiwiTU9DS19TQ0VOQVJJT1MiLCJpZCIsImRlc2NyaXB0aW9uIiwidXNlclF1ZXN0aW9uIiwiZmluYWxBbnN3ZXIiLCJzdHJlYW1FdmVudHMiLCJhcHByb3ZhbCIsImNvbnRpbnVlRXZlbnRzIiwiX29iamVjdFNwcmVhZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsIndhcm5pbmdfbWVzc2FnZSIsIl90b0NvbnN1bWFibGVBcnJheSIsInNsaWNlIiwiY29udGludWVFdmVudHNTZWNvbmQiLCJnZXRTY2VuYXJpb0J5SWQiLCJfTU9DS19TQ0VOQVJJT1MkZmluZCIsImZpbmQiLCJzIiwic2xlZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndpbmRvdyIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGV2L21vY2tTdHJlYW1UaW1lbGluZURlbW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9DaGF0J1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5cbmV4cG9ydCB0eXBlIE1vY2tTdHJlYW1UaW1lbGluZUV2ZW50ID1cbiAgfCB7IGtpbmQ6ICd3YWl0JzsgbXM6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAndGhpbmtpbmcnOyBsYWJlbD86IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnd3JpdGluZyc7IGxhYmVsPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdub2RlJzsgcGF5bG9hZDogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZDsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAndG9rZW5zJzsgdGV4dDogc3RyaW5nOyBjaGFyRGVsYXlNcz86IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9XG4gIC8qKiBCYWNrZW5kIGVudsOtYSBgY29udGVudGAgZGUgdW5hIChzaW4gdG9rZW5pemFyKSDigJQgdMOtcGljbyBwb3N0LXJlc3VtZSBvIHJlc3B1ZXN0YXMgY29ydGFzICovXG4gIHwgeyBraW5kOiAnY29udGVudCc7IHRleHQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnOyBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0OyBsYWJlbDogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdjb21wbGV0ZSc7IGxhYmVsOiBzdHJpbmcgfVxuXG5leHBvcnQgdHlwZSBNb2NrU2NlbmFyaW9JZCA9ICdub3JtYWwnIHwgJ2hpdGxfYnV0dG9uJyB8ICdoaXRsX21hbnVhbCcgfCAnaGl0bF9jb250ZW50X2Jsb2InIHwgJ2hpdGxfY2hhaW5lZCdcblxuZXhwb3J0IHR5cGUgTW9ja1NjZW5hcmlvID0ge1xuICBpZDogTW9ja1NjZW5hcmlvSWRcbiAgdGl0bGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHVzZXJRdWVzdGlvbjogc3RyaW5nXG4gIGZpbmFsQW5zd2VyOiBzdHJpbmdcbiAgLyoqIFN0cmVhbSBpbmljaWFsIChhc2tNYWlhIG8gaGFzdGEgYXBwcm92YWwpICovXG4gIHN0cmVhbUV2ZW50czogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxuICAvKiogY29udGludWUtdGhyZWFkIHRyYXMgYXByb2JhciBlbiBVSSAoc29sbyBISVRMIGJvdMOzbiAvIGVuY2FkZW5hZG8pICovXG4gIGNvbnRpbnVlRXZlbnRzPzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxuICAvKiogU2VndW5kbyBjb250aW51ZSBzaSBoYXkgSElUTCBlbmNhZGVuYWRvICovXG4gIGNvbnRpbnVlRXZlbnRzU2Vjb25kPzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgREVNT19UVVJOX0lEID0gJ2RlbW8tc3RyZWFtLXRpbWVsaW5lLXR1cm4nXG5cbmV4cG9ydCBjb25zdCBNT0NLX1RIUkVBRF9JRCA9ICd0aHJlYWQtZGVtby1oaXRsLTEnXG5leHBvcnQgY29uc3QgTU9DS19USFJFQURfSURfU0VDT05EID0gJ3RocmVhZC1kZW1vLWhpdGwtMidcbmV4cG9ydCBjb25zdCBNT0NLX0NIRUNLUE9JTlRfSUQgPSAnY2hlY2twb2ludC1kZW1vLWhpdGwnXG5leHBvcnQgY29uc3QgTU9DS19TRVNTSU9OX0lEID0gJ3Nlc3Npb24tZGVtby1oaXRsJ1xuXG5leHBvcnQgY29uc3QgTU9DS19DUkVBVEVfVEFTS19BUFBST1ZBTDogQXBwcm92YWxSZXF1ZXN0ID0ge1xuICB0eXBlOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICBwZW5kaW5nX2FjdGlvbnM6IFtcbiAgICB7XG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX2NhbGxfaWQ6ICdjYWxsX2RlbW9fY3JlYXRlX3Rhc2snLFxuICAgICAgdG9vbF9hcmdzOiB7IHRpdGxlOiAnRGVtbycsIHByb2plY3RfaWQ6IDEyMzQgfSxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgXSxcbiAgdG90YWxfYWN0aW9uczogMSxcbiAgb3JpZ2luYWxfdGhyZWFkX2lkOiBNT0NLX0NIRUNLUE9JTlRfSUQsXG4gIHNlc3Npb25faWQ6IE1PQ0tfU0VTU0lPTl9JRCxcbiAgbWV0YWRhdGE6IHsgcHJvamVjdF9pZDogJzEyMzQnLCBsYW5nOiAnZXMnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMOiBBcHByb3ZhbFJlcXVlc3QgPSB7XG4gIHR5cGU6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gIHBlbmRpbmdfYWN0aW9uczogW1xuICAgIHtcbiAgICAgIHRvb2xfbmFtZTogJ3Rhc2tfYXNzaWduJyxcbiAgICAgIHRvb2xfY2FsbF9pZDogJ2NhbGxfZGVtb190YXNrX2Fzc2lnbicsXG4gICAgICB0b29sX2FyZ3M6IHsgdGFza19pZDogNjQwNDI5LCB1c2VyX2lkOiA5OSB9LFxuICAgICAgdGhyZWFkX2lkOiBNT0NLX1RIUkVBRF9JRF9TRUNPTkQsXG4gICAgfSxcbiAgXSxcbiAgdG90YWxfYWN0aW9uczogMSxcbiAgb3JpZ2luYWxfdGhyZWFkX2lkOiBNT0NLX0NIRUNLUE9JTlRfSUQsXG4gIHNlc3Npb25faWQ6IE1PQ0tfU0VTU0lPTl9JRCxcbiAgbWV0YWRhdGE6IHsgcHJvamVjdF9pZDogJzEyMzQnLCBsYW5nOiAnZXMnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBNT0NLX0NPTlRFTlRfUEFSVF8xID1cbiAgJ0VuY29udHLDqSBsYSB0YXJlYSAqKiM2NDA0MjkgRGVtbyoqIGVuIGVsIHByb3llY3RvICpEZW1vIFByb2plY3QqLiBFbCBlc3RhZG8gYWN0dWFsIGVzICpFbiBwcm9jZXNvKi4nXG5cbmV4cG9ydCBjb25zdCBNT0NLX0NPTlRFTlRfUEFSVF8yID0gJ1xcblxcbkxhIGFzaWduw6kgYSAqKkp1YW4gUMOpcmV6KiouIMK/UXVlcsOpcyBxdWUgbGUgZW52w61lIHVuIG1lbnNhamUgZW4gbGEgdGFyZWE/J1xuXG5leHBvcnQgY29uc3QgTU9DS19ISVRMX1BST1BPU0FMID1cbiAgJ1ZveSBhIGNyZWFyIGxhIHRhcmVhICoqRGVtbyoqIGVuIGVsIHByb3llY3RvICpEZW1vIFByb2plY3QqIGNvbiBwcmlvcmlkYWQgbWVkaWEuIMK/Q29uZmlybcOhcyBsYSBhY2Npw7NuPydcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TID1cbiAgJ0xpc3RvLCBjcmXDqSBsYSB0YXJlYSAqKltEZW1vXSgvdGFza3MvNjQwNDI5L2RldGFpbCkqKi4gUG9kw6lzIGVkaXRhcmxhIGRlc2RlIGVsIHRhYmxlcm8gZGVsIHByb3llY3RvLidcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9DT05URU5UX0JMT0IgPVxuICAnTGlzdG8sIGNyZcOpIGxhIHRhcmVhICoqW0RlbW9dKC90YXNrcy82NDA0MjkvZGV0YWlsKSoqIGNvbiBsYSBjb25maWd1cmFjacOzbiBzb2xpY2l0YWRhLiBZYSBlc3TDoSB2aXNpYmxlIGVuIGVsIHRhYmxlcm8gZGVsIHByb3llY3RvLidcblxuZXhwb3J0IGNvbnN0IE1PQ0tfSElUTF9DSEFJTkVEX1BBUlRJQUwgPSAnQ3Jlw6kgbGEgdGFyZWEuIEFob3JhIHZveSBhIGFzaWduYXJsYSBhIEp1YW7igKYnXG5cbmV4cG9ydCBjb25zdCBNT0NLX0ZJTkFMX05PUk1BTCA9IGAke01PQ0tfQ09OVEVOVF9QQVJUXzF9JHtNT0NLX0NPTlRFTlRfUEFSVF8yfWBcblxuY29uc3QgUkVTVU1FX0NPTlRJTlVFX0VWRU5UUzogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXSA9IFtcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnUE9TVCBjb250aW51ZS10aHJlYWQnIH0sXG4gIHtcbiAgICBraW5kOiAnbm9kZScsXG4gICAgbGFiZWw6ICdub2RlIMK3IHJlc3VtaW5nIChnZW7DqXJpY28gYmFja2VuZCknLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA3MDAsIGxhYmVsOiAnVG9vbCBhcnJhbmNhbmRvJyB9LFxuICB7XG4gICAga2luZDogJ25vZGUnLFxuICAgIGxhYmVsOiAnbm9kZSDCtyBjcmVhdGVfdGFzaycsXG4gICAgcGF5bG9hZDoge1xuICAgICAgbm9kZTogJ2NyZWF0ZV90YXNrJyxcbiAgICAgIHRvb2xfbmFtZTogJ2NyZWF0ZV90YXNrJyxcbiAgICAgIG1lc3NhZ2U6IFwiQ3JlYW5kbyB0YXJlYSAnRGVtbyfigKZcIixcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAgeyBraW5kOiAnd3JpdGluZycsIGxhYmVsOiAnd3JpdGluZ19zdGFydGVkJyB9LFxuICB7XG4gICAga2luZDogJ3Rva2VucycsXG4gICAgbGFiZWw6ICd0b2tlbiDCtyByZXNwdWVzdGEgZmluYWwnLFxuICAgIHRleHQ6IE1PQ0tfSElUTF9SRVNVTUVfVE9LRU5TLFxuICAgIGNoYXJEZWxheU1zOiAxNCxcbiAgfSxcbiAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnQ2VycmFuZG8gc3RyZWFtJyB9LFxuICB7IGtpbmQ6ICdjb21wbGV0ZScsIGxhYmVsOiAnY29tcGxldGUnIH0sXG5dXG5cbmNvbnN0IFJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTOiBNb2NrU3RyZWFtVGltZWxpbmVFdmVudFtdID0gW1xuICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdQT1NUIGNvbnRpbnVlLXRocmVhZCcgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRXhlY3V0aW5nIGFwcHJvdmVkIGFjdGlvbuKApicsXG4gICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lELFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBraW5kOiAnbm9kZScsXG4gICAgbGFiZWw6ICdub2RlIMK3IGNyZWF0ZV90YXNrIChub21icmUgY3J1ZG8gYmFja2VuZCknLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICBtZXNzYWdlOiAnY3JlYXRlX3Rhc2snLFxuICAgICAgdGhyZWFkX2lkOiBNT0NLX1RIUkVBRF9JRCxcbiAgICB9LFxuICB9LFxuICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gIHtcbiAgICBraW5kOiAnY29udGVudCcsXG4gICAgbGFiZWw6ICdjb250ZW50IMK3IHRleHRvIGNvbXBsZXRvIGRlIHVuYScsXG4gICAgdGV4dDogTU9DS19ISVRMX0NPTlRFTlRfQkxPQixcbiAgfSxcbiAgeyBraW5kOiAnY29tcGxldGUnLCBsYWJlbDogJ2NvbXBsZXRlJyB9LFxuXVxuXG5jb25zdCBNQU5VQUxfU1RSRUFNX1RBSUw6IE1vY2tTdHJlYW1UaW1lbGluZUV2ZW50W10gPSBbXG4gIHsga2luZDogJ3dhaXQnLCBtczogMzAwLCBsYWJlbDogJ1N0cmVhbSBzaWd1ZSAobWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKScgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdyZXN1bWluZycsXG4gICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgIHRocmVhZF9pZDogTU9DS19USFJFQURfSUQsXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGtpbmQ6ICdub2RlJyxcbiAgICBsYWJlbDogJ25vZGUgwrcgY3JlYXRlX3Rhc2snLFxuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5vZGU6ICdjcmVhdGVfdGFzaycsXG4gICAgICB0b29sX25hbWU6ICdjcmVhdGVfdGFzaycsXG4gICAgICBtZXNzYWdlOiBcIkNyZWFuZG8gdGFyZWEgJ0RlbW8n4oCmXCIsXG4gICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lELFxuICAgIH0sXG4gIH0sXG4gIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAge1xuICAgIGtpbmQ6ICdjb250ZW50JyxcbiAgICBsYWJlbDogJ2NvbnRlbnQgwrcgYmxvYiBmaW5hbCAoc2luIHRva2VucyknLFxuICAgIHRleHQ6IE1PQ0tfSElUTF9DT05URU5UX0JMT0IsXG4gIH0sXG4gIHsga2luZDogJ2NvbXBsZXRlJywgbGFiZWw6ICdjb21wbGV0ZScgfSxcbl1cblxuZXhwb3J0IGNvbnN0IE1PQ0tfU0NFTkFSSU9TOiBNb2NrU2NlbmFyaW9bXSA9IFtcbiAge1xuICAgIGlkOiAnbm9ybWFsJyxcbiAgICB0aXRsZTogJ0ZsdWpvIG5vcm1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdUb29scyBlbiB2aXZvICsgdG9rZW5zIGludGVyY2FsYWRvcyAoc2luIEhJVEwpLicsXG4gICAgdXNlclF1ZXN0aW9uOiAnwr9Qb2TDqXMgYnVzY2FyIGxhIHRhcmVhIERlbW8geSBhc2lnbmFybGEgYSBKdWFuPycsXG4gICAgZmluYWxBbnN3ZXI6IE1PQ0tfRklOQUxfTk9STUFMLFxuICAgIHN0cmVhbUV2ZW50czogW1xuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA0MDAsIGxhYmVsOiAnU1NFIGNvbmVjdGFkbycgfSxcbiAgICAgIHsga2luZDogJ3RoaW5raW5nJywgbGFiZWw6ICd0aGlua2luZycgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogOTAwLCBsYWJlbDogJ0FnZW50ZSBhbmFsaXphbmRvJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnbm9kZScsXG4gICAgICAgIGxhYmVsOiAnbm9kZSDCtyBnZXRfdGFzaycsXG4gICAgICAgIHBheWxvYWQ6IHsgbm9kZTogJ2dldF90YXNrJywgdG9vbF9uYW1lOiAnZ2V0X3Rhc2snLCBtZXNzYWdlOiAnQnVzY2FuZG8gbGEgdGFyZWEgZW4gZWwgcHJveWVjdG/igKYnIH0sXG4gICAgICB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA2MDAsIGxhYmVsOiAnVG9vbCBlbiBlamVjdWNpw7NuJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnbm9kZScsXG4gICAgICAgIGxhYmVsOiAnbm9kZSDCtyBnZXRfdGFzayAob2spJyxcbiAgICAgICAgcGF5bG9hZDogeyBub2RlOiAnZ2V0X3Rhc2snLCB0b29sX25hbWU6ICdnZXRfdGFzaycsIG1lc3NhZ2U6ICdUYXJlYSBlbmNvbnRyYWRhJyB9LFxuICAgICAgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcGFydGUgMScsIHRleHQ6IE1PQ0tfQ09OVEVOVF9QQVJUXzEsIGNoYXJEZWxheU1zOiAxNiB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiAzNTAsIGxhYmVsOiAnUGF1c2EnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdub2RlJyxcbiAgICAgICAgbGFiZWw6ICdub2RlIMK3IHRhc2tfYXNzaWduJyxcbiAgICAgICAgcGF5bG9hZDogeyBub2RlOiAndGFza19hc3NpZ24nLCB0b29sX25hbWU6ICd0YXNrX2Fzc2lnbicsIG1lc3NhZ2U6ICdBc2lnbmFuZG8gdXN1YXJpbyBhIGxhIHRhcmVh4oCmJyB9LFxuICAgICAgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogNzAwLCBsYWJlbDogJ1Rvb2wgZW4gZWplY3VjacOzbicgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ25vZGUnLFxuICAgICAgICBsYWJlbDogJ25vZGUgwrcgdGFza19hc3NpZ24gKG9rKScsXG4gICAgICAgIHBheWxvYWQ6IHsgbm9kZTogJ3Rhc2tfYXNzaWduJywgdG9vbF9uYW1lOiAndGFza19hc3NpZ24nLCBtZXNzYWdlOiAnVXN1YXJpbyBhc2lnbmFkbycgfSxcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICd0b2tlbnMnLCBsYWJlbDogJ3Rva2VuIMK3IHBhcnRlIDInLCB0ZXh0OiBNT0NLX0NPTlRFTlRfUEFSVF8yLCBjaGFyRGVsYXlNczogMTQgfSxcbiAgICAgIHsga2luZDogJ2NvbXBsZXRlJywgbGFiZWw6ICdjb21wbGV0ZScgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX2J1dHRvbicsXG4gICAgdGl0bGU6ICdISVRMIMK3IEFwcHJvdmFsQm94JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICd0b2tlbiDihpIgYXBwcm92YWxfcmVxdWlyZWQgKHN0cmVhbSB0ZXJtaW5hKSDihpIgQXBwcm92YWxCb3gg4oaSIGNvbnRpbnVlLXRocmVhZCBjb24gcmVzdW1pbmcgKyB0b29sICsgdG9rZW5zLicsXG4gICAgdXNlclF1ZXN0aW9uOiAnQ3Jlw6EgdW5hIHRhcmVhIERlbW8gZW4gZWwgcHJveWVjdG8uJyxcbiAgICBmaW5hbEFuc3dlcjogTU9DS19ISVRMX1JFU1VNRV9UT0tFTlMsXG4gICAgc3RyZWFtRXZlbnRzOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdTU0UgY29uZWN0YWRvJyB9LFxuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA4MDAsIGxhYmVsOiAnQWdlbnRlIHBsYW5pZmljYW5kbycgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcHJvcHVlc3RhJywgdGV4dDogTU9DS19ISVRMX1BST1BPU0FMLCBjaGFyRGVsYXlNczogMTIgfSxcbiAgICAgIHsga2luZDogJ3dhaXQnLCBtczogNTAwLCBsYWJlbDogJ0dyYWZvIGVuIGh1bWFuX2FwcHJvdmFsJyB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICAgICAgICBsYWJlbDogJ2FwcHJvdmFsX3JlcXVpcmVkIChib3TDs24g4oCUIHN0cmVhbSBzZXR0bGVkKScsXG4gICAgICAgIGFwcHJvdmFsOiBNT0NLX0NSRUFURV9UQVNLX0FQUFJPVkFMLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbnRpbnVlRXZlbnRzOiBSRVNVTUVfQ09OVElOVUVfRVZFTlRTLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX21hbnVhbCcsXG4gICAgdGl0bGU6ICdISVRMIMK3IE1hbnVhbCAoXCJTw60sIGNvbmZpcm1vXCIpJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdhcHByb3ZhbF9yZXF1aXJlZCBjb24gbWFudWFsX2FwcHJvdmFsX2RldGVjdGVkOiBzaW4gQXBwcm92YWxCb3gsIGVsIHN0cmVhbSBzaWd1ZSBjb24gcmVzdW1pbmcgKyBjb250ZW50IGJsb2IuJyxcbiAgICB1c2VyUXVlc3Rpb246ICdTw60sIGNvbmZpcm1vLiBDcmXDoSBsYSB0YXJlYSBEZW1vLicsXG4gICAgZmluYWxBbnN3ZXI6IE1PQ0tfSElUTF9DT05URU5UX0JMT0IsXG4gICAgc3RyZWFtRXZlbnRzOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdTU0UgY29uZWN0YWRvJyB9LFxuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd2FpdCcsIG1zOiA2MDAsIGxhYmVsOiAnRGV0ZWN0YW5kbyBtYW51YWwgYXBwcm92YWwnIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7IGtpbmQ6ICd0b2tlbnMnLCBsYWJlbDogJ3Rva2VuIMK3IGFjaycsIHRleHQ6ICdQZXJmZWN0bywgcHJvY2VkbyBjb24gbGEgY3JlYWNpw7Nu4oCmJywgY2hhckRlbGF5TXM6IDE0IH0sXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdodW1hbl9hcHByb3ZhbCArIG1hbnVhbCBkZXRlY3RhZG8nIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gICAgICAgIGxhYmVsOiAnYXBwcm92YWxfcmVxdWlyZWQgKG1hbnVhbCDigJQgc3RyZWFtIE5PIHRlcm1pbmEpJyxcbiAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAuLi5NT0NLX0NSRUFURV9UQVNLX0FQUFJPVkFMLFxuICAgICAgICAgIG1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZDogdHJ1ZSxcbiAgICAgICAgICB3YXJuaW5nX21lc3NhZ2U6ICdDb25maXJtYXN0ZSBsYSBhY2Npw7NuIHBvciBtZW5zYWplIGRlIHRleHRvLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uTUFOVUFMX1NUUkVBTV9UQUlMLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hpdGxfY29udGVudF9ibG9iJyxcbiAgICB0aXRsZTogJ0hJVEwgwrcgQ29udGVudCBkZSB1bmEgKHBvc3QtcmVzdW1lKScsXG4gICAgZGVzY3JpcHRpb246ICdUcmFzIGFwcm9iYXI6IHJlc3VtaW5nIGdlbsOpcmljbywgbm9kZSBjb24gbm9tYnJlIGNydWRvIGRlIHRvb2wsIHJlc3B1ZXN0YSBlbiB1biBzb2xvIGV2ZW50byBjb250ZW50LicsXG4gICAgdXNlclF1ZXN0aW9uOiAnQ3Jlw6EgbGEgdGFyZWEgRGVtby4nLFxuICAgIGZpbmFsQW5zd2VyOiBNT0NLX0hJVExfQ09OVEVOVF9CTE9CLFxuICAgIHN0cmVhbUV2ZW50czogW1xuICAgICAgeyBraW5kOiAndGhpbmtpbmcnLCBsYWJlbDogJ3RoaW5raW5nJyB9LFxuICAgICAgeyBraW5kOiAnd3JpdGluZycsIGxhYmVsOiAnd3JpdGluZ19zdGFydGVkJyB9LFxuICAgICAgeyBraW5kOiAndG9rZW5zJywgbGFiZWw6ICd0b2tlbiDCtyBwcm9wdWVzdGEnLCB0ZXh0OiBNT0NLX0hJVExfUFJPUE9TQUwsIGNoYXJEZWxheU1zOiAxMiB9LFxuICAgICAge1xuICAgICAgICBraW5kOiAnYXBwcm92YWxfcmVxdWlyZWQnLFxuICAgICAgICBsYWJlbDogJ2FwcHJvdmFsX3JlcXVpcmVkIChib3TDs24pJyxcbiAgICAgICAgYXBwcm92YWw6IE1PQ0tfQ1JFQVRFX1RBU0tfQVBQUk9WQUwsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29udGludWVFdmVudHM6IFJFU1VNRV9DT05URU5UX0JMT0JfRVZFTlRTLFxuICB9LFxuICB7XG4gICAgaWQ6ICdoaXRsX2NoYWluZWQnLFxuICAgIHRpdGxlOiAnSElUTCDCtyBFbmNhZGVuYWRvICgyIGFwcHJvdmFscyknLFxuICAgIGRlc2NyaXB0aW9uOiAnUHJpbWVyIGNvbnRpbnVlIE9LIOKGkiBhZ2VudGUgcGlkZSBvdHJhIHRvb2wg4oaSIHNlZ3VuZG8gQXBwcm92YWxCb3gg4oaSIHNlZ3VuZG8gY29udGludWUuJyxcbiAgICB1c2VyUXVlc3Rpb246ICdDcmXDoSBsYSB0YXJlYSBEZW1vIHkgYXNpZ25hbGEgYSBKdWFuLicsXG4gICAgZmluYWxBbnN3ZXI6IGAke01PQ0tfSElUTF9SRVNVTUVfVE9LRU5TfVxcblxcblRhbWJpw6luIGFzaWduw6kgbGEgdGFyZWEgYSAqKkp1YW4gUMOpcmV6KiouYCxcbiAgICBzdHJlYW1FdmVudHM6IFtcbiAgICAgIHsga2luZDogJ3RoaW5raW5nJywgbGFiZWw6ICd0aGlua2luZycgfSxcbiAgICAgIHsga2luZDogJ3dyaXRpbmcnLCBsYWJlbDogJ3dyaXRpbmdfc3RhcnRlZCcgfSxcbiAgICAgIHsga2luZDogJ3Rva2VucycsIGxhYmVsOiAndG9rZW4gwrcgcHJvcHVlc3RhIGNyZWF0ZScsIHRleHQ6IE1PQ0tfSElUTF9QUk9QT1NBTCwgY2hhckRlbGF5TXM6IDEyIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdhcHByb3ZhbF9yZXF1aXJlZCcsXG4gICAgICAgIGxhYmVsOiAnYXBwcm92YWxfcmVxdWlyZWQgIzEgwrcgY3JlYXRlX3Rhc2snLFxuICAgICAgICBhcHByb3ZhbDogTU9DS19DUkVBVEVfVEFTS19BUFBST1ZBTCxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb250aW51ZUV2ZW50czogW1xuICAgICAgLi4uUkVTVU1FX0NPTlRJTlVFX0VWRU5UUy5zbGljZSgwLCAtMSksXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDUwMCwgbGFiZWw6ICdBZ2VudGUgcGlkZSBzZWd1bmRhIHRvb2wnIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICd0b2tlbnMnLFxuICAgICAgICBsYWJlbDogJ3Rva2VuIMK3IHRyYW5zaWNpw7NuJyxcbiAgICAgICAgdGV4dDogTU9DS19ISVRMX0NIQUlORURfUEFSVElBTCxcbiAgICAgICAgY2hhckRlbGF5TXM6IDEyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ2FwcHJvdmFsX3JlcXVpcmVkJyxcbiAgICAgICAgbGFiZWw6ICdhcHByb3ZhbF9yZXF1aXJlZCAjMiDCtyB0YXNrX2Fzc2lnbicsXG4gICAgICAgIGFwcHJvdmFsOiBNT0NLX1RBU0tfQVNTSUdOX0FQUFJPVkFMLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbnRpbnVlRXZlbnRzU2Vjb25kOiBbXG4gICAgICB7IGtpbmQ6ICd3YWl0JywgbXM6IDQwMCwgbGFiZWw6ICdQT1NUIGNvbnRpbnVlLXRocmVhZCAjMicgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogJ25vZGUnLFxuICAgICAgICBsYWJlbDogJ25vZGUgwrcgcmVzdW1pbmcnLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgbm9kZTogJ3Jlc3VtaW5nJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWplY3V0YW5kbyBhY2Npw7NuIGFwcm9iYWRh4oCmJyxcbiAgICAgICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lEX1NFQ09ORCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICdub2RlJyxcbiAgICAgICAgbGFiZWw6ICdub2RlIMK3IHRhc2tfYXNzaWduJyxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIG5vZGU6ICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICAgdG9vbF9uYW1lOiAndGFza19hc3NpZ24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdBc2lnbmFuZG8gdXN1YXJpbyBhIGxhIHRhcmVh4oCmJyxcbiAgICAgICAgICB0aHJlYWRfaWQ6IE1PQ0tfVEhSRUFEX0lEX1NFQ09ORCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICd3cml0aW5nJywgbGFiZWw6ICd3cml0aW5nX3N0YXJ0ZWQnIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6ICd0b2tlbnMnLFxuICAgICAgICBsYWJlbDogJ3Rva2VuIMK3IGNpZXJyZScsXG4gICAgICAgIHRleHQ6ICdcXG5cXG5UYW1iacOpbiBhc2lnbsOpIGxhIHRhcmVhIGEgKipKdWFuIFDDqXJleioqLicsXG4gICAgICAgIGNoYXJEZWxheU1zOiAxMixcbiAgICAgIH0sXG4gICAgICB7IGtpbmQ6ICdjb21wbGV0ZScsIGxhYmVsOiAnY29tcGxldGUnIH0sXG4gICAgXSxcbiAgfSxcbl1cblxuZXhwb3J0IGNvbnN0IGdldFNjZW5hcmlvQnlJZCA9IChpZDogTW9ja1NjZW5hcmlvSWQpOiBNb2NrU2NlbmFyaW8gPT5cbiAgTU9DS19TQ0VOQVJJT1MuZmluZChzID0+IHMuaWQgPT09IGlkKSA/PyBNT0NLX1NDRU5BUklPU1swXVxuXG5leHBvcnQgY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT5cbiAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQocmVzb2x2ZSwgbXMpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUE4QkEsT0FBTyxJQUFNQSxZQUFZLEdBQUcsMkJBQTJCO0FBRXZELE9BQU8sSUFBTUMsY0FBYyxHQUFHLG9CQUFvQjtBQUNsRCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLG9CQUFvQjtBQUN6RCxPQUFPLElBQU1DLGtCQUFrQixHQUFHLHNCQUFzQjtBQUN4RCxPQUFPLElBQU1DLGVBQWUsR0FBRyxtQkFBbUI7QUFFbEQsT0FBTyxJQUFNQyx5QkFBMEMsR0FBRztFQUN4REMsSUFBSSxFQUFFLG1CQUFtQjtFQUN6QkMsZUFBZSxFQUFFLENBQ2Y7SUFDRUMsU0FBUyxFQUFFLGFBQWE7SUFDeEJDLFlBQVksRUFBRSx1QkFBdUI7SUFDckNDLFNBQVMsRUFBRTtNQUFFQyxLQUFLLEVBQUUsTUFBTTtNQUFFQyxVQUFVLEVBQUU7SUFBSyxDQUFDO0lBQzlDQyxTQUFTLEVBQUVaO0VBQ2IsQ0FBQyxDQUNGO0VBQ0RhLGFBQWEsRUFBRSxDQUFDO0VBQ2hCQyxrQkFBa0IsRUFBRVosa0JBQWtCO0VBQ3RDYSxVQUFVLEVBQUVaLGVBQWU7RUFDM0JhLFFBQVEsRUFBRTtJQUFFTCxVQUFVLEVBQUUsTUFBTTtJQUFFTSxJQUFJLEVBQUU7RUFBSztBQUM3QyxDQUFDO0FBRUQs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