@sapui5/sap.fe.macros 1.142.0 → 1.143.0

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 (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -2,7 +2,7 @@
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/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, HookSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, FilterBarAPIStateHandler) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/MacroAPI", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/SemanticDateOperators", "sap/fe/macros/mdc/adapter/StateHelper", "sap/fe/navigation/SelectionVariant", "sap/fe/navigation/library", "sap/ui/core/Element", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/jquery", "./UOMValidationDelegate", "./mixin/FilterBarAPIStateHandler"], function (Log, merge, ClassSupport, HookSupport, CommonUtils, MetaModelConverter, PromiseKeeper, library, DataModelPathHelper, MacroAPI, FilterUtils, SemanticDateOperators, stateHelper, SelectionVariant, navigationLibrary, UI5Element, ControlVariantApplyAPI, FieldEditMode, StateUtil, jQuery, UOMValidationDelegate, FilterBarAPIStateHandler) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13;
@@ -614,10 +614,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
614
614
  }
615
615
  }
616
616
  };
617
- _proto2.handleFilterChanged = function handleFilterChanged(oEvent) {
617
+ _proto2.handleFilterChanged = async function handleFilterChanged(oEvent) {
618
618
  const filterBar = oEvent.getSource();
619
619
  const oEventParameters = oEvent.getParameters();
620
620
  if (filterBar) {
621
+ if (!filterBar.getLiveMode()) {
622
+ await UOMValidationDelegate.validateAllUOMFields(filterBar, "filterChange");
623
+ }
621
624
  const oConditions = filterBar.getFilterConditions();
622
625
  const eventParameters = this._prepareEventParameters(filterBar);
623
626
  this.telemetry?.onFiltersChanged(this._getFilterBarReason(filterBar));
@@ -1039,4 +1042,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1039
1042
  }), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSearch"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFilterChanged", [_dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFilterChanged"), _class2.prototype), _class2)) || _class) || _class);
1040
1043
  return FilterBarAPI;
1041
1044
  }, false);
