@projectcor/maia-components 2.11.11-6 → 2.11.11

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 (66) hide show
  1. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +70 -0
  2. package/lib/components/atoms/ChatClientSelector/index.js +2 -0
  3. package/lib/components/atoms/Chip/Chip.js +4 -3
  4. package/lib/components/atoms/Chip/styles.js +3 -3
  5. package/lib/components/atoms/EntitySelector/EntitySelector.js +195 -0
  6. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +63 -0
  7. package/lib/components/atoms/EntitySelector/index.js +2 -0
  8. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +5 -3
  9. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +33 -52
  10. package/lib/components/atoms/ProjectSelector/ProjectSelector.js +57 -193
  11. package/lib/components/atoms/index.js +1 -2
  12. package/lib/components/index.js +2 -1
  13. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +50 -0
  14. package/lib/components/molecules/ChatAIClientSelector/index.js +2 -0
  15. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +9 -1
  16. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +2 -3
  17. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +105 -213
  18. package/lib/components/molecules/ChatAIMessages/newStyles.js +3 -5
  19. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -17
  20. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -6
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +5 -3
  22. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  23. package/lib/components/molecules/ChatFooter/ChatFooter.js +13 -28
  24. package/lib/components/molecules/ChatFooter/styles.js +1 -5
  25. package/lib/components/molecules/Sidebar/Sidebar.js +8 -2
  26. package/lib/components/organisms/ChatAI/ChatAI.js +11 -3
  27. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +26 -0
  28. package/lib/components/organisms/ClientAIButton/index.js +2 -0
  29. package/lib/constants/config.js +3 -2
  30. package/lib/context/global-context.js +1 -1
  31. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  32. package/lib/hooks/useChatManager/useChatManager.js +69 -31
  33. package/lib/hooks/useChatMessages/useChatMessages.js +133 -121
  34. package/lib/hooks/useChats/useChats.js +10 -6
  35. package/lib/hooks/useFrequentlyAskedQuestions.js +53 -68
  36. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  37. package/lib/hooks/useProjectSearch.js +15 -8
  38. package/lib/hooks/useProjectSummaryConfig.js +35 -7
  39. package/lib/hooks/useRecentClientsSearch.js +180 -0
  40. package/lib/lang/br/index.js +27 -7
  41. package/lib/lang/en/index.js +27 -7
  42. package/lib/lang/es/index.js +27 -7
  43. package/lib/lang/fr/index.js +21 -2
  44. package/lib/services/maia/Agents/getAgents.js +10 -7
  45. package/lib/services/maia/Chats/getChatMessages.js +30 -16
  46. package/lib/services/maia/Chats/getChatsByUserId.js +4 -3
  47. package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
  48. package/lib/services/maia/RecentClients/getRecentClients.js +43 -0
  49. package/lib/services/maia/RecentClients/index.js +6 -0
  50. package/lib/services/maia/index.js +4 -2
  51. package/lib/services/utils/mapChatMessages.js +12 -4
  52. package/lib/store/chatsStore.types.js +1 -1
  53. package/lib/store/index.js +1 -2
  54. package/lib/store/useChatsStore.js +9 -7
  55. package/lib/types/Chat.js +1 -1
  56. package/lib/types/Client.js +2 -0
  57. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  58. package/lib/types/agent.js +1 -1
  59. package/package.json +1 -1
  60. package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +0 -9
  61. package/lib/components/atoms/ChatDisclaimerMessage/index.js +0 -2
  62. package/lib/components/atoms/ChatDisclaimerMessage/styles.js +0 -6
  63. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +0 -173
  64. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +0 -51
  65. package/lib/store/faqsStore.types.js +0 -2
  66. package/lib/store/useFaqsStore.js +0 -27
