@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
@@ -2,9 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/controls/CollaborationHBox", "sap/fe/macros/controls/RadioButtons", "sap/fe/macros/field/FieldTemplating", "sap/m/CheckBox", "sap/m/DatePicker", "sap/m/DateTimePicker", "sap/m/FlexItemData", "sap/m/Input", "sap/m/MaskInput", "sap/m/MaskInputRule", "sap/m/RatingIndicator", "sap/m/TextArea", "sap/m/TimePicker", "sap/ui/core/CustomData", "sap/ui/mdc/Field", "sap/ui/mdc/enums/FieldEditMode", "../../CollaborativeDraftHandler", "../../field/FieldHelper", "../../field/TextAreaEx", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (BindingToolkit, MetaModelConverter, DataModelPathHelper, PropertyHelper, UIFormatter, CollaborationHBox, RadioButtons, FieldTemplating, CheckBox, DatePicker, DateTimePicker, FlexItemData, Input, MaskInput, MaskInputRule, RatingIndicator, TextArea, TimePicker, CustomData, Field, FieldEditMode, CollaborativeDraftHandler, FieldHelper, TextAreaEx, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/controls/CollaborationHBox", "sap/fe/macros/controls/RadioButtons", "sap/fe/macros/field/FieldTemplating", "sap/m/CheckBox", "sap/m/DatePicker", "sap/m/DateTimePicker", "sap/m/FlexItemData", "sap/m/Input", "sap/m/MaskInput", "sap/m/MaskInputRule", "sap/m/RatingIndicator", "sap/m/TextArea", "sap/m/TimePicker", "sap/ui/core/CustomData", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/Field", "../../CollaborativeDraftHandler", "../../field/FieldHelper", "../../field/TextAreaEx", "../../TSXUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (BindingToolkit, MetaModelConverter, DataModelPathHelper, PropertyHelper, UIFormatter, CollaborationHBox, RadioButtons, FieldTemplating, CheckBox, DatePicker, DateTimePicker, FlexItemData, Input, MaskInput, MaskInputRule, RatingIndicator, TextArea, TimePicker, CustomData, FieldEditMode, Field, CollaborativeDraftHandler, FieldHelper, TextAreaEx, TSXUtils, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
+ var createCustomDatas = TSXUtils.createCustomDatas;
8
9
  var getTextAlignment = FieldTemplating.getTextAlignment;
9
10
  var getMultipleLinesForDataField = FieldTemplating.getMultipleLinesForDataField;
10
11
  var hasValueHelpWithFixedValues = PropertyHelper.hasValueHelpWithFixedValues;
@@ -238,13 +239,19 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
238
239
  });
239
240
  }
240
241
  if (this.showAsRadioButton(field) !== true) {
242
+ const customData = createCustomDatas([{
243
+ key: "sourcePath",
244
+ value: field.dataSourcePath
245
+ }, {
246
+ key: "valueState",
247
+ value: field.valueState
248
+ }]);
241
249
  return _jsx(Field, {
242
250
  "core:require": "{Field: 'sap/fe/macros/Field'}",
243
251
  delegate: delegate,
244
252
  id: field.editStyleId,
245
253
  value: field.valueBindingExpression,
246
254
  placeholder: field.editStylePlaceholder,
247
- valueState: field.valueState,
248
255
  editMode: field.editMode ?? field.computedEditMode,
249
256
  width: "100%",
250
257
  required: field.requiredExpression,
@@ -262,9 +269,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
262
269
  children: {
263
270
  contentEdit: optionalContentEdit,
264
271
  layoutData: optionalLayoutData,
265
- customData: _jsx(CustomData, {
266
- value: field.dataSourcePath
267
- }, "sourcePath")
272
+ customData: customData
268
273
  }
269
274
  });
270
275
  } else {
@@ -482,4 +487,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
482
487
  };
483
488
  return EditStyle;
484
489
  }, false);
