@projectcor/maia-components 2.11.78-11 → 2.11.78-12

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 (54) hide show
  1. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +2 -4
  2. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +27 -0
  3. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +18 -0
  4. package/lib/components/atoms/OptionCorPermission/index.js +2 -0
  5. package/lib/components/atoms/Switch/Switch.js +27 -0
  6. package/lib/components/atoms/Switch/Switch.styles.js +22 -0
  7. package/lib/components/atoms/Switch/index.js +2 -0
  8. package/lib/components/atoms/icons/CorAccessIcon.js +41 -0
  9. package/lib/components/atoms/icons/index.js +2 -1
  10. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +71 -43
  11. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +23 -7
  12. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +106 -43
  13. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +26 -10
  14. package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +3 -3
  15. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +18 -44
  16. package/lib/components/molecules/ChatAIHome/styles.js +41 -76
  17. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +11 -16
  18. package/lib/components/molecules/ChatFooter/ChatFooter.js +18 -6
  19. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +32 -0
  20. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +14 -0
  21. package/lib/components/molecules/ChatFooter/styles.js +5 -1
  22. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +16 -12
  23. package/lib/components/organisms/ChatAI/ChatAI.js +1 -1
  24. package/lib/constants/maiaTaskPanelAccess.js +2 -2
  25. package/lib/context/global-context.js +1 -1
  26. package/lib/dev/DevChatAI.js +2 -2
  27. package/lib/hooks/useAgentModel/useCreateAgent.js +36 -13
  28. package/lib/hooks/useAgentModel/useUpdateAgent.js +34 -10
  29. package/lib/hooks/useChatManager/useChatManager.js +46 -77
  30. package/lib/hooks/useFrequentlyUsedActions.js +2 -4
  31. package/lib/hooks/useMentionAllowedTypes.js +12 -11
  32. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +101 -76
  33. package/lib/hooks/useProjectSummaryConfig.js +1 -1
  34. package/lib/lang/br/index.js +17 -14
  35. package/lib/lang/en/index.js +15 -12
  36. package/lib/lang/es/index.js +15 -12
  37. package/lib/lang/fr/index.js +18 -15
  38. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  39. package/lib/services/maia/Agents/getAgentById.js +4 -2
  40. package/lib/services/maia/Agents/getAgents.js +2 -2
  41. package/lib/services/maia/Agents/setAgentToolGroups.js +42 -0
  42. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  43. package/lib/store/chatsStore.types.js +1 -1
  44. package/lib/types/Action.js +1 -1
  45. package/lib/types/agentModal.js +1 -1
  46. package/lib/utils/actionIconMap.js +2 -8
  47. package/lib/utils/corConnectorMentionTypes.js +10 -6
  48. package/lib/utils/normalizeAgentConnectors.js +39 -1
  49. package/lib/utils/streamActivityMessages.js +1 -2
  50. package/package.json +57 -18
  51. package/lib/components/atoms/icons/ActionCalendarIcon.js +0 -112
  52. package/lib/components/atoms/icons/ActionChatIcon.js +0 -71
  53. package/lib/components/atoms/icons/ActionTimeBackIcon.js +0 -112
  54. package/lib/constants/plannerSyncEvents.js +0 -16
@@ -54,6 +54,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
54
54
  var abortControllerRef = useRef(null);
55
55
  var isStoppedRef = useRef(false);
56
56
  var activityMessageIndexRef = useRef(0);
57
+ var streamActivityRef = useRef(null);
57
58
  var onStreamUpdateRef = useRef(onStreamUpdate);
58
59
  var onFinishStreamRef = useRef(onFinishStream);
59
60
  var onStartWritingRef = useRef(onStartWriting);
@@ -68,21 +69,25 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
68
69
  onApprovalRequiredRef.current = onApprovalRequired;
69
70
  var clearStreamLoadingState = useCallback(function () {
70
71
  activityMessageIndexRef.current = 0;
72
+ streamActivityRef.current = null;
71
73
  setStreamActivity(null);
72
74
  setLoadingMessage(null);
73
75
  }, []);
74
76
  var applyStreamActivity = useCallback(function (activity) {
75
- setStreamActivity(function (prev) {
76
- if ((prev === null || prev === void 0 ? void 0 : prev.phase) === activity.phase && canRotateStreamActivityPhase(activity.phase)) {
77
- return prev;
78
- }
79
- if ((prev === null || prev === void 0 ? void 0 : prev.phase) !== activity.phase) {
80
- activityMessageIndexRef.current = 0;
81
- }
82
- setLoadingMessage(activity.message);
83
- return activity;
84
- });
77
+ var prev = streamActivityRef.current;
78
+ if ((prev === null || prev === void 0 ? void 0 : prev.phase) === activity.phase && canRotateStreamActivityPhase(activity.phase)) {
79
+ return;
80
+ }
81
+ if ((prev === null || prev === void 0 ? void 0 : prev.phase) !== activity.phase) {
82
+ activityMessageIndexRef.current = 0;
83
+ }
84
+ streamActivityRef.current = activity;
85
+ setStreamActivity(activity);
86
+ setLoadingMessage(activity.message);
85
87
  }, []);