@@ -151,6 +151,8 @@ export var useChatManager = function useChatManager(_ref2) {
151
151
  var _useGlobalContext = useGlobalContext(),
152
152
  project = _useGlobalContext.project,
153
153
  setProject = _useGlobalContext.setProject,
154
+ client = _useGlobalContext.client,
155
+ setClient = _useGlobalContext.setClient,
154
156
  agent = _useGlobalContext.agent,
155
157
  isWebSearchActive = _useGlobalContext.isWebSearchActive,
156
158
  isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
@@ -207,6 +209,7 @@ export var useChatManager = function useChatManager(_ref2) {
207
209
  if (initialChatId && initialChatId !== currentChatId.current) {
208
210
  // Limpiar contexto global al cambiar de conversación
209
211
  setProject(null);
212
+ setClient === null || setClient === void 0 || setClient(null);
210
213
  setChipsProject(null);
211
214
  currentChatId.current = initialChatId;
212
215
  currentMessageId.current = uuidv4();
@@ -215,7 +218,7 @@ export var useChatManager = function useChatManager(_ref2) {
215
218
  isProcessingRef.current = false;
216
219
  loadMessages();
217
220
  }
218
- }, [initialChatId, project, setProject, setChipsProject, loadMessages]);
221
+ }, [initialChatId, project, setProject, setClient, setChipsProject, loadMessages]);
219
222
 
220
223
  // Sincronizar chipsProject cuando hay mensajes con projectId pero chipsProject no se ha seteado
221
224
  useEffect(function () {
@@ -240,7 +243,6 @@ export var useChatManager = function useChatManager(_ref2) {
240
243
  });
241
244
  setProject(found);
242
245
  } else if (projectName) {
243
- // Fallback: usar projectName del mensaje cuando fetchProjects no devuelve el proyecto
244
246
  setChipsProject({
245
247
  projectName: projectName,
246
248
  clientName: '',
@@ -253,6 +255,22 @@ export var useChatManager = function useChatManager(_ref2) {
253
255
  }
254
256
  });
255
257
  }, [messages, chipsProject, loadingMessages, fetchProjects, setChipsProject, setProject]);
258
+
259
+ // Sincronizar client cuando hay mensajes con clientId pero client no se ha seteado
260
+ useEffect(function () {
261
+ if (client || loadingMessages) return;
262
+ var lastMsgWithClient = messages.filter(function (msg) {
263
+ return msg.clientId != null && msg.clientName;
264
+ }).at(-1);
265
+ var _ref4 = lastMsgWithClient || {},
266
+ msgClientId = _ref4.clientId,
267
+ msgClientName = _ref4.clientName;
268
+ if (msgClientId == null || !msgClientName) return;
269
+ setClient === null || setClient === void 0 || setClient({
270
+ id: Number(msgClientId),
271
+ name: msgClientName
272
+ });
273
+ }, [messages, client, loadingMessages, setClient]);
256
274
  var handleStreamError = useCallback(function (errorMessage) {
257
275
  var message = errorMessage === "Access denied: You don't have permission to access this agent" ? t('chat.errorAccessDenied') : t('chat.error');
258
276
  addMessage({
@@ -284,7 +302,7 @@ export var useChatManager = function useChatManager(_ref2) {
284
302
  });
285
303
  }, [addMessage]);
286
304
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
287
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId) {
305
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId) {
288
306
  var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, _window$newProjectDas, customEvent;
289
307
  return _regeneratorRuntime.wrap(function (_context2) {
290
308
  while (1) switch (_context2.prev = _context2.next) {
@@ -355,7 +373,7 @@ export var useChatManager = function useChatManager(_ref2) {
355
373
  }, _callee2);
356
374
  }));
357
375
  return function (_x4, _x5, _x6) {
358
- return _ref4.apply(this, arguments);
376
+ return _ref5.apply(this, arguments);
359
377
  };
360
378
  }(), [addMessage, removeMessage, project, getTabTaskDefault]);
