@sapui5/sap.fe.core 1.136.0 → 1.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +4 -6
  4. package/src/sap/fe/core/AppComponent.ts +4 -4
  5. package/src/sap/fe/core/CommonUtils.js +41 -14
  6. package/src/sap/fe/core/CommonUtils.ts +47 -16
  7. package/src/sap/fe/core/IRowBindingInterface.js +1 -1
  8. package/src/sap/fe/core/IRowBindingInterface.ts +1 -1
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +4 -1
  10. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +3 -0
  11. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +12 -4
  12. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +10 -3
  13. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +139 -5
  14. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +169 -4
  15. package/src/sap/fe/core/controllerextensions/EditFlow.js +48 -43
  16. package/src/sap/fe/core/controllerextensions/EditFlow.ts +54 -51
  17. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +39 -5
  18. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +38 -1
  19. package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -13
  20. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +10 -11
  21. package/src/sap/fe/core/controllerextensions/MessageHandler.js +32 -21
  22. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +31 -20
  23. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -3
  24. package/src/sap/fe/core/controllerextensions/PageReady.ts +6 -2
  25. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Recommendations.ts +7 -5
  27. package/src/sap/fe/core/controllerextensions/Share.js +6 -6
  28. package/src/sap/fe/core/controllerextensions/Share.ts +3 -4
  29. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +9 -11
  30. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +8 -13
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +9 -9
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +20 -10
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +31 -8
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +46 -9
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +20 -18
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +37 -23
  39. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +4 -3
  40. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +6 -1
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +6 -3
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +11 -3
  43. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -2
  44. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -2
  45. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +2 -2
  46. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +1 -1
  47. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  48. package/src/sap/fe/core/controls/CommandExecution.ts +1 -1
  49. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +3 -2
  50. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +2 -0
  51. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -2
  52. package/src/sap/fe/core/converters/controls/Common/Action.ts +4 -1
  53. package/src/sap/fe/core/converters/controls/Common/Chart.js +7 -2
  54. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -1
  55. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +41 -58
  56. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +43 -111
  57. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +14 -6
  58. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -6
  59. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -3
  60. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -2
  61. package/src/sap/fe/core/formatters/ValueFormatter.js +21 -1
  62. package/src/sap/fe/core/formatters/ValueFormatter.ts +19 -0
  63. package/src/sap/fe/core/fpm/manifest.json +1 -1
  64. package/src/sap/fe/core/helpers/DeleteHelper.js +2 -2
  65. package/src/sap/fe/core/helpers/DeleteHelper.ts +1 -1
  66. package/src/sap/fe/core/helpers/ModelHelper.js +2 -2
  67. package/src/sap/fe/core/helpers/ModelHelper.ts +1 -1
  68. package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
  69. package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
  70. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  71. package/src/sap/fe/core/helpers/StableIdHelper.ts +4 -1
  72. package/src/sap/fe/core/helpers/TitleHelper.js +13 -6
  73. package/src/sap/fe/core/helpers/TitleHelper.ts +19 -6
  74. package/src/sap/fe/core/library.js +1 -1
  75. package/src/sap/fe/core/messagebundle.properties +0 -1
  76. package/src/sap/fe/core/rootView/Fcl.controller.js +9 -15
  77. package/src/sap/fe/core/rootView/Fcl.controller.ts +9 -15
  78. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +9 -6
  79. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -6
  80. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  81. package/src/sap/fe/core/templating/DataModelPathHelper.ts +1 -1
  82. package/src/sap/fe/core/templating/EntitySetHelper.js +60 -48
  83. package/src/sap/fe/core/templating/EntitySetHelper.ts +80 -58
  84. package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -4
  85. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +5 -5
  86. package/src/sap/fe/core/templating/UIFormatters.js +7 -1
  87. package/src/sap/fe/core/templating/UIFormatters.ts +4 -0
