@projectcor/maia-components 2.34.3-2 → 2.35.1

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 (79) hide show
  1. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  2. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  3. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  6. package/lib/components/atoms/MAIAInput/MAIAInput.js +21 -193
  7. package/lib/components/atoms/MAIAInput/styles.js +43 -40
  8. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  9. package/lib/components/atoms/icons/index.js +1 -5
  10. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +14 -23
  12. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +20 -59
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +11 -2
  15. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +5 -10
  16. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  17. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +239 -315
  18. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +104 -131
  19. package/lib/components/molecules/ChatFooter/ChatFooter.js +46 -34
  20. package/lib/components/molecules/ChatFooter/styles.js +12 -6
  21. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  22. package/lib/components/molecules/Sidebar/Sidebar.js +4 -5
  23. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  24. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +26 -0
  25. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +24 -0
  26. package/lib/components/molecules/UsageBlockedBanner/index.js +2 -0
  27. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +1 -8
  28. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +182 -369
  29. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +66 -126
  30. package/lib/components/organisms/ChatAI/ChatAI.js +6 -1
  31. package/lib/constants/config.js +4 -1
  32. package/lib/constants/formatExtensions.js +7 -8
  33. package/lib/constants/permissions/utils.js +3 -3
  34. package/lib/dev/DevReasoningTimeline.js +8 -50
  35. package/lib/hooks/useChatManager/useChatManager.js +23 -30
  36. package/lib/hooks/useContextMentions.js +56 -96
  37. package/lib/hooks/useEntitySearch.js +278 -92
  38. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  39. package/lib/hooks/useMentionPopover.js +33 -9
  40. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  41. package/lib/lang/br/index.js +12 -41
  42. package/lib/lang/en/index.js +12 -41
  43. package/lib/lang/es/index.js +13 -42
  44. package/lib/lang/fr/index.js +13 -42
  45. package/lib/services/maia/Skills/createSkill.js +1 -1
  46. package/lib/services/maia/Skills/getSkills.js +40 -70
  47. package/lib/services/maia/Skills/updateSkill.js +1 -1
  48. package/lib/services/maia/Usage/getUsage.js +45 -0
  49. package/lib/services/maia/Usage/index.js +6 -0
  50. package/lib/services/maia/index.js +4 -2
  51. package/lib/services/utils/MaiaApiError.js +34 -0
  52. package/lib/services/utils/fetchCOR.js +106 -57
  53. package/lib/services/utils/index.js +2 -1
  54. package/lib/services/utils/mapChatMessages.js +7 -12
  55. package/lib/store/index.js +2 -1
  56. package/lib/store/sessions/sessionStreamManager.js +67 -53
  57. package/lib/store/useUsageStore.js +108 -0
  58. package/lib/types/Chat.js +1 -1
  59. package/lib/types/reasoning.js +1 -1
  60. package/lib/types/skill.js +1 -1
  61. package/lib/types/usage.js +9 -0
  62. package/lib/utils/contextMentionTriggers.js +5 -2
  63. package/lib/utils/renderContextMentions.js +18 -39
  64. package/package.json +2 -3
  65. package/CHANGELOG.md +0 -691
  66. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  67. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +0 -107
  68. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  69. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  70. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  71. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  72. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  73. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  74. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  75. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  76. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  77. package/lib/hooks/useSkillsCatalog.js +0 -66
  78. package/lib/types/contextCompaction.js +0 -48
  79. package/lib/types/jest-dom.d.js +0 -2
@@ -40,21 +40,15 @@ import { buildSidebarSessionTitle, ensureSessionInSidebar } from '../../store/ch
40
40
  import { isStreamingPlaceholderMessageId, streamingPlaceholderMessageId } from '../../utils/streamActivityMessages';
41
41
  import { findUserMessageForRetry, messagesWithoutRetriedTurn, resolveRetryTurnId } from '../../utils/retryCompletion';
42
42
  import { getChatsStoreState, useChatsStore } from '../../store/useChatsStore';
43
+ import { getUsageStoreState, isUsageQuotaExceededError } from '../../store/useUsageStore';
43
44
  import { reasoningStore } from '../useReasoningTrace';
44
45
  import { buildReasoningTrace, mapReasoningTrace } from '../../utils/reasoningMappers';
45
- import { mapContextCompaction } from '../../types/contextCompaction';
46
46
  /** Trace acumulado en vivo para `messageId`, o null si el store apunta a otro mensaje. */
47
47
  var reasoningTraceFor = function reasoningTraceFor(messageId) {
48
48
  var snapshot = reasoningStore.getSnapshot(messageId);
49
49
  if (!snapshot.steps.length) return null;
50
50
  return buildReasoningTrace(snapshot.steps, snapshot.summary);
51
51
  };
52
-
53
- /** Aviso de compactación: store en vivo, o el `complete` persistido. Capturar antes del `rename`. */
54
- var compactionFor = function compactionFor(messageId, payload) {
55
- var _reasoningStore$getSn;
56
- return (_reasoningStore$getSn = reasoningStore.getSnapshot(messageId).compaction) !== null && _reasoningStore$getSn !== void 0 ? _reasoningStore$getSn : mapContextCompaction(payload === null || payload === void 0 ? void 0 : payload.compaction);
57
- };
58
52
  var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
59
53
  var _options$attachments;
60
54
  if (Array.isArray(attachmentsOrOptions)) {
@@ -574,14 +568,15 @@ export var useChatManager = function useChatManager(_ref4) {
574
568
  }
575
569
  var isAccessDenied = errorMessage === "Access denied: You don't have permission to access this agent";
576
570
  var isPromptTooLong = errorMessage === 'invalid_request_error' && (errorRawMessage === null || errorRawMessage === void 0 ? void 0 : errorRawMessage.includes('prompt is too long'));
571
+ var isUsageQuotaExceeded = isUsageQuotaExceededError(errorMessage);
577
572
  var message = isAccessDenied ? t('chat.errorAccessDenied') : isPromptTooLong ? t('chat.errorPromptTooLong', {
578
573
  used: (_errorRawMessage$matc = errorRawMessage === null || errorRawMessage === void 0 || (_errorRawMessage$matc2 = errorRawMessage.match(/(\d+) tokens/)) === null || _errorRawMessage$matc2 === void 0 ? void 0 : _errorRawMessage$matc2[1]) !== null && _errorRawMessage$matc !== void 0 ? _errorRawMessage$matc : ''
579
- }) : t('chat.error');
574
+ }) : isUsageQuotaExceeded && errorRawMessage ? errorRawMessage : isUsageQuotaExceeded ? t('chat.usage.blockedBanner') : t('chat.error');
580
575
  commitToSession(sessionId, _objectSpread(_objectSpread({
581
576
  id: "answer-".concat(messageId),
582
577
  message: message,
583
578
  isError: true
584
- }, !isAccessDenied && !isPromptTooLong ? {
579
+ }, !isAccessDenied && !isPromptTooLong && !isUsageQuotaExceeded ? {
585
580
  suggestions: [t('chat.retry')]
586
581
  } : {}), {}, {
587
582
  date: new Date(),
@@ -629,7 +624,7 @@ export var useChatManager = function useChatManager(_ref4) {
629
624
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
630
625
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, _resolvedContext, reasoning) {
631
626
  var _reasoningTraceFor, _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
632
- var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, compaction, finalTrace, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, manualApprovalForAnalytics, wasManualCreateAgentApproved, 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, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
627
+ var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, finalTrace, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, manualApprovalForAnalytics, wasManualCreateAgentApproved, 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, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
633
628
  return _regeneratorRuntime.wrap(function (_context) {
634
629
  while (1) switch (_context.prev = _context.next) {
635
630
  case 0:
@@ -644,7 +639,6 @@ export var useChatManager = function useChatManager(_ref4) {
644
639
  // id definitivo para que el bloque de razonamiento sobreviva al swap.
645
640
  finalMessageId = "answer-".concat(memorySessionId); // Preferir el snapshot en vivo (narración anclada al inicio) sobre el
646
641
  // `complete` del back, que suele mandar esa narración al final.
647
- compaction = compactionFor(tempMessageId, reasoning);
648
642
  finalTrace = (_reasoningTraceFor = reasoningTraceFor(tempMessageId)) !== null && _reasoningTraceFor !== void 0 ? _reasoningTraceFor : mapReasoningTrace(reasoning);
649
643
  reasoningStore.rename(tempMessageId, finalMessageId);
650
644
 
@@ -670,8 +664,7 @@ export var useChatManager = function useChatManager(_ref4) {
670
664
  } : {}), {}, {
671
665
  memorySessionId: memorySessionId,
672
666
  suggestions: suggestions || [],
673
- reasoning: finalTrace,
674
- compaction: compaction
667
+ reasoning: finalTrace
675
668
  }));
676
669
  clearSessionTail(sessionId);
677
670
  getChatsStoreState().markChatAsUnread(sessionId);
@@ -862,8 +855,7 @@ export var useChatManager = function useChatManager(_ref4) {
862
855
  }, createAgentFollowUp ? {
863
856
  createAgentFollowUp: createAgentFollowUp
864
857
  } : {}), {}, {
865
- reasoning: finalTrace,
866
- compaction: compaction
858
+ reasoning: finalTrace
867
859
  }));
868
860
  });
869
861
  clearSessionTail(sessionId);