361
379
  var handleStreamStop = useCallback(function () {
@@ -409,21 +427,32 @@ export var useChatManager = function useChatManager(_ref2) {
409
427
  stopStreaming = _useOrchestratorStrea.stopStreaming;
410
428
  var currentProject = project;
411
429
  var sendMessage = useCallback(/*#__PURE__*/function () {
412
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId) {
413
- var _attachments, _messagesRef$current;
414
- var opts, options, attachments, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadData;
430
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message) {
431
+ var _messagesRef$current, _project$client;
432
+ var options,
433
+ newMessageId,
434
+ lastMessageWithProject,
435
+ currentAgentFromMessages,
436
+ finalMessage,
437
+ _options$projectChang,
438
+ history,
439
+ contextProjectId,
440
+ lastMessageProjectId,
441
+ projectToRequest,
442
+ parsed,
443
+ projects,
444
+ payloadData,
445
+ _args3 = arguments;
415
446
  return _regeneratorRuntime.wrap(function (_context3) {
416
447
  while (1) switch (_context3.prev = _context3.next) {
417
448
  case 0:
449
+ options = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};
418
450
  if (!(isProcessingRef.current || waitingResponse || loadingMessages)) {
419
451
  _context3.next = 1;
420
452
  break;
421
453
  }
422
454
  return _context3.abrupt("return");
423
455
  case 1:
424
- opts = attachmentsOrOptions !== null && attachmentsOrOptions !== void 0 ? attachmentsOrOptions : {};
425
- options = Array.isArray(attachmentsOrOptions) ? {} : opts;
426
- attachments = Array.isArray(attachmentsOrOptions) ? attachmentsOrOptions : (_attachments = opts === null || opts === void 0 ? void 0 : opts.attachments) !== null && _attachments !== void 0 ? _attachments : [];
427
456
  isProcessingRef.current = true;
428
457
  newMessageId = uuidv4();
429
458
  currentMessageId.current = newMessageId;
@@ -444,7 +473,7 @@ export var useChatManager = function useChatManager(_ref2) {
444
473
  date: new Date(),
445
474
  user: currentUser,
446
475
  role: ChatHistoryRole.USER,
447
- sources: Array.isArray(attachmentsOrOptions) ? attachmentsOrOptions : attachments
476
+ sources: Array.isArray(options) ? options : []
448
477
  });
449
478
  currentMessageId.current = uuidv4();
450
479
  finalMessage = message;
@@ -472,7 +501,6 @@ export var useChatManager = function useChatManager(_ref2) {
472
501
  return fetchProjects([projectToRequest]);
473
502
  case 2:
474
503
  projects = _context3.sent;
475
- payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
476
504
  payloadData = _objectSpread(_objectSpread(_objectSpread({
477
505
  message: finalMessage,
478
506
  history: history,
@@ -486,12 +514,18 @@ export var useChatManager = function useChatManager(_ref2) {
486
514
  agentId: currentAgentFromMessages || (agent === null || agent === void 0 ? void 0 : agent.id),
487
515
  isWebSearchActive: isWebSearchActiveRef.current,
488
516
  isDeepSearchActive: isDeepSearchActiveRef.current
489
- }, projects !== null && projects !== void 0 && projects.length ? {
517
+ }, client !== null && client !== void 0 && client.id ? _objectSpread({
518
+ clientId: client.id
519
+ }, client.name ? {
520
+ clientName: client.name
521
+ } : {}) : project !== null && project !== void 0 && (_project$client = project.client) !== null && _project$client !== void 0 && _project$client.id ? _objectSpread({
522
+ clientId: project.client.id
523
+ }, project.client.name ? {
524
+ clientName: project.client.name
525
+ } : {}) : {}), projects !== null && projects !== void 0 && projects.length ? {
490
526
  projectName: projects[0].name
491
- } : {}), attachments.length > 0 ? {
492
- attachments: attachments
493
- } : {}), payloadFaqId ? {
494
- faqId: payloadFaqId
527
+ } : {}), Array.isArray(options) ? {
528
+ attachments: options
495
529
  } : {});
496
530
  askMaia(payloadData);
497
531
  case 3:
@@ -500,10 +534,10 @@ export var useChatManager = function useChatManager(_ref2) {
500
534
  }
501
535
  }, _callee3);
502
536
  }));
503
- return function (_x7, _x8, _x9) {
504
- return _ref5.apply(this, arguments);
537
+ return function (_x7) {
538
+ return _ref6.apply(this, arguments);
505
539
  };
506
- }(), [addMessage, event, askMaia, project, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
540
+ }(), [addMessage, event, askMaia, project, client, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
507
541
  var changeProject = useCallback(function (option) {
508
542
  if (!currentUserQuestion.current) return;
509
543
  if (option.id !== (project === null || project === void 0 ? void 0 : project.id)) {
@@ -533,7 +567,7 @@ export var useChatManager = function useChatManager(_ref2) {
533
567
  }
534
568
  }, [project, setProject, askMaia, authUser, isWebSearchActive]);
535
569
  var handleFeedback = useCallback(/*#__PURE__*/function () {
536
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
570
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
537
571
  var response;
538
572
  return _regeneratorRuntime.wrap(function (_context4) {
539
573
  while (1) switch (_context4.prev = _context4.next) {
@@ -558,12 +592,12 @@ export var useChatManager = function useChatManager(_ref2) {
558
592
  }
559
593
  }, _callee4);
560
594
  }));
561
- return function (_x0, _x1) {
562
- return _ref6.apply(this, arguments);
595
+ return function (_x8, _x9) {
596
+ return _ref7.apply(this, arguments);
563
597
  };
564
598
  }(), []);
565
599
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
566
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadId, decision, editedActions) {
600
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadId, decision, editedActions) {
567
601
  var messageWithApproval, approval, messageId, existingMessage, newStatus, response, _t;
568
602
  return _regeneratorRuntime.wrap(function (_context5) {
569
603
  while (1) switch (_context5.prev = _context5.next) {
@@ -686,12 +720,12 @@ export var useChatManager = function useChatManager(_ref2) {
686
720
  }
687
721
  }, _callee5, null, [[2, 6]]);
688
722
  }));
