@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
@@ -32,6 +32,9 @@ import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/
32
32
  import { getThinkingLoadingMessage, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
33
33
  import { streamingStore } from '../useStreamingMessage';
34
34
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
35
+ import { streamTimelineStore } from '../useStreamTimeline/streamTimelineStore';
36
+ import { appendContentToStreamTimeline, finalizeStreamTimeline } from '../../utils/streamTimeline';
37
+ import { streamDebugActivity, streamDebugApproval, streamDebugHitlContext, streamDebugLog, streamDebugLogHitlUiOverlap, streamDebugNode, streamDebugSse, streamDebugWarn } from '../../utils/streamDebugLog';
35
38
  var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
36
39
  var _options$attachments;
37
40
  if (Array.isArray(attachmentsOrOptions)) {
@@ -263,26 +266,42 @@ var processSSEStream = /*#__PURE__*/function () {
263
266
  data = parsed.data;
264
267
  var eventData = data;
265
268
  if (streamSettled && eventType !== 'error') return;
269
+ streamDebugSse('processSSEStream', eventType, _objectSpread(_objectSpread({
270
+ threadId: threadId,
271
+ accumulatedLength: accumulatedContent.length
272
+ }, eventType === 'node' ? {
273
+ node: eventData.node,
274
+ tool_name: eventData.tool_name,
275
+ messagePreview: typeof eventData.message === 'string' ? eventData.message.slice(0, 80) : undefined
276
+ } : {}), eventType === 'approval_required' ? {
277
+ manualApprovalDetected: eventData.manual_approval_detected === true,
278
+ pendingTools: Array.isArray(eventData.pending_actions) ? eventData.pending_actions.map(function (a) {
279
+ return a.tool_name;
280
+ }) : undefined
281
+ } : {}));
266
282
  if (eventType === 'thinking') {
267
283
  callbacks.onThinking();
268
284
  } else if (eventType === 'node') {
269
285
  if (eventData.message && typeof eventData.message === 'string') {
270
- callbacks.onNode({
286
+ var nodePayload = {
271
287
  node: typeof eventData.node === 'string' ? eventData.node : 'node',
272
288
  message: eventData.message,
273
289
  tool_name: typeof eventData.tool_name === 'string' ? eventData.tool_name : undefined,
274
290
  thread_id: typeof eventData.thread_id === 'string' ? eventData.thread_id : threadId
275
- }, threadId);
291
+ };
292
+ callbacks.onNode(nodePayload, threadId, accumulatedContent);
276
293
  }
277
294
  } else if (eventType === 'token') {
278
295
  ensureWritingStarted();
279
296
  var content = typeof eventData.content === 'string' ? eventData.content : '';
280
297
  accumulatedContent = mergeStreamChunk(accumulatedContent, content);
298
+ streamTimelineStore.replace(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedContent));
281
299
  callbacks.onToken(accumulatedContent);
282
300
  } else if (eventType === 'content') {
283
301
  ensureWritingStarted();
284
302
  var _content = typeof eventData.content === 'string' ? eventData.content : '';
285
303
  accumulatedContent = mergeStreamChunk(accumulatedContent, _content);
304
+ streamTimelineStore.replace(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedContent));
286
305
  callbacks.onToken(accumulatedContent);
287
306
  if (isCompleteLikeSsePayload(eventData)) {
288
307
  notifyComplete(eventData, _content || accumulatedContent);
@@ -295,6 +314,11 @@ var processSSEStream = /*#__PURE__*/function () {
295
314
  // Manual approval: el stream sigue (node/token/complete y más HITL).
296
315
  // Solo el approval pausado (botón) cierra el procesamiento de eventos.
297
316
  var isManualApproval = eventData.manual_approval_detected === true;
317
+ streamDebugApproval('chatManager', 'approval_required', eventData, {
318
+ threadId: threadId,
319
+ isManualApproval: isManualApproval,
320
+ willSettleStream: !isManualApproval
321
+ });
298
322
  if (!isManualApproval) {
299
323
  streamSettled = true;
300
324
  }
@@ -326,6 +350,11 @@ var processSSEStream = /*#__PURE__*/function () {
326
350
  var _eventData$agent_id;
327
351
  if (streamSettled) return;
328
352
  streamSettled = true;
353
+ streamDebugSse('processSSEStream', 'complete', {
354
+ threadId: threadId,
355
+ finalContentLength: finalContent.length
356
+ });
357
+ streamTimelineStore.replace(finalizeStreamTimeline(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), finalContent)));
329
358
  var sources = eventData.sources || null;
330
359
  var memorySessionId = eventData.memory_session_id || '';
331
360
  var attachments = Array.isArray(eventData.attachments) ? eventData.attachments : null;
@@ -534,49 +563,38 @@ export var useChatManager = function useChatManager(_ref3) {
534
563
  }));
535
564
  isProcessingRef.current = false;
536
565
  }, [addMessage, removeMessage, t]);
537
- var handleStreamUpdate = useCallback(function (content, sources, memorySessionId) {
538
- // Si el chat cambió mientras el stream estaba en vuelo, descartar el
539
- // token residual: no debe pintarse en el nuevo chat.
566
+ var handleStreamUpdate = useCallback(function (content, _sources, _memorySessionId) {
540
567
  if (activeStreamChatIdRef.current != null && activeStreamChatIdRef.current !== currentChatId.current) {
541
568
  return;
542
569
  }
543
570
  var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
544
-
545
- // Primera llamada de este stream: insertamos el placeholder en el
546
- // array de `messages` una única vez. Las llamadas subsiguientes ya no
547
- // tocan `messages`; el texto vive en el streamingStore (externo), por
548
- // lo que React no re-renderiza el árbol completo en cada token.
549
571
  if (streamingPlaceholderIdRef.current !== tempMessageId) {
550
572
  streamingPlaceholderIdRef.current = tempMessageId;
551
573
  activeStreamChatIdRef.current = currentChatId.current;
552
- streamingStore.start(tempMessageId);
553
- addMessage({
554
- id: tempMessageId,
555
- message: '',
556
- date: new Date(),
557
- user: {
558
- id: 'assistant',
559
- name: 'Assistant'
560
- },
561
- role: ChatHistoryRole.ASSISTANT,
562
- sources: sources,
563
- memorySessionId: memorySessionId
564
- });
565
574
  }
566
575
  streamingStore.setText(tempMessageId, content);
567
- }, [addMessage]);
576
+ }, []);
568
577
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
569
578
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
570
579
  var _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