88
+ useEffect(function () {
89
+ streamActivityRef.current = streamActivity;
90
+ }, [streamActivity]);
86
91
  useEffect(function () {
87
92
  if (!isLoading || isWriting || !streamActivity) {
88
93
  return undefined;
@@ -91,21 +96,21 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
91
96
  return undefined;
92
97
  }
93
98
  var intervalId = window.setInterval(function () {
94
- setStreamActivity(function (prev) {
95
- if (!prev || !canRotateStreamActivityPhase(prev.phase)) {
96
- return prev;
97
- }
98
- if (!canAdvanceStreamActivityMessage(prev.phase, activityMessageIndexRef.current)) {
99
- return prev;
100
- }
101
- var advanced = advanceStreamActivityMessage(prev, activityMessageIndexRef.current, t);
102
- if (!advanced) {
103
- return prev;
104
- }
105
- activityMessageIndexRef.current = advanced.nextIndex;
106
- setLoadingMessage(advanced.activity.message);
107
- return advanced.activity;
108
- });
99
+ var prev = streamActivityRef.current;
100
+ if (!prev || !canRotateStreamActivityPhase(prev.phase)) {
101
+ return;
102
+ }
103
+ if (!canAdvanceStreamActivityMessage(prev.phase, activityMessageIndexRef.current)) {
104
+ return;
105
+ }
106
+ var advanced = advanceStreamActivityMessage(prev, activityMessageIndexRef.current, t);
107
+ if (!advanced) {
108
+ return;
109
+ }
110
+ activityMessageIndexRef.current = advanced.nextIndex;
111
+ streamActivityRef.current = advanced.activity;
112
+ setStreamActivity(advanced.activity);
113
+ setLoadingMessage(advanced.activity.message);
109
114
  }, ACTIVITY_MESSAGE_ROTATE_MS);
110
115
  return function () {
111
116
  return window.clearInterval(intervalId);
@@ -114,7 +119,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
114
119
  var handleSSEStream = useCallback(/*#__PURE__*/function () {
115
120
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
116
121
  var _onErrorRef$current, _data$error, _data$error2;
117
- var pendingContent, throttleTimer, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, _onErrorRef$current2, _t, _t2, _t3, _t4;
122
+ var pendingContent, throttleTimer, streamSettled, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, _onErrorRef$current2, _t, _t2, _t3, _t4;
118
123
  return _regeneratorRuntime.wrap(function (_context) {
119
124
  while (1) switch (_context.prev = _context.next) {
120
125
  case 0:
@@ -125,11 +130,16 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
125
130
  // en cada frame; el texto en vivo viaja por el streamingStore.
126
131
  pendingContent = null;
127
132
  throttleTimer = null;
133
+ streamSettled = false;
128
134
  emitThrottled = function emitThrottled(content) {
129
135
  pendingContent = content;
130
136
  if (throttleTimer != null) return;
131
137
  throttleTimer = window.setTimeout(function () {
132
138
  throttleTimer = null;
139
+ if (streamSettled) {
140
+ pendingContent = null;
141
+ return;
142
+ }
133
143
  if (pendingContent != null) {
134
144
  var _onStreamUpdateRef$cu;
135
145
  var toEmit = pendingContent;
@@ -177,6 +187,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
177
187
  };
178
188
  applyStreamComplete = function applyStreamComplete(payload) {
179
189
  var _payload$agent_id, _subagentRaw$resolved, _onFinishStreamRef$cu;
190
+ if (streamSettled) return;
191
+ streamSettled = true;
180
192
  var finalContent = payload.content || accumulatedContent;
181
193
  var sources = payload.sources || null;
182
194
  var memorySessionId = payload.memory_session_id || '';
@@ -200,7 +212,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
200
212
  };
201
213
  case 3:
202
214
  if (!true) {
203
- _context.next = 28;
215
+ _context.next = 29;
204
216
  break;
205
217
  }
206
218
  if (!isStoppedRef.current) {
@@ -208,7 +220,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
208
220
  break;
209
221
  }
210
222
  reader.cancel();
211
- return _context.abrupt("continue", 28);
223
+ return _context.abrupt("continue", 29);
212
224
  case 4:
213
225
  _context.next = 5;
214
226
  return reader.read();
@@ -220,14 +232,14 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
220
232
  _context.next = 6;
221
233
  break;
222
234
  }
223
- return _context.abrupt("continue", 28);
235
+ return _context.abrupt("continue", 29);
224
236
  case 6:
225
237
  if (!isStoppedRef.current) {
226
238
  _context.next = 7;
227
239
  break;
228
240
  }
229
241
  reader.cancel();
230
- return _context.abrupt("continue", 28);
242
+ return _context.abrupt("continue", 29);
231
243
  case 7:
232
244
  buffer += decoder.decode(value, {
233
245
  stream: true
@@ -239,7 +251,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
239
251
  _iterator.s();
240
252
  case 9:
241
253
  if ((_step = _iterator.n()).done) {
242
- _context.next = 24;
254
+ _context.next = 25;
243
255
  break;
244
256
  }
245
257
  line = _step.value;
@@ -247,23 +259,29 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
247
259
  _context.next = 10;
248
260
  break;
249
261
  }
250
- return _context.abrupt("continue", 23);
262
+ return _context.abrupt("continue", 24);
251
263
  case 10:
252
264
  _line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
253
265
  if (!(!eventLine || !dataLine)) {
254
266
  _context.next = 11;
255
267
  break;
256
268
  }
257
- return _context.abrupt("continue", 23);
269
+ return _context.abrupt("continue", 24);
258
270
  case 11:
259
271
  eventType = eventLine.replace('event: ', '').trim();
260
272
  dataStr = dataLine.replace('data: ', '').trim();
261
273
  _context.prev = 12;
262
274
  _data = JSON.parse(dataStr);
275
+ if (!(streamSettled && eventType !== 'error')) {
276
+ _context.next = 13;
277
+ break;
278
+ }
279
+ return _context.abrupt("continue", 24);
280
+ case 13:
263
281
  _t = eventType;
264
- _context.next = _t === 'thinking' ? 13 : _t === 'token' ? 14 : _t === 'content' ? 15 : _t === 'node' ? 16 : _t === 'complete' ? 17 : _t === 'approval_required' ? 18 : _t === 'error' ? 19 : 20;
282
+ _context.next = _t === 'thinking' ? 14 : _t === 'token' ? 15 : _t === 'content' ? 16 : _t === 'node' ? 17 : _t === 'complete' ? 18 : _t === 'approval_required' ? 19 : _t === 'error' ? 20 : 21;
265
283
  break;
266
- case 13:
284
+ case 14:
267
285
  if (!hasStartedWriting) {
268
286
  setLoading(true);
269
287
  applyStreamActivity({
@@ -271,21 +289,21 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
271
289
  message: getThinkingLoadingMessage(0, t)
272
290
  });
273
291
  }
274
- return _context.abrupt("continue", 21);
275
- case 14:
292
+ return _context.abrupt("continue", 22);
293
+ case 15:
276
294
  chunk = typeof _data.content === 'string' ? _data.content : '';
277
295
  ensureWritingStarted();
278
296
  applyStreamChunk(chunk);
279
- return _context.abrupt("continue", 21);
280
- case 15:
297
+ return _context.abrupt("continue", 22);
298
+ case 16:
281
299
  _chunk = typeof _data.content === 'string' ? _data.content : '';
282
300
  ensureWritingStarted();
283
301
  applyStreamChunk(_chunk);
284
302
  if (isCompleteLikeSsePayload(_data)) {
285
303
  applyStreamComplete(_data);
286
304
  }
287
- return _context.abrupt("continue", 21);
288
- case 16:
305
+ return _context.abrupt("continue", 22);
306
+ case 17:
289
307
  // El orchestrator delegó a un subagente: NO lo exponemos. Mantenemos
290
308
  // el indicador de actividad genérico de MAIA, sin anunciar la
291
309
  // transferencia ni el nombre del subagente.
@@ -295,15 +313,19 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
295
313
  setLoading(true);
296
314
  applyStreamActivity(resolveHitlNodeStreamActivity(_data.message, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, typeof _data.thread_id === 'string' ? _data.thread_id : undefined));
297
315
  }
298
- return _context.abrupt("continue", 21);
299
- case 17:
300
- applyStreamComplete(_data);
301
- return _context.abrupt("continue", 21);
316
+ return _context.abrupt("continue", 22);
302
317
  case 18:
318
+ applyStreamComplete(_data);
319
+ return _context.abrupt("continue", 22);
320
+ case 19:
321
+ // Manual approval: el SSE sigue con node/token/complete (y puede
322
+ // encadenar más approval_required). Solo el approval "pausado"
323
+ // (botón) es terminal para este stream.
303
324
  flushPending();
304
325
  setIsWriting(false);
305
326
  isManualApproval = _data.manual_approval_detected === true;
306
327
  if (!isManualApproval) {
328
+ streamSettled = true;
307
329
  setLoading(false);
308
330
  clearStreamLoadingState();
309
331
  }
@@ -312,8 +334,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
312
334
  setLoading(true);
313
335
  applyStreamActivity(resolveInitialHitlStreamActivity(t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current));
314
336
  }
315
- return _context.abrupt("continue", 21);
316
- case 19:
337
+ return _context.abrupt("continue", 22);
338
+ case 20:
339
+ streamSettled = true;
317
340
  console.error('SSE Error:', _data.error);
318
341
  flushPending();
319
342
  setIsWriting(false);
@@ -321,39 +344,39 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
321
344
  clearStreamLoadingState();
322
345
  setLoadingMessage(null); // Limpiar mensaje cuando hay error
323
346
  (_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef, (_data$error = _data.error) === null || _data$error === void 0 ? void 0 : _data$error.type, (_data$error2 = _data.error) === null || _data$error2 === void 0 ? void 0 : _data$error2.message);
324
- return _context.abrupt("continue", 21);
325
- case 20:
326
- console.warn('Unknown SSE event type:', eventType);
327
- return _context.abrupt("continue", 21);
347
+ return _context.abrupt("continue", 22);
328
348
  case 21:
329
- _context.next = 23;
330
- break;
349
+ console.warn('Unknown SSE event type:', eventType);
350
+ return _context.abrupt("continue", 22);
331
351
  case 22:
332
- _context.prev = 22;
352
+ _context.next = 24;
353
+ break;
354
+ case 23:
355
+ _context.prev = 23;
333
356
  _t2 = _context["catch"](12);
334
357
  console.error('Error parsing SSE data:', _t2, dataStr);
335
- case 23:
336
- _context.next = 9;
337
- break;
338
358
  case 24:
339
- _context.next = 26;
359
+ _context.next = 9;
340
360
  break;
341
361
  case 25:
342
- _context.prev = 25;
343
- _t3 = _context["catch"](8);
344
- _iterator.e(_t3);
362
+ _context.next = 27;
363
+ break;
345
364
  case 26:
346
365
  _context.prev = 26;
347
- _iterator.f();
348
- return _context.finish(26);
366
+ _t3 = _context["catch"](8);
367
+ _iterator.e(_t3);
349
368
  case 27:
350
- _context.next = 3;
351
- break;
369
+ _context.prev = 27;
370
+ _iterator.f();
371
+ return _context.finish(27);
352
372
  case 28:
353
- _context.next = 30;
373
+ _context.next = 3;
354
374
  break;
355
375
  case 29:
356
- _context.prev = 29;
376
+ _context.next = 31;
377
+ break;
378
+ case 30:
379
+ _context.prev = 30;
357
380
  _t4 = _context["catch"](1);
358
381
  flushPending();
359
382
  setIsWriting(false);
@@ -362,18 +385,20 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
362
385
  if (!isStoppedRef.current) {
363
386
  (_onErrorRef$current2 = onErrorRef.current) === null || _onErrorRef$current2 === void 0 || _onErrorRef$current2.call(onErrorRef);
364
387
  }
365
- case 30:
366
- _context.prev = 30;
367
- flushPending();
368
- setLoading(false);
369
- setIsWriting(false);
370
- clearStreamLoadingState();
371
- return _context.finish(30);
372
388
  case 31:
389
+ _context.prev = 31;
390
+ flushPending();
391
+ if (!streamSettled) {
392
+ setLoading(false);
393
+ setIsWriting(false);
394
+ clearStreamLoadingState();
395
+ }
396
+ return _context.finish(31);
397
+ case 32:
373
398
  case "end":
374
399
  return _context.stop();
375
400
  }
376
- }, _callee, null, [[1, 29, 30, 31], [8, 25, 26, 27], [12, 22]]);
401
+ }, _callee, null, [[1, 30, 31, 32], [8, 26, 27, 28], [12, 23]]);
377
402
  }));
378
403
  return function (_x) {
379
404
  return _ref2.apply(this, arguments);
@@ -548,4 +573,4 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
548
573
  handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
549
574
  };
550
575
  };