485
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwibWV0YVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNob3dBdmF0YXIiLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRleHRBbGlnbiIsImdldFRleHRBbGlnbm1lbnQiLCJmb3JtYXRPcHRpb25zIiwiZWRpdE1vZGVBc09iamVjdCIsImRhdGVUaW1lUGlja2VyUHJvcGVydGllcyIsImlkIiwiZWRpdFN0eWxlSWQiLCJ3aWR0aCIsImVkaXRhYmxlIiwiZWRpdGFibGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImVuYWJsZWRFeHByZXNzaW9uIiwicmVxdWlyZWQiLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJhcmlhTGFiZWxsZWRCeSIsInZhbHVlIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkR3JvdXBJZHMiLCJzaG93VGltZXpvbmUiLCJtaW5EYXRlIiwibWluRGF0ZUV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJtYXhEYXRlIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJjaGFuZ2UiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjaGlsZHJlbiIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZGF0YVNvdXJjZVBhdGgiLCJEYXRlVGltZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJnZXRJbnB1dFRlbXBsYXRlIiwiSW5wdXQiLCJwbGFjZWhvbGRlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiZmllbGRXaWR0aCIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJVSUZvcm1hdHRlciIsImdldEZpZWxkRGlzcGxheSIsImRpc3BsYXlNb2RlIiwiaGFzTXVsdGlsaW5lQW5ub3RhdGlvbiIsIlVJIiwiTXVsdGlMaW5lVGV4dCIsIm11bHRpcGxlTGluZXMiLCJnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkIiwibGFiZWwiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsIm9wdGlvbmFsQ29udGVudEVkaXQiLCJUZXh0QXJlYSIsInJvd3MiLCJ0ZXh0TGluZXNFZGl0IiwiZ3Jvd2luZyIsInRleHRNYXhMaW5lcyIsImdyb3dpbmdNYXhMaW5lcyIsIm9wdGlvbmFsTGF5b3V0RGF0YSIsIkZpZWxkIiwidmFsdWVTdGF0ZSIsImVkaXRNb2RlIiwiY29tcHV0ZWRFZGl0TW9kZSIsImFkZGl0aW9uYWxWYWx1ZSIsInRleHRCaW5kaW5nRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsInZhbHVlSGVscElkIiwiY29udGVudEVkaXQiLCJnZXRDaGVja0JveFRlbXBsYXRlIiwiaXNDaGVja0JveEdyb3VwSXRlbSIsImlzRmllbGRHcm91cEl0ZW0iLCJDaGVja0JveCIsInNlbGVjdGVkIiwid3JhcHBpbmciLCJzZWxlY3QiLCJnZXRUZXh0QXJlYVRlbXBsYXRlIiwic2hvd0V4Y2VlZGVkVGV4dCIsIlRleHRBcmVhRXgiLCJjb2xzIiwiZ2V0UmF0aW5nSW5kaWNhdG9yVGVtcGxhdGUiLCJ0b29sdGlwIiwicmF0aW5nSW5kaWNhdG9yVG9vbHRpcCIsIlJhdGluZ0luZGljYXRvciIsIm1heFZhbHVlIiwicmF0aW5nSW5kaWNhdG9yVGFyZ2V0VmFsdWUiLCJpY29uU2l6ZSIsImNsYXNzIiwiZ2V0VGVtcGxhdGVXaXRoV3JhcHBlciIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiX2pzeHMiLCJDb2xsYWJvcmF0aW9uSEJveCIsImFsaWduSXRlbXMiLCJnZXRUZW1wbGF0ZSIsImdldElucHV0TWFza1RlbXBsYXRlIiwib3B0aW9uYWxNYXNrSW5wdXRSdWxlcyIsIm1hc2siLCJtYXNrUnVsZSIsInJ1bGUiLCJwdXNoIiwiTWFza0lucHV0UnVsZSIsIm1hc2tGb3JtYXRTeW1ib2wiLCJzeW1ib2wiLCJyZWdleCIsIk1hc2tJbnB1dCIsInBsYWNlaG9sZGVyU3ltYm9sIiwicnVsZXMiLCJpbm5lckZpZWxkQ29udGVudCIsInVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVkaXRTdHlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBVSUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uSEJveCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9Db2xsYWJvcmF0aW9uSEJveFwiO1xuaW1wb3J0IFJhZGlvQnV0dG9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9SYWRpb0J1dHRvbnNcIjtcbmltcG9ydCB7IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQsIGdldFRleHRBbGlnbm1lbnQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSBcInNhcC9tL0RhdGVQaWNrZXJcIjtcbmltcG9ydCBEYXRlVGltZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVRpbWVQaWNrZXJcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNrSW5wdXQkTGl2ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL01hc2tJbnB1dFwiO1xuaW1wb3J0IE1hc2tJbnB1dCBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0UnVsZSBmcm9tIFwic2FwL20vTWFza0lucHV0UnVsZVwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgVGV4dEFyZWEgZnJvbSBcInNhcC9tL1RleHRBcmVhXCI7XG5pbXBvcnQgVGltZVBpY2tlciBmcm9tIFwic2FwL20vVGltZVBpY2tlclwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRyb2wsIENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQsIGRlZmF1bHQgYXMgQ29udHJvbDEgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXIgZnJvbSBcIi4uLy4uL0NvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXJcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCBUZXh0QXJlYUV4IGZyb20gXCIuLi8uLi9maWVsZC9UZXh0QXJlYUV4XCI7XG5cbmNvbnN0IEVkaXRTdHlsZSA9IHtcblx0LyoqXG5cdCAqIEFuIGludGVybmFsIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgcmV1c2VkIGxheW91dCBkYXRhLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGF5b3V0RGF0YShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXHRcdHJldHVybiBsYXlvdXREYXRhO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGF2YXRhciBjb250cm9sIG5leHQgYSBmaWVsZCBsb2NrZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdmF0YXJcblx0ICovXG5cdGdldENvbGxhYm9yYXRpb25BdmF0YXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXJcblx0XHRcdFx0bWV0YVBhdGg9e2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dBdmF0YXI9e3RydWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHRlbXBsYXRlIGZvciBvbmUgb2YgdGhlIHBpY2tlcnMgcmVmZXJlbmNlIGluIHRoZSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFJlZmVyZW5jZSB0byBvbmUgb2YgdGhlIGVkaXQgc3R5bGUgcGlja2VyIHR5cGVzXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0ZVRpbWVQaWNrZXJHZW5lcmljKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdHlwZTogXCJEYXRlUGlja2VyXCIgfCBcIkRhdGVUaW1lUGlja2VyXCIgfCBcIlRpbWVQaWNrZXJcIik6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkVHlwZXM+KGZpZWxkLm1ldGFQYXRoLCBmaWVsZC5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRjb25zdCBkYXRlVGltZVBpY2tlclByb3BlcnRpZXMgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiLFxuXHRcdFx0aWQ6IGZpZWxkLmVkaXRTdHlsZUlkLFxuXHRcdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdFx0ZWRpdGFibGU6IGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdGVuYWJsZWQ6IGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbixcblx0XHRcdHRleHRBbGlnbjogdGV4dEFsaWduLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz4sXG5cdFx0XHR2YWx1ZTogZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkR3JvdXBJZHM6IGZpZWxkLmZpZWxkR3JvdXBJZHMsXG5cdFx0XHRzaG93VGltZXpvbmU6IGZpZWxkLnNob3dUaW1lem9uZSxcblx0XHRcdG1pbkRhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1pbkRhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4RGF0ZTogdHlwZSA9PT0gXCJEYXRlVGltZVBpY2tlclwiIHx8IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gZmllbGQubWF4RGF0ZUV4cHJlc3Npb24gOiB1bmRlZmluZWQsXG5cdFx0XHRjaGFuZ2U6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiA/IGZpZWxkLmNoYW5nZSB8fCBmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSA6IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlLFxuXHRcdFx0bGl2ZUNoYW5nZTogZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlLFxuXHRcdFx0dmFsdWVGb3JtYXQ6IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gXCJtZWRpdW1cIiA6IHVuZGVmaW5lZCxcblx0XHRcdHZhbGlkYXRlRmllbGRHcm91cDogZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZFxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXREYXRlVGltZVBpY2tlcihkYXRlVGltZVBpY2tlclR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRsZXQgZGF0ZVRpbWVQaWNrZXI7XG5cdFx0XHRzd2l0Y2ggKGRhdGVUaW1lUGlja2VyVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyID0gKFxuXHRcdFx0XHRcdFx0PERhdGVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVRpbWVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVUaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8VGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvVGltZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGVUaW1lUGlja2VyO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXREYXRlVGltZVBpY2tlcih0eXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldElucHV0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGZpZWxkV2lkdGg9e1wiNzAlXCJ9XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtmaWVsZC5zdGF0aWNEZXNjcmlwdGlvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0XHR0eXBlPXtmaWVsZC5lZGl0U3R5bGUgPT09IFwiTWFza2VkXCIgPyBcIlBhc3N3b3JkXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXhMZW5ndGg9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aH1cblx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb249e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZEV4cHJlc3Npb249e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyYWRpb0J1dHRvblRleHRQcm9wZXJ0eT17dmFsdWVMaXN0RGVzY3JpcHRpb25QYXRofVxuXHRcdFx0XHRyYWRpb0J1dHRvbktleVByb3BlcnR5PXt2YWx1ZUxpc3RLZXlQYXRofVxuXHRcdFx0XHRob3Jpem9udGFsTGF5b3V0PXtmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgSW5wdXRXaXRoVmFsdWVIZWxwIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRXaXRoVmFsdWVIZWxwVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRmaWVsZC5tZXRhUGF0aCxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gRmllbGRIZWxwZXIuY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlKFxuXHRcdFx0XCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgYXMgYm9vbGVhblxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheSA9IFVJRm9ybWF0dGVyLmdldEZpZWxkRGlzcGxheShcblx0XHRcdGZpZWxkLnByb3BlcnR5LFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBzdHJpbmcsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRjb25zdCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uID0gISFmaWVsZC5wcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0O1xuXHRcdGNvbnN0IG11bHRpcGxlTGluZXMgPSBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkKGZpZWxkLCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRjb25zdCBsYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdFx0Y29udGV4dDogZmllbGQubWV0YVBhdGhcblx0XHR9KTtcblxuXHRcdGxldCBvcHRpb25hbENvbnRlbnRFZGl0ID0gXCJcIjtcblx0XHRpZiAoZmllbGQucHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiYgaGFzTXVsdGlsaW5lQW5ub3RhdGlvbikge1xuXHRcdFx0b3B0aW9uYWxDb250ZW50RWRpdCA9IChcblx0XHRcdFx0PFRleHRBcmVhXG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdFx0Z3Jvd2luZz17KGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzIGFzIHVua25vd24gYXMgbnVtYmVyKSA+IDAgPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGxldCBvcHRpb25hbExheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0b3B0aW9uYWxMYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNob3dBc1JhZGlvQnV0dG9uKGZpZWxkKSAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEZpZWxkXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0XHRkZWxlZ2F0ZT17ZGVsZWdhdGV9XG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0XHR2YWx1ZVN0YXRlPXtmaWVsZC52YWx1ZVN0YXRlfVxuXHRcdFx0XHRcdGVkaXRNb2RlPXtmaWVsZC5lZGl0TW9kZSA/PyBmaWVsZC5jb21wdXRlZEVkaXRNb2RlfVxuXHRcdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRhZGRpdGlvbmFsVmFsdWU9e2ZpZWxkLnRleHRCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRcdG11bHRpcGxlTGluZXM9e211bHRpcGxlTGluZXMgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogbXVsdGlwbGVMaW5lc31cblx0XHRcdFx0XHR2YWx1ZUhlbHA9e2ZpZWxkLnZhbHVlSGVscElkfVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbDEgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdGxhYmVsPXtsYWJlbH1cblx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHRcdGxpdmVDaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZX1cblx0XHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudEVkaXQ6IG9wdGlvbmFsQ29udGVudEVkaXQsXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiBvcHRpb25hbExheW91dERhdGEsXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvRmllbGQ+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSYWRpb0J1dHRvblRlbXBsYXRlKGZpZWxkKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgQ2hlY2tCb3ggdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDaGVja0JveFRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXNDaGVja0JveEdyb3VwSXRlbSA9IGZpZWxkLmZvcm1hdE9wdGlvbnMuaXNGaWVsZEdyb3VwSXRlbSA9PT0gdHJ1ZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENoZWNrQm94XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cmVxdWlyZWQ9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyBmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdHNlbGVjdGVkPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlZGl0YWJsZT17ZmllbGQuZWRpdGFibGVFeHByZXNzaW9ufVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dD17aXNDaGVja0JveEdyb3VwSXRlbSA/IGZpZWxkLmxhYmVsIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR3cmFwcGluZz17aXNDaGVja0JveEdyb3VwSXRlbSA/IHRydWUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRzZWxlY3Q9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHQ8L0NoZWNrQm94PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgVGV4dEFyZWEgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRUZXh0QXJlYVRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZ3Jvd2luZyA9IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0Y29uc3Qgc2hvd0V4Y2VlZGVkVGV4dCA9ICEhZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RoO1xuXG5cdFx0Ly91bmZvcnR1bmF0ZWx5IHRoaXMgb25lIGlzIGEgXCJkaWZmZXJlbnRcIiBsYXlvdXREYXRhIHRoYW4gdGhlIG90aGVycywgdGhlcmVmb3JlIHRoZSByZXVzZSBmdW5jdGlvbiBmcm9tIGFib3ZlIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgdGV4dEFyZWEgdGVtcGxhdGVcblx0XHRsZXQgbGF5b3V0RGF0YSA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0XHRsYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGV4dEFyZWFFeFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHJlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJvd3M9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdH1cblx0XHRcdFx0Z3Jvd2luZz17Z3Jvd2luZ31cblx0XHRcdFx0Z3Jvd2luZ01heExpbmVzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lc31cblx0XHRcdFx0Y29scz17MzAwfSAvL0FzIHRoZSBkZWZhdWx0IGlzIDIwLCB0aGUgXCJjb2xzXCIgcHJvcGVydHkgaXMgY29uZmlndXJlZCB3aXRoIGEgdmFsdWUgb2YgMzAwIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB0ZXh0YXJlYSB3aWxsIG9jY3VweSBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZS5cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXhMZW5ndGg9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aH1cblx0XHRcdFx0c2hvd0V4Y2VlZGVkVGV4dD17c2hvd0V4Y2VlZGVkVGV4dH1cblx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogbGF5b3V0RGF0YSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9UZXh0QXJlYUV4PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgUmF0aW5nSW5kaWNhdG9yIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0UmF0aW5nSW5kaWNhdG9yVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBmaWVsZC5yYXRpbmdJbmRpY2F0b3JUb29sdGlwIHx8IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX1JBVElOR19JTkRJQ0FUT1JfVElUTEVfTEFCRUx9XCI7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdG1heFZhbHVlPXtmaWVsZC5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3Rvb2x0aXB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGljb25TaXplPVwiMS4zNzVyZW1cIlxuXHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiXG5cdFx0XHRcdGVkaXRhYmxlPVwidHJ1ZVwiXG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1JhdGluZ0luZGljYXRvcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwcyB0byBjYWxjdWxhdGUgdGhlIGNvbnRlbnQgZWRpdCBmdW5jdGlvbmFsaXR5IC8gdGVtcGxhdGluZy5cblx0ICogSW5jbHVkaW5nIGEgd3JhcHBlciBhbiBoYm94IGluIGNhc2Ugb2YgY29sbGFib3JhdGlvbiBtb2RlIGZpbmFsbHlcblx0ICogaXQgY2FsbHMgaW50ZXJuYWxseSBFZGl0U3R5bGUuZ2V0VGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVdpdGhXcmFwcGVyKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGNvbnRlbnRFZGl0O1xuXG5cdFx0aWYgKChmaWVsZC5lZGl0TW9kZSA/PyBmaWVsZC5jb21wdXRlZEVkaXRNb2RlKSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5ICYmICEhZmllbGQuZWRpdFN0eWxlKSB7XG5cdFx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgPz8gZmFsc2UpIHtcblx0XHRcdFx0Y29udGVudEVkaXQgPSAoXG5cdFx0XHRcdFx0PENvbGxhYm9yYXRpb25IQm94IHdpZHRoPVwiMTAwJVwiIGFsaWduSXRlbXM9XCJFbmRcIj5cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0VGVtcGxhdGUoZmllbGQpfVxuXHRcdFx0XHRcdFx0e0VkaXRTdHlsZS5nZXRDb2xsYWJvcmF0aW9uQXZhdGFyKGZpZWxkKX1cblx0XHRcdFx0XHQ8L0NvbGxhYm9yYXRpb25IQm94PlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGVudEVkaXQgPSBFZGl0U3R5bGUuZ2V0VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250ZW50RWRpdCB8fCBcIlwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIElucHV0TWFzayB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldElucHV0TWFza1RlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyA9IFtdO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXHRcdGlmIChmaWVsZC5tYXNrPy5tYXNrUnVsZSkge1xuXHRcdFx0Zm9yIChjb25zdCBydWxlIG9mIGZpZWxkLm1hc2subWFza1J1bGUpIHtcblx0XHRcdFx0b3B0aW9uYWxNYXNrSW5wdXRSdWxlcy5wdXNoKDxNYXNrSW5wdXRSdWxlIG1hc2tGb3JtYXRTeW1ib2w9e3J1bGUuc3ltYm9sfSByZWdleD17cnVsZS5yZWdleH0gLz4pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWFza0lucHV0XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdG1hc2s9e2ZpZWxkLm1hc2s/Lm1hc2t9XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w9e2ZpZWxkLm1hc2s/LnBsYWNlaG9sZGVyU3ltYm9sfVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpdmVDaGFuZ2UgYXMgKG9FdmVudDogTWFza0lucHV0JExpdmVDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdHJ1bGVzOiBvcHRpb25hbE1hc2tJbnB1dFJ1bGVzLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L01hc2tJbnB1dD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnRyeSBwb2ludCBmb3IgZnVydGhlciB0ZW1wbGF0aW5nIHByb2Nlc3NpbmdzLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRcdGxldCBpbm5lckZpZWxkQ29udGVudDtcblx0XHRzd2l0Y2ggKGZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0Y2FzZSBcIkNoZWNrQm94XCI6XG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLnVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW4pIHtcblx0XHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRSYWRpb0J1dHRvblRlbXBsYXRlKGZpZWxkLCB0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRDaGVja0JveFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEYXRlUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiRGF0ZVRpbWVQaWNrZXJcIjpcblx0XHRcdGNhc2UgXCJUaW1lUGlja2VyXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0RGF0ZVRpbWVQaWNrZXJHZW5lcmljKGZpZWxkLCBmaWVsZC5lZGl0U3R5bGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJJbnB1dFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJNYXNrZWRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRXaXRoVmFsdWVIZWxwXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRXaXRoVmFsdWVIZWxwVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJSYXRpbmdJbmRpY2F0b3JcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmF0aW5nSW5kaWNhdG9yVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUZXh0QXJlYVwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRUZXh0QXJlYVRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiSW5wdXRNYXNrXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0TWFza1RlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblxuXHRcdHJldHVybiBpbm5lckZpZWxkQ29udGVudDtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdFN0eWxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7RUErQkEsTUFBTUEsU0FBUyxHQUFHO0lBQ2pCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsYUFBYUEsQ0FBQ0MsS0FBMkIsRUFBVTtNQUNsRCxJQUFJQyxVQUFVLEdBQUcsRUFBRTtNQUNuQixJQUFJRCxLQUFLLENBQUNFLG9CQUFvQixFQUFFO1FBQy9CRCxVQUFVLEdBQUdFLElBQUEsQ0FBQ0MsWUFBWTtVQUFDQyxVQUFVLEVBQUM7UUFBRyxDQUFFLENBQUM7TUFDN0M7TUFDQSxPQUFPSixVQUFVO0lBQ2xCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NLLHNCQUFzQkEsQ0FBQ04sS0FBMkIsRUFBVTtNQUMzRCxPQUNDRyxJQUFBLENBQUNJLHlCQUF5QjtRQUN6QkMsUUFBUSxFQUFFQyxrQ0FBa0MsQ0FBQ1QsS0FBSyxDQUFDVSxhQUFhLENBQUU7UUFDbEVDLFdBQVcsRUFBRVgsS0FBSyxDQUFDVyxXQUFXLENBQUNDLE9BQU8sQ0FBQyxDQUFFO1FBQ3pDQyxVQUFVLEVB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
490
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwibWV0YVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNob3dBdmF0YXIiLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRleHRBbGlnbiIsImdldFRleHRBbGlnbm1lbnQiLCJmb3JtYXRPcHRpb25zIiwiZWRpdE1vZGVBc09iamVjdCIsImRhdGVUaW1lUGlja2VyUHJvcGVydGllcyIsImlkIiwiZWRpdFN0eWxlSWQiLCJ3aWR0aCIsImVkaXRhYmxlIiwiZWRpdGFibGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImVuYWJsZWRFeHByZXNzaW9uIiwicmVxdWlyZWQiLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJhcmlhTGFiZWxsZWRCeSIsInZhbHVlIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkR3JvdXBJZHMiLCJzaG93VGltZXpvbmUiLCJtaW5EYXRlIiwibWluRGF0ZUV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJtYXhEYXRlIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJjaGFuZ2UiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjaGlsZHJlbiIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZGF0YVNvdXJjZVBhdGgiLCJEYXRlVGltZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJnZXRJbnB1dFRlbXBsYXRlIiwiSW5wdXQiLCJwbGFjZWhvbGRlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiZmllbGRXaWR0aCIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJVSUZvcm1hdHRlciIsImdldEZpZWxkRGlzcGxheSIsImRpc3BsYXlNb2RlIiwiaGFzTXVsdGlsaW5lQW5ub3RhdGlvbiIsIlVJIiwiTXVsdGlMaW5lVGV4dCIsIm11bHRpcGxlTGluZXMiLCJnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkIiwibGFiZWwiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsIm9wdGlvbmFsQ29udGVudEVkaXQiLCJUZXh0QXJlYSIsInJvd3MiLCJ0ZXh0TGluZXNFZGl0IiwiZ3Jvd2luZyIsInRleHRNYXhMaW5lcyIsImdyb3dpbmdNYXhMaW5lcyIsIm9wdGlvbmFsTGF5b3V0RGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWVTdGF0ZSIsIkZpZWxkIiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiYWRkaXRpb25hbFZhbHVlIiwidGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVIZWxwIiwidmFsdWVIZWxwSWQiLCJjb250ZW50RWRpdCIsImdldENoZWNrQm94VGVtcGxhdGUiLCJpc0NoZWNrQm94R3JvdXBJdGVtIiwiaXNGaWVsZEdyb3VwSXRlbSIsIkNoZWNrQm94Iiwic2VsZWN0ZWQiLCJ3cmFwcGluZyIsInNlbGVjdCIsImdldFRleHRBcmVhVGVtcGxhdGUiLCJzaG93RXhjZWVkZWRUZXh0IiwiVGV4dEFyZWFFeCIsImNvbHMiLCJnZXRSYXRpbmdJbmRpY2F0b3JUZW1wbGF0ZSIsInRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUb29sdGlwIiwiUmF0aW5nSW5kaWNhdG9yIiwibWF4VmFsdWUiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsImljb25TaXplIiwiY2xhc3MiLCJnZXRUZW1wbGF0ZVdpdGhXcmFwcGVyIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJfanN4cyIsIkNvbGxhYm9yYXRpb25IQm94IiwiYWxpZ25JdGVtcyIsImdldFRlbXBsYXRlIiwiZ2V0SW5wdXRNYXNrVGVtcGxhdGUiLCJvcHRpb25hbE1hc2tJbnB1dFJ1bGVzIiwibWFzayIsIm1hc2tSdWxlIiwicnVsZSIsInB1c2giLCJNYXNrSW5wdXRSdWxlIiwibWFza0Zvcm1hdFN5bWJvbCIsInN5bWJvbCIsInJlZ2V4IiwiTWFza0lucHV0IiwicGxhY2Vob2xkZXJTeW1ib2wiLCJydWxlcyIsImlubmVyRmllbGRDb250ZW50IiwidXNlUmFkaW9CdXR0b25zRm9yQm9vbGVhbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWRpdFN0eWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25IQm94IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0NvbGxhYm9yYXRpb25IQm94XCI7XG5pbXBvcnQgUmFkaW9CdXR0b25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1JhZGlvQnV0dG9uc1wiO1xuaW1wb3J0IHsgZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCwgZ2V0VGV4dEFsaWdubWVudCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVBpY2tlclwiO1xuaW1wb3J0IERhdGVUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9EYXRlVGltZVBpY2tlclwiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0IGZyb20gXCJzYXAvbS9NYXNrSW5wdXRcIjtcbmltcG9ydCBNYXNrSW5wdXRSdWxlIGZyb20gXCJzYXAvbS9NYXNrSW5wdXRSdWxlXCI7XG5pbXBvcnQgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCBUZXh0QXJlYSBmcm9tIFwic2FwL20vVGV4dEFyZWFcIjtcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9UaW1lUGlja2VyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udHJvbCwgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCwgZGVmYXVsdCBhcyBDb250cm9sMSB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlciBmcm9tIFwiLi4vLi4vQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IFRleHRBcmVhRXggZnJvbSBcIi4uLy4uL2ZpZWxkL1RleHRBcmVhRXhcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcIi4uLy4uL1RTWFV0aWxzXCI7XG5cbmNvbnN0IEVkaXRTdHlsZSA9IHtcblx0LyoqXG5cdCAqIEFuIGludGVybmFsIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgcmV1c2VkIGxheW91dCBkYXRhLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGF5b3V0RGF0YShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXHRcdHJldHVybiBsYXlvdXREYXRhO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGF2YXRhciBjb250cm9sIG5leHQgYSBmaWVsZCBsb2NrZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdmF0YXJcblx0ICovXG5cdGdldENvbGxhYm9yYXRpb25BdmF0YXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXJcblx0XHRcdFx0bWV0YVBhdGg9e2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dBdmF0YXI9e3RydWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHRlbXBsYXRlIGZvciBvbmUgb2YgdGhlIHBpY2tlcnMgcmVmZXJlbmNlIGluIHRoZSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFJlZmVyZW5jZSB0byBvbmUgb2YgdGhlIGVkaXQgc3R5bGUgcGlja2VyIHR5cGVzXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0ZVRpbWVQaWNrZXJHZW5lcmljKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdHlwZTogXCJEYXRlUGlja2VyXCIgfCBcIkRhdGVUaW1lUGlja2VyXCIgfCBcIlRpbWVQaWNrZXJcIik6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkVHlwZXM+KGZpZWxkLm1ldGFQYXRoLCBmaWVsZC5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRjb25zdCBkYXRlVGltZVBpY2tlclByb3BlcnRpZXMgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiLFxuXHRcdFx0aWQ6IGZpZWxkLmVkaXRTdHlsZUlkLFxuXHRcdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdFx0ZWRpdGFibGU6IGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdGVuYWJsZWQ6IGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbixcblx0XHRcdHRleHRBbGlnbjogdGV4dEFsaWduLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz4sXG5cdFx0XHR2YWx1ZTogZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkR3JvdXBJZHM6IGZpZWxkLmZpZWxkR3JvdXBJZHMsXG5cdFx0XHRzaG93VGltZXpvbmU6IGZpZWxkLnNob3dUaW1lem9uZSxcblx0XHRcdG1pbkRhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1pbkRhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4RGF0ZTogdHlwZSA9PT0gXCJEYXRlVGltZVBpY2tlclwiIHx8IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gZmllbGQubWF4RGF0ZUV4cHJlc3Npb24gOiB1bmRlZmluZWQsXG5cdFx0XHRjaGFuZ2U6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiA/IGZpZWxkLmNoYW5nZSB8fCBmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSA6IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlLFxuXHRcdFx0bGl2ZUNoYW5nZTogZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlLFxuXHRcdFx0dmFsdWVGb3JtYXQ6IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gXCJtZWRpdW1cIiA6IHVuZGVmaW5lZCxcblx0XHRcdHZhbGlkYXRlRmllbGRHcm91cDogZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZFxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXREYXRlVGltZVBpY2tlcihkYXRlVGltZVBpY2tlclR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRsZXQgZGF0ZVRpbWVQaWNrZXI7XG5cdFx0XHRzd2l0Y2ggKGRhdGVUaW1lUGlja2VyVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyID0gKFxuXHRcdFx0XHRcdFx0PERhdGVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVRpbWVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVUaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8VGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvVGltZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGVUaW1lUGlja2VyO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXREYXRlVGltZVBpY2tlcih0eXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldElucHV0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGZpZWxkV2lkdGg9e1wiNzAlXCJ9XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtmaWVsZC5zdGF0aWNEZXNjcmlwdGlvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0XHR0eXBlPXtmaWVsZC5lZGl0U3R5bGUgPT09IFwiTWFza2VkXCIgPyBcIlBhc3N3b3JkXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXhMZW5ndGg9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aH1cblx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb249e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZEV4cHJlc3Npb249e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyYWRpb0J1dHRvblRleHRQcm9wZXJ0eT17dmFsdWVMaXN0RGVzY3JpcHRpb25QYXRofVxuXHRcdFx0XHRyYWRpb0J1dHRvbktleVByb3BlcnR5PXt2YWx1ZUxpc3RLZXlQYXRofVxuXHRcdFx0XHRob3Jpem9udGFsTGF5b3V0PXtmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgSW5wdXRXaXRoVmFsdWVIZWxwIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRXaXRoVmFsdWVIZWxwVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRmaWVsZC5tZXRhUGF0aCxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gRmllbGRIZWxwZXIuY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlKFxuXHRcdFx0XCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgYXMgYm9vbGVhblxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheSA9IFVJRm9ybWF0dGVyLmdldEZpZWxkRGlzcGxheShcblx0XHRcdGZpZWxkLnByb3BlcnR5LFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBzdHJpbmcsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRjb25zdCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uID0gISFmaWVsZC5wcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0O1xuXHRcdGNvbnN0IG11bHRpcGxlTGluZXMgPSBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkKGZpZWxkLCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRjb25zdCBsYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdFx0Y29udGV4dDogZmllbGQubWV0YVBhdGhcblx0XHR9KTtcblxuXHRcdGxldCBvcHRpb25hbENvbnRlbnRFZGl0ID0gXCJcIjtcblx0XHRpZiAoZmllbGQucHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiYgaGFzTXVsdGlsaW5lQW5ub3RhdGlvbikge1xuXHRcdFx0b3B0aW9uYWxDb250ZW50RWRpdCA9IChcblx0XHRcdFx0PFRleHRBcmVhXG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdFx0Z3Jvd2luZz17KGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzIGFzIHVua25vd24gYXMgbnVtYmVyKSA+IDAgPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGxldCBvcHRpb25hbExheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0b3B0aW9uYWxMYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNob3dBc1JhZGlvQnV0dG9uKGZpZWxkKSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZUN1c3RvbURhdGFzKFtcblx0XHRcdFx0eyBrZXk6IFwic291cmNlUGF0aFwiLCB2YWx1ZTogZmllbGQuZGF0YVNvdXJjZVBhdGggfSxcblx0XHRcdFx0eyBrZXk6IFwidmFsdWVTdGF0ZVwiLCB2YWx1ZTogZmllbGQudmFsdWVTdGF0ZSB9XG5cdFx0XHRdKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdFx0ZGVsZWdhdGU9e2RlbGVnYXRlfVxuXHRcdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdFx0ZWRpdE1vZGU9e2ZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT17ZmllbGQudGV4dEJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdFx0bXVsdGlwbGVMaW5lcz17bXVsdGlwbGVMaW5lcyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBtdWx0aXBsZUxpbmVzfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17ZmllbGQudmFsdWVIZWxwSWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sMSB8IHN0cmluZz59XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50RWRpdDogb3B0aW9uYWxDb250ZW50RWRpdCxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IG9wdGlvbmFsTGF5b3V0RGF0YSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IGN1c3RvbURhdGFcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0ZpZWxkPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENoZWNrQm94IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQ2hlY2tCb3hHcm91cEl0ZW0gPSBmaWVsZC5mb3JtYXRPcHRpb25zLmlzRmllbGRHcm91cEl0ZW0gPT09IHRydWU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDaGVja0JveFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHJlcXVpcmVkPXtpc0NoZWNrQm94R3JvdXBJdGVtID8gZmllbGQucmVxdWlyZWRFeHByZXNzaW9uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRzZWxlY3RlZD17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHQ9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyBmaWVsZC5sYWJlbCA6IHVuZGVmaW5lZH1cblx0XHRcdFx0d3JhcHBpbmc9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0c2VsZWN0PXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0PC9DaGVja0JveD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFRleHRBcmVhIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGdyb3dpbmcgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcyA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGNvbnN0IHNob3dFeGNlZWRlZFRleHQgPSAhIWZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aDtcblxuXHRcdC8vdW5mb3J0dW5hdGVseSB0aGlzIG9uZSBpcyBhIFwiZGlmZmVyZW50XCIgbGF5b3V0RGF0YSB0aGFuIHRoZSBvdGhlcnMsIHRoZXJlZm9yZSB0aGUgcmV1c2UgZnVuY3Rpb24gZnJvbSBhYm92ZSBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHRleHRBcmVhIHRlbXBsYXRlXG5cdFx0bGV0IGxheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCkge1xuXHRcdFx0bGF5b3V0RGF0YSA9IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjlcIiAvPjtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRBcmVhRXhcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e2ZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyfVxuXHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdGdyb3dpbmc9e2dyb3dpbmd9XG5cdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdGNvbHM9ezMwMH0gLy9BcyB0aGUgZGVmYXVsdCBpcyAyMCwgdGhlIFwiY29sc1wiIHByb3BlcnR5IGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHZhbHVlIG9mIDMwMCB0byBndWFyYW50ZWUgdGhhdCB0aGUgdGV4dGFyZWEgd2lsbCBvY2N1cHkgYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UuXG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0bWF4TGVuZ3RoPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMZW5ndGh9XG5cdFx0XHRcdHNob3dFeGNlZWRlZFRleHQ9e3Nob3dFeGNlZWRlZFRleHR9XG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdGxpdmVDaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IGxheW91dERhdGEsXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvVGV4dEFyZWFFeD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhdGluZ0luZGljYXRvciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCB8fCBcIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9SQVRJTkdfSU5ESUNBVE9SX1RJVExFX0xBQkVMfVwiO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxSYXRpbmdJbmRpY2F0b3Jcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRtYXhWYWx1ZT17ZmllbGQucmF0aW5nSW5kaWNhdG9yVGFyZ2V0VmFsdWV9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0b29sdGlwfVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRpY29uU2l6ZT1cIjEuMzc1cmVtXCJcblx0XHRcdFx0Y2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIlxuXHRcdFx0XHRlZGl0YWJsZT1cInRydWVcIlxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IEVkaXRTdHlsZS5nZXRMYXlvdXREYXRhKGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9SYXRpbmdJbmRpY2F0b3I+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogSGVscHMgdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IGVkaXQgZnVuY3Rpb25hbGl0eSAvIHRlbXBsYXRpbmcuXG5cdCAqIEluY2x1ZGluZyBhIHdyYXBwZXIgYW4gaGJveCBpbiBjYXNlIG9mIGNvbGxhYm9yYXRpb24gbW9kZSBmaW5hbGx5XG5cdCAqIGl0IGNhbGxzIGludGVybmFsbHkgRWRpdFN0eWxlLmdldFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGVXaXRoV3JhcHBlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBjb250ZW50RWRpdDtcblxuXHRcdGlmICgoZmllbGQuZWRpdE1vZGUgPz8gZmllbGQuY29tcHV0ZWRFZGl0TW9kZSkgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSAmJiAhIWZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8/IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aW9uSEJveCB3aWR0aD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiRW5kXCI+XG5cdFx0XHRcdFx0XHR7RWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0Q29sbGFib3JhdGlvbkF2YXRhcihmaWVsZCl9XG5cdFx0XHRcdFx0PC9Db2xsYWJvcmF0aW9uSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gRWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudEVkaXQgfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dE1hc2sgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbmFsTWFza0lucHV0UnVsZXMgPSBbXTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25tZW50KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQubWFzaz8ubWFza1J1bGUpIHtcblx0XHRcdGZvciAoY29uc3QgcnVsZSBvZiBmaWVsZC5tYXNrLm1hc2tSdWxlKSB7XG5cdFx0XHRcdG9wdGlvbmFsTWFza0lucHV0UnVsZXMucHVzaCg8TWFza0lucHV0UnVsZSBtYXNrRm9ybWF0U3ltYm9sPXtydWxlLnN5bWJvbH0gcmVnZXg9e3J1bGUucmVnZXh9IC8+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1hc2tJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXNrPXtmaWVsZC5tYXNrPy5tYXNrfVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sPXtmaWVsZC5tYXNrPy5wbGFjZWhvbGRlclN5bWJvbH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlIGFzIChvRXZlbnQ6IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRydWxlczogb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NYXNrSW5wdXQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5lZGl0U3R5bGUpIHtcblx0XHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuKSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiVGltZVBpY2tlclwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZCwgZmllbGQuZWRpdFN0eWxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIklucHV0V2l0aFZhbHVlSGVscFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0V2l0aFZhbHVlSGVscFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiUmF0aW5nSW5kaWNhdG9yXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dEFyZWFcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIklucHV0TWFza1wiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWdDQSxNQUFNQSxTQUFTLEdBQUc7SUFDakI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxhQUFhQSxDQUFDQyxLQUEyQixFQUFVO01BQ2xELElBQUlDLFVBQVUsR0FBRyxFQUFFO01BQ25CLElBQUlELEtBQUssQ0FBQ0Usb0JBQW9CLEVBQUU7UUFDL0JELFVBQVUsR0FBR0UsSUFBQSxDQUFDQyxZQUFZO1VBQUNDLFVBQVUsRUFBQztRQUFHLENBQUUsQ0FBQztNQUM3QztNQUNBLE9BQU9KLFVBQVU7SUFDbEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0ssc0JBQXNCQSxDQUFDTixL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
@@ -22,12 +22,13 @@ import TextArea from "sap/m/TextArea";
22
22
  import TimePicker from "sap/m/TimePicker";
