@sapui5/sap.fe.core 1.136.10 → 1.136.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppStateHandler.js +3 -2
  4. package/src/sap/fe/core/AppStateHandler.ts +4 -1
  5. package/src/sap/fe/core/PageController.controller.js +10 -0
  6. package/src/sap/fe/core/PageController.controller.ts +3 -0
  7. package/src/sap/fe/core/TemplateComponent.js +1 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +1 -3
  9. package/src/sap/fe/core/controllerextensions/EditFlow.js +62 -20
  10. package/src/sap/fe/core/controllerextensions/EditFlow.ts +98 -38
  11. package/src/sap/fe/core/controllerextensions/InternalRouting.js +29 -16
  12. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -18
  13. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  14. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
  15. package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
  16. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
  17. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
  18. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
  19. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
  20. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
  21. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  22. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  23. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
  24. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
  25. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
  26. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
  27. package/src/sap/fe/core/converters/controls/Common/Action.js +17 -2
  28. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -2
  29. package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
  30. package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
  31. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
  32. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
  33. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +14 -19
  34. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +17 -28
  35. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  36. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  37. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  38. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  39. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  40. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  41. package/src/sap/fe/core/fpm/manifest.json +1 -1
  42. package/src/sap/fe/core/helpers/AppStartupHelper.js +75 -18
  43. package/src/sap/fe/core/helpers/AppStartupHelper.ts +79 -25
  44. package/src/sap/fe/core/helpers/MetaModelFunction.js +10 -3
  45. package/src/sap/fe/core/helpers/MetaModelFunction.ts +9 -3
  46. package/src/sap/fe/core/library.js +1 -1
  47. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  48. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  49. package/src/sap/fe/core/messagebundle_fr.properties +1 -1
  50. package/src/sap/fe/core/messagebundle_ko.properties +4 -4
  51. package/src/sap/fe/core/messagebundle_no.properties +2 -2
  52. package/src/sap/fe/core/messagebundle_uk.properties +2 -2
  53. package/src/sap/fe/core/messagebundle_vi.properties +4 -4
  54. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  55. package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
  56. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
  57. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
  58. package/src/sap/fe/core/services/RoutingServiceFactory.js +11 -5
  59. package/src/sap/fe/core/services/RoutingServiceFactory.ts +16 -7
  60. package/ui5.yaml +1 -0
@@ -9,6 +9,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
9
9
  var getActionEnabledExpression = UIFormatters.getActionEnabledExpression;
10
10
  var replaceSpecialChars = StableIdHelper.replaceSpecialChars;
11
11
  var UI = BindingHelper.UI;
12
+ var Draft = BindingHelper.Draft;
12
13
  var getCustomActionID = ID.getCustomActionID;
13
14
  var Placement = ConfigurableObject.Placement;
14
15
  var ActionType = ManifestSettings.ActionType;
@@ -415,8 +416,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
415
416
  } else if (isConstant(resolvedBinding) && typeof resolvedBinding.value === "string") {
416
417
  // Then it's a module-method reference "sap.xxx.yyy.doSomething"
417
418
  const methodPath = resolvedBinding.value;
419
+ const internalModelPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
418
420
  // FIXME: The custom "isEnabled" check does not trigger (because none of the bound values changes)
419
- result = formatResult([pathInModel("/", "$view"), methodPath, pathInModel("selectedContexts", "internal")], fpmFormatter.customBooleanPropertyCheck, !forContextMenu ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType() : undefined);
421
+ result = formatResult([pathInModel("/", "$view"), methodPath, pathInModel(internalModelPath, "internal")], fpmFormatter.customBooleanPropertyCheck, !forContextMenu ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType() : undefined);
420
422
  } else {
421
423
  // then it's a binding
422
424
  result = resolvedBinding;
@@ -590,7 +592,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
590
592
  }
591
593
  return false;
592
594
  }
595
+
596
+ /**
597
+ * Gets the binding expression for the visibility of the CreateNext button.
598
+ * This function centralizes the visibility logic to be reused by both getFooterDefaultActions
599
+ * and FooterContent.tsx.
600
+ * @param hiddenDraftEnabled Whether hidden draft mode is enabled
601
+ * @param fclEnabled Whether FCL (Flexible Column Layout) is enabled
602
+ * @returns A compiled binding expression for the CreateNext button visibility
603
+ */
593
604
  _exports.isActionAIOperation = isActionAIOperation;
605
+ function getCreateNextButtonVisibility(hiddenDraftEnabled, fclEnabled) {
606
+ return ifElse(hiddenDraftEnabled === true, ifElse(fclEnabled === true, and(Draft.IsNewObject, equal(pathInModel("/showSaveAndCancelButton", "fclhelper"), true)), Draft.IsNewObject), Draft.IsNewObject);
607
+ }
608
+ _exports.getCreateNextButtonVisibility = getCreateNextButtonVisibility;
594
609
  return _exports;
595
610
  }, false);