689
- return function (_x10, _x11, _x12) {
690
- return _ref7.apply(this, arguments);
723
+ return function (_x0, _x1, _x10) {
724
+ return _ref8.apply(this, arguments);
691
725
  };
692
726
  }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish]);
693
727
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
694
- var _project$client, _project$client2, history;
728
+ var _project$client2, _project$client3, history;
695
729
  return _regeneratorRuntime.wrap(function (_context6) {
696
730
  while (1) switch (_context6.prev = _context6.next) {
697
731
  case 0:
@@ -728,12 +762,16 @@ export var useChatManager = function useChatManager(_ref2) {
728
762
  agentId: agent === null || agent === void 0 ? void 0 : agent.id,
729
763
  isWebSearchActive: isWebSearchActiveRef.current,
730
764
  isDeepSearchActive: isDeepSearchActiveRef.current
731
- }, project !== null && project !== void 0 && (_project$client = project.client) !== null && _project$client !== void 0 && _project$client.id ? {
765
+ }, client !== null && client !== void 0 && client.id ? {
766
+ clientId: client.id
767
+ } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
732
768
  clientId: project.client.id
733
769
  } : {}), project !== null && project !== void 0 && project.name ? {
734
770
  projectName: project.name
735
- } : {}), project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.name ? {
771
+ } : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
736
772
  clientName: project.client.name
773
+ } : client !== null && client !== void 0 && client.name ? {
774
+ clientName: client.name
737
775
  } : {}), userInitialMessage.attachments ? {
738
776
  attachments: userInitialMessage.attachments
739
777
  } : {}), userInitialMessage.faqId ? {
@@ -745,7 +783,7 @@ export var useChatManager = function useChatManager(_ref2) {
745
783
  return _context6.stop();
746
784
  }
747
785
  }, _callee6);