23
23
  import type { default as Control, Control$ValidateFieldGroupEvent, default as Control1 } from "sap/ui/core/Control";
24
24
  import CustomData from "sap/ui/core/CustomData";
25
- import Field from "sap/ui/mdc/Field";
26
25
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
26
+ import Field from "sap/ui/mdc/Field";
27
27
  import type { MetaModelType } from "../../../../../../../../types/metamodel_types";
28
28
  import CollaborativeDraftHandler from "../../CollaborativeDraftHandler";
29
29
  import FieldHelper from "../../field/FieldHelper";
30
30
  import TextAreaEx from "../../field/TextAreaEx";
31
+ import { createCustomDatas } from "../../TSXUtils";
31
32
 
32
33
  const EditStyle = {
33
34
  /**
@@ -311,6 +312,10 @@ const EditStyle = {
311
312
  }
312
313
 
313
314
  if (this.showAsRadioButton(field) !== true) {
315
+ const customData = createCustomDatas([
316
+ { key: "sourcePath", value: field.dataSourcePath },
317
+ { key: "valueState", value: field.valueState }
318
+ ]);
314
319
  return (
315
320
  <Field
316
321
  core:require="{Field: 'sap/fe/macros/Field'}"
@@ -318,7 +323,6 @@ const EditStyle = {
318
323
  id={field.editStyleId}
319
324
  value={field.valueBindingExpression}
320
325
  placeholder={field.editStylePlaceholder}
321
- valueState={field.valueState}
322
326
  editMode={field.editMode ?? field.computedEditMode}
323
327
  width="100%"
324
328
  required={field.requiredExpression}
@@ -337,7 +341,7 @@ const EditStyle = {
337
341
  {{
338
342
  contentEdit: optionalContentEdit,
339
343
  layoutData: optionalLayoutData,
340
- customData: <CustomData key="sourcePath" value={field.dataSourcePath} />
344
+ customData: customData
341
345
  }}
342
346
  </Field>
343
347
  );
@@ -65,6 +65,14 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/f
65
65
  } = _getValueStateForRecommendationField(recommendationValue, recommendationDescription, all_recommendations, fieldBindingContext, sourcepath, recommendationsText, this);
66
66
  this.setValueStateText(valueStateText);
67
67
  this.setValueState(valueState);
68
+
69
+ // Track or untrack active recommendations based on the value state
70
+ const relativePropertyPath = _getRelativePropertyPath(fieldBindingContext, sourcepath);
71
+ if (valueState === ValueState.Information) {
72
+ additionalValueHelper.addActiveRecommendation(fieldBindingContext, relativePropertyPath);
73
+ } else {
74
+ additionalValueHelper.removeActiveRecommendation(fieldBindingContext, relativePropertyPath);
75
+ }
68
76
  }
69
77
  listBinding.detachChange(fnSetValueState);
70
78
  }
@@ -128,27 +136,39 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/f
128
136
  // We reset value state when:
129
137
  // 1. No context is bound to the field.
130
138
  // 2. isEditable is false
131
- const fieldBindingContext = this.getBindingContext();
139
+ const associatedControl = this.getParent();
140
+ const fieldBindingContext = associatedControl?.getBindingContext();
132
141
  if (!fieldBindingContext || !isEditable) {
142
+ associatedControl.setValueState(ValueState.None);
143
+ // Remove from active recommendations when resetting value state
144
+ if (fieldBindingContext && sourcepath) {
145
+ const relativePropertyPath = _getRelativePropertyPath(fieldBindingContext, sourcepath);
146
+ additionalValueHelper.removeActiveRecommendation(fieldBindingContext, relativePropertyPath);
147
+ }
133
148
  return ValueState.None;
134
149
  }
135
150
  fieldTextValue = fieldTextValue === "undefined" ? undefined : fieldTextValue;
136
151
  // We don't change the present value state when:
137
152
  // 1. Source path is not available.
138
153
  // 2. Field context is transient.
139
- const presentValueState = this.getValueState();
154
+ const presentValueState = associatedControl?.getValueState();
140
155
  const isTransient = fieldBindingContext.isTransient?.();
141
156
  if (!sourcepath || isTransient) {
157
+ associatedControl.setValueState(presentValueState);
142
158
  return presentValueState;
143
159
  }
144
160
 
145
161
  // We reset value state when recommendations are not available and value state represents recommendations.
146
162
  const recommendationsAvailable = recommendationValue || recommendationDescription || !!all_recommendations && Object.keys(all_recommendations).length > 0;
147
163
  const recommendationsText = Library.getResourceBundleFor("sap.fe.core").getText("RECOMMENDATIONS_DATA_INFO");
148
- const presentValueStateText = this.getValueStateText();
164
+ const presentValueStateText = associatedControl?.getValueStateText();
149
165
  const presentVSIsRecommendations = presentValueState === ValueState.Information && presentValueStateText === recommendationsText;
150
166
  //If field value is present or recommendations are not available but presentState is Info then we change it to None
151
167
  if (presentVSIsRecommendations && (!recommendationsAvailable || fieldValue || fieldTextValue)) {
168
+ associatedControl.setValueState(ValueState.None);
169
+ // Remove from active recommendations when resetting value state
170
+ const relativePropertyPath = _getRelativePropertyPath(fieldBindingContext, sourcepath);
171
+ additionalValueHelper.removeActiveRecommendation(fieldBindingContext, relativePropertyPath);
152
172
  return ValueState.None;
153
173
  }
154
174
 
@@ -159,16 +179,25 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/f
159
179
  if (!fieldValue && !fieldTextValue && recommendationsStateApplicable) {
160
180
  if (!fieldBindingContext.getObject() && fieldBindingContext.getBinding()?.isA?.("sap.ui.model.odata.v4.ODataListBinding")) {
161
181
  // No context data avalilable yet and parent binding is listbinding (Field in Table scenario)
162
- _setValueStateForFieldWithNoDataContext.call(this, recommendationValue, recommendationDescription, fieldBindingContext, all_recommendations, sourcepath, recommendationsText);
182
+ _setValueStateForFieldWithNoDataContext.call(associatedControl, recommendationValue, recommendationDescription, fieldBindingContext, all_recommendations, sourcepath, recommendationsText);
163
183
  } else {
164
184
  const {
165
185
  valueState,
166
186
  valueStateText
167
- } = _getValueStateForRecommendationField(recommendationValue, recommendationDescription, all_recommendations, fieldBindingContext, sourcepath, recommendationsText, this);
168
- this.setValueStateText(valueStateText);
187
+ } = _getValueStateForRecommendationField(recommendationValue, recommendationDescription, all_recommendations, fieldBindingContext, sourcepath, recommendationsText, associatedControl);
188
+ associatedControl.setValueStateText(valueStateText);
189
+ associatedControl.setValueState(valueState);
190
+ // Track or untrack active recommendations based on the value state
191
+ const relativePropertyPath = _getRelativePropertyPath(fieldBindingContext, sourcepath);
192
+ if (valueState === ValueState.Information) {
193
+ additionalValueHelper.addActiveRecommendation(fieldBindingContext, relativePropertyPath);
194
+ } else {
195
+ additionalValueHelper.removeActiveRecommendation(fieldBindingContext, relativePropertyPath);
196
+ }
169
197
  return valueState;
170
198
  }
171
199
  }
200
+ associatedControl.setValueState(presentValueState);
172
201
  return presentValueState;
173
202
  }
174
203
  formatValueState.__functionName = "._formatters.AdditionalValueFormatter.bind($control)#formatValueState";
@@ -252,4 +281,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/formatters/Scope", "sap/f
252
281
  Scope._formatters.AdditionalValueFormatter = additionalValueFormatter;
253
282
  return additionalValueFormatter;
254
283
  }, false);
255
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRHcm93aW5nIiwicmVjb21tZW5kYXRpb25EYXRhIiwicHJvcGVydHlQYXRoIiwidmFsdWVzIiwiYWRkaXRpb25hbFZhbHVlSGVscGVyIiwiZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxlbmd0aCIsIl9fZnVuY3Rpb25OYW1lIiwiX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmllbGRCaW5kaW5nQ29udGV4dCIsInNvdXJjZXBhdGgiLCJtZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsIl9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dCIsInJlY29tbWVuZGF0aW9uVmFsdWUiLCJyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIiwiYWxsX3JlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9uc1RleHQiLCJmblNldFZhbHVlU3RhdGUiLCJldmVudCIsImxpc3RCaW5kaW5nIiwiZ2V0U291cmNlIiwibGlzdENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiaW5jbHVkZXMiLCJnZXRPYmplY3QiLCJ2YWx1ZVN0YXRlIiwidmFsdWVTdGF0ZVRleHQiLCJfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQiLCJzZXRWYWx1ZVN0YXRlVGV4dCIsInNldFZhbHVlU3RhdGUiLCJkZXRhY2hDaGFuZ2UiLCJnZXRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiZmllbGQiLCJWYWx1ZVN0YXRlIiwiTm9uZSIsIkluZm9ybWF0aW9uIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJyZWxldmFudFJlY29tbWVuZGF0aW9ucyIsInZlcnNpb24iLCJnZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoIiwidmFsdWUiLCJ0ZXh0IiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudCIsImZvcm1hdFZhbHVlU3RhdGUiLCJpc0VkaXRhYmxlIiwiZmllbGRWYWx1ZSIsImZpZWxkVGV4dFZhbHVlIiwidW5kZWZpbmVkIiwicHJlc2VudFZhbHVlU3RhdGUiLCJnZXRWYWx1ZVN0YXRlIiwiaXNUcmFuc2llbnQiLCJyZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUiLCJPYmplY3QiLCJrZXlzIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInByZXNlbnRWYWx1ZVN0YXRlVGV4dCIsImdldFZhbHVlU3RhdGVUZXh0IiwicHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUiLCJpc0EiLCJjYWxsIiwiX2dldFBsYWNlaG9sZGVyVGV4dCIsImRpc3BsYXlNb2RlIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRQbGFjZWhvbGRlciIsImN1cnJlbnRQYWdlQ29udGV4dCIsImN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckRhdGEiLCJnZXRQbGFjZWhvbGRlciIsImJpbmRpbmdDb250ZXh0IiwiYmluZGluZ1BhdGgiLCJnZXRQYXRoIiwiYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiU2NvcGUiLCJfZm9ybWF0dGVycyIsIkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgU2NvcGUgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvU2NvcGVcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25JbmZvLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRpdGlvbmFsVmFsdWVIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvQWRkaXRpb25hbFZhbHVlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuLyoqXG4gKiBHcm93aW5nIGZvcm1hdHRlciB1c2VkIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkLlxuICogQHBhcmFtIHRoaXMgVmFsdWVoZWxwIFRhYmxlXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhIERhdGEgZmV0Y2hlZCBmcm9tIHJlY29tbWVuZGF0aW9uIG1vZGVsXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0R3Jvd2luZyh0aGlzOiBNVGFibGUsIHJlY29tbWVuZGF0aW9uRGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IHVuZGVmaW5lZCwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgdmFsdWVzID1cblx0XHRhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMocmVjb21tZW5kYXRpb25EYXRhIHx8IHt9LCB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCwgcHJvcGVydHlQYXRoKSB8fCBbXTtcblx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0Ly9pZiB0aGVyZSBhcmUgcmVsZXZhbnQgcmVjb21tZW5kYXRpb25zIHRoZW4gcmV0dXJuIHRydWVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5nZXRHcm93aW5nLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2dldEdyb3dpbmdcIjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlbGF0aXZlIHByb3BlcnR5IHBhdGggb2YgdGhlIGZpZWxkLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBiaW5kaW5nIGNvbnRleHQgcGF0aCAgOiAnL0VtcGxveWVlKDEpJy5cbiAqIHNvdXJjZSBwYXRoICAgICAgICAgICA6ICcvRW1wbG95ZWUvTmFtZScuXG4gKiByZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoOiAnTmFtZScuXG4gKiBAcGFyYW0gZmllbGRCaW5kaW5nQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBzb3VyY2VwYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBSZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoLlxuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGgoZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCwgc291cmNlcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQoZmllbGRCaW5kaW5nQ29udGV4dCk7XG5cdHJldHVybiBzb3VyY2VwYXRoLnJlcGxhY2UoYCR7bWV0YVBhdGh9L2AsIFwiXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIGZvciB0aGUgZmllbGQgaW4gdGhlIHRhYmxlIGZvciB3aGljaCB0aGUgYmluZGluZyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlIGNvbnRleHQgZGF0YS5cbiAqXG4gKiBJbiBhIGZldyBzY2VuYXJpb3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGluc2lkZSB0aGUgdGFibGUsIHRoZSB2YWx1ZSBzdGF0ZSBmb3JtYXR0ZXIgaXMgY2FsbGVkIGZvciB2YWx1ZSB1cGRhdGUgd2l0aCB0aGUgY29udGV4dCB3aXRob3V0IGNvbnRleHQgZGF0YShjb250ZXh0LmdldE9iamVjdCgpIGlzIHVuZGVmaW5lZCkuXG4gKiBOT1RFOiBUaGlzIHNvbHV0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCB0aGFuIHVzaW5nIHRoZSB0YWJsZSBsaXN0YmluZGluZydzIGNoYW5nZSBldmVudC5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNUZXh0IFZhbHVlIHN0YXRlIHRleHQgd2hlbiB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBzaG93blxuICovXG5mdW5jdGlvbiBfc2V0VmFsdWVTdGF0ZUZvckZpZWxkV2l0aE5vRGF0YUNvbnRleHQoXG5cdHRoaXM6IEZpZWxkLFxuXHRyZWNvbW1lbmRhdGlvblZhbHVlOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb246IHN0cmluZyxcblx0ZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YWxsX3JlY29tbWVuZGF0aW9uczogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IFJlY29tbWVuZGF0aW9uSW5mbyB8IHVuZGVmaW5lZCxcblx0c291cmNlcGF0aDogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbnNUZXh0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBmblNldFZhbHVlU3RhdGUgPSAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBPRGF0YUxpc3RCaW5kaW5nPik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgbGlzdENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGxpc3RDb250ZXh0cy5pbmNsdWRlcyhmaWVsZEJpbmRpbmdDb250ZXh0KSkge1xuXHRcdFx0aWYgKGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkpIHtcblx0XHRcdFx0Y29uc3QgeyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9ID0gX2dldFZhbHVlU3RhdGVGb3JSZWNvbW1lbmRhdGlvbkZpZWxkKFxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0c291cmNlcGF0aCxcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0LFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5zZXRWYWx1ZVN0YXRlVGV4dCh2YWx1ZVN0YXRlVGV4dCk7XG5cdFx0XHRcdHRoaXMuc2V0VmFsdWVTdGF0ZSh2YWx1ZVN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGxpc3RCaW5kaW5nLmRldGFjaENoYW5nZShmblNldFZhbHVlU3RhdGUpO1xuXHRcdH1cblx0fTtcblxuXHRmaWVsZEJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hDaGFuZ2UoZm5TZXRWYWx1ZVN0YXRlKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBhcHBsaWNhYmxlLlxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uVmFsdWVcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSB0aGUgcmVjb21tZW5kYXRpb24gbW9kZWxcbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gc291cmNlcGF0aCBQcm9wZXJ0eSBQYXRoIG9mIHRoZSBGaWVsZFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uc1RleHQgVmFsdWUgc3RhdGUgdGV4dCBpbiBjYXNlIHRoZSByZWNvbW1lbmRhdGlvbnMgYXJlIHNob3duXG4gKiBAcGFyYW0gZmllbGQgRmllbGRcbiAqIEByZXR1cm5zIFZhbHVlIHN0YXRlIGluZm9ybWF0aW9uIGluY2x1ZGluZyB0aGUgdmFsdWUgc3RhdGUgYW5kIHRoZSB2YWx1ZSBzdGF0ZSB0ZXh0LlxuICovXG5mdW5jdGlvbiBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRmaWVsZEJpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRzb3VyY2VwYXRoOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uc1RleHQ6IHN0cmluZyxcblx0ZmllbGQ6IEZpZWxkXG4pOiB7IHZhbHVlU3RhdGU6IFZhbHVlU3RhdGU7IHZhbHVlU3RhdGVUZXh0OiBzdHJpbmcgfSB7XG5cdC8vIElmIG5vIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZmllbGQgd2l0aCBwcmVzZW50IGNvbnRleHQgd2UgcmVzZXQgdmFsdWUgc3RhdGUuXG5cdGxldCB2YWx1ZVN0YXRlID0gVmFsdWVTdGF0ZS5Ob25lLFxuXHRcdHZhbHVlU3RhdGVUZXh0ID0gXCJcIjtcblxuXHRpZiAocmVjb21tZW5kYXRpb25WYWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uKSB7XG5cdFx0dmFsdWVTdGF0ZVRleHQgPSByZWNvbW1lbmRhdGlvbnNUZXh0O1xuXHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHR9IGVsc2UgaWYgKGFsbF9yZWNvbW1lbmRhdGlvbnMpIHtcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IF9nZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChmaWVsZEJpbmRpbmdDb250ZXh0LCBzb3VyY2VwYXRoKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zIGFzIEluQ29tcGxldGVuZXNzSW5mb1R5cGUsXG5cdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0c291cmNlcGF0aCxcblx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoXG5cdFx0KTtcblx0XHRsZXQgcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM7XG5cdFx0aWYgKGFsbF9yZWNvbW1lbmRhdGlvbnM/LnZlcnNpb24gPT09IDIpIHtcblx0XHRcdHJlbGV2YW50UmVjb21tZW5kYXRpb25zID0gYWRkaXRpb25hbFZhbHVlSGVscGVyLmdldEFkZGl0aW9uYWxWYWx1ZUZyb21Qcm9wZXJ0eVBhdGgoXG5cdFx0XHRcdHJlbGF0aXZlUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zXG5cdFx0XHQpIGFzIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQoYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiA9PT0gMiAmJiAocmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnZhbHVlIHx8IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0KSkgfHxcblx0XHRcdCghYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiAmJiB2YWx1ZXM/Lmxlbmd0aClcblx0XHQpIHtcblx0XHRcdHZhbHVlU3RhdGVUZXh0ID0gcmVjb21tZW5kYXRpb25zVGV4dDtcblx0XHRcdHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZVN0YXRlID09PSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uKSB7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZmllbGQpO1xuXHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpLnJlY29tbWVuZGF0aW9ucy5pbmNyZWFzZVRlbGVtZXRyeURhdGFDb3VudChcIm51bWJlcm9mVGltZXNGb3JtYXR0ZXJDYWxsZWRcIik7XG5cdH1cblxuXHRyZXR1cm4geyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgdmFsdWUgc3RhdGUgb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIGFuZCB0aGUgYXZhaWxhYmxlIHJlY29tbWVuZGF0aW9ucy5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZSBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBhbGxfcmVjb21tZW5kYXRpb25zXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBQYWdlIGlzIGluIGVkaXQgbW9kZVxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSBmaWVsZFZhbHVlIFByZXNlbnQgZmllbGQgdmFsdWVcbiAqIEBwYXJhbSBmaWVsZFRleHRWYWx1ZVxuICogQHJldHVybnMgRmllbGQgdmFsdWUgc3RhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VmFsdWVTdGF0ZShcblx0dGhpczogRmllbGQsXG5cdHJlY29tbWVuZGF0aW9uVmFsdWU6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbjogc3RyaW5nLFxuXHRhbGxfcmVjb21tZW5kYXRpb25zOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIHwgUmVjb21tZW5kYXRpb25JbmZvIHwgdW5kZWZpbmVkLFxuXHRpc0VkaXRhYmxlOiBib29sZWFuLFxuXHRzb3VyY2VwYXRoPzogc3RyaW5nLFxuXHRmaWVsZFZhbHVlPzogc3RyaW5nLFxuXHRmaWVsZFRleHRWYWx1ZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nXG4pOiBWYWx1ZVN0YXRlIHtcblx0Ly8gV2UgcmVzZXQgdmFsdWUgc3RhdGUgd2hlbjpcblx0Ly8gMS4gTm8gY29udGV4dCBpcyBib3VuZCB0byB0aGUgZmllbGQuXG5cdC8vIDIuIGlzRWRpdGFibGUgaXMgZmFsc2Vcblx0Y29uc3QgZmllbGRCaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWZpZWxkQmluZGluZ0NvbnRleHQgfHwgIWlzRWRpdGFibGUpIHtcblx0XHRyZXR1cm4gVmFsdWVTdGF0ZS5Ob25lO1xuXHR9XG5cdGZpZWxkVGV4dFZhbHVlID0gZmllbGRUZXh0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBmaWVsZFRleHRWYWx1ZTtcblx0Ly8gV2UgZG9uJ3QgY2hhbmdlIHRoZSBwcmVzZW50IHZhbHVlIHN0YXRlIHdoZW46XG5cdC8vIDEuIFNvdXJjZSBwYXRoIGlzIG5vdCBhdmFpbGFibGUuXG5cdC8vIDIuIEZpZWxkIGNvbnRleHQgaXMgdHJhbnNpZW50LlxuXHRjb25zdCBwcmVzZW50VmFsdWVTdGF0ZSA9IHRoaXMuZ2V0VmFsdWVTdGF0ZSgpIGFzIFZhbHVlU3RhdGU7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gZmllbGRCaW5kaW5nQ29udGV4dC5pc1RyYW5zaWVudD8uKCk7XG5cdGlmICghc291cmNlcGF0aCB8fCBpc1RyYW5zaWVudCkge1xuXHRcdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcblx0fVxuXG5cdC8vIFdlIHJlc2V0IHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB2YWx1ZSBzdGF0ZSByZXByZXNlbnRzIHJlY29tbWVuZGF0aW9ucy5cblx0Y29uc3QgcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlID1cblx0XHRyZWNvbW1lbmRhdGlvblZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gfHwgKCEhYWxsX3JlY29tbWVuZGF0aW9ucyAmJiBPYmplY3Qua2V5cyhhbGxfcmVjb21tZW5kYXRpb25zKS5sZW5ndGggPiAwKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25zVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlJFQ09NTUVOREFUSU9OU19EQVRBX0lORk9cIik7XG5cdGNvbnN0IHByZXNlbnRWYWx1ZVN0YXRlVGV4dCA9IHRoaXMuZ2V0VmFsdWVTdGF0ZVRleHQoKTtcblx0Y29uc3QgcHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMgPSBwcmVzZW50VmFsdWVTdGF0ZSA9PT0gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbiAmJiBwcmVzZW50VmFsdWVTdGF0ZVRleHQgPT09IHJlY29tbWVuZGF0aW9uc1RleHQ7XG5cdC8vSWYgZmllbGQgdmFsdWUgaXMgcHJlc2VudCBvciByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgYnV0IHByZXNlbnRTdGF0ZSBpcyBJbmZvIHRoZW4gd2UgY2hhbmdlIGl0IHRvIE5vbmVcblx0aWYgKHByZXNlbnRWU0lzUmVjb21tZW5kYXRpb25zICYmICghcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlIHx8IGZpZWxkVmFsdWUgfHwgZmllbGRUZXh0VmFsdWUpKSB7XG5cdFx0cmV0dXJuIFZhbHVlU3RhdGUuTm9uZTtcblx0fVxuXG5cdC8vIFJlY29tbWVuZGF0aW9ucyBzaGFsbCBiZSBhcHBsaWNhYmxlIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIHByZXNlbnQgdmFsdWUgc3RhdGU6XG5cdC8vIDEuIElzIE5vbmVcblx0Ly8gMi4gQWxyZWFkeSByZXByZXNlbnRzIHJlY29tZW5kYXRpb25zLlxuXHRjb25zdCByZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUgPSByZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUgJiYgKHByZXNlbnRWYWx1ZVN0YXRlID09IFZhbHVlU3RhdGUuTm9uZSB8fCBwcmVzZW50VlNJc1JlY29tbWVuZGF0aW9ucyk7XG5cdGlmICghZmllbGRWYWx1ZSAmJiAhZmllbGRUZXh0VmFsdWUgJiYgcmVjb21tZW5kYXRpb25zU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IWZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkgJiZcblx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpPy5pc0E/LjxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpXG5cdFx0KSB7XG5cdFx0XHQvLyBObyBjb250ZXh0IGRhdGEgYXZhbGlsYWJsZSB5ZXQgYW5kIHBhcmVudCBiaW5kaW5nIGlzIGxpc3RiaW5kaW5nIChGaWVsZCBpbiBUYWJsZSBzY2VuYXJpbylcblx0XHRcdF9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dC5jYWxsKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRzb3VyY2VwYXRoLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB7IHZhbHVlU3RhdGUsIHZhbHVlU3RhdGVUZXh0IH0gPSBfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdHNvdXJjZXBhdGgsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uc1RleHQsXG5cdFx0XHRcdHRoaXNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLnNldFZhbHVlU3RhdGVUZXh0KHZhbHVlU3RhdGVUZXh0KTtcblx0XHRcdHJldHVybiB2YWx1ZVN0YXRlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcbn1cbmZvcm1hdFZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcIi5fZm9ybWF0dGVycy5BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZm9ybWF0VmFsdWVTdGF0ZVwiO1xuXG5mdW5jdGlvbiBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zPzogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCB2YWx1ZSA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy52YWx1ZTtcblx0Y29uc3QgdGV4dCA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0O1xuXHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0Ly9zZXQgdXAgdGhlIHBsYWNlaG9sZGVyIGFjY29yZGluZyB0byB0ZXh0IGFycmFuZ2VtZW50XG5cdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModmFsdWUgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHRleHQgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModGV4dCBhcyBzdHJpbmcsIHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHZhbHVlIGFzIHN0cmluZywgdGV4dCBhcyBzdHJpbmcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHBsYWNlaG9sZGVyID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyh0ZXh0IGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nKTtcblx0fVxuXHRyZXR1cm4gcGxhY2Vob2xkZXI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsYWNlaG9sZGVyKFxuXHR0aGlzOiBGaWVsZCxcblx0cmVjb21tZW5kYXRpb25WYWx1ZTogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmcsXG5cdGFsbF9yZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uSW5mbyxcblx0Y3VycmVudFBhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRjdXJyZW50Qm91bmRNZXNzYWdlVHlwZT86IE1lc3NhZ2VUeXBlIHwgbnVsbCxcblx0ZWRpdFN0eWxlUGxhY2Vob2xkZXI/OiBzdHJpbmcsXG5cdGRpc3BsYXlNb2RlPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgcGxhY2Vob2xkZXJEYXRhOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyID0gZWRpdFN0eWxlUGxhY2Vob2xkZXIgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBlZGl0U3R5bGVQbGFjZWhvbGRlcjtcblx0aWYgKGN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlKSB7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdGlmIChyZWNvbW1lbmRhdGlvblZhbHVlKSB7XG5cdFx0cGxhY2Vob2xkZXJEYXRhID0gX2dldFBsYWNlaG9sZGVyVGV4dCh7IHZhbHVlOiByZWNvbW1lbmRhdGlvblZhbHVlLCB0ZXh0OiByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIH0sIGRpc3BsYXlNb2RlKTtcblx0fSBlbHNlIGlmIChhbGxfcmVjb21tZW5kYXRpb25zICYmIE9iamVjdC5rZXlzKGFsbF9yZWNvbW1lbmRhdGlvbnMpLmxlbmd0aCAmJiBhbGxfcmVjb21tZW5kYXRpb25zLnZlcnNpb24gPT09IDIpIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSB8fCBjdXJyZW50UGFnZUNvbnRleHQ7XG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSB0aGlzLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nUGF0aCkge1xuXHRcdFx0Ly9nZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBiYXNlZCBvbiBwcm9wZXJ0eSBwYXRoIGFuZCBiaW5kaW5nIGNvbnRleHQgcGFzc2VkXG5cdFx0XHRjb25zdCByZWxldmFudFJlY29tbWVuZGF0aW9ucyA9IGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5nZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoKFxuXHRcdFx0XHRiaW5kaW5nUGF0aCxcblx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnNcblx0XHRcdCkgYXMgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlO1xuXHRcdFx0Ly9pZiB3ZSBnZXQgcmVjb21tZW5kYXRpb25zIHRoZW4gcHVzaCB0aGUgdmFsdWVzXG5cdFx0XHRwbGFjZWhvbGRlckRhdGEgPSBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zLCBkaXNwbGF5TW9kZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZWRpdFN0eWxlUGxhY2Vob2xkZXIgJiYgIXBsYWNlaG9sZGVyRGF0YSkge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBwbGFjZWhvbGRlckRhdGE7XG59XG5mb3JtYXRQbGFjZWhvbGRlci5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNmb3JtYXRQbGFjZWhvbGRlclwiO1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svZnVuY3Rpb25zLmh0bWwjdGhpcy1wYXJhbWV0ZXJzIGZvciBtb3JlIGRldGFpbCBvbiB0aGlzIHdlaXJkIHN5bnRheFxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIEFkZGl0aW9uYWxWYWx1ZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRpZiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmhhc093blByb3BlcnR5KHNOYW1lKSkge1xuXHRcdHJldHVybiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZ2V0R3Jvd2luZyA9IGdldEdyb3dpbmc7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZSA9IGZvcm1hdFZhbHVlU3RhdGU7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0UGxhY2Vob2xkZXIgPSBmb3JtYXRQbGFjZWhvbGRlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuU2NvcGUuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyO1xuXG5leHBvcnQgZGVmYXVsdCBhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFVBQVVBLENBQWVDLGtCQUFzRCxFQUFFQyxZQUFv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
284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRHcm93aW5nIiwicmVjb21tZW5kYXRpb25EYXRhIiwicHJvcGVydHlQYXRoIiwidmFsdWVzIiwiYWRkaXRpb25hbFZhbHVlSGVscGVyIiwiZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxlbmd0aCIsIl9fZnVuY3Rpb25OYW1lIiwiX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmllbGRCaW5kaW5nQ29udGV4dCIsInNvdXJjZXBhdGgiLCJtZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsIl9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dCIsInJlY29tbWVuZGF0aW9uVmFsdWUiLCJyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIiwiYWxsX3JlY29tbWVuZGF0aW9ucyIsInJlY29tbWVuZGF0aW9uc1RleHQiLCJmblNldFZhbHVlU3RhdGUiLCJldmVudCIsImxpc3RCaW5kaW5nIiwiZ2V0U291cmNlIiwibGlzdENvbnRleHRzIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiaW5jbHVkZXMiLCJnZXRPYmplY3QiLCJ2YWx1ZVN0YXRlIiwidmFsdWVTdGF0ZVRleHQiLCJfZ2V0VmFsdWVTdGF0ZUZvclJlY29tbWVuZGF0aW9uRmllbGQiLCJzZXRWYWx1ZVN0YXRlVGV4dCIsInNldFZhbHVlU3RhdGUiLCJyZWxhdGl2ZVByb3BlcnR5UGF0aCIsIlZhbHVlU3RhdGUiLCJJbmZvcm1hdGlvbiIsImFkZEFjdGl2ZVJlY29tbWVuZGF0aW9uIiwicmVtb3ZlQWN0aXZlUmVjb21tZW5kYXRpb24iLCJkZXRhY2hDaGFuZ2UiLCJnZXRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiZmllbGQiLCJOb25lIiwicmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMiLCJ2ZXJzaW9uIiwiZ2V0QWRkaXRpb25hbFZhbHVlRnJvbVByb3BlcnR5UGF0aCIsInZhbHVlIiwidGV4dCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250cm9sbGVyIiwicmVjb21tZW5kYXRpb25zIiwiaW5jcmVhc2VUZWxlbWV0cnlEYXRhQ291bnQiLCJmb3JtYXRWYWx1ZVN0YXRlIiwiaXNFZGl0YWJsZSIsImZpZWxkVmFsdWUiLCJmaWVsZFRleHRWYWx1ZSIsImFzc29jaWF0ZWRDb250cm9sIiwiZ2V0UGFyZW50IiwidW5kZWZpbmVkIiwicHJlc2VudFZhbHVlU3RhdGUiLCJnZXRWYWx1ZVN0YXRlIiwiaXNUcmFuc2llbnQiLCJyZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUiLCJPYmplY3QiLCJrZXlzIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInByZXNlbnRWYWx1ZVN0YXRlVGV4dCIsImdldFZhbHVlU3RhdGVUZXh0IiwicHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMiLCJyZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUiLCJpc0EiLCJjYWxsIiwiX2dldFBsYWNlaG9sZGVyVGV4dCIsImRpc3BsYXlNb2RlIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRQbGFjZWhvbGRlciIsImN1cnJlbnRQYWdlQ29udGV4dCIsImN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckRhdGEiLCJnZXRQbGFjZWhvbGRlciIsImJpbmRpbmdDb250ZXh0IiwiYmluZGluZ1BhdGgiLCJnZXRQYXRoIiwiYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIiwic05hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsIl9sZW4iLCJhcmd1bWVudHMiLCJvQXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiU2NvcGUiLCJfZm9ybWF0dGVycyIsIkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgU2NvcGUgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvU2NvcGVcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25JbmZvLCBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRpdGlvbmFsVmFsdWVIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvQWRkaXRpb25hbFZhbHVlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcblxuLyoqXG4gKiBHcm93aW5nIGZvcm1hdHRlciB1c2VkIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkLlxuICogQHBhcmFtIHRoaXMgVmFsdWVoZWxwIFRhYmxlXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EYXRhIERhdGEgZmV0Y2hlZCBmcm9tIHJlY29tbWVuZGF0aW9uIG1vZGVsXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGZvciBncm93aW5nIGFuZCBncm93aW5nVGhyZXNob2xkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0R3Jvd2luZyh0aGlzOiBNVGFibGUsIHJlY29tbWVuZGF0aW9uRGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IHVuZGVmaW5lZCwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgdmFsdWVzID1cblx0XHRhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0UmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMocmVjb21tZW5kYXRpb25EYXRhIHx8IHt9LCB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCwgcHJvcGVydHlQYXRoKSB8fCBbXTtcblx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0Ly9pZiB0aGVyZSBhcmUgcmVsZXZhbnQgcmVjb21tZW5kYXRpb25zIHRoZW4gcmV0dXJuIHRydWVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5nZXRHcm93aW5nLl9fZnVuY3Rpb25OYW1lID0gXCIuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2dldEdyb3dpbmdcIjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlbGF0aXZlIHByb3BlcnR5IHBhdGggb2YgdGhlIGZpZWxkLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBiaW5kaW5nIGNvbnRleHQgcGF0aCAgOiAnL0VtcGxveWVlKDEpJy5cbiAqIHNvdXJjZSBwYXRoICAgICAgICAgICA6ICcvRW1wbG95ZWUvTmFtZScuXG4gKiByZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoOiAnTmFtZScuXG4gKiBAcGFyYW0gZmllbGRCaW5kaW5nQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBzb3VyY2VwYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcmV0dXJucyBSZWxhdGl2ZSBwcm9wZXJ0eSBwYXRoLlxuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGgoZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCwgc291cmNlcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQoZmllbGRCaW5kaW5nQ29udGV4dCk7XG5cdHJldHVybiBzb3VyY2VwYXRoLnJlcGxhY2UoYCR7bWV0YVBhdGh9L2AsIFwiXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIGZvciB0aGUgZmllbGQgaW4gdGhlIHRhYmxlIGZvciB3aGljaCB0aGUgYmluZGluZyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlIGNvbnRleHQgZGF0YS5cbiAqXG4gKiBJbiBhIGZldyBzY2VuYXJpb3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGluc2lkZSB0aGUgdGFibGUsIHRoZSB2YWx1ZSBzdGF0ZSBmb3JtYXR0ZXIgaXMgY2FsbGVkIGZvciB2YWx1ZSB1cGRhdGUgd2l0aCB0aGUgY29udGV4dCB3aXRob3V0IGNvbnRleHQgZGF0YShjb250ZXh0LmdldE9iamVjdCgpIGlzIHVuZGVmaW5lZCkuXG4gKiBOT1RFOiBUaGlzIHNvbHV0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2l0aCBtb2RlbCBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCB0aGFuIHVzaW5nIHRoZSB0YWJsZSBsaXN0YmluZGluZydzIGNoYW5nZSBldmVudC5cbiAqIEBwYXJhbSB0aGlzIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBmaWVsZEJpbmRpbmdDb250ZXh0IEZpZWxkJ3MgYmluZGluZyBjb250ZXh0XG4gKiBAcGFyYW0gYWxsX3JlY29tbWVuZGF0aW9ucyBEYXRhIGZldGNoZWQgZnJvbSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIHNvdXJjZXBhdGggUHJvcGVydHkgUGF0aCBvZiB0aGUgRmllbGRcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbnNUZXh0IFZhbHVlIHN0YXRlIHRleHQgd2hlbiB0aGUgcmVjb21tZW5kYXRpb25zIGFyZSBzaG93blxuICovXG5mdW5jdGlvbiBfc2V0VmFsdWVTdGF0ZUZvckZpZWxkV2l0aE5vRGF0YUNvbnRleHQoXG5cdHRoaXM6IEZpZWxkLFxuXHRyZWNvbW1lbmRhdGlvblZhbHVlOiBzdHJpbmcsXG5cdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb246IHN0cmluZyxcblx0ZmllbGRCaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YWxsX3JlY29tbWVuZGF0aW9uczogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB8IFJlY29tbWVuZGF0aW9uSW5mbyB8IHVuZGVmaW5lZCxcblx0c291cmNlcGF0aDogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbnNUZXh0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBmblNldFZhbHVlU3RhdGUgPSAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBPRGF0YUxpc3RCaW5kaW5nPik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgbGlzdENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGxpc3RDb250ZXh0cy5pbmNsdWRlcyhmaWVsZEJpbmRpbmdDb250ZXh0KSkge1xuXHRcdFx0aWYgKGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkpIHtcblx0XHRcdFx0Y29uc3QgeyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9ID0gX2dldFZhbHVlU3RhdGVGb3JSZWNvbW1lbmRhdGlvbkZpZWxkKFxuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0c291cmNlcGF0aCxcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0LFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5zZXRWYWx1ZVN0YXRlVGV4dCh2YWx1ZVN0YXRlVGV4dCk7XG5cdFx0XHRcdHRoaXMuc2V0VmFsdWVTdGF0ZSh2YWx1ZVN0YXRlKTtcblxuXHRcdFx0XHQvLyBUcmFjayBvciB1bnRyYWNrIGFjdGl2ZSByZWNvbW1lbmRhdGlvbnMgYmFzZWQgb24gdGhlIHZhbHVlIHN0YXRlXG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlUHJvcGVydHlQYXRoID0gX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoKGZpZWxkQmluZGluZ0NvbnRleHQsIHNvdXJjZXBhdGgpO1xuXHRcdFx0XHRpZiAodmFsdWVTdGF0ZSA9PT0gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbikge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5hZGRBY3RpdmVSZWNvbW1lbmRhdGlvbihmaWVsZEJpbmRpbmdDb250ZXh0LCByZWxhdGl2ZVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbFZhbHVlSGVscGVyLnJlbW92ZUFjdGl2ZVJlY29tbWVuZGF0aW9uKGZpZWxkQmluZGluZ0NvbnRleHQsIHJlbGF0aXZlUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGlzdEJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuU2V0VmFsdWVTdGF0ZSk7XG5cdFx0fVxuXHR9O1xuXG5cdGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmF0dGFjaENoYW5nZShmblNldFZhbHVlU3RhdGUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgc3RhdGUgd2hlbiByZWNvbW1lbmRhdGlvbnMgYXJlIGFwcGxpY2FibGUuXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25WYWx1ZVxuICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb25cbiAqIEBwYXJhbSBhbGxfcmVjb21tZW5kYXRpb25zIERhdGEgZmV0Y2hlZCBmcm9tIHRoZSByZWNvbW1lbmRhdGlvbiBtb2RlbFxuICogQHBhcmFtIGZpZWxkQmluZGluZ0NvbnRleHQgRmllbGQncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBzb3VyY2VwYXRoIFByb3BlcnR5IFBhdGggb2YgdGhlIEZpZWxkXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25zVGV4dCBWYWx1ZSBzdGF0ZSB0ZXh0IGluIGNhc2UgdGhlIHJlY29tbWVuZGF0aW9ucyBhcmUgc2hvd25cbiAqIEBwYXJhbSBmaWVsZCBGaWVsZFxuICogQHJldHVybnMgVmFsdWUgc3RhdGUgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSB2YWx1ZSBzdGF0ZSBhbmQgdGhlIHZhbHVlIHN0YXRlIHRleHQuXG4gKi9cbmZ1bmN0aW9uIF9nZXRWYWx1ZVN0YXRlRm9yUmVjb21tZW5kYXRpb25GaWVsZChcblx0cmVjb21tZW5kYXRpb25WYWx1ZTogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmcsXG5cdGFsbF9yZWNvbW1lbmRhdGlvbnM6IEluQ29tcGxldGVuZXNzSW5mb1R5cGUgfCBSZWNvbW1lbmRhdGlvbkluZm8gfCB1bmRlZmluZWQsXG5cdGZpZWxkQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdHNvdXJjZXBhdGg6IHN0cmluZyxcblx0cmVjb21tZW5kYXRpb25zVGV4dDogc3RyaW5nLFxuXHRmaWVsZDogRmllbGRcbik6IHsgdmFsdWVTdGF0ZTogVmFsdWVTdGF0ZTsgdmFsdWVTdGF0ZVRleHQ6IHN0cmluZyB9IHtcblx0Ly8gSWYgbm8gdmFsdWVzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBmaWVsZCB3aXRoIHByZXNlbnQgY29udGV4dCB3ZSByZXNldCB2YWx1ZSBzdGF0ZS5cblx0bGV0IHZhbHVlU3RhdGUgPSBWYWx1ZVN0YXRlLk5vbmUsXG5cdFx0dmFsdWVTdGF0ZVRleHQgPSBcIlwiO1xuXG5cdGlmIChyZWNvbW1lbmRhdGlvblZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24pIHtcblx0XHR2YWx1ZVN0YXRlVGV4dCA9IHJlY29tbWVuZGF0aW9uc1RleHQ7XG5cdFx0dmFsdWVTdGF0ZSA9IFZhbHVlU3RhdGUuSW5mb3JtYXRpb247XG5cdH0gZWxzZSBpZiAoYWxsX3JlY29tbWVuZGF0aW9ucykge1xuXHRcdGNvbnN0IHJlbGF0aXZlUHJvcGVydHlQYXRoID0gX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoKGZpZWxkQmluZGluZ0NvbnRleHQsIHNvdXJjZXBhdGgpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5nZXRSZWxldmFudFJlY29tbWVuZGF0aW9ucyhcblx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnMgYXMgSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSxcblx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRzb3VyY2VwYXRoLFxuXHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGhcblx0XHQpO1xuXHRcdGxldCByZWxldmFudFJlY29tbWVuZGF0aW9ucztcblx0XHRpZiAoYWxsX3JlY29tbWVuZGF0aW9ucz8udmVyc2lvbiA9PT0gMikge1xuXHRcdFx0cmVsZXZhbnRSZWNvbW1lbmRhdGlvbnMgPSBhZGRpdGlvbmFsVmFsdWVIZWxwZXIuZ2V0QWRkaXRpb25hbFZhbHVlRnJvbVByb3BlcnR5UGF0aChcblx0XHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnNcblx0XHRcdCkgYXMgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdChhbGxfcmVjb21tZW5kYXRpb25zPy52ZXJzaW9uID09PSAyICYmIChyZWxldmFudFJlY29tbWVuZGF0aW9ucz8udmFsdWUgfHwgcmVsZXZhbnRSZWNvbW1lbmRhdGlvbnM/LnRleHQpKSB8fFxuXHRcdFx0KCFhbGxfcmVjb21tZW5kYXRpb25zPy52ZXJzaW9uICYmIHZhbHVlcz8ubGVuZ3RoKVxuXHRcdCkge1xuXHRcdFx0dmFsdWVTdGF0ZVRleHQgPSByZWNvbW1lbmRhdGlvbnNUZXh0O1xuXHRcdFx0dmFsdWVTdGF0ZSA9IFZhbHVlU3RhdGUuSW5mb3JtYXRpb247XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlU3RhdGUgPT09IFZhbHVlU3RhdGUuSW5mb3JtYXRpb24pIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhmaWVsZCk7XG5cdFx0dmlldy5nZXRDb250cm9sbGVyKCkucmVjb21tZW5kYXRpb25zLmluY3JlYXNlVGVsZW1ldHJ5RGF0YUNvdW50KFwibnVtYmVyb2ZUaW1lc0Zvcm1hdHRlckNhbGxlZFwiKTtcblx0fVxuXG5cdHJldHVybiB7IHZhbHVlU3RhdGUsIHZhbHVlU3RhdGVUZXh0IH07XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSB2YWx1ZSBzdGF0ZSBvZiB0aGUgZmllbGQgYmFzZWQgb24gdGhlIHByZXNlbnQgdmFsdWUgc3RhdGUgYW5kIHRoZSBhdmFpbGFibGUgcmVjb21tZW5kYXRpb25zLlxuICogQHBhcmFtIHRoaXMgRmllbGRcbiAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblZhbHVlIERhdGEgZmV0Y2hlZCBmcm9tIHJlY29tbWVuZGF0aW9uIG1vZGVsXG4gKiBAcGFyYW0gcmVjb21tZW5kYXRpb25EZXNjcmlwdGlvblxuICogQHBhcmFtIGFsbF9yZWNvbW1lbmRhdGlvbnNcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFBhZ2UgaXMgaW4gZWRpdCBtb2RlXG4gKiBAcGFyYW0gc291cmNlcGF0aCBQcm9wZXJ0eSBQYXRoIG9mIHRoZSBGaWVsZFxuICogQHBhcmFtIGZpZWxkVmFsdWUgUHJlc2VudCBmaWVsZCB2YWx1ZVxuICogQHBhcmFtIGZpZWxkVGV4dFZhbHVlXG4gKiBAcmV0dXJucyBGaWVsZCB2YWx1ZSBzdGF0ZVxuICovXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZVN0YXRlKFxuXHR0aGlzOiBGaWVsZCxcblx0cmVjb21tZW5kYXRpb25WYWx1ZTogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmcsXG5cdGFsbF9yZWNvbW1lbmRhdGlvbnM6IEluQ29tcGxldGVuZXNzSW5mb1R5cGUgfCBSZWNvbW1lbmRhdGlvbkluZm8gfCB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IGJvb2xlYW4sXG5cdHNvdXJjZXBhdGg/OiBzdHJpbmcsXG5cdGZpZWxkVmFsdWU/OiBzdHJpbmcsXG5cdGZpZWxkVGV4dFZhbHVlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmdcbik6IFZhbHVlU3RhdGUge1xuXHQvLyBXZSByZXNldCB2YWx1ZSBzdGF0ZSB3aGVuOlxuXHQvLyAxLiBObyBjb250ZXh0IGlzIGJvdW5kIHRvIHRoZSBmaWVsZC5cblx0Ly8gMi4gaXNFZGl0YWJsZSBpcyBmYWxzZVxuXHRjb25zdCBhc3NvY2lhdGVkQ29udHJvbCA9IHRoaXMuZ2V0UGFyZW50KCkgYXMgRmllbGQ7XG5cdGNvbnN0IGZpZWxkQmluZGluZ0NvbnRleHQgPSBhc3NvY2lhdGVkQ29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWZpZWxkQmluZGluZ0NvbnRleHQgfHwgIWlzRWRpdGFibGUpIHtcblx0XHRhc3NvY2lhdGVkQ29udHJvbC5zZXRWYWx1ZVN0YXRlKFZhbHVlU3RhdGUuTm9uZSk7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gYWN0aXZlIHJlY29tbWVuZGF0aW9ucyB3aGVuIHJlc2V0dGluZyB2YWx1ZSBzdGF0ZVxuXHRcdGlmIChmaWVsZEJpbmRpbmdDb250ZXh0ICYmIHNvdXJjZXBhdGgpIHtcblx0XHRcdGNvbnN0IHJlbGF0aXZlUHJvcGVydHlQYXRoID0gX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoKGZpZWxkQmluZGluZ0NvbnRleHQsIHNvdXJjZXBhdGgpO1xuXHRcdFx0YWRkaXRpb25hbFZhbHVlSGVscGVyLnJlbW92ZUFjdGl2ZVJlY29tbWVuZGF0aW9uKGZpZWxkQmluZGluZ0NvbnRleHQsIHJlbGF0aXZlUHJvcGVydHlQYXRoKTtcblx0XHR9XG5cdFx0cmV0dXJuIFZhbHVlU3RhdGUuTm9uZTtcblx0fVxuXHRmaWVsZFRleHRWYWx1ZSA9IGZpZWxkVGV4dFZhbHVlID09PSBcInVuZGVmaW5lZFwiID8gdW5kZWZpbmVkIDogZmllbGRUZXh0VmFsdWU7XG5cdC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgcHJlc2VudCB2YWx1ZSBzdGF0ZSB3aGVuOlxuXHQvLyAxLiBTb3VyY2UgcGF0aCBpcyBub3QgYXZhaWxhYmxlLlxuXHQvLyAyLiBGaWVsZCBjb250ZXh0IGlzIHRyYW5zaWVudC5cblx0Y29uc3QgcHJlc2VudFZhbHVlU3RhdGUgPSBhc3NvY2lhdGVkQ29udHJvbD8uZ2V0VmFsdWVTdGF0ZSgpIGFzIFZhbHVlU3RhdGU7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gZmllbGRCaW5kaW5nQ29udGV4dC5pc1RyYW5zaWVudD8uKCk7XG5cdGlmICghc291cmNlcGF0aCB8fCBpc1RyYW5zaWVudCkge1xuXHRcdGFzc29jaWF0ZWRDb250cm9sLnNldFZhbHVlU3RhdGUocHJlc2VudFZhbHVlU3RhdGUpO1xuXHRcdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcblx0fVxuXG5cdC8vIFdlIHJlc2V0IHZhbHVlIHN0YXRlIHdoZW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB2YWx1ZSBzdGF0ZSByZXByZXNlbnRzIHJlY29tbWVuZGF0aW9ucy5cblx0Y29uc3QgcmVjb21tZW5kYXRpb25zQXZhaWxhYmxlID1cblx0XHRyZWNvbW1lbmRhdGlvblZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gfHwgKCEhYWxsX3JlY29tbWVuZGF0aW9ucyAmJiBPYmplY3Qua2V5cyhhbGxfcmVjb21tZW5kYXRpb25zKS5sZW5ndGggPiAwKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25zVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlJFQ09NTUVOREFUSU9OU19EQVRBX0lORk9cIik7XG5cdGNvbnN0IHByZXNlbnRWYWx1ZVN0YXRlVGV4dCA9IGFzc29jaWF0ZWRDb250cm9sPy5nZXRWYWx1ZVN0YXRlVGV4dCgpO1xuXHRjb25zdCBwcmVzZW50VlNJc1JlY29tbWVuZGF0aW9ucyA9IHByZXNlbnRWYWx1ZVN0YXRlID09PSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uICYmIHByZXNlbnRWYWx1ZVN0YXRlVGV4dCA9PT0gcmVjb21tZW5kYXRpb25zVGV4dDtcblx0Ly9JZiBmaWVsZCB2YWx1ZSBpcyBwcmVzZW50IG9yIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBidXQgcHJlc2VudFN0YXRlIGlzIEluZm8gdGhlbiB3ZSBjaGFuZ2UgaXQgdG8gTm9uZVxuXHRpZiAocHJlc2VudFZTSXNSZWNvbW1lbmRhdGlvbnMgJiYgKCFyZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUgfHwgZmllbGRWYWx1ZSB8fCBmaWVsZFRleHRWYWx1ZSkpIHtcblx0XHRhc3NvY2lhdGVkQ29udHJvbC5zZXRWYWx1ZVN0YXRlKFZhbHVlU3RhdGUuTm9uZSk7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gYWN0aXZlIHJlY29tbWVuZGF0aW9ucyB3aGVuIHJlc2V0dGluZyB2YWx1ZSBzdGF0ZVxuXHRcdGNvbnN0IHJlbGF0aXZlUHJvcGVydHlQYXRoID0gX2dldFJlbGF0aXZlUHJvcGVydHlQYXRoKGZpZWxkQmluZGluZ0NvbnRleHQsIHNvdXJjZXBhdGgpO1xuXHRcdGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5yZW1vdmVBY3RpdmVSZWNvbW1lbmRhdGlvbihmaWVsZEJpbmRpbmdDb250ZXh0LCByZWxhdGl2ZVByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIFZhbHVlU3RhdGUuTm9uZTtcblx0fVxuXG5cdC8vIFJlY29tbWVuZGF0aW9ucyBzaGFsbCBiZSBhcHBsaWNhYmxlIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIHByZXNlbnQgdmFsdWUgc3RhdGU6XG5cdC8vIDEuIElzIE5vbmVcblx0Ly8gMi4gQWxyZWFkeSByZXByZXNlbnRzIHJlY29tZW5kYXRpb25zLlxuXHRjb25zdCByZWNvbW1lbmRhdGlvbnNTdGF0ZUFwcGxpY2FibGUgPSByZWNvbW1lbmRhdGlvbnNBdmFpbGFibGUgJiYgKHByZXNlbnRWYWx1ZVN0YXRlID09IFZhbHVlU3RhdGUuTm9uZSB8fCBwcmVzZW50VlNJc1JlY29tbWVuZGF0aW9ucyk7XG5cdGlmICghZmllbGRWYWx1ZSAmJiAhZmllbGRUZXh0VmFsdWUgJiYgcmVjb21tZW5kYXRpb25zU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IWZpZWxkQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCkgJiZcblx0XHRcdGZpZWxkQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpPy5pc0E/LjxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpXG5cdFx0KSB7XG5cdFx0XHQvLyBObyBjb250ZXh0IGRhdGEgYXZhbGlsYWJsZSB5ZXQgYW5kIHBhcmVudCBiaW5kaW5nIGlzIGxpc3RiaW5kaW5nIChGaWVsZCBpbiBUYWJsZSBzY2VuYXJpbylcblx0XHRcdF9zZXRWYWx1ZVN0YXRlRm9yRmllbGRXaXRoTm9EYXRhQ29udGV4dC5jYWxsKFxuXHRcdFx0XHRhc3NvY2lhdGVkQ29udHJvbCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0ZmllbGRCaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0YWxsX3JlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0c291cmNlcGF0aCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25zVGV4dFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgeyB2YWx1ZVN0YXRlLCB2YWx1ZVN0YXRlVGV4dCB9ID0gX2dldFZhbHVlU3RhdGVGb3JSZWNvbW1lbmRhdGlvbkZpZWxkKFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRhbGxfcmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRmaWVsZEJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRzb3VyY2VwYXRoLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbnNUZXh0LFxuXHRcdFx0XHRhc3NvY2lhdGVkQ29udHJvbFxuXHRcdFx0KTtcblx0XHRcdGFzc29jaWF0ZWRDb250cm9sLnNldFZhbHVlU3RhdGVUZXh0KHZhbHVlU3RhdGVUZXh0KTtcblx0XHRcdGFzc29jaWF0ZWRDb250cm9sLnNldFZhbHVlU3RhdGUodmFsdWVTdGF0ZSk7XG5cdFx0XHQvLyBUcmFjayBvciB1bnRyYWNrIGFjdGl2ZSByZWNvbW1lbmRhdGlvbnMgYmFzZWQgb24gdGhlIHZhbHVlIHN0YXRlXG5cdFx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IF9nZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChmaWVsZEJpbmRpbmdDb250ZXh0LCBzb3VyY2VwYXRoKTtcblx0XHRcdGlmICh2YWx1ZVN0YXRlID09PSBWYWx1ZVN0YXRlLkluZm9ybWF0aW9uKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5hZGRBY3RpdmVSZWNvbW1lbmRhdGlvbihmaWVsZEJpbmRpbmdDb250ZXh0LCByZWxhdGl2ZVByb3BlcnR5UGF0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWVIZWxwZXIucmVtb3ZlQWN0aXZlUmVjb21tZW5kYXRpb24oZmllbGRCaW5kaW5nQ29udGV4dCwgcmVsYXRpdmVQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlU3RhdGU7XG5cdFx0fVxuXHR9XG5cblx0YXNzb2NpYXRlZENvbnRyb2wuc2V0VmFsdWVTdGF0ZShwcmVzZW50VmFsdWVTdGF0ZSk7XG5cdHJldHVybiBwcmVzZW50VmFsdWVTdGF0ZTtcbn1cbmZvcm1hdFZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcIi5fZm9ybWF0dGVycy5BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZm9ybWF0VmFsdWVTdGF0ZVwiO1xuXG5mdW5jdGlvbiBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zPzogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCB2YWx1ZSA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy52YWx1ZTtcblx0Y29uc3QgdGV4dCA9IHJlbGV2YW50UmVjb21tZW5kYXRpb25zPy50ZXh0O1xuXHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0Ly9zZXQgdXAgdGhlIHBsYWNlaG9sZGVyIGFjY29yZGluZyB0byB0ZXh0IGFycmFuZ2VtZW50XG5cdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModmFsdWUgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHRleHQgYXMgc3RyaW5nKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRwbGFjZWhvbGRlciA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHModGV4dCBhcyBzdHJpbmcsIHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0cGxhY2Vob2xkZXIgPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHZhbHVlIGFzIHN0cmluZywgdGV4dCBhcyBzdHJpbmcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHBsYWNlaG9sZGVyID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyh0ZXh0IGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nKTtcblx0fVxuXHRyZXR1cm4gcGxhY2Vob2xkZXI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsYWNlaG9sZGVyKFxuXHR0aGlzOiBGaWVsZCxcblx0cmVjb21tZW5kYXRpb25WYWx1ZTogc3RyaW5nLFxuXHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmcsXG5cdGFsbF9yZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uSW5mbyxcblx0Y3VycmVudFBhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRjdXJyZW50Qm91bmRNZXNzYWdlVHlwZT86IE1lc3NhZ2VUeXBlIHwgbnVsbCxcblx0ZWRpdFN0eWxlUGxhY2Vob2xkZXI/OiBzdHJpbmcsXG5cdGRpc3BsYXlNb2RlPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgcGxhY2Vob2xkZXJEYXRhOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyID0gZWRpdFN0eWxlUGxhY2Vob2xkZXIgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBlZGl0U3R5bGVQbGFjZWhvbGRlcjtcblx0aWYgKGN1cnJlbnRCb3VuZE1lc3NhZ2VUeXBlKSB7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdGlmIChyZWNvbW1lbmRhdGlvblZhbHVlKSB7XG5cdFx0cGxhY2Vob2xkZXJEYXRhID0gX2dldFBsYWNlaG9sZGVyVGV4dCh7IHZhbHVlOiByZWNvbW1lbmRhdGlvblZhbHVlLCB0ZXh0OiByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uIH0sIGRpc3BsYXlNb2RlKTtcblx0fSBlbHNlIGlmIChhbGxfcmVjb21tZW5kYXRpb25zICYmIE9iamVjdC5rZXlzKGFsbF9yZWNvbW1lbmRhdGlvbnMpLmxlbmd0aCAmJiBhbGxfcmVjb21tZW5kYXRpb25zLnZlcnNpb24gPT09IDIpIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSB8fCBjdXJyZW50UGFnZUNvbnRleHQ7XG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSB0aGlzLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nUGF0aCkge1xuXHRcdFx0Ly9nZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBiYXNlZCBvbiBwcm9wZXJ0eSBwYXRoIGFuZCBiaW5kaW5nIGNvbnRleHQgcGFzc2VkXG5cdFx0XHRjb25zdCByZWxldmFudFJlY29tbWVuZGF0aW9ucyA9IGFkZGl0aW9uYWxWYWx1ZUhlbHBlci5nZXRBZGRpdGlvbmFsVmFsdWVGcm9tUHJvcGVydHlQYXRoKFxuXHRcdFx0XHRiaW5kaW5nUGF0aCxcblx0XHRcdFx0YmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdGFsbF9yZWNvbW1lbmRhdGlvbnNcblx0XHRcdCkgYXMgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlO1xuXHRcdFx0Ly9pZiB3ZSBnZXQgcmVjb21tZW5kYXRpb25zIHRoZW4gcHVzaCB0aGUgdmFsdWVzXG5cdFx0XHRwbGFjZWhvbGRlckRhdGEgPSBfZ2V0UGxhY2Vob2xkZXJUZXh0KHJlbGV2YW50UmVjb21tZW5kYXRpb25zLCBkaXNwbGF5TW9kZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZWRpdFN0eWxlUGxhY2Vob2xkZXIgJiYgIXBsYWNlaG9sZGVyRGF0YSkge1xuXHRcdHBsYWNlaG9sZGVyRGF0YSA9IGVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBwbGFjZWhvbGRlckRhdGE7XG59XG5mb3JtYXRQbGFjZWhvbGRlci5fX2Z1bmN0aW9uTmFtZSA9IFwiLl9mb3JtYXR0ZXJzLkFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNmb3JtYXRQbGFjZWhvbGRlclwiO1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svZnVuY3Rpb25zLmh0bWwjdGhpcy1wYXJhbWV0ZXJzIGZvciBtb3JlIGRldGFpbCBvbiB0aGlzIHdlaXJkIHN5bnRheFxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIEFkZGl0aW9uYWxWYWx1ZSBmb3JtYXR0ZXJzLlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRpZiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmhhc093blByb3BlcnR5KHNOYW1lKSkge1xuXHRcdHJldHVybiAoYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZ2V0R3Jvd2luZyA9IGdldEdyb3dpbmc7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZSA9IGZvcm1hdFZhbHVlU3RhdGU7XG5hZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0UGxhY2Vob2xkZXIgPSBmb3JtYXRQbGFjZWhvbGRlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuU2NvcGUuX2Zvcm1hdHRlcnMuQWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyID0gYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyO1xuXG5leHBvcnQgZGVmYXVsdCBhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFVBQVVBLENBQWVDLGtCQUFzRCxFQUFFQyxZQUFvQixFQUFXO0lBQ3hILE1BQU1DLE1BQU0sR0FDWEMscUJBQXFCLENBQUNDLDBCQUEwQixDQUFDSixrQkFBa0IsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNLLGlCQUFpQixDQUFDLENBQUMsRUFBYUosWUFBWSxDQUFDLElBQUksRUFBRTtJQUNwSSxJQUFJQyxNQUFNLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDdEI7TUFDQSxPQUFPLElBQUk7SUFDWjtJQUNBLE9BQU8sS0FBSztFQUNiO0VBQ0FQLFVBQVUsQ0FBQ1EsY0FBYyxHQUFHLGlFQUFpRTs7RUFFN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHdCQUF3QkEsQ0FBQ0MsbUJBQTRCLEVBQUVDLFVBQWtCLEVBQVU7SUFDM0YsTUFBTUMsUUFBUSxHQUFHQyxXQUFXLENBQUNDLHFCQUFxQixDQUFDSixtQkFBbUIsQ0FBQztJQUN2RSxPQUFPQyxVQUFVLENBQUNJLE9BQU8sQ0FBQyxHQUFHSCxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDOUM7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSx1Q0FBdUNBLENBRS9DQyxtQkFBMkIsRUFDM0JDLHlCQUFpQyxFQUNqQ1IsbUJBQTRCLEVBQzVCUyxtQkFBNEUsRUFDNUVSLFVBQWtCLEVBQ2xCUyxtQkFBMkIsRUFDcEI7SUFDUCxNQUFNQyxlQUFlLEdBQUlDLEtBQXFDLElBQVc7TUFDeEUsTUFB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