@@ -927,19 +919,18 @@ export var useChatManager = function useChatManager(_ref4) {
927
919
  var tempMessageId = streamingPlaceholderMessageId(currentMessageId.current);
928
920
  var finalMessageId = "answer-".concat(currentMessageId.current);
929
921
  var stoppedTrace = reasoningTraceFor(tempMessageId);
930
- var compaction = compactionFor(tempMessageId);
931
922
  sessionStreamingText.clear(sessionId);
932
923
  streamingPlaceholderIdRef.current = null;
933
924
  activeStreamChatIdRef.current = null;
934
925
  dropFromSession(sessionId, tempMessageId);
935
- if (stoppedTrace !== null && stoppedTrace !== void 0 && stoppedTrace.steps.length || compaction) {
926
+ if (stoppedTrace !== null && stoppedTrace !== void 0 && stoppedTrace.steps.length) {
936
927
  reasoningStore.finish(tempMessageId, null);
937
928
  reasoningStore.rename(tempMessageId, finalMessageId);
938
929
  } else {
939
930
  reasoningStore.remove(tempMessageId);
940
931
  }
941
932
  if (partialText) {
942
- commitToSession(sessionId, _objectSpread(_objectSpread({
933
+ commitToSession(sessionId, _objectSpread({
943
934
  id: finalMessageId,
944
935
  message: partialText,
945
936
  date: new Date(),
@@ -950,9 +941,7 @@ export var useChatManager = function useChatManager(_ref4) {
950
941
  role: ChatHistoryRole.ASSISTANT
951
942
  }, stoppedTrace ? {
952
943
  reasoning: stoppedTrace
953
- } : {}), {}, {
954
- compaction: compaction
955
- }));
944
+ } : {}));
956
945
  }
957
946
  commitToSession(sessionId, {
958
947
  id: "".concat(finalMessageId, "-cancelled"),
@@ -1019,7 +1008,6 @@ export var useChatManager = function useChatManager(_ref4) {
1019
1008
 
1020
1009
  // Add a message with the approval request
1021
1010
  var approvalMessageId = "approval-".concat(approval.original_thread_id);
1022
- var compaction = compactionFor(placeholderId, approval.reasoning);
1023
1011
  reasoningStore.rename(placeholderId, approvalMessageId);
1024
1012
  var approvalTrace = (_mapReasoningTrace = mapReasoningTrace(approval.reasoning)) !== null && _mapReasoningTrace !== void 0 ? _mapReasoningTrace : reasoningTraceFor(approvalMessageId);
1025
1013
  commitToSession(sessionId, {
@@ -1033,8 +1021,7 @@ export var useChatManager = function useChatManager(_ref4) {
1033
1021
  role: ChatHistoryRole.ASSISTANT,
1034
1022
  approval: approval,
1035
1023
  approvalStatus: 'pending',
1036
- reasoning: approvalTrace,
1037
- compaction: compaction
1024
+ reasoning: approvalTrace
1038
1025
  });
1039
1026
  if (isActive) {
1040
1027
  isProcessingRef.current = false;
@@ -1079,11 +1066,17 @@ export var useChatManager = function useChatManager(_ref4) {
1079
1066
  }
1080
1067
  return _context2.abrupt("return");
1081
1068
  case 1:
1069
+ if (!getUsageStoreState().blocked) {
1070
+ _context2.next = 2;
1071
+ break;
1072
+ }
1073
+ return _context2.abrupt("return");
1074
+ case 2:
1082
1075
  // Tope de concurrencia: si esta sesión no está generando y ya hay
1083
1076
  // MAX_CONCURRENT_STREAMS activas, avisamos y no arrancamos otra.
1084
1077
  willStartNewStream = !sessionStreamManager.isActive(currentChatId.current);
1085
1078
  if (!(willStartNewStream && sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
1086
- _context2.next = 2;
1079
+ _context2.next = 3;
1087
1080
  break;
1088
1081
  }
1089
1082
  document.dispatchEvent(new CustomEvent('snackbar-event', {
@@ -1094,7 +1087,7 @@ export var useChatManager = function useChatManager(_ref4) {
1094
1087
  }
1095
1088
  }));
1096
1089
  return _context2.abrupt("return");
1097
- case 2:
1090
+ case 3:
1098
1091
  _normalizeSendMessage = normalizeSendMessageArgs(attachmentsOrOptions), attachments = _normalizeSendMessage.attachments, options = _normalizeSendMessage.options; // Las mentions pueden venir vía 5to parámetro (call positional desde el footer)
1099
1092
  // o vía SendMessageOptions (call programático). El parámetro explícito gana.
1100
1093
  effectiveMentions = mentions !== null && mentions !== void 0 ? mentions : options.mentions;
@@ -1171,9 +1164,9 @@ export var useChatManager = function useChatManager(_ref4) {
1171
1164
  });
1172
1165
  lastMessageProjectId = lastMessageWithProject === null || lastMessageWithProject === void 0 ? void 0 : lastMessageWithProject.projectId;
1173
1166
  projectToRequest = resolveProjectToRequest(ctxChipsProject, lastMessageProjectId);
1174
- _context2.next = 3;
1167
+ _context2.next = 4;
1175
1168
  return fetchProjects([projectToRequest]);
1176
- case 3:
1169
+ case 4:
1177
1170
  projects = _context2.sent;
1178
1171
  payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
1179
1172
  payloadAgentSuggestionId = agentSuggestionId !== null && agentSuggestionId !== void 0 ? agentSuggestionId : options.agentSuggestionId;
@@ -1223,7 +1216,7 @@ export var useChatManager = function useChatManager(_ref4) {
1223
1216
  contextData: payloadContextData
1224
1217
  } : {});
1225
1218
  askMaia(payloadData);
1226
- case 4:
1219
+ case 5:
1227
1220
  case "end":
1228
1221
  return _context2.stop();
1229
1222
  }
@@ -1843,4 +1836,4 @@ export var useChatManager = function useChatManager(_ref4) {
1843
1836
  isDisabled: waitingResponse || loadingMessages
1844
1837
  };
1845
1838
  };
1846
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJ0cmFja01hbnVhbEhpdGxFdmVudHMiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsInJlc29sdmVSZXRyeVR1cm5JZCIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFzb25pbmdTdG9yZSIsImJ1aWxkUmVhc29uaW5nVHJhY2UiLCJtYXBSZWFzb25pbmdUcmFjZSIsIm1hcENvbnRleHRDb21wYWN0aW9uIiwicmVhc29uaW5nVHJhY2VGb3IiLCJtZXNzYWdlSWQiLCJzbmFwc2hvdCIsImdldFNuYXBzaG90Iiwic3RlcHMiLCJsZW5ndGgiLCJzdW1tYXJ5IiwiY29tcGFjdGlvbkZvciIsInBheWxvYWQiLCJfcmVhc29uaW5nU3RvcmUkZ2V0U24iLCJjb21wYWN0aW9uIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwiY2hpcHNQcm9qZWN0IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJjaGlwc1Byb2plY3RJZCIsInByb2plY3RJZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VkIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJjdHhDbGllbnQiLCJjdHhQcm9qZWN0IiwiX2N0eFByb2plY3QkY2xpZW50IiwiaWQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiZmlsZSIsIkZpbGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJwdXNoSWQiLCJyYXciLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJpc05hTiIsInB1c2giLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3JlYyR0YXNrX2lkIiwiYXJncyIsInRvb2xfYXJncyIsInJlYyIsInRhc2tfaWQiLCJ0YXNrX2lkcyIsInRhc2tzIiwidCIsIl90cmVjJHRhc2tfaWQiLCJ0cmVjIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQyIiwibGlzdCIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInRocmVhZElkcyIsImFjdGl2ZU1lc3NhZ2VzIiwiZnJvbUFjdGl2ZVZpZXciLCJtZXNzYWdlIiwiX21lc3NhZ2UkYXBwcm92YWwiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJ0aHJlYWRfaWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwiZ2V0IiwiX3VzZVNlc3Npb25zU3RvcmUkZ2V0IiwiZ2V0U3RhdGUiLCJtZXNzYWdlcyIsInNlc3Npb25FbnRyeSIsIk9iamVjdCIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXNzaW9uTWVzc2FnZXMiLCJfbWVzc2FnZSRhcHByb3ZhbDIiLCJfc2Vzc2lvbkVudHJ5IiwiZm91bmQiLCJfbWVzc2FnZSRhcHByb3ZhbDMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWY0IiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIm9uRXJyb3IiLCJfcmVmNCRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJ0YXNrIiwic2V0VGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJpc0F1dG9BcHByb3ZlQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwic2V0QWN0aXZlQ2hhdElkIiwic3RhdGUiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJsYXN0TWFudWFsQXBwcm92YWxSZWYiLCJ0cmFja2VkTWFudWFsSGl0bEtleXNSZWYiLCJTZXQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiIsInJldHJ5U25hcHNob3RSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmIiwiYWN0aXZlU3RyZWFtQ2hhdElkUmVmIiwiY2xlYXJTdHJlYW1VaVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVTZXNzaW9uSWQiLCJzZXRBY3RpdmVTZXNzaW9uSWQiLCJpc01vdW50ZWRSZWYiLCJsYXN0SGFuZGxlZFRlcm1pbmFsUmVmIiwiaXNXZWJTZWFyY2hBY3RpdmVSZWYiLCJpc0RlZXBTZWFyY2hBY3RpdmVSZWYiLCJpc0F1dG9BcHByb3ZlQWN0aXZlUmVmIiwiY29udGV4dFJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJfYWN0aXZlU2Vzc2lvbk1ldGEkZmkiLCJzdGF0dXMiLCJpc1Rlcm1pbmFsIiwia2V5IiwiZmluaXNoZWRBdCIsInRhaWwiLCJnZXRNZXNzYWdlcyIsImhhc1N0YWxlUGxhY2Vob2xkZXIiLCJtc2ciLCJmb3JjZSIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYiLCJwcmV2aW91c0luaXRpYWxDaGF0SWQiLCJpc0FjdGl2ZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiY3R4IiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJzaG93Iiwic2V2ZXJpdHkiLCJpc0FjY2Vzc0RlbmllZCIsImlzUHJvbXB0VG9vTG9uZyIsInVzZWQiLCJpc0Vycm9yIiwic3VnZ2VzdGlvbnMiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJBU1NJU1RBTlQiLCJtYXJrQ2hhdEFzVW5yZWFkIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwiY29udGVudCIsInBsYWNlaG9sZGVyRXhpc3RzIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiX3Jlc29sdmVkQ29udGV4dCIsInJlYXNvbmluZyIsIl9yZWFzb25pbmdUcmFjZUZvciIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl93aW5kb3ckdGFza1BhbmVsIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0ZW1wTWVzc2FnZUlkIiwiZmluYWxNZXNzYWdlSWQiLCJmaW5hbFRyYWNlIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIm1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzIiwid2FzTWFudWFsQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJtYW51YWxIb3Vyc1Rvb2wiLCJ3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkIiwidG9vbHMiLCJfbWFudWFsQXBwcm92YWwkdG9vbEEiLCJtYW51YWxQc2V1ZG9BY3Rpb24iLCJhZmZlY3RlZFRhc2tJZHMiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiaXNDaGF0Vmlld1Zpc2libGUiLCJtYXJrQ2hhdEFzUmVhZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwicmVuYW1lIiwiYWJydXB0IiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXQiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwicmVzb2x1dGlvbl9zb3VyY2UiLCJzZW50IiwicmVwbGFjZSIsInVybCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJjYWxsIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRhc2tJZCIsInNvdXJjZSIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJ0aGVuIiwiY2hhdEFnZW50IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTdHJlYW1TdG9wIiwicGFydGlhbFRleHQiLCJzdG9wcGVkVHJhY2UiLCJmaW5pc2giLCJyZW1vdmUiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsImFjY3VtdWxhdGVkQ29udGVudCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdCIsIl9tYXBSZWFzb25pbmdUcmFjZSIsImhpdGxDb250ZXh0Iiwib3JpZ2luYWxfdGhyZWFkX2lkIiwibWVzc2FnZVRleHQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJhdXRvX2FwcHJvdmVkIiwiYXBwcm92YWxfc3RhdHVzIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIl9yZWY2IiwiX3Rvb2xfbmFtZSIsIl90b29sX2FyZ3MiLCJpbXByZXNzaW9uIiwiYWlDaGF0SGl0bCIsImZpcnN0QWN0aW9uIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJhcHByb3ZhbFRyYWNlIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImFza01haWEiLCJyZXRyeUNvbXBsZXRpb24iLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY3IiwiX2NhbGxlZTIiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIndpbGxTdGFydE5ld1N0cmVhbSIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsImVmZmVjdGl2ZU1lbnRpb25zIiwiY29udGV4dE1lc3NhZ2UiLCJwYXlsb2FkRnVhSWQiLCJwYXlsb2FkU2NJZCIsInBheWxvYWRDb250ZXh0RGF0YSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhUYXNrIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZCIsImZpbmFsTWVzc2FnZSIsIl9vcHRpb25zJHByb2plY3RDaGFuZyIsIl9jb250ZXh0UmVmJGN1cnJlbnQkcCIsImhpc3RvcnkiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MiIsImdldEFjdGl2ZUNvdW50IiwiY29udGV4dERhdGEiLCJwbUFpVHlwZWRUZXh0IiwidGl0bGUiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJwcm9qZWN0TmFtZSIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJlbW9qaSIsImFnZW50RW1vamkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsImNoYW5nZVByb2plY3QiLCJyZXRyeU1lc3NhZ2UiLCJfcmVmOCIsIl9jYWxsZWU0IiwiX3VzZXJNZXNzYWdlJG1lc3NhZ2UiLCJfdXNlck1lc3NhZ2UkYXR0YWNobWUiLCJfdXNlck1lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJG1lbW9yeVNlc3NpbyIsIl90cnVuY2F0ZWQkYXQiLCJwcmV2aW91c01lc3NhZ2VzIiwidXNlck1lc3NhZ2UiLCJ0dXJuSWQiLCJ1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayIsInRydW5jYXRlZCIsInBsYWNlaG9sZGVyIiwibmV4dE1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJyZXBsYXlWaWFPcmNoZXN0cmF0b3IiLCJyZXN1bHQiLCJfY29udGV4dDQiLCJpdGVtIiwiX3JlZjkiLCJfY2FsbGVlMyIsIl90IiwiX2NvbnRleHQzIiwic3RhcnRlZCIsInJlYXNvbiIsIl94MTUiLCJoYW5kbGVGZWVkYmFjayIsIl9yZWYwIiwiX2NhbGxlZTUiLCJmZWVkYmFja1Byb3AiLCJjaGF0TWVzc2FnZUlkIiwicmVzcG9uc2UiLCJfY29udGV4dDUiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTYiLCJfeDE3IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWYxIiwiX2NhbGxlZTYiLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImZvdW5kU2Vzc2lvbklkIiwibmV3U3RhdHVzIiwiaXNBY3RpdmVTZXNzaW9uIiwic3RyZWFtTWVzc2FnZUlkIiwiaGl0bEN0eCIsInJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nIiwiX2NvbnRleHQ2Iiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTgiLCJfeDE5IiwiX3gyMCIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTciLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcmVmMTEiLCJfcmVzb2x2ZVByb2plY3RUb1JlcXUiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDMiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDciLCJCb29sZWFuIiwicmVzZXRDaGF0IiwicHJldmlvdXNTZXNzaW9uSWQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQsIGlzSG91cnNDaGFyZ2VUb29sIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BsYW5uZXJTeW5jRXZlbnRzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQge1xuICBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCxcbiAgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSxcbiAgbm9ybWFsaXplSGl0bFRvb2xOYW1lLFxuICB0cmFja01hbnVhbEhpdGxFdmVudHMsXG59IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IHVzZVNlc3Npb25NZXRhIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbk1ldGEnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtTWFuYWdlciwgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyJ1xuaW1wb3J0IHsgYWN0aXZlVmlldyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL2FjdGl2ZVZpZXcnXG5pbXBvcnQgeyBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZSwgZW5zdXJlU2Vzc2lvbkluU2lkZWJhciB9IGZyb20gJy4uLy4uL3N0b3JlL2NoYXRzU2lkZWJhck9wdGltaXN0aWMnXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSwgbWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4sIHJlc29sdmVSZXRyeVR1cm5JZCB9IGZyb20gJy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB0eXBlIHsgU3RyZWFtQ29udGV4dCB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBidWlsZFJlYXNvbmluZ1RyYWNlLCBtYXBSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBtYXBDb250ZXh0Q29tcGFjdGlvbiwgdHlwZSBDb250ZXh0Q29tcGFjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRDb21wYWN0aW9uJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG4vKiogVHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gcGFyYSBgbWVzc2FnZUlkYCwgbyBudWxsIHNpIGVsIHN0b3JlIGFwdW50YSBhIG90cm8gbWVuc2FqZS4gKi9cbmNvbnN0IHJlYXNvbmluZ1RyYWNlRm9yID0gKG1lc3NhZ2VJZDogc3RyaW5nKTogUmVhc29uaW5nVHJhY2UgfCBudWxsID0+IHtcbiAgY29uc3Qgc25hcHNob3QgPSByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdChtZXNzYWdlSWQpXG4gIGlmICghc25hcHNob3Quc3RlcHMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICByZXR1cm4gYnVpbGRSZWFzb25pbmdUcmFjZShzbmFwc2hvdC5zdGVwcywgc25hcHNob3Quc3VtbWFyeSlcbn1cblxuLyoqIEF2aXNvIGRlIGNvbXBhY3RhY2nDs246IHN0b3JlIGVuIHZpdm8sIG8gZWwgYGNvbXBsZXRlYCBwZXJzaXN0aWRvLiBDYXB0dXJhciBhbnRlcyBkZWwgYHJlbmFtZWAuICovXG5jb25zdCBjb21wYWN0aW9uRm9yID0gKFxuICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgcGF5bG9hZD86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbik6IENvbnRleHRDb21wYWN0aW9uIHwgbnVsbCA9PlxuICByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdChtZXNzYWdlSWQpLmNvbXBhY3Rpb24gPz8gbWFwQ29udGV4dENvbXBhY3Rpb24ocGF5bG9hZD8uY29tcGFjdGlvbilcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogY2hpcHNQcm9qZWN0IGVzIGxhIGZ1ZW50ZSBkZSB2ZXJkYWQgZGVsIHBpbiB2aXNpYmxlOyBzaSBubyBoYXkgcGluLCByZXN0YXVyYXIgZGVzZGUgaGlzdG9yaWFsLiAqL1xuY29uc3QgcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QgPSAoXG4gIGNoaXBzUHJvamVjdDogeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxhc3RNZXNzYWdlUHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgY2hpcHNQcm9qZWN0SWQgPSBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/IE51bWJlcihjaGlwc1Byb2plY3QucHJvamVjdElkKSA6IG51bGxcbiAgaWYgKGNoaXBzUHJvamVjdElkICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGNoaXBzUHJvamVjdElkKSkge1xuICAgIHJldHVybiBjaGlwc1Byb2plY3RJZFxuICB9XG4gIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCByZXNvbHZlQ2xpZW50UGF5bG9hZCA9IChcbiAgY3R4Q2xpZW50OiB7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBjbGllbnRJZD86IG51bWJlcjsgY2xpZW50TmFtZT86IHN0cmluZyB9ID0+IHtcbiAgaWYgKGN0eENsaWVudD8uaWQpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogY3R4Q2xpZW50LmlkLCAuLi4oY3R4Q2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eENsaWVudC5uYW1lIH0gOiB7fSkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IE51bWJlcihjdHhQcm9qZWN0LmNsaWVudElkKSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudD8uaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGN0eFByb2plY3QuY2xpZW50LmlkLFxuICAgICAgLi4uKGN0eFByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eFByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzID0gKHJhd0F0dGFjaG1lbnRzOiB1bmtub3duKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXdBdHRhY2htZW50cykpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiByYXdBdHRhY2htZW50c1xuICAgIC5maWx0ZXIoKGF0dGFjaG1lbnQpOiBhdHRhY2htZW50IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICEhYXR0YWNobWVudCAmJiB0eXBlb2YgYXR0YWNobWVudCA9PT0gJ29iamVjdCcpXG4gICAgLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5uYW1lID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50Lm5hbWUudHJpbSgpID8gYXR0YWNobWVudC5uYW1lLnRyaW0oKSA6IGBmaWxlLSR7aW5kZXggKyAxfWBcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC50eXBlID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LnR5cGUudHJpbSgpID8gYXR0YWNobWVudC50eXBlLnRyaW0oKSA6ICdwZGYnXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHR5cGVvZiBhdHRhY2htZW50Lm1pbWVfdHlwZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50Lm1pbWVfdHlwZSA6ICcnXG4gICAgICBjb25zdCBmdWxsRmlsZU5hbWUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyBuYW1lIDogYCR7bmFtZX0uJHt0eXBlfWBcbiAgICAgIGNvbnN0IG51bWVyaWNTaXplID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuc2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IGF0dGFjaG1lbnQuc2l6ZVxuICAgICAgICAgIDogTnVtYmVyLmlzRmluaXRlKE51bWJlcihhdHRhY2htZW50LnNpemUpKVxuICAgICAgICAgICAgPyBOdW1iZXIoYXR0YWNobWVudC5zaXplKVxuICAgICAgICAgICAgOiAwXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBmdWxsRmlsZU5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSksXG4gICAgICAgIGlkOlxuICAgICAgICAgIHR5cGVvZiBhdHRhY2htZW50LmlkID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LmlkLnRyaW0oKVxuICAgICAgICAgICAgPyBhdHRhY2htZW50LmlkXG4gICAgICAgICAgICA6IGBhc3Npc3RhbnQtZmlsZS0ke2luZGV4fS0ke2Z1bGxGaWxlTmFtZX1gLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzaXplOiBudW1lcmljU2l6ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF90aHVtYm5haWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfZmlsZTogdHlwZW9mIGF0dGFjaG1lbnQudXJsX2ZpbGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfZmlsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcm9sZTogYXR0YWNobWVudC5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdhc3Npc3RhbnQnIDogJ3VzZXInLFxuICAgICAgfVxuICAgIH0pXG59XG5cbi8qKiBFeHRyYWUgdGFza19pZHMgZGUgbG9zIHRvb2xfYXJncyBkZSBwZW5kaW5nX2FjdGlvbnMsIGN1YnJpZW5kbyBsYXMgZm9ybWFzIGNvbXVuZXM6XG4gKiAgLSBgeyB0YXNrX2lkIH1gIG8gYHsgaWQgfWBcbiAqICAtIGB7IHRhc2tfaWRzOiBbXSB9YFxuICogIC0gYHsgdGFza3M6IFt7IHRhc2tfaWR8aWQgfSwgLi4uXSB9YFxuICogIMOadGlsIHBhcmEgdG9vbHMgZGUgZWRpdC9hc3NpZ24vZGVsZXRlIGN1YW5kbyBsYSByZXNwdWVzdGEgZGVsIExMTSBubyBpbmNsdXllIFVSTHMgL3Rhc2tzLy4uLi9kZXRhaWwuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIGNvbnN0IHB1c2hJZCA9IChyYXc6IHVua25vd24pID0+IHtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVyblxuICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gIH1cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHB1c2hJZChyZWMudGFza19pZCA/PyByZWMuaWQpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tfaWRzKSkge1xuICAgICAgcmVjLnRhc2tfaWRzLmZvckVhY2gocHVzaElkKVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza3MpKSB7XG4gICAgICByZWMudGFza3MuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgaWYgKHQgJiYgdHlwZW9mIHQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHQpKSB7XG4gICAgICAgICAgY29uc3QgdHJlYyA9IHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICBwdXNoSWQodHJlYy50YXNrX2lkID8/IHRyZWMuaWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbi8qKiB0YXNrX2lkIC8gdGFza19pZHMgZW4gcGVuZGluZ19hY3Rpb25zIGRlIGRlbGV0ZV8qIChsYSByZXNwdWVzdGEgcHVlZGUgbm8gaW5jbHVpciBVUkxzIC90YXNrcy/igKYvZGV0YWlsKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFzaycpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYy50YXNrX2lkID8/IHJlYy5pZFxuICAgICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrc19iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZWMudGFza19pZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCh0aWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcodGlkKSwgMTApXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBhY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB0b29sTmFtZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLnRvb2xfYXJncyB8fCB0eXBlb2YgYWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24udG9vbF9hcmdzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gYWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWQgPz8gcmVjLmlkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG4vKiogw5psdGltbyByZWN1cnNvIHNpIG5vIGhheSBsaW5rcyBuaSB0b29sX2FyZ3MgcGFyc2VhYmxlcyAocC4gZWouIFwiSUQgKio3NTk3MTA2KipcIikuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICBjb25zdCBsYWJlbGVkID0gdGV4dC5tYXRjaCgvXFxiSURcXHMqXFwqXFwqKFxcZCspXFwqXFwqL2kpXG4gIGlmIChsYWJlbGVkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGxhYmVsZWRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIGNvbnN0IGJvbGQgPSB0ZXh0Lm1hdGNoKC9cXCpcXCooXFxkezUsfSlcXCpcXCovKVxuICBpZiAoYm9sZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChib2xkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzID0gKFxuICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICBhY3RpdmVNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXVxuKTogeyBtZXNzYWdlOiBDaGF0TWVzc2FnZTsgc2Vzc2lvbklkOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBjb25zdCBmcm9tQWN0aXZlVmlldyA9IGFjdGl2ZU1lc3NhZ2VzLmZpbmQobWVzc2FnZSA9PlxuICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICApXG4gIGlmIChmcm9tQWN0aXZlVmlldz8uYXBwcm92YWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogZnJvbUFjdGl2ZVZpZXcsXG4gICAgICBzZXNzaW9uSWQ6IGZyb21BY3RpdmVWaWV3LmFwcHJvdmFsLnNlc3Npb25faWQgfHwgYWN0aXZlVmlldy5nZXQoKSB8fCAnJyxcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IG1lc3NhZ2VzIH0gPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcbiAgY29uc3Qgc2Vzc2lvbkVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWVzc2FnZXMpLmZpbmQoKFssIHNlc3Npb25NZXNzYWdlc10pID0+XG4gICAgc2Vzc2lvbk1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PlxuICAgICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgKVxuICApXG4gIGlmIChzZXNzaW9uRW50cnkpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBzZXNzaW9uTWVzc2FnZXNdID0gc2Vzc2lvbkVudHJ5XG4gICAgY29uc3QgZm91bmQgPSBzZXNzaW9uTWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICApXG4gICAgaWYgKGZvdW5kPy5hcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHsgbWVzc2FnZTogZm91bmQsIHNlc3Npb25JZDogZm91bmQuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBzZXNzaW9uSWQgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG5cbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHNldEFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0QWN0aXZlQ2hhdElkKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIEV2aXRhIGR1cGxpY2FyIEFJX0NIQVRfSElUTCAvIEFJX0NIQVRfSElUTF9PUFRJT04gZW4gcHJlYXByb2JhY2lvbmVzIChtYW51YWwgbyBhdXRvKSBwb3IgbG90ZS4gKi9cbiAgY29uc3QgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmID0gdXNlUmVmPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpXG4gIC8qKiBDb250ZXh0byBkZWwgbWVuc2FqZSBkZSBhcHJvYmFjacOzbiBwcmV2aW8gYWwgZWplY3V0YXIgY29udGludWUtdGhyZWFkLiAqL1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiA9IHVzZVJlZjxIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGw+KG51bGwpXG4gIC8qKiBNZW5zYWplcyBhIHJlc3RhdXJhciBzaSBgcmV0cnlfY29tcGxldGlvbmAgZmFsbGEgYW50ZXMgZGUgcGVyc2lzdGlyIGVsIHJlZW1wbGF6by4gKi9cbiAgY29uc3QgcmV0cnlTbmFwc2hvdFJlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjbGVhclN0cmVhbVVpUmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcbiAgLyoqXG4gICAqIFNlc2nDs24gYWN0dWFsbWVudGUgdmlzaWJsZS4gU2UgbWFudGllbmUgZW4gc3RhdGUgKG5vIHNvbG8gZW4gcmVmKSBwYXJhIHF1ZVxuICAgKiBlbCBtb3RvciBkZSBzdHJlYW1pbmcgcHVlZGEgbGVlciByZWFjdGl2YW1lbnRlIGxvcyBmbGFncyBkZSBFU1RBIHNlc2nDs25cbiAgICogZGVzZGUgZWwgc3RvcmUsIG1pZW50cmFzIG90cmFzIHNpZ3VlbiBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICovXG4gIGNvbnN0IFthY3RpdmVTZXNzaW9uSWQsIHNldEFjdGl2ZVNlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgLyoqIFRydWUgbWllbnRyYXMgZXN0YSBpbnN0YW5jaWEgZXN0w6kgbW9udGFkYSAoZXZpdGEgc2V0U3RhdGUgdHJhcyBkZXNtb250YXIpLiAqL1xuICBjb25zdCBpc01vdW50ZWRSZWYgPSB1c2VSZWYodHJ1ZSlcbiAgLyoqIEV2aXRhIHJlY29uY2lsaWFyIGRvcyB2ZWNlcyBlbCBtaXNtbyBlc3RhZG8gdGVybWluYWwgZGUgdW5hIHNlc2nDs24uICovXG4gIGNvbnN0IGxhc3RIYW5kbGVkVGVybWluYWxSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiA9IHVzZVJlZihpc0F1dG9BcHByb3ZlQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0F1dG9BcHByb3ZlQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBpc0F1dG9BcHByb3ZlQWN0aXZlXSlcblxuICBjb25zdCB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgYWRkTWVzc2FnZSxcbiAgICByZW1vdmVNZXNzYWdlLFxuICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICBoYW5kbGVTY3JvbGwsXG4gIH0gPSB1c2VDaGF0TWVzc2FnZXMoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudFVzZXIsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIC8qKlxuICAgKiBFc2NyaWJlIHVuIG1lbnNhamUgZW4gZWwgc3RvcmUgcG9yLXNlc2nDs24geSwgc2kgbGEgc2VzacOzbiBlcyBsYSBhY3RpdmEsXG4gICAqIHRhbWJpw6luIGVuIGxhIHZpc3RhIGxvY2FsLiBQZXJtaXRlIHF1ZSBzZXNpb25lcyBlbiBiYWNrZ3JvdW5kIGFjdW11bGVuIHN1XG4gICAqIHJlc3VsdGFkbyBzaW4gcGlzYXIgZWwgY2hhdCBxdWUgZWwgdXN1YXJpbyBlc3TDoSBtaXJhbmRvLlxuICAgKi9cbiAgY29uc3QgY29tbWl0VG9TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmFkZE1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGRyb3BGcm9tU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgLyoqIExpbXBpYSBlbCB0YWlsIGVuIHZ1ZWxvIGRlIHVuYSBzZXNpw7NuICh0cmFzIHRlcm1pbmFyOyBlbCBiYWNrZW5kIHBhc2EgYSBzZXIgZnVlbnRlKS4gKi9cbiAgY29uc3QgY2xlYXJTZXNzaW9uVGFpbCA9IHVzZUNhbGxiYWNrKChzZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5zZXRNZXNzYWdlcyhzZXNzaW9uSWQsIFtdKVxuICB9LCBbXSlcblxuICAvLyBSZWdpc3RyYXIgbGEgc2VzacOzbiB2aXNpYmxlIGVuIGVsIHRyYWNrZXIgZ2xvYmFsIHBhcmEgcXVlIGxvcyBjYWxsYmFja3MgZGVsXG4gIC8vIG1vdG9yIChxdWUgcHVlZGVuIHBlcnRlbmVjZXIgYSB1bmEgaW5zdGFuY2lhIHlhIGRlc21vbnRhZGEpIHNlcGFuIGN1w6FsIGVzIGxhXG4gIC8vIHNlc2nDs24gYWN0aXZhIGFjdHVhbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVWaWV3LnNldChhY3RpdmVTZXNzaW9uSWQpXG4gIH0sIFthY3RpdmVTZXNzaW9uSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKGN1cnJlbnRDaGF0SWQuY3VycmVudCkpIHtcbiAgICAgICAgYWN0aXZlVmlldy5zZXQobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFJlY29uY2lsaWFjacOzbjogc2kgbGEgc2VzacOzbiBhY3RpdmEgdGVybWluYSAoY29tcGxldGUvZXJyb3IpIHBlcm8gZWwgc3RvcmVcbiAgLy8gcG9yLXNlc2nDs24gdG9kYXbDrWEgdGllbmUgdW4gcGxhY2Vob2xkZXIgZGUgc3RyZWFtaW5nLCByZWZyZXNjYW1vcyBkZXNkZVxuICAvLyBlbCBiYWNrZW5kLiBVc2Ftb3MgZWwgc3RvcmUgKG5vIG1lc3NhZ2VzUmVmKTogaGFuZGxlU3RyZWFtRmluaXNoIGxpbXBpYSBlbFxuICAvLyBwbGFjZWhvbGRlciBhaMOtIGRlIGZvcm1hIHPDrW5jcm9uYTsgbWVzc2FnZXNSZWYgcHVlZGUgcXVlZGFyIHN0YWxlIHVuIHJlbmRlclxuICAvLyBwb3JxdWUgc2V0U3RhdHVzIChadXN0YW5kKSB5IHJlbW92ZU1lc3NhZ2UgKFJlYWN0KSBubyBiYXRjaGFuIGp1bnRvcy5cbiAgLy8gYGNhbmNlbGxlZGAgcXVlZGEgYWZ1ZXJhOiBlbCBzdG9wIHlhIHJlY29uY2lsaWEgbG9jYWwgKHBhcmNpYWwgKyBidXJidWphIGRlXG4gIC8vIGNhbmNlbGFkbykgeSByZWNhcmdhciBhY8OhIG1vc3RyYWJhIGxhIHBhbnRhbGxhIGRlIGNhcmdhIGRlbCBjaGF0IGVudGVyby5cbiAgY29uc3QgYWN0aXZlU2Vzc2lvbk1ldGEgPSB1c2VTZXNzaW9uTWV0YShhY3RpdmVTZXNzaW9uSWQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1c1xuICAgIGlmICghc3RhdHVzKSByZXR1cm5cbiAgICBjb25zdCBpc1Rlcm1pbmFsID0gc3RhdHVzID09PSAnY29tcGxldGUnIHx8IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICAgIGlmICghaXNUZXJtaW5hbCkgcmV0dXJuXG4gICAgY29uc3Qga2V5ID0gYCR7YWN0aXZlU2Vzc2lvbklkfToke3N0YXR1c306JHthY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCA/PyAnJ31gXG4gICAgaWYgKGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9PT0ga2V5KSByZXR1cm5cbiAgICBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPSBrZXlcblxuICAgIGNvbnN0IHRhaWwgPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuZ2V0TWVzc2FnZXMoYWN0aXZlU2Vzc2lvbklkKVxuICAgIGNvbnN0IGhhc1N0YWxlUGxhY2Vob2xkZXIgPSB0YWlsLnNvbWUobXNnID0+IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobXNnLmlkKSlcbiAgICBpZiAoaGFzU3RhbGVQbGFjZWhvbGRlcikge1xuICAgICAgbG9hZE1lc3NhZ2VzKHsgZm9yY2U6IHRydWUgfSlcbiAgICB9XG4gIH0sIFthY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCwgYWN0aXZlU2Vzc2lvbklkLCBsb2FkTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KGluaXRpYWxDaGF0SWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWQgPSBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudFxuICAgIHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgLy8gQ2hhdCBudWV2byAvIGhvbWU6IGluaXRpYWxDaGF0SWQgcGFzYSBhIG51bGwsIGFzw60gcXVlIGxhIHJhbWEgZGUgYWJham8gbm9cbiAgICAvLyBhcGxpY2EuIEhheSBxdWUgcm90YXIgYSB1bmEgc2VzacOzbiBudWV2YSBpZ3VhbDogc2kgc2VndWltb3MgYXB1bnRhbmRvIGEgbGFcbiAgICAvLyBhbnRlcmlvciwgYGFjdGl2ZVZpZXdgIGxhIHNpZ3VlIG1hcmNhbmRvIGNvbW8gYWN0aXZhIHkgY3VhbmRvIHRlcm1pbmEgbm8gc2VcbiAgICAvLyBub3RpZmljYSAoeSBzdSByZXNwdWVzdGEgc2UgY29tbWl0ZWEgc29icmUgbGEgdmlzdGEgbnVldmEpLiBFbCDDoXJib2wgbm9cbiAgICAvLyByZW1vbnRhIGVuIGVzdGUgZmx1am8gKG5vIGhheSBga2V5YCkgeSBuYWRpZSBjb25zdW1lIGByZXNldENoYXRgLlxuICAgIGlmICghaW5pdGlhbENoYXRJZCAmJiBwcmV2aW91c0luaXRpYWxDaGF0SWQpIHtcbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTk8gYWJvcnRhbW9zIGVsIHN0cmVhbSBhbnRlcmlvcjogcHVlZGUgc2VndWlyIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgLy8gU29sbyBjYW1iaWFtb3MgZGUgc2VzacOzbiBhY3RpdmE7IGVsIG1vdG9yIHJ1dGVhIGNhZGEgc3RyZWFtIHBvciBzdVxuICAgICAgLy8gc2Vzc2lvbklkLCBhc8OtIHF1ZSBsb3MgdG9rZW5zIGRlIGxhIHNlc2nDs24gcHJldmlhIHNpZ3VlbiBhcGxpY8OhbmRvc2UgYVxuICAgICAgLy8gRVNBIHNlc2nDs24gKHN0b3JlKSwgbm8gYSBsYSBudWV2YS5cblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChpbml0aWFsQ2hhdElkKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICAvLyBpc1Byb2Nlc3NpbmdSZWYgcmVmbGVqYSBzaSBsYSBzZXNpw7NuIEFDVElWQSBlc3TDoSBvY3VwYWRhLiBTaSBsYSBzZXNpw7NuXG4gICAgICAvLyBhIGxhIHF1ZSBlbnRyYW1vcyBzaWd1ZSBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZCwgcXVlZGEgYmxvcXVlYWRhOyBzaSBubyxcbiAgICAgIC8vIHNlIGhhYmlsaXRhIGVsIGVudsOtbyBhdW5xdWUgb3RyYXMgc2VzaW9uZXMgc2lnYW4gZ2VuZXJhbmRvLlxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShpbml0aWFsQ2hhdElkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIGxvYWRNZXNzYWdlcyBsbyBkaXNwYXJhIHVzZUNoYXRNZXNzYWdlcyBhbCBjYW1iaWFyIGNoYXRJZCAoY29uIGNhY2hlIGVuIG1lbW9yaWEpLlxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEFjdGl2ZUNoYXRJZChpbml0aWFsQ2hhdElkIHx8IG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgZXJyb3JNZXNzYWdlPzogc3RyaW5nLCBlcnJvclJhd01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBtZXNzYWdlSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3QgcmV0cnlTbmFwc2hvdCA9IHJldHJ5U25hcHNob3RSZWYuY3VycmVudFxuICAgICAgaWYgKHJldHJ5U25hcHNob3QpIHtcbiAgICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcmV0cnlTbmFwc2hvdFxuICAgICAgICByZXBsYWNlTWVzc2FnZXMocmV0cnlTbmFwc2hvdClcbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2Vycm9yJywgbWVzc2FnZTogdCgnY2hhdC5lcnJvcicpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY2Nlc3NEZW5pZWQgPSBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICBjb25zdCBpc1Byb21wdFRvb0xvbmcgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIGVycm9yUmF3TWVzc2FnZT8uaW5jbHVkZXMoJ3Byb21wdCBpcyB0b28gbG9uZycpXG4gICAgICBjb25zdCBtZXNzYWdlID0gaXNBY2Nlc3NEZW5pZWRcbiAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgOiBpc1Byb21wdFRvb0xvbmdcbiAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2U/Lm1hdGNoKC8oXFxkKykgdG9rZW5zLyk/LlsxXSA/PyAnJyB9KVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgLy8gQ2hpcCBcIlJlaW50ZW50YXJcIiBzb2xvIGVuIGVsIGVycm9yIGdlbsOpcmljbyAocC4gZWouIDUwMCk7IG5vIGFwbGljYSBhIGFjY2VzcyBkZW5pZWQgbmkgcHJvbXB0IHRvbyBsb25nLlxuICAgICAgICAuLi4oIWlzQWNjZXNzRGVuaWVkICYmICFpc1Byb21wdFRvb0xvbmcgPyB7IHN1Z2dlc3Rpb25zOiBbdCgnY2hhdC5yZXRyeScpXSB9IDoge30pLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcmVwbGFjZU1lc3NhZ2VzLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG5cbiAgICAgIC8vIEFzZWd1cmFtb3MgZWwgcGxhY2Vob2xkZXIgdW5hIMO6bmljYSB2ZXogcG9yIHN0cmVhbSwgdGFudG8gZW4gZWwgc3RvcmVcbiAgICAgIC8vIGRlIGxhIHNlc2nDs24gY29tbyBlbiBsYSB2aXN0YSBzaSBlcyBsYSBhY3RpdmEuIEVsIHRleHRvIGVuIHZpdm8gdmlhamFcbiAgICAgIC8vIHBvciBzZXNzaW9uU3RyZWFtaW5nVGV4dCAoZXh0ZXJubyksIHNpbiByZS1yZW5kZXIgZGVsIMOhcmJvbCBjb21wbGV0by5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRXhpc3RzID0gdXNlU2Vzc2lvbnNTdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAuZ2V0TWVzc2FnZXMoc2Vzc2lvbklkKVxuICAgICAgICAuc29tZShtc2cgPT4gbXNnLmlkID09PSBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBpZiAoIXBsYWNlaG9sZGVyRXhpc3RzKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBwbGFjZWhvbGRlcklkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICB9XG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIGN0eDogU3RyZWFtQ29udGV4dCxcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgcmF3QXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgLyoqIFBvc2ljaW9uYWw6IG1hc3RlciBubyBsbyBjb25zdW1lLCBwZXJvIGByZWFzb25pbmdgIHZpZW5lIGRlc3B1w6lzLiAqL1xuICAgICAgX3Jlc29sdmVkQ29udGV4dD86IGFueSxcbiAgICAgIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAvLyBFbCBwbGFjZWhvbGRlciBzYWxlIGRlbCBzdG9yZSBwb3Itc2VzacOzbiB5YTogZWwgZWZlY3RvIGRlIHJlY29uY2lsaWFjacOzblxuICAgICAgLy8gbG8gdXNhIHBhcmEgZGV0ZWN0YXIgcmVzcHVlc3RhcyBodcOpcmZhbmFzIHkgZGUgYWPDoSBhbCBjb21taXQgcHVlZGUgaGFiZXJcbiAgICAgIC8vIHVuIGF3YWl0LiBMYSB2aXN0YSBsb2NhbCBsbyBzdWVsdGEgbcOhcyBhYmFqbywganVudG8gYWwgY29tbWl0LlxuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gRWwgdHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gZXN0w6Ega2V5ZWQgcG9yIGVsIHBsYWNlaG9sZGVyOyBsbyBtb3ZlbW9zIGFsXG4gICAgICAvLyBpZCBkZWZpbml0aXZvIHBhcmEgcXVlIGVsIGJsb3F1ZSBkZSByYXpvbmFtaWVudG8gc29icmV2aXZhIGFsIHN3YXAuXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YFxuICAgICAgLy8gUHJlZmVyaXIgZWwgc25hcHNob3QgZW4gdml2byAobmFycmFjacOzbiBhbmNsYWRhIGFsIGluaWNpbykgc29icmUgZWxcbiAgICAgIC8vIGBjb21wbGV0ZWAgZGVsIGJhY2ssIHF1ZSBzdWVsZSBtYW5kYXIgZXNhIG5hcnJhY2nDs24gYWwgZmluYWwuXG4gICAgICBjb25zdCBjb21wYWN0aW9uID0gY29tcGFjdGlvbkZvcih0ZW1wTWVzc2FnZUlkLCByZWFzb25pbmcpXG4gICAgICBjb25zdCBmaW5hbFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZCkgPz8gbWFwUmVhc29uaW5nVHJhY2UocmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuXG4gICAgICAvLyBTZXNpw7NuIGVuIGJhY2tncm91bmQ6IGNlcnJhbW9zIGxlYW4uIEVsIGJhY2tlbmQgeWEgcGVyc2lzdGnDsyBsYVxuICAgICAgLy8gcmVzcHVlc3RhLCBhc8OtIHF1ZSBhbCB2b2x2ZXIgYSBsYSBzZXNpw7NuIHNlIGNhcmdhIGRlc2RlIGFow60uIEF2aXNhbW9zXG4gICAgICAvLyBxdWUgdGVybWluw7MgKHVucmVhZCArIGV2ZW50byBwYXJhIHRvYXN0L3NvbmlkbykuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogY29udGVudCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgICB9KVxuICAgICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyA9IGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50XG4gICAgICBjb25zdCB3YXNNYW51YWxDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgJiYgbm9ybWFsaXplSGl0bFRvb2xOYW1lKG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzLnRvb2xOYW1lKSA9PT0gJ2NyZWF0ZV9hZ2VudCdcblxuICAgICAgaWYgKHdhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24sIHtcbiAgICAgICAgICBhZ2VudF90eXBlOiBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KSxcbiAgICAgICAgICBhY3Rpb25fdHlwZTogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgICAgIHJlc29sdXRpb25fc291cmNlOiAnbWFudWFsJyxcbiAgICAgICAgICBvcHRpb246ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIC4uLihjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgPyB7IGNyZWF0ZWRfYWdlbnRfaWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdhc0VkaXRBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuXG4gICAgICBsZXQgZWRpdEFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNFZGl0QWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCBmcm9tU3RyZWFtID0gY29tcGxldGVkQWdlbnRJZD8udHJpbSgpXG4gICAgICAgIGNvbnN0IGZyb21BcmdzID0gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gICAgICAgIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IGZyb21TdHJlYW0gfHwgZnJvbUFyZ3NcbiAgICAgICAgaWYgKHJlc29sdmVkQWdlbnRJZCkge1xuICAgICAgICAgIGVkaXRBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiByZXNvbHZlZEFnZW50SWQgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tVXJscyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsID0gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCA9XG4gICAgICAgIHdhc1Rhc2tEZWxldGUgJiYgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA9PT0gMCAmJiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KGNvbnRlbnQpXG4gICAgICAgICAgOiBbXVxuICAgICAgY29uc3QgdGFza0lkc0ZvckRhc2hib2FyZCA9XG4gICAgICAgIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0YXNrSWRzRnJvbVVybHNcbiAgICAgICAgICA6IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsXG4gICAgICAgICAgICA6IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0XG5cbiAgICAgIGNvbnN0IHNob3VsZFN5bmNEYXNoYm9hcmQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgICh3YXNUYXNrQ3JlYXRpb24gfHwgd2FzVGFza0VkaXQgfHwgd2FzVGFza0RlbGV0ZSkgJiZcbiAgICAgICAgdGFza0lkc0ZvckRhc2hib2FyZC5sZW5ndGggPiAwXG5cbiAgICAgIGlmIChzaG91bGRTeW5jRGFzaGJvYXJkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgICBjb250ZW50VG9BZGQgPSBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICAgICAgICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RQcm9qZWN0TWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZFJhdyA9IHByb2plY3Q/LmlkIHx8IGxhc3RQcm9qZWN0TWVzc2FnZT8ucHJvamVjdElkXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBjb250ZXh0UHJvamVjdElkUmF3ID8gcGFyc2VJbnQoU3RyaW5nKGNvbnRleHRQcm9qZWN0SWRSYXcpLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IHBhdGhNYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXlxcL3Byb2plY3RzXFwvKFxcZCspXFwvLylcbiAgICAgICAgY29uc3Qgcm91dGVQcm9qZWN0SWQgPSBwYXRoTWF0Y2ggPyBwYXJzZUludChwYXRoTWF0Y2hbMV0sIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgaXNPblByb2plY3RSb3V0ZSA9IGNvbnRleHRQcm9qZWN0SWQgJiYgcm91dGVQcm9qZWN0SWQgJiYgY29udGV4dFByb2plY3RJZCA9PT0gcm91dGVQcm9qZWN0SWRcblxuICAgICAgICBpZiAoaXNPblByb2plY3RSb3V0ZSkge1xuICAgICAgICAgIGlmICh3YXNUYXNrQ3JlYXRpb24pIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5hZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNUYXNrRWRpdCkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNUYXNrRGVsZXRlKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZmV0Y2ggZGVsIHRhc2sgcGFuZWwgc2kgZXN0w6EgYWJpZXJ0byB5IGxhIHRvb2wgYXByb2JhZGEgZWRpdMOzL2JvcnLDsyBlc2EgdGFyZWEuXG4gICAgICAvLyBDdWJyZSBsb3MgZG9zIGZsdWpvcyBkZSBhcHByb3ZhbDpcbiAgICAgIC8vICAgMSkgQXBwcm92YWwgcG9yIGJvdMOzbiDihpIgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnNgICh2w61hIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UpXG4gICAgICAvLyAgIDIpIE1hbnVhbCBhcHByb3ZhbCAodXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiKSDihpIgYGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50YFxuICAgICAgY29uc3Qgb3BlblRhc2tQYW5lbElkID0gd2luZG93LnRhc2tQYW5lbD8udGFza0lkXG4gICAgICBjb25zdCBtYW51YWxBcHByb3ZhbCA9IGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50XG4gICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IG51bGwgLy8gY29uc3VtaXIgdW5hIHNvbGEgdmV6XG4gICAgICBjb25zdCBtYW51YWxXYXNUYXNrRWRpdCA9ICEhbWFudWFsQXBwcm92YWwgJiYgVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0RlbGV0ZSA9ICEhbWFudWFsQXBwcm92YWwgJiYgVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMobWFudWFsQXBwcm92YWwudG9vbE5hbWUpXG5cbiAgICAgIC8vIFN5bmMgUGxhbm5lcjogYXZpc2FyIGNhcmdhIGRlIGhvcmFzIGNvbmZpcm1hZGEgKGNyZWF0ZV9ob3VyIC8gY3JlYXRlX2hvdXJzKS5cbiAgICAgIGNvbnN0IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgPSBwZW5kaW5nQWN0aW9uc1xuICAgICAgICAubWFwKChhY3Rpb246IFBlbmRpbmdBY3Rpb24pID0+IGFjdGlvbi50b29sX25hbWUpXG4gICAgICAgIC5maWx0ZXIoKHRvb2xOYW1lKTogdG9vbE5hbWUgaXMgc3RyaW5nID0+IGlzSG91cnNDaGFyZ2VUb29sKHRvb2xOYW1lKSlcbiAgICAgIGNvbnN0IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgaG91cnNUb29sc0Zyb21BcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICBjb25zdCBtYW51YWxIb3Vyc1Rvb2wgPSBtYW51YWxBcHByb3ZhbD8udG9vbE5hbWVcbiAgICAgIGNvbnN0IHdhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQgPSBpc0hvdXJzQ2hhcmdlVG9vbChtYW51YWxIb3Vyc1Rvb2wpXG5cbiAgICAgIGlmICh3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkIHx8IHdhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgdG9vbHMgPSB3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkID8gaG91cnNUb29sc0Zyb21BcHByb3ZhbCA6IG1hbnVhbEhvdXJzVG9vbCA/IFttYW51YWxIb3Vyc1Rvb2xdIDogW11cbiAgICAgICAgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkKHtcbiAgICAgICAgICBzb3VyY2U6ICdtYWlhJyxcbiAgICAgICAgICB0b29scyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZW5UYXNrUGFuZWxJZCAmJiAod2FzVGFza0VkaXQgfHwgd2FzVGFza0RlbGV0ZSB8fCBtYW51YWxXYXNUYXNrRWRpdCB8fCBtYW51YWxXYXNUYXNrRGVsZXRlKSkge1xuICAgICAgICBjb25zdCBtYW51YWxQc2V1ZG9BY3Rpb246IFBlbmRpbmdBY3Rpb24gfCBudWxsID0gbWFudWFsQXBwcm92YWxcbiAgICAgICAgICA/ICh7IHRvb2xfbmFtZTogbWFudWFsQXBwcm92YWwudG9vbE5hbWUsIHRvb2xfYXJnczogbWFudWFsQXBwcm92YWwudG9vbEFyZ3MgPz8ge30gfSBhcyBQZW5kaW5nQWN0aW9uKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBhZmZlY3RlZFRhc2tJZHMgPSBbXG4gICAgICAgICAgLi4uZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbVVybHMsXG4gICAgICAgICAgLi4udGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCxcbiAgICAgICAgICAuLi4obWFudWFsUHNldWRvQWN0aW9uID8gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKFttYW51YWxQc2V1ZG9BY3Rpb25dKSA6IFtdKSxcbiAgICAgICAgXS5tYXAoU3RyaW5nKVxuICAgICAgICBpZiAoYWZmZWN0ZWRUYXNrSWRzLmluY2x1ZGVzKFN0cmluZyhvcGVuVGFza1BhbmVsSWQpKSkge1xuICAgICAgICAgIHdpbmRvdy50YXNrUGFuZWw/LnJlZmV0Y2hUYXNrPy4oKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN3YXAgcGxhY2Vob2xkZXIg4oaSIG1lbnNhamUgZmluYWwuIFZhIGVuIGBmbHVzaFN5bmNgIHBvcnF1ZSBlbCBtb3RvciB5YVxuICAgICAgLy8gZGVqw7MgZW5jb2xhZGFzIGxhcyBlc2NyaXR1cmFzIGRlIGZpbiBkZSBzdHJlYW0gKGlzV3JpdGluZywgYWN0aXZpdHksXG4gICAgICAvLyBzdGF0dXMpLCB5IGVzYXMgdmlhamFuIGVuIFN5bmNMYW5lIHBvciBzZXIgZGUgdW4gc3RvcmUgZXh0ZXJubyBtaWVudHJhc1xuICAgICAgLy8gcXVlIGVzdG9zIHNldFN0YXRlIHZpYWphbiBlbiBEZWZhdWx0TGFuZS4gU2luIGZvcnphcmxvLCBSZWFjdCBwaW50YVxuICAgICAgLy8gcHJpbWVybyBlbCBwbGFjZWhvbGRlciB5YSBzaW4gaW5kaWNhZG9yIGRlIGFjdGl2aWRhZCAodHVybm8gNDFweCBtw6FzXG4gICAgICAvLyBiYWpvKSB5IHJlY2nDqW4gfjI1bXMgZGVzcHXDqXMgZWwgbWVuc2FqZSBkZWZpbml0aXZvOiBlc2Ugc2FsdG8gZGUgaWRhIHlcbiAgICAgIC8vIHZ1ZWx0YSBlcmEgZWwgZmxpY2tlciBkZSBmaW4gZGUgc3RyZWFtLiBDb24gZWwgZmx1c2gsIHRvZG8gZWwgZmluIGRlXG4gICAgICAvLyBzdHJlYW0gZW50cmEgZW4gdW4gw7puaWNvIGNvbW1pdC5cbiAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgICAgY29tcGFjdGlvbixcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB7IGlzQ2hhdFZpZXdWaXNpYmxlLCBtYXJrQ2hhdEFzUmVhZCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICAgIGlmIChpc0FjdGl2ZSAmJiBpc0NoYXRWaWV3VmlzaWJsZSkge1xuICAgICAgICBhd2FpdCBtYXJrQ2hhdEFzUmVhZChzZXNzaW9uSWQsIHsgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICAvLyBgcGFydGlhbFRleHRgIGxvIHJlc2NhdGEgYHN0b3BTdHJlYW1gIGFudGVzIGRlIGxpbXBpYXIgZWwgc3RvcmUgZXh0ZXJubzogZWwgdGV4dG8gZW4gdml2b1xuICAvLyBubyB2aXZlIGVuIGBtZXNzYWdlc2AsIGFzw60gcXVlIHNpbiBlc3RvIGxhIHJlc3B1ZXN0YSBhIG1lZGlhcyBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGF1bnF1ZVxuICAvLyBlbCBiYWNrZW5kIHPDrSBsYSBoYXlhIHBlcnNpc3RpZG8uXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjayhcbiAgICAocGFydGlhbFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgLy8gRWwgc3RvcCBzaWVtcHJlIGFwbGljYSBhIGxhIHNlc2nDs24gYWN0aXZhIChib3TDs24gZGVsIGlucHV0IHZpc2libGUpLlxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IGZpbmFsTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gXG4gICAgICBjb25zdCBzdG9wcGVkVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgY29tcGFjdGlvbiA9IGNvbXBhY3Rpb25Gb3IodGVtcE1lc3NhZ2VJZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoc3RvcHBlZFRyYWNlPy5zdGVwcy5sZW5ndGggfHwgY29tcGFjdGlvbikge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2godGVtcE1lc3NhZ2VJZCwgbnVsbClcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVtb3ZlKHRlbXBNZXNzYWdlSWQpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0aWFsVGV4dCkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IHBhcnRpYWxUZXh0LFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICAuLi4oc3RvcHBlZFRyYWNlID8geyByZWFzb25pbmc6IHN0b3BwZWRUcmFjZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhY3Rpb24sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGAke2ZpbmFsTWVzc2FnZUlkfS1jYW5jZWxsZWRgLFxuICAgICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlVGV4dDogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/Lm1hcChhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCksXG4gICAgICB9XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIC8vIFByZWFwcm9iYWRvOiBwb3IgZGV0ZWNjacOzbiBtYW51YWwgbyBwb3IgYXV0by1hcHByb3ZlLiBFbiBhbWJvcyBjYXNvcyBlbFxuICAgICAgLy8gc3RyZWFtIGNvbnRpbsO6YSB5IG5vIGhheSBxdWUgcGludGFyIGxhIGNhamEgZGUgYXByb2JhY2nDs24uXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIHx8IGFwcHJvdmFsLmF1dG9fYXBwcm92ZWQgfHwgYXBwcm92YWwuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgIHRyYWNrTWFudWFsSGl0bEV2ZW50cyhcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB7IGltcHJlc3Npb246IEVWRU5UUy5haUNoYXRIaXRsLCBvcHRpb246IEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uIH0sXG4gICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgYXBwcm92YWwsXG4gICAgICAgICAgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmLmN1cnJlbnQsXG4gICAgICAgICAgYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID8gJ21hbnVhbCcgOiAnYXV0bydcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBjb25zdCBhcHByb3ZhbE1lc3NhZ2VJZCA9IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gXG4gICAgICBjb25zdCBjb21wYWN0aW9uID0gY29tcGFjdGlvbkZvcihwbGFjZWhvbGRlcklkLCBhcHByb3ZhbC5yZWFzb25pbmcpXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUocGxhY2Vob2xkZXJJZCwgYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhcHByb3ZhbFRyYWNlID0gbWFwUmVhc29uaW5nVHJhY2UoYXBwcm92YWwucmVhc29uaW5nKSA/PyByZWFzb25pbmdUcmFjZUZvcihhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGFwcHJvdmFsTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgICAgcmVhc29uaW5nOiBhcHByb3ZhbFRyYWNlLFxuICAgICAgICBjb21wYWN0aW9uLFxuICAgICAgfSlcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2FwcHJvdmFsX3JlcXVpcmVkJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudCwgY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGV2ZW50XVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgcmV0cnlDb21wbGV0aW9uLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBhY3RpdmVTZXNzaW9uSWQsXG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFRvcGUgZGUgY29uY3VycmVuY2lhOiBzaSBlc3RhIHNlc2nDs24gbm8gZXN0w6EgZ2VuZXJhbmRvIHkgeWEgaGF5XG4gICAgICAvLyBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGFjdGl2YXMsIGF2aXNhbW9zIHkgbm8gYXJyYW5jYW1vcyBvdHJhLlxuICAgICAgY29uc3Qgd2lsbFN0YXJ0TmV3U3RyZWFtID0gIXNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGlmICh3aWxsU3RhcnROZXdTdHJlYW0gJiYgc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgLy8gTGFzIG1lbnRpb25zIHB1ZWRlbiB2ZW5pciB2w61hIDV0byBwYXLDoW1ldHJvIChjYWxsIHBvc2l0aW9uYWwgZGVzZGUgZWwgZm9vdGVyKVxuICAgICAgLy8gbyB2w61hIFNlbmRNZXNzYWdlT3B0aW9ucyAoY2FsbCBwcm9ncmFtw6F0aWNvKS4gRWwgcGFyw6FtZXRybyBleHBsw61jaXRvIGdhbmEuXG4gICAgICBjb25zdCBlZmZlY3RpdmVNZW50aW9ucyA9IG1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnNcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UoZWZmZWN0aXZlTWVudGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRnVhSWQgPSBmdWFJZCA/PyBvcHRpb25zLmZ1YUlkXG4gICAgICBjb25zdCBwYXlsb2FkU2NJZCA9IHNjSWQgPz8gb3B0aW9ucy5zY0lkXG4gICAgICBjb25zdCBwYXlsb2FkQ29udGV4dERhdGEgPSBvcHRpb25zLmNvbnRleHREYXRhXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkU2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0QWN0aXZlQ2hhdElkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShkaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkKVxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcblxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBjb250ZXh0UmVmLmN1cnJlbnQucHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRDb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBheWxvYWRDb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihvcHRpb24/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIob3B0aW9uLmZlZUlkKSB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb24/LmNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkOiBOdW1iZXIob3B0aW9uLmNsaWVudElkKSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IHJldHJ5TWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSByZXR1cm5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFwcmV2aW91c01lc3NhZ2VzLnNvbWUoaXRlbSA9PiBpdGVtLmlkID09PSBtZXNzYWdlLmlkKSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHVzZXJNZXNzYWdlID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgIGlmICghdXNlck1lc3NhZ2U/Lm1lc3NhZ2U/LnRyaW0oKSAmJiAhdXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGggJiYgIXVzZXJNZXNzYWdlPy5zb3VyY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICAgICAgY29uc3QgdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgPSBtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIW1lc3NhZ2UubWVtb3J5U2Vzc2lvbklkPy50cmltKClcbiAgICAgIGlmICghdHVybklkICYmICF1c2VPcmNoZXN0cmF0b3JGYWxsYmFjaykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHRydW5jYXRlZCA9IG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuKHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgc2V0QWN0aXZlQ2hhdElkKHNlc3Npb25JZClcblxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gdXNlck1lc3NhZ2UubWVzc2FnZVxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtuZXdNZXNzYWdlSWR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRNZXNzYWdlcyA9IFsuLi50cnVuY2F0ZWQsIHBsYWNlaG9sZGVyXVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG5leHRNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKG5leHRNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gdHJ1bmNhdGVkLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWQpXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSB0cnVuY2F0ZWQuYXQoLTEpPy5hZ2VudElkIHx8IG1lc3NhZ2UuYWdlbnRJZFxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICA/IHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgIDogQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5zb3VyY2VzKVxuICAgICAgICAgID8gdXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgIDogW11cblxuICAgICAgY29uc3QgcmVwbGF5VmlhT3JjaGVzdHJhdG9yID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gdHJ1bmNhdGVkLm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG4gICAgICAgIGNvbnN0IHByb2plY3RzID0gcHJvamVjdFRvUmVxdWVzdCA/IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKSA6IG51bGxcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IFN0cmluZyhjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkIHx8ICcnKSxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZTogdXNlck1lc3NhZ2UuY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICAgICAgcmVwbGFjZU1lc3NhZ2VzKHByZXZpb3VzTWVzc2FnZXMpXG4gICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIHx8ICF0dXJuSWQpIHtcbiAgICAgICAgYXdhaXQgcmVwbGF5VmlhT3JjaGVzdHJhdG9yKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJldHJ5Q29tcGxldGlvbih7XG4gICAgICAgIGNoYXRJZDogc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiB0dXJuSWQsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIGFnZW50SWQ6IFN0cmluZyhjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkIHx8ICcnKSxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3RUb1JlcXVlc3QgPyB7IHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbCA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCkgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXN1bHQuc3RhcnRlZCkgcmV0dXJuXG5cbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAndHVybl9ub3RfZm91bmQnKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKHByZXZpb3VzTWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgICAgcmV0cnlDb21wbGV0aW9uLFxuICAgICAgYXNrTWFpYSxcbiAgICAgIGZldGNoUHJvamVjdHMsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHNldEFjdGl2ZUNoYXRJZCxcbiAgICBdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHModGhyZWFkSWRzLCBtZXNzYWdlc1JlZi5jdXJyZW50KVxuICAgICAgaWYgKCFmb3VuZD8ubWVzc2FnZS5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZVdpdGhBcHByb3ZhbCwgc2Vzc2lvbklkOiBmb3VuZFNlc3Npb25JZCB9ID0gZm91bmRcbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGlmICghYXBwcm92YWwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFwcHJvdmFsLnNlc3Npb25faWQgfHwgZm91bmRTZXNzaW9uSWRcbiAgICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlc3Npb25faWQgZGlzcG9uaWJsZSBwYXJhIGFwcHJvdmFsOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY3RpdmVTZXNzaW9uID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwgeyAuLi5tZXNzYWdlV2l0aEFwcHJvdmFsLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG5cbiAgICAgIGNvbnN0IHN0cmVhbU1lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHN0cmVhbU1lc3NhZ2VJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ3R4OiBTdHJlYW1Db250ZXh0ID0ge1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogc3RyZWFtTWVzc2FnZUlkLFxuICAgICAgICBwbGFjZWhvbGRlcklkOiBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChzdHJlYW1NZXNzYWdlSWQpLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZVNlc3Npb24pIHJldHVyblxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb25TdHJlYW1NYW5hZ2VyLnN0YXJ0Q29udGludWVTdHJlYW0oe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IGhpdGxDdHgucGxhY2Vob2xkZXJJZCxcbiAgICAgICAgY29udGludWVSZXF1ZXN0OiB7XG4gICAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICB9LFxuICAgICAgICB0LFxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bENvbnRleHQsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSxcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgb25TdHJlYW1VcGRhdGU6IGNvbnRlbnQgPT4gaGFuZGxlU3RyZWFtVXBkYXRlKGhpdGxDdHgsIGNvbnRlbnQpLFxuICAgICAgICAgIG9uRmluaXNoU3RyZWFtOiBmaW5pc2hQYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChcbiAgICAgICAgICAgICAgaGl0bEN0eCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5jb250ZW50LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnNvdXJjZXMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQubWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVzb2x2ZWRDb250ZXh0LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnJlYXNvbmluZ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoaGl0bEN0eClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGhpdGxDdHgsIGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgICBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgICBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIG51bGwpID8/IGN0eFByb2plY3Q/LmlkID8/IG51bGxcblxuICAgICAgY29uc3QgaW5pdGlhbERpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShpbml0aWFsRGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiB1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihwcmV2aW91c1Nlc3Npb25JZClcbiAgICByZWFzb25pbmdTdG9yZS5jbGVhcigpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldEFjdGl2ZUNoYXRJZChudWxsKVxuICB9LCBbc2V0QWN0aXZlQ2hhdElkXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEUsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsRUFBRSxJQUFJQyxNQUFNLFFBQVEsTUFBTTtBQUNuQyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBQ3BELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxJQUFJLFFBQVEsU0FBUztBQUc5QixTQUFTQyxPQUFPLFFBQWlCLHdCQUF3QjtBQUN6RCxTQUFTQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDL0QsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEsYUFBYTtBQUM5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBQ3RDLFNBQVNDLFFBQVEsUUFBUSw0REFBNEQ7QUFDckYsU0FBdUNDLGVBQWUsUUFBd0Msa0JBQWtCO0FBQ2hILFNBQXlDQyxtQkFBbUIsUUFBUSw0QkFBNEI7QUFDaEcsU0FBU0Msa0NBQWtDLFFBQVEsc0NBQXNDO0FBR3pGLFNBQVNDLFdBQVcsUUFBUSxnQkFBZ0I7QUFDNUMsU0FBU0MsaUJBQWlCLFFBQVEsc0JBQXNCO0FBQ3hELFNBQVNDLHNCQUFzQixRQUFR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
1839
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJ0cmFja01hbnVhbEhpdGxFdmVudHMiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsInJlc29sdmVSZXRyeVR1cm5JZCIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJnZXRVc2FnZVN0b3JlU3RhdGUiLCJpc1VzYWdlUXVvdGFFeGNlZWRlZEVycm9yIiwicmVhc29uaW5nU3RvcmUiLCJidWlsZFJlYXNvbmluZ1RyYWNlIiwibWFwUmVhc29uaW5nVHJhY2UiLCJyZWFzb25pbmdUcmFjZUZvciIsIm1lc3NhZ2VJZCIsInNuYXBzaG90IiwiZ2V0U25hcHNob3QiLCJzdGVwcyIsImxlbmd0aCIsInN1bW1hcnkiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwicmVzb2x2ZVByb2plY3RUb1JlcXVlc3QiLCJjaGlwc1Byb2plY3QiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsImNoaXBzUHJvamVjdElkIiwicHJvamVjdElkIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJwYXJzZWQiLCJyZXNvbHZlQ2xpZW50UGF5bG9hZCIsImN0eENsaWVudCIsImN0eFByb2plY3QiLCJfY3R4UHJvamVjdCRjbGllbnQiLCJpZCIsIl9vYmplY3RTcHJlYWQiLCJjbGllbnRJZCIsIm5hbWUiLCJjbGllbnROYW1lIiwiY2xpZW50Iiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJyYXdBdHRhY2htZW50cyIsImZpbHRlciIsImF0dGFjaG1lbnQiLCJfdHlwZW9mIiwibWFwIiwiaW5kZXgiLCJ0cmltIiwiY29uY2F0IiwidHlwZSIsIm1pbWVUeXBlIiwibWltZV90eXBlIiwiZnVsbEZpbGVOYW1lIiwiaW5jbHVkZXMiLCJudW1lcmljU2l6ZSIsInNpemUiLCJmaWxlIiwiRmlsZSIsInVybF9vcmlnaW5hbCIsInVuZGVmaW5lZCIsInVybF90aHVtYm5haWwiLCJ1cmxfZmlsZSIsInJvbGUiLCJleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MiLCJwZW5kaW5nQWN0aW9ucyIsImlkcyIsInB1c2hJZCIsInJhdyIsIm4iLCJwYXJzZUludCIsIlN0cmluZyIsImlzTmFOIiwicHVzaCIsImZvckVhY2giLCJhY3Rpb24iLCJfcmVjJHRhc2tfaWQiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidGFza19pZCIsInRhc2tfaWRzIiwidGFza3MiLCJ0IiwiX3RyZWMkdGFza19pZCIsInRyZWMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInRvb2xfbmFtZSIsIl9yZWMkdGFza19pZDIiLCJsaXN0IiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzIiwidGhyZWFkSWRzIiwiYWN0aXZlTWVzc2FnZXMiLCJmcm9tQWN0aXZlVmlldyIsIm1lc3NhZ2UiLCJfbWVzc2FnZSRhcHByb3ZhbCIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsInRocmVhZF9pZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJnZXQiLCJfdXNlU2Vzc2lvbnNTdG9yZSRnZXQiLCJnZXRTdGF0ZSIsIm1lc3NhZ2VzIiwic2Vzc2lvbkVudHJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsInNlc3Npb25NZXNzYWdlcyIsIl9tZXNzYWdlJGFwcHJvdmFsMiIsIl9zZXNzaW9uRW50cnkiLCJmb3VuZCIsIl9tZXNzYWdlJGFwcHJvdmFsMyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjQiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwib25FcnJvciIsIl9yZWY0JGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImlzQXV0b0FwcHJvdmVBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsInRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiIsIlNldCIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFjdGl2ZVNlc3Npb25JZCIsInNldEFjdGl2ZVNlc3Npb25JZCIsImlzTW91bnRlZFJlZiIsImxhc3RIYW5kbGVkVGVybWluYWxSZWYiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsImlzQXV0b0FwcHJvdmVBY3RpdmVSZWYiLCJjb250ZXh0UmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwicmVwbGFjZU1lc3NhZ2VzIiwiaGFuZGxlU2Nyb2xsIiwiY29tbWl0VG9TZXNzaW9uIiwiaXMiLCJkcm9wRnJvbVNlc3Npb24iLCJjbGVhclNlc3Npb25UYWlsIiwic2V0TWVzc2FnZXMiLCJzZXQiLCJhY3RpdmVTZXNzaW9uTWV0YSIsIl9hY3RpdmVTZXNzaW9uTWV0YSRmaSIsInN0YXR1cyIsImlzVGVybWluYWwiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiaGFzU3RhbGVQbGFjZWhvbGRlciIsIm1zZyIsImZvcmNlIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsInByZXZpb3VzSW5pdGlhbENoYXRJZFJlZiIsInByZXZpb3VzSW5pdGlhbENoYXRJZCIsImlzQWN0aXZlIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJjdHgiLCJlcnJvck1lc3NhZ2UiLCJlcnJvclJhd01lc3NhZ2UiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMyIiwicGxhY2Vob2xkZXJJZCIsImNsZWFyIiwicmV0cnlTbmFwc2hvdCIsInNob3ciLCJzZXZlcml0eSIsImlzQWNjZXNzRGVuaWVkIiwiaXNQcm9tcHRUb29Mb25nIiwiaXNVc2FnZVF1b3RhRXhjZWVkZWQiLCJ1c2VkIiwiaXNFcnJvciIsInN1Z2dlc3Rpb25zIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJfcmVhc29uaW5nVHJhY2VGb3IiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGVtcE1lc3NhZ2VJZCIsImZpbmFsTWVzc2FnZUlkIiwiZmluYWxUcmFjZSIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiVEFTS19DUkVBVElPTl9UT09MUyIsIlRBU0tfRURJVF9UT09MUyIsIlRBU0tfREVMRVRFX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiY29uZmlndXJlZEFnZW50SWQiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIndhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiZnJvbVN0cmVhbSIsImZyb21BcmdzIiwicmVzb2x2ZWRBZ2VudElkIiwidGFza0lkc0Zyb21VcmxzIiwidGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCIsInRhc2tJZHNGcm9tRGVsZXRpb25UZXh0IiwidGFza0lkc0ZvckRhc2hib2FyZCIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJpc09uUHJvamVjdFJvdXRlIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMiIsIl93aW5kb3ckbmV3UHJvamVjdERhczMiLCJfd2luZG93JG5ld1Byb2plY3REYXM0IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNSIsIl93aW5kb3ckbmV3UHJvamVjdERhczYiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxBcHByb3ZhbCIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsImhvdXJzVG9vbHNGcm9tQXBwcm92YWwiLCJ3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkIiwibWFudWFsSG91cnNUb29sIiwid2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCIsInRvb2xzIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwibWFudWFsUHNldWRvQWN0aW9uIiwiYWZmZWN0ZWRUYXNrSWRzIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwibWFya0NoYXRBc1JlYWQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInJlbmFtZSIsImFicnVwdCIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImF0IiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsImFnZW50X3R5cGUiLCJhY3Rpb25fdHlwZSIsImRlY2lzaW9uIiwib3B0aW9uIiwiY3JlYXRlZF9hZ2VudF9pZCIsInJlc29sdXRpb25fc291cmNlIiwic2VudCIsInJlcGxhY2UiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJzb3VyY2UiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU3RyZWFtU3RvcCIsInBhcnRpYWxUZXh0Iiwic3RvcHBlZFRyYWNlIiwiZmluaXNoIiwicmVtb3ZlIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiYXV0b19hcHByb3ZlZCIsImFwcHJvdmFsX3N0YXR1cyIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmNiIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJmaXJzdEFjdGlvbiIsImFwcHJvdmFsTWVzc2FnZUlkIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNyIsIl9jYWxsZWUyIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJwYXlsb2FkQ29udGV4dERhdGEiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJibG9ja2VkIiwiZ2V0QWN0aXZlQ291bnQiLCJjb250ZXh0RGF0YSIsInBtQWlUeXBlZFRleHQiLCJ0aXRsZSIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJhZ2VudE5hbWUiLCJmZWVJZCIsInByb2plY3ROYW1lIiwidGFza05hbWUiLCJlbnRpdHkiLCJhZ2VudEVudGl0eSIsImFnZW50VHlwZSIsImVtb2ppIiwiYWdlbnRFbW9qaSIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiY2hhbmdlUHJvamVjdCIsInJldHJ5TWVzc2FnZSIsIl9yZWY4IiwiX2NhbGxlZTQiLCJfdXNlck1lc3NhZ2UkbWVzc2FnZSIsIl91c2VyTWVzc2FnZSRhdHRhY2htZSIsIl91c2VyTWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkbWVtb3J5U2Vzc2lvIiwiX3RydW5jYXRlZCRhdCIsInByZXZpb3VzTWVzc2FnZXMiLCJ1c2VyTWVzc2FnZSIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwidHJ1bmNhdGVkIiwicGxhY2Vob2xkZXIiLCJuZXh0TWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50MiIsInJlcGxheVZpYU9yY2hlc3RyYXRvciIsInJlc3VsdCIsIl9jb250ZXh0NCIsIml0ZW0iLCJfcmVmOSIsIl9jYWxsZWUzIiwiX3QiLCJfY29udGV4dDMiLCJzdGFydGVkIiwicmVhc29uIiwiX3gxNSIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjAiLCJfY2FsbGVlNSIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxNiIsIl94MTciLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjEiLCJfY2FsbGVlNiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiY29udGludWVSZXF1ZXN0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJjYWxsYmFja3MiLCJmaW5pc2hQYXlsb2FkIiwicmVzb2x2ZWRDb250ZXh0IiwiYXBwcm92YWxQYXlsb2FkIiwiX3gxOCIsIl94MTkiLCJfeDIwIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNyIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYxMSIsIl9yZXNvbHZlUHJvamVjdFRvUmVxdSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsImhhc0luaXRpYWxGdWEiLCJoYXNJbml0aWFsU2MiLCJfY29udGV4dFJlZiRjdXJyZW50MyIsImluaXRpYWxEaXNwbGF5TWVzc2FnZSIsIl9jb250ZXh0NyIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJwcmV2aW91c1Nlc3Npb25JZCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlLCBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCwgaXNIb3Vyc0NoYXJnZVRvb2wgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7XG4gIGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LFxuICBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBub3JtYWxpemVIaXRsVG9vbE5hbWUsXG4gIHRyYWNrTWFudWFsSGl0bEV2ZW50cyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbk1ldGEgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uTWV0YSdcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1NYW5hZ2VyLCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXInXG5pbXBvcnQgeyBhY3RpdmVWaWV3IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvYWN0aXZlVmlldydcbmltcG9ydCB7IG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlLCBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIH0gZnJvbSAnLi4vLi4vc3RvcmUvY2hhdHNTaWRlYmFyT3B0aW1pc3RpYydcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5LCBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiwgcmVzb2x2ZVJldHJ5VHVybklkIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Db250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHsgZ2V0VXNhZ2VTdG9yZVN0YXRlLCBpc1VzYWdlUXVvdGFFeGNlZWRlZEVycm9yIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlVXNhZ2VTdG9yZSdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBidWlsZFJlYXNvbmluZ1RyYWNlLCBtYXBSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbi8qKiBUcmFjZSBhY3VtdWxhZG8gZW4gdml2byBwYXJhIGBtZXNzYWdlSWRgLCBvIG51bGwgc2kgZWwgc3RvcmUgYXB1bnRhIGEgb3RybyBtZW5zYWplLiAqL1xuY29uc3QgcmVhc29uaW5nVHJhY2VGb3IgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBSZWFzb25pbmdUcmFjZSB8IG51bGwgPT4ge1xuICBjb25zdCBzbmFwc2hvdCA9IHJlYXNvbmluZ1N0b3JlLmdldFNuYXBzaG90KG1lc3NhZ2VJZClcbiAgaWYgKCFzbmFwc2hvdC5zdGVwcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIHJldHVybiBidWlsZFJlYXNvbmluZ1RyYWNlKHNuYXBzaG90LnN0ZXBzLCBzbmFwc2hvdC5zdW1tYXJ5KVxufVxuXG5jb25zdCBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MgPSAoYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50c09yT3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50c09yT3B0aW9ucykpIHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50czogYXR0YWNobWVudHNPck9wdGlvbnMsIG9wdGlvbnM6IHt9IGFzIFNlbmRNZXNzYWdlT3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSBhdHRhY2htZW50c09yT3B0aW9ucyA/PyB7fVxuICByZXR1cm4geyBhdHRhY2htZW50czogb3B0aW9ucy5hdHRhY2htZW50cyA/PyBbXSwgb3B0aW9ucyB9XG59XG5cbi8qKiBjaGlwc1Byb2plY3QgZXMgbGEgZnVlbnRlIGRlIHZlcmRhZCBkZWwgcGluIHZpc2libGU7IHNpIG5vIGhheSBwaW4sIHJlc3RhdXJhciBkZXNkZSBoaXN0b3JpYWwuICovXG5jb25zdCByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCA9IChcbiAgY2hpcHNQcm9qZWN0OiB7IHByb2plY3RJZD86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbGFzdE1lc3NhZ2VQcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBjaGlwc1Byb2plY3RJZCA9IGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8gTnVtYmVyKGNoaXBzUHJvamVjdC5wcm9qZWN0SWQpIDogbnVsbFxuICBpZiAoY2hpcHNQcm9qZWN0SWQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoY2hpcHNQcm9qZWN0SWQpKSB7XG4gICAgcmV0dXJuIGNoaXBzUHJvamVjdElkXG4gIH1cbiAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IHJlc29sdmVDbGllbnRQYXlsb2FkID0gKFxuICBjdHhDbGllbnQ6IHsgaWQ/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGN0eFByb2plY3Q6IFByb2plY3QgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGNsaWVudElkPzogbnVtYmVyOyBjbGllbnROYW1lPzogc3RyaW5nIH0gPT4ge1xuICBpZiAoY3R4Q2xpZW50Py5pZCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBjdHhDbGllbnQuaWQsIC4uLihjdHhDbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY3R4Q2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudElkICE9IG51bGwpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogTnVtYmVyKGN0eFByb2plY3QuY2xpZW50SWQpIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50Py5pZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRJZDogY3R4UHJvamVjdC5jbGllbnQuaWQsXG4gICAgICAuLi4oY3R4UHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY3R4UHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge31cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMgPSAoXG4gIHRocmVhZElkczogc3RyaW5nW10sXG4gIGFjdGl2ZU1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdXG4pOiB7IG1lc3NhZ2U6IENoYXRNZXNzYWdlOyBzZXNzaW9uSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZyb21BY3RpdmVWaWV3ID0gYWN0aXZlTWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gIClcbiAgaWYgKGZyb21BY3RpdmVWaWV3Py5hcHByb3ZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBmcm9tQWN0aXZlVmlldyxcbiAgICAgIHNlc3Npb25JZDogZnJvbUFjdGl2ZVZpZXcuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBhY3RpdmVWaWV3LmdldCgpIHx8ICcnLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHsgbWVzc2FnZXMgfSA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuICBjb25zdCBzZXNzaW9uRW50cnkgPSBPYmplY3QuZW50cmllcyhtZXNzYWdlcykuZmluZCgoWywgc2Vzc2lvbk1lc3NhZ2VzXSkgPT5cbiAgICBzZXNzaW9uTWVzc2FnZXMuc29tZShtZXNzYWdlID0+XG4gICAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICApXG4gIClcbiAgaWYgKHNlc3Npb25FbnRyeSkge1xuICAgIGNvbnN0IFtzZXNzaW9uSWQsIHNlc3Npb25NZXNzYWdlc10gPSBzZXNzaW9uRW50cnlcbiAgICBjb25zdCBmb3VuZCA9IHNlc3Npb25NZXNzYWdlcy5maW5kKG1lc3NhZ2UgPT5cbiAgICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgIClcbiAgICBpZiAoZm91bmQ/LmFwcHJvdmFsKSB7XG4gICAgICByZXR1cm4geyBtZXNzYWdlOiBmb3VuZCwgc2Vzc2lvbklkOiBmb3VuZC5hcHByb3ZhbC5zZXNzaW9uX2lkIHx8IHNlc3Npb25JZCB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3Qgc2V0QWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRBY3RpdmVDaGF0SWQpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogRXZpdGEgZHVwbGljYXIgQUlfQ0hBVF9ISVRMIC8gQUlfQ0hBVF9ISVRMX09QVElPTiBlbiBwcmVhcHJvYmFjaW9uZXMgKG1hbnVhbCBvIGF1dG8pIHBvciBsb3RlLiAqL1xuICBjb25zdCB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYgPSB1c2VSZWY8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSlcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgLyoqIE1lbnNhamVzIGEgcmVzdGF1cmFyIHNpIGByZXRyeV9jb21wbGV0aW9uYCBmYWxsYSBhbnRlcyBkZSBwZXJzaXN0aXIgZWwgcmVlbXBsYXpvLiAqL1xuICBjb25zdCByZXRyeVNuYXBzaG90UmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10gfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmID0gdXNlUmVmKGlzQXV0b0FwcHJvdmVBY3RpdmUpXG4gIC8qKiBFdml0YSBjbG9zdXJlcyBvYnNvbGV0YXMgY3VhbmRvIGVsIGZvb3RlciBjb25zZXJ2YSBzZW5kTWVzc2FnZSBlbnRyZSByZW5kZXJzLiAqL1xuICBjb25zdCBjb250ZXh0UmVmID0gdXNlUmVmKHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfSlcbiAgY29udGV4dFJlZi5jdXJyZW50ID0geyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCA9IGlzQXV0b0FwcHJvdmVBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGlzQXV0b0FwcHJvdmVBY3RpdmVdKVxuXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgfSA9IHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50VXNlcixcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgLyoqXG4gICAqIEVzY3JpYmUgdW4gbWVuc2FqZSBlbiBlbCBzdG9yZSBwb3Itc2VzacOzbiB5LCBzaSBsYSBzZXNpw7NuIGVzIGxhIGFjdGl2YSxcbiAgICogdGFtYmnDqW4gZW4gbGEgdmlzdGEgbG9jYWwuIFBlcm1pdGUgcXVlIHNlc2lvbmVzIGVuIGJhY2tncm91bmQgYWN1bXVsZW4gc3VcbiAgICogcmVzdWx0YWRvIHNpbiBwaXNhciBlbCBjaGF0IHF1ZSBlbCB1c3VhcmlvIGVzdMOhIG1pcmFuZG8uXG4gICAqL1xuICBjb25zdCBjb21taXRUb1Nlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuYWRkTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2UpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgZHJvcEZyb21TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJlbW92ZU1lc3NhZ2UobWVzc2FnZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlbW92ZU1lc3NhZ2VdXG4gIClcblxuICAvKiogTGltcGlhIGVsIHRhaWwgZW4gdnVlbG8gZGUgdW5hIHNlc2nDs24gKHRyYXMgdGVybWluYXI7IGVsIGJhY2tlbmQgcGFzYSBhIHNlciBmdWVudGUpLiAqL1xuICBjb25zdCBjbGVhclNlc3Npb25UYWlsID0gdXNlQ2FsbGJhY2soKHNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnNldE1lc3NhZ2VzKHNlc3Npb25JZCwgW10pXG4gIH0sIFtdKVxuXG4gIC8vIFJlZ2lzdHJhciBsYSBzZXNpw7NuIHZpc2libGUgZW4gZWwgdHJhY2tlciBnbG9iYWwgcGFyYSBxdWUgbG9zIGNhbGxiYWNrcyBkZWxcbiAgLy8gbW90b3IgKHF1ZSBwdWVkZW4gcGVydGVuZWNlciBhIHVuYSBpbnN0YW5jaWEgeWEgZGVzbW9udGFkYSkgc2VwYW4gY3XDoWwgZXMgbGFcbiAgLy8gc2VzacOzbiBhY3RpdmEgYWN0dWFsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFjdGl2ZVZpZXcuc2V0KGFjdGl2ZVNlc3Npb25JZClcbiAgfSwgW2FjdGl2ZVNlc3Npb25JZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoY3VycmVudENoYXRJZC5jdXJyZW50KSkge1xuICAgICAgICBhY3RpdmVWaWV3LnNldChudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gUmVjb25jaWxpYWNpw7NuOiBzaSBsYSBzZXNpw7NuIGFjdGl2YSB0ZXJtaW5hIChjb21wbGV0ZS9lcnJvcikgcGVybyBlbCBzdG9yZVxuICAvLyBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICAvLyBgY2FuY2VsbGVkYCBxdWVkYSBhZnVlcmE6IGVsIHN0b3AgeWEgcmVjb25jaWxpYSBsb2NhbCAocGFyY2lhbCArIGJ1cmJ1amEgZGVcbiAgLy8gY2FuY2VsYWRvKSB5IHJlY2FyZ2FyIGFjw6EgbW9zdHJhYmEgbGEgcGFudGFsbGEgZGUgY2FyZ2EgZGVsIGNoYXQgZW50ZXJvLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGlzVGVybWluYWwgPSBzdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgc3RhdHVzID09PSAnZXJyb3InXG4gICAgaWYgKCFpc1Rlcm1pbmFsKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBgJHthY3RpdmVTZXNzaW9uSWR9OiR7c3RhdHVzfToke2FjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0ID8/ICcnfWBcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgY29uc3QgaGFzU3RhbGVQbGFjZWhvbGRlciA9IHRhaWwuc29tZShtc2cgPT4gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtc2cuaWQpKVxuICAgIGlmIChoYXNTdGFsZVBsYWNlaG9sZGVyKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKCFpbml0aWFsQ2hhdElkICYmIHByZXZpb3VzSW5pdGlhbENoYXRJZCkge1xuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgIGNvbnN0IGlzUHJvbXB0VG9vTG9uZyA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgIGNvbnN0IGlzVXNhZ2VRdW90YUV4Y2VlZGVkID0gaXNVc2FnZVF1b3RhRXhjZWVkZWRFcnJvcihlcnJvck1lc3NhZ2UpXG4gICAgICBjb25zdCBtZXNzYWdlID0gaXNBY2Nlc3NEZW5pZWRcbiAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgOiBpc1Byb21wdFRvb0xvbmdcbiAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2U/Lm1hdGNoKC8oXFxkKykgdG9rZW5zLyk/LlsxXSA/PyAnJyB9KVxuICAgICAgICAgIDogaXNVc2FnZVF1b3RhRXhjZWVkZWQgJiYgZXJyb3JSYXdNZXNzYWdlXG4gICAgICAgICAgICA/IGVycm9yUmF3TWVzc2FnZVxuICAgICAgICAgICAgOiBpc1VzYWdlUXVvdGFFeGNlZWRlZFxuICAgICAgICAgICAgICA/IHQoJ2NoYXQudXNhZ2UuYmxvY2tlZEJhbm5lcicpXG4gICAgICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgLy8gQ2hpcCBcIlJlaW50ZW50YXJcIiBzb2xvIGVuIGVsIGVycm9yIGdlbsOpcmljbyAocC4gZWouIDUwMCk7IG5vIGFwbGljYSBhIGFjY2VzcyBkZW5pZWQgbmkgcHJvbXB0IHRvbyBsb25nLlxuICAgICAgICAuLi4oIWlzQWNjZXNzRGVuaWVkICYmICFpc1Byb21wdFRvb0xvbmcgJiYgIWlzVXNhZ2VRdW90YUV4Y2VlZGVkID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHJlcGxhY2VNZXNzYWdlcywgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuXG4gICAgICAvLyBBc2VndXJhbW9zIGVsIHBsYWNlaG9sZGVyIHVuYSDDum5pY2EgdmV6IHBvciBzdHJlYW0sIHRhbnRvIGVuIGVsIHN0b3JlXG4gICAgICAvLyBkZSBsYSBzZXNpw7NuIGNvbW8gZW4gbGEgdmlzdGEgc2kgZXMgbGEgYWN0aXZhLiBFbCB0ZXh0byBlbiB2aXZvIHZpYWphXG4gICAgICAvLyBwb3Igc2Vzc2lvblN0cmVhbWluZ1RleHQgKGV4dGVybm8pLCBzaW4gcmUtcmVuZGVyIGRlbCDDoXJib2wgY29tcGxldG8uXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckV4aXN0cyA9IHVzZVNlc3Npb25zU3RvcmVcbiAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgLmdldE1lc3NhZ2VzKHNlc3Npb25JZClcbiAgICAgICAgLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKCFwbGFjZWhvbGRlckV4aXN0cykge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogcGxhY2Vob2xkZXJJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gcGxhY2Vob2xkZXJJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjdHg6IFN0cmVhbUNvbnRleHQsXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbCxcbiAgICAgIC8qKiBQb3NpY2lvbmFsOiBtYXN0ZXIgbm8gbG8gY29uc3VtZSwgcGVybyBgcmVhc29uaW5nYCB2aWVuZSBkZXNwdcOpcy4gKi9cbiAgICAgIF9yZXNvbHZlZENvbnRleHQ/OiBhbnksXG4gICAgICByZWFzb25pbmc/OiBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gcGxhY2Vob2xkZXJJZFxuICAgICAgLy8gRWwgcGxhY2Vob2xkZXIgc2FsZSBkZWwgc3RvcmUgcG9yLXNlc2nDs24geWE6IGVsIGVmZWN0byBkZSByZWNvbmNpbGlhY2nDs25cbiAgICAgIC8vIGxvIHVzYSBwYXJhIGRldGVjdGFyIHJlc3B1ZXN0YXMgaHXDqXJmYW5hcyB5IGRlIGFjw6EgYWwgY29tbWl0IHB1ZWRlIGhhYmVyXG4gICAgICAvLyB1biBhd2FpdC4gTGEgdmlzdGEgbG9jYWwgbG8gc3VlbHRhIG3DoXMgYWJham8sIGp1bnRvIGFsIGNvbW1pdC5cbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIEVsIHRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIGVzdMOhIGtleWVkIHBvciBlbCBwbGFjZWhvbGRlcjsgbG8gbW92ZW1vcyBhbFxuICAgICAgLy8gaWQgZGVmaW5pdGl2byBwYXJhIHF1ZSBlbCBibG9xdWUgZGUgcmF6b25hbWllbnRvIHNvYnJldml2YSBhbCBzd2FwLlxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWBcbiAgICAgIC8vIFByZWZlcmlyIGVsIHNuYXBzaG90IGVuIHZpdm8gKG5hcnJhY2nDs24gYW5jbGFkYSBhbCBpbmljaW8pIHNvYnJlIGVsXG4gICAgICAvLyBgY29tcGxldGVgIGRlbCBiYWNrLCBxdWUgc3VlbGUgbWFuZGFyIGVzYSBuYXJyYWNpw7NuIGFsIGZpbmFsLlxuICAgICAgY29uc3QgZmluYWxUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpID8/IG1hcFJlYXNvbmluZ1RyYWNlKHJlYXNvbmluZylcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgIH0pXG4gICAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGNvbnN0IFRBU0tfQ1JFQVRJT05fVE9PTFMgPSBbJ2NyZWF0ZV90YXNrJywgJ2NyZWF0ZV90YXNrc19iYXRjaCcsICdjbG9uZV90YXNrJ11cbiAgICAgIGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgICAgICAgJ2VkaXRfdGFzaycsXG4gICAgICAgICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgICAgICAgJ3Rhc2tfYXNzaWduJyxcbiAgICAgICAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAgICAgICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICAgICAgICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgICAgICAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbiAgICAgIF1cbiAgICAgIGNvbnN0IFRBU0tfREVMRVRFX1RPT0xTID0gWydkZWxldGVfdGFzaycsICdkZWxldGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgICAgIGNvbnN0IHdhc1Rhc2tDcmVhdGlvbiA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRWRpdCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tEZWxldGUgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgY29uc3Qgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgIGxldCBjcmVhdGVBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkpIHtcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCAmJlxuICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJlxuICAgICAgICAoY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRBZ2VudElkID1cbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHtcbiAgICAgICAgICBhZ2VudElkOiBjb25maWd1cmVkQWdlbnRJZCBhcyBzdHJpbmcsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24sIHtcbiAgICAgICAgICBhZ2VudF90eXBlOiBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KSxcbiAgICAgICAgICBhY3Rpb25fdHlwZTogYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgICAgICBvcHRpb246ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIC4uLihjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgPyB7IGNyZWF0ZWRfYWdlbnRfaWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHdhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyAmJiBub3JtYWxpemVIaXRsVG9vbE5hbWUobWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MudG9vbE5hbWUpID09PSAnY3JlYXRlX2FnZW50J1xuXG4gICAgICBpZiAod2FzTWFudWFsQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwge1xuICAgICAgICAgIGFnZW50X3R5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICAgIGFjdGlvbl90eXBlOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgcmVzb2x1dGlvbl9zb3VyY2U6ICdtYW51YWwnLFxuICAgICAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgLi4uKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSA/IHsgY3JlYXRlZF9hZ2VudF9pZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzRWRpdEFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG5cbiAgICAgIGxldCBlZGl0QWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0VkaXRBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IGZyb21TdHJlYW0gPSBjb21wbGV0ZWRBZ2VudElkPy50cmltKClcbiAgICAgICAgY29uc3QgZnJvbUFyZ3MgPSBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRBZ2VudElkID0gZnJvbVN0cmVhbSB8fCBmcm9tQXJnc1xuICAgICAgICBpZiAocmVzb2x2ZWRBZ2VudElkKSB7XG4gICAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza0lkc0Zyb21VcmxzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwgPSBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICAgICAgd2FzVGFza0RlbGV0ZSAmJiB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID09PSAwICYmIHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQoY29udGVudClcbiAgICAgICAgICA6IFtdXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID1cbiAgICAgICAgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRhc2tJZHNGcm9tVXJsc1xuICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWxcbiAgICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGlvblRleHRcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJlxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuICAgICAgaWYgKHNob3VsZFN5bmNEYXNoYm9hcmQpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IHRhc2tJZHNGb3JEYXNoYm9hcmRcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IGNvbnRleHRQcm9qZWN0SWRSYXcgPyBwYXJzZUludChTdHJpbmcoY29udGV4dFByb2plY3RJZFJhdyksIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gY29udGV4dFByb2plY3RJZCAmJiByb3V0ZVByb2plY3RJZCAmJiBjb250ZXh0UHJvamVjdElkID09PSByb3V0ZVByb2plY3RJZFxuXG4gICAgICAgIGlmIChpc09uUHJvamVjdFJvdXRlKSB7XG4gICAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tEZWxldGUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5kZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVmZXRjaCBkZWwgdGFzayBwYW5lbCBzaSBlc3TDoSBhYmllcnRvIHkgbGEgdG9vbCBhcHJvYmFkYSBlZGl0w7MvYm9ycsOzIGVzYSB0YXJlYS5cbiAgICAgIC8vIEN1YnJlIGxvcyBkb3MgZmx1am9zIGRlIGFwcHJvdmFsOlxuICAgICAgLy8gICAxKSBBcHByb3ZhbCBwb3IgYm90w7NuIOKGkiBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc2AgKHbDrWEgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSlcbiAgICAgIC8vICAgMikgTWFudWFsIGFwcHJvdmFsICh1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIpIOKGkiBgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRgXG4gICAgICBjb25zdCBvcGVuVGFza1BhbmVsSWQgPSB3aW5kb3cudGFza1BhbmVsPy50YXNrSWRcbiAgICAgIGNvbnN0IG1hbnVhbEFwcHJvdmFsID0gbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnRcbiAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gbnVsbCAvLyBjb25zdW1pciB1bmEgc29sYSB2ZXpcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tFZGl0ID0gISFtYW51YWxBcHByb3ZhbCAmJiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMobWFudWFsQXBwcm92YWwudG9vbE5hbWUpXG4gICAgICBjb25zdCBtYW51YWxXYXNUYXNrRGVsZXRlID0gISFtYW51YWxBcHByb3ZhbCAmJiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcblxuICAgICAgLy8gU3luYyBQbGFubmVyOiBhdmlzYXIgY2FyZ2EgZGUgaG9yYXMgY29uZmlybWFkYSAoY3JlYXRlX2hvdXIgLyBjcmVhdGVfaG91cnMpLlxuICAgICAgY29uc3QgaG91cnNUb29sc0Zyb21BcHByb3ZhbCA9IHBlbmRpbmdBY3Rpb25zXG4gICAgICAgIC5tYXAoKGFjdGlvbjogUGVuZGluZ0FjdGlvbikgPT4gYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAgICAgLmZpbHRlcigodG9vbE5hbWUpOiB0b29sTmFtZSBpcyBzdHJpbmcgPT4gaXNIb3Vyc0NoYXJnZVRvb2wodG9vbE5hbWUpKVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG1hbnVhbEhvdXJzVG9vbCA9IG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCA9IGlzSG91cnNDaGFyZ2VUb29sKG1hbnVhbEhvdXJzVG9vbClcblxuICAgICAgaWYgKHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgfHwgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCB0b29scyA9IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPyBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIDogbWFudWFsSG91cnNUb29sID8gW21hbnVhbEhvdXJzVG9vbF0gOiBbXVxuICAgICAgICBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQoe1xuICAgICAgICAgIHNvdXJjZTogJ21haWEnLFxuICAgICAgICAgIHRvb2xzLFxuICAgICAgICAgIHNlc3Npb25JZDogbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3dhcCBwbGFjZWhvbGRlciDihpIgbWVuc2FqZSBmaW5hbC4gVmEgZW4gYGZsdXNoU3luY2AgcG9ycXVlIGVsIG1vdG9yIHlhXG4gICAgICAvLyBkZWrDsyBlbmNvbGFkYXMgbGFzIGVzY3JpdHVyYXMgZGUgZmluIGRlIHN0cmVhbSAoaXNXcml0aW5nLCBhY3Rpdml0eSxcbiAgICAgIC8vIHN0YXR1cyksIHkgZXNhcyB2aWFqYW4gZW4gU3luY0xhbmUgcG9yIHNlciBkZSB1biBzdG9yZSBleHRlcm5vIG1pZW50cmFzXG4gICAgICAvLyBxdWUgZXN0b3Mgc2V0U3RhdGUgdmlhamFuIGVuIERlZmF1bHRMYW5lLiBTaW4gZm9yemFybG8sIFJlYWN0IHBpbnRhXG4gICAgICAvLyBwcmltZXJvIGVsIHBsYWNlaG9sZGVyIHlhIHNpbiBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkICh0dXJubyA0MXB4IG3DoXNcbiAgICAgIC8vIGJham8pIHkgcmVjacOpbiB+MjVtcyBkZXNwdcOpcyBlbCBtZW5zYWplIGRlZmluaXRpdm86IGVzZSBzYWx0byBkZSBpZGEgeVxuICAgICAgLy8gdnVlbHRhIGVyYSBlbCBmbGlja2VyIGRlIGZpbiBkZSBzdHJlYW0uIENvbiBlbCBmbHVzaCwgdG9kbyBlbCBmaW4gZGVcbiAgICAgIC8vIHN0cmVhbSBlbnRyYSBlbiB1biDDum5pY28gY29tbWl0LlxuICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiBjb250ZW50VG9BZGQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB7IGlzQ2hhdFZpZXdWaXNpYmxlLCBtYXJrQ2hhdEFzUmVhZCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICAgIGlmIChpc0FjdGl2ZSAmJiBpc0NoYXRWaWV3VmlzaWJsZSkge1xuICAgICAgICBhd2FpdCBtYXJrQ2hhdEFzUmVhZChzZXNzaW9uSWQsIHsgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICAvLyBgcGFydGlhbFRleHRgIGxvIHJlc2NhdGEgYHN0b3BTdHJlYW1gIGFudGVzIGRlIGxpbXBpYXIgZWwgc3RvcmUgZXh0ZXJubzogZWwgdGV4dG8gZW4gdml2b1xuICAvLyBubyB2aXZlIGVuIGBtZXNzYWdlc2AsIGFzw60gcXVlIHNpbiBlc3RvIGxhIHJlc3B1ZXN0YSBhIG1lZGlhcyBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGF1bnF1ZVxuICAvLyBlbCBiYWNrZW5kIHPDrSBsYSBoYXlhIHBlcnNpc3RpZG8uXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjayhcbiAgICAocGFydGlhbFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgLy8gRWwgc3RvcCBzaWVtcHJlIGFwbGljYSBhIGxhIHNlc2nDs24gYWN0aXZhIChib3TDs24gZGVsIGlucHV0IHZpc2libGUpLlxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IGZpbmFsTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gXG4gICAgICBjb25zdCBzdG9wcGVkVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGlmIChzdG9wcGVkVHJhY2U/LnN0ZXBzLmxlbmd0aCkge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2godGVtcE1lc3NhZ2VJZCwgbnVsbClcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUucmVtb3ZlKHRlbXBNZXNzYWdlSWQpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0aWFsVGV4dCkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IHBhcnRpYWxUZXh0LFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICAuLi4oc3RvcHBlZFRyYWNlID8geyByZWFzb25pbmc6IHN0b3BwZWRUcmFjZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBgJHtmaW5hbE1lc3NhZ2VJZH0tY2FuY2VsbGVkYCxcbiAgICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5tYXAoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQpLFxuICAgICAgfVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgfVxuXG4gICAgICAvLyBQcmVhcHJvYmFkbzogcG9yIGRldGVjY2nDs24gbWFudWFsIG8gcG9yIGF1dG8tYXBwcm92ZS4gRW4gYW1ib3MgY2Fzb3MgZWxcbiAgICAgIC8vIHN0cmVhbSBjb250aW7DumEgeSBubyBoYXkgcXVlIHBpbnRhciBsYSBjYWphIGRlIGFwcm9iYWNpw7NuLlxuICAgICAgaWYgKGFwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCB8fCBhcHByb3ZhbC5hdXRvX2FwcHJvdmVkIHx8IGFwcHJvdmFsLmFwcHJvdmFsX3N0YXR1cyA9PT0gJ2FwcHJvdmVkJykge1xuICAgICAgICB0cmFja01hbnVhbEhpdGxFdmVudHMoXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgeyBpbXByZXNzaW9uOiBFVkVOVFMuYWlDaGF0SGl0bCwgb3B0aW9uOiBFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiB9LFxuICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZi5jdXJyZW50LFxuICAgICAgICAgIGFwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA/ICdtYW51YWwnIDogJ2F1dG8nXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBmaXJzdEFjdGlvbiA9IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8uWzBdXG4gICAgICAgIGNvbnN0IHRvb2xOYW1lID0gKGFwcHJvdmFsIGFzIHsgdG9vbF9uYW1lPzogc3RyaW5nIH0pLnRvb2xfbmFtZSA/PyBmaXJzdEFjdGlvbj8udG9vbF9uYW1lID8/ICcnXG4gICAgICAgIGNvbnN0IHRvb2xBcmdzID1cbiAgICAgICAgICAoKGFwcHJvdmFsIGFzIHsgdG9vbF9hcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkudG9vbF9hcmdzID8/XG4gICAgICAgICAgICAoZmlyc3RBY3Rpb24/LnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICBpZiAodG9vbE5hbWUgJiYgaXNBY3RpdmUpIHtcbiAgICAgICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IHsgdG9vbE5hbWUsIHRvb2xBcmdzIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgY29uc3QgYXBwcm92YWxNZXNzYWdlSWQgPSBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YFxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHBsYWNlaG9sZGVySWQsIGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXBwcm92YWxUcmFjZSA9IG1hcFJlYXNvbmluZ1RyYWNlKGFwcHJvdmFsLnJlYXNvbmluZykgPz8gcmVhc29uaW5nVHJhY2VGb3IoYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBhcHByb3ZhbE1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICAgIHJlYXNvbmluZzogYXBwcm92YWxUcmFjZSxcbiAgICAgIH0pXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdhcHByb3ZhbF9yZXF1aXJlZCcpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQsIGNvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBldmVudF1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgYWN0aXZlU2Vzc2lvbklkLFxuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLFxuICB9KVxuXG4gIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCA9ICgpID0+IHtcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgIHNldEFjdGl2ZUxvYWRpbmdzKHt9KVxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gIH1cblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBQb29sIGRlIHVzb3MgYWdvdGFkbzogbm8gZW52aWFyIChiYW5uZXIgQmxvcXVlbyArIGlucHV0IGRpc2FibGVkKS5cbiAgICAgIGlmIChnZXRVc2FnZVN0b3JlU3RhdGUoKS5ibG9ja2VkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBUb3BlIGRlIGNvbmN1cnJlbmNpYTogc2kgZXN0YSBzZXNpw7NuIG5vIGVzdMOhIGdlbmVyYW5kbyB5IHlhIGhheVxuICAgICAgLy8gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyBhY3RpdmFzLCBhdmlzYW1vcyB5IG5vIGFycmFuY2Ftb3Mgb3RyYS5cbiAgICAgIGNvbnN0IHdpbGxTdGFydE5ld1N0cmVhbSA9ICFzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBpZiAod2lsbFN0YXJ0TmV3U3RyZWFtICYmIHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgcGF5bG9hZENvbnRleHREYXRhID0gb3B0aW9ucy5jb250ZXh0RGF0YVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoZGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQ29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiBwYXlsb2FkQ29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCByZXRyeU1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSkgcmV0dXJuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghcHJldmlvdXNNZXNzYWdlcy5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5pZCkpIHJldHVyblxuXG4gICAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICBpZiAoIXVzZXJNZXNzYWdlPy5tZXNzYWdlPy50cmltKCkgJiYgIXVzZXJNZXNzYWdlPy5hdHRhY2htZW50cz8ubGVuZ3RoICYmICF1c2VyTWVzc2FnZT8uc291cmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgIGNvbnN0IHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrID0gbWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFtZXNzYWdlLm1lbW9yeVNlc3Npb25JZD8udHJpbSgpXG4gICAgICBpZiAoIXR1cm5JZCAmJiAhdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2spIHJldHVyblxuXG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybihwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IHVzZXJNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7bmV3TWVzc2FnZUlkfS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuXG4gICAgICBjb25zdCBwbGFjZWhvbGRlcjogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0TWVzc2FnZXMgPSBbLi4udHJ1bmNhdGVkLCBwbGFjZWhvbGRlcl1cbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBuZXh0TWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhuZXh0TWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IHRydW5jYXRlZC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkKVxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gdHJ1bmNhdGVkLmF0KC0xKT8uYWdlbnRJZCB8fCBtZXNzYWdlLmFnZW50SWRcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgPyB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICA6IEFycmF5LmlzQXJyYXkodXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICA/IHVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICA6IFtdXG5cbiAgICAgIGNvbnN0IHJlcGxheVZpYU9yY2hlc3RyYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRydW5jYXRlZC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RUb1JlcXVlc3QgPyBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSkgOiBudWxsXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAgIC4uLih1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmQgPSBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzKHRocmVhZElkcywgbWVzc2FnZXNSZWYuY3VycmVudClcbiAgICAgIGlmICghZm91bmQ/Lm1lc3NhZ2UuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG1lc3NhZ2U6IG1lc3NhZ2VXaXRoQXBwcm92YWwsIHNlc3Npb25JZDogZm91bmRTZXNzaW9uSWQgfSA9IGZvdW5kXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBpZiAoIWFwcHJvdmFsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBhcHByb3ZhbC5zZXNzaW9uX2lkIHx8IGZvdW5kU2Vzc2lvbklkXG4gICAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZXNzaW9uX2lkIGRpc3BvbmlibGUgcGFyYSBhcHByb3ZhbDonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlV2l0aEFwcHJvdmFsLm1lc3NhZ2UsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHMsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQWN0aXZlU2Vzc2lvbiA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgaWYgKGlzQWN0aXZlU2Vzc2lvbikge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHsgLi4ubWVzc2FnZVdpdGhBcHByb3ZhbCwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuXG4gICAgICBjb25zdCBzdHJlYW1NZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgaWYgKGlzQWN0aXZlU2Vzc2lvbikge1xuICAgICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBzdHJlYW1NZXNzYWdlSWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bEN0eDogU3RyZWFtQ29udGV4dCA9IHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IHN0cmVhbU1lc3NhZ2VJZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoc3RyZWFtTWVzc2FnZUlkKSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNBY3RpdmVTZXNzaW9uKSByZXR1cm5cbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXNzaW9uU3RyZWFtTWFuYWdlci5zdGFydENvbnRpbnVlU3RyZWFtKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBwbGFjZWhvbGRlcklkOiBoaXRsQ3R4LnBsYWNlaG9sZGVySWQsXG4gICAgICAgIGNvbnRpbnVlUmVxdWVzdDoge1xuICAgICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgfSxcbiAgICAgICAgdCxcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ6IGhpdGxDb250ZXh0LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUsXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgIG9uU3RyZWFtVXBkYXRlOiBjb250ZW50ID0+IGhhbmRsZVN0cmVhbVVwZGF0ZShoaXRsQ3R4LCBjb250ZW50KSxcbiAgICAgICAgICBvbkZpbmlzaFN0cmVhbTogZmluaXNoUGF5bG9hZCA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goXG4gICAgICAgICAgICAgIGhpdGxDdHgsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29udGVudCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5zb3VyY2VzLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLm1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5jb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnJlc29sdmVkQ29udGV4dCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZWFzb25pbmdcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKGhpdGxDdHgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQsIGFjY3VtdWxhdGVkQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChoaXRsQ3R4LCBhcHByb3ZhbFBheWxvYWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGhhbmRsZVN0cmVhbUVycm9yLFxuICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgICAgaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRnVhID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQpXG4gICAgICBjb25zdCBoYXNJbml0aWFsU2MgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEgJiYgIWhhc0luaXRpYWxGdWEgJiYgIWhhc0luaXRpYWxTYykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBudWxsKSA/PyBjdHhQcm9qZWN0Py5pZCA/PyBudWxsXG5cbiAgICAgIGNvbnN0IGluaXRpYWxEaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkodXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCxcbiAgICAgICAgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQsXG4gICAgICB9KVxuXG4gICAgICBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyKHtcbiAgICAgICAgc2Vzc2lvbklkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoaW5pdGlhbERpc3BsYXlNZXNzYWdlKSxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBjdHhQcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgPyB7IGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkID8geyBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAuLi4oYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpXG4gICAgICAgICAgPyB7IGNvbnRleHRNZXNzYWdlOiBidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucykgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YTogdXNlckluaXRpYWxNZXNzYWdlLmNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRhc2ssXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzU2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIocHJldmlvdXNTZXNzaW9uSWQpXG4gICAgcmVhc29uaW5nU3RvcmUuY2xlYXIoKVxuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgc2V0QWN0aXZlU2Vzc2lvbklkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgfSwgW3NldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHJldHJ5TWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUNoSCxTQUF5Q0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hHLFNBQVNDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUd6RixTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0Msd0JBQXdCLEVBQUVDLGlCQUFpQixRQUFRLG1DQUFtQztBQUMvRixTQUFTQyxnQkFBZ0IsUUFBUSw2Q0FBNkM7QUFDOUUsU0FDRUMsdUJBQXVCLEVBQ3ZCQyx5QkFBeUIsRUFDekJDLHFCQUFxQixFQUNyQkMscUJBQXFCLFFBQ2hCLDJCQUEyQjtBQUVsQyxTQUFTQyxvQkFBb0IsUUFBUSwyQ0FBMkM7QUFDaEYsU0FBU0MsZ0JBQWdCLFFBQVEs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