@@ -462,13 +462,17 @@ async function executeDraftDiscardAction(
462
462
  * @param rightmostCurrentContext The context of the subobject page
463
463
  * @param rootContextInfo The context info of root of the draft
464
464
  * @param groupId
465
+ * @param bindingParameters Optional binding parameters when creating the context
466
+ * @param createKeepAliveContext If set to true, the context will be created as a keep-alive context
465
467
  * @returns The siblingInformation object
466
468
  */
467
469
  async function computeSiblingInformation(
468
470
  rootCurrentContext: Context,
469
471
  rightmostCurrentContext: Context,
470
472
  rootContextInfo?: RootContextInfo,
471
- groupId?: string
473
+ groupId?: string,
474
+ bindingParameters?: object,
475
+ createKeepAliveContext = false
472
476
  ): Promise<SiblingInformation | undefined> {
473
477
  if (!rightmostCurrentContext.getPath().startsWith(rootCurrentContext.getPath())) {
474
478
  // Wrong usage !!
@@ -563,13 +567,27 @@ async function computeSiblingInformation(
563
567
  newPaths.unshift(siblingPath);
564
568
  });
565
569
 
570
+ let parameters: { $select?: string; $$groupId?: string };
571
+ const messagePath = getMessagePathForContext(rightmostCurrentContext);
572
+ if (createKeepAliveContext) {
573
+ parameters = {};
574
+ } else {
575
+ parameters = bindingParameters ?? {};
576
+ if (messagePath) {
577
+ if (parameters.$select) {
578
+ parameters.$select += `,${messagePath}`;
579
+ } else {
580
+ parameters.$select = messagePath;
581
+ }
582
+ }
583
+ }
584
+
585
+ parameters.$$groupId = "$auto.Heroes";
586
+
566
587
  return {
567
- targetContext: model
568
- .bindContext(siblingPath, undefined, {
569
- $select: getMessagePathForContext(rightmostCurrentContext),
570
- $$groupId: "$auto.Heroes"
571
- })
572
- .getBoundContext(), // Create the rightmost sibling context from its path
588
+ targetContext: createKeepAliveContext
589
+ ? model.getKeepAliveContext(siblingPath, !!messagePath, parameters)
590
+ : model.bindContext(siblingPath, undefined, parameters).getBoundContext(), // Create the rightmost sibling context from its path
573
591
  pathMapping: oldPaths.map((oldPath, index) => {
574
592
  return {
575
593
  oldPath,
@@ -594,6 +612,8 @@ async function computeSiblingInformation(
594
612
  * @param [mParameters.bPreserveChanges] Preserve changes of an existing draft of another user
595
613
  * @param groupId The batch groupId for post call of edit action
596
614
  * @param messageHandler The message handler controller extension
615
+ * @param transactionDetails Optional object to return additional details about how the transaction was executed
616
+ * @param transactionDetails.existingDraftReused An existing draft was returned, instead of returning a new one
597
617
  * @returns Promise resolves with the {@link sap.ui.model.odata.v4.Context context} of the new draft document
598
618
  */
599
619
  async function createDraftFromActiveDocument(
@@ -604,7 +624,10 @@ async function createDraftFromActiveDocument(
604
624
  bPreserveChanges?: boolean | undefined;
605
625
  },
606
626
  groupId: string,
607
- messageHandler: MessageHandler
627
+ messageHandler: MessageHandler,
628
+ transactionDetails?: {
629
+ existingDraftReused?: boolean;
630
+ }
608
631
  ): Promise<Context | undefined> {
609
632
  const mParam = mParameters || {},
610
633
  bRunPreserveChangesFlow =
@@ -652,10 +675,24 @@ async function createDraftFromActiveDocument(
652
675
  if ((oResponse as ContextErrorType).status === 409 || (oResponse as ContextErrorType).status === 423) {
653
676
  messageHandling.removeBoundTransitionMessages();
654
677
  messageHandling.removeUnboundTransitionMessages();
655
- const siblingInfo = await draft.computeSiblingInformation(oContext, oContext);
678
+ const bindingParameters = ModelHelper.isCollaborationDraftSupported(oContext.getModel().getMetaModel())
679
+ ? { $select: "DraftAdministrativeData/DraftAdministrativeUser" }
680
+ : undefined;
681
+ const siblingInfo = await draft.computeSiblingInformation(
682
+ oContext,
683
+ oContext,
684
+ undefined,
685
+ undefined,
686
+ bindingParameters,
687
+ oAppComponent._isFclEnabled()
688
+ );
656
689
  if (siblingInfo?.targetContext) {
657
690
  //there is a context authorized to be edited by the current user
658
691
  await CommonUtils.waitForContextRequested(siblingInfo.targetContext);
692
+ if (transactionDetails) {
693
+ transactionDetails.existingDraftReused = true;
694
+ }
695
+
659
696
  return siblingInfo.targetContext;
660
697
  } else {
661
698
  //there is no draft owned by the current user
@@ -78,7 +78,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/E
78
78
  // navigation we can silently discard the draft again
79
79
  // eslint-disable-next-line promise/no-nesting
80
80
  try {
81
- await draftDataLossPopup.discardDraft(oController, bSkipBindingToView, context);
81
+ await draftDataLossPopup.discardDraft(oController, bSkipBindingToView, context, hiddenDraft);
82
82
  processFunctionForDrafts();
83
83
  } catch (error) {
84
84
  Log.error("Error while canceling the document", error);
@@ -341,4 +341,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/E
341
341
  };
342
342
  return draftDataLossPopup;
343
343
  }, false);
344
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZpZ2F0aW9uVHlwZSIsIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZGF0YUxvc3NEaWFsb2ciLCJEcmFmdERhdGFMb3NzRGlhbG9nIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwicGFnZUNvbnRyb2xsZXIiLCJvTWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwicHJvY2Vzc0ZjbE1vZGUiLCJkcmFmdEFkbWluRGF0YSIsImZuQ2FuY2VsRnVuY3Rpb24iLCJvQ29udHJvbGxlciIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImJTa2lwQmluZGluZ1RvVmlldyIsImNvbnRleHQiLCJoaWRkZW5EcmFmdCIsIkNyZWF0aW9uRGF0ZVRpbWUiLCJMYXN0Q2hhbmdlRGF0ZVRpbWUiLCJlZGl0RmxvdyIsImlzRG9jdW1lbnRNb2RpZmllZCIsIm9wZW4iLCJ0aGVuIiwic2VsZWN0ZWRLZXkiLCJkcmFmdERhdGFMb3NzUG9wdXAiLCJoYW5kbGVEaWFsb2dTZWxlY3Rpb24iLCJwcm9jZXNzTm9BY3RpdmVFbnRpdHlNb2RlIiwibmF2aWdhdGlvblR5cGUiLCJiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIkJhY2tOYXZpZ2F0aW9uIiwiZGlzY2FyZERyYWZ0IiwiZXJyb3IiLCJMb2ciLCJGb3J3YXJkTmF2aWdhdGlvbiIsInByb2Nlc3NFZGl0aW5nRHJhZnRGb3JFeGlzdGluZ0VudGl0eSIsIm9Db250ZXh0IiwibVBhcmFtZXRlcnMiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmluZGluZ1RvVmlldyIsImNhbmNlbERvY3VtZW50IiwicHJvY2Vzc0VkaXRTdGF0ZURpcnR5IiwicHJvY2Vzc0RyYWZ0QWRtaW5EYXRhIiwiZm5Qcm9jZXNzRnVuY3Rpb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJoYXNBY3RpdmVFbnRpdHkiLCJjb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJhcHBseSIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYWx3YXlzU2hvd0luSGlkZGVuRHJhZnQiLCJvVmlldyIsImdldFZpZXciLCJvTW9kZWwiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImlzRHJhZnRSb290IiwiZ2V0T2JqZWN0IiwiYklzRWRpdGFibGUiLCJDb21tb25VdGlscyIsImdldElzRWRpdGFibGUiLCJvcmlnaW5hbENvbnRleHQiLCJkcmFmdFJvb3RQYXRoIiwiZ2V0UGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290UGF0aCIsImJpbmRDb250ZXh0IiwiJGV4cGFuZCIsImdldEJvdW5kQ29udGV4dCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYmFja05hdlNob3dzRGlhbG9nIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0V4aXRzQXBwIiwiaXNEZWxldGVkIiwicmVxdWVzdFByb3BlcnR5IiwiZ2V0UHJvcGVydHkiLCJvRXJyb3IiLCJzYXZlRG9jdW1lbnQiLCJjb250cm9sbGVyIiwiaGFzSW5pdGlhbENvbnRleHQiLCJpc0EiLCJfc2F2ZURvY3VtZW50IiwicGFyYW1zIiwic2tpcEJhY2tOYXZpZ2F0aW9uIiwiU2F2ZSIsInNhdmVkQ29udGV4dCIsImNhdGNoIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiY2xvc2UiLCJLZWVwIiwiRGlzY2FyZCIsImRpc2NhcmRlZERyYWZ0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJkcmFmdERhdGFMb3NzUG9wdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IERyYWZ0RGF0YUxvc3NEaWFsb2cgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL0RhdGFMb3NzT3JEcmFmdERpc2NhcmQvRHJhZnREYXRhTG9zc0RpYWxvZ1wiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCIuLi8uLi9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vKiBFbnVtIGZvciBuYXZpZ2F0aW9uIHR5cGVzICovXG5lbnVtIE5hdmlnYXRpb25UeXBlIHtcblx0QmFja05hdmlnYXRpb24gPSBcIkJhY2tOYXZpZ2F0aW9uXCIsXG5cdEZvcndhcmROYXZpZ2F0aW9uID0gXCJGb3J3YXJkTmF2aWdhdGlvblwiXG59XG5cbi8qIEVudW0gdHlwZXMgZm9yIHRoZSBkYXRhIGxvc3MgZGlhbG9nIG9wdGlvbnMgKi9cbmVudW0gRHJhZnREYXRhTG9zc09wdGlvbnMge1xuXHRTYXZlID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uU2F2ZVwiLFxuXHRLZWVwID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uS2VlcFwiLFxuXHREaXNjYXJkID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uRGlzY2FyZFwiXG59XG5cbnR5cGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgPSB7XG5cdENyZWF0aW9uRGF0ZVRpbWU6IERhdGU7XG5cdExhc3RDaGFuZ2VEYXRlVGltZTogRGF0ZTtcbn07XG5cbi8qQ3JlYXRlIHRoZSBkYXRhIGxvc3MgZGlhbG9nKi9cbmNvbnN0IGRhdGFMb3NzRGlhbG9nID0gbmV3IERyYWZ0RGF0YUxvc3NEaWFsb2coXCJmZTo6RHJhZnREYXRhTG9zc1BvcHVwXCIpO1xuXG4vKipcbiAqIFRoZSBtZXRob2QgY2hlY2tzIHdoZXRoZXIgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGluIHRoZSBtYW5pZmVzdCBpcyBzZXQgdG8gc2lsZW50bHkga2VlcCB0aGUgZHJhZnQgaW4gY2FzZSBhIGZvcndhcmQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQuXG4gKiBAcGFyYW0gcGFnZUNvbnRyb2xsZXIgVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBQYWdlQ29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSB3aXRoIHRydWUgb3IgZmFsc2UgdG8gc2lsZW50bHkga2VlcCB0aGUgZHJhZnRcbiAqL1xuZnVuY3Rpb24gc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uKHBhZ2VDb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IGJvb2xlYW4ge1xuXHRjb25zdCBvTWFuaWZlc3QgPSBwYWdlQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gb01hbmlmZXN0Py5hcHA/LnNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbiB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBGQ0wgbW9kZS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGRyYWZ0IG9wZXJhdGlvblxuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGY2xNb2RlKFxuXHRkcmFmdEFkbWluRGF0YTogRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEsXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gVGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgaW4gRkNMIG1vZGUgc28gaW4gdGhpcyBjYXNlIHdlIGZhbGwgYmFjayB0b1xuXHQvLyB0aGUgb2xkIGxvZ2ljIHNpbmNlIHRoZSBkaXJ0eSBzdGF0ZSBoYW5kbGluZyBpcyBub3QgcHJvcGVybHkgd29ya2luZ1xuXHQvLyBmb3IgRkNMLlxuXHRpZiAoZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lICYmICFvQ29udHJvbGxlci5lZGl0Rmxvdy5pc0RvY3VtZW50TW9kaWZpZWQoKSkge1xuXHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkYXRhTG9zc0RpYWxvZ1xuXHRcdFx0Lm9wZW4ob0NvbnRyb2xsZXIpXG5cdFx0XHQudGhlbigoc2VsZWN0ZWRLZXkpID0+XG5cdFx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cC5oYW5kbGVEaWFsb2dTZWxlY3Rpb24oXG5cdFx0XHRcdFx0c2VsZWN0ZWRLZXkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBtb2RlIHdpdGggbm8gYWN0aXZlIGVudGl0eS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqIEBwYXJhbSBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2tpcCB0aGUgcG9wdXAgYXBwZWFyYW5jZSBpbiBmb3J3YXJkIGNhc2VcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXcgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUoXG5cdGRyYWZ0QWRtaW5EYXRhOiBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSxcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzOiBGdW5jdGlvbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlLFxuXHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBib29sZWFuLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFRoZXJlIGlzIG5vIGFjdGl2ZSBlbnRpdHkgc28sIHdlIGFyZSBlZGl0aW5nIGVpdGhlciBuZXdseSBjcmVhdGVkIGRhdGEgb3Jcblx0Ly8gYSBkcmFmdCB3aGljaCBoYXMgbmV2ZXIgYmVlbiBzYXZlZCB0byBhY3RpdmUgdmVyc2lvblxuXHQvLyBTaW5jZSB3ZSB3YW50IHRvIHJlYWN0IGRpZmZlcmVudGx5IGluIHRoZSB0d28gc2l0dWF0aW9ucywgd2UgaGF2ZSB0byBjaGVjayB0aGVcblx0Ly8gZGlydHkgc3RhdGVcblx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRpZiAoXG5cdFx0XHRkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lID09PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWUgJiZcblx0XHRcdCFvQ29udHJvbGxlci5lZGl0Rmxvdy5pc0RvY3VtZW50TW9kaWZpZWQoKSAmJlxuXHRcdFx0bmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0KSB7XG5cdFx0XHQvLyBpbiBjYXNlIHdlIGhhdmUgdW50b3VjaGVkIGNoYW5nZXMgZm9yIHRoZSBkcmFmdCBhbmQgYSBcImJhY2tcIlxuXHRcdFx0Ly8gbmF2aWdhdGlvbiB3ZSBjYW4gc2lsZW50bHkgZGlzY2FyZCB0aGUgZHJhZnQgYWdhaW5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL25vLW5lc3Rpbmdcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGRyYWZ0RGF0YUxvc3NQb3B1cC5kaXNjYXJkRHJhZnQob0NvbnRyb2xsZXIsIGJTa2lwQmluZGluZ1RvVmlldywgY29udGV4dCk7XG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FuY2VsaW5nIHRoZSBkb2N1bWVudFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uICYmIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24pIHtcblx0XHRcdC8vIEluIGNhc2Ugd2UgaGF2ZSBhIFwiZm9yd2FyZCBuYXZpZ2F0aW9uXCIgYW5kIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdC8vIHdlIFwic2lsZW50bHlcIiBrZWVwIHRoZSBkcmFmdFxuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEluIHRoaXMgY2FzZSBkYXRhIGlzIGJlaW5nIGNoYW5nZWQgb3IgYSBmb3J3YXJkIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0XHQvLyBhbmQsIHdlIGFsd2F5cyB3YW50IHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgb24gbmF2aWdhdGlvblxuXHRcdFx0cmV0dXJuIGRhdGFMb3NzRGlhbG9nXG5cdFx0XHRcdC5vcGVuKG9Db250cm9sbGVyKVxuXHRcdFx0XHQudGhlbigoc2VsZWN0ZWRLZXkpID0+XG5cdFx0XHRcdFx0ZHJhZnREYXRhTG9zc1BvcHVwLmhhbmRsZURpYWxvZ1NlbGVjdGlvbihcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5IGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gV2UgYXJlIGVkaXRpbmcgYSBkcmFmdCB3aGljaCBoYXMgYmVlbiBjcmVhdGVkIGVhcmxpZXIgYnV0IG5ldmVyIHNhdmVkIHRvIGFjdGl2ZVxuXHRcdC8vIHZlcnNpb24gYW5kIHNpbmNlIHRoZSBlZGl0IHN0YXRlIGlzIG5vdCBkaXJ0eSwgdGhlcmUgaGF2ZSBiZWVuIG5vIHVzZXIgY2hhbmdlc1xuXHRcdC8vIHNvIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIHNpbGVudGx5IG5hdmlnYXRlIGFuZCBkbyBub3RoaW5nXG5cdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBkcmFmdCBlZGl0aW5nIGZvciBleGlzdGluZyBlbnRpdHkuXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IGNhbGxcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRWRpdGluZ0RyYWZ0Rm9yRXhpc3RpbmdFbnRpdHkoXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVcbik6IFByb21pc2U8dm9pZD4ge1xuXHQvLyBXZSBhcmUgZWRpdGluZyBhIGRyYWZ0IGZvciBhbiBleGlzdGluZyBhY3RpdmUgZW50aXR5XG5cdC8vIFRoZSBDcmVhdGlvbkRhdGVUaW1lIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUgYXJlIGVxdWFsLCBzbyB0aGlzIGRyYWZ0IHdhc1xuXHQvLyBuZXZlciBzYXZlZCBiZWZvcmUsIGhlbmNlIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nIGEgbmV3bHkgY3JlYXRlZCBkcmFmdCBmb3Jcblx0Ly8gYW4gZXhpc3RpbmcgYWN0aXZlIGVudGl0eSBmb3IgdGhlIGZpcnN0IHRpbWUuXG5cdC8vIEFsc28sIHRoZXJlIGhhdmUgc28gZmFyIGJlZW4gbm8gY2hhbmdlcyBtYWRlIHRvIHRoZSBkcmFmdCBhbmQgaW4gdGhpc1xuXHQvLyBjYXNlIHdlIHdhbnQgdG8gc2lsZW50bHkgbmF2aWdhdGUgYW5kIGRlbGV0ZSB0aGUgZHJhZnQgaW4gY2FzZSBvZiBhIGJhY2tcblx0Ly8gbmF2aWdhdGlvbiBidXQgaW4gY2FzZSBvZiBhIGZvcndhcmQgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIHNpbGVudGx5IGtlZXAgaXQhXG5cdGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24pIHtcblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdHNraXBEaXNjYXJkUG9wb3ZlcjogdHJ1ZSxcblx0XHRcdHNraXBCaW5kaW5nVG9WaWV3OiB0cnVlXG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBvQ29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbmNlbGluZyB0aGUgZG9jdW1lbnRcIiwgZXJyb3IgYXMgRXJyb3IpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBJbiBjYXNlIG9mIGEgZm9yd2FyZCBuYXZpZ2F0aW9uIHdlIHNpbGVudGx5IGtlZXAgdGhlIGRyYWZ0IGFuZCBvbmx5XG5cdFx0Ly8gZXhlY3V0ZSB0aGUgZm9sbG93dXAgZnVuY3Rpb24uXG5cdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBjb250ZXh0IHdoZW4gdGhlIGVkaXQgc3RhdGUgaXMgaW4gZGlydHkgbW9kZS5cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWQuXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqIEBwYXJhbSBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2tpcCB0aGUgcG9wdXAgYXBwZWFyYW5jZSBpbiBmb3J3YXJkIGNhc2VcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXcgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3LlxuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGRyYWZ0IG9wZXJhdGlvbnNcbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICogQHJldHVybnMgTm90aGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRWRpdFN0YXRlRGlydHkoXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZSxcblx0YlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogYm9vbGVhbixcblx0YlNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbixcblx0Y29udGV4dD86IE9EYXRhVjRDb250ZXh0LFxuXHRoaWRkZW5EcmFmdD86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uICYmIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24pIHtcblx0XHQvLyBJbiBjYXNlIHdlIGhhdmUgYSBcImZvcndhcmQgbmF2aWdhdGlvblwiIGFuZCBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0Ly8gd2UgXCJzaWxlbnRseVwiIGtlZXAgdGhlIGRyYWZ0XG5cdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhlIENyZWF0aW9uRGF0ZVRpbWUgYW5kIExhc3RDaGFuZ2VEYXRlVGltZSBhcmUgTk9UIGVxdWFsLCBzbyB3ZSBhcmUgY3VycmVudGx5IGVkaXRpbmdcblx0XHQvLyBhbiBleGlzdGluZyBkcmFmdCBhbmQgbmVlZCB0byBkaXN0aW5ndWlzaCBkZXBlbmRpbmcgb24gaWYgYW55IGNoYW5nZXNcblx0XHQvLyBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgY3VycmVudCBlZGl0aW5nIHNlc3Npb24gb3Igbm90XG5cdFx0Ly8gQ2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgY3VycmVudCBlZGl0aW5nIHNlc3Npb24sIHNvIHdlIHdhbnRcblx0XHQvLyB0byBzaG93IHRoZSBkYXRhIGxvc3MgZGlhbG9nIGFuZCBsZXQgdGhlIHVzZXIgZGVjaWRlXG5cdFx0cmV0dXJuIGRhdGFMb3NzRGlhbG9nXG5cdFx0XHQub3BlbihvQ29udHJvbGxlcilcblx0XHRcdC50aGVuKChzZWxlY3RlZEtleSkgPT5cblx0XHRcdFx0ZHJhZnREYXRhTG9zc1BvcHVwLmhhbmRsZURpYWxvZ1NlbGVjdGlvbihcblx0XHRcdFx0XHRzZWxlY3RlZEtleSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIGFkbWluIGRhdGEuXG4gKiBAcGFyYW0gZHJhZnRBZG1pbkRhdGEgQWRtaW4gZGF0YVxuICogQHBhcmFtIGZuUHJvY2Vzc0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHBhcmFtIG5hdmlnYXRpb25UeXBlIFRoZSBuYXZpZ2F0aW9uIHR5cGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4gKiBAcGFyYW0gaGFzQWN0aXZlRW50aXR5IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgcm9vdCBjb250ZXh0IGhhcyBhY3RpdmUgZW50aXR5IG9yIG5vdFxuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NEcmFmdEFkbWluRGF0YShcblx0ZHJhZnRBZG1pbkRhdGE6IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLFxuXHRmblByb2Nlc3NGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUgPSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0aGFzQWN0aXZlRW50aXR5PzogYm9vbGVhbixcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgY29sbGFib3JhdGlvbkNvbm5lY3RlZCA9IG9Db250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpO1xuXHRjb25zdCBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgPSAhY29sbGFib3JhdGlvbkNvbm5lY3RlZFxuXHRcdD8gZm5Qcm9jZXNzRnVuY3Rpb25cblx0XHQ6IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24uYXBwbHkobnVsbCwgLi4uYXJncyk7XG5cdFx0ICB9O1xuXG5cdGNvbnN0IGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gPSBzaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24ob0NvbnRyb2xsZXIpO1xuXHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRpZiAob0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdGF3YWl0IHByb2Nlc3NGY2xNb2RlKFxuXHRcdFx0XHRkcmFmdEFkbWluRGF0YSxcblx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKCFoYXNBY3RpdmVFbnRpdHkpIHtcblx0XHRcdHByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUoXG5cdFx0XHRcdGRyYWZ0QWRtaW5EYXRhLFxuXHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRuYXZpZ2F0aW9uVHlwZSxcblx0XHRcdFx0YlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbixcblx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lID09PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWUgJiZcblx0XHRcdCghaGlkZGVuRHJhZnQgfHwgKGhpZGRlbkRyYWZ0ICYmICFvQ29udHJvbGxlci5lZGl0Rmxvdy5pc0RvY3VtZW50TW9kaWZpZWQoKSkpXG5cdFx0KSB7XG5cdFx0XHRwcm9jZXNzRWRpdGluZ0RyYWZ0Rm9yRXhpc3RpbmdFbnRpdHkob0NvbnRyb2xsZXIsIGNvbnRleHQsIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cywgbmF2aWdhdGlvblR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0cHJvY2Vzc0VkaXRTdGF0ZURpcnR5KFxuXHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRuYXZpZ2F0aW9uVHlwZSxcblx0XHRcdFx0YlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbixcblx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGhlIHVzZXIgc3RhcnRlZCBlZGl0aW5nIHRoZSBleGlzdGluZyBkcmFmdCBidXQgZGlkIG5vdCBtYWtlIGFueSBjaGFuZ2VzXG5cdFx0XHQvLyBpbiB0aGUgY3VycmVudCBlZGl0aW5nIHNlc3Npb24sIHNvIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2FudFxuXHRcdFx0Ly8gdG8gc2hvdyB0aGUgZGF0YSBsb3NzIGRpYWxvZyBidXQganVzdCBrZWVwIHRoZSBkcmFmdFxuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZuUHJvY2Vzc0Z1bmN0aW9uKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJhbCBoYW5kbGVyIGluIHdoaWNoIHRoZSBpbmRpdmlkdWFsIHN0ZXBzIGFyZSBjYWxsZWQuXG4gKiBAcGFyYW0gZm5Qcm9jZXNzRnVuY3Rpb25cbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHRcbiAqIEBwYXJhbSBvQ29udHJvbGxlclxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlld1xuICogQHBhcmFtIG5hdmlnYXRpb25UeXBlXG4gKiBAcGFyYW0gYWx3YXlzU2hvd0luSGlkZGVuRHJhZnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUgPSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0YWx3YXlzU2hvd0luSGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9Nb2RlbCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0TW9kZWwoKTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgdmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpIGFzIHsgZW50aXR5U2V0Pzogc3RyaW5nOyBjb250ZXh0UGF0aD86IHN0cmluZyB9O1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IHZpZXdEYXRhLmNvbnRleHRQYXRoIHx8ICh2aWV3RGF0YS5lbnRpdHlTZXQgPyBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBpc0RyYWZ0Um9vdCA9IGNvbnRleHRQYXRoID8gISFvTWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIDogZmFsc2U7XG5cdGNvbnN0IGJJc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdGNvbnN0IG9yaWdpbmFsQ29udGV4dCA9IG9Db250ZXh0O1xuXHRsZXQgZHJhZnRSb290UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0aWYgKCFpc0RyYWZ0Um9vdCkge1xuXHRcdGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KSA/PyBkcmFmdFJvb3RQYXRoO1xuXHRcdG9Db250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdFBhdGgsIHVuZGVmaW5lZCwgeyAkZXhwYW5kOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIgfSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH1cblx0Y29uc3QgaGlkZGVuRHJhZnQgPSAob0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdD8uZW5hYmxlZDtcblx0Ly8gU2hvdWxkbid0IGRpc3BsYXkgZGF0YSBsb3NzIHBvcG92ZXIgb24gc2hlbGwgYmFjayBuYXZpZ2F0aW9uIGZyb20gc3ViLW9iamVjdCBwYWdlcyAodW5sZXNzIHRoZXJlJ3Mgbm8gcGFnZSBiZWZvcmUgaW4gdGhlIGhpc3RvcnkgYmVjYXVzZSBvZiBkZWVwIGxpbmtpbmcpXG5cdC8vIG9yIHdoZW4gb2JqZWN0IHBhZ2UgaXMgaW4gZGlzcGxheSBtb2RlLCBvciB3aGVuIHRoZSBvYmplY3QgaXMgZGVsZXRlZFxuXHRjb25zdCBiYWNrTmF2U2hvd3NEaWFsb2cgPVxuXHRcdGlzRHJhZnRSb290IHx8IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tFeGl0c0FwcCgpIHx8IChoaWRkZW5EcmFmdCAmJiBhbHdheXNTaG93SW5IaWRkZW5EcmFmdCk7XG5cdGlmIChvcmlnaW5hbENvbnRleHQuaXNEZWxldGVkKCkgfHwgKCFiYWNrTmF2U2hvd3NEaWFsb2cgJiYgbmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uKSB8fCAhYklzRWRpdGFibGUpIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9IGVsc2Uge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBUaGUgZm9sbG93aW5nIDMgcHJvcGVydGllcyBhcmUgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdGhlIGRyYWZ0LCBzbyB3ZSBlbnN1cmUgdGhleSBhcmUgbG9hZGVkXG5cdFx0XHRhd2FpdCBvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoW1xuXHRcdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJIYXNBY3RpdmVFbnRpdHlcIlxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IG9Db250ZXh0LmdldE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0YXdhaXQgcHJvY2Vzc0RyYWZ0QWRtaW5EYXRhKFxuXHRcdFx0XHRkcmFmdEFkbWluRGF0YSxcblx0XHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24sXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdGhpZGRlbkRyYWZ0ID8gb3JpZ2luYWxDb250ZXh0IDogb0NvbnRleHQsXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdG5hdmlnYXRpb25UeXBlLFxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSxcblx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgZHJhZnREYXRhQ29udGV4dCBpbmZvcm1hdGlvblwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdGZuUHJvY2Vzc0Z1bmN0aW9uKCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogU2F2ZXMgdGhlIGRvY3VtZW50LiBJZiB0aGUgY29udHJvbGxlciBpcyBvZiB0eXBlIE9iamVjdFBhZ2UsIHRoZW4gaW50ZXJuYWwgX3NhdmVEb2N1bWVudCBpcyBjYWxsZWQsIG90aGVyd2lzZSBzYXZlRG9jdW1lbnRcbiAqIGZyb20gRWRpdEZsb3cgaXMgY2FsbGVkLlxuICogQHBhcmFtIGNvbnRyb2xsZXIgQ29udHJvbGxlciBvZiB0aGUgY3VycmVudCB2aWV3XG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IFRoZSBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIGlmIHRoZSBzYXZlIHdhcyBzdWNjZXNzZnVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVEb2N1bWVudChjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgY29udGV4dD86IE9EYXRhVjRDb250ZXh0LCBza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0Y29uc3QgaGFzSW5pdGlhbENvbnRleHQgPSBjb250ZXh0ICE9PSB1bmRlZmluZWQ7XG5cdGNvbnRleHQgPSBjb250ZXh0ID8/IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGlmICghaGFzSW5pdGlhbENvbnRleHQgJiYgY29udHJvbGxlci5pc0E8T2JqZWN0UGFnZUNvbnRyb2xsZXJDb250cm9sbGVyPihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKSkge1xuXHRcdHJldHVybiBjb250cm9sbGVyLl9zYXZlRG9jdW1lbnQoc2tpcEJpbmRpbmdUb1ZpZXcpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb250cm9sbGVyLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0LCB7IHNraXBCaW5kaW5nVG9WaWV3IH0pO1xuXHR9XG59XG5cbi8qKlxuICogRGlzY2FyZHMgdGhlIGRyYWZ0LlxuICogQHBhcmFtIGNvbnRyb2xsZXIgQ29udHJvbGxlciBvZiB0aGUgY3VycmVudCB2aWV3XG4gKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgVGhlIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgaWYgY2FuY2VsRG9jdW1lbnQgd2FzIHN1Y2Nlc3NmdWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzY2FyZERyYWZ0KFxuXHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0c2tpcEJpbmRpbmdUb1ZpZXc6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHVua25vd24+IHtcblx0Y29udGV4dCA9IGNvbnRleHQgPz8gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdHNraXBCYWNrTmF2aWdhdGlvbjogaGlkZGVuRHJhZnQgJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPyBmYWxzZSA6IHRydWUsXG5cdFx0c2tpcERpc2NhcmRQb3BvdmVyOiB0cnVlLFxuXHRcdHNraXBCaW5kaW5nVG9WaWV3OiBza2lwQmluZGluZ1RvVmlldyAhPT0gdW5kZWZpbmVkID8gc2tpcEJpbmRpbmdUb1ZpZXcgOiB0cnVlXG5cdH07XG5cdHJldHVybiBjb250cm9sbGVyLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KGNvbnRleHQsIHBhcmFtcyk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGZvbGxvdy11cCBmdW5jdGlvbnMgYWZ0ZXIgYW4gb3B0aW9uIHdhcyBzZWxlY3RlZCBpbiB0aGUgZGF0YSBsb3NzIGRpYWxvZy5cbiAqIEBwYXJhbSBzZWxlY3RlZEtleSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb24gZnJvbSB0aGUgZGF0YSBsb3NzIGRpYWxvZ1xuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBjb250cm9sbGVyIENvbnRyb2xsZXIgb2YgdGhlIGN1cnJlbnQgdmlld1xuICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IFRoZSBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGJpbmRpbmdcbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5mdW5jdGlvbiBoYW5kbGVEaWFsb2dTZWxlY3Rpb24oXG5cdHNlbGVjdGVkS2V5OiBzdHJpbmcsXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0c2tpcEJpbmRpbmdUb1ZpZXc6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiB2b2lkIHtcblx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuU2F2ZTpcblx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cFxuXHRcdFx0XHQuc2F2ZURvY3VtZW50KGNvbnRyb2xsZXIsIGNvbnRleHQsIHNraXBCaW5kaW5nVG9WaWV3KVxuXHRcdFx0XHQudGhlbigoc2F2ZWRDb250ZXh0PykgPT4gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKHNhdmVkQ29udGV4dCkpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChlcnJvciA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuQ2FuY2VsRnVuY3Rpb24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2F2aW5nIGRvY3VtZW50XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEcmFmdERhdGFMb3NzT3B0aW9ucy5LZWVwOlxuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBEcmFmdERhdGFMb3NzT3B0aW9ucy5EaXNjYXJkOlxuXHRcdFx0ZHJhZnREYXRhTG9zc1BvcHVwXG5cdFx0XHRcdC5kaXNjYXJkRHJhZnQoY29udHJvbGxlciwgc2tpcEJpbmRpbmdUb1ZpZXcsIGNvbnRleHQsIGhpZGRlbkRyYWZ0KVxuXHRcdFx0XHQudGhlbigoZGlzY2FyZGVkRHJhZnQ/KSA9PiBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoZGlzY2FyZGVkRHJhZnQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24oKTtcblx0XHRcdGRhdGFMb3NzRGlhbG9nLmNsb3NlKCk7XG5cdH1cbn1cblxuY29uc3QgZHJhZnREYXRhTG9zc1BvcHVwID0ge1xuXHRwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbjogcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHROYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdHByb2Nlc3NGY2xNb2RlOiBwcm9jZXNzRmNsTW9kZSxcblx0cHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZTogcHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZSxcblx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5OiBwcm9jZXNzRWRpdGluZ0RyYWZ0Rm9yRXhpc3RpbmdFbnRpdHksXG5cdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eTogcHJvY2Vzc0VkaXRTdGF0ZURpcnR5LFxuXHRoYW5kbGVEaWFsb2dTZWxlY3Rpb246IGhhbmRsZURpYWxvZ1NlbGVjdGlvbixcblx0c2F2ZURvY3VtZW50OiBzYXZlRG9jdW1lbnQsXG5cdGRpc2NhcmREcmFmdDogZGlzY2FyZERyYWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcmFmdERhdGFMb3NzUG9wdXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBV0E7RUFBQSxJQUNLQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFBLE9BQWRBLGNBQWM7RUFBQSxFQUFkQSxjQUFjO0VBS25CO0VBQUEsSUFDS0Msb0JBQW9CLDBCQUFwQkEsb0JBQW9CO0lBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQUEsT0FBcEJBLG9CQUFvQjtFQUFBLEVBQXBCQSxvQkFBb0I7RUFXekI7RUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBSUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7O0VBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxvQ0FBb0NBLENBQUNDLGNBQThCLEVBQVc7SUFDdEYsTUFBTUMsU0FBUyxHQUFHRCxjQUFjLENBQUNFLGVBQWUsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUM3RSxPQUFPRixTQUFTLEVBQUVHLEdBQUcsRUFBRUwsb0NBQW9DLElBQUksS0FBSztFQUNyRTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZU0sY0FBY0EsQ0FDNUJDLGNBQXVDLEVBQ3ZDQyxnQkFBMEIsRUFDMUJDLFdBQTJCLEVBQzNCQyx3QkFBa0MsRUFDbENDLGtCQUE0QixFQUM1QkMsT0FBd0IsRUFDeEJDLFdBQXFCLEVBQ0w7SUFDaEI7SUFDQTtJQUNBO0lBQ0EsSUFBSU4sY0FBYyxDQUFDTyxnQkFBZ0IsS0FBS1AsY0FBYyxDQUFDUSxrQkFBa0IsSUFBSSxDQUFDTixXQUFXLENBQUNPLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQyxFQUFFO01BQ3hIUCx3QkFBd0IsQ0FBQyxDQUFDO0lBQzNCLENBQUMsTUFBTTtNQUNOLE9BQU9aLGNBQWMsQ0FDbkJvQixJQUFJLENBQUNULFdBQVcsQ0FBQyxDQUNqQlUsSUFBSSxDQUFFQyxXQUFXLElBQ2pCQyxrQkFBa0IsQ0FBQ0MscUJBQXFCLENBQ3ZDRixXQUFXLEVBQ1hWLHdCQUF3QixFQUN4QkYsZ0JBQWdCLEVBQ2hCQyxXQUFXLEVBQ1hFLGtCQUFrQixFQUNsQkMsT0FBTyxFQUNQQyxXQUNELENBQ0QsQ0FBQztJQUNIO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFlVSx5QkFBeUJBLENBQ3ZDaEIsY0FBdUMsRUFDdkNDLGdCQUEwQixFQUMxQkMsV0FBMkIsRUFDM0JDLHdCQUFrQyxFQUNsQ2MsY0FBOEIsRUFDOUJDLHFDQUE4QyxFQUM5Q2Qsa0JBQTRCLEVBQzVCQyxPQUF3QixFQUN4QkMsV0FBcUIsRUFDTDtJQUNoQjtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQUlhLFNBQVMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO01BQ2pDLElBQ0NwQixjQUFjLENBQUNPLGdCQUFnQixLQUFLUCxjQUFjLENBQUNRLGtCQUFrQixJQUNyRSxDQUFDTixXQUFXLENBQUNPLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQyxJQUMxQ08sY0FBYyxLQUFLNUIsY0FBYyxDQUFDZ0MsY0FBYyxFQUMvQztRQUNEO1FBQ0E7UUFDQTtRQUNBLElBQUk7VUFDSCxNQUFNUCxrQkFBa0IsQ0FBQ1EsWUFBWSxDQUFDcEIsV0FBVyxFQUFFRSxrQkFBa0IsRUFBRUMsT0FBTyxDQUFDO1VBQy9FRix3QkFBd0IsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxPQUFPb0IsS0FBYyxFQUFFO1VBQ3hCQyxHQUFHLENBQUNELEtBQUssQ0FBQyxvQ0FBb0MsRUFBRUEsS0FBZSxDQUFDO1FBQ2pFO01BQ0QsQ0FBQyxNQUFNLElBQUlOLGNBQWMsS0FBSzVCLGNBQWMsQ0FBQ29DLGlCQUFpQixJQUFJUCxxQ0FBcUMsRUFBRTtRQUN4RztRQUNBO1FBQ0FmLHdCQUF3QixDQUFDLENBQUM7TUFDM0IsQ0FBQyxNQUFNO1FBQ047UUFDQTtRQUNBLE9BQU9aLGNBQWMsQ0FDbkJvQixJQUFJLENBQUNULFdBQVcsQ0FBQyxDQUNqQlUsSUFBSSxDQUFFQyxXQUFXLElBQ2pCQyxrQkFBa0IsQ0FBQ0MscUJBQXFCLENBQ3ZDRixXQUFXLEVBQ1hWLHdCQUF3QixFQUN4QkYsZ0JBQWdCLEVBQ2hCQyxXQUFXLEVBQ1hFLGtCQUFrQixFQUNsQkMsT0FBTyxFQUNQQyxXQUNELENBQ0QsQ0FBQztNQUNIO0lBQ0QsQ0FBQyxNQUFNO01BQ047TUFDQTtNQUNBO01BQ0FILHdCQUF3QixDQUFDLENBQUM7SUFDM0I7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWV1QixvQ0FBb0NBLENBQ2xEeEIsV0FBMkIsRUFDM0J5QixRQUF3QixFQUN4QnhCLHdCQUFrQyxFQUNsQ2MsY0FBOEIsRUFDZDtJQUNoQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQUlBLGNBQWMsS0FBSzVCLGNBQWMsQ0FBQ2dDLGNBQWMsRUFBRTtNQUNyRCxNQUFNTyxXQUFXLEdBQUc7UUFDbkJDLGtCQUFrQixFQUFFLElBQUk7UUFDeEJDLGlCQUFpQixFQUFFO01BQ3BCLENBQUM7TUFFRCxJQUFJO1FBQ0gsTUFBTTVCLFdBQVcsQ0FBQ08sUUFBUSxDQUFDc0IsY0FBYyxDQUFDSixRQUFRLEVBQUVDLFdBQVcsQ0FBQztRQUNoRXpCLHdCQUF3QixDQUFDLENBQUM7TUFDM0IsQ0FBQyxDQUFDLE9BQU9vQixLQUFLLEVBQUU7UUFDZkMsR0FBRyxDQUFDRCxLQUFLLENBQUMsb0NBQW9DLEVBQUVBLEtBQWMsQ0FBQztNQUNoRTtJQUNELENBQUMsTUFBTTtNQUNOO01BQ0E7TUFDQXBCLHdCQUF3QixDQUFDLENBQUM7SUFDM0I7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFlNkIscUJBQXFCQSxDQUNuQzlCLFdBQTJCLEVBQzNCRCxnQkFBMEIsRUFDMUJFLHdCQUFrQyxFQUNsQ2MsY0FBOEIsRUFDOUJDLHFDQUE4QyxFQUM5Q2Qsa0JBQTRCLEVBQzVCQyxPQUF3QixFQUN4QkMsV0FBcUIsRUFDTDtJQUNoQixJQUFJVyxjQUFjLEtBQUs1QixjQUFjLENBQUNvQyxpQkFBaUIsSUFBSVAscUNBQXFDLEVBQUU7TUFDakc7TUFDQTtNQUNBZix3QkFBd0IsQ0FBQyxDQUFDO0lBQzNCLENBQUMsTUFBTTtNQUNOO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxPQUFPWixjQUFjLENBQ25Cb0IsSUFBSSxDQUFDVCxXQUFXLENBQUMsQ0FDakJVLElBQUksQ0FBRUMsV0FBVyxJQUNqQkMsa0JBQWtCLENBQUNDLHFCQUFxQixDQUN2Q0YsV0FBVyxFQUNYVix3QkFBd0IsRUFDeEJGLGdCQUFnQixFQUNoQkMsV0FBVyxFQUNYRSxrQkFBa0IsRUFDbEJDLE9BQU8sRUFDUEMsV0FDRCxDQUNELENBQUM7SUFDSDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZTJCLHFCQUFxQkEsQ0FDbkNqQyxjQUF1QyxFQUN2Q2tDLGlCQUEyQixFQUMzQmpDLGdCQUEwQixFQUMxQkksT0FBdUIsRUFDdkJILFdBQTJCLEVBQzNCRSxrQkFBNEIsRUFJWjtJQUFBLElBSGhCYSxjQUE4QixHQUFBa0IsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUc5QyxjQUFjLENBQUNnQyxjQUFjO0lBQUEsSUFDOURpQixlQUF5QixHQUFBSCxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBRSxTQUFBO0lBQUEsSUFDekIvQixXQUFxQixHQUFBNkIsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQUUsU0FBQTtJQUVyQixNQUFNRSxzQkFBc0IsR0FBR3JDLFdBQVcsQ0FBQ3NDLGtCQUFrQixDQUFDQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxNQUFNdEMsd0JBQXdCLEdBQUcsQ0FBQ29DLHNCQUFzQixHQUNyREwsaUJBQWlCLEdBQ2pCLFlBQW9DO01BQ3BDaEMsV0FBVyxDQUFDc0Msa0JBQWtCLENBQUNFLFVBQVUsQ0FBQyxDQUFDO01BQUMsU0FBQUMsSUFBQSxHQUFBUixTQUFBLENBQUFDLE1BQUEsRUFEL0JRLElBQUksT0FBQUMsS0FBQSxDQUFBRixJQUFBLEdBQUFHLElBQUEsTUFBQUEsSUFBQSxHQUFBSCxJQUFBLEVBQUFHLElBQUE7UUFBSkYsSUFBSSxDQUFBRSxJQUFBLElBQUFYLFNBQUEsQ0FBQVcsSUFBQTtNQUFBO01BRWpCWixpQkFBaUIsQ0FBQ2EsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHSCxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVKLE1BQU0xQixxQ0FBcUMsR0FBR3pCLG9DQUFvQyxDQUFDUyxXQUFXLENBQUM7SUFDL0YsSUFBSUYsY0FBYyxFQUFFO01BQ25CLElBQUlFLFdBQVcsQ0FBQ04sZUFBZSxDQUFDLENBQUMsQ0FBQ29ELHFCQUFxQixDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsRUFBRTtRQUN6RSxNQUFNbEQsY0FBYyxDQUNuQkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFdBQVcsRUFDWEMsd0JBQXdCLEVBQ3hCQyxrQkFBa0IsRUFDbEJDLE9BQU8sRUFDUEMsV0FDRCxDQUFDO01BQ0YsQ0FBQyxNQUFNLElBQUksQ0FBQ2dDLGVBQWUsRUFBRTtRQUM1QnRCLHlCQUF5QixDQUN4QmhCLGNBQWMsRUFDZEMsZ0JBQWdCLEVBQ2hCQyxXQUFXLEVBQ1hDLHdCQUF3QixFQUN4QmMsY0FBYyxFQUNkQyxxQ0FBcUMsRUFDckNkLGtCQUFrQixFQUNsQmlDLFNBQVMsRUFDVC9CLFdBQ0QsQ0FBQztNQUNGLENBQUMsTUFBTSxJQUNOTixjQUFjLENBQUNPLGdCQUFnQixLQUFLUCxjQUFjLENBQUNRLGtCQUFrQixLQUNwRSxDQUFDRixXQUFXLElBQUtBLFdBQVcsSUFBSSxDQUFDSixXQUFXLENBQUNPLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBRSxDQUFDLEVBQzVFO1FBQ0RnQixvQ0FBb0MsQ0FBQ3hCLFdBQVcsRUFBRUcsT0FBTyxFQUFFRix3QkFBd0IsRUFBRWMsY0FBYyxDQUFDO01BQ3JHLENBQUMsTUFBTSxJQUFJRSxTQUFTLENBQUNDLGdCQUFnQixDQUFDLENBQUMsRUFBRTtRQUN4Q1kscUJBQXFCLENBQ3BCOUIsV0FBVyxFQUNYRCxnQkFBZ0IsRUFDaEJFLHdCQUF3QixFQUN4QmMsY0FBYyxFQUNkQyxxQ0FBcUMsRUFDckNkLGtCQUFrQixFQUNsQkMsT0FBTyxFQUNQQyxXQUNELENBQUM7TUFDRixDQUFDLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQUgsd0JBQXdCLENBQUMsQ0FBQztNQUMzQjtJQUNELENBQUMsTUFBTTtNQUNOK0IsaUJBQWlCLENBQUMsQ0FBQztJQUNwQjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZWdCLHlDQUF5Q0EsQ0FDdkRoQixpQkFBMkIsRUFDM0JqQyxnQkFBMEIsRUFDMUIwQixRQUF3QixFQUN4QnpCLFdBQTJCLEVBQzNCRSxrQkFBNEIsRUFHWjtJQUFBLElBRmhCYSxjQUE4QixHQUFBa0IsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUc5QyxjQUFjLENBQUNnQyxjQUFjO0lBQUEsSUFDOUQ4Qix1QkFBaUMsR0FBQWhCLFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7SUFFakMsTUFBTWUsS0FBSyxHQUFHbEQsV0FBVyxDQUFDbUQsT0FBTyxDQUFDLENBQUM7SUFDbkMsTUFBTUMsTUFBTSxHQUFHRixLQUFLLENBQUNHLGlCQUFpQixDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDbkQsTUFBTUMsVUFBVSxHQUFHSCxNQUFNLENBQUNJLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLE1BQU1DLFFBQVEsR0FBR1AsS0FBSyxDQUFDUSxXQUFXLENBQUMsQ0FBaUQ7SUFDcEYsTUFBTUMsV0FBVyxHQUFHRixRQUFRLENBQUNFLFdBQVcsS0FBS0YsUUFBUSxDQUFDRyxTQUFTLEdBQUcsSUFBSUgsUUFBUSxDQUFDRyxTQUFTLEVBQUUsR0FBR3pCLFNBQVMsQ0FBQztJQUN2RyxNQUFNMEIsV0FBVyxHQUFHRixXQUFXLEdBQUcsQ0FBQyxDQUFDSixVQUFVLENBQUNPLFNBQVMsQ0FBQyxHQUFHSCxXQUFXLDJDQUEyQyxDQUFDLEdBQUcsS0FBSztJQUMzSCxNQUFNSSxXQUFXLEdBQUdDLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDZixLQUFLLENBQUM7SUFDcEQsTUFBTWdCLGVBQWUsR0FBR3pDLFFBQVE7SUFDaEMsSUFBSTBDLGFBQWEsR0FBRzFDLFFBQVEsQ0FBQzJDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQ1AsV0FBVyxFQUFFO01BQ2pCTSxhQUFhLEdBQUdFLFdBQVcsQ0FBQ0MsZ0JBQWdCLENBQUM3QyxRQUFRLENBQUMsSUFBSTBDLGFBQWE7TUFDdkUxQyxRQUFRLEdBQUcyQixNQUFNLENBQUNtQixXQUFXLENBQUNKLGFBQWEsRUFBRWhDLFNBQVMsRUFBRTtRQUFFcUMsT0FBTyxFQUFFO01BQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQztJQUNsSDtJQUNBLE1BQU1yRSxXQUFXLEdBQUlKLFdBQVcsQ0FBQ04sZUFBZSxDQUFDLENBQUMsQ0FBQ2dGLDBCQUEwQixDQUFDLENBQUMsRUFBRUMsZUFBZSxDQUFDLENBQUMsRUFBRUMsV0FBVyxFQUM1R0MsT0FBTztJQUNWO0lBQ0E7SUFDQSxNQUFNQyxrQkFBa0IsR0FDdkJqQixXQUFXLElBQUk3RCxXQUFXLENBQUNOLGVBQWUsQ0FBQyxDQUFDLENBQUNxRixjQUFjLENBQUMsQ0FBQyxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUs1RSxXQUFXLElBQUk2Qyx1QkFBd0I7SUFDaEksSUFBSWlCLGVBQWUsQ0FBQ2UsU0FBUyxDQUFDLENBQUMsSUFBSyxDQUFDSCxrQkFBa0IsSUFBSS9ELGNBQWMsS0FBSzVCLGNBQWMsQ0FBQ2dDLGNBQWUsSUFBSSxDQUFDNEMsV0FBVyxFQUFFO01BQzdIL0IsaUJBQWlCLENBQUMsQ0FBQztJQUNwQixDQUFDLE1BQU07TUFDTixJQUFJO1FBQ0g7UUFDQSxNQUFNUCxRQUFRLENBQUN5RCxlQUFlLENBQUMsQ0FDOUIsMENBQTBDLEVBQzFDLDRDQUE0QyxFQUM1QyxpQkFBaUIsQ0FDakIsQ0FBQztRQUNGLE1BQU1wRixjQUFjLEdBQUcyQixRQUFRLENBQUNxQyxTQUFTLENBQUMseUJBQXlCLENBQUM7UUFDcEUsTUFBTS9CLHFCQUFxQixDQUMxQmpDLGNBQWMsRUFDZGtDLGlCQUFpQixFQUNqQmpDLGdCQUFnQixFQUNoQkssV0FBVyxHQUFHOEQsZUFBZSxHQUFHekMsUUFBUSxFQUN4Q3pCLFdBQVcsRUFDWEUsa0JBQWtCLEVBQ2xCYSxjQUFjLEVBQ2RVLFFBQVEsQ0FBQzBELFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUN2Qy9FLFdBQ0QsQ0FBQztNQUNGLENBQUMsQ0FBQyxPQUFPZ0YsTUFBZSxFQUFFO1FBQ3pCOUQsR0FBRyxDQUFDRCxLQUFLLENBQUMsOENBQThDLEVBQUUrRCxNQUFnQixDQUFDO1FBQzNFcEQsaUJBQWlCLENBQUMsQ0FBQztNQUNwQjtJQUNEO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVxRCxZQUFZQSxDQUFDQyxVQUEwQixFQUFFbkYsT0FBd0IsRUFBRXlCLGlCQUEyQixFQUFvQjtJQUNoSSxNQUFNMkQsaUJBQWlCLEdBQUdwRixPQUFPLEtBQUtnQyxTQUFTO0lBQy9DaEMsT0FBTyxHQUFHQSxPQUFPLElBQUltRixVQUFVLENBQUNuQyxPQUFPLENBQUMsQ0FBQyxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQ2tDLGlCQUFpQixJQUFJRCxVQUFVLENBQUNFLEdBQUcsQ0FBaUMsa0RBQWtELENBQUMsRUFBRTtNQUM3SCxPQUFPRixVQUFVLENBQUNHLGFBQWEsQ0FBQzdELGlCQUFpQixDQUFDO0lBQ25ELENBQUMsTUFBTTtNQUNOLE9BQU8wRCxVQUFVLENBQUMvRSxRQUFRLENBQUM4RSxZQUFZLENBQUNsRixPQUFPLEVBQUU7UUFBRXlCO01BQWtCLENBQUMsQ0FBQztJQUN4RTtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFlUixZQUFZQSxDQUMxQmtFLFVBQTBCLEVBQzFCMUQsaUJBQXNDLEVBQ3RDekIsT0FBd0IsRUFDeEJDLFdBQXFCLEVBQ0Y7SUFDbkJELE9BQU8sR0FBR0EsT0FBTyxJQUFJbUYsVUFBVSxDQUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQ0UsaUJBQWlCLENBQUMsQ0FBQztJQUM3RCxNQUFNcUMsTUFBTSxHQUFHO01BQ2RDLGtCQUFrQixFQUFFdkYsV0FBVyxJQUFJLENBQUNELE9BQU8sQ0FBQ2dGLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJO01BQ3pGeEQsa0JBQWtCLEVBQUUsSUFBSTtNQUN4QkMsaUJBQWlCLEVBQUVBLGlCQUFpQixLQUFLTyxTQUFTLEdBQUdQLGlCQUFpQixHQUFHO0lBQzFFLENBQUM7SUFDRCxPQUFPMEQsVUFBVSxDQUFDL0UsUUFBUSxDQUFDc0IsY0FBYyxDQUFDMUIsT0FBTyxFQUFFdUYsTUFBTSxDQUFDO0VBQzNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzdFLHFCQUFxQkEsQ0FDN0JGLFdBQW1CLEVBQ25CVix3QkFBa0MsRUFDbENGLGdCQUEwQixFQUMxQnVGLFVBQTBCLEVBQzFCMUQsaUJBQXNDLEVBQ3RDekIsT0FBd0IsRUFDeEJDLFdBQXFCLEVBQ2Q7SUFDUCxRQUFRTyxXQUFXO01BQ2xCLEtBQUt2QixvQkFBb0IsQ0FBQ3dHLElBQUk7UUFDN0JoRixrQkFBa0IsQ0FDaEJ5RSxZQUFZLENBQUNDLFVBQVUsRUFBRW5GLE9BQU8sRUFBRXlCLGlCQUFpQixDQUFDLENBQ3BEbEIsSUFBSSxDQUFFbUYsWUFBYSxJQUFLNUYsd0JBQXdCLENBQUM0RixZQUFZLENBQUMsQ0FBQyxDQUMvREMsS0FBSyxDQUFDLFVBQVV6RSxLQUF5QixFQUFFO1VBQzNDLElBQUlBLEtBQUssS0FBSzBFLDRCQUE0QixDQUFDQyxRQUFRLEVBQUU7WUFDcEQsT0FBT2pHLGdCQUFnQixDQUFDLENBQUM7VUFDMUI7VUFDQXVCLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLDZCQUE2QixFQUFFQSxLQUFLLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBQ0hoQyxjQUFjLENBQUM0RyxLQUFLLENBQUMsQ0FBQztRQUN0QjtNQUNELEtBQUs3RyxvQkFBb0IsQ0FBQzhHLElBQUk7UUFDN0JqRyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFCWixjQUFjLENBQUM0RyxLQUFLLENBQUMsQ0FBQztRQUN0QjtNQUNELEtBQUs3RyxvQkFBb0IsQ0FBQytHLE9BQU87UUFDaEN2RixrQkFBa0IsQ0FDaEJRLFlBQVksQ0FBQ2tFLFVBQVUsRUFBRTFELGlCQUFpQixFQUFFekIsT0FBTyxFQUFFQyxXQUFXLENBQUMsQ0FDakVNLElBQUksQ0FBRTBGLGNBQWUsSUFBS25HLHdCQUF3QixDQUFDbUcsY0FBYyxDQUFDLENBQUMsQ0FDbkVOLEtBQUssQ0FBQyxVQUFVekUsS0FBeUIsRUFBRTtVQUMzQ0MsR0FBRyxDQUFDRCxLQUFLLENBQUMsOEJBQThCLEVBQUVBLEtBQUssQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFDSGhDLGNBQWMsQ0FBQzRHLEtBQUssQ0FBQyxDQUFDO1FBQ3RCO01BQ0Q7UUFDQ2xHLGdCQUFnQixDQUFDLENBQUM7UUFDbEJWLGNBQWMsQ0FBQzRHLEtBQUssQ0FBQyxDQUFDO0lBQ3hCO0VBQ0Q7RUFFQSxNQUFNckYsa0JBQWtCLEdBQUc7SUFDMUJvQyx5Q0FBeUMsRUFBRUEseUNBQXlDO0lBQ3BGekQsb0NBQW9DLEVBQUVBLG9DQUFvQztJQUMxRUosY0FBYyxFQUFFQSxjQUFjO0lBQzlCVSxjQUFjLEVBQUVBLGNBQWM7SUFDOUJpQix5QkFBeUIsRUFBRUEseUJBQXlCO0lBQ3BEVSxvQ0FBb0MsRUFBRUEsb0NBQW9DO0lBQzFFTSxxQkFBcUIsRUFBRUEscUJBQXFCO0lBQzVDakIscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1Q3dFLFlBQVksRUFBRUEsWUFBWTtJQUMxQmpFLFlBQVksRUFBRUE7RUFDZixDQUFDO0VBQUMsT0FFYVIsa0JBQWtCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
344
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZpZ2F0aW9uVHlwZSIsIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZGF0YUxvc3NEaWFsb2ciLCJEcmFmdERhdGFMb3NzRGlhbG9nIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwicGFnZUNvbnRyb2xsZXIiLCJvTWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwicHJvY2Vzc0ZjbE1vZGUiLCJkcmFmdEFkbWluRGF0YSIsImZuQ2FuY2VsRnVuY3Rpb24iLCJvQ29udHJvbGxlciIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImJTa2lwQmluZGluZ1RvVmlldyIsImNvbnRleHQiLCJoaWRkZW5EcmFmdCIsIkNyZWF0aW9uRGF0ZVRpbWUiLCJMYXN0Q2hhbmdlRGF0ZVRpbWUiLCJlZGl0RmxvdyIsImlzRG9jdW1lbnRNb2RpZmllZCIsIm9wZW4iLCJ0aGVuIiwic2VsZWN0ZWRLZXkiLCJkcmFmdERhdGFMb3NzUG9wdXAiLCJoYW5kbGVEaWFsb2dTZWxlY3Rpb24iLCJwcm9jZXNzTm9BY3RpdmVFbnRpdHlNb2RlIiwibmF2aWdhdGlvblR5cGUiLCJiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIkJhY2tOYXZpZ2F0aW9uIiwiZGlzY2FyZERyYWZ0IiwiZXJyb3IiLCJMb2ciLCJGb3J3YXJkTmF2aWdhdGlvbiIsInByb2Nlc3NFZGl0aW5nRHJhZnRGb3JFeGlzdGluZ0VudGl0eSIsIm9Db250ZXh0IiwibVBhcmFtZXRlcnMiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmluZGluZ1RvVmlldyIsImNhbmNlbERvY3VtZW50IiwicHJvY2Vzc0VkaXRTdGF0ZURpcnR5IiwicHJvY2Vzc0RyYWZ0QWRtaW5EYXRhIiwiZm5Qcm9jZXNzRnVuY3Rpb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJoYXNBY3RpdmVFbnRpdHkiLCJjb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJhcHBseSIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYWx3YXlzU2hvd0luSGlkZGVuRHJhZnQiLCJvVmlldyIsImdldFZpZXciLCJvTW9kZWwiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImlzRHJhZnRSb290IiwiZ2V0T2JqZWN0IiwiYklzRWRpdGFibGUiLCJDb21tb25VdGlscyIsImdldElzRWRpdGFibGUiLCJvcmlnaW5hbENvbnRleHQiLCJkcmFmdFJvb3RQYXRoIiwiZ2V0UGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290UGF0aCIsImJpbmRDb250ZXh0IiwiJGV4cGFuZCIsImdldEJvdW5kQ29udGV4dCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYmFja05hdlNob3dzRGlhbG9nIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0V4aXRzQXBwIiwiaXNEZWxldGVkIiwicmVxdWVzdFByb3BlcnR5IiwiZ2V0UHJvcGVydHkiLCJvRXJyb3IiLCJzYXZlRG9jdW1lbnQiLCJjb250cm9sbGVyIiwiaGFzSW5pdGlhbENvbnRleHQiLCJpc0EiLCJfc2F2ZURvY3VtZW50IiwicGFyYW1zIiwic2tpcEJhY2tOYXZpZ2F0aW9uIiwiU2F2ZSIsInNhdmVkQ29udGV4dCIsImNhdGNoIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiY2xvc2UiLCJLZWVwIiwiRGlzY2FyZCIsImRpc2NhcmRlZERyYWZ0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJkcmFmdERhdGFMb3NzUG9wdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IERyYWZ0RGF0YUxvc3NEaWFsb2cgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL0RhdGFMb3NzT3JEcmFmdERpc2NhcmQvRHJhZnREYXRhTG9zc0RpYWxvZ1wiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCIuLi8uLi9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vKiBFbnVtIGZvciBuYXZpZ2F0aW9uIHR5cGVzICovXG5lbnVtIE5hdmlnYXRpb25UeXBlIHtcblx0QmFja05hdmlnYXRpb24gPSBcIkJhY2tOYXZpZ2F0aW9uXCIsXG5cdEZvcndhcmROYXZpZ2F0aW9uID0gXCJGb3J3YXJkTmF2aWdhdGlvblwiXG59XG5cbi8qIEVudW0gdHlwZXMgZm9yIHRoZSBkYXRhIGxvc3MgZGlhbG9nIG9wdGlvbnMgKi9cbmVudW0gRHJhZnREYXRhTG9zc09wdGlvbnMge1xuXHRTYXZlID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uU2F2ZVwiLFxuXHRLZWVwID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uS2VlcFwiLFxuXHREaXNjYXJkID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uRGlzY2FyZFwiXG59XG5cbnR5cGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgPSB7XG5cdENyZWF0aW9uRGF0ZVRpbWU6IERhdGU7XG5cdExhc3RDaGFuZ2VEYXRlVGltZTogRGF0ZTtcbn07XG5cbi8qQ3JlYXRlIHRoZSBkYXRhIGxvc3MgZGlhbG9nKi9cbmNvbnN0IGRhdGFMb3NzRGlhbG9nID0gbmV3IERyYWZ0RGF0YUxvc3NEaWFsb2coXCJmZTo6RHJhZnREYXRhTG9zc1BvcHVwXCIpO1xuXG4vKipcbiAqIFRoZSBtZXRob2QgY2hlY2tzIHdoZXRoZXIgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGluIHRoZSBtYW5pZmVzdCBpcyBzZXQgdG8gc2lsZW50bHkga2VlcCB0aGUgZHJhZnQgaW4gY2FzZSBhIGZvcndhcmQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQuXG4gKiBAcGFyYW0gcGFnZUNvbnRyb2xsZXIgVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBQYWdlQ29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybnMgQm9vbGVhbiB2YWx1ZSB3aXRoIHRydWUgb3IgZmFsc2UgdG8gc2lsZW50bHkga2VlcCB0aGUgZHJhZnRcbiAqL1xuZnVuY3Rpb24gc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uKHBhZ2VDb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IGJvb2xlYW4ge1xuXHRjb25zdCBvTWFuaWZlc3QgPSBwYWdlQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gb01hbmlmZXN0Py5hcHA/LnNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbiB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBGQ0wgbW9kZS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGRyYWZ0IG9wZXJhdGlvblxuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGY2xNb2RlKFxuXHRkcmFmdEFkbWluRGF0YTogRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEsXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gVGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgaW4gRkNMIG1vZGUgc28gaW4gdGhpcyBjYXNlIHdlIGZhbGwgYmFjayB0b1xuXHQvLyB0aGUgb2xkIGxvZ2ljIHNpbmNlIHRoZSBkaXJ0eSBzdGF0ZSBoYW5kbGluZyBpcyBub3QgcHJvcGVybHkgd29ya2luZ1xuXHQvLyBmb3IgRkNMLlxuXHRpZiAoZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lICYmICFvQ29udHJvbGxlci5lZGl0Rmxvdy5pc0RvY3VtZW50TW9kaWZpZWQoKSkge1xuXHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkYXRhTG9zc0RpYWxvZ1xuXHRcdFx0Lm9wZW4ob0NvbnRyb2xsZXIpXG5cdFx0XHQudGhlbigoc2VsZWN0ZWRLZXkpID0+XG5cdFx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cC5oYW5kbGVEaWFsb2dTZWxlY3Rpb24oXG5cdFx0XHRcdFx0c2VsZWN0ZWRLZXkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBtb2RlIHdpdGggbm8gYWN0aXZlIGVudGl0eS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvbiBUaGUgY2FuY2VsIGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqIEBwYXJhbSBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIFRoZSBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2tpcCB0aGUgcG9wdXAgYXBwZWFyYW5jZSBpbiBmb3J3YXJkIGNhc2VcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXcgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUoXG5cdGRyYWZ0QWRtaW5EYXRhOiBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSxcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzOiBGdW5jdGlvbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlLFxuXHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBib29sZWFuLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFRoZXJlIGlzIG5vIGFjdGl2ZSBlbnRpdHkgc28sIHdlIGFyZSBlZGl0aW5nIGVpdGhlciBuZXdseSBjcmVhdGVkIGRhdGEgb3Jcblx0Ly8gYSBkcmFmdCB3aGljaCBoYXMgbmV2ZXIgYmVlbiBzYXZlZCB0byBhY3RpdmUgdmVyc2lvblxuXHQvLyBTaW5jZSB3ZSB3YW50IHRvIHJlYWN0IGRpZmZlcmVudGx5IGluIHRoZSB0d28gc2l0dWF0aW9ucywgd2UgaGF2ZSB0byBjaGVjayB0aGVcblx0Ly8gZGlydHkgc3RhdGVcblx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRpZiAoXG5cdFx0XHRkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lID09PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWUgJiZcblx0XHRcdCFvQ29udHJvbGxlci5lZGl0Rmxvdy5pc0RvY3VtZW50TW9kaWZpZWQoKSAmJlxuXHRcdFx0bmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0KSB7XG5cdFx0XHQvLyBpbiBjYXNlIHdlIGhhdmUgdW50b3VjaGVkIGNoYW5nZXMgZm9yIHRoZSBkcmFmdCBhbmQgYSBcImJhY2tcIlxuXHRcdFx0Ly8gbmF2aWdhdGlvbiB3ZSBjYW4gc2lsZW50bHkgZGlzY2FyZCB0aGUgZHJhZnQgYWdhaW5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL25vLW5lc3Rpbmdcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGRyYWZ0RGF0YUxvc3NQb3B1cC5kaXNjYXJkRHJhZnQob0NvbnRyb2xsZXIsIGJTa2lwQmluZGluZ1RvVmlldywgY29udGV4dCwgaGlkZGVuRHJhZnQpO1xuXHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbmNlbGluZyB0aGUgZG9jdW1lbnRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZpZ2F0aW9uVHlwZS5Gb3J3YXJkTmF2aWdhdGlvbiAmJiBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uKSB7XG5cdFx0XHQvLyBJbiBjYXNlIHdlIGhhdmUgYSBcImZvcndhcmQgbmF2aWdhdGlvblwiIGFuZCBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHQvLyB3ZSBcInNpbGVudGx5XCIga2VlcCB0aGUgZHJhZnRcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UgZGF0YSBpcyBiZWluZyBjaGFuZ2VkIG9yIGEgZm9yd2FyZCBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdFx0Ly8gYW5kLCB3ZSBhbHdheXMgd2FudCB0byBzaG93IHRoZSBkYXRhIGxvc3MgZGlhbG9nIG9uIG5hdmlnYXRpb25cblx0XHRcdHJldHVybiBkYXRhTG9zc0RpYWxvZ1xuXHRcdFx0XHQub3BlbihvQ29udHJvbGxlcilcblx0XHRcdFx0LnRoZW4oKHNlbGVjdGVkS2V5KSA9PlxuXHRcdFx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cC5oYW5kbGVEaWFsb2dTZWxlY3Rpb24oXG5cdFx0XHRcdFx0XHRzZWxlY3RlZEtleSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIFdlIGFyZSBlZGl0aW5nIGEgZHJhZnQgd2hpY2ggaGFzIGJlZW4gY3JlYXRlZCBlYXJsaWVyIGJ1dCBuZXZlciBzYXZlZCB0byBhY3RpdmVcblx0XHQvLyB2ZXJzaW9uIGFuZCBzaW5jZSB0aGUgZWRpdCBzdGF0ZSBpcyBub3QgZGlydHksIHRoZXJlIGhhdmUgYmVlbiBubyB1c2VyIGNoYW5nZXNcblx0XHQvLyBzbyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBzaWxlbnRseSBuYXZpZ2F0ZSBhbmQgZG8gbm90aGluZ1xuXHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHR9XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgZHJhZnQgZWRpdGluZyBmb3IgZXhpc3RpbmcgZW50aXR5LlxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBjYWxsXG4gKiBAcGFyYW0gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5KFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzOiBGdW5jdGlvbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gV2UgYXJlIGVkaXRpbmcgYSBkcmFmdCBmb3IgYW4gZXhpc3RpbmcgYWN0aXZlIGVudGl0eVxuXHQvLyBUaGUgQ3JlYXRpb25EYXRlVGltZSBhbmQgTGFzdENoYW5nZURhdGVUaW1lIGFyZSBlcXVhbCwgc28gdGhpcyBkcmFmdCB3YXNcblx0Ly8gbmV2ZXIgc2F2ZWQgYmVmb3JlLCBoZW5jZSB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZyBhIG5ld2x5IGNyZWF0ZWQgZHJhZnQgZm9yXG5cdC8vIGFuIGV4aXN0aW5nIGFjdGl2ZSBlbnRpdHkgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHQvLyBBbHNvLCB0aGVyZSBoYXZlIHNvIGZhciBiZWVuIG5vIGNoYW5nZXMgbWFkZSB0byB0aGUgZHJhZnQgYW5kIGluIHRoaXNcblx0Ly8gY2FzZSB3ZSB3YW50IHRvIHNpbGVudGx5IG5hdmlnYXRlIGFuZCBkZWxldGUgdGhlIGRyYWZ0IGluIGNhc2Ugb2YgYSBiYWNrXG5cdC8vIG5hdmlnYXRpb24gYnV0IGluIGNhc2Ugb2YgYSBmb3J3YXJkIG5hdmlnYXRpb24gd2Ugd2FudCB0byBzaWxlbnRseSBrZWVwIGl0IVxuXHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uKSB7XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0XHRza2lwQmluZGluZ1RvVmlldzogdHJ1ZVxuXHRcdH07XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgb0NvbnRyb2xsZXIuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjYW5jZWxpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSW4gY2FzZSBvZiBhIGZvcndhcmQgbmF2aWdhdGlvbiB3ZSBzaWxlbnRseSBrZWVwIHRoZSBkcmFmdCBhbmQgb25seVxuXHRcdC8vIGV4ZWN1dGUgdGhlIGZvbGxvd3VwIGZ1bmN0aW9uLlxuXHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHR9XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgY29udGV4dCB3aGVuIHRoZSBlZGl0IHN0YXRlIGlzIGluIGRpcnR5IG1vZGUuXG4gKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIGN1cnJlbnQgY29udHJvbGxlciByZWZlcmVuY2VkLlxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gVGhlIGNhbmNlbCBmdW5jdGlvblxuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIG5hdmlnYXRpb25UeXBlIFRoZSBuYXZpZ2F0aW9uIHR5cGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4gKiBAcGFyYW0gYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbiBUaGUgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNraXAgdGhlIHBvcHVwIGFwcGVhcmFuY2UgaW4gZm9yd2FyZCBjYXNlXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlldy5cbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEByZXR1cm5zIE5vdGhpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0VkaXRTdGF0ZURpcnR5KFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb246IGJvb2xlYW4sXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZpZ2F0aW9uVHlwZS5Gb3J3YXJkTmF2aWdhdGlvbiAmJiBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uKSB7XG5cdFx0Ly8gSW4gY2FzZSB3ZSBoYXZlIGEgXCJmb3J3YXJkIG5hdmlnYXRpb25cIiBhbmQgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdC8vIHdlIFwic2lsZW50bHlcIiBrZWVwIHRoZSBkcmFmdFxuXHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFRoZSBDcmVhdGlvbkRhdGVUaW1lIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUgYXJlIE5PVCBlcXVhbCwgc28gd2UgYXJlIGN1cnJlbnRseSBlZGl0aW5nXG5cdFx0Ly8gYW4gZXhpc3RpbmcgZHJhZnQgYW5kIG5lZWQgdG8gZGlzdGluZ3Vpc2ggZGVwZW5kaW5nIG9uIGlmIGFueSBjaGFuZ2VzXG5cdFx0Ly8gaGF2ZSBiZWVuIG1hZGUgaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uIG9yIG5vdFxuXHRcdC8vIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLCBzbyB3ZSB3YW50XG5cdFx0Ly8gdG8gc2hvdyB0aGUgZGF0YSBsb3NzIGRpYWxvZyBhbmQgbGV0IHRoZSB1c2VyIGRlY2lkZVxuXHRcdHJldHVybiBkYXRhTG9zc0RpYWxvZ1xuXHRcdFx0Lm9wZW4ob0NvbnRyb2xsZXIpXG5cdFx0XHQudGhlbigoc2VsZWN0ZWRLZXkpID0+XG5cdFx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cC5oYW5kbGVEaWFsb2dTZWxlY3Rpb24oXG5cdFx0XHRcdFx0c2VsZWN0ZWRLZXkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpYyB0byBwcm9jZXNzIHRoZSBhZG1pbiBkYXRhLlxuICogQHBhcmFtIGRyYWZ0QWRtaW5EYXRhIEFkbWluIGRhdGFcbiAqIEBwYXJhbSBmblByb2Nlc3NGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gVGhlIGNhbmNlbCBmdW5jdGlvblxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZFxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICogQHBhcmFtIGhhc0FjdGl2ZUVudGl0eSBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIHJvb3QgY29udGV4dCBoYXMgYWN0aXZlIGVudGl0eSBvciBub3RcbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICogQHJldHVybnMgTm90aGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRHJhZnRBZG1pbkRhdGEoXG5cdGRyYWZ0QWRtaW5EYXRhOiBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSxcblx0Zm5Qcm9jZXNzRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0YlNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlID0gTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdGhhc0FjdGl2ZUVudGl0eT86IGJvb2xlYW4sXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGNvbGxhYm9yYXRpb25Db25uZWN0ZWQgPSBvQ29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKTtcblx0Y29uc3QgcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzID0gIWNvbGxhYm9yYXRpb25Db25uZWN0ZWRcblx0XHQ/IGZuUHJvY2Vzc0Z1bmN0aW9uXG5cdFx0OiBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0XHRcdG9Db250cm9sbGVyLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdGZuUHJvY2Vzc0Z1bmN0aW9uLmFwcGx5KG51bGwsIC4uLmFyZ3MpO1xuXHRcdCAgfTtcblxuXHRjb25zdCBiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uID0gc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uKG9Db250cm9sbGVyKTtcblx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0aWYgKG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRhd2FpdCBwcm9jZXNzRmNsTW9kZShcblx0XHRcdFx0ZHJhZnRBZG1pbkRhdGEsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmICghaGFzQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRwcm9jZXNzTm9BY3RpdmVFbnRpdHlNb2RlKFxuXHRcdFx0XHRkcmFmdEFkbWluRGF0YSxcblx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0bmF2aWdhdGlvblR5cGUsXG5cdFx0XHRcdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24sXG5cdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0ZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lICYmXG5cdFx0XHQoIWhpZGRlbkRyYWZ0IHx8IChoaWRkZW5EcmFmdCAmJiAhb0NvbnRyb2xsZXIuZWRpdEZsb3cuaXNEb2N1bWVudE1vZGlmaWVkKCkpKVxuXHRcdCkge1xuXHRcdFx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5KG9Db250cm9sbGVyLCBjb250ZXh0LCBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsIG5hdmlnYXRpb25UeXBlKTtcblx0XHR9IGVsc2UgaWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eShcblx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0bmF2aWdhdGlvblR5cGUsXG5cdFx0XHRcdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24sXG5cdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRoZSB1c2VyIHN0YXJ0ZWQgZWRpdGluZyB0aGUgZXhpc3RpbmcgZHJhZnQgYnV0IGRpZCBub3QgbWFrZSBhbnkgY2hhbmdlc1xuXHRcdFx0Ly8gaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLCBzbyBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHdhbnRcblx0XHRcdC8vIHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgYnV0IGp1c3Qga2VlcCB0aGUgZHJhZnRcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIGdlbmVyYWwgaGFuZGxlciBpbiB3aGljaCB0aGUgaW5kaXZpZHVhbCBzdGVwcyBhcmUgY2FsbGVkLlxuICogQHBhcmFtIGZuUHJvY2Vzc0Z1bmN0aW9uXG4gKiBAcGFyYW0gZm5DYW5jZWxGdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0XG4gKiBAcGFyYW0gb0NvbnRyb2xsZXJcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXdcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZVxuICogQHBhcmFtIGFsd2F5c1Nob3dJbkhpZGRlbkRyYWZ0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRmblByb2Nlc3NGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGZuQ2FuY2VsRnVuY3Rpb246IEZ1bmN0aW9uLFxuXHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0YlNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlID0gTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdGFsd2F5c1Nob3dJbkhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBvTW9kZWwgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE1vZGVsKCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHZpZXdEYXRhID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyB7IGVudGl0eVNldD86IHN0cmluZzsgY29udGV4dFBhdGg/OiBzdHJpbmcgfTtcblx0Y29uc3QgY29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCAodmlld0RhdGEuZW50aXR5U2V0ID8gYC8ke3ZpZXdEYXRhLmVudGl0eVNldH1gIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgaXNEcmFmdFJvb3QgPSBjb250ZXh0UGF0aCA/ICEhb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7Y29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKSA6IGZhbHNlO1xuXHRjb25zdCBiSXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpO1xuXHRjb25zdCBvcmlnaW5hbENvbnRleHQgPSBvQ29udGV4dDtcblx0bGV0IGRyYWZ0Um9vdFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdGlmICghaXNEcmFmdFJvb3QpIHtcblx0XHRkcmFmdFJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChvQ29udGV4dCkgPz8gZHJhZnRSb290UGF0aDtcblx0XHRvQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChkcmFmdFJvb3RQYXRoLCB1bmRlZmluZWQsIHsgJGV4cGFuZDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiIH0pLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9XG5cdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHQ/LmVuYWJsZWQ7XG5cdC8vIFNob3VsZG4ndCBkaXNwbGF5IGRhdGEgbG9zcyBwb3BvdmVyIG9uIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiBmcm9tIHN1Yi1vYmplY3QgcGFnZXMgKHVubGVzcyB0aGVyZSdzIG5vIHBhZ2UgYmVmb3JlIGluIHRoZSBoaXN0b3J5IGJlY2F1c2Ugb2YgZGVlcCBsaW5raW5nKVxuXHQvLyBvciB3aGVuIG9iamVjdCBwYWdlIGlzIGluIGRpc3BsYXkgbW9kZSwgb3Igd2hlbiB0aGUgb2JqZWN0IGlzIGRlbGV0ZWRcblx0Y29uc3QgYmFja05hdlNob3dzRGlhbG9nID1cblx0XHRpc0RyYWZ0Um9vdCB8fCBvQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrRXhpdHNBcHAoKSB8fCAoaGlkZGVuRHJhZnQgJiYgYWx3YXlzU2hvd0luSGlkZGVuRHJhZnQpO1xuXHRpZiAob3JpZ2luYWxDb250ZXh0LmlzRGVsZXRlZCgpIHx8ICghYmFja05hdlNob3dzRGlhbG9nICYmIG5hdmlnYXRpb25UeXBlID09PSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbikgfHwgIWJJc0VkaXRhYmxlKSB7XG5cdFx0Zm5Qcm9jZXNzRnVuY3Rpb24oKTtcblx0fSBlbHNlIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gVGhlIGZvbGxvd2luZyAzIHByb3BlcnRpZXMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSBkcmFmdCwgc28gd2UgZW5zdXJlIHRoZXkgYXJlIGxvYWRlZFxuXHRcdFx0YXdhaXQgb0NvbnRleHQucmVxdWVzdFByb3BlcnR5KFtcblx0XHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCIsXG5cdFx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIsXG5cdFx0XHRcdFwiSGFzQWN0aXZlRW50aXR5XCJcblx0XHRcdF0pO1xuXHRcdFx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSBvQ29udGV4dC5nZXRPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRcdGF3YWl0IHByb2Nlc3NEcmFmdEFkbWluRGF0YShcblx0XHRcdFx0ZHJhZnRBZG1pbkRhdGEsXG5cdFx0XHRcdGZuUHJvY2Vzc0Z1bmN0aW9uLFxuXHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRoaWRkZW5EcmFmdCA/IG9yaWdpbmFsQ29udGV4dCA6IG9Db250ZXh0LFxuXHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRuYXZpZ2F0aW9uVHlwZSxcblx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIiksXG5cdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIGRyYWZ0RGF0YUNvbnRleHQgaW5mb3JtYXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFNhdmVzIHRoZSBkb2N1bWVudC4gSWYgdGhlIGNvbnRyb2xsZXIgaXMgb2YgdHlwZSBPYmplY3RQYWdlLCB0aGVuIGludGVybmFsIF9zYXZlRG9jdW1lbnQgaXMgY2FsbGVkLCBvdGhlcndpc2Ugc2F2ZURvY3VtZW50XG4gKiBmcm9tIEVkaXRGbG93IGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBjb250cm9sbGVyIENvbnRyb2xsZXIgb2YgdGhlIGN1cnJlbnQgdmlld1xuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGRyYWZ0IG9wZXJhdGlvbnNcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZlZCBpZiB0aGUgc2F2ZSB3YXMgc3VjY2Vzc2Z1bFxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlRG9jdW1lbnQoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCwgc2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnN0IGhhc0luaXRpYWxDb250ZXh0ID0gY29udGV4dCAhPT0gdW5kZWZpbmVkO1xuXHRjb250ZXh0ID0gY29udGV4dCA/PyBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRpZiAoIWhhc0luaXRpYWxDb250ZXh0ICYmIGNvbnRyb2xsZXIuaXNBPE9iamVjdFBhZ2VDb250cm9sbGVyQ29udHJvbGxlcj4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIikpIHtcblx0XHRyZXR1cm4gY29udHJvbGxlci5fc2F2ZURvY3VtZW50KHNraXBCaW5kaW5nVG9WaWV3KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29udHJvbGxlci5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwgeyBza2lwQmluZGluZ1RvVmlldyB9KTtcblx0fVxufVxuXG4vKipcbiAqIERpc2NhcmRzIHRoZSBkcmFmdC5cbiAqIEBwYXJhbSBjb250cm9sbGVyIENvbnRyb2xsZXIgb2YgdGhlIGN1cnJlbnQgdmlld1xuICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IFRoZSBwYXJhbWV0ZXIgdG8gc2tpcCB0aGUgYmluZGluZyB0byB0aGUgdmlld1xuICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgdGhlIGRyYWZ0IG9wZXJhdGlvbnNcbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIGlmIGNhbmNlbERvY3VtZW50IHdhcyBzdWNjZXNzZnVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc2NhcmREcmFmdChcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnRleHQgPSBjb250ZXh0ID8/IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRza2lwQmFja05hdmlnYXRpb246IGhpZGRlbkRyYWZ0ICYmICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpID8gZmFsc2UgOiB0cnVlLFxuXHRcdHNraXBEaXNjYXJkUG9wb3ZlcjogdHJ1ZSxcblx0XHRza2lwQmluZGluZ1RvVmlldzogc2tpcEJpbmRpbmdUb1ZpZXcgIT09IHVuZGVmaW5lZCA/IHNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXHRyZXR1cm4gY29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChjb250ZXh0LCBwYXJhbXMpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBmb2xsb3ctdXAgZnVuY3Rpb25zIGFmdGVyIGFuIG9wdGlvbiB3YXMgc2VsZWN0ZWQgaW4gdGhlIGRhdGEgbG9zcyBkaWFsb2cuXG4gKiBAcGFyYW0gc2VsZWN0ZWRLZXkgVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gdGhlIGRhdGEgbG9zcyBkaWFsb2dcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRzZWxlY3RlZEtleTogc3RyaW5nLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogdm9pZCB7XG5cdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRjYXNlIERyYWZ0RGF0YUxvc3NPcHRpb25zLlNhdmU6XG5cdFx0XHRkcmFmdERhdGFMb3NzUG9wdXBcblx0XHRcdFx0LnNhdmVEb2N1bWVudChjb250cm9sbGVyLCBjb250ZXh0LCBza2lwQmluZGluZ1RvVmlldylcblx0XHRcdFx0LnRoZW4oKHNhdmVkQ29udGV4dD8pID0+IHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyhzYXZlZENvbnRleHQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IgPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNhdmluZyBkb2N1bWVudFwiLCBlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuS2VlcDpcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuRGlzY2FyZDpcblx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cFxuXHRcdFx0XHQuZGlzY2FyZERyYWZ0KGNvbnRyb2xsZXIsIHNraXBCaW5kaW5nVG9WaWV3LCBjb250ZXh0LCBoaWRkZW5EcmFmdClcblx0XHRcdFx0LnRoZW4oKGRpc2NhcmRlZERyYWZ0PykgPT4gcHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKGRpc2NhcmRlZERyYWZ0KSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGlzY2FyZGluZyBkcmFmdFwiLCBlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHR9XG59XG5cbmNvbnN0IGRyYWZ0RGF0YUxvc3NQb3B1cCA9IHtcblx0cHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb246IHByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uLFxuXHRzaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb246IHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbixcblx0TmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlLFxuXHRwcm9jZXNzRmNsTW9kZTogcHJvY2Vzc0ZjbE1vZGUsXG5cdHByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGU6IHByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUsXG5cdHByb2Nlc3NFZGl0aW5nRHJhZnRGb3JFeGlzdGluZ0VudGl0eTogcHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5LFxuXHRwcm9jZXNzRWRpdFN0YXRlRGlydHk6IHByb2Nlc3NFZGl0U3RhdGVEaXJ0eSxcblx0aGFuZGxlRGlhbG9nU2VsZWN0aW9uOiBoYW5kbGVEaWFsb2dTZWxlY3Rpb24sXG5cdHNhdmVEb2N1bWVudDogc2F2ZURvY3VtZW50LFxuXHRkaXNjYXJkRHJhZnQ6IGRpc2NhcmREcmFmdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZHJhZnREYXRhTG9zc1BvcHVwO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQVdBO0VBQUEsSUFDS0EsY0FBYywwQkFBZEEsY0FBYztJQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBQSxPQUFkQSxjQUFjO0VBQUEsRUFBZEEsY0FBYztFQUtuQjtFQUFBLElBQ0tDLG9CQUFvQiwwQkFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFBLE9BQXBCQSxvQkFBb0I7RUFBQSxFQUFwQkEsb0JBQW9CO0VBV3pCO0VBQ0EsTUFBTUMsY0FBYyxHQUFHLElBQUlDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDOztFQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Msb0NBQW9DQSxDQUFDQyxjQUE4QixFQUFXO0lBQ3RGLE1BQU1DLFNBQVMsR0FBR0QsY0FBYyxDQUFDRSxlQUFlLENBQUMsQ0FBQyxDQUFDQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDN0UsT0FBT0YsU0FBUyxFQUFFRyxHQUFHLEVBQUVMLG9DQUFvQyxJQUFJLEtBQUs7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVNLGNBQWNBLENBQzVCQyxjQUF1QyxFQUN2Q0MsZ0JBQTBCLEVBQzFCQyxXQUEyQixFQUMzQkMsd0JBQWtDLEVBQ2xDQyxrQkFBNEIsRUFDNUJD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
@@ -120,7 +120,7 @@ async function processNoActiveEntityMode(
120
120
  // navigation we can silently discard the draft again
121
121
  // eslint-disable-next-line promise/no-nesting
122
122
  try {
123
- await draftDataLossPopup.discardDraft(oController, bSkipBindingToView, context);
123
+ await draftDataLossPopup.discardDraft(oController, bSkipBindingToView, context, hiddenDraft);
124
124
  processFunctionForDrafts();
125
125
  } catch (error: unknown) {
126
126
  Log.error("Error while canceling the document", error as string);