571
- var tempMessageId, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, customEvent;
580
+ var tempMessageId, previousMessageForLog, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, customEvent;
572
581
  return _regeneratorRuntime.wrap(function (_context2) {
573
582
  while (1) switch (_context2.prev = _context2.next) {
574
583
  case 0:
575
584
  tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
585
+ previousMessageForLog = messagesRef.current.filter(function (m) {
586
+ return m.id !== tempMessageId;
587
+ }).at(-1);
576
588
  streamingStore.clear();
577
589
  streamingPlaceholderIdRef.current = null;
578
590
  activeStreamChatIdRef.current = null;
579
591
  hitlExecutionContextRef.current = null;
592
+ streamTimelineStore.clear();
593
+ streamDebugLog('chatManager', 'handleStreamFinish', {
594
+ contentLength: content.length,
595
+ hasApprovalInPreviousMessage: (previousMessageForLog === null || previousMessageForLog === void 0 ? void 0 : previousMessageForLog.approval) != null,
596
+ previousApprovalStatus: previousMessageForLog === null || previousMessageForLog === void 0 ? void 0 : previousMessageForLog.approvalStatus
597
+ });
580
598
  removeMessage(tempMessageId);
581
599
  attachments = normalizeAssistantAttachments(rawAttachments); // Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
582
600
  taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
@@ -799,6 +817,10 @@ export var useChatManager = function useChatManager(_ref3) {
799
817
  var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
800
818
  var _approval$pending_act;
801
819
  var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
820
+ streamDebugApproval('chatManager', 'handleApprovalRequired', approval, {
821
+ accumulatedContentLength: accumulatedContent.length,
822
+ isManualApproval: approval.manual_approval_detected === true
823
+ });
802
824
  streamingStore.clear();
803
825
  streamingPlaceholderIdRef.current = null;
804
826
  activeStreamChatIdRef.current = null;
@@ -813,6 +835,7 @@ export var useChatManager = function useChatManager(_ref3) {
813
835
  })
814
836
  };
815
837
  hitlExecutionContextRef.current = hitlContext;
838
+ streamDebugHitlContext('chatManager', 'handleApprovalRequired:context', hitlContext);
816
839
  if (approval.manual_approval_detected) {
817
840
  var _approval$pending_act2, _ref5, _tool_name, _tool_args;
818
841
  var firstAction = (_approval$pending_act2 = approval.pending_actions) === null || _approval$pending_act2 === void 0 ? void 0 : _approval$pending_act2[0];
@@ -824,9 +847,23 @@ export var useChatManager = function useChatManager(_ref3) {
824
847
  toolArgs: toolArgs
825
848
  };
826
849
  }
850
+ streamDebugLog('chatManager', 'handleApprovalRequired:manualEarlyReturn', {
851
+ toolName: toolName
852
+ });
827
853
  isProcessingRef.current = false;
828
854
  return;
829
855
  }
856
+ streamTimelineStore.clear();
857
+ streamDebugLog('chatManager', 'handleApprovalRequired:buttonApproval', {
858
+ messageId: hitlContext.messageId,
859
+ clearedTimeline: true
860
+ });
861
+ streamDebugLogHitlUiOverlap({
862
+ scope: 'chatManager',
863
+ source: 'approvalBox',
864
+ hitlContext: hitlContext,
865
+ uiSurfaces: ['approvalBox', 'streamTimeline']
866
+ });
830
867
 
831
868
  // Add a message with the approval request
832
869
  addMessage({
@@ -860,12 +897,14 @@ export var useChatManager = function useChatManager(_ref3) {
860
897
  stopStreaming = _useOrchestratorStrea.stopStreaming,
861
898
  abortStreamSilently = _useOrchestratorStrea.abortStreamSilently,
862
899
  handleStreamNodeEvent = _useOrchestratorStrea.handleStreamNodeEvent,
863
- handleStreamWritingStarted = _useOrchestratorStrea.handleStreamWritingStarted;
900
+ handleStreamWritingStarted = _useOrchestratorStrea.handleStreamWritingStarted,
901
+ beginStreamTimelineTurn = _useOrchestratorStrea.beginStreamTimelineTurn;
864
902
 
865
903
  // Mantenemos el setter más reciente en una ref para que pueda usarse desde
866
904
  // efectos definidos antes en el archivo (cambio de chat, reset, etc.).
867
905
  abortStreamSilentlyRef.current = abortStreamSilently;
868
906
  clearStreamUiRef.current = function () {
907
+ streamDebugLog('chatManager', 'clearStreamUi');
869
908
  updateStreamActivity(null);
870
909
  setActiveLoadings({});
871
910
  setIsContinuingStream(false);
@@ -924,16 +963,6 @@ export var useChatManager = function useChatManager(_ref3) {
924
963
  streamingPlaceholderId = "answer-".concat(currentMessageId.current, "-streaming");
925
964
  streamingPlaceholderIdRef.current = streamingPlaceholderId;
926
965
  activeStreamChatIdRef.current = currentChatId.current;
927
- addMessage({
928
- id: streamingPlaceholderId,
929
- message: '',
930
- date: new Date(),
931
- user: {
932
- id: 'assistant',
933
- name: (agent === null || agent === void 0 ? void 0 : agent.name) || 'Assistant'
934
- },
935
- role: ChatHistoryRole.ASSISTANT
936
- });
937
966
  finalMessage = message;
938
967
  if (message === t('qa.items.rentabilidad_proyecto')) {
939
968
  finalMessage = "FAQ: ".concat(t('qa.items.rentabilidad_proyecto'), " - Tipo de rentabilidad: ").concat(((_options$projectChang = options.projectChanged) === null || _options$projectChang === void 0 ? void 0 : _options$projectChang.incomeType) || ((_contextRef$current$p = contextRef.current.project) === null || _contextRef$current$p === void 0 ? void 0 : _contextRef$current$p.incomeType));
@@ -1101,6 +1130,11 @@ export var useChatManager = function useChatManager(_ref3) {
1101
1130
  console.error('No se encontró mensaje con approval para thread_ids:', threadIds);
1102
1131
  return _context5.abrupt("return");
1103
1132
  case 2:
1133
+ streamDebugLog('chatManager', 'handleApprovalDecision', {
1134
+ threadIds: threadIds,
1135
+ decision: decision,
1136
+ hasEditedActions: Boolean(editedActions === null || editedActions === void 0 ? void 0 : editedActions.length)
1137
+ });
1104
1138
  approval = messageWithApproval.approval;
1105
1139
  messageId = messageWithApproval.id;
1106
1140
  loadingKey = threadIds[0];
@@ -1112,7 +1146,18 @@ export var useChatManager = function useChatManager(_ref3) {
1112
1146
  threadIds: threadIds
1113
1147
  };
1114
1148
  hitlExecutionContextRef.current = hitlContext;
1115
- initialActivity = resolveInitialHitlStreamActivity(t, hitlContext); // Update message status immediately
1149
+ streamDebugHitlContext('chatManager', 'handleApprovalDecision:context', hitlContext);
1150
+ initialActivity = resolveInitialHitlStreamActivity(t, hitlContext);
1151
+ streamDebugActivity('chatManager', 'handleApprovalDecision:initialActivity', initialActivity);
1152
+ streamDebugLogHitlUiOverlap({
1153
+ scope: 'chatManager',
1154
+ source: 'initialActivity',
1155
+ activityMessage: initialActivity.message,
1156
+ hitlContext: hitlContext,
1157
+ uiSurfaces: ['streamActivity', 'approvalBox', 'streamTimeline']
1158
+ });
1159
+
1160
+ // Update message status immediately
1116
1161
  messagesRef.current = messagesRef.current.map(function (message) {
1117
1162
  if (message.id === messageId) {
1118
1163
  var newStatus = decision === 'approve' ? 'approved' : 'rejected';
@@ -1138,6 +1183,12 @@ export var useChatManager = function useChatManager(_ref3) {
1138
1183
  isProcessingRef.current = true;
1139
1184
  setIsContinuingStream(true);
1140
1185
  currentMessageId.current = uuidv4();
1186
+ beginStreamTimelineTurn("answer-".concat(currentMessageId.current, "-streaming"));
1187
+ streamDebugSse('continueThread', 'start', {
1188
+ threadIds: threadIds,
1189
+ decision: editedActions ? 'edit' : decision,
1190
+ turnId: "answer-".concat(currentMessageId.current, "-streaming")
1191
+ });
1141
1192
 
1142
1193
  // Add loading
1143
1194
  setActiveLoadings(function (prev) {
@@ -1182,23 +1233,39 @@ export var useChatManager = function useChatManager(_ref3) {
1182
1233
  onToken: function onToken(content) {
1183
1234
  handleStreamUpdate(content, null, '');
1184
1235
  },
1185
- onNode: function onNode(payload, currentThreadId) {
1236
+ onNode: function onNode(payload, currentThreadId, accumulatedText) {
1186
1237
  var _payload$thread_id;
1238
+ streamDebugNode('continueThread', payload, {
1239
+ currentThreadId: currentThreadId,
1240
+ accumulatedTextLength: accumulatedText.length
1241
+ });
1187
1242
  handleStreamNodeEvent(_objectSpread(_objectSpread({}, payload), {}, {
1188
1243
  thread_id: (_payload$thread_id = payload.thread_id) !== null && _payload$thread_id !== void 0 ? _payload$thread_id : currentThreadId
1189
- }));
1244
+ }), accumulatedText);
1190
1245
  var nodeActivity = resolveHitlNodeStreamActivity(payload.message, t, hitlExecutionContextRef.current, currentThreadId, {
1191
1246
  useResumingFallback: true
1192
1247
  });
1193
1248
  setActiveLoadings(function (prev) {
1194
1249
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, nodeActivity.message));
1195
1250
  });
1251
+ streamDebugLogHitlUiOverlap({
1252
+ scope: 'continueThread',
1253
+ source: 'node',
1254
+ nodePayload: payload,
1255
+ activityMessage: nodeActivity.message,
1256
+ hitlContext: hitlExecutionContextRef.current,
1257
+ uiSurfaces: ['streamActivity', 'activeLoadings', 'streamTimeline']
1258
+ });
1196
1259
  },
1197
1260
  onWritingStarted: function onWritingStarted() {
1198
1261
  handleStreamWritingStarted();
1199
1262
  },
1200
1263
  onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, attachments, suggestions, agentId) {
1201
1264
  streamSettled = true;
1265
+ streamDebugSse('continueThread', 'complete', {
1266
+ currentThreadId: currentThreadId,
1267
+ finalContentLength: finalContent.length
1268
+ });
1202
1269
  setIsContinuingStream(false);
1203
1270
  handleStreamFinish(finalContent, sources, memorySessionId, attachments, suggestions, agentId);
1204
1271
  updateStreamActivity(null);
@@ -1210,6 +1277,10 @@ export var useChatManager = function useChatManager(_ref3) {
1210
1277
  });
1211
1278
  },
1212
1279
  onApprovalRequired: function onApprovalRequired(approvalPayload, accumulatedContent, currentThreadId) {
1280
+ streamDebugApproval('continueThread', 'approval_required', approvalPayload, {
1281
+ currentThreadId: currentThreadId,
1282
+ accumulatedContentLength: accumulatedContent.length
1283
+ });
1213
1284
  // Approval pausado (botón): cierra este continue-thread.
1214
1285
  // Manual approval: el SSE sigue con node/token/complete (y más HITL).
1215
1286
  var isManualApproval = (approvalPayload === null || approvalPayload === void 0 ? void 0 : approvalPayload.manual_approval_detected) === true;
@@ -1228,6 +1299,9 @@ export var useChatManager = function useChatManager(_ref3) {
1228
1299
  },
1229
1300
  onError: function onError() {
1230
1301
  streamSettled = true;
1302
+ streamDebugSse('continueThread', 'error', {
1303
+ threadId: loadingKey
1304
+ });
1231
1305
  setIsContinuingStream(false);
1232
1306
  handleStreamError();
1233
1307
  }
@@ -1248,6 +1322,9 @@ export var useChatManager = function useChatManager(_ref3) {
1248
1322
  // Red de seguridad: si el stream cerró sin evento terminal, el indicador
1249
1323
  // (p. ej. "Escribiendo la respuesta") quedaría trabado. Lo limpiamos aquí.
1250
1324
  if (!streamSettled) {
1325
+ streamDebugWarn('continueThread', 'streamClosedWithoutTerminalEvent', {
1326
+ threadId: loadingKey
1327
+ });
1251
1328
  updateStreamActivity(null);
1252
1329
  hitlExecutionContextRef.current = null;
1253
1330
  setActiveLoadings(function (prev) {
@@ -1366,6 +1443,7 @@ export var useChatManager = function useChatManager(_ref3) {
1366
1443
  streamingPlaceholderIdRef.current = null;
1367
1444
  activeStreamChatIdRef.current = null;
1368
1445
  streamingStore.clear();
1446
+ streamTimelineStore.clear();
1369
1447
  setIsContinuingStream(false);
1370
1448
  }, []);
1371
1449
  var stopGeneration = useCallback(function () {
@@ -1396,4 +1474,4 @@ export var useChatManager = function useChatManager(_ref3) {
1396
1474
  isDisabled: waitingResponse || isContinuingStream || loadingMessages
1397
1475
  };
1398
1476
  };
1399
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlIiwicmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSIsInN0cmVhbWluZ1N0b3JlIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJyZXNvbHZlUHJvamVjdFRvUmVxdWVzdCIsImNoaXBzUHJvamVjdCIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwiY2hpcHNQcm9qZWN0SWQiLCJwcm9qZWN0SWQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlZCIsInJlc29sdmVDbGllbnRQYXlsb2FkIiwiY3R4Q2xpZW50IiwiY3R4UHJvamVjdCIsIl9jdHhQcm9qZWN0JGNsaWVudCIsImlkIiwiX29iamVjdFNwcmVhZCIsImNsaWVudElkIiwibmFtZSIsImNsaWVudE5hbWUiLCJjbGllbnQiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwibWltZVR5cGUiLCJtaW1lX3R5cGUiLCJmdWxsRmlsZU5hbWUiLCJpbmNsdWRlcyIsIm51bWVyaWNTaXplIiwic2l6ZSIsImZpbGUiLCJGaWxlIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsInBhcnNlU1NFTGluZSIsImxpbmUiLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJzdHJlYW1TZXR0bGVkIiwiaGFzU3RhcnRlZFdyaXRpbmciLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsIm5vdGlmeUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsImlzUmVhZGVyRG9uZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJldmVudERhdGEiLCJvblRoaW5raW5nIiwibWVzc2FnZSIsIm9uTm9kZSIsIm5vZGUiLCJ0aHJlYWRfaWQiLCJjb250ZW50Iiwib25Ub2tlbiIsImZpbmFsQ29udGVudCIsIl9jYWxsYmFja3Mkb25BcHByb3ZhbCIsImlzTWFudWFsQXBwcm92YWwiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiX2NhbGxiYWNrcyRvbldyaXRpbmdTIiwib25Xcml0aW5nU3RhcnRlZCIsIl9ldmVudERhdGEkYWdlbnRfaWQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIm9uQ29tcGxldGUiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMyIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMyRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJ0YXNrIiwic2V0VGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJsYXN0TWFudWFsQXBwcm92YWxSZWYiLCJoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJhYm9ydFN0cmVhbVNpbGVudGx5UmVmIiwiY2xlYXJTdHJlYW1VaVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0NvbnRpbnVpbmdTdHJlYW0iLCJzZXRJc0NvbnRpbnVpbmdTdHJlYW0iLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsImhhbmRsZVNjcm9sbCIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJjbGVhciIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInRlbXBNZXNzYWdlSWQiLCJpc0FjY2Vzc0RlbmllZCIsImlzUHJvbXB0VG9vTG9uZyIsInVzZWQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjQiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl93aW5kb3ckdGFza1BhbmVsIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2Iiwib3BlblRhc2tQYW5lbElkIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxXYXNUYXNrRWRpdCIsIm1hbnVhbFdhc1Rhc2tEZWxldGUiLCJob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIiwid2FzSG91cnNDaGFyZ2VBcHByb3ZlZCIsIm1hbnVhbEhvdXJzVG9vbCIsIndhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQiLCJ0b29scyIsIl9tYW51YWxBcHByb3ZhbCR0b29sQSIsIm1hbnVhbFBzZXVkb0FjdGlvbiIsImFmZmVjdGVkVGFza0lkcyIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImF0IiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsImFnZW50X3R5cGUiLCJhY3Rpb25fdHlwZSIsImRlY2lzaW9uIiwib3B0aW9uIiwiY3JlYXRlZF9hZ2VudF9pZCIsInVybCIsIm1zZyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQiLCJkZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkIiwidGFza1BhbmVsIiwidGFza0lkIiwic291cmNlIiwic2Vzc2lvbklkIiwidG9vbEFyZ3MiLCJyZWZldGNoVGFzayIsInRoZW4iLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiaGl0bENvbnRleHQiLCJtZXNzYWdlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJtZXNzYWdlVGV4dCIsInRocmVhZElkcyIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmNSIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiZmlyc3RBY3Rpb24iLCJfdXNlT3JjaGVzdHJhdG9yU3RyZWEiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdG9wIiwiYXNrTWFpYSIsIndhaXRpbmdSZXNwb25zZSIsImlzTG9hZGluZyIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInN0b3BTdHJlYW1pbmciLCJhYm9ydFN0cmVhbVNpbGVudGx5IiwiaGFuZGxlU3RyZWFtTm9kZUV2ZW50IiwiaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQiLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjYiLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50IiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwiZWZmZWN0aXZlTWVudGlvbnMiLCJjb250ZXh0TWVzc2FnZSIsInBheWxvYWRGdWFJZCIsInBheWxvYWRTY0lkIiwicGF5bG9hZENvbnRleHREYXRhIiwiZGlzcGxheU1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZCIsImZpbmFsTWVzc2FnZSIsIl9vcHRpb25zJHByb2plY3RDaGFuZyIsIl9jb250ZXh0UmVmJGN1cnJlbnQkcCIsImhpc3RvcnkiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4VGFzayIsInByb2plY3RUb1JlcXVlc3QiLCJwcm9qZWN0cyIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwiY29udGV4dERhdGEiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsImFnZW50TmFtZSIsImZlZUlkIiwicHJvamVjdE5hbWUiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNyIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxNSIsIl94MTYiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjgiLCJfY2FsbGVlNSIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImluaXRpYWxBY3Rpdml0eSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25faWQiLCJvayIsImFjdGl2aXR5IiwicGhhc2UiLCJwYXlsb2FkIiwiY3VycmVudFRocmVhZElkIiwiX3BheWxvYWQkdGhyZWFkX2lkIiwibm9kZUFjdGl2aXR5IiwidXNlUmVzdW1pbmdGYWxsYmFjayIsIm5ld0xvYWRpbmdzIiwiYXBwcm92YWxQYXlsb2FkIiwiZmluaXNoIiwiX3gxNyIsIl94MTgiLCJfeDE5IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYwIiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwiX2NvbnRleHQ2IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlLCBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCwgaXNIb3Vyc0NoYXJnZVRvb2wgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LCBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHksIFN0cmVhbU5vZGVFdmVudFBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7XG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbiAgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlU3RyZWFtaW5nTWVzc2FnZSdcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmNvbnN0IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0ID0gKFxuICBjaGlwc1Byb2plY3Q6IHsgcHJvamVjdElkPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBsYXN0TWVzc2FnZVByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNoaXBzUHJvamVjdElkID0gY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsXG4gIGlmIChjaGlwc1Byb2plY3RJZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShjaGlwc1Byb2plY3RJZCkpIHtcbiAgICByZXR1cm4gY2hpcHNQcm9qZWN0SWRcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgcmVzb2x2ZUNsaWVudFBheWxvYWQgPSAoXG4gIGN0eENsaWVudDogeyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3R4UHJvamVjdDogUHJvamVjdCB8IG51bGwgfCB1bmRlZmluZWRcbik6IHsgY2xpZW50SWQ/OiBudW1iZXI7IGNsaWVudE5hbWU/OiBzdHJpbmcgfSA9PiB7XG4gIGlmIChjdHhDbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IGN0eENsaWVudC5pZCwgLi4uKGN0eENsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhDbGllbnQubmFtZSB9IDoge30pIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBOdW1iZXIoY3R4UHJvamVjdC5jbGllbnRJZCkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudElkOiBjdHhQcm9qZWN0LmNsaWVudC5pZCxcbiAgICAgIC4uLihjdHhQcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhQcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSksXG4gICAgfVxuICB9XG4gIHJldHVybiB7fVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogRXh0cmFlIHRhc2tfaWRzIGRlIGxvcyB0b29sX2FyZ3MgZGUgcGVuZGluZ19hY3Rpb25zLCBjdWJyaWVuZG8gbGFzIGZvcm1hcyBjb211bmVzOlxuICogIC0gYHsgdGFza19pZCB9YCBvIGB7IGlkIH1gXG4gKiAgLSBgeyB0YXNrX2lkczogW10gfWBcbiAqICAtIGB7IHRhc2tzOiBbeyB0YXNrX2lkfGlkIH0sIC4uLl0gfWBcbiAqICDDmnRpbCBwYXJhIHRvb2xzIGRlIGVkaXQvYXNzaWduL2RlbGV0ZSBjdWFuZG8gbGEgcmVzcHVlc3RhIGRlbCBMTE0gbm8gaW5jbHV5ZSBVUkxzIC90YXNrcy8uLi4vZGV0YWlsLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25UaGlua2luZzogKCkgPT4gdm9pZFxuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Xcml0aW5nU3RhcnRlZD86ICgpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoXG4gICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBzdHJlYW1TZXR0bGVkID0gZmFsc2VcbiAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcblxuICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICBpZiAoaGFzU3RhcnRlZFdyaXRpbmcpIHJldHVyblxuICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgIGNhbGxiYWNrcy5vbldyaXRpbmdTdGFydGVkPy4oKVxuICB9XG5cbiAgY29uc3Qgbm90aWZ5Q29tcGxldGUgPSAoZXZlbnREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmluYWxDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoc3RyZWFtU2V0dGxlZCkgcmV0dXJuXG4gICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICBjb25zdCBzb3VyY2VzID0gZXZlbnREYXRhLnNvdXJjZXMgfHwgbnVsbFxuICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICA6IG51bGxcbiAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoc3RyZWFtU2V0dGxlZCAmJiBldmVudFR5cGUgIT09ICdlcnJvcicpIHJldHVyblxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgY2FsbGJhY2tzLm9uVGhpbmtpbmcoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZTogdHlwZW9mIGV2ZW50RGF0YS5ub2RlID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS5ub2RlIDogJ25vZGUnLFxuICAgICAgICAgICAgbWVzc2FnZTogZXZlbnREYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICB0b29sX25hbWU6IHR5cGVvZiBldmVudERhdGEudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS50b29sX25hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0aHJlYWRfaWQ6IHR5cGVvZiBldmVudERhdGEudGhyZWFkX2lkID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS50aHJlYWRfaWQgOiB0aHJlYWRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRocmVhZElkXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZiBldmVudERhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBldmVudERhdGEuY29udGVudCA6ICcnXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY29udGVudClcbiAgICAgIGNhbGxiYWNrcy5vblRva2VuKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mIGV2ZW50RGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS5jb250ZW50IDogJydcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjb250ZW50KVxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChldmVudERhdGEpKSB7XG4gICAgICAgIG5vdGlmeUNvbXBsZXRlKGV2ZW50RGF0YSwgY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgbm90aWZ5Q29tcGxldGUoZXZlbnREYXRhLCBmaW5hbENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCcpIHtcbiAgICAgIC8vIE1hbnVhbCBhcHByb3ZhbDogZWwgc3RyZWFtIHNpZ3VlIChub2RlL3Rva2VuL2NvbXBsZXRlIHkgbcOhcyBISVRMKS5cbiAgICAgIC8vIFNvbG8gZWwgYXBwcm92YWwgcGF1c2FkbyAoYm90w7NuKSBjaWVycmEgZWwgcHJvY2VzYW1pZW50byBkZSBldmVudG9zLlxuICAgICAgY29uc3QgaXNNYW51YWxBcHByb3ZhbCA9IGV2ZW50RGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWVcbiAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgbGV0IGlzUmVhZGVyRG9uZSA9IGZhbHNlXG5cbiAgd2hpbGUgKCFpc1JlYWRlckRvbmUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNSZWFkZXJEb25lID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKiogU2V0dGVyIGluZGlyZWN0byBwYXJhIGFib3J0YXIgZWwgc3RyZWFtIGFudGVzIGRlIHF1ZSBlbCBob29rIGRlXG4gICAqIG9ycXVlc3RhZG9yIGVzdMOpIGluaWNpYWxpemFkbyAoc2UgbGlua2VhIG3DoXMgYWJham8pLiAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5UmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG4gIGNvbnN0IFtpc0NvbnRpbnVpbmdTdHJlYW0sIHNldElzQ29udGludWluZ1N0cmVhbV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgLyoqIEV2aXRhIGNsb3N1cmVzIG9ic29sZXRhcyBjdWFuZG8gZWwgZm9vdGVyIGNvbnNlcnZhIHNlbmRNZXNzYWdlIGVudHJlIHJlbmRlcnMuICovXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoeyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9KVxuICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBTaSBoYXkgdW4gc3RyZWFtIGVuIGN1cnNvLCBhYm9ydGFybG8gc2lsZW5jaW9zYW1lbnRlIHBhcmEgcXVlIGxvc1xuICAgICAgLy8gdG9rZW5zIHJlc2lkdWFsZXMgbm8gc2UgZXNjcmliYW4gZW4gZWwgY2hhdCBudWV2by5cbiAgICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrLCBsb2FkTWVzc2FnZXNdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgIGNvbnN0IGlzUHJvbXB0VG9vTG9uZyA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBpc0FjY2Vzc0RlbmllZFxuICAgICAgICA/IHQoJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKVxuICAgICAgICA6IGlzUHJvbXB0VG9vTG9uZ1xuICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZT8ubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIC8vIENoaXAgXCJSZWludGVudGFyXCIgc29sbyBlbiBlbCBlcnJvciBnZW7DqXJpY28gKHAuIGVqLiA1MDApOyBubyBhcGxpY2EgYSBhY2Nlc3MgZGVuaWVkIG5pIHByb21wdCB0b28gbG9uZy5cbiAgICAgICAgLi4uKCFpc0FjY2Vzc0RlbmllZCAmJiAhaXNQcm9tcHRUb29Mb25nID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzKHJhd0F0dGFjaG1lbnRzKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJywgJ2Nsb25lX3Rhc2snXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2NyZWF0ZV9hZ2VudCcpXG4gICAgICBjb25zdCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgbGV0IGNyZWF0ZUFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkICYmXG4gICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmXG4gICAgICAgIChjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0ge1xuICAgICAgICAgIGFnZW50SWQ6IGNvbmZpZ3VyZWRBZ2VudElkIGFzIHN0cmluZyxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwge1xuICAgICAgICAgIGFnZW50X3R5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICAgIGFjdGlvbl90eXBlOiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdChwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgLi4uKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSA/IHsgY3JlYXRlZF9hZ2VudF9pZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzRWRpdEFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG5cbiAgICAgIGxldCBlZGl0QWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0VkaXRBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IGZyb21TdHJlYW0gPSBjb21wbGV0ZWRBZ2VudElkPy50cmltKClcbiAgICAgICAgY29uc3QgZnJvbUFyZ3MgPSBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRBZ2VudElkID0gZnJvbVN0cmVhbSB8fCBmcm9tQXJnc1xuICAgICAgICBpZiAocmVzb2x2ZWRBZ2VudElkKSB7XG4gICAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza0lkc0Zyb21VcmxzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwgPSBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICAgICAgd2FzVGFza0RlbGV0ZSAmJiB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID09PSAwICYmIHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQoY29udGVudClcbiAgICAgICAgICA6IFtdXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID1cbiAgICAgICAgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRhc2tJZHNGcm9tVXJsc1xuICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWxcbiAgICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGlvblRleHRcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJlxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuICAgICAgaWYgKHNob3VsZFN5bmNEYXNoYm9hcmQpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IHRhc2tJZHNGb3JEYXNoYm9hcmRcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IGNvbnRleHRQcm9qZWN0SWRSYXcgPyBwYXJzZUludChTdHJpbmcoY29udGV4dFByb2plY3RJZFJhdyksIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gY29udGV4dFByb2plY3RJZCAmJiByb3V0ZVByb2plY3RJZCAmJiBjb250ZXh0UHJvamVjdElkID09PSByb3V0ZVByb2plY3RJZFxuXG4gICAgICAgIGlmIChpc09uUHJvamVjdFJvdXRlKSB7XG4gICAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tEZWxldGUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5kZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVmZXRjaCBkZWwgdGFzayBwYW5lbCBzaSBlc3TDoSBhYmllcnRvIHkgbGEgdG9vbCBhcHJvYmFkYSBlZGl0w7MvYm9ycsOzIGVzYSB0YXJlYS5cbiAgICAgIC8vIEN1YnJlIGxvcyBkb3MgZmx1am9zIGRlIGFwcHJvdmFsOlxuICAgICAgLy8gICAxKSBBcHByb3ZhbCBwb3IgYm90w7NuIOKGkiBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc2AgKHbDrWEgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSlcbiAgICAgIC8vICAgMikgTWFudWFsIGFwcHJvdmFsICh1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIpIOKGkiBgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRgXG4gICAgICBjb25zdCBvcGVuVGFza1BhbmVsSWQgPSB3aW5kb3cudGFza1BhbmVsPy50YXNrSWRcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gbnVsbCAvLyBjb25zdW1pciB1bmEgc29sYSB2ZXpcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tFZGl0ID0gISFtYW51YWxBcHByb3ZhbCAmJiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMobWFudWFsQXBwcm92YWwudG9vbE5hbWUpXG4gICAgICBjb25zdCBtYW51YWxXYXNUYXNrRGVsZXRlID0gISFtYW51YWxBcHByb3ZhbCAmJiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcblxuICAgICAgLy8gU3luYyBQbGFubmVyOiBhdmlzYXIgY2FyZ2EgZGUgaG9yYXMgY29uZmlybWFkYSAoY3JlYXRlX2hvdXIgLyBjcmVhdGVfaG91cnMpLlxuICAgICAgY29uc3QgaG91cnNUb29sc0Zyb21BcHByb3ZhbCA9IHBlbmRpbmdBY3Rpb25zXG4gICAgICAgIC5tYXAoKGFjdGlvbjogUGVuZGluZ0FjdGlvbikgPT4gYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAgICAgLmZpbHRlcigodG9vbE5hbWUpOiB0b29sTmFtZSBpcyBzdHJpbmcgPT4gaXNIb3Vyc0NoYXJnZVRvb2wodG9vbE5hbWUpKVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG1hbnVhbEhvdXJzVG9vbCA9IG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCA9IGlzSG91cnNDaGFyZ2VUb29sKG1hbnVhbEhvdXJzVG9vbClcblxuICAgICAgaWYgKHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgfHwgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCB0b29scyA9IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPyBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIDogbWFudWFsSG91cnNUb29sID8gW21hbnVhbEhvdXJzVG9vbF0gOiBbXVxuICAgICAgICBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQoe1xuICAgICAgICAgIHNvdXJjZTogJ21haWEnLFxuICAgICAgICAgIHRvb2xzLFxuICAgICAgICAgIHNlc3Npb25JZDogbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCxcbiAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgLy8gTWFudGVuZW1vcyBlbCBzZXR0ZXIgbcOhcyByZWNpZW50ZSBlbiB1bmEgcmVmIHBhcmEgcXVlIHB1ZWRhIHVzYXJzZSBkZXNkZVxuICAvLyBlZmVjdG9zIGRlZmluaWRvcyBhbnRlcyBlbiBlbCBhcmNoaXZvIChjYW1iaW8gZGUgY2hhdCwgcmVzZXQsIGV0Yy4pLlxuICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQgPSBhYm9ydFN0cmVhbVNpbGVudGx5XG4gIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCA9ICgpID0+IHtcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgIHNldEFjdGl2ZUxvYWRpbmdzKHt9KVxuICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgLy8gTGFzIG1lbnRpb25zIHB1ZWRlbiB2ZW5pciB2w61hIDV0byBwYXLDoW1ldHJvIChjYWxsIHBvc2l0aW9uYWwgZGVzZGUgZWwgZm9vdGVyKVxuICAgICAgLy8gbyB2w61hIFNlbmRNZXNzYWdlT3B0aW9ucyAoY2FsbCBwcm9ncmFtw6F0aWNvKS4gRWwgcGFyw6FtZXRybyBleHBsw61jaXRvIGdhbmEuXG4gICAgICBjb25zdCBlZmZlY3RpdmVNZW50aW9ucyA9IG1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnNcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UoZWZmZWN0aXZlTWVudGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRnVhSWQgPSBmdWFJZCA/PyBvcHRpb25zLmZ1YUlkXG4gICAgICBjb25zdCBwYXlsb2FkU2NJZCA9IHNjSWQgPz8gb3B0aW9ucy5zY0lkXG4gICAgICBjb25zdCBwYXlsb2FkQ29udGV4dERhdGEgPSBvcHRpb25zLmNvbnRleHREYXRhXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkU2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZENvbnRleHREYXRhID8geyBjb250ZXh0RGF0YTogcGF5bG9hZENvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRhc2ssXG4gICAgICBjaGlwc1Byb2plY3QsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlV2l0aEFwcHJvdmFsLm1lc3NhZ2UsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHMsXG4gICAgICB9XG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcblxuICAgICAgY29uc3QgaW5pdGlhbEFjdGl2aXR5ID0gcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bENvbnRleHQpXG5cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0odHJ1ZSlcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogaW5pdGlhbEFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICB9KSlcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcblxuICAgICAgLy8gTWFyY2Egc2kgZWwgc3RyZWFtIGNlcnLDsyB2w61hIHVuIGV2ZW50byB0ZXJtaW5hbCAoY29tcGxldGUvYXBwcm92YWwvZXJyb3IpLlxuICAgICAgLy8gU2kgZWwgYmFja2VuZCBjaWVycmEgbGEgY29uZXhpw7NuIHNpbiBlbWl0aXJsbywgbGltcGlhbW9zIGVsIGluZGljYWRvciBlbiBlbFxuICAgICAgLy8gYGZpbmFsbHlgIHBhcmEgcXVlIG5vIHF1ZWRlIHRyYWJhZG8gZW4gXCJFc2NyaWJpZW5kbyBsYSByZXNwdWVzdGFcIi5cbiAgICAgIGxldCBzdHJlYW1TZXR0bGVkID0gZmFsc2VcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25UaGlua2luZzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5ID0ge1xuICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAocGF5bG9hZDogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCh7XG4gICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgIHRocmVhZF9pZDogcGF5bG9hZC50aHJlYWRfaWQgPz8gY3VycmVudFRocmVhZElkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBY3Rpdml0eSA9IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICBwYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZCxcbiAgICAgICAgICAgICAgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IG5vZGVBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbldyaXRpbmdTdGFydGVkOiAoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIGF0dGFjaG1lbnRzLCBzdWdnZXN0aW9ucywgYWdlbnRJZClcbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gQXBwcm92YWwgcGF1c2FkbyAoYm90w7NuKTogY2llcnJhIGVzdGUgY29udGludWUtdGhyZWFkLlxuICAgICAgICAgICAgLy8gTWFudWFsIGFwcHJvdmFsOiBlbCBTU0Ugc2lndWUgY29uIG5vZGUvdG9rZW4vY29tcGxldGUgKHkgbcOhcyBISVRMKS5cbiAgICAgICAgICAgIGNvbnN0IGlzTWFudWFsQXBwcm92YWwgPSBhcHByb3ZhbFBheWxvYWQ/Lm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgaWYgKCFpc01hbnVhbEFwcHJvdmFsKSB7XG4gICAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIC8vIFJlZCBkZSBzZWd1cmlkYWQ6IHNpIGVsIHN0cmVhbSBjZXJyw7Mgc2luIGV2ZW50byB0ZXJtaW5hbCwgZWwgaW5kaWNhZG9yXG4gICAgICAgIC8vIChwLiBlai4gXCJFc2NyaWJpZW5kbyBsYSByZXNwdWVzdGFcIikgcXVlZGFyw61hIHRyYWJhZG8uIExvIGxpbXBpYW1vcyBhcXXDrS5cbiAgICAgICAgaWYgKCFzdHJlYW1TZXR0bGVkKSB7XG4gICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgaWYgKCEobG9hZGluZ0tleSBpbiBwcmV2KSkgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRnVhID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsU2MgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEgJiYgIWhhc0luaXRpYWxGdWEgJiYgIWhhc0luaXRpYWxTYykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBudWxsKSA/PyBjdHhQcm9qZWN0Py5pZCA/PyBudWxsXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBjdHhQcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgPyB7IGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkID8geyBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2U6IHdhaXRpbmdSZXNwb25zZSB8fCBpc0NvbnRpbnVpbmdTdHJlYW0sXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBpc0NvbnRpbnVpbmdTdHJlYW0gfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1B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
1477
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlIiwicmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSIsInN0cmVhbWluZ1N0b3JlIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInN0cmVhbVRpbWVsaW5lU3RvcmUiLCJhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZSIsImZpbmFsaXplU3RyZWFtVGltZWxpbmUiLCJzdHJlYW1EZWJ1Z0FjdGl2aXR5Iiwic3RyZWFtRGVidWdBcHByb3ZhbCIsInN0cmVhbURlYnVnSGl0bENvbnRleHQiLCJzdHJlYW1EZWJ1Z0xvZyIsInN0cmVhbURlYnVnTG9nSGl0bFVpT3ZlcmxhcCIsInN0cmVhbURlYnVnTm9kZSIsInN0cmVhbURlYnVnU3NlIiwic3RyZWFtRGVidWdXYXJuIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwiY2hpcHNQcm9qZWN0IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJjaGlwc1Byb2plY3RJZCIsInByb2plY3RJZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VkIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJjdHhDbGllbnQiLCJjdHhQcm9qZWN0IiwiX2N0eFByb2plY3QkY2xpZW50IiwiaWQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiZmlsZSIsIkZpbGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJwdXNoSWQiLCJyYXciLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJpc05hTiIsInB1c2giLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3JlYyR0YXNrX2lkIiwiYXJncyIsInRvb2xfYXJncyIsInJlYyIsInRhc2tfaWQiLCJ0YXNrX2lkcyIsInRhc2tzIiwidCIsIl90cmVjJHRhc2tfaWQiLCJ0cmVjIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQyIiwibGlzdCIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsInN0cmVhbVNldHRsZWQiLCJoYXNTdGFydGVkV3JpdGluZyIsImVuc3VyZVdyaXRpbmdTdGFydGVkIiwibm90aWZ5Q29tcGxldGUiLCJoYW5kbGVMaW5lIiwiaXNSZWFkZXJEb25lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsImV2ZW50RGF0YSIsImFjY3VtdWxhdGVkTGVuZ3RoIiwibGVuZ3RoIiwibm9kZSIsIm1lc3NhZ2VQcmV2aWV3IiwibWVzc2FnZSIsInNsaWNlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdUb29scyIsInBlbmRpbmdfYWN0aW9ucyIsIm9uVGhpbmtpbmciLCJub2RlUGF5bG9hZCIsInRocmVhZF9pZCIsIm9uTm9kZSIsImNvbnRlbnQiLCJnZXRTbmFwc2hvdCIsIm9uVG9rZW4iLCJmaW5hbENvbnRlbnQiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc01hbnVhbEFwcHJvdmFsIiwid2lsbFNldHRsZVN0cmVhbSIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImNhbGwiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uV3JpdGluZ1MiLCJvbldyaXRpbmdTdGFydGVkIiwiX2V2ZW50RGF0YSRhZ2VudF9pZCIsImZpbmFsQ29udGVudExlbmd0aCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwib25Db21wbGV0ZSIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImFib3J0U3RyZWFtU2lsZW50bHlSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzQ29udGludWluZ1N0cmVhbSIsInNldElzQ29udGludWluZ1N0cmVhbSIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiY29udGV4dFJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImNsZWFyIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJlcnJvclJhd01lc3NhZ2UiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMyIiwidGVtcE1lc3NhZ2VJZCIsImlzQWNjZXNzRGVuaWVkIiwiaXNQcm9tcHRUb29Mb25nIiwidXNlZCIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJfc291cmNlcyIsIl9tZW1vcnlTZXNzaW9uSWQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjQiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl93aW5kb3ckdGFza1BhbmVsIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJwcmV2aW91c01lc3NhZ2VGb3JMb2ciLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2Iiwib3BlblRhc2tQYW5lbElkIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxXYXNUYXNrRWRpdCIsIm1hbnVhbFdhc1Rhc2tEZWxldGUiLCJob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIiwid2FzSG91cnNDaGFyZ2VBcHByb3ZlZCIsIm1hbnVhbEhvdXJzVG9vbCIsIndhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQiLCJ0b29scyIsIl9tYW51YWxBcHByb3ZhbCR0b29sQSIsIm1hbnVhbFBzZXVkb0FjdGlvbiIsImFmZmVjdGVkVGFza0lkcyIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9jb250ZXh0MiIsIm0iLCJhdCIsImNvbnRlbnRMZW5ndGgiLCJhcHByb3ZhbCIsInByZXZpb3VzQXBwcm92YWxTdGF0dXMiLCJhcHByb3ZhbFN0YXR1cyIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwic29tZSIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibXNnIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJzb3VyY2UiLCJzZXNzaW9uSWQiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsImhhbmRsZVN0cmVhbVN0b3AiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwic2V0VGltZW91dCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJhY2N1bXVsYXRlZENvbnRlbnRMZW5ndGgiLCJoaXRsQ29udGV4dCIsIm1lc3NhZ2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwidGhyZWFkSWRzIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIl9yZWY1IiwiX3Rvb2xfbmFtZSIsIl90b29sX2FyZ3MiLCJmaXJzdEFjdGlvbiIsImNsZWFyZWRUaW1lbGluZSIsInNjb3BlIiwidWlTdXJmYWNlcyIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImFib3J0U3RyZWFtU2lsZW50bHkiLCJoYW5kbGVTdHJlYW1Ob2RlRXZlbnQiLCJoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCIsImJlZ2luU3RyZWFtVGltZWxpbmVUdXJuIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY2IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsImVmZmVjdGl2ZU1lbnRpb25zIiwiY29udGV4dE1lc3NhZ2UiLCJwYXlsb2FkRnVhSWQiLCJwYXlsb2FkU2NJZCIsInBheWxvYWRDb250ZXh0RGF0YSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwiX2NvbnRleHRSZWYkY3VycmVudCIsImN0eENoaXBzUHJvamVjdCIsImN0eFRhc2siLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MyIsImNvbnRleHREYXRhIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJhZ2VudE5hbWUiLCJmZWVJZCIsInByb2plY3ROYW1lIiwidGFza05hbWUiLCJlbnRpdHkiLCJhZ2VudEVudGl0eSIsImFnZW50VHlwZSIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiY2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjciLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTUiLCJfeDE2IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY4IiwiX2NhbGxlZTUiLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJpbml0aWFsQWN0aXZpdHkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwiaGFzRWRpdGVkQWN0aW9ucyIsIkJvb2xlYW4iLCJhY3Rpdml0eU1lc3NhZ2UiLCJ0dXJuSWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25faWQiLCJvayIsImFjdGl2aXR5IiwicGhhc2UiLCJwYXlsb2FkIiwiY3VycmVudFRocmVhZElkIiwiYWNjdW11bGF0ZWRUZXh0IiwiX3BheWxvYWQkdGhyZWFkX2lkIiwiYWNjdW11bGF0ZWRUZXh0TGVuZ3RoIiwibm9kZUFjdGl2aXR5IiwidXNlUmVzdW1pbmdGYWxsYmFjayIsIm5ld0xvYWRpbmdzIiwiYXBwcm92YWxQYXlsb2FkIiwiZmluaXNoIiwiX3gxNyIsIl94MTgiLCJfeDE5IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYwIiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwiX2NvbnRleHQ2IiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkLCBpc0hvdXJzQ2hhcmdlVG9vbCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHsgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHtcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxuICB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc3RyZWFtaW5nU3RvcmUgfSBmcm9tICcuLi91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7IHN0cmVhbVRpbWVsaW5lU3RvcmUgfSBmcm9tICcuLi91c2VTdHJlYW1UaW1lbGluZS9zdHJlYW1UaW1lbGluZVN0b3JlJ1xuaW1wb3J0IHsgYXBwZW5kQ29udGVudFRvU3RyZWFtVGltZWxpbmUsIGZpbmFsaXplU3RyZWFtVGltZWxpbmUgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1UaW1lbGluZSdcbmltcG9ydCB7XG4gIHN0cmVhbURlYnVnQWN0aXZpdHksXG4gIHN0cmVhbURlYnVnQXBwcm92YWwsXG4gIHN0cmVhbURlYnVnSGl0bENvbnRleHQsXG4gIHN0cmVhbURlYnVnTG9nLFxuICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAsXG4gIHN0cmVhbURlYnVnTm9kZSxcbiAgc3RyZWFtRGVidWdTc2UsXG4gIHN0cmVhbURlYnVnV2Fybixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtRGVidWdMb2cnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmNvbnN0IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0ID0gKFxuICBjaGlwc1Byb2plY3Q6IHsgcHJvamVjdElkPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBsYXN0TWVzc2FnZVByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNoaXBzUHJvamVjdElkID0gY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsXG4gIGlmIChjaGlwc1Byb2plY3RJZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShjaGlwc1Byb2plY3RJZCkpIHtcbiAgICByZXR1cm4gY2hpcHNQcm9qZWN0SWRcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgcmVzb2x2ZUNsaWVudFBheWxvYWQgPSAoXG4gIGN0eENsaWVudDogeyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3R4UHJvamVjdDogUHJvamVjdCB8IG51bGwgfCB1bmRlZmluZWRcbik6IHsgY2xpZW50SWQ/OiBudW1iZXI7IGNsaWVudE5hbWU/OiBzdHJpbmcgfSA9PiB7XG4gIGlmIChjdHhDbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IGN0eENsaWVudC5pZCwgLi4uKGN0eENsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhDbGllbnQubmFtZSB9IDoge30pIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBOdW1iZXIoY3R4UHJvamVjdC5jbGllbnRJZCkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudElkOiBjdHhQcm9qZWN0LmNsaWVudC5pZCxcbiAgICAgIC4uLihjdHhQcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhQcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSksXG4gICAgfVxuICB9XG4gIHJldHVybiB7fVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogRXh0cmFlIHRhc2tfaWRzIGRlIGxvcyB0b29sX2FyZ3MgZGUgcGVuZGluZ19hY3Rpb25zLCBjdWJyaWVuZG8gbGFzIGZvcm1hcyBjb211bmVzOlxuICogIC0gYHsgdGFza19pZCB9YCBvIGB7IGlkIH1gXG4gKiAgLSBgeyB0YXNrX2lkczogW10gfWBcbiAqICAtIGB7IHRhc2tzOiBbeyB0YXNrX2lkfGlkIH0sIC4uLl0gfWBcbiAqICDDmnRpbCBwYXJhIHRvb2xzIGRlIGVkaXQvYXNzaWduL2RlbGV0ZSBjdWFuZG8gbGEgcmVzcHVlc3RhIGRlbCBMTE0gbm8gaW5jbHV5ZSBVUkxzIC90YXNrcy8uLi4vZGV0YWlsLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25UaGlua2luZzogKCkgPT4gdm9pZFxuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLCB0aHJlYWRJZDogc3RyaW5nLCBhY2N1bXVsYXRlZFRleHQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uV3JpdGluZ1N0YXJ0ZWQ/OiAoKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB2b2lkXG4gICAgb25FcnJvcjogKGVycm9yOiBhbnksIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgc3RyZWFtU2V0dGxlZCA9IGZhbHNlXG4gIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICBjYWxsYmFja3Mub25Xcml0aW5nU3RhcnRlZD8uKClcbiAgfVxuXG4gIGNvbnN0IG5vdGlmeUNvbXBsZXRlID0gKGV2ZW50RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpbmFsQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHN0cmVhbVNldHRsZWQpIHJldHVyblxuICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgc3RyZWFtRGVidWdTc2UoJ3Byb2Nlc3NTU0VTdHJlYW0nLCAnY29tcGxldGUnLCB7XG4gICAgICB0aHJlYWRJZCxcbiAgICAgIGZpbmFsQ29udGVudExlbmd0aDogZmluYWxDb250ZW50Lmxlbmd0aCxcbiAgICB9KVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShcbiAgICAgIGZpbmFsaXplU3RyZWFtVGltZWxpbmUoYXBwZW5kQ29udGVudFRvU3RyZWFtVGltZWxpbmUoc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpLCBmaW5hbENvbnRlbnQpKVxuICAgIClcbiAgICBjb25zdCBzb3VyY2VzID0gZXZlbnREYXRhLnNvdXJjZXMgfHwgbnVsbFxuICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICA6IG51bGxcbiAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoc3RyZWFtU2V0dGxlZCAmJiBldmVudFR5cGUgIT09ICdlcnJvcicpIHJldHVyblxuXG4gICAgc3RyZWFtRGVidWdTc2UoJ3Byb2Nlc3NTU0VTdHJlYW0nLCBldmVudFR5cGUsIHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgYWNjdW11bGF0ZWRMZW5ndGg6IGFjY3VtdWxhdGVkQ29udGVudC5sZW5ndGgsXG4gICAgICAuLi4oZXZlbnRUeXBlID09PSAnbm9kZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBub2RlOiBldmVudERhdGEubm9kZSxcbiAgICAgICAgICAgIHRvb2xfbmFtZTogZXZlbnREYXRhLnRvb2xfbmFtZSxcbiAgICAgICAgICAgIG1lc3NhZ2VQcmV2aWV3OiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gZXZlbnREYXRhLm1lc3NhZ2Uuc2xpY2UoMCwgODApIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZDogZXZlbnREYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdUb29sczogQXJyYXkuaXNBcnJheShldmVudERhdGEucGVuZGluZ19hY3Rpb25zKVxuICAgICAgICAgICAgICA/IChldmVudERhdGEucGVuZGluZ19hY3Rpb25zIGFzIEFycmF5PHsgdG9vbF9uYW1lPzogc3RyaW5nIH0+KS5tYXAoYSA9PiBhLnRvb2xfbmFtZSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KVxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgY2FsbGJhY2tzLm9uVGhpbmtpbmcoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IG5vZGVQYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkID0ge1xuICAgICAgICAgIG5vZGU6IHR5cGVvZiBldmVudERhdGEubm9kZSA9PT0gJ3N0cmluZycgPyBldmVudERhdGEubm9kZSA6ICdub2RlJyxcbiAgICAgICAgICBtZXNzYWdlOiBldmVudERhdGEubWVzc2FnZSxcbiAgICAgICAgICB0b29sX25hbWU6IHR5cGVvZiBldmVudERhdGEudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS50b29sX25hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdGhyZWFkX2lkOiB0eXBlb2YgZXZlbnREYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBldmVudERhdGEudGhyZWFkX2lkIDogdGhyZWFkSWQsXG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShub2RlUGF5bG9hZCwgdGhyZWFkSWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZiBldmVudERhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBldmVudERhdGEuY29udGVudCA6ICcnXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY29udGVudClcbiAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZShzdHJlYW1UaW1lbGluZVN0b3JlLmdldFNuYXBzaG90KCksIGFjY3VtdWxhdGVkQ29udGVudCkpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZiBldmVudERhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBldmVudERhdGEuY29udGVudCA6ICcnXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY29udGVudClcbiAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZShzdHJlYW1UaW1lbGluZVN0b3JlLmdldFNuYXBzaG90KCksIGFjY3VtdWxhdGVkQ29udGVudCkpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGV2ZW50RGF0YSkpIHtcbiAgICAgICAgbm90aWZ5Q29tcGxldGUoZXZlbnREYXRhLCBjb250ZW50IHx8IGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICBub3RpZnlDb21wbGV0ZShldmVudERhdGEsIGZpbmFsQ29udGVudClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgLy8gTWFudWFsIGFwcHJvdmFsOiBlbCBzdHJlYW0gc2lndWUgKG5vZGUvdG9rZW4vY29tcGxldGUgeSBtw6FzIEhJVEwpLlxuICAgICAgLy8gU29sbyBlbCBhcHByb3ZhbCBwYXVzYWRvIChib3TDs24pIGNpZXJyYSBlbCBwcm9jZXNhbWllbnRvIGRlIGV2ZW50b3MuXG4gICAgICBjb25zdCBpc01hbnVhbEFwcHJvdmFsID0gZXZlbnREYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgc3RyZWFtRGVidWdBcHByb3ZhbCgnY2hhdE1hbmFnZXInLCAnYXBwcm92YWxfcmVxdWlyZWQnLCBldmVudERhdGEsIHtcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIGlzTWFudWFsQXBwcm92YWwsXG4gICAgICAgIHdpbGxTZXR0bGVTdHJlYW06ICFpc01hbnVhbEFwcHJvdmFsLFxuICAgICAgfSlcbiAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgbGV0IGlzUmVhZGVyRG9uZSA9IGZhbHNlXG5cbiAgd2hpbGUgKCFpc1JlYWRlckRvbmUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNSZWFkZXJEb25lID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKiogU2V0dGVyIGluZGlyZWN0byBwYXJhIGFib3J0YXIgZWwgc3RyZWFtIGFudGVzIGRlIHF1ZSBlbCBob29rIGRlXG4gICAqIG9ycXVlc3RhZG9yIGVzdMOpIGluaWNpYWxpemFkbyAoc2UgbGlua2VhIG3DoXMgYWJham8pLiAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5UmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG4gIGNvbnN0IFtpc0NvbnRpbnVpbmdTdHJlYW0sIHNldElzQ29udGludWluZ1N0cmVhbV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgLyoqIEV2aXRhIGNsb3N1cmVzIG9ic29sZXRhcyBjdWFuZG8gZWwgZm9vdGVyIGNvbnNlcnZhIHNlbmRNZXNzYWdlIGVudHJlIHJlbmRlcnMuICovXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoeyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9KVxuICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBTaSBoYXkgdW4gc3RyZWFtIGVuIGN1cnNvLCBhYm9ydGFybG8gc2lsZW5jaW9zYW1lbnRlIHBhcmEgcXVlIGxvc1xuICAgICAgLy8gdG9rZW5zIHJlc2lkdWFsZXMgbm8gc2UgZXNjcmliYW4gZW4gZWwgY2hhdCBudWV2by5cbiAgICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrLCBsb2FkTWVzc2FnZXNdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgIGNvbnN0IGlzUHJvbXB0VG9vTG9uZyA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBpc0FjY2Vzc0RlbmllZFxuICAgICAgICA/IHQoJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKVxuICAgICAgICA6IGlzUHJvbXB0VG9vTG9uZ1xuICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZT8ubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIC8vIENoaXAgXCJSZWludGVudGFyXCIgc29sbyBlbiBlbCBlcnJvciBnZW7DqXJpY28gKHAuIGVqLiA1MDApOyBubyBhcGxpY2EgYSBhY2Nlc3MgZGVuaWVkIG5pIHByb21wdCB0b28gbG9uZy5cbiAgICAgICAgLi4uKCFpc0FjY2Vzc0RlbmllZCAmJiAhaXNQcm9tcHRUb29Mb25nID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjaygoY29udGVudDogc3RyaW5nLCBfc291cmNlczogdW5rbm93biwgX21lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBpZiAoc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ICE9PSB0ZW1wTWVzc2FnZUlkKSB7XG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSB0ZW1wTWVzc2FnZUlkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIH1cblxuICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2VGb3JMb2cgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc3RyZWFtVGltZWxpbmVTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1EZWJ1Z0xvZygnY2hhdE1hbmFnZXInLCAnaGFuZGxlU3RyZWFtRmluaXNoJywge1xuICAgICAgICBjb250ZW50TGVuZ3RoOiBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZTogcHJldmlvdXNNZXNzYWdlRm9yTG9nPy5hcHByb3ZhbCAhPSBudWxsLFxuICAgICAgICBwcmV2aW91c0FwcHJvdmFsU3RhdHVzOiBwcmV2aW91c01lc3NhZ2VGb3JMb2c/LmFwcHJvdmFsU3RhdHVzLFxuICAgICAgfSlcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICAvLyBTeW5jIFBsYW5uZXI6IGF2aXNhciBjYXJnYSBkZSBob3JhcyBjb25maXJtYWRhIChjcmVhdGVfaG91ciAvIGNyZWF0ZV9ob3VycykuXG4gICAgICBjb25zdCBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsID0gcGVuZGluZ0FjdGlvbnNcbiAgICAgICAgLm1hcCgoYWN0aW9uOiBQZW5kaW5nQWN0aW9uKSA9PiBhY3Rpb24udG9vbF9uYW1lKVxuICAgICAgICAuZmlsdGVyKCh0b29sTmFtZSk6IHRvb2xOYW1lIGlzIHN0cmluZyA9PiBpc0hvdXJzQ2hhcmdlVG9vbCh0b29sTmFtZSkpXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIGhvdXJzVG9vbHNGcm9tQXBwcm92YWwubGVuZ3RoID4gMFxuICAgICAgY29uc3QgbWFudWFsSG91cnNUb29sID0gbWFudWFsQXBwcm92YWw/LnRvb2xOYW1lXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkID0gaXNIb3Vyc0NoYXJnZVRvb2wobWFudWFsSG91cnNUb29sKVxuXG4gICAgICBpZiAod2FzSG91cnNDaGFyZ2VBcHByb3ZlZCB8fCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IHRvb2xzID0gd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA/IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgOiBtYW51YWxIb3Vyc1Rvb2wgPyBbbWFudWFsSG91cnNUb29sXSA6IFtdXG4gICAgICAgIGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCh7XG4gICAgICAgICAgc291cmNlOiAnbWFpYScsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcGVuVGFza1BhbmVsSWQgJiYgKHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUgfHwgbWFudWFsV2FzVGFza0VkaXQgfHwgbWFudWFsV2FzVGFza0RlbGV0ZSkpIHtcbiAgICAgICAgY29uc3QgbWFudWFsUHNldWRvQWN0aW9uOiBQZW5kaW5nQWN0aW9uIHwgbnVsbCA9IG1hbnVhbEFwcHJvdmFsXG4gICAgICAgICAgPyAoeyB0b29sX25hbWU6IG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9IH0gYXMgUGVuZGluZ0FjdGlvbilcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRUYXNrSWRzID0gW1xuICAgICAgICAgIC4uLmV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgLi4udGFza0lkc0Zyb21VcmxzLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwsXG4gICAgICAgICAgLi4uKG1hbnVhbFBzZXVkb0FjdGlvbiA/IGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhbbWFudWFsUHNldWRvQWN0aW9uXSkgOiBbXSksXG4gICAgICAgIF0ubWFwKFN0cmluZylcbiAgICAgICAgaWYgKGFmZmVjdGVkVGFza0lkcy5pbmNsdWRlcyhTdHJpbmcob3BlblRhc2tQYW5lbElkKSkpIHtcbiAgICAgICAgICB3aW5kb3cudGFza1BhbmVsPy5yZWZldGNoVGFzaz8uKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtRGVidWdBcHByb3ZhbCgnY2hhdE1hbmFnZXInLCAnaGFuZGxlQXBwcm92YWxSZXF1aXJlZCcsIGFwcHJvdmFsLCB7XG4gICAgICAgIGFjY3VtdWxhdGVkQ29udGVudExlbmd0aDogYWNjdW11bGF0ZWRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgaXNNYW51YWxBcHByb3ZhbDogYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID09PSB0cnVlLFxuICAgICAgfSlcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgc3RyZWFtRGVidWdIaXRsQ29udGV4dCgnY2hhdE1hbmFnZXInLCAnaGFuZGxlQXBwcm92YWxSZXF1aXJlZDpjb250ZXh0JywgaGl0bENvbnRleHQpXG5cbiAgICAgIGlmIChhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RBY3Rpb24gPSBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/LlswXVxuICAgICAgICBjb25zdCB0b29sTmFtZSA9IChhcHByb3ZhbCBhcyB7IHRvb2xfbmFtZT86IHN0cmluZyB9KS50b29sX25hbWUgPz8gZmlyc3RBY3Rpb24/LnRvb2xfbmFtZSA/PyAnJ1xuICAgICAgICBjb25zdCB0b29sQXJncyA9XG4gICAgICAgICAgKChhcHByb3ZhbCBhcyB7IHRvb2xfYXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pLnRvb2xfYXJncyA/P1xuICAgICAgICAgICAgKGZpcnN0QWN0aW9uPy50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgaWYgKHRvb2xOYW1lKSB7XG4gICAgICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSB7IHRvb2xOYW1lLCB0b29sQXJncyB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtRGVidWdMb2coJ2NoYXRNYW5hZ2VyJywgJ2hhbmRsZUFwcHJvdmFsUmVxdWlyZWQ6bWFudWFsRWFybHlSZXR1cm4nLCB7IHRvb2xOYW1lIH0pXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtRGVidWdMb2coJ2NoYXRNYW5hZ2VyJywgJ2hhbmRsZUFwcHJvdmFsUmVxdWlyZWQ6YnV0dG9uQXBwcm92YWwnLCB7XG4gICAgICAgIG1lc3NhZ2VJZDogaGl0bENvbnRleHQubWVzc2FnZUlkLFxuICAgICAgICBjbGVhcmVkVGltZWxpbmU6IHRydWUsXG4gICAgICB9KVxuICAgICAgc3RyZWFtRGVidWdMb2dIaXRsVWlPdmVybGFwKHtcbiAgICAgICAgc2NvcGU6ICdjaGF0TWFuYWdlcicsXG4gICAgICAgIHNvdXJjZTogJ2FwcHJvdmFsQm94JyxcbiAgICAgICAgaGl0bENvbnRleHQsXG4gICAgICAgIHVpU3VyZmFjZXM6IFsnYXBwcm92YWxCb3gnLCAnc3RyZWFtVGltZWxpbmUnXSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCxcbiAgICBoYW5kbGVTdHJlYW1Xcml0aW5nU3RhcnRlZCxcbiAgICBiZWdpblN0cmVhbVRpbWVsaW5lVHVybixcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgLy8gTWFudGVuZW1vcyBlbCBzZXR0ZXIgbcOhcyByZWNpZW50ZSBlbiB1bmEgcmVmIHBhcmEgcXVlIHB1ZWRhIHVzYXJzZSBkZXNkZVxuICAvLyBlZmVjdG9zIGRlZmluaWRvcyBhbnRlcyBlbiBlbCBhcmNoaXZvIChjYW1iaW8gZGUgY2hhdCwgcmVzZXQsIGV0Yy4pLlxuICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQgPSBhYm9ydFN0cmVhbVNpbGVudGx5XG4gIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCA9ICgpID0+IHtcbiAgICBzdHJlYW1EZWJ1Z0xvZygnY2hhdE1hbmFnZXInLCAnY2xlYXJTdHJlYW1VaScpXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgcGF5bG9hZENvbnRleHREYXRhID0gb3B0aW9ucy5jb250ZXh0RGF0YVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZ1YUlkID8geyBmdWFJZDogcGF5bG9hZEZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkU2NJZCA/IHsgc2NJZDogcGF5bG9hZFNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRDb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBheWxvYWRDb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKG9wdGlvbj8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihvcHRpb24uZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbj8uY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihvcHRpb24uY2xpZW50SWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1EZWJ1Z0xvZygnY2hhdE1hbmFnZXInLCAnaGFuZGxlQXBwcm92YWxEZWNpc2lvbicsIHtcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgICBkZWNpc2lvbixcbiAgICAgICAgaGFzRWRpdGVkQWN0aW9uczogQm9vbGVhbihlZGl0ZWRBY3Rpb25zPy5sZW5ndGgpLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgc3RyZWFtRGVidWdIaXRsQ29udGV4dCgnY2hhdE1hbmFnZXInLCAnaGFuZGxlQXBwcm92YWxEZWNpc2lvbjpjb250ZXh0JywgaGl0bENvbnRleHQpXG5cbiAgICAgIGNvbnN0IGluaXRpYWxBY3Rpdml0eSA9IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxDb250ZXh0KVxuICAgICAgc3RyZWFtRGVidWdBY3Rpdml0eSgnY2hhdE1hbmFnZXInLCAnaGFuZGxlQXBwcm92YWxEZWNpc2lvbjppbml0aWFsQWN0aXZpdHknLCBpbml0aWFsQWN0aXZpdHkpXG4gICAgICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAoe1xuICAgICAgICBzY29wZTogJ2NoYXRNYW5hZ2VyJyxcbiAgICAgICAgc291cmNlOiAnaW5pdGlhbEFjdGl2aXR5JyxcbiAgICAgICAgYWN0aXZpdHlNZXNzYWdlOiBpbml0aWFsQWN0aXZpdHkubWVzc2FnZSxcbiAgICAgICAgaGl0bENvbnRleHQsXG4gICAgICAgIHVpU3VyZmFjZXM6IFsnc3RyZWFtQWN0aXZpdHknLCAnYXBwcm92YWxCb3gnLCAnc3RyZWFtVGltZWxpbmUnXSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0odHJ1ZSlcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBiZWdpblN0cmVhbVRpbWVsaW5lVHVybihgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgKVxuICAgICAgc3RyZWFtRGVidWdTc2UoJ2NvbnRpbnVlVGhyZWFkJywgJ3N0YXJ0Jywge1xuICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgIHR1cm5JZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogaW5pdGlhbEFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICB9KSlcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcblxuICAgICAgLy8gTWFyY2Egc2kgZWwgc3RyZWFtIGNlcnLDsyB2w61hIHVuIGV2ZW50byB0ZXJtaW5hbCAoY29tcGxldGUvYXBwcm92YWwvZXJyb3IpLlxuICAgICAgLy8gU2kgZWwgYmFja2VuZCBjaWVycmEgbGEgY29uZXhpw7NuIHNpbiBlbWl0aXJsbywgbGltcGlhbW9zIGVsIGluZGljYWRvciBlbiBlbFxuICAgICAgLy8gYGZpbmFsbHlgIHBhcmEgcXVlIG5vIHF1ZWRlIHRyYWJhZG8gZW4gXCJFc2NyaWJpZW5kbyBsYSByZXNwdWVzdGFcIi5cbiAgICAgIGxldCBzdHJlYW1TZXR0bGVkID0gZmFsc2VcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25UaGlua2luZzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5ID0ge1xuICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAocGF5bG9hZDogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCwgY3VycmVudFRocmVhZElkOiBzdHJpbmcsIGFjY3VtdWxhdGVkVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1EZWJ1Z05vZGUoJ2NvbnRpbnVlVGhyZWFkJywgcGF5bG9hZCwge1xuICAgICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkVGV4dExlbmd0aDogYWNjdW11bGF0ZWRUZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1Ob2RlRXZlbnQoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIHRocmVhZF9pZDogcGF5bG9hZC50aHJlYWRfaWQgPz8gY3VycmVudFRocmVhZElkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZFRleHRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBY3Rpdml0eSA9IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICBwYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZCxcbiAgICAgICAgICAgICAgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IG5vZGVBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAoe1xuICAgICAgICAgICAgICBzY29wZTogJ2NvbnRpbnVlVGhyZWFkJyxcbiAgICAgICAgICAgICAgc291cmNlOiAnbm9kZScsXG4gICAgICAgICAgICAgIG5vZGVQYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgICBhY3Rpdml0eU1lc3NhZ2U6IG5vZGVBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgICAgICAgICBoaXRsQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgdWlTdXJmYWNlczogWydzdHJlYW1BY3Rpdml0eScsICdhY3RpdmVMb2FkaW5ncycsICdzdHJlYW1UaW1lbGluZSddLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uV3JpdGluZ1N0YXJ0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgICAgIHN0cmVhbURlYnVnU3NlKCdjb250aW51ZVRocmVhZCcsICdjb21wbGV0ZScsIHtcbiAgICAgICAgICAgICAgY3VycmVudFRocmVhZElkLFxuICAgICAgICAgICAgICBmaW5hbENvbnRlbnRMZW5ndGg6IGZpbmFsQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbURlYnVnQXBwcm92YWwoJ2NvbnRpbnVlVGhyZWFkJywgJ2FwcHJvdmFsX3JlcXVpcmVkJywgYXBwcm92YWxQYXlsb2FkLCB7XG4gICAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZCxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50TGVuZ3RoOiBhY2N1bXVsYXRlZENvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIEFwcHJvdmFsIHBhdXNhZG8gKGJvdMOzbik6IGNpZXJyYSBlc3RlIGNvbnRpbnVlLXRocmVhZC5cbiAgICAgICAgICAgIC8vIE1hbnVhbCBhcHByb3ZhbDogZWwgU1NFIHNpZ3VlIGNvbiBub2RlL3Rva2VuL2NvbXBsZXRlICh5IG3DoXMgSElUTCkuXG4gICAgICAgICAgICBjb25zdCBpc01hbnVhbEFwcHJvdmFsID0gYXBwcm92YWxQYXlsb2FkPy5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWVcbiAgICAgICAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgc3RyZWFtRGVidWdTc2UoJ2NvbnRpbnVlVGhyZWFkJywgJ2Vycm9yJywgeyB0aHJlYWRJZDogbG9hZGluZ0tleSB9KVxuICAgICAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAvLyBSZWQgZGUgc2VndXJpZGFkOiBzaSBlbCBzdHJlYW0gY2VycsOzIHNpbiBldmVudG8gdGVybWluYWwsIGVsIGluZGljYWRvclxuICAgICAgICAvLyAocC4gZWouIFwiRXNjcmliaWVuZG8gbGEgcmVzcHVlc3RhXCIpIHF1ZWRhcsOtYSB0cmFiYWRvLiBMbyBsaW1waWFtb3MgYXF1w60uXG4gICAgICAgIGlmICghc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgIHN0cmVhbURlYnVnV2FybignY29udGludWVUaHJlYWQnLCAnc3RyZWFtQ2xvc2VkV2l0aG91dFRlcm1pbmFsRXZlbnQnLCB7IHRocmVhZElkOiBsb2FkaW5nS2V5IH0pXG4gICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgaWYgKCEobG9hZGluZ0tleSBpbiBwcmV2KSkgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRnVhID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsU2MgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEgJiYgIWhhc0luaXRpYWxGdWEgJiYgIWhhc0luaXRpYWxTYykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBudWxsKSA/PyBjdHhQcm9qZWN0Py5pZCA/PyBudWxsXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBjdHhQcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgPyB7IGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkID8geyBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUuY2xlYXIoKVxuICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2U6IHdhaXRpbmdSZXNwb25zZSB8fCBpc0NvbnRpbnVpbmdTdHJlYW0sXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBpc0NvbnRpbnVpbmdTdHJlYW0gfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF3QyxrQkFBa0I7QUFDaEgsU0FBeUNDLG1CQUFtQixRQUFRLDRCQUE0QjtBQUNoRyxTQUFTQyxrQ0FBa0MsUUFBUSxzQ0FBc0M7QUFHekYsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxz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