@sapui5/sap.fe.macros 1.142.0 → 1.142.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  24. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  25. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  26. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  27. package/src/sap/fe/macros/controls/Section.js +3 -2
  28. package/src/sap/fe/macros/controls/Section.ts +1 -1
  29. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  30. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  33. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  34. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  35. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  36. package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
  37. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  38. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  39. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  40. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  41. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  42. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  43. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  44. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  45. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  46. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  47. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  48. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  49. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  50. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  51. package/src/sap/fe/macros/library.js +5 -6
  52. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  53. package/src/sap/fe/macros/messagebundle.properties +6 -0
  54. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  55. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  56. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
  57. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
  58. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  59. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  60. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  61. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  62. package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
  63. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
  64. package/src/sap/fe/macros/table/Table.block.js +3 -1
  65. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  66. package/src/sap/fe/macros/table/TableAPI.js +62 -28
  67. package/src/sap/fe/macros/table/TableAPI.ts +73 -32
  68. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
  69. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
  70. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  71. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  72. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  73. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  74. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  75. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  76. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  77. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  78. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  79. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  80. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  81. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  82. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
  83. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
@@ -45,7 +45,8 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
45
45
  const isOperationAvailable = dataField.ActionTarget?.annotations?.Core?.OperationAvailable?.valueOf() !== false;
46
46
  const command = !forContextMenu ? menuItemAction.command : menuItemAction.command + "::ContextMenu";
47
47
  const contextMenuText = forContextMenu ? "ContextMenu" : "ActionMenu";
48
- const pressHandler = menuItemAction.command ? undefined : parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, menuItemAction, action, forContextMenu);
48
+ // Here check the parent/child
49
+ const pressHandler = menuItemAction.command ? undefined : parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, menuItemAction, forContextMenu);
49
50
  const pressCommand = menuItemAction.command ? `cmd:${command}|press` : undefined;
50
51
  let enabled = menuItemAction.enabled !== undefined ? menuItemAction.enabled : TableHelper.isDataFieldForActionEnabled(table.tableDefinition, dataField.Action, !!isBound, actionContext.getObject(), menuItemAction.enableOnSelect, dataFieldDataModelObjectPath?.targetEntityType, forContextMenu);
51
52
  if (table.tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel && !!isBound) {
@@ -175,7 +176,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
175
176
  const dataFieldDataModelObjectPath = actionContext ? MetaModelConverter.getInvolvedDataModelObjects(actionContext, collectionContext) : undefined;
176
177
  const isBound = dataField.ActionTarget?.isBound;
177
178
  const command = !forContextMenu ? action.command : action.command + "::ContextMenu";
178
- const pressHandler = action.command ? undefined : parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action, undefined, forContextMenu);
179
+ const pressHandler = action.command ? undefined : parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action, forContextMenu);
179
180
  const pressCommand = action.command ? `cmd:${command}|press` : undefined;
180
181
  const enabled = action.enabled !== undefined ? action.enabled : TableHelper.isDataFieldForActionEnabled(table.tableDefinition, dataField.Action, !!isBound, actionContext.getObject(), action.enableOnSelect, dataFieldDataModelObjectPath?.targetEntityType, forContextMenu);
181
182
  const icon = action.isAIOperation === true ? aiIcon : undefined;
@@ -343,7 +344,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
343
344
  switch (defaultAction.type) {
344
345
  case "ForAction":
345
346
  return {
346
- handler: parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataFieldForDefaultAction, defaultAction, undefined, false)
347
+ handler: parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataFieldForDefaultAction, defaultAction, false)
347
348
  };
348
349
  case "ForNavigation":
349
350
  return {
@@ -550,7 +551,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
550
551
  const actionContext = parameters.metaModel.createBindingContext(actionContextPath);
551
552
  const dataFieldDataModelObjectPath = actionContext ? MetaModelConverter.getInvolvedDataModelObjects(actionContext, collectionContext) : undefined;
552
553
  const isBound = dataField?.ActionTarget?.isBound;
553
- const press = dataField ? parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action, undefined, forContextMenu) : undefined;
554
+ const press = dataField ? parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action, forContextMenu) : undefined;
554
555
  let enabled = operationAvailable ? TableHelper.isDataFieldForActionEnabled(table.tableDefinition, dataField.Action, !!isBound, actionContext.getObject(), action.enableOnSelect, dataFieldDataModelObjectPath?.targetEntityType, forContextMenu, true) : `{= ${ActionHelper.getNumberOfContextsExpression("single", forContextMenu)}}`;
555
556
  if (table.tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel) {
556
557
  enabled = compileExpression(and(resolveBindingString(enabled), UI.isNodeLevelNavigable));
@@ -1133,4 +1134,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
1133
1134
  }
1134
1135
  return _exports;
1135
1136
  }, false);