1042
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2RlYzEzIiwiZXZlbnQiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJ4bWxFdmVudEhhbmRsZXIiLCJfZGVjMTkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hY3JvQVBJIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiX2luaXRpYWxTdGF0ZVByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwiX2JTZWFyY2hUcmlnZ2VyZWQiLCJfaGFzUGVuZGluZ0ZpbHRlcnMiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvMiIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFkZGl0aW9uYWxTdGF0ZXMiLCJnZXRJZCIsImRhdGFMb2FkZWQiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJpbnN0YW5jZVN0YXRlIiwiaW5zdGFuY2VEYXRhTG9hZGVkIiwidW5kZWZpbmVkIiwicGFyZW50RGF0YUxvYWRlZCIsInRyaWdnZXJTZWFyY2giLCJjb250ZW50Iiwid2FpdEZvckluaXRpYWxTdGF0ZSIsInByb21pc2UiLCJnZXRDb250cm9sU3RhdGUiLCJjb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQiLCJuYXZpZ2F0aW9uVHlwZSIsImNvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJieUlkIiwiY3VycmVudFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIk5hdlR5cGUiLCJ4QXBwU3RhdGUiLCJpbml0aWFsTG9hZCIsIkluaXRpYWxMb2FkTW9kZSIsIkVuYWJsZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyVk0iLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiX2FwcGx5U2VsZWN0aW9uVmFyaWFudCIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJmaWx0ZXJWYXJpYW50QXBwbGllZCIsImZpbHRlckJhciIsImdldENvbnRlbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic3YiLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJzdkRlZmF1bHRzIiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3VsZEFwcGx5QXBwU3RhdGUiLCJfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZSIsIl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TViIsInN2RGVmYXVsdHNBcmVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCIsImdldERlZmF1bHRWYXJpYW50S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwidXNlRkxQRGVmYXVsdFZhbHVlcyIsImdldFBhcmVudCIsInN2VG9TZXQiLCJfZ2V0QWRqdXN0ZWRTViIsInNldFNlbGVjdGlvblZhcmlhbnQiLCJfZW5hYmxlRmlsdGVyQmFyIiwiZmlsdGVyQmFyQ29udHJvbCIsInByZXZlbnRJbml0aWFsU2VhcmNoIiwiZm5PblNlYXJjaCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJlbmFibGVSZXF1ZXN0cyIsImFwcFN0YXRlU1YiLCJhZGp1c3RlZFNWIiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImFscmVhZHlBcHBsaWVkU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiYXBwbGllZFNlbE9wdE5hbWVzIiwicmVkdWNlIiwic3ZDb3B5Iiwic2VsT3B0aW9uTmFtZSIsInN2U2VsT3B0cyIsImdldFNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbnMiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiX3ByZXZlbnRJbml0aWFsU2VhcmNoIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJvQ3VycmVudFZhcmlhbnQiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsImV4ZWN1dGVPblNlbGVjdCIsImlzRW1wdHkiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJnZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSIsIl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZCIsInN2T3B0aW9ucyIsImRlZmF1bHRTVk9wdGlvbnMiLCJkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzIiwibm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNpZ24iLCJvcHRpb24iLCJsb3ciLCJoaWdoIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNQYXJhbWV0ZXJpemVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZW50aXR5UHJvcGVydGllcyIsInNvbWUiLCJwYXJhbWV0ZXIiLCJuYW1lIiwiX3R5cGUiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwidmFsdWUiLCJyZXFTdGRWYXJpYW50IiwidmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJpbmxpbmVFZGl0RmxvdyIsImlubGluZUVkaXREaXNjYXJkIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwibGl2ZU1vZGUiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImhhbmRsZUZpbHRlckNoYW5nZWQiLCJvRXZlbnRQYXJhbWV0ZXJzIiwib0NvbmRpdGlvbnMiLCJfZ2V0RmlsdGVyQmFyUmVhc29uIiwiY29uZGl0aW9uc0Jhc2VkIiwiX3NSZWFzb24iLCJmaWx0ZXJzIiwic2VhcmNoIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJzIiwic2V0RmlsdGVyVmFsdWVzIiwic0NvbmRpdGlvblBhdGgiLCJzT3BlcmF0b3IiLCJ2VmFsdWVzIiwiZ2V0QWN0aXZlRmlsdGVyc1RleHQiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJ3YWl0Rm9ySW5pdGlhbGl6YXRpb24iLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJMb2ciLCJlcnJvciIsImlzU2VtYW50aWNEYXRlRmlsdGVyQXBwbGllZCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImhhc1NlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJnZXRDb25kaXRpb25zIiwic3RhdGVIZWxwZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJkYXRhTW9kZWxPYmplY3QiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIm1ldGFQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRVcmwiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwic2V0RmlsdGVyQ29udGV4dFVybCIsImdldE1hbmRhdG9yeUZpbHRlclByb3BlcnR5TmFtZXMiLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmaWx0ZXIiLCJmaWx0ZXJQcm9wIiwicmVxdWlyZWQiLCJtYXAiLCJyZXF1aXJlZFByb3AiLCJjb25kaXRpb25QYXRoIiwiZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudE1vZGVsIiwidmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXRWYXJpYW50QmFja3JlZmVyZW5jZSIsImdldEN1cnJlbnRWYXJpYW50UmVmZXJlbmNlIiwiZSIsImRlYnVnIiwic2V0RmlsdGVyRmllbGRWaXNpYmxlIiwidmlzaWJsZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsIml0ZW1zIiwiZ2V0RmlsdGVyRmllbGRWaXNpYmxlIiwic3RhdGUiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRCYWNrcmVmZXJlbmNlIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJzZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsInZhcmlhbnQiLCJpc0xpdmVNb2RlIiwiZ2V0TGl2ZU1vZGUiLCJzZXRWYXJpYW50QmFja3JlZmVyZW5jZSIsInNldEN1cnJlbnRWYXJpYW50S2V5Iiwic2V0RmlsdGVyRmllbGRFbmFibGVkIiwiZW5hYmxlZCIsImdldEludGVybmFsTW9kZWwiLCJzZXREYXRhIiwiZmlsdGVyRmllbGRzIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNhYmxlZCIsImdldEZpbHRlckZpZWxkRW5hYmxlZCIsImdldFByb3BlcnR5IiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJyZXN1bHQiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImRpZmZTdGF0ZSIsImdldENvbmRpdGlvblBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd0ZpbHRlckZpZWxkIiwidGFyZ2V0RmlsdGVyRmllbGQiLCJvcGVuVmFsdWVIZWxwRm9yRmlsdGVyRmllbGQiLCJpbnB1dFZhbHVlIiwicmVqZWN0IiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJJdGVtcyIsImdldFByb3BlcnR5S2V5IiwidmFsdWVIZWxwIiwiZ2V0VmFsdWVIZWxwIiwiX29Gb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50Iiwib25mb2N1c2luIiwialF1ZXJ5IiwiRXZlbnQiLCJzZXRUaW1lb3V0IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJlVmFsdWVIZWxwUmVxdWVzdCIsImZyb21LZXlib2FyZCIsIl91c2VySW5wdXRWYWx1ZSIsImdldENvbGxhcHNlZEZpbHRlcnNUZXh0IiwiTWFjcm9BUEkiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhckFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRzT2YsIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIG1peGluLCBwcm9wZXJ0eSwgeG1sRXZlbnRIYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50LFxuXHRGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnRQYXJhbWV0ZXJzLFxuXHRGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50XG59IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1ldGFNb2RlbCwgZGVmYXVsdCBhcyBPRGF0YU1ldGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIGZyb20gXCIuL21peGluL0ZpbHRlckJhckFQSVN0YXRlSGFuZGxlclwiO1xuXG4vLyBUcmFjayB0ZWxlbWV0cnkgY29udGVudCBmb3IgdGhlIGZpbHRlckJhclxuY2xhc3MgRmlsdGVyQmFyVGVsZW1ldHJ5IHtcblx0cHJpdmF0ZSBjb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXG5cdHByaXZhdGUgY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWx0ZXJCYXJBUEk6IEZpbHRlckJhckFQSSkge31cblxuXHRvbkZpbHRlcnNDaGFuZ2VkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChyZWFzb24gPT09IFwiVmFyaWFudFwiKSB7XG5cdFx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMrKztcblx0XHR9XG5cdH1cblxuXHRvblNlYXJjaChldmVudFBhcmFtZXRlcnM6IHsgcmVhc29uPzogc3RyaW5nIH0sIGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlck5hbWVzID0gdGhpcy5nZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnMpO1xuXHRcdHRoaXMuZmlsdGVyQmFyQVBJLmdldFBhZ2VDb250cm9sbGVyKCk/LnRlbGVtZXRyeS5zdG9yZUFjdGlvbih7XG5cdFx0XHR0eXBlOiBcIkZFLkZpbHRlckJhclNlYXJjaFwiLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRjb3VudEZpbHRlckFjdGlvbnM6IHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zLCAvLyAgSG93IG1hbnkgZmlsdGVyQ2hhbmdlZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWRcblx0XHRcdFx0Y291bnRGaWx0ZXJzOiBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5sZW5ndGgsIC8vIEhvdyBtYW55IGRpZmZlcmVudCBmaWx0ZXJzIGFyZSBhcHBsaWVkXG5cdFx0XHRcdGNvdW50VmFyaWFudEZpbHRlcnM6IHRoaXMuY291bnRWYXJpYW50RmlsdGVycywgLy8gSG93IG1hbnkgZmlsdGVyIGJlbG9uZyB0byBhIHZhcmlhbnRcblx0XHRcdFx0dmFyaWFudExheWVyOiB0aGlzLmZpbHRlckJhckFQSS5nZXRWYXJpYW50KCk/LmxheWVyID8/IFwiTm9uZVwiLCAvLyB8IFwiU0FQXCIgfCBcIkN1c3RvbVwiOyAvLyBUeXBlIG9mIHZhcmlhbnRcblx0XHRcdFx0YXV0b0xvYWQ6IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gPT09IFwiVmFyaWFudFwiLCAvLyBJcyB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWRcblx0XHRcdFx0c2VhcmNoVXNlZDogY29uZGl0aW9ucy4kc2VhcmNoID8gISFPYmplY3Qua2V5cyhjb25kaXRpb25zLiRzZWFyY2gpLmxlbmd0aCA6IGZhbHNlLCAvLyBXYXMgdGhlIHNlYXJjaCBmaWVsZCBpbiB0aGUgZmlsdGVyYmFyIHVzZWQ/XG5cdFx0XHRcdGZpbHRlck5hbWVzOiBmaWx0ZXJOYW1lcyAvLyBQcm9wZXJ0eSBuYW1lcyBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFJlc2V0IHRoZSBjb3VudFxuXHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXHR9XG5cblx0Z2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiBzdHJpbmcge1xuXHRcdGxldCBmaWx0ZXJOYW1lcyA9IFwiXCI7XG5cdFx0T2JqZWN0LmtleXMoY29uZGl0aW9ucykuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29uZGl0aW9uICE9IFwiJHNlYXJjaFwiKSB7XG5cdFx0XHRcdGZpbHRlck5hbWVzICs9IGNvbmRpdGlvbiArIFwiO1wiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmaWx0ZXJOYW1lcztcblx0fVxufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJCYXJTdGF0ZSA9IHtcblx0aW5uZXJTdGF0ZT86IHtcblx0XHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0aW5pdGlhbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdFx0ZnVsbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdH07XG59O1xuXG50eXBlIFZhcmlhbnRJRHMgPSB7XG5cdHNQYWdlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IHN0cmluZztcblx0c1RhYmxlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNDaGFydFZhcmlhbnRJZDogc3RyaW5nO1xufTtcblxudHlwZSBWYXJpYW50T2JqZWN0ID0ge1xuXHRhdXRob3I6IHN0cmluZztcblx0Y2hhbmdlOiBib29sZWFuO1xuXHRjb250ZXh0czogb2JqZWN0O1xuXHRleGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdGZhdm9yaXRlOiBib29sZWFuO1xuXHRrZXk6IHN0cmluZztcblx0b3JpZ2luYWxDb250ZXh0czogb2JqZWN0O1xuXHRvcmlnaW5hbEV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0b3JpZ2luYWxGYXZvcml0ZTogYm9vbGVhbjtcblx0b3JpZ2luYWxUaXRsZTogc3RyaW5nO1xuXHRvcmlnaW5hbFZpc2libGU6IGJvb2xlYW47XG5cdHJlbW92ZTogYm9vbGVhbjtcblx0cmVuYW1lOiBib29sZWFuO1xuXHRzaGFyaW5nOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG59O1xuXG5lbnVtIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdENvbnRyb2wgPSBcIkNvbnRyb2xcIixcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHROb25lID0gXCJOb25lXCJcbn1cblxuY29uc3QgRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJEaXNwbGF5Q3VycmVuY3lcIjtcbmNvbnN0IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJQX0Rpc3BsYXlDdXJyZW5jeVwiO1xuXG50eXBlIExSVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IGJvb2xlYW4gfCBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFRoZSBrZXkgdHlwZSBpbmNsdWRlcyAnYm9vbGVhbicgdG8gc3VwcG9ydCBsZWdhY3kgc2NlbmFyaW9zIHdoZXJlICdkYXRhTG9hZGVkJyBtYXkgYmUgcHJlc2VudCBhdCB0aGUgcGFyZW50IGxldmVsIGFzIGEgYm9vbGVhbixcbiAqIGFzIHdlbGwgYXMgYXQgaW5zdGFuY2UgbGV2ZWwgYXMgYW4gb2JqZWN0IHdpdGggYSAnZGF0YUxvYWRlZCcgcHJvcGVydHkuIFRoaXMgZW5zdXJlcyBjb21wYXRpYmlsaXR5IHdpdGggYm90aCB1c2FnZXMuXG4gKi9cbnR5cGUgQWRkaXRpb25hbFN0YXRlcyA9IHtcblx0ZGF0YUxvYWRlZD86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHsgZGF0YUxvYWRlZD86IGJvb2xlYW4gfSB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59O1xuXG5pbnRlcmZhY2UgRmlsdGVyQmFyQVBJIGV4dGVuZHMgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIHt9XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRmlsdGVyQmFyIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2ZpbHRlckJhci9maWx0ZXJCYXJEZWZhdWx0IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2Nrc31cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgU2VsZWN0aW9uRmllbGRzIGFubm90YXRpb24gaXMgZXhwZWN0ZWQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWx0ZXJCYXIgaWQ9XCJNeUZpbHRlckJhclwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpbHRlckJhclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiwge1xuXHRyZXR1cm5UeXBlczogW1wic2FwLnVpLmNvcmUuQ29udHJvbFwiXVxufSlcbkBtaXhpbihGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIpXG5jbGFzcyBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBNYWNyb0FQSSB7XG5cdGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0X2luaXRpYWxTdGF0ZVByb21pc2U6IFByb21pc2VLZWVwZXI8dm9pZD4gPSBuZXcgUHJvbWlzZUtlZXBlcigpO1xuXG5cdF9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfaGFzUGVuZGluZ0ZpbHRlcnMgPSB0cnVlO1xuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInZpZXdTdGF0ZVwiLCBcInJldHJpZXZlQWRkaXRpb25hbFN0YXRlc1wiKVxuXHRwdWJsaWMgcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKGFkZGl0aW9uYWxTdGF0ZXM6IEFkZGl0aW9uYWxTdGF0ZXMpOiB2b2lkIHtcblx0XHRhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV0gPSB7IGRhdGFMb2FkZWQ6ICF0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyB9O1xuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwidmlld1N0YXRlXCIsIFwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzXCIpXG5cdHB1YmxpYyBhcHBseUFkZGl0aW9uYWxTdGF0ZXMoYWRkaXRpb25hbFN0YXRlczogQWRkaXRpb25hbFN0YXRlcyk6IHZvaWQge1xuXHRcdGNvbnN0IGluc3RhbmNlU3RhdGUgPSBhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV07XG5cdFx0bGV0IGluc3RhbmNlRGF0YUxvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGluc3RhbmNlU3RhdGUgPT09IFwib2JqZWN0XCIgJiYgaW5zdGFuY2VTdGF0ZSAhPT0gbnVsbCkge1xuXHRcdFx0aW5zdGFuY2VEYXRhTG9hZGVkID0gaW5zdGFuY2VTdGF0ZS5kYXRhTG9hZGVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnN0YW5jZURhdGFMb2FkZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyZW50RGF0YUxvYWRlZCA9XG5cdFx0XHRcImRhdGFMb2FkZWRcIiBpbiBhZGRpdGlvbmFsU3RhdGVzICYmIHR5cGVvZiBhZGRpdGlvbmFsU3RhdGVzLmRhdGFMb2FkZWQgPT09IFwiYm9vbGVhblwiID8gYWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IHRydWUgfHwgaW5zdGFuY2VEYXRhTG9hZGVkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9XG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IGZhbHNlIHx8IGluc3RhbmNlRGF0YUxvYWRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgeyBfYlNlYXJjaFRyaWdnZXJlZD86IGJvb2xlYW4gfSkuX2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSBieSBzYXAuZmUgKFNBUCBGaW9yaSBlbGVtZW50cykgYW5kXG5cdCAqIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIGludGVybmFsIE1EQy1GaWx0ZXJCYXIgc2VhcmNoIGV2ZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbFNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmaWx0ZXJDaGFuZ2VkITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudFBhcmFtZXRlcnMsIEZpbHRlckJhckFQST4+O1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIHByZXNzZWQuIFRoaXMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBlbmFibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRhZnRlckNsZWFyITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHNhcC5mZSAoU0FQIEZpb3JpIGVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbEZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSB0ZWxlbWV0cnk/OiBGaWx0ZXJCYXJUZWxlbWV0cnk7XG5cblx0Y29uc3RydWN0b3IocHJvcHM/OiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEZpbHRlckJhckFQST4gJiBFdmVudHNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBVSTVFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93Py5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGV2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvbnMgPSAob0ZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCkgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRcdGNvbnN0IHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzID0gdGhpcy5fcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhvRmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vblNlYXJjaChldmVudFBhcmFtZXRlcnMsIGNvbmRpdGlvbnMpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMgfSwgZXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInNlYXJjaFwiLCBtZXJnZSh7IHJlYXNvbjogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiB9LCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgPSBmYWxzZTtcblx0XHRcdGlmICghdGhpcy5saXZlTW9kZSkge1xuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZUZpbHRlckNoYW5nZWQob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG9FdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGNvbnN0IG9Db25kaXRpb25zID0gZmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKTtcblx0XHRcdGNvbnN0IGV2ZW50UGFyYW1ldGVyczogb2JqZWN0ID0gdGhpcy5fcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhmaWx0ZXJCYXIpO1xuXHRcdFx0dGhpcy50ZWxlbWV0cnk/Lm9uRmlsdGVyc0NoYW5nZWQodGhpcy5fZ2V0RmlsdGVyQmFyUmVhc29uKGZpbHRlckJhcikpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgbWVyZ2UoeyBjb25kaXRpb25zOiBvQ29uZGl0aW9ucyB9LCBvRXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImZpbHRlckNoYW5nZWRcIiwgZXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdC8vIFNldCBoYXNQZW5kaW5nRmlsdGVycyB0byB0cnVlIG9ubHkgaWYgY29uZGl0aW9uc0Jhc2VkIGlzIHRydWVcblx0XHRcdGlmIChvRXZlbnRQYXJhbWV0ZXJzPy5jb25kaXRpb25zQmFzZWQpIHtcblx0XHRcdFx0dGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJSZWFzb24oZmlsdGVyQmFyOiBGaWx0ZXJCYXIgJiB7IF9zUmVhc29uPzogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBmaWx0ZXJCYXI/Ll9zUmVhc29uID8/IFwiXCI7XG5cdH1cblxuXHRfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQYXJ0aWFsPEludGVybmFsQmluZGluZ0luZm8+IHtcblx0XHRjb25zdCB7IHBhcmFtZXRlcnMsIGZpbHRlcnMsIHNlYXJjaCB9ID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVycyhvRmlsdGVyQmFyIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wpIHx8IHt9O1xuXG5cdFx0cmV0dXJuIHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH07XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBmaWx0ZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoZSBmaWx0ZXIgdmFsdWVzIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHQgKiBFYWNoIGZpbHRlciB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgcHJpbWl0aXZlIHZhbHVlLlxuXHQgKiBAcGFyYW0gc0NvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIFtzT3BlcmF0b3JdIFRoZSBvcGVyYXRvciB0byBiZSB1c2VkIChvcHRpb25hbCkgLSBpZiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBvcGVyYXRvciAoRVEpIHdpbGwgYmUgdXNlZFxuXHQgKiBAcGFyYW0gdlZhbHVlcyBUaGUgdmFsdWVzIHRvIGJlIGFwcGxpZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyVmFsdWVzKFxuXHRcdHNDb25kaXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c09wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dlZhbHVlcz86IHVuZGVmaW5lZCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcblx0XHRcdHZWYWx1ZXMgPSBzT3BlcmF0b3I7XG5cdFx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuc2V0RmlsdGVyVmFsdWVzKHRoaXMuY29udGVudCwgc0NvbmRpdGlvblBhdGgsIHZWYWx1ZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuc2V0RmlsdGVyVmFsdWVzKHRoaXMuY29udGVudCwgc0NvbmRpdGlvblBhdGgsIHNPcGVyYXRvciwgdlZhbHVlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBBY3RpdmUgRmlsdGVycyBUZXh0IFN1bW1hcnkgZm9yIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBBY3RpdmUgZmlsdGVycyBzdW1tYXJ5IGFzIHRleHRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0QWN0aXZlRmlsdGVyc1RleHQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCk/LmZpbHRlcnNUZXh0IHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgYWxsIHRoZSBmaWx0ZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmVcblx0ICogYWxvbmcgd2l0aCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFjdGl2ZSBmaWx0ZXJzIGFuZCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlcnMoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0RmlsdGVycyh0aGlzLmNvbnRlbnQgYXMgSUZpbHRlckNvbnRyb2wpIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIHRoZSBBUEkgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBpZiBmaWx0ZXIgZ28gaXMgdHJpZ2dlcmVkIHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGdldHMgcmVqZWN0ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHRyaWdnZXJTZWFyY2goKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0YXdhaXQgZmlsdGVyQmFyLndhaXRGb3JJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZmlsdGVyQmFyLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VtYW50aWNEYXRlRmlsdGVyQXBwbGllZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmhhc1NlbWFudGljRGF0ZU9wZXJhdGlvbnModGhpcy5jb250ZW50LmdldENvbmRpdGlvbnMoKSwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgcmV0dXJucyBhbGwgdGhlIGZpbHRlciB2YWx1ZXMgdGhhdCBhcmUgc2V0IGluIHRoZSBmaWx0ZXIgYmFyLCBpbmNsdWRpbmcgdGhlIHRleHQgZnJvbSB0aGUgc2VhcmNoIGZpZWxkICh3aXRoICRzZWFyY2ggYXMgdGhlIHByb3BlcnR5IG5hbWUpLiBIb3dldmVyLCBpdCBkb2Vzbid0IHJldHVybiBhbnkgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiB0aGF0IHVzZXMgYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIGEge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldFNlbGVjdGlvblZhcmlhbnQoKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGF3YWl0IHN0YXRlSGVscGVyLmdldFNlbGVjdGlvblZhcmlhbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG5cdFx0aWYgKGNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXI/LmdldFZpZXcoKSxcblx0XHRcdFx0YXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0ID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCh0aGlzLm1ldGFQYXRoKTtcblx0XHRcdGlmIChkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSkge1xuXHRcdFx0XHRjb25zdCBzQ29udGV4dFVybCA9XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgJiZcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZT8uY29uc3RydWN0Q29udGV4dFVybChkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSwgdmlldy5nZXRNb2RlbCgpKTtcblx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5zZXRGaWx0ZXJDb250ZXh0VXJsKHNDb250ZXh0VXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIG1hbmRhdG9yeSBmaWx0ZXIgcHJvcGVydHkgbmFtZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG1hbmRhdG9yeSBmaWx0ZXIgcHJvcGVydHkgbmFtZXNcblx0ICovXG5cdGdldE1hbmRhdG9yeUZpbHRlclByb3BlcnR5TmFtZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiAodGhpcy5jb250ZW50LmdldFByb3BlcnR5SW5mb1NldCgpIGFzIENvbnRyb2xQcm9wZXJ0eUluZm9bXSlcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGZpbHRlclByb3ApIHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlclByb3AucmVxdWlyZWQ7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAocmVxdWlyZWRQcm9wKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFByb3AuY29uZGl0aW9uUGF0aDtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlsdGVyIGJhciBwYXJhbWV0ZXJzIGZvciBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cblx0ICogQHJldHVybnMgQXJyYXkgb2YgcGFyYW1ldGVycyBjb25maWd1cmVkIGluIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlXG5cdCAqL1xuXG5cdGdldFBhcmFtZXRlcnMoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZmlsdGVyQmFyLmRhdGEoXCJwYXJhbWV0ZXJzXCIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSA/IHBhcmFtZXRlcnMgOiBKU09OLnBhcnNlKHBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRnZXRWYXJpYW50KCk6IFZhcmlhbnREYXRhIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY3VycmVudFZhcmlhbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhcmlhbnRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCIkRmxleFZhcmlhbnRzXCIpIGFzIFZhcmlhbnRNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHZhcmlhbnRCYWNrUmVmZXJlbmNlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnRCYWNrcmVmZXJlbmNlKCk7XG5cblx0XHRcdGlmICh2YXJpYW50TW9kZWwgJiYgdmFyaWFudEJhY2tSZWZlcmVuY2UpIHtcblx0XHRcdFx0Y3VycmVudFZhcmlhbnQgPSB2YXJpYW50TW9kZWwuZ2V0VmFyaWFudCh2YXJpYW50TW9kZWwuZ2V0Q3VycmVudFZhcmlhbnRSZWZlcmVuY2UodmFyaWFudEJhY2tSZWZlcmVuY2UpKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoXCJDb3VsZG4ndCBmZXRjaCB2YXJpYW50IFwiLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50VmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBvciBoaWRlcyBhbnkgZmlsdGVyIGZpZWxkIGZyb20gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBoaWRkZW4gaW5zaWRlIHRoZSBhZGFwdGF0aW9uIGRpYWxvZyBhbmQgbWF5IGJlIHJlLWFkZGVkLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gdmlzaWJsZSBXaGV0aGVyIGl0IHNob3VsZCBiZSBzaG93biBvciBoaWRkZW5cblx0ICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIG9uY2UgdGhlIGNoYW5nZSBpbiB2aXNpYmlsaXR5IHdhcyBhcHBsaWVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldEZpbHRlckZpZWxkVmlzaWJsZShjb25kaXRpb25QYXRoOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCwgeyBpdGVtczogW3sgbmFtZTogY29uZGl0aW9uUGF0aCwgdmlzaWJsZSB9XSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGZpZWxkLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZpbHRlciBmaWVsZCBpcyB2aXNpYmxlIG9yIG5vdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRyZXR1cm4gISFzdGF0ZS5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbmRpdGlvblBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUge0BsaW5rIHNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudH0gY29udHJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlciBiYXIuXG5cdCAqL1xuXHRnZXRWYXJpYW50TWFuYWdlbWVudCgpOiBWYXJpYW50TWFuYWdlbWVudCB7XG5cdFx0Y29uc3QgdmFyaWFudEJhY2tyZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblx0XHRpZiAodmFyaWFudEJhY2tyZWZlcmVuY2UpIHtcblx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZhcmlhbnRCYWNrcmVmZXJlbmNlKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBWYXJpYW50IGJhY2sgcmVmZXJlbmNlIG5vdCBkZWZpbmVkIG9uIHRoZSBmaWx0ZXIgYmFyICR7dGhpcy5pZH1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFyaWFudCBiYWNrIHJlZmVyZW5jZSBhc3NvY2lhdGlvbiBmb3IgdGhpcyBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHZhcmlhbnQgVGhlIGBWYXJpYW50TWFuYWdlbWVudGAgaW5zdGFuY2UgdG8gc2V0IGFzIHRoZSBiYWNrIHJlZmVyZW5jZS5cblx0ICovXG5cdHNldFZhcmlhbnRCYWNrUmVmZXJlbmNlKHZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBpc0xpdmVNb2RlID0gY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGlmICghaXNMaXZlTW9kZSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFZhcmlhbnRCYWNrcmVmZXJlbmNlKHZhcmlhbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgdmFyaWFudCBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIEtleSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhcmlhbnQuIEluIGNhc2UgdGhlIG1vZGVsIGlzIG5vdCB5ZXQgc2V0LCBgbnVsbGAgd2lsbCBiZSByZXR1cm5lZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0Q3VycmVudFZhcmlhbnRLZXkoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG5ldyBzZWxlY3RlZCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHBhcmFtIGtleSBLZXkgb2YgdGhlIHZhcmlhbnQgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQuIElmIHRoZSBwYXNzZWQga2V5IGRvZXNuJ3QgaWRlbnRpZnkgYSB2YXJpYW50LCBpdCB3aWxsIGJlIGlnbm9yZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNldEN1cnJlbnRWYXJpYW50S2V5KGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuc2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlbmFibGVtZW50IG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciB0aGUgZmllbGQgc2hvdWxkIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmdldEludGVybmFsTW9kZWwoKT8uc2V0RGF0YShcblx0XHRcdHtcblx0XHRcdFx0W3RoaXMuY29udGVudC5kYXRhKFwibG9jYWxJZFwiKV06IHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHM6IHsgW25hbWVdOiB7IGVkaXRNb2RlOiBlbmFibGVkID8gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSA6IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQgfSB9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWx0ZXJGaWVsZCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRGaWx0ZXJGaWVsZEVuYWJsZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpPy5nZXRQcm9wZXJ0eShgLyR7dGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpfS9maWx0ZXJGaWVsZHMvJHtuYW1lfS9lZGl0TW9kZWApID09PVxuXHRcdFx0RmllbGRFZGl0TW9kZS5EaXNhYmxlZFxuXHRcdFx0PyBmYWxzZVxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnQge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb24gdmFyaWFudCB0byBhcHBseSB0byB0aGUgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgSWYgdHJ1ZSwgd2UgdHJ5IHRvIGZpbmQgdGhlIGFzc29jaWF0ZWQgVGV4dCB2YWx1ZSBmb3IgZWFjaCBwcm9wZXJ0eSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCAodG8gYXZvaWQgZmV0Y2hpbmcgaXQgZnJvbSB0aGUgc2VydmVyKVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmRpdGlvbnNcblx0ICovXG5cdGFzeW5jIGNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRwcmVmaWxsRGVzY3JpcHRpb25zOiBib29sZWFuXG5cdCk6IFByb21pc2U8U3RhdGVVdGlsRmlsdGVyPiB7XG5cdFx0cmV0dXJuIHN0YXRlSGVscGVyLmNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0XHR0aGlzLmNvbnRlbnQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0cHJlZmlsbERlc2NyaXB0aW9ucyxcblx0XHRcdHRoaXMuY29udGVudD8uZ2V0TW9kZWwoKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGFsbCBpbnB1dCB2YWx1ZXMgb2YgdmlzaWJsZSBmaWx0ZXIgZmllbGRzIGluIHRoZSBmaWx0ZXIgYmFyIHdpdGggZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGNsZWFyIEVkaXQgRmlsdGVyIG9yIG5vdC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNsZWFyRWRpdEZpbHRlciBXaGV0aGVyIHRvIGNsZWFyIHRoZSBlZGl0IGZpbHRlciBvciBsZXQgaXQgYmUgZGVmYXVsdCB2YWx1ZSAnQWxsJyBpbnN0ZWFkXG5cdCAqL1xuXHRhc3luYyBfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXI6IEZpbHRlckJhciwgb3B0aW9ucz86IHsgY2xlYXJFZGl0RmlsdGVyOiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCBzdGF0ZUhlbHBlci5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXIsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIHRoZSBmaWx0ZXIgYmFyLiBOb3RlOiBzZXRTZWxlY3Rpb25WYXJpYW50IHdpbGwgY2xlYXIgZXhpc3RpbmcgZmlsdGVycyBhbmQgdGhlbiBhcHBseSB0aGUgU2VsZWN0aW9uVmFyaWFudCB2YWx1ZXMuXG5cdCAqIE5vdGU6IFRoaXMgbWV0aG9kIGNhbm5vdCBzZXQgdGhlIHNlYXJjaCBmaWVsZCB0ZXh0IG9yIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgcmVsaWVzIG9uIGEgY3VzdG9tIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBwcmVmaWxsRGVzY3JpcHRpb25zIE9wdGlvbmFsLiBJZiB0cnVlLCB3ZSB3aWxsIHVzZSB0aGUgYXNzb2NpYXRlZCB0ZXh0IHByb3BlcnR5IHZhbHVlcyAoaWYgdGhleSdyZSBhdmFpbGFibGUgaW4gdGhlIHNlbGVjdGlvblZhcmlhbnQpIHRvIGRpc3BsYXkgdGhlIGZpbHRlciB2YWx1ZSBkZXNjcmlwdGlvbnMsIGluc3RlYWQgb2YgbG9hZGluZyB0aGVtIGZyb20gdGhlIGJhY2tlbmRcblx0ICogQHBhcmFtIGZyb21OYXZpZ2F0aW9uUGFyYW1ldGVycyBQUklWQVRFXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRwcmVmaWxsRGVzY3JpcHRpb25zID0gZmFsc2UsXG5cdFx0ZnJvbU5hdmlnYXRpb25QYXJhbWV0ZXJzID0gZmFsc2Vcblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc0xpdmVNb2RlID0gY29udGVudCAmJiBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0bGV0IHJlc3VsdDogeyBkaWZmU3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlOyBhcHBseVN0YXRlUmVzdWx0OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGlzTGl2ZU1vZGUpIHtcblx0XHRcdGNvbnRlbnQuZW5hYmxlUmVxdWVzdHMoZmFsc2UpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgc3RhdGVIZWxwZXIuc2V0U2VsZWN0aW9uVmFyaWFudFRvTWRjQ29udHJvbChcblx0XHRcdFx0dGhpcy5nZXRDb250ZW50KCksXG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdHByZWZpbGxEZXNjcmlwdGlvbnMsXG5cdFx0XHRcdGZyb21OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHRcdHJldHVybiByZXN1bHQ/LmFwcGx5U3RhdGVSZXN1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEJ1aWxkaW5nYmxvY2sgOiBGaWx0ZXJCYXIgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKGlzTGl2ZU1vZGUpIHtcblx0XHRcdFx0Y29udGVudC5lbmFibGVSZXF1ZXN0cyh0cnVlLCByZXN1bHQ/LmRpZmZTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBieSB0aGUgTURDIHN0YXRlIHV0aWwgd2hlbiB0aGUgc3RhdGUgZm9yIHRoaXMgY29udHJvbCdzIGNoaWxkIGhhcyBjaGFuZ2VkLlxuXHQgKi9cblx0aGFuZGxlU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb25kaXRpb25QYXRoKHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPSBGaWx0ZXJVdGlscy5nZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkodGhpcy5jb250ZW50LCBwcm9wZXJ0eVBhdGgpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID8gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgsIGZhbHNlLCB0cnVlKSA6IHVuZGVmaW5lZCkgPz9cblx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBzaG93RmlsdGVyRmllbGQobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdGNvbnN0IGNvbmRpdGlvblBhdGggPSB0aGlzLmdldENvbmRpdGlvblBhdGgobmFtZSk7XG5cdFx0Y29uc3QgdGFyZ2V0RmlsdGVyRmllbGQgPSAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0aWYgKCF0YXJnZXRGaWx0ZXJGaWVsZCkge1xuXHRcdFx0c3RhdGUuaXRlbXMucHVzaCh7IG5hbWU6IGNvbmRpdGlvblBhdGggfSk7XG5cdFx0fVxuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCBzdGF0ZSk7XG5cdH1cblxuXHRhc3luYyBvcGVuVmFsdWVIZWxwRm9yRmlsdGVyRmllbGQobmFtZTogc3RyaW5nLCBpbnB1dFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxDb25kaXRpb25PYmplY3RbXT4ge1xuXHRcdGNvbnN0IGNvbmRpdGlvblBhdGggPSB0aGlzLmdldENvbmRpdGlvblBhdGgobmFtZSk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3QgZmlsdGVyRmllbGQgPSB0aGlzLmNvbnRlbnQuZ2V0RmlsdGVySXRlbXMoKS5maW5kKChpdGVtKSA9PiBpdGVtLmdldFByb3BlcnR5S2V5KCkgPT09IGNvbmRpdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChmaWx0ZXJGaWVsZD8uZ2V0VmFsdWVIZWxwKCkpIGFzIFZhbHVlSGVscCB8IHVuZGVmaW5lZDtcblx0XHRcdGlmICghdmFsdWVIZWxwIHx8ICFmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKGBWYWx1ZUhlbHAgZm9yIGZpbHRlciBmaWVsZCAke25hbWV9IG5vdCBmb3VuZGApKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWx1ZUhlbHAuYXR0YWNoRXZlbnRPbmNlKFwiY2xvc2VkXCIsICgpID0+IHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZUhlbHAuZ2V0Q29uZGl0aW9ucygpIGFzIENvbmRpdGlvbk9iamVjdFtdKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQoZmlsdGVyRmllbGQgYXMgdW5rbm93biBhcyB7IF9vRm9jdXNJbmZvOiBvYmplY3QgfSkuX29Gb2N1c0luZm8gPSB7IHRhcmdldEluZm86IHsgc2lsZW50OiB0cnVlIH0gfTtcblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgb25mb2N1c2luPzogRnVuY3Rpb24gfSkub25mb2N1c2luPy4obmV3IGpRdWVyeS5FdmVudChcImZvY3VzaW5cIikpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdChmaWx0ZXJGaWVsZC5nZXRBZ2dyZWdhdGlvbihcIl9jb250ZW50XCIpIGFzIElucHV0W10pWzBdLmZpcmVWYWx1ZUhlbHBSZXF1ZXN0KHtcblx0XHRcdFx0XHRmcm9tS2V5Ym9hcmQ6IHRydWUsXG5cdFx0XHRcdFx0X3VzZXJJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBJbnB1dCRWYWx1ZUhlbHBSZXF1ZXN0RXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdH0sIDIwMCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRDb2xsYXBzZWRGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQ7XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IEZpbHRlckJhckFQSTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0RBO0VBQUEsSUFDTUEsa0JBQWtCO0lBS3ZCLFNBQUFBLG1CQUE2QkMsWUFBMEIsRUFBRTtNQUFBLEtBSmpEQyxrQkFBa0IsR0FBRyxD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
1045
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNyIsIl9kZWM4IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2RlYzEzIiwiZXZlbnQiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJ4bWxFdmVudEhhbmRsZXIiLCJfZGVjMTkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hY3JvQVBJIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiX2luaXRpYWxTdGF0ZVByb21pc2UiLCJQcm9taXNlS2VlcGVyIiwiX2JTZWFyY2hUcmlnZ2VyZWQiLCJfaGFzUGVuZGluZ0ZpbHRlcnMiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsImF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvMiIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFkZGl0aW9uYWxTdGF0ZXMiLCJnZXRJZCIsImRhdGFMb2FkZWQiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJpbnN0YW5jZVN0YXRlIiwiaW5zdGFuY2VEYXRhTG9hZGVkIiwidW5kZWZpbmVkIiwicGFyZW50RGF0YUxvYWRlZCIsInRyaWdnZXJTZWFyY2giLCJjb250ZW50Iiwid2FpdEZvckluaXRpYWxTdGF0ZSIsInByb21pc2UiLCJnZXRDb250cm9sU3RhdGUiLCJjb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQiLCJuYXZpZ2F0aW9uVHlwZSIsImNvbnRyb2xsZXIiLCJ2aWV3IiwiZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJieUlkIiwiY3VycmVudFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIk5hdlR5cGUiLCJ4QXBwU3RhdGUiLCJpbml0aWFsTG9hZCIsIkluaXRpYWxMb2FkTW9kZSIsIkVuYWJsZWQiLCJfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyVk0iLCJfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50IiwiX2FwcGx5U2VsZWN0aW9uVmFyaWFudCIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJmaWx0ZXJWYXJpYW50QXBwbGllZCIsImZpbHRlckJhciIsImdldENvbnRlbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic3YiLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJzdkRlZmF1bHRzIiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3VsZEFwcGx5QXBwU3RhdGUiLCJfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZSIsIl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TViIsInN2RGVmYXVsdHNBcmVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCIsImdldERlZmF1bHRWYXJpYW50S2V5IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwidXNlRkxQRGVmYXVsdFZhbHVlcyIsImdldFBhcmVudCIsInN2VG9TZXQiLCJfZ2V0QWRqdXN0ZWRTViIsInNldFNlbGVjdGlvblZhcmlhbnQiLCJfZW5hYmxlRmlsdGVyQmFyIiwiZmlsdGVyQmFyQ29udHJvbCIsInByZXZlbnRJbml0aWFsU2VhcmNoIiwiZm5PblNlYXJjaCIsImdldFN1c3BlbmRTZWxlY3Rpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJlbmFibGVSZXF1ZXN0cyIsImFwcFN0YXRlU1YiLCJhZGp1c3RlZFNWIiwiU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTk9iamVjdCIsImFscmVhZHlBcHBsaWVkU1YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiYXBwbGllZFNlbE9wdE5hbWVzIiwicmVkdWNlIiwic3ZDb3B5Iiwic2VsT3B0aW9uTmFtZSIsInN2U2VsT3B0cyIsImdldFNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbnMiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwiX3ByZXZlbnRJbml0aWFsU2VhcmNoIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJvQ3VycmVudFZhcmlhbnQiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsImV4ZWN1dGVPblNlbGVjdCIsImlzRW1wdHkiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJnZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSIsIl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZCIsInN2T3B0aW9ucyIsImRlZmF1bHRTVk9wdGlvbnMiLCJkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzIiwibm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNpZ24iLCJvcHRpb24iLCJsb3ciLCJoaWdoIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNQYXJhbWV0ZXJpemVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZW50aXR5UHJvcGVydGllcyIsInNvbWUiLCJwYXJhbWV0ZXIiLCJuYW1lIiwiX3R5cGUiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJDYXBhYmlsaXRpZXMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwidmFsdWUiLCJyZXFTdGRWYXJpYW50IiwidmFyaWFudEtleSIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJpbmxpbmVFZGl0RmxvdyIsImlubGluZUVkaXREaXNjYXJkIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwibGl2ZU1vZGUiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImhhbmRsZUZpbHRlckNoYW5nZWQiLCJvRXZlbnRQYXJhbWV0ZXJzIiwiZ2V0TGl2ZU1vZGUiLCJVT01WYWxpZGF0aW9uRGVsZWdhdGUiLCJ2YWxpZGF0ZUFsbFVPTUZpZWxkcyIsIm9Db25kaXRpb25zIiwiX2dldEZpbHRlckJhclJlYXNvbiIsImNvbmRpdGlvbnNCYXNlZCIsIl9zUmVhc29uIiwiZmlsdGVycyIsInNlYXJjaCIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVycyIsInNldEZpbHRlclZhbHVlcyIsInNDb25kaXRpb25QYXRoIiwic09wZXJhdG9yIiwidlZhbHVlcyIsImdldEFjdGl2ZUZpbHRlcnNUZXh0IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0Iiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsInNldFZhcmlhbnRCYWNrcmVmZXJlbmNlIiwic2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRGaWx0ZXJGaWVsZEVuYWJsZWQiLCJlbmFibGVkIiwiZ2V0SW50ZXJuYWxNb2RlbCIsInNldERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIkRpc2FibGVkIiwiZ2V0RmlsdGVyRmllbGRFbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIiwicHJlZmlsbERlc2NyaXB0aW9ucyIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwib3B0aW9ucyIsImZyb21OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInJlc3VsdCIsInNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wiLCJhcHBseVN0YXRlUmVzdWx0IiwiZGlmZlN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudHNPZiwgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sU3RhdGUsIExlZ2FjeUZpbHRlckJhclN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBJbml0aWFsTG9hZE1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgc3RhdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsU3RhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHsgTmF2VHlwZSB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRWYWx1ZUhlbHBSZXF1ZXN0RXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50RGF0YSB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQsXG5cdEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudFBhcmFtZXRlcnMsXG5cdEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnRcbn0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyIGFzIFN0YXRlVXRpbEZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTWV0YU1vZGVsLCBkZWZhdWx0IGFzIE9EYXRhTWV0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBVT01WYWxpZGF0aW9uRGVsZWdhdGUgZnJvbSBcIi4vVU9NVmFsaWRhdGlvbkRlbGVnYXRlXCI7XG5pbXBvcnQgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIGZyb20gXCIuL21peGluL0ZpbHRlckJhckFQSVN0YXRlSGFuZGxlclwiO1xuXG4vLyBUcmFjayB0ZWxlbWV0cnkgY29udGVudCBmb3IgdGhlIGZpbHRlckJhclxuY2xhc3MgRmlsdGVyQmFyVGVsZW1ldHJ5IHtcblx0cHJpdmF0ZSBjb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXG5cdHByaXZhdGUgY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWx0ZXJCYXJBUEk6IEZpbHRlckJhckFQSSkge31cblxuXHRvbkZpbHRlcnNDaGFuZ2VkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChyZWFzb24gPT09IFwiVmFyaWFudFwiKSB7XG5cdFx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMrKztcblx0XHR9XG5cdH1cblxuXHRvblNlYXJjaChldmVudFBhcmFtZXRlcnM6IHsgcmVhc29uPzogc3RyaW5nIH0sIGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlck5hbWVzID0gdGhpcy5nZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnMpO1xuXHRcdHRoaXMuZmlsdGVyQmFyQVBJLmdldFBhZ2VDb250cm9sbGVyKCk/LnRlbGVtZXRyeS5zdG9yZUFjdGlvbih7XG5cdFx0XHR0eXBlOiBcIkZFLkZpbHRlckJhclNlYXJjaFwiLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRjb3VudEZpbHRlckFjdGlvbnM6IHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zLCAvLyAgSG93IG1hbnkgZmlsdGVyQ2hhbmdlZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWRcblx0XHRcdFx0Y291bnRGaWx0ZXJzOiBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5sZW5ndGgsIC8vIEhvdyBtYW55IGRpZmZlcmVudCBmaWx0ZXJzIGFyZSBhcHBsaWVkXG5cdFx0XHRcdGNvdW50VmFyaWFudEZpbHRlcnM6IHRoaXMuY291bnRWYXJpYW50RmlsdGVycywgLy8gSG93IG1hbnkgZmlsdGVyIGJlbG9uZyB0byBhIHZhcmlhbnRcblx0XHRcdFx0dmFyaWFudExheWVyOiB0aGlzLmZpbHRlckJhckFQSS5nZXRWYXJpYW50KCk/LmxheWVyID8/IFwiTm9uZVwiLCAvLyB8IFwiU0FQXCIgfCBcIkN1c3RvbVwiOyAvLyBUeXBlIG9mIHZhcmlhbnRcblx0XHRcdFx0YXV0b0xvYWQ6IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gPT09IFwiVmFyaWFudFwiLCAvLyBJcyB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWRcblx0XHRcdFx0c2VhcmNoVXNlZDogY29uZGl0aW9ucy4kc2VhcmNoID8gISFPYmplY3Qua2V5cyhjb25kaXRpb25zLiRzZWFyY2gpLmxlbmd0aCA6IGZhbHNlLCAvLyBXYXMgdGhlIHNlYXJjaCBmaWVsZCBpbiB0aGUgZmlsdGVyYmFyIHVzZWQ/XG5cdFx0XHRcdGZpbHRlck5hbWVzOiBmaWx0ZXJOYW1lcyAvLyBQcm9wZXJ0eSBuYW1lcyBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFJlc2V0IHRoZSBjb3VudFxuXHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXHR9XG5cblx0Z2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiBzdHJpbmcge1xuXHRcdGxldCBmaWx0ZXJOYW1lcyA9IFwiXCI7XG5cdFx0T2JqZWN0LmtleXMoY29uZGl0aW9ucykuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29uZGl0aW9uICE9IFwiJHNlYXJjaFwiKSB7XG5cdFx0XHRcdGZpbHRlck5hbWVzICs9IGNvbmRpdGlvbiArIFwiO1wiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmaWx0ZXJOYW1lcztcblx0fVxufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJCYXJTdGF0ZSA9IHtcblx0aW5uZXJTdGF0ZT86IHtcblx0XHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0aW5pdGlhbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdFx0ZnVsbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdH07XG59O1xuXG50eXBlIFZhcmlhbnRJRHMgPSB7XG5cdHNQYWdlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IHN0cmluZztcblx0c1RhYmxlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNDaGFydFZhcmlhbnRJZDogc3RyaW5nO1xufTtcblxudHlwZSBWYXJpYW50T2JqZWN0ID0ge1xuXHRhdXRob3I6IHN0cmluZztcblx0Y2hhbmdlOiBib29sZWFuO1xuXHRjb250ZXh0czogb2JqZWN0O1xuXHRleGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdGZhdm9yaXRlOiBib29sZWFuO1xuXHRrZXk6IHN0cmluZztcblx0b3JpZ2luYWxDb250ZXh0czogb2JqZWN0O1xuXHRvcmlnaW5hbEV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0b3JpZ2luYWxGYXZvcml0ZTogYm9vbGVhbjtcblx0b3JpZ2luYWxUaXRsZTogc3RyaW5nO1xuXHRvcmlnaW5hbFZpc2libGU6IGJvb2xlYW47XG5cdHJlbW92ZTogYm9vbGVhbjtcblx0cmVuYW1lOiBib29sZWFuO1xuXHRzaGFyaW5nOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG59O1xuXG5lbnVtIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdENvbnRyb2wgPSBcIkNvbnRyb2xcIixcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHROb25lID0gXCJOb25lXCJcbn1cblxuY29uc3QgRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJEaXNwbGF5Q3VycmVuY3lcIjtcbmNvbnN0IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJQX0Rpc3BsYXlDdXJyZW5jeVwiO1xuXG50eXBlIExSVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IGJvb2xlYW4gfCBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFRoZSBrZXkgdHlwZSBpbmNsdWRlcyAnYm9vbGVhbicgdG8gc3VwcG9ydCBsZWdhY3kgc2NlbmFyaW9zIHdoZXJlICdkYXRhTG9hZGVkJyBtYXkgYmUgcHJlc2VudCBhdCB0aGUgcGFyZW50IGxldmVsIGFzIGEgYm9vbGVhbixcbiAqIGFzIHdlbGwgYXMgYXQgaW5zdGFuY2UgbGV2ZWwgYXMgYW4gb2JqZWN0IHdpdGggYSAnZGF0YUxvYWRlZCcgcHJvcGVydHkuIFRoaXMgZW5zdXJlcyBjb21wYXRpYmlsaXR5IHdpdGggYm90aCB1c2FnZXMuXG4gKi9cbnR5cGUgQWRkaXRpb25hbFN0YXRlcyA9IHtcblx0ZGF0YUxvYWRlZD86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHsgZGF0YUxvYWRlZD86IGJvb2xlYW4gfSB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59O1xuXG5pbnRlcmZhY2UgRmlsdGVyQmFyQVBJIGV4dGVuZHMgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIHt9XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRmlsdGVyQmFyIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2ZpbHRlckJhci9maWx0ZXJCYXJEZWZhdWx0IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2Nrc31cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgU2VsZWN0aW9uRmllbGRzIGFubm90YXRpb24gaXMgZXhwZWN0ZWQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWx0ZXJCYXIgaWQ9XCJNeUZpbHRlckJhclwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpbHRlckJhclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiwge1xuXHRyZXR1cm5UeXBlczogW1wic2FwLnVpLmNvcmUuQ29udHJvbFwiXVxufSlcbkBtaXhpbihGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIpXG5jbGFzcyBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBNYWNyb0FQSSB7XG5cdGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0X2luaXRpYWxTdGF0ZVByb21pc2U6IFByb21pc2VLZWVwZXI8dm9pZD4gPSBuZXcgUHJvbWlzZUtlZXBlcigpO1xuXG5cdF9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfaGFzUGVuZGluZ0ZpbHRlcnMgPSB0cnVlO1xuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInZpZXdTdGF0ZVwiLCBcInJldHJpZXZlQWRkaXRpb25hbFN0YXRlc1wiKVxuXHRwdWJsaWMgcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKGFkZGl0aW9uYWxTdGF0ZXM6IEFkZGl0aW9uYWxTdGF0ZXMpOiB2b2lkIHtcblx0XHRhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV0gPSB7IGRhdGFMb2FkZWQ6ICF0aGlzLl9oYXNQZW5kaW5nRmlsdGVycyB9O1xuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwidmlld1N0YXRlXCIsIFwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzXCIpXG5cdHB1YmxpYyBhcHBseUFkZGl0aW9uYWxTdGF0ZXMoYWRkaXRpb25hbFN0YXRlczogQWRkaXRpb25hbFN0YXRlcyk6IHZvaWQge1xuXHRcdGNvbnN0IGluc3RhbmNlU3RhdGUgPSBhZGRpdGlvbmFsU3RhdGVzW3RoaXMuZ2V0SWQoKV07XG5cdFx0bGV0IGluc3RhbmNlRGF0YUxvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGluc3RhbmNlU3RhdGUgPT09IFwib2JqZWN0XCIgJiYgaW5zdGFuY2VTdGF0ZSAhPT0gbnVsbCkge1xuXHRcdFx0aW5zdGFuY2VEYXRhTG9hZGVkID0gaW5zdGFuY2VTdGF0ZS5kYXRhTG9hZGVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnN0YW5jZURhdGFMb2FkZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyZW50RGF0YUxvYWRlZCA9XG5cdFx0XHRcImRhdGFMb2FkZWRcIiBpbiBhZGRpdGlvbmFsU3RhdGVzICYmIHR5cGVvZiBhZGRpdGlvbmFsU3RhdGVzLmRhdGFMb2FkZWQgPT09IFwiYm9vbGVhblwiID8gYWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IHRydWUgfHwgaW5zdGFuY2VEYXRhTG9hZGVkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9XG5cdFx0aWYgKHBhcmVudERhdGFMb2FkZWQgPT09IGZhbHNlIHx8IGluc3RhbmNlRGF0YUxvYWRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgeyBfYlNlYXJjaFRyaWdnZXJlZD86IGJvb2xlYW4gfSkuX2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSBieSBzYXAuZmUgKFNBUCBGaW9yaSBlbGVtZW50cykgYW5kXG5cdCAqIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIGludGVybmFsIE1EQy1GaWx0ZXJCYXIgc2VhcmNoIGV2ZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbFNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRmaWx0ZXJDaGFuZ2VkITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudFBhcmFtZXRlcnMsIEZpbHRlckJhckFQST4+O1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIHByZXNzZWQuIFRoaXMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBlbmFibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRhZnRlckNsZWFyITogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHt9LCBGaWx0ZXJCYXJBUEk+PjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHNhcC5mZSAoU0FQIEZpb3JpIGVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbEZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSB0ZWxlbWV0cnk/OiBGaWx0ZXJCYXJUZWxlbWV0cnk7XG5cblx0Y29uc3RydWN0b3IocHJvcHM/OiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEZpbHRlckJhckFQST4gJiBFdmVudHNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBVSTVFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93Py5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGV2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvbnMgPSAob0ZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCkgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRcdGNvbnN0IHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzID0gdGhpcy5fcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhvRmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vblNlYXJjaChldmVudFBhcmFtZXRlcnMsIGNvbmRpdGlvbnMpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMgfSwgZXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInNlYXJjaFwiLCBtZXJnZSh7IHJlYXNvbjogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiB9LCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5faGFzUGVuZGluZ0ZpbHRlcnMgPSBmYWxzZTtcblx0XHRcdGlmICghdGhpcy5saXZlTW9kZSkge1xuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGFzeW5jIGhhbmRsZUZpbHRlckNoYW5nZWQob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG9FdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldExpdmVNb2RlKCkpIHtcblx0XHRcdFx0YXdhaXQgVU9NVmFsaWRhdGlvbkRlbGVnYXRlLnZhbGlkYXRlQWxsVU9NRmllbGRzKGZpbHRlckJhciwgXCJmaWx0ZXJDaGFuZ2VcIik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHQvLyBTZXQgaGFzUGVuZGluZ0ZpbHRlcnMgdG8gdHJ1ZSBvbmx5IGlmIGNvbmRpdGlvbnNCYXNlZCBpcyB0cnVlXG5cdFx0XHRpZiAob0V2ZW50UGFyYW1ldGVycz8uY29uZGl0aW9uc0Jhc2VkKSB7XG5cdFx0XHRcdHRoaXMuX2hhc1BlbmRpbmdGaWx0ZXJzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyUmVhc29uKGZpbHRlckJhcjogRmlsdGVyQmFyICYgeyBfc1JlYXNvbj86IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZmlsdGVyQmFyPy5fc1JlYXNvbiA/PyBcIlwiO1xuXHR9XG5cblx0X3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcjogRmlsdGVyQmFyKTogUGFydGlhbDxJbnRlcm5hbEJpbmRpbmdJbmZvPiB7XG5cdFx0Y29uc3QgeyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfSA9IEZpbHRlclV0aWxzLmdldEZpbHRlcnMob0ZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKSB8fCB7fTtcblxuXHRcdHJldHVybiB7IHBhcmFtZXRlcnMsIGZpbHRlcnMsIHNlYXJjaCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIHNDb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSBbc09wZXJhdG9yXSBUaGUgb3BlcmF0b3IgdG8gYmUgdXNlZCAob3B0aW9uYWwpIC0gaWYgbm90IHNldCwgdGhlIGRlZmF1bHQgb3BlcmF0b3IgKEVRKSB3aWxsIGJlIHVzZWRcblx0ICogQHBhcmFtIHZWYWx1ZXMgVGhlIHZhbHVlcyB0byBiZSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldEZpbHRlclZhbHVlcyhcblx0XHRzQ29uZGl0aW9uUGF0aDogc3RyaW5nLFxuXHRcdHNPcGVyYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZWYWx1ZXM/OiB1bmRlZmluZWQgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IGJvb2xlYW5bXVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2VmFsdWVzID0gc09wZXJhdG9yO1xuXHRcdFx0cmV0dXJuIEZpbHRlclV0aWxzLnNldEZpbHRlclZhbHVlcyh0aGlzLmNvbnRlbnQsIHNDb25kaXRpb25QYXRoLCB2VmFsdWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLnNldEZpbHRlclZhbHVlcyh0aGlzLmNvbnRlbnQsIHNDb25kaXRpb25QYXRoLCBzT3BlcmF0b3IsIHZWYWx1ZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgQWN0aXZlIEZpbHRlcnMgVGV4dCBTdW1tYXJ5IGZvciB0aGUgZmlsdGVyIGJhci5cblx0ICogQHJldHVybnMgQWN0aXZlIGZpbHRlcnMgc3VtbWFyeSBhcyB0ZXh0XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEFjdGl2ZUZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dCB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGFsbCB0aGUgZmlsdGVycyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlXG5cdCAqIGFsb25nIHdpdGggdGhlIHNlYXJjaCBleHByZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhY3RpdmUgZmlsdGVycyBhbmQgdGhlIHNlYXJjaCBleHByZXNzaW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRGaWx0ZXJzKCk6IG9iamVjdCB7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmdldEZpbHRlcnModGhpcy5jb250ZW50IGFzIElGaWx0ZXJDb250cm9sKSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgQVBJIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci5cblx0ICogQHJldHVybnMgUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgaWYgZmlsdGVyIGdvIGlzIHRyaWdnZXJlZCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBnZXRzIHJlamVjdGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VyU2VhcmNoKCk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdGF3YWl0IGZpbHRlckJhci53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEJ1aWxkaW5nYmxvY2sgOiBGaWx0ZXJCYXIgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFNlbWFudGljRGF0ZU9wZXJhdG9ycy5oYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zKHRoaXMuY29udGVudC5nZXRDb25kaXRpb25zKCksIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGlvbiB2YXJpYW50IGZyb20gdGhlIGZpbHRlciBiYXIuXG5cdCAqIE5vdGU6IFRoaXMgbWV0aG9kIHJldHVybnMgYWxsIHRoZSBmaWx0ZXIgdmFsdWVzIHRoYXQgYXJlIHNldCBpbiB0aGUgZmlsdGVyIGJhciwgaW5jbHVkaW5nIHRoZSB0ZXh0IGZyb20gdGhlIHNlYXJjaCBmaWVsZCAod2l0aCAkc2VhcmNoIGFzIHRoZSBwcm9wZXJ0eSBuYW1lKS4gSG93ZXZlciwgaXQgZG9lc24ndCByZXR1cm4gYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCB1c2VzIGEgY3VzdG9tIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRTZWxlY3Rpb25WYXJpYW50KCk6IFByb21pc2U8U2VsZWN0aW9uVmFyaWFudD4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBhd2FpdCBzdGF0ZUhlbHBlci5nZXRTZWxlY3Rpb25WYXJpYW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyO1xuXHRcdGlmIChjb250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyPy5nZXRWaWV3KCksXG5cdFx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQ/LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgodGhpcy5tZXRhUGF0aCk7XG5cdFx0XHRpZiAoZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUpIHtcblx0XHRcdFx0Y29uc3Qgc0NvbnRleHRVcmwgPVxuXHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U/LmNvbnN0cnVjdENvbnRleHRVcmwoZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUsIHZpZXcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyIHByb3BlcnR5IG5hbWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBtYW5kYXRvcnkgZmlsdGVyIHByb3BlcnR5IG5hbWVzXG5cdCAqL1xuXHRnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gKHRoaXMuY29udGVudC5nZXRQcm9wZXJ0eUluZm9TZXQoKSBhcyBDb250cm9sUHJvcGVydHlJbmZvW10pXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJQcm9wKSB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJQcm9wLnJlcXVpcmVkO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoZnVuY3Rpb24gKHJlcXVpcmVkUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQcm9wLmNvbmRpdGlvblBhdGg7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpbHRlciBiYXIgcGFyYW1ldGVycyBmb3IgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHBhcmFtZXRlcnMgY29uZmlndXJlZCBpbiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZVxuXHQgKi9cblxuXHRnZXRQYXJhbWV0ZXJzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IGZpbHRlckJhci5kYXRhKFwicGFyYW1ldGVyc1wiKTtcblx0XHRpZiAocGFyYW1ldGVycykge1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgPyBwYXJhbWV0ZXJzIDogSlNPTi5wYXJzZShwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0Z2V0VmFyaWFudCgpOiBWYXJpYW50RGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGN1cnJlbnRWYXJpYW50O1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TW9kZWwgPSB0aGlzLmdldE1vZGVsKFwiJEZsZXhWYXJpYW50c1wiKSBhcyBWYXJpYW50TW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCB2YXJpYW50QmFja1JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXG5cdFx0XHRpZiAodmFyaWFudE1vZGVsICYmIHZhcmlhbnRCYWNrUmVmZXJlbmNlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudE1vZGVsLmdldFZhcmlhbnQodmFyaWFudE1vZGVsLmdldEN1cnJlbnRWYXJpYW50UmVmZXJlbmNlKHZhcmlhbnRCYWNrUmVmZXJlbmNlKSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKFwiQ291bGRuJ3QgZmV0Y2ggdmFyaWFudCBcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudFZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3Mgb3IgaGlkZXMgYW55IGZpbHRlciBmaWVsZCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgcHJvcGVydHkgd2lsbCBub3QgYmUgaGlkZGVuIGluc2lkZSB0aGUgYWRhcHRhdGlvbiBkaWFsb2cgYW5kIG1heSBiZSByZS1hZGRlZC5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIHZpc2libGUgV2hldGhlciBpdCBzaG91bGQgYmUgc2hvd24gb3IgaGlkZGVuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyBvbmNlIHRoZSBjaGFuZ2UgaW4gdmlzaWJpbGl0eSB3YXMgYXBwbGllZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHsgaXRlbXM6IFt7IG5hbWU6IGNvbmRpdGlvblBhdGgsIHZpc2libGUgfV0gfSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmlzaWJpbGl0eSBvZiBhIGZpbHRlciBmaWVsZC5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBjaGVjayB3aGV0aGVyIHRoZSBmaWx0ZXIgZmllbGQgaXMgdmlzaWJsZSBvciBub3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldEZpbHRlckZpZWxkVmlzaWJsZShjb25kaXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0cmV0dXJuICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnR9IGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKi9cblx0Z2V0VmFyaWFudE1hbmFnZW1lbnQoKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdGNvbnN0IHZhcmlhbnRCYWNrcmVmZXJlbmNlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnRCYWNrcmVmZXJlbmNlKCk7XG5cdFx0aWYgKHZhcmlhbnRCYWNrcmVmZXJlbmNlKSB7XG5cdFx0XHRyZXR1cm4gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2YXJpYW50QmFja3JlZmVyZW5jZSkgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVmFyaWFudCBiYWNrIHJlZmVyZW5jZSBub3QgZGVmaW5lZCBvbiB0aGUgZmlsdGVyIGJhciAke3RoaXMuaWR9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhcmlhbnQgYmFjayByZWZlcmVuY2UgYXNzb2NpYXRpb24gZm9yIHRoaXMgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB2YXJpYW50IFRoZSBgVmFyaWFudE1hbmFnZW1lbnRgIGluc3RhbmNlIHRvIHNldCBhcyB0aGUgYmFjayByZWZlcmVuY2UuXG5cdCAqL1xuXHRzZXRWYXJpYW50QmFja1JlZmVyZW5jZSh2YXJpYW50OiBWYXJpYW50TWFuYWdlbWVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQ/LmdldExpdmVNb2RlPy4oKTtcblx0XHRpZiAoIWlzTGl2ZU1vZGUpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYXJpYW50QmFja3JlZmVyZW5jZSh2YXJpYW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5IG9mIHRoZSBjdXJyZW50IHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcmV0dXJucyBLZXkgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YXJpYW50LiBJbiBjYXNlIHRoZSBtb2RlbCBpcyBub3QgeWV0IHNldCwgYG51bGxgIHdpbGwgYmUgcmV0dXJuZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEN1cnJlbnRWYXJpYW50S2V5KCk6IHN0cmluZyB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkuZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBuZXcgc2VsZWN0ZWQgdmFyaWFudCBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSB2YXJpYW50IHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkLiBJZiB0aGUgcGFzc2VkIGtleSBkb2Vzbid0IGlkZW50aWZ5IGEgdmFyaWFudCwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRDdXJyZW50VmFyaWFudEtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldEN1cnJlbnRWYXJpYW50S2V5KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGZpZWxkIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRGaWx0ZXJGaWVsZEVuYWJsZWQobmFtZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRJbnRlcm5hbE1vZGVsKCk/LnNldERhdGEoXG5cdFx0XHR7XG5cdFx0XHRcdFt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIildOiB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzOiB7IFtuYW1lXTogeyBlZGl0TW9kZTogZW5hYmxlZCA/IEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgOiBGaWVsZEVkaXRNb2RlLkRpc2FibGVkIH0gfVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZC5cblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsdGVyRmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsTW9kZWwoKT8uZ2V0UHJvcGVydHkoYC8ke3RoaXMuY29udGVudC5kYXRhKFwibG9jYWxJZFwiKX0vZmlsdGVyRmllbGRzLyR7bmFtZX0vZWRpdE1vZGVgKSA9PT1cblx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzYWJsZWRcblx0XHRcdD8gZmFsc2Vcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uIHZhcmlhbnQgdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBwcmVmaWxsRGVzY3JpcHRpb25zIElmIHRydWUsIHdlIHRyeSB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIFRleHQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHkgaW4gdGhlIHNlbGVjdGlvblZhcmlhbnQgKHRvIGF2b2lkIGZldGNoaW5nIGl0IGZyb20gdGhlIHNlcnZlcilcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0byBjb25kaXRpb25zXG5cdCAqL1xuXHRhc3luYyBjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzKFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0cHJlZmlsbERlc2NyaXB0aW9uczogYm9vbGVhblxuXHQpOiBQcm9taXNlPFN0YXRlVXRpbEZpbHRlcj4ge1xuXHRcdHJldHVybiBzdGF0ZUhlbHBlci5jb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzKFxuXHRcdFx0dGhpcy5jb250ZW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHByZWZpbGxEZXNjcmlwdGlvbnMsXG5cdFx0XHR0aGlzLmNvbnRlbnQ/LmdldE1vZGVsKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgaW5wdXQgdmFsdWVzIG9mIHZpc2libGUgZmlsdGVyIGZpZWxkcyBpbiB0aGUgZmlsdGVyIGJhciB3aXRoIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0byBjbGVhciBFZGl0IEZpbHRlciBvciBub3QuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGZpbHRlcmluZyBvbiB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gb3B0aW9ucy5jbGVhckVkaXRGaWx0ZXIgV2hldGhlciB0byBjbGVhciB0aGUgZWRpdCBmaWx0ZXIgb3IgbGV0IGl0IGJlIGRlZmF1bHQgdmFsdWUgJ0FsbCcgaW5zdGVhZFxuXHQgKi9cblx0YXN5bmMgX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIG9wdGlvbnM/OiB7IGNsZWFyRWRpdEZpbHRlcjogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgc3RhdGVIZWxwZXIuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byB0aGUgZmlsdGVyIGJhci4gTm90ZTogc2V0U2VsZWN0aW9uVmFyaWFudCB3aWxsIGNsZWFyIGV4aXN0aW5nIGZpbHRlcnMgYW5kIHRoZW4gYXBwbHkgdGhlIFNlbGVjdGlvblZhcmlhbnQgdmFsdWVzLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCBjYW5ub3Qgc2V0IHRoZSBzZWFyY2ggZmllbGQgdGV4dCBvciBhbnkgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiB0aGF0IHJlbGllcyBvbiBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHtAbGluayBzYXAuZmUubmF2aWdhdGlvbi5TZWxlY3Rpb25WYXJpYW50fSB0byBhcHBseSB0byB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBPcHRpb25hbC4gSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgdGhlIGFzc29jaWF0ZWQgdGV4dCBwcm9wZXJ0eSB2YWx1ZXMgKGlmIHRoZXkncmUgYXZhaWxhYmxlIGluIHRoZSBzZWxlY3Rpb25WYXJpYW50KSB0byBkaXNwbGF5IHRoZSBmaWx0ZXIgdmFsdWUgZGVzY3JpcHRpb25zLCBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlbSBmcm9tIHRoZSBiYWNrZW5kXG5cdCAqIEBwYXJhbSBmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnMgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0cHJlZmlsbERlc2NyaXB0aW9ucyA9IGZhbHNlLFxuXHRcdGZyb21OYXZpZ2F0aW9uUGFyYW1ldGVycyA9IGZhbHNlXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2woXG5cdFx0XHRcdHRoaXMuZ2V0Q29udGVudCgpLFxuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0XHRmcm9tTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0Py5hcHBseVN0YXRlUmVzdWx0O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRcdGNvbnRlbnQuZW5hYmxlUmVxdWVzdHModHJ1ZSwgcmVzdWx0Py5kaWZmU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgdGhlIE1EQyBzdGF0ZSB1dGlsIHdoZW4gdGhlIHN0YXRlIGZvciB0aGlzIGNvbnRyb2wncyBjaGlsZCBoYXMgY2hhbmdlZC5cblx0ICovXG5cdGhhbmRsZVN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29uZGl0aW9uUGF0aChwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID0gRmlsdGVyVXRpbHMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KHRoaXMuY29udGVudCwgcHJvcGVydHlQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA/IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoLCBmYWxzZSwgdHJ1ZSkgOiB1bmRlZmluZWQpID8/XG5cdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHQpO1xuXHR9XG5cblx0YXN5bmMgc2hvd0ZpbHRlckZpZWxkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRjb25zdCBjb25kaXRpb25QYXRoID0gdGhpcy5nZXRDb25kaXRpb25QYXRoKG5hbWUpO1xuXHRcdGNvbnN0IHRhcmdldEZpbHRlckZpZWxkID0gISFzdGF0ZS5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbmRpdGlvblBhdGgpO1xuXHRcdGlmICghdGFyZ2V0RmlsdGVyRmllbGQpIHtcblx0XHRcdHN0YXRlLml0ZW1zLnB1c2goeyBuYW1lOiBjb25kaXRpb25QYXRoIH0pO1xuXHRcdH1cblx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCwgc3RhdGUpO1xuXHR9XG5cblx0YXN5bmMgb3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkKG5hbWU6IHN0cmluZywgaW5wdXRWYWx1ZT86IHN0cmluZyk6IFByb21pc2U8Q29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBjb25kaXRpb25QYXRoID0gdGhpcy5nZXRDb25kaXRpb25QYXRoKG5hbWUpO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gdGhpcy5jb250ZW50LmdldEZpbHRlckl0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS5nZXRQcm9wZXJ0eUtleSgpID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsdGVyRmllbGQ/LmdldFZhbHVlSGVscCgpKSBhcyBWYWx1ZUhlbHAgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoIXZhbHVlSGVscCB8fCAhZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihgVmFsdWVIZWxwIGZvciBmaWx0ZXIgZmllbGQgJHtuYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFsdWVIZWxwLmF0dGFjaEV2ZW50T25jZShcImNsb3NlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWVIZWxwLmdldENvbmRpdGlvbnMoKSBhcyBDb25kaXRpb25PYmplY3RbXSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBfb0ZvY3VzSW5mbzogb2JqZWN0IH0pLl9vRm9jdXNJbmZvID0geyB0YXJnZXRJbmZvOiB7IHNpbGVudDogdHJ1ZSB9IH07XG5cdFx0XHQoZmlsdGVyRmllbGQgYXMgdW5rbm93biBhcyB7IG9uZm9jdXNpbj86IEZ1bmN0aW9uIH0pLm9uZm9jdXNpbj8uKG5ldyBqUXVlcnkuRXZlbnQoXCJmb2N1c2luXCIpKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHQoZmlsdGVyRmllbGQuZ2V0QWdncmVnYXRpb24oXCJfY29udGVudFwiKSBhcyBJbnB1dFtdKVswXS5maXJlVmFsdWVIZWxwUmVxdWVzdCh7XG5cdFx0XHRcdFx0ZnJvbUtleWJvYXJkOiB0cnVlLFxuXHRcdFx0XHRcdF91c2VySW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuXHRcdFx0XHR9IGFzIHVua25vd24gYXMgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHR9LCAyMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Q29sbGFwc2VkRmlsdGVyc1RleHQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCk/LmZpbHRlcnNUZXh0O1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJCYXJBUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFEQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBCO0lBQUc7SUFBQyxJQUFBRyxNQUFBLEdBQUFKLGtCQUFBLENBQUFLLFNBQUE7SUFBQUQsTUFBQSxDQUUzREUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ0MsTUFBZSxFQUFRO01BQ3ZDLElBQUlBLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxDQUFDSixtQkFBbUIsRUFBRTtNQUMzQixDQUFDLE1BQU07UUFDTixJQUFJLENBQUNELGtCQUFrQixFQUFFO01BQzFCO0lBQ0QsQ0FBQztJQUFBRSxNQUFBLENBRURJLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDQyxlQUFvQyxFQUFFQyxVQUE2QyxFQUFRO01BQ25HLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDRixVQUFVLENBQUM7TUFDakUsSUFBSSxDQUFDVCxZQUFZLENBQUNZLGlCQUFpQixDQUFDLENBQUMsRUFBRUMsU0FBUyxDQUFDQyxXQUFXLENBQUM7UUFDNURDLElBQUksRUFBRSxvQkFBb0I7UUFDMUJDLFVBQVUsRUFBRTtVQUNYZixrQkFBa0IsRUFBRSxJQUFJLENBQUNBLGtCQUFrQjtVQUFFO1VBQzdDZ0IsWUFBWSxFQUFFQyxNQUFNLENBQUNDLElBQUksQ0FBQ1YsVUFBVSxDQUFDLENBQUNXLE1BQU07VUFBRTtVQUM5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
@@ -48,6 +48,7 @@ import StateUtil from "sap/ui/mdc/p13n/StateUtil";
48
48
  import type { default as MetaModel, default as ODataMetaModel } from "sap/ui/model/odata/v4/ODataMetaModel";