596
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiX2V4cG9ydHMiLCJhaUljb24iLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9ucyIsIm1lbnVBY3Rpb25Ob3RWaXNpYmxlIiwibWVudUFjdGlvblZpc2libGVQYXRocyIsImF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlIiwibWVudUl0ZW1zVmlzaWJsZVBhdGhzIiwiZm9yRWFjaCIsIm1lbnVBY3Rpb24iLCJ2aXNpYmxlIiwidmFsdWVPZiIsInB1c2giLCJtZW51IiwibGVuZ3RoIiwibWVudUl0ZW0iLCJtZW51SXRlbVZpc2libGUiLCJ0b1N0cmluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ2aXNpYmxlRXhwcmVzc2lvbnMiLCJtYXAiLCJtZW51SXRlbVZpc2libGVQYXRoIiwiYW5kIiwib3IiLCJhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uIiwiYWN0aW9uIiwidHlwZSIsIm5vdCIsImVxdWFsIiwiVUkiLCJoYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiIsIm1hcEFjdGlvbkJ5S2V5IiwibWFuaWZlc3RBY3Rpb25zIiwiYW5ub3RhdGlvbkFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhbm5vdGF0aW9uQWN0aW9uIiwiZmluZCIsImtleSIsIm1hbmlmZXN0QWN0aW9uIiwicmVzdWx0QWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImFjdGlvbkFubm90YXRpb24iLCJBY3Rpb25UeXBlIiwiTWVudSIsImVuYWJsZWQiLCJwcm9wIiwicHJvcEtleSIsImNhbkJlTWVudUl0ZW0iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJtYXBNZW51RGVmYXVsdEFjdGlvbiIsImNvbW1hbmRBY3Rpb25zIiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJtYXBNZW51SXRlbXMiLCJtYXBwZWRNZW51SXRlbXMiLCJtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24iLCJtZW51SXRlbUtleSIsIm1hcHBlZE1lbnVBY3Rpb24iLCJ0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMiLCJhbGxBY3Rpb25zIiwiYWN0aW9uS2V5c1RvRGVsZXRlIiwidW5kZWZpbmVkIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsInJlc3VsdCIsImdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlciIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsImlmRWxzZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJwYXRoSW5Nb2RlbCIsImdyZWF0ZXJPckVxdWFsIiwiX2dldE1hbmlmZXN0VmlzaWJsZSIsIm92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInByZXNzIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiaGlkZGVuQWN0aW9ucyIsImZhY2V0TmFtZSIsImxhc3REb3RJbmRleCIsImxhc3RJbmRleE9mIiwiaWQiLCJzdGFydHNXaXRoIiwiZ2V0Q3VzdG9tQWN0aW9uSUQiLCJEZWZhdWx0IiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwiaGFuZGxlck1vZHVsZSIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJoYW5kbGVyTWV0aG9kIiwidGV4dCIsIm5vV3JhcCIsIl9fbm9XcmFwIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsImlzQUlPcGVyYXRpb24iLCJwcm9wZXJ0eVZhbHVlIiwicmVzb2x2ZWRCaW5kaW5nIiwiaXNDb25zdGFudCIsInZhbHVlIiwiY29uc3RhbnQiLCJtZXRob2RQYXRoIiwiZm9ybWF0UmVzdWx0IiwiZnBtRm9ybWF0dGVyIiwiY3VzdG9tQm9vbGVhblByb3BlcnR5Q2hlY2siLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwib01lbnVJdGVtS2V5cyIsImFjdGlvbk1lbnUiLCJyZWR1Y2UiLCJpdGVtIiwiX3JlZiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImFjdGlvblRhcmdldCIsInBhdGhGcm9tQ29udGV4dExvY2F0aW9uIiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW5hYmxlZEV4cCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJjb2xsYWJvcmF0aW9uT25Sb290IiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0RHJhZnRSb290IiwiZ2V0RW50aXR5U2V0IiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJtYXBwaW5ncyIsIm1hcHBpbmciLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCIsImRldGFpbE9yRGlzcGxheSIsImRldGFpbCIsImRpc3BsYXkiLCJyb3V0ZSIsImFmdGVyRXhlY3V0aW9uIiwibmF2aWdhdGVUb0luc3RhbmNlIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiSXNDb3B5QWN0aW9uIiwiJFR5cGUiLCJnZXRDb3B5QWN0aW9uIiwiY29weURhdGFGaWVsZHMiLCJMb2ciLCJlcnJvciIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtZW51QWN0aW9uSXRlbXMiLCJnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uIiwiYW5ub3RhdGlvbk1lbnVJdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwicHJlcGFyZU1lbnVBY3Rpb25zIiwidW5wcmVwYXJlZEFjdGlvbnMiLCJvdmVycmlkZU1lbnVBY3Rpb25zIiwiZm91bmRBY3Rpb24iLCJtZW51SXRlbUluZGV4Iiwib3ZlcnJpZGVNZW51QWN0aW9uIiwic3BsaWNlIiwiaXNNZW51QUlPcGVyYXRpb24iLCJldmVyeSIsImlzQWN0aW9uQUlPcGVyYXRpb24iLCJBY3Rpb25UYXJnZXQiLCJJc0FJT3BlcmF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRncmVhdGVyT3JFcXVhbCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIE92ZXJyaWRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tQWN0aW9uSUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgZnBtRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgZW51bSBCdXR0b25UeXBlIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRcIixcblx0QXR0ZW50aW9uID0gXCJBdHRlbnRpb25cIixcblx0QmFjayA9IFwiQmFja1wiLFxuXHRDcml0aWNhbCA9IFwiQ3JpdGljYWxcIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRFbXBoYXNpemVkID0gXCJFbXBoYXNpemVkXCIsXG5cdEdob3N0ID0gXCJHaG9zdFwiLFxuXHROZWdhdGl2ZSA9IFwiTmVnYXRpdmVcIixcblx0TmV1dHJhbCA9IFwiTmV1dHJhbFwiLFxuXHRSZWplY3QgPSBcIlJlamVjdFwiLFxuXHRTdWNjZXNzID0gXCJTdWNjZXNzXCIsXG5cdFRyYW5zcGFyZW50ID0gXCJUcmFuc3BhcmVudFwiLFxuXHRVbnN0eWxlZCA9IFwiVW5zdHlsZWRcIixcblx0VXAgPSBcIlVwXCJcbn1cblxuZXhwb3J0IGNvbnN0IGFpSWNvbiA9IFwic2FwLWljb246Ly9haVwiO1xuXG5leHBvcnQgdHlwZSBCYXNlQWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZD86IHN0cmluZztcblx0dGV4dD86IHN0cmluZztcblx0dHlwZT86IEFjdGlvblR5cGU7XG5cdHByZXNzPzogc3RyaW5nO1xuXHRlbmFibGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZWRGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGVGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbmFibGVPblNlbGVjdD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtZW51PzogQmFzZUFjdGlvbltdO1xuXHRmYWNldE5hbWU/OiBzdHJpbmc7XG5cdGNvbW1hbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzQUlPcGVyYXRpb24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24gfCBBY3Rpb25UeXBlLk1lbnUgfCBBY3Rpb25UeXBlLkNvcHk7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGN1c3RvbURhdGE/OiBzdHJpbmc7XG5cdHJlcXVpcmVzRGlhbG9nPzogc3RyaW5nO1xuXHRiaW5kaW5nPzogc3RyaW5nO1xuXHRidXR0b25UeXBlPzogQnV0dG9uVHlwZS5HaG9zdCB8IEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXAgPSBCYXNlQWN0aW9uICYge1xuXHQvLyBpbXBsZW1lbnRzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdHR5cGU6IEFjdGlvblR5cGUuTWVudTtcblx0bWVudTogQW5ub3RhdGlvbkFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tQWN0aW9uID0gQ3VzdG9tRWxlbWVudDxcblx0QmFzZUFjdGlvbiAmIHtcblx0XHRoYW5kbGVyTWV0aG9kPzogc3RyaW5nO1xuXHRcdGhhbmRsZXJNb2R1bGU/OiBzdHJpbmc7XG5cdFx0bm9XcmFwPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgd3JhcHBpbmcgZnJvbSB0aGUgRlBNSGVscGVyXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXHRcdGRlZmF1bHRBY3Rpb24/OiBzdHJpbmcgfCBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uOyAvLyBJbmRpY2F0ZXMgd2hldGhlciBhIGRlZmF1bHQgYWN0aW9uIGV4aXN0cyBpbiB0aGlzIGNvbnRleHRcblx0fVxuPjtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkFjdGlvbkdyb3VwID0gQmFzZUFjdGlvbiAmIHtcblx0Ly8gaW1wbGVtZW50cyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHR0eXBlOiBBY3Rpb25UeXBlLk1lbnU7XG5cdG1lbnU6IEFubm90YXRpb25BY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkQWN0aW9uID0ge1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRlbmFibGVBdXRvU2Nyb2xsPzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0aXNOYXZpZ2FibGU/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRlbmFibGVPblNlbGVjdD86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdG1lbnU/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXG5cdC8vIENhbiBiZSBvdmVyd3JpdHRlbiBieSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFuZCBzaG91bGQgYmUgYWxpZ25lZCBmb3IgYWxsIGFjdGlvbnNcblx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0dmlzaWJsZUZvckNvbnRleHRNZW51PzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhRmllbGRGb3JBY3Rpb25PckFjdGlvbkdyb3VwID0gRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMgfCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzO1xuXG50eXBlIE1lbnVBY3Rpb24gPVxuXHR8IEJhc2VBY3Rpb25cblx0fCB7XG5cdFx0XHR2aXNpYmxlPzogc3RyaW5nW107XG5cdFx0XHRlbmFibGVkPzogc3RyaW5nW107XG5cdFx0XHRtZW51PzogQmFzZUFjdGlvbltdO1xuXHQgIH07XG4vKipcbiAqIE1ldGhvZCBwcm92aWRlcyBhY3Rpb25zIGNvbGxlY3Rpb24gYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIHZpc2libGUgc2V0dGluZyBmb3IgYWxsIGFjdGlvbnMgb2YgdHlwZSBtZW51IGRlcGVuZGluZyBvbiBpdHMgdmlzaWJsZSBzZXR0aW5nIGFuZCBpdHMgbWVudSBpdGVtcyB2aXNpYmxlIHNldHRpbmdzLlxuICogQHBhcmFtIGFjdGlvbnMgQ29sbGVjdGlvbiBvZiBhY3Rpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnMgd2l0aCB2aXNpYmxlIHNldHRpbmcgc2V0IGZvciBhY3Rpb25zIG9mIHR5cGUgbWVudVxuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyA9IChhY3Rpb25zOiBDdXN0b21BY3Rpb25bXSk6IEN1c3RvbUFjdGlvbltdID0+IHtcblx0bGV0IG1lbnVBY3Rpb25Ob3RWaXNpYmxlOiBzdHJpbmcgfCBib29sZWFuLFxuXHRcdG1lbnVBY3Rpb25WaXNpYmxlUGF0aHM6IHN0cmluZ1tdLFxuXHRcdGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlOiBib29sZWFuLFxuXHRcdG1lbnVJdGVtc1Zpc2libGVQYXRoczogc3RyaW5nW107XG5cdGFjdGlvbnMuZm9yRWFjaCgobWVudUFjdGlvbjogTWVudUFjdGlvbikgPT4ge1xuXHRcdG1lbnVBY3Rpb25Ob3RWaXNpYmxlID0gbWVudUFjdGlvbi52aXNpYmxlPy52YWx1ZU9mKCkgPT09IFwiZmFsc2VcIjtcblx0XHRhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZSA9IGZhbHNlO1xuXHRcdG1lbnVJdGVtc1Zpc2libGVQYXRocyA9IFtdO1xuXHRcdG1lbnVBY3Rpb25WaXNpYmxlUGF0aHMgPSBbXTtcblx0XHRpZiAobWVudUFjdGlvbi52aXNpYmxlICYmICEobWVudUFjdGlvbi52aXNpYmxlLnZhbHVlT2YoKSA9PT0gXCJ0cnVlXCIgfHwgbWVudUFjdGlvbi52aXNpYmxlLnZhbHVlT2YoKSA9PT0gXCJmYWxzZVwiKSkge1xuXHRcdFx0bWVudUFjdGlvblZpc2libGVQYXRocy5wdXNoKG1lbnVBY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRpZiAobWVudUFjdGlvbj8ubWVudT8ubGVuZ3RoKSB7XG5cdFx0XHRtZW51QWN0aW9uPy5tZW51Py5mb3JFYWNoKChtZW51SXRlbTogQmFzZUFjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBtZW51SXRlbVZpc2libGUgPSBtZW51SXRlbS52aXNpYmxlO1xuXHRcdFx0XHRpZiAobWVudUl0ZW1WaXNpYmxlICYmICh0eXBlb2YgbWVudUl0ZW1WaXNpYmxlID09PSBcImJvb2xlYW5cIiB8fCBtZW51SXRlbVZpc2libGUudmFsdWVPZigpID09PSBcInRydWVcIikpIHtcblx0XHRcdFx0XHRhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWVudUl0ZW1WaXNpYmxlICYmIG1lbnVJdGVtVmlzaWJsZS52YWx1ZU9mKCkgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdG1lbnVJdGVtc1Zpc2libGVQYXRocy5wdXNoKG1lbnVJdGVtVmlzaWJsZS52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChtZW51QWN0aW9uTm90VmlzaWJsZSkge1xuXHRcdFx0XHQvLyBpZiBtZW51IGlzIHN0YXRpY2FsbHkgdmlzaWJsZSBmYWxzZVxuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSBmYWxzZS50b1N0cmluZygpO1xuXHRcdFx0fSBlbHNlIGlmICghYXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgJiYgIW1lbnVJdGVtc1Zpc2libGVQYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gaWYgYWxsIG1lbnUgaXRlbXMgYXJlIHN0YXRpY2FsbHkgdmlzaWJsZSBmYWxzZVxuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSBmYWxzZS50b1N0cmluZygpO1xuXHRcdFx0fSBlbHNlIGlmIChhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZSAmJiAhbWVudUFjdGlvblZpc2libGVQYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gaWYgYXQgbGVhc3Qgb25lIG1lbnUgaXRlbSBpcyBzdGF0aWNhbGx5IHZpc2libGUgdHJ1ZSBhbmQgbm8gdmlzaWJsZSBzZXR0aW5nIGZvciBtZW51XG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9IHRydWUudG9TdHJpbmcoKTtcblx0XHRcdH0gZWxzZSBpZiAoYXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUpIHtcblx0XHRcdFx0Ly8gaWYgYXQgbGVhc3Qgb25lIG1lbnUgaXRlbSwgdGhlbiBqdXN0IGNvbnNpZGVyIHZpc2libGUgc2V0dGluZyBvZiB0aGUgbWVudVxuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nKSk7XG5cdFx0XHR9IGVsc2UgaWYgKG1lbnVBY3Rpb25WaXNpYmxlUGF0aHMubGVuZ3RoIHx8IG1lbnVJdGVtc1Zpc2libGVQYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIG1lbnUgaXMgc2V0IHRvIGludmlzaWJsZSwgaXQgc2hvdWxkIGJlIGludmlzaWJsZSwgb3RoZXJ3aXNlIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGl0ZW1zXG5cdFx0XHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBtZW51SXRlbXNWaXNpYmxlUGF0aHMubWFwKChtZW51SXRlbVZpc2libGVQYXRoKSA9PlxuXHRcdFx0XHRcdHJlc29sdmVCaW5kaW5nU3RyaW5nKG1lbnVJdGVtVmlzaWJsZVBhdGgsIFwiYm9vbGVhblwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoKG1lbnVBY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcpIHx8IHRydWUsIFwiYm9vbGVhblwiKSwgb3IoLi4udmlzaWJsZUV4cHJlc3Npb25zKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9ICghbWVudUFjdGlvbk5vdFZpc2libGUpLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFjdGlvbnM7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIGNvbGxhYm9yYXRpb24gY29uZGl0aW9uIHRvIGFsbCBhY3Rpb25zIHdpdGggdHlwZSBGb3JBY3Rpb24uXG4gKiBUaGlzIGRpc2FibGVzIHRoZSBhY3Rpb25zIGlmIHRoZSBjb2xsYWJvcmF0aW9uIGlzIGVuYWJsZWQsIGJ1dCB0aGUgdXNlciBkb2Vzbid0IGhhdmUgdGhlIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgYmFjayBlbmQuXG4gKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBkZWZpbml0aW9ucyBvZiB0aGUgdGFibGUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENvbGxhYm9yYXRpb25Db25kaXRpb24oYWN0aW9uczogQ3VzdG9tQWN0aW9uW10pOiB2b2lkIHtcblx0YWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnZpc2libGU/LnZhbHVlT2YoKSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdFx0YWN0aW9uLnZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi52aXNpYmxlIGFzIHN0cmluZywgXCJib29sZWFuXCIpLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogTWFwcyBhbiBhY3Rpb24gYnkgaXRzIGtleSwgYmFzZWQgb24gdGhlIGdpdmVuIGFubm90YXRpb24gYWN0aW9ucyBhbmQgbWFuaWZlc3QgY29uZmlndXJhdGlvbi4gVGhlIHJlc3VsdCBhbHJlYWR5IHJlcHJlc2VudHMgdGhlXG4gKiBtZXJnZWQgYWN0aW9uIGZyb20gYm90aCBjb25maWd1cmF0aW9uIHNvdXJjZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhbHNvIHJldHVybnMgYW4gaW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBhY3Rpb24gY2FuIGJlIGEgbWVudSBpdGVtLCBzYXlpbmcgd2hldGhlciBpdCBpcyB2aXNpYmxlIG9yIG9mIGEgc3BlY2lmaWMgdHlwZVxuICogdGhhdCBhbGxvd3MgdGhpcy5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKiBAcGFyYW0gYWN0aW9uS2V5IEFjdGlvbiBLZXkgdG8gbG9vayB1cFxuICogQHJldHVybnMgTWVyZ2VkIGFjdGlvbiBhbmQgaW5kaWNhdG9yIHdoZXRoZXIgaXQgY2FuIGJlIGEgbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIG1hcEFjdGlvbkJ5S2V5KFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGFjdGlvbktleTogc3RyaW5nXG4pOiB7IGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbjsgY2FuQmVNZW51SXRlbTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0ge1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9uID0gYW5ub3RhdGlvbkFjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRsZXQgcmVzdWx0QWN0aW9uOiBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uID0geyAuLi4oYW5ub3RhdGlvbkFjdGlvbiA/PyBtYW5pZmVzdEFjdGlvbikgfTtcblxuXHQvLyBhY3Rpb25zIGluc2lkZSBtZW51cyBjYW4ndCBiZSBmb3VuZCBvbiB0b3AgbGV2ZWwsIHNvIGFzc2lnbiBhY3Rpb25zIGZyb20gbWVudSB0byBpdFxuXHRpZiAoT2JqZWN0LmtleXMocmVzdWx0QWN0aW9uKS5sZW5ndGggPT09IDApIHtcblx0XHRhbm5vdGF0aW9uQWN0aW9uc1xuXHRcdFx0LmZpbHRlcigoYWN0aW9uQW5ub3RhdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uQW5ub3RhdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnU7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0bWVudUFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbTogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdGlmIChtZW51SXRlbS5rZXkgPT09IGFjdGlvbktleSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0QWN0aW9uID0gbWVudUl0ZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Ly8gQW5ub3RhdGlvbiBhY3Rpb24gYW5kIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gYWxyZWFkeSBoYXMgdG8gYmUgbWVyZ2VkIGhlcmUgYXMgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgb25seSBjb25zaWRlcnMgdG9wLWxldmVsIGFjdGlvbnNcblx0aWYgKGFubm90YXRpb25BY3Rpb24pIHtcblx0XHQvLyBJZiBlbmFibGVkIG9yIHZpc2libGUgaXMgbm90IHNldCBpbiB0aGUgbWFuaWZlc3QsIHVzZSB0aGUgYW5ub3RhdGlvbiB2YWx1ZSBhbmQgaGVuY2UgZG8gbm90IG92ZXJ3cml0ZVxuXHRcdHJlc3VsdEFjdGlvbi5lbmFibGVkID0gbWFuaWZlc3RBY3Rpb24/LmVuYWJsZWQgPz8gYW5ub3RhdGlvbkFjdGlvbi5lbmFibGVkO1xuXHRcdHJlc3VsdEFjdGlvbi52aXNpYmxlID0gbWFuaWZlc3RBY3Rpb24/LnZpc2libGUgPz8gYW5ub3RhdGlvbkFjdGlvbi52aXNpYmxlO1xuXG5cdFx0Zm9yIChjb25zdCBwcm9wIGluIG1hbmlmZXN0QWN0aW9uIHx8IHt9KSB7XG5cdFx0XHRjb25zdCBwcm9wS2V5ID0gcHJvcCBhcyBrZXlvZiBCYXNlQWN0aW9uO1xuXHRcdFx0aWYgKCFhbm5vdGF0aW9uQWN0aW9uW3Byb3BLZXldICYmIHByb3BLZXkgIT09IFwibWVudVwiKSB7XG5cdFx0XHRcdHJlc3VsdEFjdGlvbltwcm9wS2V5XSA9IG1hbmlmZXN0QWN0aW9uW3Byb3BLZXldIGFzIG5ldmVyO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNhbkJlTWVudUl0ZW0gPVxuXHRcdHJlc3VsdEFjdGlvbj8udmlzaWJsZSB8fFxuXHRcdHJlc3VsdEFjdGlvbj8udHlwZSA9PT0gQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRyZXN1bHRBY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uOiByZXN1bHRBY3Rpb24gYXMgQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0XHRjYW5CZU1lbnVJdGVtXG5cdH07XG59XG5cbi8qKlxuICogTWFwIHRoZSBkZWZhdWx0IGFjdGlvbiBrZXkgb2YgYSBtZW51IHRvIGl0cyBhY3R1YWwgYWN0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGlkZW50aWZ5IHdoZXRoZXIgdGhpcyBkZWZhdWx0IGFjdGlvbiBpcyBhIGNvbW1hbmQuXG4gKiBAcGFyYW0gbWVudUFjdGlvbiBNZW51IGFjdGlvbiB0byBtYXAgdGhlIGRlZmF1bHQgYWN0aW9uIGZvclxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBjb21tYW5kQWN0aW9ucyBBcnJheSBvZiBjb21tYW5kIGFjdGlvbnMgdG8gcHVzaCB0aGUgZGVmYXVsdCBhY3Rpb24gdG8gaWYgYXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBtYXBNZW51RGVmYXVsdEFjdGlvbihcblx0bWVudUFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uPlxuKTogdm9pZCB7XG5cdGNvbnN0IHsgYWN0aW9uLCBjYW5CZU1lbnVJdGVtIH0gPSBtYXBBY3Rpb25CeUtleShtYW5pZmVzdEFjdGlvbnMsIGFubm90YXRpb25BY3Rpb25zLCBtZW51QWN0aW9uLmRlZmF1bHRBY3Rpb24gYXMgc3RyaW5nKTtcblxuXHRpZiAoY2FuQmVNZW51SXRlbSkge1xuXHRcdG1lbnVBY3Rpb24uZGVmYXVsdEFjdGlvbiA9IGFjdGlvbjtcblx0fVxuXG5cdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdGNvbW1hbmRBY3Rpb25zW2FjdGlvbi5rZXldID0gYWN0aW9uO1xuXHR9XG59XG5cbi8qKlxuICogTWFwIHRoZSBtZW51IGl0ZW0ga2V5cyBvZiBhIG1lbnUgdG8gdGhlaXIgYWN0dWFsIGFjdGlvbiBjb25maWd1cmF0aW9ucyBhbmQgaWRlbnRpZnkgd2hldGhlciB0aGV5IGFyZSBjb21tYW5kcy5cbiAqIEBwYXJhbSBtZW51QWN0aW9uIE1lbnUgYWN0aW9uIHRvIG1hcCB0aGUgbWVudSBpdGVtcyBmb3JcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKiBAcGFyYW0gY29tbWFuZEFjdGlvbnMgQXJyYXkgb2YgY29tbWFuZCBhY3Rpb25zIHRvIHB1c2ggdGhlIG1lbnUgaXRlbSBhY3Rpb25zIHRvIGlmIGFwcGxpY2FibGVcbiAqL1xuZnVuY3Rpb24gbWFwTWVudUl0ZW1zKFxuXHRtZW51QWN0aW9uOiBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPixcblx0YW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24+XG4pOiB2b2lkIHtcblx0Y29uc3QgbWFwcGVkTWVudUl0ZW1zOiAoQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbilbXSA9IFtdO1xuXHRjb25zdCBtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24gPSBhbm5vdGF0aW9uQWN0aW9ucy5maW5kKChhbm5vdGF0aW9uQWN0aW9uKSA9PiBhbm5vdGF0aW9uQWN0aW9uLmtleSA9PT0gbWVudUFjdGlvbi5rZXkpO1xuXG5cdGlmIChtZW51QWN0aW9uLm1lbnU/Lmxlbmd0aCAhPT0gMCkge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW1LZXkgb2YgbWVudUFjdGlvbi5tZW51ID8/IFtdKSB7XG5cdFx0XHRjb25zdCB7IGFjdGlvbiwgY2FuQmVNZW51SXRlbSB9ID0gbWFwQWN0aW9uQnlLZXkobWFuaWZlc3RBY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucywgbWVudUl0ZW1LZXkpO1xuXG5cdFx0XHRpZiAoY2FuQmVNZW51SXRlbSkge1xuXHRcdFx0XHRtYXBwZWRNZW51SXRlbXMucHVzaChhY3Rpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0Y29tbWFuZEFjdGlvbnNbbWVudUl0ZW1LZXldID0gYWN0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIElmIG5vIG1lbnUgaXRlbXMgYXJlIGFzc2lnbmVkIHRvIHRoZSBtYW5pZmVzdC1vdmVycmlkZS1tZW51LCBpdCBpbmhlcml0cyB0aGUgaXRlbXMgZnJvbSB0aGUgcHJldmlvdXMgbWVudVxuXHRlbHNlIGlmIChtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24pIHtcblx0XHRtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW0pID0+IG1hcHBlZE1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKSk7XG5cdH1cblxuXHRjb25zdCBtYXBwZWRNZW51QWN0aW9uID0gbWVudUFjdGlvbiBhcyBDdXN0b21BY3Rpb247XG5cdG1hcHBlZE1lbnVBY3Rpb24ubWVudSA9IG1hcHBlZE1lbnVJdGVtcztcblxuXHQvLyBJZiB0aGUgbWVudSBpcyBzZXQgdG8gaW52aXNpYmxlLCBpdCBzaG91bGQgYmUgaW52aXNpYmxlLCBvdGhlcndpc2UgdGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgaXRlbXNcblx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IG1hcHBlZE1lbnVJdGVtcy5tYXAoKG1lbnVJdGVtKSA9PlxuXHRcdHJlc29sdmVCaW5kaW5nU3RyaW5nKG1lbnVJdGVtLnZpc2libGUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIilcblx0KTtcblx0bWFwcGVkTWVudUFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKG1lbnVBY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKSwgb3IoLi4udmlzaWJsZUV4cHJlc3Npb25zKSlcblx0KTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBmbGF0IGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBpbnRvIGEgbmVzdGVkIHN0cnVjdHVyZXMgb2YgbWVudXMuIFRoZSByZXN1bHQgaXMgYSByZWNvcmQgb2YgYWN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbWVudXMgb3JcbiAqIG9uZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIG1lbnVzIGFzIG1lbnUgaXRlbXMuIEl0IGFsc28gcmV0dXJucyBhIGxpc3Qgb2YgYWN0aW9ucyB0aGF0IGhhdmUgYW4gYXNzaWduZWQgY29tbWFuZC5cbiAqXG4gKiBOb3RlIHRoYXQgbWVudSBpdGVtcyBhcmUgYWxyZWFkeSB0aGUgbWVyZ2VkIHJlc3VsdCBvZiBhbm5vdGF0aW9uIGFjdGlvbnMgYW5kIHRoZWlyIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24sIGFzIHtAbGluayBpbnNlcnRDdXN0b21FbGVtZW50c31cbiAqIG9ubHkgY29uc2lkZXJzIHJvb3QtbGV2ZWwgYWN0aW9ucy5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgYSBsaXN0IG9mIGNvbW1hbmQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMoXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPixcblx0YW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXVxuKTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPj4ge1xuXHRjb25zdCBhbGxBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGNvbnN0IGFjdGlvbktleXNUb0RlbGV0ZTogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgY29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uZGVmYXVsdEFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtYXBNZW51RGVmYXVsdEFjdGlvbihtYW5pZmVzdEFjdGlvbiwgbWFuaWZlc3RBY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucywgY29tbWFuZEFjdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpIHtcblx0XHRcdG1hcE1lbnVJdGVtcyhtYW5pZmVzdEFjdGlvbiwgbWFuaWZlc3RBY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucywgY29tbWFuZEFjdGlvbnMpO1xuXG5cdFx0XHQvLyBNZW51IGhhcyBubyB2aXNpYmxlIGl0ZW1zLCBzbyByZW1vdmUgaXRcblx0XHRcdGlmICghbWFuaWZlc3RBY3Rpb24ubWVudT8ubGVuZ3RoKSB7XG5cdFx0XHRcdGFjdGlvbktleXNUb0RlbGV0ZS5wdXNoKG1hbmlmZXN0QWN0aW9uLmtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdGNvbW1hbmRBY3Rpb25zW2FjdGlvbktleV0gPSBtYW5pZmVzdEFjdGlvbiBhcyBDdXN0b21BY3Rpb247XG5cdFx0fVxuXG5cdFx0YWxsQWN0aW9uc1thY3Rpb25LZXldID0gbWFuaWZlc3RBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uO1xuXHR9XG5cblx0YWN0aW9uS2V5c1RvRGVsZXRlLmZvckVhY2goKGFjdGlvbktleTogc3RyaW5nKSA9PiBkZWxldGUgYWxsQWN0aW9uc1thY3Rpb25LZXldKTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGFsbEFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IGNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZW5hYmxlbWVudCBvZiBhIG1hbmlmZXN0IGFjdGlvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbiBUaGUgYWN0aW9uIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gaXNBbm5vdGF0aW9uQWN0aW9uIFdoZXRoZXIgdGhlIGFjdGlvbiwgZGVmaW5lZCBpbiBtYW5pZmVzdCwgY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgYW5ub3RhdGlvbiBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBEZXRlcm1pbmVkIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgZW5hYmxlbWVudFxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RFbmFibGVkID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24sXG5cdGlzQW5ub3RhdGlvbkFjdGlvbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc0Fubm90YXRpb25BY3Rpb24gJiYgbWFuaWZlc3RBY3Rpb24uZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gSWYgYW5ub3RhdGlvbiBhY3Rpb24gaGFzIG5vIHByb3BlcnR5IGRlZmluZWQgaW4gbWFuaWZlc3QsXG5cdFx0Ly8gZG8gbm90IG92ZXJ3cml0ZSBpdCB3aXRoIG1hbmlmZXN0IGFjdGlvbidzIGRlZmF1bHQgdmFsdWUuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IGdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlcihtYW5pZmVzdEFjdGlvbi5lbmFibGVkLCBjb252ZXJ0ZXJDb250ZXh0LCBmb3JDb250ZXh0TWVudSk7XG5cblx0Ly8gQ29uc2lkZXIgcmVxdWlyZXNTZWxlY3Rpb24gcHJvcGVydHkgdG8gaW5jbHVkZSBzZWxlY3RlZENvbnRleHRzIGluIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0Y29uc3QgaW50ZXJuYWxNb2RlbFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCI7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRpZkVsc2UoXG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb24uZW5hYmxlT25TZWxlY3QgPT09IFwic2luZ2xlXCIsXG5cdFx0XHRcdGFuZChlcXVhbChwYXRoSW5Nb2RlbChpbnRlcm5hbE1vZGVsUHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpLCByZXN1bHQpLFxuXHRcdFx0XHRhbmQoZ3JlYXRlck9yRXF1YWwocGF0aEluTW9kZWwoaW50ZXJuYWxNb2RlbFByb3BlcnR5LCBcImludGVybmFsXCIpLCAxKSwgcmVzdWx0KVxuXHRcdFx0KSxcblx0XHRcdHJlc3VsdFxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdmlzaWJpbGl0eSBvZiBhIG1hbmlmZXN0IGFjdGlvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbiBUaGUgYWN0aW9uIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gaXNBbm5vdGF0aW9uQWN0aW9uIFdoZXRoZXIgdGhlIGFjdGlvbiwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIHZpc2liaWxpdHlcbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0VmlzaWJsZSA9IGZ1bmN0aW9uIChcblx0bWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uLFxuXHRpc0Fubm90YXRpb25BY3Rpb246IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uICYmIG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gYWN0aW9uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBhY3Rpb24ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gZ2V0TWFuaWZlc3RBY3Rpb25Cb29sZWFuUHJvcGVydHlXaXRoRm9ybWF0dGVyKG1hbmlmZXN0QWN0aW9uLnZpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGZvckNvbnRleHRNZW51KTtcblx0Ly8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcblx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdC8vIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRyZXN1bHQgPSBmb3JDb250ZXh0TWVudSA/IGFuZChyZXN1bHQsIGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSkgOiByZXN1bHQ7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihyZXN1bHQpO1xufTtcblxudHlwZSBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24gPSBPbWl0PEN1c3RvbUFjdGlvbiwgXCJtZW51XCI+ICYgeyBtZW51OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB9O1xuXG4vKipcbiAqIEFzIHNvbWUgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIG92ZXJyaWRhYmxlIGJ5IHRoZSBtYW5pZmVzdCwgbWFrZSBzdXJlIHRoYXQgdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gZ2V0cyB0aGUgYW5ub3RhdGlvbiB2YWx1ZXMgZm9yIHRoZXNlLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9uIEFjdGlvbiBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb24gQWN0aW9uIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICovXG5mdW5jdGlvbiBvdmVycmlkZU1hbmlmZXN0Q29uZmlndXJhdGlvbldpdGhBbm5vdGF0aW9uKG1hbmlmZXN0QWN0aW9uOiBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24sIGFubm90YXRpb25BY3Rpb24/OiBCYXNlQWN0aW9uKTogdm9pZCB7XG5cdGlmICghYW5ub3RhdGlvbkFjdGlvbikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIERvIG5vdCBvdmVycmlkZSB0aGUgJ3R5cGUnIGdpdmVuIGluIGFuIGFubm90YXRpb24gYWN0aW9uXG5cdG1hbmlmZXN0QWN0aW9uLnR5cGUgPSBhbm5vdGF0aW9uQWN0aW9uLnR5cGU7XG5cdG1hbmlmZXN0QWN0aW9uLmFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvbkFjdGlvbi5hbm5vdGF0aW9uUGF0aDtcblx0bWFuaWZlc3RBY3Rpb24ucHJlc3MgPSBhbm5vdGF0aW9uQWN0aW9uLnByZXNzO1xuXG5cdC8vIE9ubHkgdXNlIHRoZSBhbm5vdGF0aW9uIHZhbHVlcyBmb3IgZW5hYmxlbWVudCBhbmQgdmlzaWJpbGl0eSBpZiBub3Qgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRtYW5pZmVzdEFjdGlvbi5lbmFibGVkID0gbWFuaWZlc3RBY3Rpb24uZW5hYmxlZCA/PyBhbm5vdGF0aW9uQWN0aW9uLmVuYWJsZWQ7XG5cdG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPSBtYW5pZmVzdEFjdGlvbi52aXNpYmxlID8/IGFubm90YXRpb25BY3Rpb24udmlzaWJsZTtcblx0bWFuaWZlc3RBY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51ID0gbWFuaWZlc3RBY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51ID8/IGFubm90YXRpb25BY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFjdGlvbiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIFRoZSBhbm5vdGF0aW9uIGFjdGlvbnMgZGVmaW5pdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5nc1xuICogQHBhcmFtIGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBoaWRkZW5BY3Rpb25zIEFjdGlvbnMgdGhhdCBhcmUgY29uZmlndXJlZCBhcyBoaWRkZW4gKGFkZGl0aW9uYWwgdG8gdGhlIHZpc2libGUgcHJvcGVydHkpXG4gKiBAcGFyYW0gZmFjZXROYW1lIFRoZSBmYWNldCB3aGVyZSBhbiBhY3Rpb24gaXMgZGlzcGxheWVkIGlmIGl0IGlzIGlubGluZVxuICogQHJldHVybnMgVGhlIGFjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+IHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25BY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncz86IGJvb2xlYW4sXG5cdGhpZGRlbkFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0TmFtZT86IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPj4ge1xuXHRjb25zdCBhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+ID0ge307XG5cdGZvciAoY29uc3QgYWN0aW9uS2V5IGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGNvbnN0IGxhc3REb3RJbmRleCA9IG1hbmlmZXN0QWN0aW9uLnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTE7XG5cdFx0bGV0IGFubm90YXRpb25BY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoYW5ub3RhdGlvbkFjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIGFubm90YXRpb25BY3Rpb25zKSB7XG5cdFx0XHRcdC8vIFN1YlNlY3Rpb24udHMjY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIgdXNlcyBpbnNlcnRDdXN0b21FbGVtZW50cyB3aGljaCByZXN1bHRzIGluIGFubm90YXRpb24gYWN0aW9ucyBtaXhpbmcgdXAgd2l0aCBtYW5pZmVzdCBhY3Rpb25cblx0XHRcdFx0Ly8gdGhpcyBpcyB3aHkgd2UgbWF5IGZpbmQgYW4gYWN0aW9uIHRoYXQgaGFzIGEgQ3VzdG9tQWN0aW9uIHByZWZpeFxuXHRcdFx0XHRpZiAoYWN0aW9uLmlkPy5zdGFydHNXaXRoKFwiQ3VzdG9tQWN0aW9uOjpcIikpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYWN0aW9uLmtleSA9PT0gYWN0aW9uS2V5KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkFjdGlvbiA9IGFjdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHRcdFx0XHQvLyBJZiBub3QgZm91bmQsIGNoZWNrIGluc2lkZSBtZW51c1xuXHRcdFx0XHRcdGFubm90YXRpb25BY3Rpb24gPSBhY3Rpb24ubWVudT8uZmluZCgobWVudUl0ZW06IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBtZW51SXRlbS5rZXkgPT09IGFjdGlvbktleTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoYW5ub3RhdGlvbkFjdGlvbikge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVG8gaWRlbnRpZnkgdGhlIGFubm90YXRpb24gYWN0aW9uIHByb3BlcnR5IG92ZXJ3cml0ZSB2aWEgbWFuaWZlc3QgdXNlLWNhc2UuXG5cdFx0Y29uc3QgaXNBbm5vdGF0aW9uQWN0aW9uID0gISFhbm5vdGF0aW9uQWN0aW9uO1xuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWUpIHtcblx0XHRcdGZhY2V0TmFtZSA9IG1hbmlmZXN0QWN0aW9uLmZhY2V0TmFtZTtcblx0XHR9XG5cblx0XHRhY3Rpb25zW2FjdGlvbktleV0gPSB7XG5cdFx0XHRpZDogYW5ub3RhdGlvbkFjdGlvbiA/IGFjdGlvbktleSA6IGdldEN1c3RvbUFjdGlvbklEKGFjdGlvbktleSksXG5cdFx0XHR0eXBlOiBtYW5pZmVzdEFjdGlvbi5tZW51ID8gQWN0aW9uVHlwZS5NZW51IDogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0dmlzaWJsZTogX2dldE1hbmlmZXN0VmlzaWJsZShtYW5pZmVzdEFjdGlvbiwgaXNBbm5vdGF0aW9uQWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogX2dldE1hbmlmZXN0VmlzaWJsZShtYW5pZmVzdEFjdGlvbiwgaXNBbm5vdGF0aW9uQWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSxcblx0XHRcdGVuYWJsZWQ6IF9nZXRNYW5pZmVzdEVuYWJsZWQobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IF9nZXRNYW5pZmVzdEVuYWJsZWQobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0XHRoYW5kbGVyTW9kdWxlOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdGhhbmRsZXJNZXRob2Q6IG1hbmlmZXN0QWN0aW9uLnByZXNzICYmIG1hbmlmZXN0QWN0aW9uLnByZXNzLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKSxcblx0XHRcdHByZXNzOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyxcblx0XHRcdHRleHQ6IG1hbmlmZXN0QWN0aW9uLnRleHQsXG5cdFx0XHRub1dyYXA6IG1hbmlmZXN0QWN0aW9uLl9fbm9XcmFwLFxuXHRcdFx0a2V5OiByZXBsYWNlU3BlY2lhbENoYXJzKGFjdGlvbktleSksXG5cdFx0XHRlbmFibGVPblNlbGVjdDogbWFuaWZlc3RBY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRWYWx1ZXNGdW5jdGlvbixcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0QWN0aW9uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzKSxcblx0XHRcdGNvbW1hbmQ6IG1hbmlmZXN0QWN0aW9uLmNvbW1hbmQsXG5cdFx0XHRyZXF1aXJlc1NlbGVjdGlvbjogbWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBlbmFibGVBdXRvU2Nyb2xsKG1hbmlmZXN0QWN0aW9uKSxcblx0XHRcdG1lbnU6IG1hbmlmZXN0QWN0aW9uLm1lbnUgPz8gKGFubm90YXRpb25BY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSA/IFtdIDogdW5kZWZpbmVkKSxcblx0XHRcdGZhY2V0TmFtZTogbWFuaWZlc3RBY3Rpb24uaW5saW5lID8gZmFjZXROYW1lIDogdW5kZWZpbmVkLFxuXHRcdFx0ZGVmYXVsdEFjdGlvbjogbWFuaWZlc3RBY3Rpb24uZGVmYXVsdEFjdGlvbixcblx0XHRcdGlzQUlPcGVyYXRpb246IG1hbmlmZXN0QWN0aW9uPy5pc0FJT3BlcmF0aW9uID8/IHVuZGVmaW5lZFxuXHRcdH07XG5cblx0XHRvdmVycmlkZU1hbmlmZXN0Q29uZmlndXJhdGlvbldpdGhBbm5vdGF0aW9uKGFjdGlvbnNbYWN0aW9uS2V5XSwgYW5ub3RhdGlvbkFjdGlvbik7XG5cdH1cblxuXHRyZXR1cm4gdHJhbnNmb3JtTWVudUFjdGlvbnNBbmRJZGVudGlmeUNvbW1hbmRzKGFjdGlvbnMsIGFubm90YXRpb25BY3Rpb25zID8/IFtdKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIEJvb2xlYW4gbWFuaWZlc3QgcHJvcGVydHkgdGhhdCBjYW4gZWl0aGVyIGJlIHJlcHJlc2VudGVkIGJ5IGEgc3RhdGljIHZhbHVlLCBhIGJpbmRpbmcgc3RyaW5nLFxuICogb3IgYSBydW50aW1lIGZvcm1hdHRlciBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyZWQgcHJvcGVydHkgdmFsdWVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlcihcblx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzb2x2ZWRCaW5kaW5nID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbiB8IHN0cmluZz4ocHJvcGVydHlWYWx1ZSBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKTtcblx0bGV0IHJlc3VsdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHJlc29sdmVkQmluZGluZy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gTm8gcHJvcGVydHkgdmFsdWUgY29uZmlndXJlZCBpbiBtYW5pZmVzdCBmb3IgdGhlIGN1c3RvbSBhY3Rpb24gLS0+IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZVxuXHRcdHJlc3VsdCA9IGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQocmVzb2x2ZWRCaW5kaW5nKSAmJiB0eXBlb2YgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0Ly8gVGhlbiBpdCdzIGEgbW9kdWxlLW1ldGhvZCByZWZlcmVuY2UgXCJzYXAueHh4Lnl5eS5kb1NvbWV0aGluZ1wiXG5cdFx0Y29uc3QgbWV0aG9kUGF0aCA9IHJlc29sdmVkQmluZGluZy52YWx1ZTtcblx0XHQvLyBGSVhNRTogVGhlIGN1c3RvbSBcImlzRW5hYmxlZFwiIGNoZWNrIGRvZXMgbm90IHRyaWdnZXIgKGJlY2F1c2Ugbm9uZSBvZiB0aGUgYm91bmQgdmFsdWVzIGNoYW5nZXMpXG5cdFx0cmVzdWx0ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W3BhdGhJbk1vZGVsPFZpZXc+KFwiL1wiLCBcIiR2aWV3XCIpLCBtZXRob2RQYXRoLCBwYXRoSW5Nb2RlbDxDb250ZXh0W10+KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpXSxcblx0XHRcdGZwbUZvcm1hdHRlci5jdXN0b21Cb29sZWFuUHJvcGVydHlDaGVjayxcblx0XHRcdCFmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gdGhlbiBpdCdzIGEgYmluZGluZ1xuXHRcdHJlc3VsdCA9IHJlc29sdmVkQmluZGluZyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyA9IChhY3Rpb25zOiBDdXN0b21BY3Rpb25bXSk6IEN1c3RvbUFjdGlvbltdID0+IHtcblx0bGV0IG9NZW51SXRlbUtleXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbj8ubWVudT8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25NZW51ID0gYWN0aW9uLm1lbnU7XG5cdFx0XHRvTWVudUl0ZW1LZXlzID0gYWN0aW9uTWVudS5yZWR1Y2UoKGl0ZW06IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCB7IGtleSB9KSA9PiB7XG5cdFx0XHRcdGlmIChrZXkgJiYgIWl0ZW1ba2V5XSkge1xuXHRcdFx0XHRcdGl0ZW1ba2V5XSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9LCBvTWVudUl0ZW1LZXlzKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gIW9NZW51SXRlbUtleXNbYWN0aW9uLmtleV0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhY3Rpb25UYXJnZXQ6IEFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlKSB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdGxldCBpc0VuYWJsZWRFeHAgPSBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0XHRcdGFjdGlvblRhcmdldCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSxcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvblxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbk9uUm9vdCA9XG5cdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdGlzRW5hYmxlZEV4cCA9IGFuZChpc0VuYWJsZWRFeHAsIG5vdChlcXVhbChVSS5oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiwgZmFsc2UpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBpc0VuYWJsZWRFeHA7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgYW4gYW5ub3RhdGlvbi1iYXNlZCBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gSXMgdGhlIGJpbmRpbmcgcGF0aCBjYWxjdWxhdGVkICBmcm9tIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBsb2NhdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgYWN0aW9uVGFyZ2V0LCBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG1hcHBpbmdzPzogU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVtdKTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0cmV0dXJuIG1hcHBpbmdzXG5cdFx0PyBtYXBwaW5ncy5tYXAoKG1hcHBpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBtYXBwaW5nLkxvY2FsUHJvcGVydHkudmFsdWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IG1hcHBpbmcuU2VtYW50aWNPYmplY3RQcm9wZXJ0eS50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cdFx0ICB9KVxuXHRcdDogW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbk5hdmlnYWJsZShcblx0YWN0aW9uOiBNYW5pZmVzdEFjdGlvbiB8IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlIHwgdW5kZWZpbmVkLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncz86IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRsZXQgYklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSB0cnVlO1xuXHRpZiAoY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MpIHtcblx0XHRjb25zdCBkZXRhaWxPckRpc3BsYXkgPSBuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgKG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWwgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXkpO1xuXHRcdGJJc05hdmlnYXRpb25Db25maWd1cmVkID0gZGV0YWlsT3JEaXNwbGF5Py5yb3V0ZSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXHQvLyB3aGVuIGVuYWJsZUF1dG9TY3JvbGwgaXMgdHJ1ZSB0aGUgbmF2aWdhdGVUb0luc3RhbmNlIGZlYXR1cmUgaXMgZGlzYWJsZWRcblx0aWYgKFxuXHRcdChhY3Rpb24gJiZcblx0XHRcdGFjdGlvbi5hZnRlckV4ZWN1dGlvbiAmJlxuXHRcdFx0KGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8ubmF2aWdhdGVUb0luc3RhbmNlID09PSBmYWxzZSB8fCBhY3Rpb24uYWZ0ZXJFeGVjdXRpb24/LmVuYWJsZUF1dG9TY3JvbGwgPT09IHRydWUpKSB8fFxuXHRcdCFiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZFxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVBdXRvU2Nyb2xsKGFjdGlvbjogTWFuaWZlc3RBY3Rpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIGFjdGlvbj8uYWZ0ZXJFeGVjdXRpb24/LmVuYWJsZUF1dG9TY3JvbGwgPT09IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSXNDb3B5QWN0aW9uPy52YWx1ZU9mKCkgPT09IHRydWUgJiYgZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5QWN0aW9uKGNvcHlEYXRhRmllbGRzOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdKTogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMgfCB1bmRlZmluZWQge1xuXHRpZiAoY29weURhdGFGaWVsZHMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGNvcHlEYXRhRmllbGRzWzBdO1xuXHR9XG5cdGlmIChjb3B5RGF0YUZpZWxkcy5sZW5ndGggPiAxKSB7XG5cdFx0TG9nLmVycm9yKFwiTXVsdGlwbGUgYWN0aW9ucyBhcmUgYW5ub3RhdGVkIHdpdGggaXNDb3B5QWN0aW9uLiBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3RhbmRhcmQgY29weSBhY3Rpb24uXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGV4dHJhY3QgbWVudSBpdGVtcyBmcm9tIGFjdGlvbnMgb2YgdHlwZSBtZW51cy5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBDb2xsZWN0aW9uIG9mIGFubm90YXRpb24gYmFzZWQgYWN0aW9uc1xuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zIGluIG9uZSBvZiB0aGUgYW5ub3RhdGlvbiBiYXNlZCBtZW51c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyhhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWVudUFjdGlvbkl0ZW1zOiBCYXNlQWN0aW9uW10gPSBbXTtcblxuXHRhbm5vdGF0aW9uQWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiICYmICFhY3Rpb24uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSAmJiBhY3Rpb24ubWVudSkge1xuXHRcdFx0bWVudUFjdGlvbkl0ZW1zLnB1c2goLi4uYWN0aW9uLm1lbnUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1lbnVBY3Rpb25JdGVtcztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZmluZCB0aGUgbWF0Y2hpbmcgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSB0aGUgYW5ub3RhdGlvbiBtZW51IGl0ZW1zLlxuICogQHBhcmFtIGFubm90YXRpb25NZW51SXRlbXMgQ29sbGVjdGlvbiBvZiBhbm5vdGF0aW9uIGJhc2VkIG1lbnUgaXRlbXNcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQ29sbGVjdGlvbiBvZiBtYW5pZmVzdCBiYXNlZCBhY3Rpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXMgaW4gb25lIG9mIHRoZSBhbm5vdGF0aW9uIGJhc2VkIG1lbnVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKFxuXHRhbm5vdGF0aW9uTWVudUl0ZW1zOiBCYXNlQWN0aW9uW10sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiB7XG5cdGNvbnN0IG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRpZiAoXG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9yQWN0aW9uOjpcIikgJiZcblx0XHRcdGFubm90YXRpb25NZW51SXRlbXMuZmluZCgobWVudUFjdGlvbkl0ZW1zKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZW51QWN0aW9uSXRlbXMua2V5ID09PSBtYW5pZmVzdEFjdGlvbjtcblx0XHRcdH0pXG5cdFx0KSB7XG5cdFx0XHRtYXRjaGluZ01hbmlmZXN0QWN0aW9uc1ttYW5pZmVzdEFjdGlvbl0gPSBtYW5pZmVzdEFjdGlvbnNbbWFuaWZlc3RBY3Rpb25dO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGluZ01hbmlmZXN0QWN0aW9ucztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gdHJhbnNmb3JtIHRoZSBtZW51cyBieSByZXBsYWNpbmcgdGhlIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBvdmVycmlkaW5nIGFjdGlvbnMuXG4gKiBAcGFyYW0gdW5wcmVwYXJlZEFjdGlvbnMgQ29sbGVjdGlvbiBvZiBhbGwgYWN0aW9ucyBhZnRlciBtZXJnaW5nIG1hbmlmZXN0IGFuZCBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqIEBwYXJhbSBvdmVycmlkZU1lbnVBY3Rpb25zIENvbGxlY3Rpb24gb2YgYWxsIG92ZXJyaWRlbiBtZW51IGl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTWVudUFjdGlvbnModW5wcmVwYXJlZEFjdGlvbnM6IEN1c3RvbUFjdGlvbltdLCBvdmVycmlkZU1lbnVBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiB2b2lkIHtcblx0bGV0IGZvdW5kQWN0aW9uO1xuXG5cdHVucHJlcGFyZWRBY3Rpb25zLmZvckVhY2goKGFjdGlvbjogQ3VzdG9tQWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbTogQmFzZUFjdGlvbiwgbWVudUl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGZvdW5kQWN0aW9uID0gb3ZlcnJpZGVNZW51QWN0aW9ucy5maW5kKChvdmVycmlkZU1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gb3ZlcnJpZGVNZW51QWN0aW9uLmtleSA9PT0gbWVudUl0ZW0ua2V5O1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoZm91bmRBY3Rpb24pIHtcblx0XHRcdFx0XHRhY3Rpb24ubWVudT8uc3BsaWNlKG1lbnVJdGVtSW5kZXgsIDEsIGZvdW5kQWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtZW51IGNvbnNpc3RzIG9mIGFsbCBBSSBvcGVyYXRpb24gYWN0aW9ucy5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBDb2xsZWN0aW9uIG9mIERhdGFGaWVsZEZvckFjdGlvbnMgb3IgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9ucyBpbiB0aGUgbWVudVxuICogQHJldHVybnMgQSBib29sZWFuIHRydWUgaWYgYWxsIHJlY29yZHMgaW4gdGhlIG1lbnUgYXJlIEFJIG9wZXJhdGlvbnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNZW51QUlPcGVyYXRpb24oYW5ub3RhdGlvbkFjdGlvbnM6IERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYW5ub3RhdGlvbkFjdGlvbnMuZXZlcnkoaXNBY3Rpb25BSU9wZXJhdGlvbik7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gcmVjb3JkIGlzIGFuIEFJIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIHJlY29yZCBvZiB0eXBlIERhdGFGaWVsZEZvckFjdGlvbiBvciBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiB0cnVlIGlmIHRoZSBnaXZlbiByZWNvcmQgaXMgYW4gQUkgb3BlcmF0aW9uLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uQUlPcGVyYXRpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdHJldHVybiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5VST8uSXNBSU9wZXJhdGlvbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0Q1lBLFVBQVUsMEJBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFW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
611
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiX2V4cG9ydHMiLCJhaUljb24iLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9ucyIsIm1lbnVBY3Rpb25Ob3RWaXNpYmxlIiwibWVudUFjdGlvblZpc2libGVQYXRocyIsImF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlIiwibWVudUl0ZW1zVmlzaWJsZVBhdGhzIiwiZm9yRWFjaCIsIm1lbnVBY3Rpb24iLCJ2aXNpYmxlIiwidmFsdWVPZiIsInB1c2giLCJtZW51IiwibGVuZ3RoIiwibWVudUl0ZW0iLCJtZW51SXRlbVZpc2libGUiLCJ0b1N0cmluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ2aXNpYmxlRXhwcmVzc2lvbnMiLCJtYXAiLCJtZW51SXRlbVZpc2libGVQYXRoIiwiYW5kIiwib3IiLCJhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uIiwiYWN0aW9uIiwidHlwZSIsIm5vdCIsImVxdWFsIiwiVUkiLCJoYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiIsIm1hcEFjdGlvbkJ5S2V5IiwibWFuaWZlc3RBY3Rpb25zIiwiYW5ub3RhdGlvbkFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhbm5vdGF0aW9uQWN0aW9uIiwiZmluZCIsImtleSIsIm1hbmlmZXN0QWN0aW9uIiwicmVzdWx0QWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImFjdGlvbkFubm90YXRpb24iLCJBY3Rpb25UeXBlIiwiTWVudSIsImVuYWJsZWQiLCJwcm9wIiwicHJvcEtleSIsImNhbkJlTWVudUl0ZW0iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJtYXBNZW51RGVmYXVsdEFjdGlvbiIsImNvbW1hbmRBY3Rpb25zIiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJtYXBNZW51SXRlbXMiLCJtYXBwZWRNZW51SXRlbXMiLCJtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24iLCJtZW51SXRlbUtleSIsIm1hcHBlZE1lbnVBY3Rpb24iLCJ0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMiLCJhbGxBY3Rpb25zIiwiYWN0aW9uS2V5c1RvRGVsZXRlIiwidW5kZWZpbmVkIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsInJlc3VsdCIsImdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlciIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsImlmRWxzZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJwYXRoSW5Nb2RlbCIsImdyZWF0ZXJPckVxdWFsIiwiX2dldE1hbmlmZXN0VmlzaWJsZSIsIm92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInByZXNzIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiaGlkZGVuQWN0aW9ucyIsImZhY2V0TmFtZSIsImxhc3REb3RJbmRleCIsImxhc3RJbmRleE9mIiwiaWQiLCJzdGFydHNXaXRoIiwiZ2V0Q3VzdG9tQWN0aW9uSUQiLCJEZWZhdWx0IiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwiaGFuZGxlck1vZHVsZSIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJoYW5kbGVyTWV0aG9kIiwidGV4dCIsIm5vV3JhcCIsIl9fbm9XcmFwIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsImlzQUlPcGVyYXRpb24iLCJwcm9wZXJ0eVZhbHVlIiwicmVzb2x2ZWRCaW5kaW5nIiwiaXNDb25zdGFudCIsInZhbHVlIiwiY29uc3RhbnQiLCJtZXRob2RQYXRoIiwiaW50ZXJuYWxNb2RlbFBhdGgiLCJmb3JtYXRSZXN1bHQiLCJmcG1Gb3JtYXR0ZXIiLCJjdXN0b21Cb29sZWFuUHJvcGVydHlDaGVjayIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJvTWVudUl0ZW1LZXlzIiwiYWN0aW9uTWVudSIsInJlZHVjZSIsIml0ZW0iLCJfcmVmIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbmFibGVkRXhwIiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQiLCJnZXREcmFmdFJvb3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm1hcHBpbmdzIiwibWFwcGluZyIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsImJJc05hdmlnYXRpb25Db25maWd1cmVkIiwiZGV0YWlsT3JEaXNwbGF5IiwiZGV0YWlsIiwiZGlzcGxheSIsInJvdXRlIiwiYWZ0ZXJFeGVjdXRpb24iLCJuYXZpZ2F0ZVRvSW5zdGFuY2UiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJkYXRhRmllbGQiLCJJc0NvcHlBY3Rpb24iLCIkVHlwZSIsImdldENvcHlBY3Rpb24iLCJjb3B5RGF0YUZpZWxkcyIsIkxvZyIsImVycm9yIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1lbnVBY3Rpb25JdGVtcyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJhbm5vdGF0aW9uTWVudUl0ZW1zIiwibWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJ1bnByZXBhcmVkQWN0aW9ucyIsIm92ZXJyaWRlTWVudUFjdGlvbnMiLCJmb3VuZEFjdGlvbiIsIm1lbnVJdGVtSW5kZXgiLCJvdmVycmlkZU1lbnVBY3Rpb24iLCJzcGxpY2UiLCJpc01lbnVBSU9wZXJhdGlvbiIsImV2ZXJ5IiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsIkFjdGlvblRhcmdldCIsIklzQUlPcGVyYXRpb24iLCJnZXRDcmVhdGVOZXh0QnV0dG9uVmlzaWJpbGl0eSIsImhpZGRlbkRyYWZ0RW5hYmxlZCIsImZjbEVuYWJsZWQiLCJEcmFmdCIsIklzTmV3T2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRncmVhdGVyT3JFcXVhbCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIE92ZXJyaWRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tQWN0aW9uSUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgZnBtRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gQnV0dG9uVHlwZSB7XG5cdEFjY2VwdCA9IFwiQWNjZXB0XCIsXG5cdEF0dGVudGlvbiA9IFwiQXR0ZW50aW9uXCIsXG5cdEJhY2sgPSBcIkJhY2tcIixcblx0Q3JpdGljYWwgPSBcIkNyaXRpY2FsXCIsXG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0RW1waGFzaXplZCA9IFwiRW1waGFzaXplZFwiLFxuXHRHaG9zdCA9IFwiR2hvc3RcIixcblx0TmVnYXRpdmUgPSBcIk5lZ2F0aXZlXCIsXG5cdE5ldXRyYWwgPSBcIk5ldXRyYWxcIixcblx0UmVqZWN0ID0gXCJSZWplY3RcIixcblx0U3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuXHRUcmFuc3BhcmVudCA9IFwiVHJhbnNwYXJlbnRcIixcblx0VW5zdHlsZWQgPSBcIlVuc3R5bGVkXCIsXG5cdFVwID0gXCJVcFwiXG59XG5cbmV4cG9ydCBjb25zdCBhaUljb24gPSBcInNhcC1pY29uOi8vYWlcIjtcblxuZXhwb3J0IHR5cGUgQmFzZUFjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHR5cGU/OiBBY3Rpb25UeXBlO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbmFibGVkRm9yQ29udGV4dE1lbnU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRm9yQ29udGV4dE1lbnU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlT25TZWxlY3Q/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bWVudT86IEJhc2VBY3Rpb25bXTtcblx0ZmFjZXROYW1lPzogc3RyaW5nO1xuXHRjb21tYW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0FJT3BlcmF0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb24gPSBCYXNlQWN0aW9uICYge1xuXHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHwgQWN0aW9uVHlwZS5NZW51IHwgQWN0aW9uVHlwZS5Db3B5O1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRjdXN0b21EYXRhPzogc3RyaW5nO1xuXHRyZXF1aXJlc0RpYWxvZz86IHN0cmluZztcblx0YmluZGluZz86IHN0cmluZztcblx0YnV0dG9uVHlwZT86IEJ1dHRvblR5cGUuR2hvc3QgfCBCdXR0b25UeXBlLlRyYW5zcGFyZW50IHwgc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwID0gQmFzZUFjdGlvbiAmIHtcblx0Ly8gaW1wbGVtZW50cyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHR0eXBlOiBBY3Rpb25UeXBlLk1lbnU7XG5cdG1lbnU6IEFubm90YXRpb25BY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUFjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8XG5cdEJhc2VBY3Rpb24gJiB7XG5cdFx0aGFuZGxlck1ldGhvZD86IHN0cmluZztcblx0XHRoYW5kbGVyTW9kdWxlPzogc3RyaW5nO1xuXHRcdG5vV3JhcD86IGJvb2xlYW47IC8vIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIHdyYXBwaW5nIGZyb20gdGhlIEZQTUhlbHBlclxuXHRcdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblx0XHRkZWZhdWx0QWN0aW9uPzogc3RyaW5nIHwgQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbjsgLy8gSW5kaWNhdGVzIHdoZXRoZXIgYSBkZWZhdWx0IGFjdGlvbiBleGlzdHMgaW4gdGhpcyBjb250ZXh0XG5cdH1cbj47XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb25Hcm91cCA9IEJhc2VBY3Rpb24gJiB7XG5cdC8vIGltcGxlbWVudHMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0dHlwZTogQWN0aW9uVHlwZS5NZW51O1xuXHRtZW51OiBBbm5vdGF0aW9uQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZEFjdGlvbiA9IHtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0ZW5hYmxlQXV0b1Njcm9sbD86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGlzTmF2aWdhYmxlPzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0ZW5hYmxlT25TZWxlY3Q/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRtZW51PzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblxuXHQvLyBDYW4gYmUgb3ZlcndyaXR0ZW4gYnkgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhbmQgc2hvdWxkIGJlIGFsaWduZWQgZm9yIGFsbCBhY3Rpb25zXG5cdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHZpc2libGVGb3JDb250ZXh0TWVudT86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uT3JBY3Rpb25Hcm91cCA9IERhdGFGaWVsZEZvckFjdGlvblR5cGVzIHwgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcztcblxudHlwZSBNZW51QWN0aW9uID1cblx0fCBCYXNlQWN0aW9uXG5cdHwge1xuXHRcdFx0dmlzaWJsZT86IHN0cmluZ1tdO1xuXHRcdFx0ZW5hYmxlZD86IHN0cmluZ1tdO1xuXHRcdFx0bWVudT86IEJhc2VBY3Rpb25bXTtcblx0ICB9O1xuLyoqXG4gKiBNZXRob2QgcHJvdmlkZXMgYWN0aW9ucyBjb2xsZWN0aW9uIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHNldHRpbmcgZm9yIGFsbCBhY3Rpb25zIG9mIHR5cGUgbWVudSBkZXBlbmRpbmcgb24gaXRzIHZpc2libGUgc2V0dGluZyBhbmQgaXRzIG1lbnUgaXRlbXMgdmlzaWJsZSBzZXR0aW5ncy5cbiAqIEBwYXJhbSBhY3Rpb25zIENvbGxlY3Rpb24gb2YgYWN0aW9uc1xuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBhY3Rpb25zIHdpdGggdmlzaWJsZSBzZXR0aW5nIHNldCBmb3IgYWN0aW9ucyBvZiB0eXBlIG1lbnVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMgPSAoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10pOiBDdXN0b21BY3Rpb25bXSA9PiB7XG5cdGxldCBtZW51QWN0aW9uTm90VmlzaWJsZTogc3RyaW5nIHwgYm9vbGVhbixcblx0XHRtZW51QWN0aW9uVmlzaWJsZVBhdGhzOiBzdHJpbmdbXSxcblx0XHRhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZTogYm9vbGVhbixcblx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHM6IHN0cmluZ1tdO1xuXHRhY3Rpb25zLmZvckVhY2goKG1lbnVBY3Rpb246IE1lbnVBY3Rpb24pID0+IHtcblx0XHRtZW51QWN0aW9uTm90VmlzaWJsZSA9IG1lbnVBY3Rpb24udmlzaWJsZT8udmFsdWVPZigpID09PSBcImZhbHNlXCI7XG5cdFx0YXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgPSBmYWxzZTtcblx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHMgPSBbXTtcblx0XHRtZW51QWN0aW9uVmlzaWJsZVBhdGhzID0gW107XG5cdFx0aWYgKG1lbnVBY3Rpb24udmlzaWJsZSAmJiAhKG1lbnVBY3Rpb24udmlzaWJsZS52YWx1ZU9mKCkgPT09IFwidHJ1ZVwiIHx8IG1lbnVBY3Rpb24udmlzaWJsZS52YWx1ZU9mKCkgPT09IFwiZmFsc2VcIikpIHtcblx0XHRcdG1lbnVBY3Rpb25WaXNpYmxlUGF0aHMucHVzaChtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKG1lbnVBY3Rpb24/Lm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0bWVudUFjdGlvbj8ubWVudT8uZm9yRWFjaCgobWVudUl0ZW06IEJhc2VBY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1WaXNpYmxlID0gbWVudUl0ZW0udmlzaWJsZTtcblx0XHRcdFx0aWYgKG1lbnVJdGVtVmlzaWJsZSAmJiAodHlwZW9mIG1lbnVJdGVtVmlzaWJsZSA9PT0gXCJib29sZWFuXCIgfHwgbWVudUl0ZW1WaXNpYmxlLnZhbHVlT2YoKSA9PT0gXCJ0cnVlXCIpKSB7XG5cdFx0XHRcdFx0YXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1lbnVJdGVtVmlzaWJsZSAmJiBtZW51SXRlbVZpc2libGUudmFsdWVPZigpICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHMucHVzaChtZW51SXRlbVZpc2libGUudmFsdWVPZigpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWVudUFjdGlvbk5vdFZpc2libGUpIHtcblx0XHRcdFx0Ly8gaWYgbWVudSBpcyBzdGF0aWNhbGx5IHZpc2libGUgZmFsc2Vcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gZmFsc2UudG9TdHJpbmcoKTtcblx0XHRcdH0gZWxzZSBpZiAoIWF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlICYmICFtZW51SXRlbXNWaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGlmIGFsbCBtZW51IGl0ZW1zIGFyZSBzdGF0aWNhbGx5IHZpc2libGUgZmFsc2Vcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gZmFsc2UudG9TdHJpbmcoKTtcblx0XHRcdH0gZWxzZSBpZiAoYXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgJiYgIW1lbnVBY3Rpb25WaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBtZW51IGl0ZW0gaXMgc3RhdGljYWxseSB2aXNpYmxlIHRydWUgYW5kIG5vIHZpc2libGUgc2V0dGluZyBmb3IgbWVudVxuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSB0cnVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlKSB7XG5cdFx0XHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBtZW51IGl0ZW0sIHRoZW4ganVzdCBjb25zaWRlciB2aXNpYmxlIHNldHRpbmcgb2YgdGhlIG1lbnVcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24ocmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudUFjdGlvbi52aXNpYmxlIGFzIHN0cmluZykpO1xuXHRcdFx0fSBlbHNlIGlmIChtZW51QWN0aW9uVmlzaWJsZVBhdGhzLmxlbmd0aCB8fCBtZW51SXRlbXNWaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBtZW51IGlzIHNldCB0byBpbnZpc2libGUsIGl0IHNob3VsZCBiZSBpbnZpc2libGUsIG90aGVyd2lzZSB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBpdGVtc1xuXHRcdFx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gbWVudUl0ZW1zVmlzaWJsZVBhdGhzLm1hcCgobWVudUl0ZW1WaXNpYmxlUGF0aCkgPT5cblx0XHRcdFx0XHRyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51SXRlbVZpc2libGVQYXRoLCBcImJvb2xlYW5cIilcblx0XHRcdFx0KTtcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKChtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nKSB8fCB0cnVlLCBcImJvb2xlYW5cIiksIG9yKC4uLnZpc2libGVFeHByZXNzaW9ucykpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSAoIW1lbnVBY3Rpb25Ob3RWaXNpYmxlKS50b1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBjb2xsYWJvcmF0aW9uIGNvbmRpdGlvbiB0byBhbGwgYWN0aW9ucyB3aXRoIHR5cGUgRm9yQWN0aW9uLlxuICogVGhpcyBkaXNhYmxlcyB0aGUgYWN0aW9ucyBpZiB0aGUgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRoZSBhdXRob3JpemF0aW9uIGZyb20gdGhlIGJhY2sgZW5kLlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgb2YgdGhlIHRhYmxlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogdm9pZCB7XG5cdGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi52aXNpYmxlPy52YWx1ZU9mKCkgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRcdGFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gYWN0aW9uIGJ5IGl0cyBrZXksIGJhc2VkIG9uIHRoZSBnaXZlbiBhbm5vdGF0aW9uIGFjdGlvbnMgYW5kIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uIFRoZSByZXN1bHQgYWxyZWFkeSByZXByZXNlbnRzIHRoZVxuICogbWVyZ2VkIGFjdGlvbiBmcm9tIGJvdGggY29uZmlndXJhdGlvbiBzb3VyY2VzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWxzbyByZXR1cm5zIGFuIGluZGljYXRpb24gd2hldGhlciB0aGUgYWN0aW9uIGNhbiBiZSBhIG1lbnUgaXRlbSwgc2F5aW5nIHdoZXRoZXIgaXQgaXMgdmlzaWJsZSBvciBvZiBhIHNwZWNpZmljIHR5cGVcbiAqIHRoYXQgYWxsb3dzIHRoaXMuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGFjdGlvbktleSBBY3Rpb24gS2V5IHRvIGxvb2sgdXBcbiAqIEByZXR1cm5zIE1lcmdlZCBhY3Rpb24gYW5kIGluZGljYXRvciB3aGV0aGVyIGl0IGNhbiBiZSBhIG1lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBtYXBBY3Rpb25CeUtleShcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRhY3Rpb25LZXk6IHN0cmluZ1xuKTogeyBhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb247IGNhbkJlTWVudUl0ZW06IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IHtcblx0Y29uc3QgYW5ub3RhdGlvbkFjdGlvbiA9IGFubm90YXRpb25BY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmtleSA9PT0gYWN0aW9uS2V5KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0bGV0IHJlc3VsdEFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbiA9IHsgLi4uKGFubm90YXRpb25BY3Rpb24gPz8gbWFuaWZlc3RBY3Rpb24pIH07XG5cblx0Ly8gYWN0aW9ucyBpbnNpZGUgbWVudXMgY2FuJ3QgYmUgZm91bmQgb24gdG9wIGxldmVsLCBzbyBhc3NpZ24gYWN0aW9ucyBmcm9tIG1lbnUgdG8gaXRcblx0aWYgKE9iamVjdC5rZXlzKHJlc3VsdEFjdGlvbikubGVuZ3RoID09PSAwKSB7XG5cdFx0YW5ub3RhdGlvbkFjdGlvbnNcblx0XHRcdC5maWx0ZXIoKGFjdGlvbkFubm90YXRpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkFubm90YXRpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51O1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKChtZW51QWN0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdG1lbnVBY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW06IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0XHRpZiAobWVudUl0ZW0ua2V5ID09PSBhY3Rpb25LZXkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdEFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8vIEFubm90YXRpb24gYWN0aW9uIGFuZCBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFscmVhZHkgaGFzIHRvIGJlIG1lcmdlZCBoZXJlIGFzIGluc2VydEN1c3RvbUVsZW1lbnRzIG9ubHkgY29uc2lkZXJzIHRvcC1sZXZlbCBhY3Rpb25zXG5cdGlmIChhbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0Ly8gSWYgZW5hYmxlZCBvciB2aXNpYmxlIGlzIG5vdCBzZXQgaW4gdGhlIG1hbmlmZXN0LCB1c2UgdGhlIGFubm90YXRpb24gdmFsdWUgYW5kIGhlbmNlIGRvIG5vdCBvdmVyd3JpdGVcblx0XHRyZXN1bHRBY3Rpb24uZW5hYmxlZCA9IG1hbmlmZXN0QWN0aW9uPy5lbmFibGVkID8/IGFubm90YXRpb25BY3Rpb24uZW5hYmxlZDtcblx0XHRyZXN1bHRBY3Rpb24udmlzaWJsZSA9IG1hbmlmZXN0QWN0aW9uPy52aXNpYmxlID8/IGFubm90YXRpb25BY3Rpb24udmlzaWJsZTtcblxuXHRcdGZvciAoY29uc3QgcHJvcCBpbiBtYW5pZmVzdEFjdGlvbiB8fCB7fSkge1xuXHRcdFx0Y29uc3QgcHJvcEtleSA9IHByb3AgYXMga2V5b2YgQmFzZUFjdGlvbjtcblx0XHRcdGlmICghYW5ub3RhdGlvbkFjdGlvbltwcm9wS2V5XSAmJiBwcm9wS2V5ICE9PSBcIm1lbnVcIikge1xuXHRcdFx0XHRyZXN1bHRBY3Rpb25bcHJvcEtleV0gPSBtYW5pZmVzdEFjdGlvbltwcm9wS2V5XSBhcyBuZXZlcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBjYW5CZU1lbnVJdGVtID1cblx0XHRyZXN1bHRBY3Rpb24/LnZpc2libGUgfHxcblx0XHRyZXN1bHRBY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0cmVzdWx0QWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbjogcmVzdWx0QWN0aW9uIGFzIEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdFx0Y2FuQmVNZW51SXRlbVxuXHR9O1xufVxuXG4vKipcbiAqIE1hcCB0aGUgZGVmYXVsdCBhY3Rpb24ga2V5IG9mIGEgbWVudSB0byBpdHMgYWN0dWFsIGFjdGlvbiBjb25maWd1cmF0aW9uIGFuZCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgZGVmYXVsdCBhY3Rpb24gaXMgYSBjb21tYW5kLlxuICogQHBhcmFtIG1lbnVBY3Rpb24gTWVudSBhY3Rpb24gdG8gbWFwIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3JcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKiBAcGFyYW0gY29tbWFuZEFjdGlvbnMgQXJyYXkgb2YgY29tbWFuZCBhY3Rpb25zIHRvIHB1c2ggdGhlIGRlZmF1bHQgYWN0aW9uIHRvIGlmIGFwcGxpY2FibGVcbiAqL1xuZnVuY3Rpb24gbWFwTWVudURlZmF1bHRBY3Rpb24oXG5cdG1lbnVBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbj5cbik6IHZvaWQge1xuXHRjb25zdCB7IGFjdGlvbiwgY2FuQmVNZW51SXRlbSB9ID0gbWFwQWN0aW9uQnlLZXkobWFuaWZlc3RBY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucywgbWVudUFjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIHN0cmluZyk7XG5cblx0aWYgKGNhbkJlTWVudUl0ZW0pIHtcblx0XHRtZW51QWN0aW9uLmRlZmF1bHRBY3Rpb24gPSBhY3Rpb247XG5cdH1cblxuXHRpZiAoYWN0aW9uLmNvbW1hbmQpIHtcblx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb24ua2V5XSA9IGFjdGlvbjtcblx0fVxufVxuXG4vKipcbiAqIE1hcCB0aGUgbWVudSBpdGVtIGtleXMgb2YgYSBtZW51IHRvIHRoZWlyIGFjdHVhbCBhY3Rpb24gY29uZmlndXJhdGlvbnMgYW5kIGlkZW50aWZ5IHdoZXRoZXIgdGhleSBhcmUgY29tbWFuZHMuXG4gKiBAcGFyYW0gbWVudUFjdGlvbiBNZW51IGFjdGlvbiB0byBtYXAgdGhlIG1lbnUgaXRlbXMgZm9yXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGNvbW1hbmRBY3Rpb25zIEFycmF5IG9mIGNvbW1hbmQgYWN0aW9ucyB0byBwdXNoIHRoZSBtZW51IGl0ZW0gYWN0aW9ucyB0byBpZiBhcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIG1hcE1lbnVJdGVtcyhcblx0bWVudUFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uPlxuKTogdm9pZCB7XG5cdGNvbnN0IG1hcHBlZE1lbnVJdGVtczogKEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW10gPSBbXTtcblx0Y29uc3QgbWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uID0gYW5ub3RhdGlvbkFjdGlvbnMuZmluZCgoYW5ub3RhdGlvbkFjdGlvbikgPT4gYW5ub3RhdGlvbkFjdGlvbi5rZXkgPT09IG1lbnVBY3Rpb24ua2V5KTtcblxuXHRpZiAobWVudUFjdGlvbi5tZW51Py5sZW5ndGggIT09IDApIHtcblx0XHRmb3IgKGNvbnN0IG1lbnVJdGVtS2V5IG9mIG1lbnVBY3Rpb24ubWVudSA/PyBbXSkge1xuXHRcdFx0Y29uc3QgeyBhY3Rpb24sIGNhbkJlTWVudUl0ZW0gfSA9IG1hcEFjdGlvbkJ5S2V5KG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIG1lbnVJdGVtS2V5KTtcblxuXHRcdFx0aWYgKGNhbkJlTWVudUl0ZW0pIHtcblx0XHRcdFx0bWFwcGVkTWVudUl0ZW1zLnB1c2goYWN0aW9uKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdGNvbW1hbmRBY3Rpb25zW21lbnVJdGVtS2V5XSA9IGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJZiBubyBtZW51IGl0ZW1zIGFyZSBhc3NpZ25lZCB0byB0aGUgbWFuaWZlc3Qtb3ZlcnJpZGUtbWVudSwgaXQgaW5oZXJpdHMgdGhlIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIG1lbnVcblx0ZWxzZSBpZiAobWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0bWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtKSA9PiBtYXBwZWRNZW51SXRlbXMucHVzaChtZW51SXRlbSkpO1xuXHR9XG5cblx0Y29uc3QgbWFwcGVkTWVudUFjdGlvbiA9IG1lbnVBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uO1xuXHRtYXBwZWRNZW51QWN0aW9uLm1lbnUgPSBtYXBwZWRNZW51SXRlbXM7XG5cblx0Ly8gSWYgdGhlIG1lbnUgaXMgc2V0IHRvIGludmlzaWJsZSwgaXQgc2hvdWxkIGJlIGludmlzaWJsZSwgb3RoZXJ3aXNlIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGl0ZW1zXG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBtYXBwZWRNZW51SXRlbXMubWFwKChtZW51SXRlbSkgPT5cblx0XHRyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51SXRlbS52aXNpYmxlIGFzIHN0cmluZywgXCJib29sZWFuXCIpXG5cdCk7XG5cdG1hcHBlZE1lbnVBY3Rpb24udmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIiksIG9yKC4uLnZpc2libGVFeHByZXNzaW9ucykpXG5cdCk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZmxhdCBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgaW50byBhIG5lc3RlZCBzdHJ1Y3R1cmVzIG9mIG1lbnVzLiBUaGUgcmVzdWx0IGlzIGEgcmVjb3JkIG9mIGFjdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1lbnVzIG9yXG4gKiBvbmVzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBtZW51cyBhcyBtZW51IGl0ZW1zLiBJdCBhbHNvIHJldHVybnMgYSBsaXN0IG9mIGFjdGlvbnMgdGhhdCBoYXZlIGFuIGFzc2lnbmVkIGNvbW1hbmQuXG4gKlxuICogTm90ZSB0aGF0IG1lbnUgaXRlbXMgYXJlIGFscmVhZHkgdGhlIG1lcmdlZCByZXN1bHQgb2YgYW5ub3RhdGlvbiBhY3Rpb25zIGFuZCB0aGVpciBtYW5pZmVzdCBjb25maWd1cmF0aW9uLCBhcyB7QGxpbmsgaW5zZXJ0Q3VzdG9tRWxlbWVudHN9XG4gKiBvbmx5IGNvbnNpZGVycyByb290LWxldmVsIGFjdGlvbnMuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGFjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGEgbGlzdCBvZiBjb21tYW5kIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtTWVudUFjdGlvbnNBbmRJZGVudGlmeUNvbW1hbmRzKFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW11cbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWxsQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRjb25zdCBhY3Rpb25LZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBhY3Rpb25LZXkgaW4gbWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRBY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bWFwTWVudURlZmF1bHRBY3Rpb24obWFuaWZlc3RBY3Rpb24sIG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIGNvbW1hbmRBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAobWFuaWZlc3RBY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51KSB7XG5cdFx0XHRtYXBNZW51SXRlbXMobWFuaWZlc3RBY3Rpb24sIG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIGNvbW1hbmRBY3Rpb25zKTtcblxuXHRcdFx0Ly8gTWVudSBoYXMgbm8gdmlzaWJsZSBpdGVtcywgc28gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIW1hbmlmZXN0QWN0aW9uLm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0XHRhY3Rpb25LZXlzVG9EZWxldGUucHVzaChtYW5pZmVzdEFjdGlvbi5rZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb25LZXldID0gbWFuaWZlc3RBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uO1xuXHRcdH1cblxuXHRcdGFsbEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0fVxuXG5cdGFjdGlvbktleXNUb0RlbGV0ZS5mb3JFYWNoKChhY3Rpb25LZXk6IHN0cmluZykgPT4gZGVsZXRlIGFsbEFjdGlvbnNbYWN0aW9uS2V5XSk7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBhbGxBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBjb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGVuYWJsZW1lbnQgb2YgYSBtYW5pZmVzdCBhY3Rpb24uXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb24gVGhlIGFjdGlvbiBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGlzQW5ub3RhdGlvbkFjdGlvbiBXaGV0aGVyIHRoZSBhY3Rpb24sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGVuYWJsZW1lbnRcbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0RW5hYmxlZCA9IGZ1bmN0aW9uIChcblx0bWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uLFxuXHRpc0Fubm90YXRpb25BY3Rpb246IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uICYmIG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gYWN0aW9uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBhY3Rpb24ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBnZXRNYW5pZmVzdEFjdGlvbkJvb2xlYW5Qcm9wZXJ0eVdpdGhGb3JtYXR0ZXIobWFuaWZlc3RBY3Rpb24uZW5hYmxlZCwgY29udmVydGVyQ29udGV4dCwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdC8vIENvbnNpZGVyIHJlcXVpcmVzU2VsZWN0aW9uIHByb3BlcnR5IHRvIGluY2x1ZGUgc2VsZWN0ZWRDb250ZXh0cyBpbiB0aGUgYmluZGluZyBleHByZXNzaW9uXG5cdGNvbnN0IGludGVybmFsTW9kZWxQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0aWZFbHNlKFxuXHRcdFx0bWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLmVuYWJsZU9uU2VsZWN0ID09PSBcInNpbmdsZVwiLFxuXHRcdFx0XHRhbmQoZXF1YWwocGF0aEluTW9kZWwoaW50ZXJuYWxNb2RlbFByb3BlcnR5LCBcImludGVybmFsXCIpLCAxKSwgcmVzdWx0KSxcblx0XHRcdFx0YW5kKGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKGludGVybmFsTW9kZWxQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdClcblx0XHRcdCksXG5cdFx0XHRyZXN1bHRcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBtYW5pZmVzdCBhY3Rpb24uXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb24gVGhlIGFjdGlvbiBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGlzQW5ub3RhdGlvbkFjdGlvbiBXaGV0aGVyIHRoZSBhY3Rpb24sIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSB2aXNpYmlsaXR5XG4gKi9cbmNvbnN0IF9nZXRNYW5pZmVzdFZpc2libGUgPSBmdW5jdGlvbiAoXG5cdG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbixcblx0aXNBbm5vdGF0aW9uQWN0aW9uOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzQW5ub3RhdGlvbkFjdGlvbiAmJiBtYW5pZmVzdEFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGFjdGlvbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgYWN0aW9uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHJlc3VsdCA9IGdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlcihtYW5pZmVzdEFjdGlvbi52aXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBmb3JDb250ZXh0TWVudSk7XG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0cmVzdWx0ID0gZm9yQ29udGV4dE1lbnUgPyBhbmQocmVzdWx0LCBlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpIDogcmVzdWx0O1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmVzdWx0KTtcbn07XG5cbnR5cGUgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uID0gT21pdDxDdXN0b21BY3Rpb24sIFwibWVudVwiPiAmIHsgbWVudTogc3RyaW5nW10gfCB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBBcyBzb21lIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBvdmVycmlkYWJsZSBieSB0aGUgbWFuaWZlc3QsIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGdldHMgdGhlIGFubm90YXRpb24gdmFsdWVzIGZvciB0aGVzZS5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbiBBY3Rpb24gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9uIEFjdGlvbiBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqL1xuZnVuY3Rpb24gb3ZlcnJpZGVNYW5pZmVzdENvbmZpZ3VyYXRpb25XaXRoQW5ub3RhdGlvbihtYW5pZmVzdEFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uLCBhbm5vdGF0aW9uQWN0aW9uPzogQmFzZUFjdGlvbik6IHZvaWQge1xuXHRpZiAoIWFubm90YXRpb25BY3Rpb24pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBEbyBub3Qgb3ZlcnJpZGUgdGhlICd0eXBlJyBnaXZlbiBpbiBhbiBhbm5vdGF0aW9uIGFjdGlvblxuXHRtYW5pZmVzdEFjdGlvbi50eXBlID0gYW5ub3RhdGlvbkFjdGlvbi50eXBlO1xuXHRtYW5pZmVzdEFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb25BY3Rpb24uYW5ub3RhdGlvblBhdGg7XG5cdG1hbmlmZXN0QWN0aW9uLnByZXNzID0gYW5ub3RhdGlvbkFjdGlvbi5wcmVzcztcblxuXHQvLyBPbmx5IHVzZSB0aGUgYW5ub3RhdGlvbiB2YWx1ZXMgZm9yIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgaWYgbm90IHNldCBpbiB0aGUgbWFuaWZlc3Rcblx0bWFuaWZlc3RBY3Rpb24uZW5hYmxlZCA9IG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPz8gYW5ub3RhdGlvbkFjdGlvbi5lbmFibGVkO1xuXHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gbWFuaWZlc3RBY3Rpb24udmlzaWJsZSA/PyBhbm5vdGF0aW9uQWN0aW9uLnZpc2libGU7XG5cdG1hbmlmZXN0QWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSA9IG1hbmlmZXN0QWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSA/PyBhbm5vdGF0aW9uQWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBhY3Rpb24gY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBUaGUgYW5ub3RhdGlvbiBhY3Rpb25zIGRlZmluaXRpb25cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3NcbiAqIEBwYXJhbSBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gaGlkZGVuQWN0aW9ucyBBY3Rpb25zIHRoYXQgYXJlIGNvbmZpZ3VyZWQgYXMgaGlkZGVuIChhZGRpdGlvbmFsIHRvIHRoZSB2aXNpYmxlIHByb3BlcnR5KVxuICogQHBhcmFtIGZhY2V0TmFtZSBUaGUgZmFjZXQgd2hlcmUgYW4gYWN0aW9uIGlzIGRpc3BsYXllZCBpZiBpdCBpcyBpbmxpbmVcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPiB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3M/OiBib29sZWFuLFxuXHRoaWRkZW5BY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRmYWNldE5hbWU/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRjb25zdCBsYXN0RG90SW5kZXggPSBtYW5pZmVzdEFjdGlvbi5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRcdGxldCBhbm5vdGF0aW9uQWN0aW9uOiBCYXNlQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFubm90YXRpb25BY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhbm5vdGF0aW9uQWN0aW9ucykge1xuXHRcdFx0XHQvLyBTdWJTZWN0aW9uLnRzI2NyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIHVzZXMgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgd2hpY2ggcmVzdWx0cyBpbiBhbm5vdGF0aW9uIGFjdGlvbnMgbWl4aW5nIHVwIHdpdGggbWFuaWZlc3QgYWN0aW9uXG5cdFx0XHRcdC8vIHRoaXMgaXMgd2h5IHdlIG1heSBmaW5kIGFuIGFjdGlvbiB0aGF0IGhhcyBhIEN1c3RvbUFjdGlvbiBwcmVmaXhcblx0XHRcdFx0aWYgKGFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGFjdGlvbi5rZXkgPT09IGFjdGlvbktleSkge1xuXHRcdFx0XHRcdGFubm90YXRpb25BY3Rpb24gPSBhY3Rpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiKSB7XG5cdFx0XHRcdFx0Ly8gSWYgbm90IGZvdW5kLCBjaGVjayBpbnNpZGUgbWVudXNcblx0XHRcdFx0XHRhbm5vdGF0aW9uQWN0aW9uID0gYWN0aW9uLm1lbnU/LmZpbmQoKG1lbnVJdGVtOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWVudUl0ZW0ua2V5ID09PSBhY3Rpb25LZXk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGFubm90YXRpb25BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRvIGlkZW50aWZ5IHRoZSBhbm5vdGF0aW9uIGFjdGlvbiBwcm9wZXJ0eSBvdmVyd3JpdGUgdmlhIG1hbmlmZXN0IHVzZS1jYXNlLlxuXHRcdGNvbnN0IGlzQW5ub3RhdGlvbkFjdGlvbiA9ICEhYW5ub3RhdGlvbkFjdGlvbjtcblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lKSB7XG5cdFx0XHRmYWNldE5hbWUgPSBtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWU7XG5cdFx0fVxuXG5cdFx0YWN0aW9uc1thY3Rpb25LZXldID0ge1xuXHRcdFx0aWQ6IGFubm90YXRpb25BY3Rpb24gPyBhY3Rpb25LZXkgOiBnZXRDdXN0b21BY3Rpb25JRChhY3Rpb25LZXkpLFxuXHRcdFx0dHlwZTogbWFuaWZlc3RBY3Rpb24ubWVudSA/IEFjdGlvblR5cGUuTWVudSA6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdHZpc2libGU6IF9nZXRNYW5pZmVzdFZpc2libGUobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IF9nZXRNYW5pZmVzdFZpc2libGUobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0XHRlbmFibGVkOiBfZ2V0TWFuaWZlc3RFbmFibGVkKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBfZ2V0TWFuaWZlc3RFbmFibGVkKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQsIHRydWUpLFxuXHRcdFx0aGFuZGxlck1vZHVsZTogbWFuaWZlc3RBY3Rpb24ucHJlc3MgJiYgbWFuaWZlc3RBY3Rpb24ucHJlc3Muc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRoYW5kbGVyTWV0aG9kOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSksXG5cdFx0XHRwcmVzczogbWFuaWZlc3RBY3Rpb24ucHJlc3MsXG5cdFx0XHR0ZXh0OiBtYW5pZmVzdEFjdGlvbi50ZXh0LFxuXHRcdFx0bm9XcmFwOiBtYW5pZmVzdEFjdGlvbi5fX25vV3JhcCxcblx0XHRcdGtleTogcmVwbGFjZVNwZWNpYWxDaGFycyhhY3Rpb25LZXkpLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IG1hbmlmZXN0QWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtYW5pZmVzdEFjdGlvbi5kZWZhdWx0VmFsdWVzRnVuY3Rpb24sXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdEFjdGlvbiwgbmF2aWdhdGlvblNldHRpbmdzLCBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyksXG5cdFx0XHRjb21tYW5kOiBtYW5pZmVzdEFjdGlvbi5jb21tYW5kLFxuXHRcdFx0cmVxdWlyZXNTZWxlY3Rpb246IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogZW5hYmxlQXV0b1Njcm9sbChtYW5pZmVzdEFjdGlvbiksXG5cdFx0XHRtZW51OiBtYW5pZmVzdEFjdGlvbi5tZW51ID8/IChhbm5vdGF0aW9uQWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUgPyBbXSA6IHVuZGVmaW5lZCksXG5cdFx0XHRmYWNldE5hbWU6IG1hbmlmZXN0QWN0aW9uLmlubGluZSA/IGZhY2V0TmFtZSA6IHVuZGVmaW5lZCxcblx0XHRcdGRlZmF1bHRBY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRBY3Rpb24sXG5cdFx0XHRpc0FJT3BlcmF0aW9uOiBtYW5pZmVzdEFjdGlvbj8uaXNBSU9wZXJhdGlvbiA/PyB1bmRlZmluZWRcblx0XHR9O1xuXG5cdFx0b3ZlcnJpZGVNYW5pZmVzdENvbmZpZ3VyYXRpb25XaXRoQW5ub3RhdGlvbihhY3Rpb25zW2FjdGlvbktleV0sIGFubm90YXRpb25BY3Rpb24pO1xuXHR9XG5cblx0cmV0dXJuIHRyYW5zZm9ybU1lbnVBY3Rpb25zQW5kSWRlbnRpZnlDb21tYW5kcyhhY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucyA/PyBbXSk7XG59XG5cbi8qKlxuICogR2V0cyBhIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBCb29sZWFuIG1hbmlmZXN0IHByb3BlcnR5IHRoYXQgY2FuIGVpdGhlciBiZSByZXByZXNlbnRlZCBieSBhIHN0YXRpYyB2YWx1ZSwgYSBiaW5kaW5nIHN0cmluZyxcbiAqIG9yIGEgcnVudGltZSBmb3JtYXR0ZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZSBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmVkIHByb3BlcnR5IHZhbHVlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdEFjdGlvbkJvb2xlYW5Qcm9wZXJ0eVdpdGhGb3JtYXR0ZXIoXG5cdHByb3BlcnR5VmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlc29sdmVkQmluZGluZyA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4gfCBzdHJpbmc+KHByb3BlcnR5VmFsdWUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIik7XG5cdGxldCByZXN1bHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0aWYgKGlzQ29uc3RhbnQocmVzb2x2ZWRCaW5kaW5nKSAmJiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIE5vIHByb3BlcnR5IHZhbHVlIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QgZm9yIHRoZSBjdXN0b20gYWN0aW9uIC0tPiBkZWZhdWx0IHZhbHVlIGlzIHRydWVcblx0XHRyZXN1bHQgPSBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgdHlwZW9mIHJlc29sdmVkQmluZGluZy52YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdC8vIFRoZW4gaXQncyBhIG1vZHVsZS1tZXRob2QgcmVmZXJlbmNlIFwic2FwLnh4eC55eXkuZG9Tb21ldGhpbmdcIlxuXHRcdGNvbnN0IG1ldGhvZFBhdGggPSByZXNvbHZlZEJpbmRpbmcudmFsdWU7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcInNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdC8vIEZJWE1FOiBUaGUgY3VzdG9tIFwiaXNFbmFibGVkXCIgY2hlY2sgZG9lcyBub3QgdHJpZ2dlciAoYmVjYXVzZSBub25lIG9mIHRoZSBib3VuZCB2YWx1ZXMgY2hhbmdlcylcblx0XHRyZXN1bHQgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbcGF0aEluTW9kZWw8Vmlldz4oXCIvXCIsIFwiJHZpZXdcIiksIG1ldGhvZFBhdGgsIHBhdGhJbk1vZGVsPENvbnRleHRbXT4oaW50ZXJuYWxNb2RlbFBhdGgsIFwiaW50ZXJuYWxcIildLFxuXHRcdFx0ZnBtRm9ybWF0dGVyLmN1c3RvbUJvb2xlYW5Qcm9wZXJ0eUNoZWNrLFxuXHRcdFx0IWZvckNvbnRleHRNZW51XG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyB0aGVuIGl0J3MgYSBiaW5kaW5nXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogQ3VzdG9tQWN0aW9uW10gPT4ge1xuXHRsZXQgb01lbnVJdGVtS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0YWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uPy5tZW51Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1lbnUgPSBhY3Rpb24ubWVudTtcblx0XHRcdG9NZW51SXRlbUtleXMgPSBhY3Rpb25NZW51LnJlZHVjZSgoaXRlbTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHsga2V5IH0pID0+IHtcblx0XHRcdFx0aWYgKGtleSAmJiAhaXRlbVtrZXldKSB7XG5cdFx0XHRcdFx0aXRlbVtrZXldID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0sIG9NZW51SXRlbUtleXMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiAhb01lbnVJdGVtS2V5c1thY3Rpb24ua2V5XSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0bGV0IGlzRW5hYmxlZEV4cCA9IGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRcdFx0YWN0aW9uVGFyZ2V0LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT25Sb290ID1cblx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0aXNFbmFibGVkRXhwID0gYW5kKGlzRW5hYmxlZEV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzRW5hYmxlZEV4cDtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiBJcyB0aGUgYmluZGluZyBwYXRoIGNhbGN1bGF0ZWQgIGZyb20gdGhlIGNvbnZlcnRlciBjb250ZXh0IGxvY2F0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25UYXJnZXQsIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcobWFwcGluZ3M/OiBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlW10pOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRyZXR1cm4gbWFwcGluZ3Ncblx0XHQ/IG1hcHBpbmdzLm1hcCgobWFwcGluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG1hcHBpbmcuTG9jYWxQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogbWFwcGluZy5TZW1hbnRpY09iamVjdFByb3BlcnR5LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHQgIH0pXG5cdFx0OiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRhY3Rpb246IE1hbmlmZXN0QWN0aW9uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5Jc0NvcHlBY3Rpb24/LnZhbHVlT2YoKSA9PT0gdHJ1ZSAmJiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlBY3Rpb24oY29weURhdGFGaWVsZHM6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10pOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb3B5RGF0YUZpZWxkcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gY29weURhdGFGaWVsZHNbMF07XG5cdH1cblx0aWYgKGNvcHlEYXRhRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRMb2cuZXJyb3IoXCJNdWx0aXBsZSBhY3Rpb25zIGFyZSBhbm5vdGF0ZWQgd2l0aCBpc0NvcHlBY3Rpb24uIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdGFuZGFyZCBjb3B5IGFjdGlvbi5cIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZXh0cmFjdCBtZW51IGl0ZW1zIGZyb20gYWN0aW9ucyBvZiB0eXBlIG1lbnVzLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgYW5ub3RhdGlvbiBiYXNlZCBhY3Rpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXMgaW4gb25lIG9mIHRoZSBhbm5vdGF0aW9uIGJhc2VkIG1lbnVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtZW51QWN0aW9uSXRlbXM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXG5cdGFubm90YXRpb25BY3Rpb25zLmZvckVhY2goKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIgJiYgIWFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpICYmIGFjdGlvbi5tZW51KSB7XG5cdFx0XHRtZW51QWN0aW9uSXRlbXMucHVzaCguLi5hY3Rpb24ubWVudSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbWVudUFjdGlvbkl0ZW1zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBmaW5kIHRoZSBtYXRjaGluZyBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIHRoZSBhbm5vdGF0aW9uIG1lbnUgaXRlbXMuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbk1lbnVJdGVtcyBDb2xsZWN0aW9uIG9mIGFubm90YXRpb24gYmFzZWQgbWVudSBpdGVtc1xuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBDb2xsZWN0aW9uIG9mIG1hbmlmZXN0IGJhc2VkIGFjdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgYWN0aW9ucyB3aGljaCBhcmUgbWVudSBpdGVtcyBpbiBvbmUgb2YgdGhlIGFubm90YXRpb24gYmFzZWQgbWVudXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24oXG5cdGFubm90YXRpb25NZW51SXRlbXM6IEJhc2VBY3Rpb25bXSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IG1hbmlmZXN0QWN0aW9uIGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGlmIChcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnN0YXJ0c1dpdGgoXCJEYXRhRmllbGRGb3JBY3Rpb246OlwiKSAmJlxuXHRcdFx0YW5ub3RhdGlvbk1lbnVJdGVtcy5maW5kKChtZW51QWN0aW9uSXRlbXMpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lbnVBY3Rpb25JdGVtcy5rZXkgPT09IG1hbmlmZXN0QWN0aW9uO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zW21hbmlmZXN0QWN0aW9uXSA9IG1hbmlmZXN0QWN0aW9uc1ttYW5pZmVzdEFjdGlvbl07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIG1lbnVzIGJ5IHJlcGxhY2luZyB0aGUgbWVudSBpdGVtcyB3aXRoIHRoZWlyIG92ZXJyaWRpbmcgYWN0aW9ucy5cbiAqIEBwYXJhbSB1bnByZXBhcmVkQWN0aW9ucyBDb2xsZWN0aW9uIG9mIGFsbCBhY3Rpb25zIGFmdGVyIG1lcmdpbmcgbWFuaWZlc3QgYW5kIGFubm90YXRpb24gYWN0aW9uc1xuICogQHBhcmFtIG92ZXJyaWRlTWVudUFjdGlvbnMgQ29sbGVjdGlvbiBvZiBhbGwgb3ZlcnJpZGVuIG1lbnUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNZW51QWN0aW9ucyh1bnByZXBhcmVkQWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIG92ZXJyaWRlTWVudUFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZm91bmRBY3Rpb247XG5cblx0dW5wcmVwYXJlZEFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBDdXN0b21BY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkge1xuXHRcdFx0YWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtOiBCYXNlQWN0aW9uLCBtZW51SXRlbUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Zm91bmRBY3Rpb24gPSBvdmVycmlkZU1lbnVBY3Rpb25zLmZpbmQoKG92ZXJyaWRlTWVudUFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvdmVycmlkZU1lbnVBY3Rpb24ua2V5ID09PSBtZW51SXRlbS5rZXk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChmb3VuZEFjdGlvbikge1xuXHRcdFx0XHRcdGFjdGlvbi5tZW51Py5zcGxpY2UobWVudUl0ZW1JbmRleCwgMSwgZm91bmRBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1lbnUgY29uc2lzdHMgb2YgYWxsIEFJIG9wZXJhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgRGF0YUZpZWxkRm9yQWN0aW9ucyBvciBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25zIGluIHRoZSBtZW51XG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gdHJ1ZSBpZiBhbGwgcmVjb3JkcyBpbiB0aGUgbWVudSBhcmUgQUkgb3BlcmF0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnVBSU9wZXJhdGlvbihhbm5vdGF0aW9uQWN0aW9uczogRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBhbm5vdGF0aW9uQWN0aW9ucy5ldmVyeShpc0FjdGlvbkFJT3BlcmF0aW9uKTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiByZWNvcmQgaXMgYW4gQUkgb3BlcmF0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgcmVjb3JkIG9mIHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uIG9yIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHJldHVybnMgQSBib29sZWFuIHRydWUgaWYgdGhlIGdpdmVuIHJlY29yZCBpcyBhbiBBSSBvcGVyYXRpb24sIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMpOiBib29sZWFuIHtcblx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zLlVJPy5Jc0FJT3BlcmF0aW9uPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZpc2liaWxpdHkgb2YgdGhlIENyZWF0ZU5leHQgYnV0dG9uLlxuICogVGhpcyBmdW5jdGlvbiBjZW50cmFsaXplcyB0aGUgdmlzaWJpbGl0eSBsb2dpYyB0byBiZSByZXVzZWQgYnkgYm90aCBnZXRGb290ZXJEZWZhdWx0QWN0aW9uc1xuICogYW5kIEZvb3RlckNvbnRlbnQudHN4LlxuICogQHBhcmFtIGhpZGRlbkRyYWZ0RW5hYmxlZCBXaGV0aGVyIGhpZGRlbiBkcmFmdCBtb2RlIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSBmY2xFbmFibGVkIFdoZXRoZXIgRkNMIChGbGV4aWJsZSBDb2x1bW4gTGF5b3V0KSBpcyBlbmFibGVkXG4gKiBAcmV0dXJucyBBIGNvbXBpbGVkIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIENyZWF0ZU5leHQgYnV0dG9uIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5KGhpZGRlbkRyYWZ0RW5hYmxlZDogYm9vbGVhbiwgZmNsRW5hYmxlZDogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aGlkZGVuRHJhZnRFbmFibGVkID09PSB0cnVlLFxuXHRcdGlmRWxzZShcblx0XHRcdGZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRhbmQoRHJhZnQuSXNOZXdPYmplY3QsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSksXG5cdFx0XHREcmFmdC5Jc05ld09iamVjdFxuXHRcdCksXG5cdFx0RHJhZnQuSXNOZXdPYmplY3Rcblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -33,7 +33,7 @@ import type { ConfigurableObject, CustomElement, OverrideType } from "sap/fe/cor
33
33
  import { Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
34
34
  import { getCustomActionID } from "sap/fe/core/converters/helpers/ID";
35
35
  import fpmFormatter from "sap/fe/core/formatters/FPMFormatter";
36
- import { UI } from "sap/fe/core/helpers/BindingHelper";
36
+ import { Draft, UI } from "sap/fe/core/helpers/BindingHelper";
37
37
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
38
38
  import { replaceSpecialChars } from "sap/fe/core/helpers/StableIdHelper";
39
39
  import { getActionEnabledExpression } from "sap/fe/core/templating/UIFormatters";
@@ -592,9 +592,10 @@ function getManifestActionBooleanPropertyWithFormatter(
592
592
  } else if (isConstant(resolvedBinding) && typeof resolvedBinding.value === "string") {
593
593
  // Then it's a module-method reference "sap.xxx.yyy.doSomething"
594
594
  const methodPath = resolvedBinding.value;
595
+ const internalModelPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
595
596
  // FIXME: The custom "isEnabled" check does not trigger (because none of the bound values changes)
596
597
  result = formatResult(
597
- [pathInModel<View>("/", "$view"), methodPath, pathInModel<Context[]>("selectedContexts", "internal")],
598
+ [pathInModel<View>("/", "$view"), methodPath, pathInModel<Context[]>(internalModelPath, "internal")],
598
599
  fpmFormatter.customBooleanPropertyCheck,
599
600
  !forContextMenu
600
601
  ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType()
@@ -802,3 +803,23 @@ export function isActionAIOperation(dataField: DataFieldForActionAbstractTypes):
802
803
  }
803
804
  return false;
804
805
  }
806
+
807
+ /**
808
+ * Gets the binding expression for the visibility of the CreateNext button.
809
+ * This function centralizes the visibility logic to be reused by both getFooterDefaultActions
810
+ * and FooterContent.tsx.
811
+ * @param hiddenDraftEnabled Whether hidden draft mode is enabled
812
+ * @param fclEnabled Whether FCL (Flexible Column Layout) is enabled
813
+ * @returns A compiled binding expression for the CreateNext button visibility
814
+ */
815
+ export function getCreateNextButtonVisibility(hiddenDraftEnabled: boolean, fclEnabled: boolean): BindingToolkitExpression<boolean> {
816
+ return ifElse(
817
+ hiddenDraftEnabled === true,
818
+ ifElse(
819
+ fclEnabled === true,
820
+ and(Draft.IsNewObject, equal(pathInModel("/showSaveAndCancelButton", "fclhelper"), true)),
821
+ Draft.IsNewObject
822
+ ),
823
+ Draft.IsNewObject
824
+ );
825
+ }