748
- })), [initialChatId, userInitialMessage, project, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
786
+ })), [initialChatId, userInitialMessage, project, client, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
749
787
  var resetChat = useCallback(function () {
750
788
  currentMessageId.current = uuidv4();
751
789
  currentUserQuestion.current = null;
@@ -778,4 +816,4 @@ export var useChatManager = function useChatManager(_ref2) {
778
816
  isDisabled: waitingResponse || loadingMessages
779
817
  };
780
818
  };
781
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsImlkIiwidG9TdHJpbmciLCJuYW1lIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJwYXJzZVNTRUxpbmUiLCJsaW5lIiwidHJpbSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInRocmVhZElkIiwiY2FsbGJhY2tzIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaXNTdHJlYW1Db21wbGV0ZSIsImhhbmRsZUxpbmUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsImkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl9oYW5kbGVMaW5lIiwicGFyc2VkIiwiZXZlbnREYXRhIiwiY29udGVudCIsIm9uVG9rZW4iLCJtZXNzYWdlIiwib25Ob2RlIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwib25Db21wbGV0ZSIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYyIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYyJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjMiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwiZmluZCIsInAiLCJOdW1iZXIiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsImNsaWVudCIsIlN0cmluZyIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJ0ZW1wTWVzc2FnZUlkIiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjQiLCJfY2FsbGVlMiIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJtYXAiLCJtYXRjaCIsInBhcnNlSW50IiwidXJsIiwid2luZG93IiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsIl94NCIsIl94NSIsIl94NiIsImhhbmRsZVN0cmVhbVN0b3AiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwic2V0VGltZW91dCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJhcHByb3ZhbFN0YXR1cyIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsImZhcUlkIiwiX2F0dGFjaG1lbnRzIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJvcHRzIiwib3B0aW9ucyIsImF0dGFjaG1lbnRzIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsImZpbmFsTWVzc2FnZSIsIl9vcHRpb25zJHByb2plY3RDaGFuZyIsImhpc3RvcnkiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsInByb2plY3RUb1JlcXVlc3QiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MyIsIkFycmF5IiwiaXNBcnJheSIsInBtQWlUeXBlZFRleHQiLCJhZ2VudElkIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwiaXNGaW5pdGUiLCJfb2JqZWN0U3ByZWFkIiwibGFuZyIsInVzZXJJZCIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJtZXNzYWdlSWQiLCJhZ2VudE5hbWUiLCJfeDciLCJfeDgiLCJfeDkiLCJjaGFuZ2VQcm9qZWN0Iiwib3B0aW9uIiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNiIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gwIiwiX3gxIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY3IiwiX2NhbGxlZTUiLCJkZWNpc2lvbiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZXhpc3RpbmdNZXNzYWdlIiwibmV3U3RhdHVzIiwiX3QiLCJfY29udGV4dDUiLCJfbSRhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl9wcm9qZWN0JGNsaWVudCIsIl9wcm9qZWN0JGNsaWVudDIiLCJfY29udGV4dDYiLCJjbGllbnRJZCIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBwYXJzZVNTRUxpbmUgPSAobGluZTogc3RyaW5nKTogeyBldmVudFR5cGU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gIGlmICghbGluZS50cmltKCkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICByZXR1cm4geyBldmVudFR5cGUsIGRhdGEgfVxuICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1NTRVN0cmVhbSA9IGFzeW5jIChcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICB0aHJlYWRJZDogc3RyaW5nLFxuICBjYWxsYmFja3M6IHtcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKGZpbmFsQ29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaXNTdHJlYW1Db21wbGV0ZSA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gaGFuZGxlTGluZShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNTRUxpbmUobGluZSlcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IGV2ZW50VHlwZSwgZGF0YSB9ID0gcGFyc2VkXG4gICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3Rva2VuJykge1xuICAgICAgY29uc3QgY29udGVudCA9IGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZ1xuICAgICAgYWNjdW11bGF0ZWRDb250ZW50ICs9IGNvbnRlbnRcbiAgICAgIGNhbGxiYWNrcy5vblRva2VuKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ25vZGUnKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGV2ZW50RGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjYWxsYmFja3Mub25Ob2RlKGV2ZW50RGF0YS5tZXNzYWdlLCB0aHJlYWRJZClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICBjb25zdCBzb3VyY2VzID0gKGV2ZW50RGF0YS5zb3VyY2VzIGFzIHVua25vd24pIHx8IG51bGxcbiAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZXJyb3InKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihldmVudERhdGEuZXJyb3IsIHRocmVhZElkKVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICghaXNTdHJlYW1Db21wbGV0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICBpc1N0cmVhbUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBwcm9qZWN0LCBzZXRQcm9qZWN0LCBhZ2VudCwgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgY2hpcHNQcm9qZWN0LCBzZXRDaGlwc1Byb2plY3QgfSA9XG4gICAgdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICAvLyBGYWxsYmFjazogdXNhciBwcm9qZWN0TmFtZSBkZWwgbWVuc2FqZSBjdWFuZG8gZmV0Y2hQcm9qZWN0cyBubyBkZXZ1ZWx2ZSBlbCBwcm95ZWN0b1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCAmJiBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICAgICAgICApXG5cbiAgICAgICAgLy8gU29sbyBhw7FhZGlyIGFsIGRhc2hib2FyZCBjdWFuZG8gbGEgcnV0YSBhY3R1YWwgY29pbmNpZGUgY29uIGVsIHByb3llY3RvIGRlbCBjaGF0XG4gICAgICAgIGNvbnN0IGxhc3RQcm9qZWN0TWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZFJhdyA9IHByb2plY3Q/LmlkIHx8IGxhc3RQcm9qZWN0TWVzc2FnZT8ucHJvamVjdElkXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBjb250ZXh0UHJvamVjdElkUmF3ID8gcGFyc2VJbnQoU3RyaW5nKGNvbnRleHRQcm9qZWN0SWRSYXcpLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IHBhdGhNYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXlxcL3Byb2plY3RzXFwvKFxcZCspXFwvLylcbiAgICAgICAgY29uc3Qgcm91dGVQcm9qZWN0SWQgPSBwYXRoTWF0Y2ggPyBwYXJzZUludChwYXRoTWF0Y2hbMV0sIDEwKSA6IG51bGxcbiAgICAgICAgaWYgKGNvbnRleHRQcm9qZWN0SWQgJiYgcm91dGVQcm9qZWN0SWQgJiYgY29udGV4dFByb2plY3RJZCA9PT0gcm91dGVQcm9qZWN0SWQpIHtcbiAgICAgICAgICBpZiAod2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZC5hZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCh0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucywgZmFxSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRzID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgICAgIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpID8ge30gOiAob3B0cyBhcyBTZW5kTWVzc2FnZU9wdGlvbnMpXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICAgID8gYXR0YWNobWVudHNPck9wdGlvbnNcbiAgICAgICAgOiAoKG9wdHMgYXMgU2VuZE1lc3NhZ2VPcHRpb25zKT8uYXR0YWNobWVudHMgPz8gW10pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpID8gYXR0YWNobWVudHNPck9wdGlvbnMgOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZDogc3RyaW5nLCAvLyBDaGFuZ2VkIGZyb20gYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgZXN0ZSB0aHJlYWRJZCBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkID09PSB0aHJlYWRJZClcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZDonLCB0aHJlYWRJZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcblxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIGJvdGggYXBwcm92ZSBhbmQgcmVqZWN0LCBjYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIHNwZWNpZmljIHRocmVhZF9pZFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZyBmb3IgdGhpcyB0aHJlYWRcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW3RocmVhZElkXTogJ1Byb2Nlc2FuZG8uLi4nLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkLCAvLyBVc2Ugc3BlY2lmaWMgYWN0aW9uIHRocmVhZF9pZFxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAvLyBSZW1vdmUgbG9hZGluZyBvbiBlcnJvclxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW3RocmVhZElkXVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIG1hbnVhbGx5IHRvIHRyYWNrIGxvYWRpbmcgcGVyIHRocmVhZFxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCB0aHJlYWRJZCwge1xuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IG1lc3NhZ2UsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChmaW5hbENvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIC8vIFJlbW92ZSBsb2FkaW5nIG9uIGVycm9yXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbdGhyZWFkSWRdXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2hdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCB1c2VySW5pdGlhbE1lc3NhZ2UsIHByb2plY3QsIGF1dGhVc2VyLCBhZ2VudCwgYXNrTWFpYSwgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF5QixrQkFBa0I7QUFHakcsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBRWpFLElBQU1DLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUlDLFFBQWlCLEVBQUs7RUFDaEQsSUFBTUMsV0FBVyxHQUFHcEIsTUFBTSxDQUFrQjtJQUMxQ3FCLEVBQUUsRUFBRUYsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0lBQzFCQyxJQUFJLEVBQUVKLFFBQVEsQ0FBQ0ssU0FBUztJQUN4QkMsTUFBTSxFQUFFTixRQUFRLENBQUNPO0VBQ25CLENBQUMsQ0FBQztFQUVGLElBQ0VOLFdB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
819
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsImlkIiwidG9TdHJpbmciLCJuYW1lIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJwYXJzZVNTRUxpbmUiLCJsaW5lIiwidHJpbSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInRocmVhZElkIiwiY2FsbGJhY2tzIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaXNTdHJlYW1Db21wbGV0ZSIsImhhbmRsZUxpbmUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsImkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl9oYW5kbGVMaW5lIiwicGFyc2VkIiwiZXZlbnREYXRhIiwiY29udGVudCIsIm9uVG9rZW4iLCJtZXNzYWdlIiwib25Ob2RlIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwib25Db21wbGV0ZSIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYyIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYyJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjMiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwiZmluZCIsInAiLCJOdW1iZXIiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsIlN0cmluZyIsImxhc3RNc2dXaXRoQ2xpZW50IiwiY2xpZW50SWQiLCJfcmVmNCIsIm1zZ0NsaWVudElkIiwibXNnQ2xpZW50TmFtZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJ0ZW1wTWVzc2FnZUlkIiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjUiLCJfY2FsbGVlMiIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJtYXAiLCJtYXRjaCIsInBhcnNlSW50IiwidXJsIiwid2luZG93IiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsIl94NCIsIl94NSIsIl94NiIsImhhbmRsZVN0cmVhbVN0b3AiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwic2V0VGltZW91dCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJhcHByb3ZhbFN0YXR1cyIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIm9wdGlvbnMiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWREYXRhIiwiX2FyZ3MzIiwiX2NvbnRleHQzIiwidW5kZWZpbmVkIiwicG1BaVR5cGVkVGV4dCIsImFnZW50SWQiLCJVU0VSIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJsYW5nIiwidXNlcklkIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsIm1lc3NhZ2VJZCIsImFnZW50TmFtZSIsImF0dGFjaG1lbnRzIiwiX3g3IiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjciLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94OCIsIl94OSIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYWN0aW9uIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsIl94MCIsIl94MSIsIl94MTAiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJfY29udGV4dDYiLCJmYXFJZCIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChmaW5hbENvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDAgJiYgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICBjb250ZW50VG9BZGQgPSBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIFNvbG8gYcOxYWRpciBhbCBkYXNoYm9hcmQgY3VhbmRvIGxhIHJ1dGEgYWN0dWFsIGNvaW5jaWRlIGNvbiBlbCBwcm95ZWN0byBkZWwgY2hhdFxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGlmIChjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkKSB7XG4gICAgICAgICAgaWYgKHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5hZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQuYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQodGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRNZXNzYWdlKHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2FkZE1lc3NhZ2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogW10sXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBwcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIC8vIFZlcmlmaWNhciBjb25zaXN0ZW5jaWEgZW50cmUgY29udGV4dG8gZ2xvYmFsIHkgw7psdGltbyBtZW5zYWplXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdD8uaWRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG5cbiAgICAgIGxldCBwcm9qZWN0VG9SZXF1ZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBTaSBoYXkgw7psdGltbyBtZW5zYWplIGNvbiBwcm9qZWN0SWQsIHVzYXJsbyAobcOhcyBjb25maWFibGUpXG4gICAgICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIC8vIFNpIG5vIGhheSDDumx0aW1vIG1lbnNhamUsIHVzYXIgZWwgY29udGV4dG8gZ2xvYmFsXG4gICAgICBlbHNlIGlmIChjb250ZXh0UHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IGNvbnRleHRQcm9qZWN0SWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IHsgYXR0YWNobWVudHM6IG9wdGlvbnMgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmVdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWQ6IHN0cmluZywgLy8gQ2hhbmdlZCBmcm9tIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3RcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGVzdGUgdGhyZWFkSWQgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCA9PT0gdGhyZWFkSWQpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWQ6JywgdGhyZWFkSWQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG5cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBib3RoIGFwcHJvdmUgYW5kIHJlamVjdCwgY2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBzcGVjaWZpYyB0aHJlYWRfaWRcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmcgZm9yIHRoaXMgdGhyZWFkXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFt0aHJlYWRJZF06ICdQcm9jZXNhbmRvLi4uJyxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZCwgLy8gVXNlIHNwZWNpZmljIGFjdGlvbiB0aHJlYWRfaWRcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgLy8gUmVtb3ZlIGxvYWRpbmcgb24gZXJyb3JcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1t0aHJlYWRJZF1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBtYW51YWxseSB0byB0cmFjayBsb2FkaW5nIHBlciB0aHJlYWRcbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgdGhyZWFkSWQsIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBtZXNzYWdlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoZmluYWxDb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAvLyBSZW1vdmUgbG9hZGluZyBvbiBlcnJvclxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW3RocmVhZElkXVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLCBhZ2VudCwgYWRkTWVzc2FnZSwgaGFuZGxlU3RyZWFtRXJyb3IsIGhhbmRsZVN0cmVhbVVwZGF0ZSwgaGFuZGxlU3RyZWFtRmluaXNoXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkID8geyBjbGllbnRJZDogY2xpZW50LmlkIH0gOiBwcm9qZWN0Py5jbGllbnQ/LmlkID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRTlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFR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