49
49
  import jQuery from "sap/ui/thirdparty/jquery";
50
50
  import type { EventHandler } from "../../../../../../../types/extension_types";
51
+ import UOMValidationDelegate from "./UOMValidationDelegate";
51
52
  import FilterBarAPIStateHandler from "./mixin/FilterBarAPIStateHandler";
52
53
 
53
54
  // Track telemetry content for the filterBar
@@ -743,10 +744,13 @@ class FilterBarAPI extends MacroAPI {
743
744
  }
744
745
 
745
746
  @xmlEventHandler()
746
- handleFilterChanged(oEvent: FilterBarBase$FiltersChangedEvent): void {
747
+ async handleFilterChanged(oEvent: FilterBarBase$FiltersChangedEvent): Promise<void> {
747
748
  const filterBar = oEvent.getSource() as FilterBar | undefined;
748
749
  const oEventParameters = oEvent.getParameters();
749
750
  if (filterBar) {
751
+ if (!filterBar.getLiveMode()) {
752
+ await UOMValidationDelegate.validateAllUOMFields(filterBar, "filterChange");
753
+ }
750
754
  const oConditions = filterBar.getFilterConditions();
751
755
  const eventParameters: object = this._prepareEventParameters(filterBar);
752
756
  this.telemetry?.onFiltersChanged(this._getFilterBarReason(filterBar));