1136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJhcmlhRGVzY3JpYmVkQnkiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiYWN0aW9ucyIsIkFjdGlvblR5cGUiLCJTdGFuZGFyZCIsIlNlcGFyYXRvciIsIlRvb2xiYXJTZXBhcmF0b3IiLCJfZXhwb3J0cyIsImdldEJhc2ljU2VhcmNoIiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXJJZCIsIl9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQiLCJpc1NlYXJjaGFibGUiLCJsYWJlbCIsIkJhc2ljU2VhcmNoTWFjcm8iLCJ1c2VEcmFmdEVkaXRTdGF0ZSIsImdldEZ1bGxTY3JlZW4iLCJlbmFibGVGdWxsU2NyZWVuIiwiVGFibGVGdWxsU2NyZWVuQnV0dG9uIiwiZm9yTW92ZVVwIiwidGFibGVUeXBlIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnROb2RlIiwiaXNEcmFmdFJvb3QiLCJzZWFyY2hhYmxlIiwiYmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJmdWxsU2NyZWVuIiwiZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIiwiZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnMiLCJleHBhbmROb2RlIiwiY29sbGFwc2VOb2RlIiwiZXhwYW5kIiwiZW5hYmxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uc1RlbXBsYXRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzQWN0aW9uV2l0aERpYWxvZyxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBhaUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BbmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUZ1bGxTY3JlZW5CdXR0b25cIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgVG9vbGJhclNlcGFyYXRvciBmcm9tIFwic2FwL20vVG9vbGJhclNlcGFyYXRvclwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbk1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEFjdGlvbnNQbGFjZWhvbGRlciBmcm9tIFwic2FwL20vdXBsb2FkL0FjdGlvbnNQbGFjZWhvbGRlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IEJhc2ljU2VhcmNoTWFjcm8gZnJvbSBcIi4vQmFzaWNTZWFyY2hcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICghbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoXG5cdFx0cGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhXG5cdCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgbWVudUl0ZW1BY3Rpb24sIGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRsZXQgZW5hYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID1cblx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiAhIWlzQm91bmQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlLCByZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSkpO1xuXHR9XG5cdGlmIChpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlKSB7XG5cdFx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGRhdGFGaWVsZCwgXCJNZW51SXRlbUZvckFjdGlvblwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpdGVtSWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE1lbnVJdGVtIGZvciB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2UsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IE1lbnVJdGVtIHtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7bWVudUl0ZW1BY3Rpb24uY29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbjogdGFibGUudGFibGVEZWZpbml0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiLCBcIkNvbnRleHRNZW51XCJdKVxuXHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1JbnRlbnRCYXNlZE5hdmlnYXRpb25cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0aWQ9e2lkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0IWRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHRcblx0XHRcdFx0XHRcdD8gY3JlYXRlQ3VzdG9tRGF0YShcIklCTkRhdGFcIiwgeyBzZW1hbnRpY09iamVjdDogZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0LCBhY3Rpb246IGRhdGFGaWVsZC5BY3Rpb24gfSlcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpZClcblx0XHRcdFx0XVxuXHRcdFx0fX1cblx0XHQ8L01lbnVJdGVtPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBtZW51SXRlbUFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZCAmJiBtZW51SXRlbUFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFmb3JDb250ZXh0TWVudSB8fFxuXHRcdFx0XHRcdChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkISkgJiZcblx0XHRcdFx0KCFmb3JDb250ZXh0TWVudSB8fCAoZm9yQ29udGV4dE1lbnUgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbixcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA6IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGxldCBlbmFibGVkID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZCA6IChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKFxuXHRcdChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uICYmXG5cdFx0dGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWxcblx0KSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IGl0ZW1JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgY29udGV4dE1lbnVUZXh0LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0dGV4dD17bWVudUl0ZW1BY3Rpb24/LnRleHR9XG5cdFx0XHRpZD17aXRlbUlkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQnV0dG9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uQ29udGV4dCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb24+KGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgYWN0aW9uLCB1bmRlZmluZWQsIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXtpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkKX1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBbXCJmZTo6QWlBY3Rpb246OkFyaWFUZXh0XCJdIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV0sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIG1lbnVJZCldLFxuXHRcdFx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgbWVudUl0ZW1zRm9yQ29udGV4dE1lbnU6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRcdGFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbUFjdGlvbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0XHRcdG1lbnVJdGVtc0ZvckNvbnRleHRNZW51Py5wdXNoKG1lbnVJdGVtQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51XG5cdFx0XHQuZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHRleHQ9e2FjdGlvbi50ZXh0fVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51SXRlbT5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0QnV0dG9uKFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZCA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRpY29uPXthY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgYW4gYWN0aW9uIGJ1dHRvbi9tZW51IGl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0byBnZXRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRpZiAoXCJub1dyYXBcIiBpbiBhY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIGdldERlZmF1bHRCdXR0b24oYWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTWVudVwiOlxuXHRcdFx0cmV0dXJuIGdldE1lbnVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRkZWZhdWx0OlxuXHR9XG5cdHJldHVybiBnZXREYXRhRmllbGRCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvcHkgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgY29weSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIGFjdGlvbiBpcyBmb3IgQWN0aW9uIFRvb2xiYXIgb2YgQ29udGV4dCBNZW51XG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSEpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGUgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgcHJlc3MgPSBkYXRhRmllbGRcblx0XHQ/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIGFjdGlvbiwgdW5kZWZpbmVkLCBmb3JDb250ZXh0TWVudSlcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRsZXQgZW5hYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gb3BlcmF0aW9uQXZhaWxhYmxlXG5cdFx0PyBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHR0cnVlXG5cdFx0ICApXG5cdFx0OiBgez0gJHtBY3Rpb25IZWxwZXIuZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24oXCJzaW5nbGVcIiwgZm9yQ29udGV4dE1lbnUpfX1gO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3N9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSkpXSxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSkgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKSldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBjcmVhdGUgYnV0dG9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uIFN0YW5kYXJkIGFjdGlvbnMgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyB3aGV0aGVyIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyLlxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgY3JlYXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGVCdXR0b24oXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25zUGxhY2Vob2xkZXIgfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfQ1JFQVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRjb25zdCBjcmVhdGVPdXRib3VuZERldGFpbCA9ICh0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUgYXMgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCkub3V0Ym91bmREZXRhaWw7XG5cdGNvbnN0IGN1c3RvbURhdGEgPSBjcmVhdGVPdXRib3VuZERldGFpbFxuXHRcdD8gY3JlYXRlQ3VzdG9tRGF0YShcIklCTkRhdGFcIiwgeyBzZW1hbnRpY09iamVjdDogY3JlYXRlT3V0Ym91bmREZXRhaWwuc2VtYW50aWNPYmplY3QsIGFjdGlvbjogY3JlYXRlT3V0Ym91bmREZXRhaWwuYWN0aW9uIH0pXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdHJldHVybiA8QWN0aW9uc1BsYWNlaG9sZGVyIGlkPXtgJHt0YWJsZS5jb250ZW50SWR9LXVwbG9hZEJ1dHRvbmB9IHBsYWNlaG9sZGVyRm9yPVwiVXBsb2FkQnV0dG9uUGxhY2Vob2xkZXJcIiAvPjtcblx0fSBlbHNlIGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDcmVhdGV8cHJlc3NcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3JlYXRlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldENyZWF0ZU1lbnUoXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9DUkVBVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGNvbnN0IHZhbHVlcyA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlIS52YWx1ZXM7XG5cdGNvbnN0IGhhc0N1c3RvbUNyZWF0ZUVuYWJsZW1lbnQgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50ICE9PSB1bmRlZmluZWQ7XG5cblx0Y29uc3QgbWVudUl0ZW1zID0gdmFsdWVzLm1hcCgoYWxsb3dlZFZhbHVlLCBpbmRleCkgPT4ge1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXG5cdFx0Y29uc3QgaXNFbmFibGVkID0gaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudFxuXHRcdFx0PyBub3RFcXVhbChwYXRoSW5Nb2RlbChgJHttb2RlbE5hbWV9Y3JlYXRlRW5hYmxlbWVudC9DcmVhdGVfJHtpbmRleH1gLCBcImludGVybmFsXCIpLCBmYWxzZSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlkID0gZm9yQ29udGV4dE1lbnVcblx0XHRcdD8gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWxsb3dlZFZhbHVlLnZhbHVlLCBcIkNvbnRleHRNZW51XCJdKVxuXHRcdFx0OiBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhbGxvd2VkVmFsdWUudmFsdWVdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0dGV4dD17YWxsb3dlZFZhbHVlLnRleHR9XG5cdFx0XHRcdGVuYWJsZWQ9e2lzRW5hYmxlZCA/IGNvbXBpbGVFeHByZXNzaW9uKGlzRW5hYmxlZCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXgsIGZvckNvbnRleHRNZW51KX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSk7XG5cblx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtcyAhPT0gdW5kZWZpbmVkICYmIG1lbnVJdGVtcy5sZW5ndGggPiAwID8gbWVudUl0ZW1zIDogdW5kZWZpbmVkXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdG1lbnVQb3NpdGlvbj1cIkJlZ2luQm90dG9tXCJcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKSldLFxuXHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWxldGUgYnV0dG9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uIFN0YW5kYXJkIGFjdGlvbnMgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVsZXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXREZWxldGVCdXR0b24oXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfREVMRVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpEZWxldGVFbnRyeXxwcmVzc1wiXG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRhcmlhSGFzUG9wdXA9XCJEaWFsb2dcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBzdGFuZGFyZCBhY3Rpb25zIGJhc2VkIG9uIHRoZSBrZXkgb2YgdGhlIHN0YW5kYXJkIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0byB0ZW1wbGF0ZVxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGFjdGlvbi5pc1RlbXBsYXRlZCA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgJiYgYWN0aW9uLmtleSAhPT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSlcblx0XHQpO1xuXHR9XG5cblx0c3dpdGNoIChhY3Rpb24ua2V5KSB7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIHx8XG5cdFx0XHRcdC8vIFdlIG9ubHkgaGF2ZSBDcmVhdGUgb24gdGhlIENvbnRleHRNZW51IG9uIHRoZSBUcmVlVGFibGVcblx0XHRcdFx0KHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIgJiYgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSBpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGdldENyZWF0ZU1lbnUoYWN0aW9uLCB0YWJsZSwgY29sbGVjdGlvbkVudGl0eSwgZm9yQ29udGV4dE1lbnUsIGhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q3JlYXRlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRcdH1cblxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZTpcblx0XHRcdHJldHVybiBnZXREZWxldGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkN1dDpcblx0XHRcdHJldHVybiBnZXRDdXRCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHk6XG5cdFx0XHRyZXR1cm4gZ2V0Q29weUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGU6XG5cdFx0XHRyZXR1cm4gZ2V0UGFzdGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTWFzc0VkaXQ6XG5cdFx0XHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSB7XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfTUFTU0VESVR9XCJcblx0XHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyb3VwPXthY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfTUFTU0VESVR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0czpcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmFkZENhcmRUb0luc2lnaHRzUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHkgPz8gXCJBbHdheXNPdmVyZmxvd1wifSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA6XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd246XG5cdFx0XHRyZXR1cm4gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdIHtcblx0Ly8gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvbiBiZWZvcmUgcHJvY2Vzc2luZ1xuXHRjb25zdCBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiA9IEFjdGlvbkhlbHBlci5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3ModGFibGUudGFibGVEZWZpbml0aW9uLmFjdGlvbnMpO1xuXG5cdHJldHVybiBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvblxuXHRcdC5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuU3RhbmRhcmQ6XG5cdFx0XHRcdFx0cmV0dXJuIGdldFN0YW5kYXJkQWN0aW9uKGFjdGlvbiBhcyBTdGFuZGFyZEFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5Db3B5OlxuXHRcdFx0XHRcdHJldHVybiBnZXRDb3B5QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TZXBhcmF0b3I6XG5cdFx0XHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTZXBhcmF0b3I+XG5cdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ8L1Rvb2xiYXJTZXBhcmF0b3I+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSB1bmRlZmluZWQpIGFzIChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciBCYXNpY1NlYXJjaC5cbiAqIEBwYXJhbSB1c2VCYXNpY1NlYXJjaFxuICogQHBhcmFtIGZpbHRlckJhcklkXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZFxuICogQHBhcmFtIGlzU2VhcmNoYWJsZVxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIEJhc2ljU2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGdldEJhc2ljU2VhcmNoKFxuXHR1c2VCYXNpY1NlYXJjaDogYm9vbGVhbixcblx0ZmlsdGVyQmFySWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0aXNTZWFyY2hhYmxlOiBib29sZWFuXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHVzZUJhc2ljU2VhcmNoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbZmlsdGVyQmFySWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fQkFTSUNfU0VBUkNIfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPEJhc2ljU2VhcmNoTWFjcm8gaWQ9e2ZpbHRlckJhcklkfSB1c2VEcmFmdEVkaXRTdGF0ZT17X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZH0gdmlzaWJsZT17aXNTZWFyY2hhYmxlfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRhYmxlIGZ1bGxzY3JlZW4gYnV0dG9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RnVsbFNjcmVlbih0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUZ1bGxTY3JlZW4pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU3RhbmRhcmRBY3Rpb25cIiwgXCJGdWxsU2NyZWVuXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fRlVMTF9TQ1JFRU59XCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiA8VGFibGVGdWxsU2NyZWVuQnV0dG9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiXSl9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIEN1dCBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3V0IEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDdXRCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DVVR9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXR8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkN1dDo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgQ29weSBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmRBY3Rpb24uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBidXR0b24uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiXSl9XG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNvcHk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNb3ZlVXBEb3duQnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBmb3JNb3ZlVXAgPSBhY3Rpb24ua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2Zvck1vdmVVcCA/IFwiY21kOlRhYmxlTW92ZUVsZW1lbnRVcHxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd258cHJlc3NcIn1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51fHByZXNzXCIgOiBcImNtZDpUYWJsZU1vdmVFbGVtZW50RG93bjo6Q29udGV4dE1lbnV8cHJlc3NcIn1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBQYXN0ZSBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBQYXN0ZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGFzdGUgQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhc3RlQnV0dG9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiUGFzdGVcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCJdKX1cblx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6UGFzdGV8cHJlc3NcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZvciBDb250ZXh0IE1lbnVcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10ge1xuXHRjb25zdCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY29sbGVjdGlvbkVudGl0eSkgfHwgTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29sbGVjdGlvbkVudGl0eSk7XG5cdGxldCBzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRpZiAodGFibGUuaXNTZWFyY2hhYmxlID09PSBmYWxzZSkge1xuXHRcdHNlYXJjaGFibGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRzZWFyY2hhYmxlID0gdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VhcmNoYWJsZTtcblx0fVxuXG5cdGNvbnN0IGFjdGlvbnM6IChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW10gPSBbXTtcblx0Y29uc3QgYmFzaWNTZWFyY2ggPSBnZXRCYXNpY1NlYXJjaCghIXRhYmxlLnVzZUJhc2ljU2VhcmNoLCB0YWJsZS5maWx0ZXJCYXIsIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQsIHNlYXJjaGFibGUpO1xuXHRpZiAoYmFzaWNTZWFyY2gpIHtcblx0XHRhY3Rpb25zLnB1c2goYmFzaWNTZWFyY2gpO1xuXHR9XG5cdGFjdGlvbnMucHVzaCguLi5nZXRBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblx0Y29uc3QgZnVsbFNjcmVlbiA9IGdldEZ1bGxTY3JlZW4odGFibGUpO1xuXHRpZiAoZnVsbFNjcmVlbikge1xuXHRcdGFjdGlvbnMucHVzaChmdWxsU2NyZWVuKTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25zIGFzIENvbnRyb2xbXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIGNvbnRleHQgbWVudSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IE1lbnVJdGVtW10ge1xuXHRjb25zdCB0ZW1wbGF0ZTogTWVudUl0ZW1bXSA9IGdldEFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSBhcyB1bmtub3duIGFzIE1lbnVJdGVtW107XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dGVtcGxhdGUucHVzaChnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZSwgdHJ1ZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZXhwYW5kTm9kZSkpO1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIGZhbHNlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb2xsYXBzZU5vZGUpKTtcblx0fVxuXHRyZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZXhwYW5kOiBib29sZWFuLCBwcmVzc0hhbmRsZXI/OiAoZTogVUk1RXZlbnQpID0+IHZvaWQpOiBNZW51SXRlbSB7XG5cdGNvbnN0IGVuYWJsZUV4cHJlc3Npb24gPSBleHBhbmRcblx0XHQ/IGFuZChcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApXG5cdFx0OiBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHQgICk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZXhwYW5kID8gXCJFeHBhbmRcIiA6IFwiQ29sbGFwc2VcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHR0ZXh0PXtleHBhbmQgPyBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0VYUEFORH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09OVEVYVE1FTlVfQ09MTEFQU0V9XCJ9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlRXhwcmVzc2lvbn1cblx0XHQvPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxvQkFBb0JBLENBQzVCQyxTQUE2QixFQUM3QkMsTUFBb0QsRUFDcERDLGNB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
1137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJhcmlhRGVzY3JpYmVkQnkiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiYWN0aW9ucyIsIkFjdGlvblR5cGUiLCJTdGFuZGFyZCIsIlNlcGFyYXRvciIsIlRvb2xiYXJTZXBhcmF0b3IiLCJfZXhwb3J0cyIsImdldEJhc2ljU2VhcmNoIiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXJJZCIsIl9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQiLCJpc1NlYXJjaGFibGUiLCJsYWJlbCIsIkJhc2ljU2VhcmNoTWFjcm8iLCJ1c2VEcmFmdEVkaXRTdGF0ZSIsImdldEZ1bGxTY3JlZW4iLCJlbmFibGVGdWxsU2NyZWVuIiwiVGFibGVGdWxsU2NyZWVuQnV0dG9uIiwiZm9yTW92ZVVwIiwidGFibGVUeXBlIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnROb2RlIiwiaXNEcmFmdFJvb3QiLCJzZWFyY2hhYmxlIiwiYmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJmdWxsU2NyZWVuIiwiZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIiwiZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnMiLCJleHBhbmROb2RlIiwiY29sbGFwc2VOb2RlIiwiZXhwYW5kIiwiZW5hYmxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uc1RlbXBsYXRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzQWN0aW9uV2l0aERpYWxvZyxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBhaUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BbmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUZ1bGxTY3JlZW5CdXR0b25cIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgVG9vbGJhclNlcGFyYXRvciBmcm9tIFwic2FwL20vVG9vbGJhclNlcGFyYXRvclwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbk1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEFjdGlvbnNQbGFjZWhvbGRlciBmcm9tIFwic2FwL20vdXBsb2FkL0FjdGlvbnNQbGFjZWhvbGRlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IEJhc2ljU2VhcmNoTWFjcm8gZnJvbSBcIi4vQmFzaWNTZWFyY2hcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICghbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoXG5cdFx0cGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhXG5cdCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdC8vIEhlcmUgY2hlY2sgdGhlIHBhcmVudC9jaGlsZFxuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIG1lbnVJdGVtQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGxldCBlbmFibGVkOiBzdHJpbmcgfCBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmICEhaXNCb3VuZCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQoVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUsIHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQpKSk7XG5cdH1cblx0aWYgKGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBpdGVtSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGNvbnRleHRNZW51VGV4dCwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtRm9yQWN0aW9uXCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWQ9e2l0ZW1JZH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgSW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZSxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogTWVudUl0ZW0ge1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IGhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIobWVudUl0ZW1BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZW5hYmxlZCA9XG5cdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IGlkID0gZm9yQ29udGV4dE1lbnVcblx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0OiBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRpZD17aWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHQhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dFxuXHRcdFx0XHRcdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBkYXRhRmllbGQuU2VtYW50aWNPYmplY3QsIGFjdGlvbjogZGF0YUZpZWxkLkFjdGlvbiB9KVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGlkKVxuXHRcdFx0XHRdXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lbnVJdGVtQWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW0oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkICYmIG1lbnVJdGVtQWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWZvckNvbnRleHRNZW51IHx8XG5cdFx0XHRcdFx0KGZvckNvbnRleHRNZW51ICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbUZvckFjdGlvbihkYXRhRmllbGQsIGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbihkYXRhRmllbGQhKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdG1lbnVJdGVtQWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5jb21tYW5kIDogbWVudUl0ZW1BY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblx0bGV0IGVuYWJsZWQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5lbmFibGVkIDogKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikuZW5hYmxlZEZvckNvbnRleHRNZW51O1xuXHRpZiAoXG5cdFx0KG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikucmVxdWlyZXNTZWxlY3Rpb24gJiZcblx0XHR0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdH1cblx0Y29uc3QgY29udGV4dE1lbnVUZXh0ID0gZm9yQ29udGV4dE1lbnUgPyBcIkNvbnRleHRNZW51XCIgOiBcIkFjdGlvbk1lbnVcIjtcblx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbVwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RlBNOiAnc2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXInfVwiXG5cdFx0XHR0ZXh0PXttZW51SXRlbUFjdGlvbj8udGV4dH1cblx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaXRlbUlkKV1cblx0XHRcdH19XG5cdFx0PC9NZW51SXRlbT5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQnV0dG9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb25Db250ZXh0KTtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvbj4oYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXtpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkKX1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBbXCJmZTo6QWlBY3Rpb246OkFyaWFUZXh0XCJdIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV0sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIG1lbnVJZCldLFxuXHRcdFx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgbWVudUl0ZW1zRm9yQ29udGV4dE1lbnU6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRcdGFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbUFjdGlvbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0XHRcdG1lbnVJdGVtc0ZvckNvbnRleHRNZW51Py5wdXNoKG1lbnVJdGVtQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51XG5cdFx0XHQuZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHRleHQ9e2FjdGlvbi50ZXh0fVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51SXRlbT5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0QnV0dG9uKFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZCA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRpY29uPXthY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgYW4gYWN0aW9uIGJ1dHRvbi9tZW51IGl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0byBnZXRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRpZiAoXCJub1dyYXBcIiBpbiBhY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIGdldERlZmF1bHRCdXR0b24oYWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTWVudVwiOlxuXHRcdFx0cmV0dXJuIGdldE1lbnVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRkZWZhdWx0OlxuXHR9XG5cdHJldHVybiBnZXREYXRhRmllbGRCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvcHkgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgY29weSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIGFjdGlvbiBpcyBmb3IgQWN0aW9uIFRvb2xiYXIgb2YgQ29udGV4dCBNZW51XG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSEpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGUgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgcHJlc3MgPSBkYXRhRmllbGRcblx0XHQ/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdD8gVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0dHJ1ZVxuXHRcdCAgKVxuXHRcdDogYHs9ICR7QWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KX19YDtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSkpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgY3JlYXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uc1BsYWNlaG9sZGVyIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgY3JlYXRlT3V0Ym91bmREZXRhaWwgPSAodGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlIGFzIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwpLm91dGJvdW5kRGV0YWlsO1xuXHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlT3V0Ym91bmREZXRhaWxcblx0XHQ/IGNyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIHsgc2VtYW50aWNPYmplY3Q6IGNyZWF0ZU91dGJvdW5kRGV0YWlsLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IGNyZWF0ZU91dGJvdW5kRGV0YWlsLmFjdGlvbiB9KVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRyZXR1cm4gPEFjdGlvbnNQbGFjZWhvbGRlciBpZD17YCR7dGFibGUuY29udGVudElkfS11cGxvYWRCdXR0b25gfSBwbGFjZWhvbGRlckZvcj1cIlVwbG9hZEJ1dHRvblBsYWNlaG9sZGVyXCIgLz47XG5cdH0gZWxzZSBpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3JlYXRlfHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDcmVhdGVNZW51KFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfQ1JFQVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRjb25zdCB2YWx1ZXMgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSEudmFsdWVzO1xuXHRjb25zdCBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50ID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAhPT0gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IG1lbnVJdGVtcyA9IHZhbHVlcy5tYXAoKGFsbG93ZWRWYWx1ZSwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBtb2RlbE5hbWUgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRcdGNvbnN0IGlzRW5hYmxlZCA9IGhhc0N1c3RvbUNyZWF0ZUVuYWJsZW1lbnRcblx0XHRcdD8gbm90RXF1YWwocGF0aEluTW9kZWwoYCR7bW9kZWxOYW1lfWNyZWF0ZUVuYWJsZW1lbnQvQ3JlYXRlXyR7aW5kZXh9YCwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZSwgXCJDb250ZXh0TWVudVwiXSlcblx0XHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWxsb3dlZFZhbHVlLnZhbHVlXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdHRleHQ9e2FsbG93ZWRWYWx1ZS50ZXh0fVxuXHRcdFx0XHRlbmFibGVkPXtpc0VuYWJsZWQgPyBjb21waWxlRXhwcmVzc2lvbihpc0VuYWJsZWQpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZU1lbnVJdGVtUHJlc3NIYW5kbGVyKGluZGV4LCBmb3JDb250ZXh0TWVudSl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBtZW51SXRlbXMgIT09IHVuZGVmaW5lZCAmJiBtZW51SXRlbXMubGVuZ3RoID4gMCA/IG1lbnVJdGVtcyA6IHVuZGVmaW5lZFxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRtZW51UG9zaXRpb249XCJCZWdpbkJvdHRvbVwiXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSkpXSxcblx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0RFTEVURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnl8cHJlc3NcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXJpYUhhc1BvcHVwPVwiRGlhbG9nXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpEZWxldGVFbnRyeTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQgYWN0aW9ucyBiYXNlZCBvbiB0aGUga2V5IG9mIHRoZSBzdGFuZGFyZCBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gdGVtcGxhdGVcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChhY3Rpb24uaXNUZW1wbGF0ZWQgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmIGFjdGlvbi5rZXkgIT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXG5cdHN3aXRjaCAoYWN0aW9uLmtleSkge1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZTpcblx0XHRcdGlmIChcblx0XHRcdFx0IXRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCB8fFxuXHRcdFx0XHQvLyBXZSBvbmx5IGhhdmUgQ3JlYXRlIG9uIHRoZSBDb250ZXh0TWVudSBvbiB0aGUgVHJlZVRhYmxlXG5cdFx0XHRcdCh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlICE9PSBcIlRyZWVUYWJsZVwiICYmIGZvckNvbnRleHRNZW51KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVNZW51KGFjdGlvbiwgdGFibGUsIGNvbGxlY3Rpb25FbnRpdHksIGZvckNvbnRleHRNZW51LCBoYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldENyZWF0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGU6XG5cdFx0XHRyZXR1cm4gZ2V0RGVsZXRlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQ6XG5cdFx0XHRyZXR1cm4gZ2V0Q3V0QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5OlxuXHRcdFx0cmV0dXJuIGdldENvcHlCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlOlxuXHRcdFx0cmV0dXJuIGdldFBhc3RlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1hc3NFZGl0OlxuXHRcdFx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCkge1xuXHRcdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncm91cD17YWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuSW5zaWdodHM6XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5ID8/IFwiQWx3YXlzT3ZlcmZsb3dcIn0gZ3JvdXA9e2FjdGlvbi5ncm91cH0gLz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwOlxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duOlxuXHRcdFx0cmV0dXJuIGdldE1vdmVVcERvd25CdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkLCBhbm5vdGF0aW9uLCBhbmQgY3VzdG9tIGFjdGlvbnMgb2YgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9ucyhcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogKEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlcilbXSB7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb24gYmVmb3JlIHByb2Nlc3Npbmdcblx0Y29uc3QgYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb24gPSBBY3Rpb25IZWxwZXIuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zKTtcblxuXHRyZXR1cm4gYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb25cblx0XHQubWFwKChhY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlN0YW5kYXJkOlxuXHRcdFx0XHRcdHJldHVybiBnZXRTdGFuZGFyZEFjdGlvbihhY3Rpb24gYXMgU3RhbmRhcmRBY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuQ29weTpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0Q29weUFjdGlvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuU2VwYXJhdG9yOlxuXHRcdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU2VwYXJhdG9yPlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9Ub29sYmFyU2VwYXJhdG9yPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKSBhcyAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgQmFzaWNTZWFyY2guXG4gKiBAcGFyYW0gdXNlQmFzaWNTZWFyY2hcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICogQHBhcmFtIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWRcbiAqIEBwYXJhbSBpc1NlYXJjaGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBCYXNpY1NlYXJjaFxuICovXG5mdW5jdGlvbiBnZXRCYXNpY1NlYXJjaChcblx0dXNlQmFzaWNTZWFyY2g6IGJvb2xlYW4sXG5cdGZpbHRlckJhcklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGlzU2VhcmNoYWJsZTogYm9vbGVhblxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh1c2VCYXNpY1NlYXJjaCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2ZpbHRlckJhcklkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0JBU0lDX1NFQVJDSH1cIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IDxCYXNpY1NlYXJjaE1hY3JvIGlkPXtmaWx0ZXJCYXJJZH0gdXNlRHJhZnRFZGl0U3RhdGU9e19jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWR9IHZpc2libGU9e2lzU2VhcmNoYWJsZX0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0YWJsZSBmdWxsc2NyZWVuIGJ1dHRvbi5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bGxTY3JlZW4odGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVGdWxsU2NyZWVuKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0ZVTExfU0NSRUVOfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTdGFuZGFyZEFjdGlvblwiLCBcIkZ1bGxTY3JlZW5cIl0pfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBDdXQgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBCdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3V0QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3V0fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NVVH1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXQ6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIENvcHkgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkQWN0aW9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdXQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXRDb3B5QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q29weXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09QWX1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5OjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb246IFN0YW5kYXJkQWN0aW9uLCB0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZm9yTW92ZVVwID0gYWN0aW9uLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXB8cHJlc3NcIiA6IFwiY21kOlRhYmxlTW92ZUVsZW1lbnREb3dufHByZXNzXCJ9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17Zm9yTW92ZVVwID8gXCJjbWQ6VGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudXxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51fHByZXNzXCJ9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgUGFzdGUgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgUGFzdGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFBhc3RlIEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRQYXN0ZUJ1dHRvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiXSl9XG5cdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlfHByZXNzXCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmb3IgQ29udGV4dCBNZW51XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpQYXN0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHtcblx0Y29uc3QgX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnROb2RlKGNvbGxlY3Rpb25FbnRpdHkpIHx8IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRsZXQgc2VhcmNoYWJsZTogYm9vbGVhbjtcblx0aWYgKHRhYmxlLmlzU2VhcmNoYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRzZWFyY2hhYmxlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0c2VhcmNoYWJsZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlYXJjaGFibGU7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25zOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdID0gW107XG5cdGNvbnN0IGJhc2ljU2VhcmNoID0gZ2V0QmFzaWNTZWFyY2goISF0YWJsZS51c2VCYXNpY1NlYXJjaCwgdGFibGUuZmlsdGVyQmFyLCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkLCBzZWFyY2hhYmxlKTtcblx0aWYgKGJhc2ljU2VhcmNoKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGJhc2ljU2VhcmNoKTtcblx0fVxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0QWN0aW9ucyh0YWJsZSwgZmFsc2UsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cdGNvbnN0IGZ1bGxTY3JlZW4gPSBnZXRGdWxsU2NyZWVuKHRhYmxlKTtcblx0aWYgKGZ1bGxTY3JlZW4pIHtcblx0XHRhY3Rpb25zLnB1c2goZnVsbFNjcmVlbik7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9ucyBhcyBDb250cm9sW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBjb250ZXh0IG1lbnUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBNZW51SXRlbVtdIHtcblx0Y29uc3QgdGVtcGxhdGU6IE1lbnVJdGVtW10gPSBnZXRBY3Rpb25zKHRhYmxlLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkgYXMgdW5rbm93biBhcyBNZW51SXRlbVtdO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmV4cGFuZE5vZGUpKTtcblx0XHR0ZW1wbGF0ZS5wdXNoKGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuY29sbGFwc2VOb2RlKSk7XG5cdH1cblx0cmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGV4cGFuZDogYm9vbGVhbiwgcHJlc3NIYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkKTogTWVudUl0ZW0ge1xuXHRjb25zdCBlbmFibGVFeHByZXNzaW9uID0gZXhwYW5kXG5cdFx0PyBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKVxuXHRcdCAgKVxuXHRcdDogYW5kKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGV4cGFuZCA/IFwiRXhwYW5kXCIgOiBcIkNvbGxhcHNlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0dGV4dD17ZXhwYW5kID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT05URVhUTUVOVV9FWFBBTkR9XCIgOiBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0NPTExBUFNFfVwifVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZUV4cHJlc3Npb259XG5cdFx0Lz5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Esb0JBQW9CQSxDQUM1QkMsU0FBNkIsRUFDN0JDLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFD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