551
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSIsImFwcGx5U3RyZWFtQWN0aXZpdHkiLCJhY3Rpdml0eSIsInByZXYiLCJwaGFzZSIsIm1lc3NhZ2UiLCJ1bmRlZmluZWQiLCJpbnRlcnZhbElkIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJhZHZhbmNlZCIsIm5leHRJbmRleCIsImNsZWFySW50ZXJ2YWwiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfb25FcnJvclJlZiRjdXJyZW50IiwiX2RhdGEkZXJyb3IiLCJfZGF0YSRlcnJvcjIiLCJwZW5kaW5nQ29udGVudCIsInRocm90dGxlVGltZXIiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiY2h1bmsiLCJfY2h1bmsiLCJfb25BcHByb3ZhbFJlcXVpcmVkUmUiLCJpc01hbnVhbEFwcHJvdmFsIiwiX29uRXJyb3JSZWYkY3VycmVudDIiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJjb250ZW50Iiwic2V0VGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UyIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfb25GaW5pc2hTdHJlYW1SZWYkY3UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwibm9kZSIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsIl9vYmplY3RTcHJlYWQiLCJpbnB1dCIsInNpZ25hbCIsIl94MiIsInN0b3BTdHJlYW1pbmciLCJfb25TdG9wUmVmJGN1cnJlbnQiLCJhYm9ydCIsImFib3J0U3RyZWFtU2lsZW50bHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSwgQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMsIFJlc29sdmVkQ29udGV4dCB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7XG4gIEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TLFxuICBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlLFxuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcblxudHlwZSBTdWJhZ2VudFJhdyA9IHsgbmFtZT86IHN0cmluZzsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfSB8IG51bGwgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxuICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3RyZWFtQWN0aXZpdHksIHNldFN0cmVhbUFjdGl2aXR5XSA9IHVzZVN0YXRlPFN0cmVhbUFjdGl2aXR5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYgPSB1c2VSZWYoMClcblxuICBjb25zdCBvblN0cmVhbVVwZGF0ZVJlZiA9IHVzZVJlZihvblN0cmVhbVVwZGF0ZSlcbiAgY29uc3Qgb25GaW5pc2hTdHJlYW1SZWYgPSB1c2VSZWYob25GaW5pc2hTdHJlYW0pXG4gIGNvbnN0IG9uU3RhcnRXcml0aW5nUmVmID0gdXNlUmVmKG9uU3RhcnRXcml0aW5nKVxuICBjb25zdCBvblN0b3BSZWYgPSB1c2VSZWYob25TdG9wKVxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpXG4gIGNvbnN0IG9uQXBwcm92YWxSZXF1aXJlZFJlZiA9IHVzZVJlZihvbkFwcHJvdmFsUmVxdWlyZWQpXG5cbiAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudCA9IG9uU3RyZWFtVXBkYXRlXG4gIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQgPSBvbkZpbmlzaFN0cmVhbVxuICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50ID0gb25TdGFydFdyaXRpbmdcbiAgb25TdG9wUmVmLmN1cnJlbnQgPSBvblN0b3BcbiAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvclxuICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudCA9IG9uQXBwcm92YWxSZXF1aXJlZFxuXG4gIGNvbnN0IGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgc2V0U3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBhcHBseVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSkgPT4ge1xuICAgIHNldFN0cmVhbUFjdGl2aXR5KHByZXYgPT4ge1xuICAgICAgaWYgKHByZXY/LnBoYXNlID09PSBhY3Rpdml0eS5waGFzZSAmJiBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKGFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgICByZXR1cm4gcHJldlxuICAgICAgfVxuICAgICAgaWYgKHByZXY/LnBoYXNlICE9PSBhY3Rpdml0eS5waGFzZSkge1xuICAgICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgICAgfVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UoYWN0aXZpdHkubWVzc2FnZSlcbiAgICAgIHJldHVybiBhY3Rpdml0eVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0xvYWRpbmcgfHwgaXNXcml0aW5nIHx8ICFzdHJlYW1BY3Rpdml0eSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoIWNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2Uoc3RyZWFtQWN0aXZpdHkucGhhc2UpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZXRTdHJlYW1BY3Rpdml0eShwcmV2ID0+IHtcbiAgICAgICAgaWYgKCFwcmV2IHx8ICFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHByZXYucGhhc2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UocHJldi5waGFzZSwgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFkdmFuY2VkID0gYWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShwcmV2LCBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50LCB0KVxuICAgICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gYWR2YW5jZWQubmV4dEluZGV4XG4gICAgICAgIHNldExvYWRpbmdNZXNzYWdlKGFkdmFuY2VkLmFjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgICAgIHJldHVybiBhZHZhbmNlZC5hY3Rpdml0eVxuICAgICAgfSlcbiAgICB9LCBBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUylcblxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKVxuICB9LCBbaXNMb2FkaW5nLCBpc1dyaXRpbmcsIHN0cmVhbUFjdGl2aXR5Py5waGFzZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlU1NFU3RyZWFtID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gVGltZS10aHJvdHRsZTogZXZpdGEgZW1pdGlyIG9uU3RyZWFtVXBkYXRlIG3DoXMgZGUgdW5hIHZleiBjYWRhIH4xNm1zLlxuICAgICAgLy8gVXNhbW9zIHRpbWVyIHBhcmEgcXVlIGVsIHN0cmVhbSBzaWdhIHBpbnRhbmRvIGF1bnF1ZSByQUYgZXN0w6kgdGhyb3R0bGVhZG8uXG4gICAgICAvLyBOb3RhOiBubyB0b2NhbW9zIGVsIHN0YXRlIGBkYXRhYCBlbiBlbCBob3QgcGF0aCAoc29sbyBzZSBhY3R1YWxpemEgZW5cbiAgICAgIC8vIGBjb21wbGV0ZWAvcmVzZXRzKSBwYXJhIG5vIHJlLXJlbmRlcml6YXIgYSBsb3MgY29uc3VtaWRvcmVzIGRlbCBob29rXG4gICAgICAvLyBlbiBjYWRhIGZyYW1lOyBlbCB0ZXh0byBlbiB2aXZvIHZpYWphIHBvciBlbCBzdHJlYW1pbmdTdG9yZS5cbiAgICAgIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgICAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgICAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTYpXG4gICAgICB9XG4gICAgICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgICAgICAgaWYgKCFyZWFkZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gICAgICAgIGxldCBidWZmZXIgPSAnJ1xuICAgICAgICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICAgICAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcblxuICAgICAgICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzU3RhcnRlZFdyaXRpbmcpIHJldHVyblxuICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgIHNldElzV3JpdGluZyh0cnVlKVxuICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgICAgICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9XG4gICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgIGNvbnN0IHN1YmFnZW50UmF3ID0gcGF5bG9hZC5zdWJhZ2VudCBhcyBTdWJhZ2VudFJhd1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgIHNldERhdGEoZmluYWxDb250ZW50KVxuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICByZXNvbHZlZENvbnRleHRcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOlxuICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOiAndGhpbmtpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UoMCwgdCksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAndG9rZW4nOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgICAgICAvLyBFbCBvcmNoZXN0cmF0b3IgZGVsZWfDsyBhIHVuIHN1YmFnZW50ZTogTk8gbG8gZXhwb25lbW9zLiBNYW50ZW5lbW9zXG4gICAgICAgICAgICAgICAgICAvLyBlbCBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkIGdlbsOpcmljbyBkZSBNQUlBLCBzaW4gYW51bmNpYXIgbGFcbiAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZmVyZW5jaWEgbmkgZWwgbm9tYnJlIGRlbCBzdWJhZ2VudGUuXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBkYXRhLnRocmVhZF9pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdhcHByb3ZhbF9yZXF1aXJlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc01hbnVhbEFwcHJvdmFsID0gZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGlmIChpc01hbnVhbEFwcHJvdmFsICYmIEFycmF5LmlzQXJyYXkoZGF0YS5wZW5kaW5nX2FjdGlvbnMpICYmIGRhdGEucGVuZGluZ19hY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50KSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiwgdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgZmVlSWQsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHRhc2tJZCxcbiAgICB0YXNrTmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBmdWFJZCxcbiAgICBzY0lkLFxuICAgIGFnZW50RW50aXR5LFxuICAgIGFnZW50VHlwZSxcbiAgICBjb250ZXh0TWVzc2FnZSxcbiAgICBjb250ZXh0RGF0YSxcbiAgfToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgICBsYW5nOiBzdHJpbmdcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIGZpcnN0TmFtZT86IHN0cmluZ1xuICAgIGxhc3ROYW1lPzogc3RyaW5nXG4gICAgY29tcGFueUlkOiBzdHJpbmdcbiAgICBjaGF0SWQ6IHN0cmluZ1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgY2xpZW50SWQ/OiBudW1iZXJcbiAgICBjbGllbnROYW1lPzogc3RyaW5nXG4gICAgZmVlSWQ/OiBudW1iZXJcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIHRhc2tJZD86IG51bWJlclxuICAgIHRhc2tOYW1lPzogc3RyaW5nXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHlcbiAgICBhZ2VudFR5cGU/OiBBZ2VudFR5cGVcbiAgICBjb250ZXh0TWVzc2FnZT86IENvbnRleHRNZXNzYWdlXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgICBjb25zdCBpbml0aWFsQWN0aXZpdHkgPSBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwge1xuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50cz8ubGVuZ3RoKSxcbiAgICAgICAgYXR0YWNobWVudHNDb3VudDogYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgfSlcbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoaW5pdGlhbEFjdGl2aXR5KVxuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZSAvLyBSZXNldGVhciBmbGFnIGFsIGluaWNpYXIgbnVldmEgcGV0aWNpw7NuXG5cbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKFxuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQ6IG1lc3NhZ2UsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAuLi4oZmlyc3ROYW1lID8geyBmaXJzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4obGFzdE5hbWUgPyB7IGxhc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgY29tcGFueUlkLFxuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgLi4uKGZlZUlkICE9IG51bGwgPyB7IGZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgYWdlbnROYW1lLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIC4uLihwcm9qZWN0SWQgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocHJvamVjdE5hbWUgPyB7IHByb2plY3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudE5hbWUgPyB7IGNsaWVudE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza0lkICE9IG51bGwgPyB7IHRhc2tJZCB9IDoge30pLFxuICAgICAgICAgIC4uLih0YXNrTmFtZSA/IHsgdGFza05hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpIGZ1ZSB1biBhYm9ydCBpbnRlbmNpb25hbCAoc3RvcCBtYW51YWwgbyBjYW1iaW8gZGUgY2hhdCksIG5vIGRpc3BhcmFyIG9uRXJyb3JcbiAgICAgIC8vIHBvcnF1ZSBlc28gaW5zZXJ0YSB1biBcIm1lbnNhamUgZGUgZXJyb3JcIiBlbiBlbCBjaGF0IGFsIHF1ZSBhY2FiYW1vcyBkZSBuYXZlZ2FyLlxuICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIG9uU3RvcFJlZi5jdXJyZW50Py4oKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvKipcbiAgICogQWJvcnRhIGVsIHN0cmVhbSBlbiBjdXJzbyAoc2kgZXhpc3RlKSBzaW4gZGlzcGFyYXIgYG9uU3RvcGAuXG4gICAqIMOac2VsbyBlbiBjYXNvcyBkb25kZSBubyBxdWVyZW1vcyBhZ3JlZ2FyIGVsIG1lbnNhamUgZGUgXCJjYW5jZWxhZG9cIlxuICAgKiAocG9yIGVqZW1wbG8sIGFsIGNhbWJpYXIgZGUgY2hhdCkuXG4gICAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgfVxuICB9LCBbY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdKVxuXG4gIC8vIENsZWFudXAgYWwgZGVzbW9udGFyOiBzaSBxdWVkYSB1biBzdHJlYW0gYWN0aXZvLCBhYm9ydGFybG8gcGFyYSBldml0YXJcbiAgLy8gcXVlIGludGVudGUgYWN0dWFsaXphciBlc3RhZG8gZW4gdW4gY29tcG9uZW50ZSB5YSBkZXNtb250YWRvIChmdWdhcyBkZVxuICAvLyBtZW1vcmlhIHkgd2FybmluZ3MpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGwpID0+IHtcbiAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdXG4gIClcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBzZXREYXRhKG51bGwpXG4gICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseSxcbiAgICBoYW5kbGVTU0VTdHJlYW0sIC8vIEV4cG9uZXIgcGFyYSBwb2RlciB1c2FybG8gZW4gY29udGludWUtdGhyZWFkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFLdEMsU0FBU0MsUUFBUSxRQUFRLHdCQUF3QjtBQUVqRCxTQUNFQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsK0JBQStCLEVBQy9CQyw0QkFBNEIsRUFDNUJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLFFBQzNCLG9DQUFvQztBQUMzQyxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBSXpGLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQVFBO0VBQUEsSUFQaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBTixJQUFBLENBQWxCTSxrQkFBa0I7SUFDbEJDLHVCQUF1QixHQUFBUCxJQUFBLENBQXZCTyx1QkFBdUI7RUFFdkIsSUFBQUMsZUFBQSxHQUFjdkIsY0FBYyxDQUFDLENBQUNFLFFBQVEsQ0FBQ3NCLE1BQU0sQ0FBQyxDQUFDO0lBQXZDQyxDQUFDLEdBQUFGLGVBQUEsQ0FBREUs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
576
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwic3RyZWFtQWN0aXZpdHlSZWYiLCJvblN0cmVhbVVwZGF0ZVJlZiIsIm9uRmluaXNoU3RyZWFtUmVmIiwib25TdGFydFdyaXRpbmdSZWYiLCJvblN0b3BSZWYiLCJvbkVycm9yUmVmIiwib25BcHByb3ZhbFJlcXVpcmVkUmVmIiwiY3VycmVudCIsImNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlIiwiYXBwbHlTdHJlYW1BY3Rpdml0eSIsImFjdGl2aXR5IiwicHJldiIsInBoYXNlIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsImludGVydmFsSWQiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImFkdmFuY2VkIiwibmV4dEluZGV4IiwiY2xlYXJJbnRlcnZhbCIsImhhbmRsZVNTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfZGF0YSRlcnJvciIsIl9kYXRhJGVycm9yMiIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsInN0cmVhbVNldHRsZWQiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiY2h1bmsiLCJfY2h1bmsiLCJfb25BcHByb3ZhbFJlcXVpcmVkUmUiLCJpc01hbnVhbEFwcHJvdmFsIiwiX29uRXJyb3JSZWYkY3VycmVudDIiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJjb250ZW50Iiwic2V0VGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UyIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfb25GaW5pc2hTdHJlYW1SZWYkY3UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwibm9kZSIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsIl9vYmplY3RTcHJlYWQiLCJpbnB1dCIsInNpZ25hbCIsIl94MiIsInN0b3BTdHJlYW1pbmciLCJfb25TdG9wUmVmJGN1cnJlbnQiLCJhYm9ydCIsImFib3J0U3RyZWFtU2lsZW50bHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSwgQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMsIFJlc29sdmVkQ29udGV4dCB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7XG4gIEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TLFxuICBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlLFxuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcblxudHlwZSBTdWJhZ2VudFJhdyA9IHsgbmFtZT86IHN0cmluZzsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfSB8IG51bGwgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxuICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3RyZWFtQWN0aXZpdHksIHNldFN0cmVhbUFjdGl2aXR5XSA9IHVzZVN0YXRlPFN0cmVhbUFjdGl2aXR5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc3RyZWFtQWN0aXZpdHlSZWYgPSB1c2VSZWY8U3RyZWFtQWN0aXZpdHkgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU3RyZWFtVXBkYXRlUmVmID0gdXNlUmVmKG9uU3RyZWFtVXBkYXRlKVxuICBjb25zdCBvbkZpbmlzaFN0cmVhbVJlZiA9IHVzZVJlZihvbkZpbmlzaFN0cmVhbSlcbiAgY29uc3Qgb25TdGFydFdyaXRpbmdSZWYgPSB1c2VSZWYob25TdGFydFdyaXRpbmcpXG4gIGNvbnN0IG9uU3RvcFJlZiA9IHVzZVJlZihvblN0b3ApXG4gIGNvbnN0IG9uRXJyb3JSZWYgPSB1c2VSZWYob25FcnJvcilcbiAgY29uc3Qgb25BcHByb3ZhbFJlcXVpcmVkUmVmID0gdXNlUmVmKG9uQXBwcm92YWxSZXF1aXJlZClcblxuICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50ID0gb25TdHJlYW1VcGRhdGVcbiAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudCA9IG9uRmluaXNoU3RyZWFtXG4gIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQgPSBvblN0YXJ0V3JpdGluZ1xuICBvblN0b3BSZWYuY3VycmVudCA9IG9uU3RvcFxuICBvbkVycm9yUmVmLmN1cnJlbnQgPSBvbkVycm9yXG4gIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50ID0gb25BcHByb3ZhbFJlcXVpcmVkXG5cbiAgY29uc3QgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgfSwgW10pXG5cbiAgY29uc3QgYXBwbHlTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudFxuICAgIGlmIChwcmV2Py5waGFzZSA9PT0gYWN0aXZpdHkucGhhc2UgJiYgY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShhY3Rpdml0eS5waGFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocHJldj8ucGhhc2UgIT09IGFjdGl2aXR5LnBoYXNlKSB7XG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgIH1cbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gYWN0aXZpdHlcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShhY3Rpdml0eS5tZXNzYWdlKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBzdHJlYW1BY3Rpdml0eVxuICB9LCBbc3RyZWFtQWN0aXZpdHldKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0xvYWRpbmcgfHwgaXNXcml0aW5nIHx8ICFzdHJlYW1BY3Rpdml0eSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoIWNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2Uoc3RyZWFtQWN0aXZpdHkucGhhc2UpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudFxuICAgICAgaWYgKCFwcmV2IHx8ICFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHByZXYucGhhc2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKCFjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKHByZXYucGhhc2UsIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgYWR2YW5jZWQgPSBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKHByZXYsIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQsIHQpXG4gICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IGFkdmFuY2VkLm5leHRJbmRleFxuICAgICAgc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudCA9IGFkdmFuY2VkLmFjdGl2aXR5XG4gICAgICBzZXRTdHJlYW1BY3Rpdml0eShhZHZhbmNlZC5hY3Rpdml0eSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKGFkdmFuY2VkLmFjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgfSwgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMpXG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcbiAgfSwgW2lzTG9hZGluZywgaXNXcml0aW5nLCBzdHJlYW1BY3Rpdml0eT8ucGhhc2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVNTRVN0cmVhbSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIFRpbWUtdGhyb3R0bGU6IGV2aXRhIGVtaXRpciBvblN0cmVhbVVwZGF0ZSBtw6FzIGRlIHVuYSB2ZXogY2FkYSB+MTZtcy5cbiAgICAgIC8vIFVzYW1vcyB0aW1lciBwYXJhIHF1ZSBlbCBzdHJlYW0gc2lnYSBwaW50YW5kbyBhdW5xdWUgckFGIGVzdMOpIHRocm90dGxlYWRvLlxuICAgICAgLy8gTm90YTogbm8gdG9jYW1vcyBlbCBzdGF0ZSBgZGF0YWAgZW4gZWwgaG90IHBhdGggKHNvbG8gc2UgYWN0dWFsaXphIGVuXG4gICAgICAvLyBgY29tcGxldGVgL3Jlc2V0cykgcGFyYSBubyByZS1yZW5kZXJpemFyIGEgbG9zIGNvbnN1bWlkb3JlcyBkZWwgaG9va1xuICAgICAgLy8gZW4gY2FkYSBmcmFtZTsgZWwgdGV4dG8gZW4gdml2byB2aWFqYSBwb3IgZWwgc3RyZWFtaW5nU3RvcmUuXG4gICAgICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJlYW1TZXR0bGVkID0gZmFsc2VcbiAgICAgIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgICAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICAgICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkKSB7XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgICAgfVxuICAgICAgICB9LCAxNilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gICAgICAgIGlmICghcmVhZGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgICAgIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgICAgICAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICAgICAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICAgICAgICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgICAgICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkKSByZXR1cm5cbiAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuXG4gICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9XG4gICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgIGNvbnN0IHN1YmFnZW50UmF3ID0gcGF5bG9hZC5zdWJhZ2VudCBhcyBTdWJhZ2VudFJhd1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgIHNldERhdGEoZmluYWxDb250ZW50KVxuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICByZXNvbHZlZENvbnRleHRcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkICYmIGV2ZW50VHlwZSAhPT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gRWwgb3JjaGVzdHJhdG9yIGRlbGVnw7MgYSB1biBzdWJhZ2VudGU6IE5PIGxvIGV4cG9uZW1vcy4gTWFudGVuZW1vc1xuICAgICAgICAgICAgICAgICAgLy8gZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZCBnZW7DqXJpY28gZGUgTUFJQSwgc2luIGFudW5jaWFyIGxhXG4gICAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlcmVuY2lhIG5pIGVsIG5vbWJyZSBkZWwgc3ViYWdlbnRlLlxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubm9kZSA9PT0gJ2FnZW50X3RyYW5zZmVyJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gZGF0YS50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWwgYXBwcm92YWw6IGVsIFNTRSBzaWd1ZSBjb24gbm9kZS90b2tlbi9jb21wbGV0ZSAoeSBwdWVkZVxuICAgICAgICAgICAgICAgICAgLy8gZW5jYWRlbmFyIG3DoXMgYXBwcm92YWxfcmVxdWlyZWQpLiBTb2xvIGVsIGFwcHJvdmFsIFwicGF1c2Fkb1wiXG4gICAgICAgICAgICAgICAgICAvLyAoYm90w7NuKSBlcyB0ZXJtaW5hbCBwYXJhIGVzdGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWFudWFsQXBwcm92YWwgPSBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgaWYgKCFpc01hbnVhbEFwcHJvdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50Py4oZGF0YSwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgaWYgKGlzTWFudWFsQXBwcm92YWwgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucykgJiYgZGF0YS5wZW5kaW5nX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkocmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIGlmICghc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiwgdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgZmVlSWQsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHRhc2tJZCxcbiAgICB0YXNrTmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBmdWFJZCxcbiAgICBzY0lkLFxuICAgIGFnZW50RW50aXR5LFxuICAgIGFnZW50VHlwZSxcbiAgICBjb250ZXh0TWVzc2FnZSxcbiAgICBjb250ZXh0RGF0YSxcbiAgfToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgICBsYW5nOiBzdHJpbmdcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIGZpcnN0TmFtZT86IHN0cmluZ1xuICAgIGxhc3ROYW1lPzogc3RyaW5nXG4gICAgY29tcGFueUlkOiBzdHJpbmdcbiAgICBjaGF0SWQ6IHN0cmluZ1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgY2xpZW50SWQ/OiBudW1iZXJcbiAgICBjbGllbnROYW1lPzogc3RyaW5nXG4gICAgZmVlSWQ/OiBudW1iZXJcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIHRhc2tJZD86IG51bWJlclxuICAgIHRhc2tOYW1lPzogc3RyaW5nXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHlcbiAgICBhZ2VudFR5cGU/OiBBZ2VudFR5cGVcbiAgICBjb250ZXh0TWVzc2FnZT86IENvbnRleHRNZXNzYWdlXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgICBjb25zdCBpbml0aWFsQWN0aXZpdHkgPSBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwge1xuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50cz8ubGVuZ3RoKSxcbiAgICAgICAgYXR0YWNobWVudHNDb3VudDogYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgfSlcbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoaW5pdGlhbEFjdGl2aXR5KVxuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZSAvLyBSZXNldGVhciBmbGFnIGFsIGluaWNpYXIgbnVldmEgcGV0aWNpw7NuXG5cbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKFxuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQ6IG1lc3NhZ2UsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAuLi4oZmlyc3ROYW1lID8geyBmaXJzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4obGFzdE5hbWUgPyB7IGxhc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgY29tcGFueUlkLFxuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgLi4uKGZlZUlkICE9IG51bGwgPyB7IGZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgYWdlbnROYW1lLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIC4uLihwcm9qZWN0SWQgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocHJvamVjdE5hbWUgPyB7IHByb2plY3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudE5hbWUgPyB7IGNsaWVudE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza0lkICE9IG51bGwgPyB7IHRhc2tJZCB9IDoge30pLFxuICAgICAgICAgIC4uLih0YXNrTmFtZSA/IHsgdGFza05hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpIGZ1ZSB1biBhYm9ydCBpbnRlbmNpb25hbCAoc3RvcCBtYW51YWwgbyBjYW1iaW8gZGUgY2hhdCksIG5vIGRpc3BhcmFyIG9uRXJyb3JcbiAgICAgIC8vIHBvcnF1ZSBlc28gaW5zZXJ0YSB1biBcIm1lbnNhamUgZGUgZXJyb3JcIiBlbiBlbCBjaGF0IGFsIHF1ZSBhY2FiYW1vcyBkZSBuYXZlZ2FyLlxuICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIG9uU3RvcFJlZi5jdXJyZW50Py4oKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvKipcbiAgICogQWJvcnRhIGVsIHN0cmVhbSBlbiBjdXJzbyAoc2kgZXhpc3RlKSBzaW4gZGlzcGFyYXIgYG9uU3RvcGAuXG4gICAqIMOac2VsbyBlbiBjYXNvcyBkb25kZSBubyBxdWVyZW1vcyBhZ3JlZ2FyIGVsIG1lbnNhamUgZGUgXCJjYW5jZWxhZG9cIlxuICAgKiAocG9yIGVqZW1wbG8sIGFsIGNhbWJpYXIgZGUgY2hhdCkuXG4gICAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgfVxuICB9LCBbY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdKVxuXG4gIC8vIENsZWFudXAgYWwgZGVzbW9udGFyOiBzaSBxdWVkYSB1biBzdHJlYW0gYWN0aXZvLCBhYm9ydGFybG8gcGFyYSBldml0YXJcbiAgLy8gcXVlIGludGVudGUgYWN0dWFsaXphciBlc3RhZG8gZW4gdW4gY29tcG9uZW50ZSB5YSBkZXNtb250YWRvIChmdWdhcyBkZVxuICAvLyBtZW1vcmlhIHkgd2FybmluZ3MpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGwpID0+IHtcbiAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdXG4gIClcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBzZXREYXRhKG51bGwpXG4gICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseSxcbiAgICBoYW5kbGVTU0VTdHJlYW0sIC8vIEV4cG9uZXIgcGFyYSBwb2RlciB1c2FybG8gZW4gY29udGludWUtdGhyZWFkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFLdEMsU0FBU0MsUUFBUSxRQUFRLHdCQUF3QjtBQUVqRCxTQUNFQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsK0JBQStCLEVBQy9CQyw0QkFBNEIsRUFDNUJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLFFBQzNCLG9DQUFvQztBQUMzQyxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBSXpGLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQVFBO0VBQUEsSUFQaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBTixJQUFBLENBQWxCTSxrQkFBa0I7SUFDbEJDLHVCQUF1QixHQUFBUCxJQUFBLENBQXZCTyx1QkFBdUI7RUFFdkIsSUFBQUMsZUFBQSxHQUFjdkIsY0FB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