@sapui5/sap.fe.core 1.130.0 → 1.131.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.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -661,9 +661,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
661
661
|
* @returns BindingToolkitExpression<boolean>
|
|
662
662
|
*/
|
|
663
663
|
_exports.getRequiredExpressionForConnectedDataField = getRequiredExpressionForConnectedDataField;
|
|
664
|
-
function isVisible(targetObject) {
|
|
664
|
+
function isVisible(targetObject, navigationProperties) {
|
|
665
665
|
var _targetObject$annotat, _targetObject$annotat2;
|
|
666
|
-
return not(equal(getExpressionFromAnnotation(targetObject === null || targetObject === void 0 ? void 0 : (_targetObject$annotat = targetObject.annotations) === null || _targetObject$annotat === void 0 ? void 0 : (_targetObject$annotat2 = _targetObject$annotat.UI) === null || _targetObject$annotat2 === void 0 ? void 0 : _targetObject$annotat2.Hidden), true));
|
|
666
|
+
return not(equal(getExpressionFromAnnotation(targetObject === null || targetObject === void 0 ? void 0 : (_targetObject$annotat = targetObject.annotations) === null || _targetObject$annotat === void 0 ? void 0 : (_targetObject$annotat2 = _targetObject$annotat.UI) === null || _targetObject$annotat2 === void 0 ? void 0 : _targetObject$annotat2.Hidden, navigationProperties), true));
|
|
667
667
|
}
|
|
668
668
|
|
|
669
669
|
/**
|
|
@@ -728,4 +728,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
728
728
|
_exports.isQuickViewFacetVisible = isQuickViewFacetVisible;
|
|
729
729
|
return _exports;
|
|
730
730
|
}, false);
|
|
731
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0Iiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJpc0VkaXRhYmxlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVUkiLCJJc0VkaXRhYmxlIiwiY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb24iLCJiQXNPYmplY3QiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlzUHJvcGVydHkiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwia2V5cyIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDQiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJfb1Byb3BlcnR5JGFubm90YXRpb24iLCJfb1Byb3BlcnR5JGFubm90YXRpb24yIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJfcHJvcGVydHlUeXBlQ29uZmlnJHQiLCJfcHJvcGVydHlUeXBlQ29uZmlnJHQyIiwiX3Byb3BlcnR5VHlwZUNvbmZpZyR0MyIsIl9wcm9wZXJ0eVR5cGVDb25maWckdDQiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0IiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0MiIsIl9vVGFyZ2V0TWFwcGluZyRjb25zdDMiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q0IiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0NSIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjMiLCJfb1Byb3BlcnR5JGFubm90YXRpb240IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uNSIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjYiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q2IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uNyIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjgiLCJfb1Byb3BlcnR5JGFubm90YXRpb245IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uMTAiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q3IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uMTEiLCJfb1Byb3BlcnR5JGFubm90YXRpb24xMiIsIl9vVGFyZ2V0TWFwcGluZyRjb25zdDgiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNiIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczciLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM4IiwiRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5IiwidmFsdWVPZiIsInNraXBEZWNpbWFsc1ZhbGlkYXRpb24iLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJpZ25vcmVVbml0Q29uc3RyYWludCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDUiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ2IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kNyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDgiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInNob3dNZWFzdXJlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJjb21wbGV4VHlwZSIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0cmFpbnRPcHRpb25zIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwiZ2V0QmluZGluZ0ZvckRhdGVQaWNrZXIiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ5IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTAiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxMSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDEyIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTMiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxNCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDE1IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTYiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxNyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDE4IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTkiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyMCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDIxIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjIiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyMyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDI0IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjUiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyNiIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDI3IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjgiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyOSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDMwIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzEiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzMiIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDMzIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzNSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDM2IiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInNob3dOdW1iZXIiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzciLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzOCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDM5IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kNDAiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInRpbWV6b25lIiwiVGltZXpvbmUiLCJzdHlsZSIsIkRhdGVUaW1lU3R5bGUiLCJzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJwYXR0ZXJuIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JEYXRlRm9ybWF0IiwicHJvcGVydHlEYXRhTW9kZWxQYXRoIiwiZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ0MSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDQyIiwidG9TdHJpbmciLCJnZXRCaW5kaW5nRm9yVGltZXpvbmUiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJnZXRBbGlnbm1lbnRFeHByZXNzaW9uIiwic0FsaWduRGlzcGxheSIsInNBbGlnbkVkaXQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Iiwib0NvbnRleHQiLCJvSW50ZXJmYWNlIiwiY29udGV4dCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IiwicmVxdWlyZXNJQ29udGV4dCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc011bHRpVmFsdWVGaWVsZCIsIm9EYXRhTW9kZWxQYXRoIiwiX29EYXRhTW9kZWxQYXRoJG5hdmlnIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJoYXNPbmVUb01hbnlOYXZpZ2F0aW9uIiwiZmluZEluZGV4Iiwib05hdiIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJfb0RhdGFNb2RlbFBhdGgkY29udGUiLCJfb0RhdGFNb2RlbFBhdGgkY29udGUyIiwiY29udGV4dExvY2F0aW9uIiwiX29EYXRhTW9kZWxQYXRoJGNvbnRlMyIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiX2RhdGFGaWVsZE9iamVjdFBhdGgkIiwiX2RhdGFGaWVsZE9iamVjdFBhdGgkMiIsIl9kYXRhRmllbGQkVGFyZ2V0IiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiX2RhdGEka2V5IiwiX2RhdGEka2V5JCRUeXBlIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJfdGFyZ2V0T2JqZWN0JGFubm90YXQiLCJfdGFyZ2V0T2JqZWN0JGFubm90YXQyIiwiSGlkZGVuIiwiaXNNdWx0aUxpbmUiLCJpc011bHRpTGluZVRleHQiLCJnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImFjdGlvblRhcmdldCIsInBhdGhGcm9tQ29udGV4dExvY2F0aW9uIiwiX2FjdGlvblRhcmdldCRhbm5vdGF0IiwiX2FjdGlvblRhcmdldCRhbm5vdGF0MiIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDIiLCJfYWN0aW9uVGFyZ2V0JHBhcmFtZXQiLCJfYWN0aW9uVGFyZ2V0JGFubm90YXQzIiwib3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidGVybSIsInByZWZpeCIsInNvdXJjZUVudGl0eVR5cGUiLCJuYXZpZ2F0aW9ucyIsInNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwibmF2Iiwiam9pbiIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImlzQm91bmQiLCJwYXJhbWV0ZXJzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwib3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJpc1F1aWNrVmlld0ZhY2V0VmlzaWJsZSIsImZhY2V0TW9kZWxQYXRoIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlMiIsInRhcmdldFZpc2libGUiLCJfZmFjZXRNb2RlbFBhdGgkdGFyZ2UzIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlNCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIsIENvbnZlcnRlZE1ldGFkYXRhLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUgeyBVbml0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zLFxuXHRGblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsXG5cdGdldFJlbGF0aXZlUGF0aHMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBEaXNwbGF5TW9kZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0aXNEaXNhYmxlZEV4cHJlc3Npb24sXG5cdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uLFxuXHRpc1JlYWRPbmx5RXhwcmVzc2lvbixcblx0aXNSZXF1aXJlZEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0aGFzU3RhdGljUGVyY2VudFVuaXQsXG5cdGhhc1ZhbHVlSGVscCxcblx0aXNDb21wdXRlZCxcblx0aXNJbW11dGFibGUsXG5cdGlzS2V5LFxuXHRpc011bHRpTGluZVRleHRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRBUElcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvRGF0YVBvaW50VGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRWRpdFN0eWxlID0gXCJSYWRpb0J1dHRvbnNcIjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcblx0JFR5cGU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBPRGF0YU1ldGFNb2RlbCB3aGVuIHVzaW5nIHRoZSBAQCBvcGVyYXRvciBpbiBYTUwgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50cz86IHVua25vd25bXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIERhdGVUaW1lU3R5bGUgPSBcInNob3J0XCIgfCBcIm1lZGl1bVwiIHwgXCJsb25nXCIgfCBcImZ1bGxcIjtcblxuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQgPSBGaWVsZEZvcm1hdE9wdGlvbnMgfCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zO1xuXG5leHBvcnQgY29uc3QgRmllbGRFZGl0TW9kZSA9IHtcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNhYmxlZCBtb2RlXG5cdCAqL1xuXHREaXNhYmxlZDogXCJEaXNhYmxlZFwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGRpc3BsYXkgbW9kZVxuXHQgKi9cblx0RGlzcGxheTogXCJEaXNwbGF5XCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZWRpdGFibGUgbW9kZVxuXHQgKi9cblx0RWRpdGFibGU6IFwiRWRpdGFibGVcIixcblx0LyoqXG5cdCAqIElmIG1vcmUgdGhhbiBvbmUgY29udHJvbCBpcyByZW5kZXJlZCBieSB0aGUge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZCB9XG5cdCAqIG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGR9IGNvbnRyb2wsIHRoZSBmaXJzdCBwYXJ0IGlzIGVkaXRhYmxlLCBhbmQgdGhlIG90aGVyXG5cdCAqIHBhcnRzIGFyZSBpbiBkaXNwbGF5IG1vZGUuXG5cdCAqL1xuXHRFZGl0YWJsZURpc3BsYXk6IFwiRWRpdGFibGVEaXNwbGF5XCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgcmVhZC1vbmx5LlxuXHQgKi9cblx0RWRpdGFibGVSZWFkT25seTogXCJFZGl0YWJsZVJlYWRPbmx5XCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gcmVhZC1vbmx5IG1vZGVcblx0ICovXG5cdFJlYWRPbmx5OiBcIlJlYWRPbmx5XCJcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPlxuKTogRGlzcGxheU1vZGUge1xuXHRyZXR1cm4gRGlzcGxheU1vZGVGb3JtYXR0ZXIuZ2V0RGlzcGxheU1vZGUob0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZSxcblx0XHRpc0VkaXRhYmxlLFxuXHRcdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0YWJsZVwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIGlzRWRpdGFibGUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlzRWRpdGFibGU7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBvUHJvcGVydHlQYXRoLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgb0RhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGlmIChjb21waWxlRXhwcmVzc2lvbihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiICYmIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGJBc09iamVjdCA/IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gOiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBpZkVsc2UoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQobm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyksXG5cdFx0XHRcdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0XHRcdFx0aXNFZGl0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiA8VD4oXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZXI6IEZuPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYWN0aXZpdHlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoYC9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke29iamVjdFBhdGh9YCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gbWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIGFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRtZWFzdXJlUmVhZE9ubHkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZSxcblx0ZGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoXG5cdFx0IXByb3BlcnR5UGF0aCB8fFxuXHRcdHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHxcblx0XHQoIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSAmJiBkYXRhRmllbGRDb252ZXJ0ZWQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpXG5cdCkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoLiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHksXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdC8vIHdlIGdldCB0aGUgZWRpdGFibGUgRXhwcmVzc2lvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHVwZGF0ZSBSZXN0cmljdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIGlzRWRpdGFibGUsIGZhbHNlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzVW5pdFJlYWRPbmx5LCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGFuZChpc0ltbXV0YWJsZSh1bml0UHJvcGVydHkpLCBub3QoVUkuSXNUcmFuc2llbnRCaW5kaW5nKSksIG1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRpZkVsc2UoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpICYmIGlzVW5pdFJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KSxcblx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGVcblx0XHQpO1xuXHR9XG5cdGlmICghdW5pdFByb3BlcnR5ICYmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdC8vIG5vIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCBtZWFucyB0aGlzIGlzIGEgc3RhdGljIHVuaXRcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpO1xuXHR9XG5cdGxldCByZWFkT25seUV4cHJlc3Npb247XG5cdGlmIChkYXRhRmllbGRDb252ZXJ0ZWQgIT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgaXNSZWFkT25seUV4cHJlc3Npb24oZGF0YUZpZWxkQ29udmVydGVkKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdH1cblxuXHQvLyBpZiB0aGVyZSBhcmUgdXBkYXRlIFJlc3RyaWN0aW9ucyBpdCBpcyBhbHdheXMgZGlzcGxheSBtb2RlXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoaXNFZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdCksXG5cdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKGlzVHJ1dGh5KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihtZWFzdXJlKSksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZERpc3BsYXkuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uc3RyYWludE9wdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkgJiZcblx0XHRwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eT8udmFsdWVPZigpXG5cdFx0PyB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfVxuXHRcdDoge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHR9XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoZm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSwgaWdub3JlVW5pdENvbnN0cmFpbnQpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgY29uc3RyYWludE9wdGlvbnM6IENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnMgfCB1bmRlZmluZWQgPVxuXHRcdGNvbXBsZXhUeXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA/IGdldENvbnN0cmFpbnRPcHRpb25zKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSA6IHVuZGVmaW5lZDtcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgcGlja2VyIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBwcmVzZW50LlxuICogQHBhcmFtIG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBwcm9wZXJ0eSB3aXRoIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge307XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlXCI7XG5cdGNvbnN0IG1pbkRhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW07XG5cdGNvbnN0IG1heERhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW07XG5cdGNvbnN0IG1pbkV4cHJlc3Npb24gPVxuXHRcdG1pbkRhdGUgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWluRGF0ZSlcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0sIHJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHQgIClcblx0XHRcdDogbWluRGF0ZTtcblx0Y29uc3QgbWF4RXhwcmVzc2lvbiA9XG5cdFx0bWF4RGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtYXhEYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtYXhEYXRlO1xuXG5cdHJldHVybiAoXG5cdFx0KG1pbkV4cHJlc3Npb24gfHwgbWF4RXhwcmVzc2lvbikgJiZcblx0XHRhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIG1pbkV4cHJlc3Npb24sIG1heEV4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKCFvUHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRsZXQgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsUGF0aClcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdHJ1ZSk7XG5cdGNvbnN0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkID1cblx0XHRjb21wbGV4VHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgPyBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkgOiB1bmRlZmluZWQ7XG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oXG5cdFx0W3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sXG5cdFx0Y29tcGxleFR5cGUsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHtcblx0XHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogdHJ1ZSxcblx0XHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdFx0fSxcblx0XHRjb25zdHJhaW50T3B0aW9uc1xuXHQpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGZpZWxkRm9ybWF0T3B0aW9ucz86IEZpZWxkRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3Qgc3R5bGUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uRGF0ZVRpbWVTdHlsZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGltZXpvbmUpICYmIHRpbWV6b25lLiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHQodGltZXpvbmUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KS4kdGFyZ2V0IGFzIFByb3BlcnR5LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbiksXG5cdFx0XHRcdFx0aWdub3JlVW5pdENvbnN0cmFpbnRcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHQvLyBpZiBzdHlsZSBvciBwYXR0ZXJuIGlzIGFsc28gc2V0XG5cdGlmIChzdHlsZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc3R5bGU6IHN0eWxlIH0gfTtcblx0fSBlbHNlIGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lU3R5bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc3R5bGU6IGZpZWxkRm9ybWF0T3B0aW9ucy5kYXRlVGltZVN0eWxlIH0gfTtcblx0fVxuXG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBwYXR0ZXJuOiBmaWVsZEZvcm1hdE9wdGlvbnMuZGF0ZVRpbWVQYXR0ZXJuIH0gfTtcblx0fVxuXG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dUaW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd1RpbWUgfSB9O1xuXHR9XG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dEYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgfSB9O1xuXHR9XG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93VGltZXpvbmU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgZm9ybWF0IG9mIGEgZGF0ZSwgdGltZSBvciBkYXRlVGltZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQgRm9ybWF0IG9wdGlvbnMgd2hpY2ggY29udGFpbiB0aGUgc3R5bGUgb3IgcGF0dGVybiBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBkYXRlLCB0aW1lLCBvciBkYXRlLXRpbWUsIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4gb3Igc3R5bGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Zm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/OiBGb3JtYXRPcHRpb25zRGF0ZUZvcm1hdFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgcGF0dGVybiA9IGZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0Py5kYXRlVGltZVBhdHRlcm47XG5cdGNvbnN0IHN0eWxlID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgPz8gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/LmRhdGVUaW1lU3R5bGU7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eURlZmluaXRpb24udHlwZV0udHlwZTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdC4uLihzdHlsZSAmJiB7IHN0eWxlOiBzdHlsZS50b1N0cmluZygpIH0pLFxuXHRcdC4uLihwYXR0ZXJuICYmIHsgcGF0dGVybjogcGF0dGVybiB9KVxuXHR9O1xuXG5cdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJhbnlcIjtcblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7IHNob3dUaW1lOiBmYWxzZSwgc2hvd0RhdGU6IGZhbHNlLCBzaG93VGltZXpvbmU6IHRydWUgfTtcblxuXHQvLyBudWxsIGlzIHJlcXVpcmVkIGJ5IGZvcm1hdHRlciB3aGVuIHRoZXJlIGlzIGp1c3QgYSB0aW1lem9uZVxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtudWxsLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5ID0gXCJCZWdpblwiLFxuXHRzQWxpZ25FZGl0ID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KSBhcyBvYmplY3Q7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBvRGF0YU1vZGVsUGF0aCBUaGUgZGF0YSBtb2RlbCBwYXRoIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIGEgMS4ubiBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWVGaWVsZCA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRpZiAob0RhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdGNvbnN0IGhhc09uZVRvTWFueU5hdmlnYXRpb24gPVxuXHRcdFx0b0RhdGFNb2RlbFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleCgob05hdikgPT4ge1xuXHRcdFx0XHRpZiAoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShvTmF2KSkge1xuXHRcdFx0XHRcdGlmIChvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vd2UgY2hlY2sgdGhlIG9uZSB0byBtYW55IG5hdiBpcyBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjb250ZXh0XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleChcblx0XHRcdFx0XHRcdFx0XHQob0NvbnRleHROYXYpID0+IG9Db250ZXh0TmF2Lm5hbWUgPT09IG9OYXYubmFtZVxuXHRcdFx0XHRcdFx0XHQpID09PSAtMVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSkgPiAtMTtcblx0XHRpZiAoaGFzT25lVG9NYW55TmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0UmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIGZvcmNlRWRpdE1vZGUsIHRydWUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZSxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9SZXF1aXJlZFByb3BlcnRpZXM6IHtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdH0gPSB7fSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0Ly8gRm9yIHRoZSBkYXRhZmllbGQgZXhwcmVzc2lvbiB3ZSBzaG91bGQgbm90ICBjb25zaWRlciB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHR9XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBlZGl0TW9kZSA9IGZvcmNlRWRpdE1vZGUgfHwgVUkuSXNFZGl0YWJsZTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPy5pbmNsdWRlcyhvUHJvcGVydHkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBVSS5Jc0NyZWF0ZU1vZGU7XG5cdH1cblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPy5pbmNsdWRlcyhvUHJvcGVydHkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBhbmQoVUkuSXNFZGl0YWJsZSwgbm90KFVJLklzQ3JlYXRlTW9kZSkpO1xuXHR9XG5cdGNvbnN0IHJldHVybkV4cHJlc3Npb24gPSBvcihcblx0XHRhbmQob3IocmVxdWlyZWRFeHByZXNzaW9uLCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24pLCBlZGl0TW9kZSksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvblxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIHJldHVybkV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHJldHVybkV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4gPSAoZGF0YUZpZWxkT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py4kdGFyZ2V0Py5EYXRhID8/IHt9KSBhcyBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0Pjtcblx0Y29uc3Qga2V5czogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRjb25zdCBkYXRhRmllbGRzID0gW107XG5cdGxldCBwcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IGlzUmVxdWlyZWRFeHByZXNzaW9uczogKENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KVtdIHwgdW5kZWZpbmVkID0gW107XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRpZiAoZGF0YVtrZXldPy5bXCIkVHlwZVwiXSAmJiBkYXRhW2tleV1bXCIkVHlwZVwiXT8uaW5jbHVkZXMoXCJEYXRhRmllbGRcIikpIHtcblx0XHRcdGRhdGFGaWVsZHMucHVzaChkYXRhW2tleV0pO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGRhdGFGaWVsZCBvZiBkYXRhRmllbGRzKSB7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0KSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGU+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgW1xuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGVcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0XHRpc1JlcXVpcmVkRXhwcmVzc2lvbnMucHVzaChnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZCwgZmFsc2UpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoLi4uKGlzUmVxdWlyZWRFeHByZXNzaW9ucyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgaGVhZGVyIGZhY2V0IG9yIGFjdGlvbiBpcyB2aXNpYmxlLlxuICogQHBhcmFtIHRhcmdldE9iamVjdCBIZWFkZXIgZmFjZXRzIG9yIEFjdGlvbnNcbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXNpYmxlKFxuXHR0YXJnZXRPYmplY3Q6XG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXNcblx0XHR8IFJlZmVyZW5jZUZhY2V0XG5cdFx0fCBDb2xsZWN0aW9uRmFjZXRcblx0XHR8IERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG5cdFx0fCBGaWVsZEdyb3VwXG5cdFx0fCBQcm9wZXJ0eVxuXHRcdHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGlvbiBwYXJhbWV0ZXIgaXMgc3VwcG9ydHMgbXVsdGkgbGluZSBpbnB1dC5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aUxpbmUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBY3Rpb25QYXJhbWV0ZXI+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc011bHRpTGluZVRleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IEFjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIENvbnZlcnRlZE1ldGFkYXRhXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gQm9vbGVhblxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24sXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCA9XG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udGVybSA9PT0gQ29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGU7XG5cblx0aWYgKCFvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCkge1xuXHRcdC8vIE9wZXJhdGlvbkF2YWlsYWJsZSB0ZXJtIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBhY3Rpb25cblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRsZXQgcHJlZml4ID0gXCJcIjtcblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID09PSB0cnVlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi50YXJnZXRFbnRpdHlUeXBlICE9PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZVxuXHQpIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9ucyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKTtcblx0XHQvL1N0YXJ0IGZyb20gY29udGV4dExvY2F0aW9uIGFuZCBuYXZpZ2F0ZSB1bnRpbCB0aGUgc291cmNlIGVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbiB0byBnZXQgdGhlIHJpZ2h0IHByZWZpeFxuXHRcdGZvciAoY29uc3QgbmF2IG9mIG5hdmlnYXRpb25zKSB7XG5cdFx0XHRzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QsIG5hdik7XG5cdFx0XHRpZiAoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUgPT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHByZWZpeCA9IGAke2dldFJlbGF0aXZlUGF0aHMoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0KS5qb2luKFwiL1wiKX0vYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5pc0JvdW5kID8gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0/LmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHQocGF0aDogc3RyaW5nKSA9PiBgJHtwcmVmaXh9JHtiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlZFR5cGVzLCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpfWBcblx0KTtcblxuXHRyZXR1cm4gZXF1YWwob3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiwgdHJ1ZSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBxdWlja1ZpZXcgZmFjZXQgaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSBmYWNldE1vZGVsUGF0aFxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUXVpY2tWaWV3RmFjZXRWaXNpYmxlKGZhY2V0TW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFJlZmVyZW5jZUZhY2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHRhcmdldFZpc2libGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHR0YXJnZXRWaXNpYmxlID0gaXNWaXNpYmxlKGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGlzVmlzaWJsZShmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3QpLCB0YXJnZXRWaXNpYmxlKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkVBOztFQVlBO0FBQ0E7QUFDQTs7RUFrQ08sTUFBTUEsYUFBYSxHQUFHO0lBQzVCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLE9BQU8sRUFBRSxTQUFTO0lBQ2xCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGdCQUFnQixFQUFFLGtCQUFrQjtJQUNwQztBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUU7RUFDWCxDQUFDO0VBQUNDLFFBQUEsQ0FBQVAsYUFBQSxHQUFBQSxhQUFBO0VBRUssTUFBTVEsY0FBYyxHQUFHLFNBQUFBLENBQzdCQyxvQkFBaUcsRUFDbkY7SUFDZCxPQUFPQyxvQkFBb0IsQ0FBQ0YsY0FBYyxDQUFDQyxvQkFBb0Is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UUFDRDtNQUNEO0lBQ0Q7SUFDQSxNQUFNQyx3QkFBd0IsR0FBR2xCLFlBQVksQ0FBQ21CLE9BQU8sSUFBQWQscUJBQUEsR0FBR0wsWUFBWSxDQUFDb0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFBZixxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCZ0Isa0JBQWtCLEdBQUd6VSxTQUFTO0lBQ2xILE1BQU0wVSw0QkFBNEIsR0FBR2hQLDJCQUEyQixFQUFBZ08sc0JBQUEsR0FDL0ROLFlBQVksQ0FBQzFPLFdBQVcsQ0FBQ2tQLElBQUksY0FBQUYsc0JBQUEsdUJBQTdCQSxzQkFBQSxDQUErQkcsa0JBQWtCLEVBQ2pELEVBQUUsRUFDRjdULFNBQVMsRUFDUnFCLElBQVksSUFBSyxHQUFHMFMsTUFBTSxHQUFHWSx5QkFBeUIsQ0FBQ3RULElBQUksRUFBRUcsY0FBYyxFQUFFOFMsd0JBQXdCLENBQUMsRUFDeEcsQ0FBQztJQUVELE9BQU9qTyxLQUFLLENBQUNxTyw0QkFBNEIsRUFBRSxJQUFJLENBQUM7RUFDakQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBclYsUUFBQSxDQUFBOFQsMEJBQUEsR0FBQUEsMEJBQUE7RUFLTyxTQUFTeUIsdUJBQXVCQSxDQUFDQyxjQUFtRCxFQUFvQztJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO0lBQzlILElBQUlDLGFBQWdELEdBQUd0VSxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3JFLElBQUlrUyxrQkFBa0IsRUFBQWtDLHFCQUFBLEdBQWFELGNBQWMsQ0FBQ3BWLFlBQVksY0FBQXFWLHFCQUFBLHdCQUFBQyxzQkFBQSxHQUEzQkQscUJBQUEsQ0FBNkJuQyxNQUFNLGNBQUFvQyxzQkFBQSx1QkFBbkNBLHNCQUFBLENBQXFDL1QsT0FBTyw2Q0FBa0MsQ0FBQyxFQUFFO01BQUEsSUFBQWlVLHNCQUFBLEVBQUFDLHNCQUFBO01BQ25IRixhQUFhLEdBQUduQyxTQUFTLEVBQUFvQyxzQkFBQSxHQUFDSixjQUFjLENBQUNwVixZQUFZLGNBQUF3VixzQkFBQSx3QkFBQUMsc0JBQUEsR0FBM0JELHNCQUFBLENBQTZCdEMsTUFBTSxjQUFBdUMsc0JBQUEsdUJBQW5DQSxzQkFBQSxDQUFxQ2xVLE9BQU8sQ0FBQztJQUN4RTtJQUNBLE9BQU9SLGlCQUFpQixDQUFDbUIsR0FBRyxDQUFDa1IsU0FBUyxDQUFDZ0MsY0FBYyxDQUFDcFYsWUFBWSxDQUFDLEVBQUV1VixhQUFhLENBQUMsQ0FBQztFQUNyRjtFQUFDM1YsUUFBQSxDQUFBdVYsdUJBQUEsR0FBQUEsdUJBQUE7RUFBQSxPQUFBdlYsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
731
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0Iiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJpc0VkaXRhYmxlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVUkiLCJJc0VkaXRhYmxlIiwiY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb24iLCJiQXNPYmplY3QiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlzUHJvcGVydHkiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJfZGF0YU1vZGVsT2JqZWN0UGF0aCQiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwia2V5cyIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczQiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDQiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJfb1Byb3BlcnR5JGFubm90YXRpb24iLCJfb1Byb3BlcnR5JGFubm90YXRpb24yIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJfcHJvcGVydHlUeXBlQ29uZmlnJHQiLCJfcHJvcGVydHlUeXBlQ29uZmlnJHQyIiwiX3Byb3BlcnR5VHlwZUNvbmZpZyR0MyIsIl9wcm9wZXJ0eVR5cGVDb25maWckdDQiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0IiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0MiIsIl9vVGFyZ2V0TWFwcGluZyRjb25zdDMiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q0IiwiX29UYXJnZXRNYXBwaW5nJGNvbnN0NSIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjMiLCJfb1Byb3BlcnR5JGFubm90YXRpb240IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uNSIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjYiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q2IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uNyIsIl9vUHJvcGVydHkkYW5ub3RhdGlvbjgiLCJfb1Byb3BlcnR5JGFubm90YXRpb245IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uMTAiLCJfb1RhcmdldE1hcHBpbmckY29uc3Q3IiwiX29Qcm9wZXJ0eSRhbm5vdGF0aW9uMTEiLCJfb1Byb3BlcnR5JGFubm90YXRpb24xMiIsIl9vVGFyZ2V0TWFwcGluZyRjb25zdDgiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM1IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNiIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczciLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM4IiwiRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5IiwidmFsdWVPZiIsInNraXBEZWNpbWFsc1ZhbGlkYXRpb24iLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJpZ25vcmVVbml0Q29uc3RyYWludCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDUiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ2IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kNyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDgiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInNob3dNZWFzdXJlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJjb21wbGV4VHlwZSIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0cmFpbnRPcHRpb25zIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwiZ2V0QmluZGluZ0ZvckRhdGVQaWNrZXIiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ5IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTAiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxMSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDEyIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTMiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxNCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDE1IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTYiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQxNyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDE4IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMTkiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyMCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDIxIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjIiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyMyIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDI0IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjUiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyNiIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDI3IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMjgiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQyOSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDMwIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzEiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzMiIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDMzIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzNSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDM2IiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInNob3dOdW1iZXIiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiX29Qcm9wZXJ0eURlZmluaXRpb24kMzciLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQzOCIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDM5IiwiX29Qcm9wZXJ0eURlZmluaXRpb24kNDAiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInRpbWV6b25lIiwiVGltZXpvbmUiLCJzdHlsZSIsIkRhdGVUaW1lU3R5bGUiLCJzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJwYXR0ZXJuIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JEYXRlRm9ybWF0IiwicHJvcGVydHlEYXRhTW9kZWxQYXRoIiwiZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQiLCJfb1Byb3BlcnR5RGVmaW5pdGlvbiQ0MSIsIl9vUHJvcGVydHlEZWZpbml0aW9uJDQyIiwidG9TdHJpbmciLCJnZXRCaW5kaW5nRm9yVGltZXpvbmUiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJnZXRBbGlnbm1lbnRFeHByZXNzaW9uIiwic0FsaWduRGlzcGxheSIsInNBbGlnbkVkaXQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Iiwib0NvbnRleHQiLCJvSW50ZXJmYWNlIiwiY29udGV4dCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IiwicmVxdWlyZXNJQ29udGV4dCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc011bHRpVmFsdWVGaWVsZCIsIm9EYXRhTW9kZWxQYXRoIiwiX29EYXRhTW9kZWxQYXRoJG5hdmlnIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJoYXNPbmVUb01hbnlOYXZpZ2F0aW9uIiwiZmluZEluZGV4Iiwib05hdiIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJfb0RhdGFNb2RlbFBhdGgkY29udGUiLCJfb0RhdGFNb2RlbFBhdGgkY29udGUyIiwiY29udGV4dExvY2F0aW9uIiwiX29EYXRhTW9kZWxQYXRoJGNvbnRlMyIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiX2RhdGFGaWVsZE9iamVjdFBhdGgkIiwiX2RhdGFGaWVsZE9iamVjdFBhdGgkMiIsIl9kYXRhRmllbGQkVGFyZ2V0IiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiX2RhdGEka2V5IiwiX2RhdGEka2V5JCRUeXBlIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJfdGFyZ2V0T2JqZWN0JGFubm90YXQiLCJfdGFyZ2V0T2JqZWN0JGFubm90YXQyIiwiSGlkZGVuIiwiaXNNdWx0aUxpbmUiLCJpc011bHRpTGluZVRleHQiLCJnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImFjdGlvblRhcmdldCIsInBhdGhGcm9tQ29udGV4dExvY2F0aW9uIiwiX2FjdGlvblRhcmdldCRhbm5vdGF0IiwiX2FjdGlvblRhcmdldCRhbm5vdGF0MiIsIl9kYXRhTW9kZWxPYmplY3RQYXRoJDIiLCJfYWN0aW9uVGFyZ2V0JHBhcmFtZXQiLCJfYWN0aW9uVGFyZ2V0JGFubm90YXQzIiwib3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidGVybSIsInByZWZpeCIsInNvdXJjZUVudGl0eVR5cGUiLCJuYXZpZ2F0aW9ucyIsInNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwibmF2Iiwiam9pbiIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImlzQm91bmQiLCJwYXJhbWV0ZXJzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwib3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJpc1F1aWNrVmlld0ZhY2V0VmlzaWJsZSIsImZhY2V0TW9kZWxQYXRoIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlMiIsInRhcmdldFZpc2libGUiLCJfZmFjZXRNb2RlbFBhdGgkdGFyZ2UzIiwiX2ZhY2V0TW9kZWxQYXRoJHRhcmdlNCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIsIENvbnZlcnRlZE1ldGFkYXRhLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUgeyBVbml0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zLFxuXHRGblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsXG5cdGdldFJlbGF0aXZlUGF0aHMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBEaXNwbGF5TW9kZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0aXNEaXNhYmxlZEV4cHJlc3Npb24sXG5cdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uLFxuXHRpc1JlYWRPbmx5RXhwcmVzc2lvbixcblx0aXNSZXF1aXJlZEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0aGFzU3RhdGljUGVyY2VudFVuaXQsXG5cdGhhc1ZhbHVlSGVscCxcblx0aXNDb21wdXRlZCxcblx0aXNJbW11dGFibGUsXG5cdGlzS2V5LFxuXHRpc011bHRpTGluZVRleHRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvRGF0YVBvaW50VGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRWRpdFN0eWxlID0gXCJSYWRpb0J1dHRvbnNcIjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcblx0JFR5cGU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBPRGF0YU1ldGFNb2RlbCB3aGVuIHVzaW5nIHRoZSBAQCBvcGVyYXRvciBpbiBYTUwgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50cz86IHVua25vd25bXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIERhdGVUaW1lU3R5bGUgPSBcInNob3J0XCIgfCBcIm1lZGl1bVwiIHwgXCJsb25nXCIgfCBcImZ1bGxcIjtcblxuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQgPSBGaWVsZEZvcm1hdE9wdGlvbnMgfCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zO1xuXG5leHBvcnQgY29uc3QgRmllbGRFZGl0TW9kZSA9IHtcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNhYmxlZCBtb2RlXG5cdCAqL1xuXHREaXNhYmxlZDogXCJEaXNhYmxlZFwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGRpc3BsYXkgbW9kZVxuXHQgKi9cblx0RGlzcGxheTogXCJEaXNwbGF5XCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZWRpdGFibGUgbW9kZVxuXHQgKi9cblx0RWRpdGFibGU6IFwiRWRpdGFibGVcIixcblx0LyoqXG5cdCAqIElmIG1vcmUgdGhhbiBvbmUgY29udHJvbCBpcyByZW5kZXJlZCBieSB0aGUge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZCB9XG5cdCAqIG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGR9IGNvbnRyb2wsIHRoZSBmaXJzdCBwYXJ0IGlzIGVkaXRhYmxlLCBhbmQgdGhlIG90aGVyXG5cdCAqIHBhcnRzIGFyZSBpbiBkaXNwbGF5IG1vZGUuXG5cdCAqL1xuXHRFZGl0YWJsZURpc3BsYXk6IFwiRWRpdGFibGVEaXNwbGF5XCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgcmVhZC1vbmx5LlxuXHQgKi9cblx0RWRpdGFibGVSZWFkT25seTogXCJFZGl0YWJsZVJlYWRPbmx5XCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gcmVhZC1vbmx5IG1vZGVcblx0ICovXG5cdFJlYWRPbmx5OiBcIlJlYWRPbmx5XCJcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPlxuKTogRGlzcGxheU1vZGUge1xuXHRyZXR1cm4gRGlzcGxheU1vZGVGb3JtYXR0ZXIuZ2V0RGlzcGxheU1vZGUob0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZSxcblx0XHRpc0VkaXRhYmxlLFxuXHRcdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0YWJsZVwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIGlzRWRpdGFibGUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlzRWRpdGFibGU7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBvUHJvcGVydHlQYXRoLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgb0RhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGlmIChjb21waWxlRXhwcmVzc2lvbihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiICYmIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGJBc09iamVjdCA/IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gOiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBpZkVsc2UoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQobm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyksXG5cdFx0XHRcdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0XHRcdFx0aXNFZGl0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiA8VD4oXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZXI6IEZuPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYWN0aXZpdHlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoYC9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke29iamVjdFBhdGh9YCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gbWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIGFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRtZWFzdXJlUmVhZE9ubHkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZSxcblx0ZGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoXG5cdFx0IXByb3BlcnR5UGF0aCB8fFxuXHRcdHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHxcblx0XHQoIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSAmJiBkYXRhRmllbGRDb252ZXJ0ZWQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpXG5cdCkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoLiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHksXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdC8vIHdlIGdldCB0aGUgZWRpdGFibGUgRXhwcmVzc2lvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHVwZGF0ZSBSZXN0cmljdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIGlzRWRpdGFibGUsIGZhbHNlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzVW5pdFJlYWRPbmx5LCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGFuZChpc0ltbXV0YWJsZSh1bml0UHJvcGVydHkpLCBub3QoVUkuSXNUcmFuc2llbnRCaW5kaW5nKSksIG1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRpZkVsc2UoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpICYmIGlzVW5pdFJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KSxcblx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGVcblx0XHQpO1xuXHR9XG5cdGlmICghdW5pdFByb3BlcnR5ICYmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdC8vIG5vIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCBtZWFucyB0aGlzIGlzIGEgc3RhdGljIHVuaXRcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpO1xuXHR9XG5cdGxldCByZWFkT25seUV4cHJlc3Npb247XG5cdGlmIChkYXRhRmllbGRDb252ZXJ0ZWQgIT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgaXNSZWFkT25seUV4cHJlc3Npb24oZGF0YUZpZWxkQ29udmVydGVkKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdH1cblxuXHQvLyBpZiB0aGVyZSBhcmUgdXBkYXRlIFJlc3RyaWN0aW9ucyBpdCBpcyBhbHdheXMgZGlzcGxheSBtb2RlXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoaXNFZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdCksXG5cdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKGlzVHJ1dGh5KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihtZWFzdXJlKSksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZERpc3BsYXkuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uc3RyYWludE9wdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkgJiZcblx0XHRwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eT8udmFsdWVPZigpXG5cdFx0PyB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfVxuXHRcdDoge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHR9XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoZm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSwgaWdub3JlVW5pdENvbnN0cmFpbnQpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgY29uc3RyYWludE9wdGlvbnM6IENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnMgfCB1bmRlZmluZWQgPVxuXHRcdGNvbXBsZXhUeXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA/IGdldENvbnN0cmFpbnRPcHRpb25zKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSA6IHVuZGVmaW5lZDtcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgcGlja2VyIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBwcmVzZW50LlxuICogQHBhcmFtIG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBwcm9wZXJ0eSB3aXRoIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge307XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlXCI7XG5cdGNvbnN0IG1pbkRhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW07XG5cdGNvbnN0IG1heERhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW07XG5cdGNvbnN0IG1pbkV4cHJlc3Npb24gPVxuXHRcdG1pbkRhdGUgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWluRGF0ZSlcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0sIHJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHQgIClcblx0XHRcdDogbWluRGF0ZTtcblx0Y29uc3QgbWF4RXhwcmVzc2lvbiA9XG5cdFx0bWF4RGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtYXhEYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtYXhEYXRlO1xuXG5cdHJldHVybiAoXG5cdFx0KG1pbkV4cHJlc3Npb24gfHwgbWF4RXhwcmVzc2lvbikgJiZcblx0XHRhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIG1pbkV4cHJlc3Npb24sIG1heEV4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKCFvUHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRsZXQgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsUGF0aClcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdHJ1ZSk7XG5cdGNvbnN0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkID1cblx0XHRjb21wbGV4VHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgPyBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkgOiB1bmRlZmluZWQ7XG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oXG5cdFx0W3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sXG5cdFx0Y29tcGxleFR5cGUsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHtcblx0XHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogdHJ1ZSxcblx0XHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdFx0fSxcblx0XHRjb25zdHJhaW50T3B0aW9uc1xuXHQpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGZpZWxkRm9ybWF0T3B0aW9ucz86IEZpZWxkRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3Qgc3R5bGUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uRGF0ZVRpbWVTdHlsZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGltZXpvbmUpICYmIHRpbWV6b25lLiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHQodGltZXpvbmUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KS4kdGFyZ2V0IGFzIFByb3BlcnR5LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbiksXG5cdFx0XHRcdFx0aWdub3JlVW5pdENvbnN0cmFpbnRcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHQvLyBpZiBzdHlsZSBvciBwYXR0ZXJuIGlzIGFsc28gc2V0XG5cdGlmIChzdHlsZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc3R5bGU6IHN0eWxlIH0gfTtcblx0fSBlbHNlIGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lU3R5bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc3R5bGU6IGZpZWxkRm9ybWF0T3B0aW9ucy5kYXRlVGltZVN0eWxlIH0gfTtcblx0fVxuXG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBwYXR0ZXJuOiBmaWVsZEZvcm1hdE9wdGlvbnMuZGF0ZVRpbWVQYXR0ZXJuIH0gfTtcblx0fVxuXG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dUaW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd1RpbWUgfSB9O1xuXHR9XG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dEYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgfSB9O1xuXHR9XG5cdGlmIChmaWVsZEZvcm1hdE9wdGlvbnM/LnNob3dUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93VGltZXpvbmU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgZm9ybWF0IG9mIGEgZGF0ZSwgdGltZSBvciBkYXRlVGltZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQgRm9ybWF0IG9wdGlvbnMgd2hpY2ggY29udGFpbiB0aGUgc3R5bGUgb3IgcGF0dGVybiBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBkYXRlLCB0aW1lLCBvciBkYXRlLXRpbWUsIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4gb3Igc3R5bGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JEYXRlRm9ybWF0ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Zm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/OiBGb3JtYXRPcHRpb25zRGF0ZUZvcm1hdFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgcGF0dGVybiA9IGZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0Py5kYXRlVGltZVBhdHRlcm47XG5cdGNvbnN0IHN0eWxlID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgPz8gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/LmRhdGVUaW1lU3R5bGU7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eURlZmluaXRpb24udHlwZV0udHlwZTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdC4uLihzdHlsZSAmJiB7IHN0eWxlOiBzdHlsZS50b1N0cmluZygpIH0pLFxuXHRcdC4uLihwYXR0ZXJuICYmIHsgcGF0dGVybjogcGF0dGVybiB9KVxuXHR9O1xuXG5cdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJhbnlcIjtcblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7IHNob3dUaW1lOiBmYWxzZSwgc2hvd0RhdGU6IGZhbHNlLCBzaG93VGltZXpvbmU6IHRydWUgfTtcblxuXHQvLyBudWxsIGlzIHJlcXVpcmVkIGJ5IGZvcm1hdHRlciB3aGVuIHRoZXJlIGlzIGp1c3QgYSB0aW1lem9uZVxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtudWxsLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5ID0gXCJCZWdpblwiLFxuXHRzQWxpZ25FZGl0ID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KSBhcyBvYmplY3Q7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBvRGF0YU1vZGVsUGF0aCBUaGUgZGF0YSBtb2RlbCBwYXRoIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIGEgMS4ubiBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWVGaWVsZCA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRpZiAob0RhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdGNvbnN0IGhhc09uZVRvTWFueU5hdmlnYXRpb24gPVxuXHRcdFx0b0RhdGFNb2RlbFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleCgob05hdikgPT4ge1xuXHRcdFx0XHRpZiAoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShvTmF2KSkge1xuXHRcdFx0XHRcdGlmIChvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vd2UgY2hlY2sgdGhlIG9uZSB0byBtYW55IG5hdiBpcyBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjb250ZXh0XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleChcblx0XHRcdFx0XHRcdFx0XHQob0NvbnRleHROYXYpID0+IG9Db250ZXh0TmF2Lm5hbWUgPT09IG9OYXYubmFtZVxuXHRcdFx0XHRcdFx0XHQpID09PSAtMVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSkgPiAtMTtcblx0XHRpZiAoaGFzT25lVG9NYW55TmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0UmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIGZvcmNlRWRpdE1vZGUsIHRydWUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZSxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9SZXF1aXJlZFByb3BlcnRpZXM6IHtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdH0gPSB7fSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0Ly8gRm9yIHRoZSBkYXRhZmllbGQgZXhwcmVzc2lvbiB3ZSBzaG91bGQgbm90ICBjb25zaWRlciB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHR9XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBlZGl0TW9kZSA9IGZvcmNlRWRpdE1vZGUgfHwgVUkuSXNFZGl0YWJsZTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPy5pbmNsdWRlcyhvUHJvcGVydHkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBVSS5Jc0NyZWF0ZU1vZGU7XG5cdH1cblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPy5pbmNsdWRlcyhvUHJvcGVydHkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBhbmQoVUkuSXNFZGl0YWJsZSwgbm90KFVJLklzQ3JlYXRlTW9kZSkpO1xuXHR9XG5cdGNvbnN0IHJldHVybkV4cHJlc3Npb24gPSBvcihcblx0XHRhbmQob3IocmVxdWlyZWRFeHByZXNzaW9uLCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24pLCBlZGl0TW9kZSksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvblxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIHJldHVybkV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHJldHVybkV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4gPSAoZGF0YUZpZWxkT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py4kdGFyZ2V0Py5EYXRhID8/IHt9KSBhcyBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0Pjtcblx0Y29uc3Qga2V5czogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRjb25zdCBkYXRhRmllbGRzID0gW107XG5cdGxldCBwcm9wZXJ0eVBhdGg7XG5cdGNvbnN0IGlzUmVxdWlyZWRFeHByZXNzaW9uczogKENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KVtdIHwgdW5kZWZpbmVkID0gW107XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRpZiAoZGF0YVtrZXldPy5bXCIkVHlwZVwiXSAmJiBkYXRhW2tleV1bXCIkVHlwZVwiXT8uaW5jbHVkZXMoXCJEYXRhRmllbGRcIikpIHtcblx0XHRcdGRhdGFGaWVsZHMucHVzaChkYXRhW2tleV0pO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGRhdGFGaWVsZCBvZiBkYXRhRmllbGRzKSB7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0KSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGU+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgW1xuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGVcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0XHRpc1JlcXVpcmVkRXhwcmVzc2lvbnMucHVzaChnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZCwgZmFsc2UpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoLi4uKGlzUmVxdWlyZWRFeHByZXNzaW9ucyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgaGVhZGVyIGZhY2V0IG9yIGFjdGlvbiBpcyB2aXNpYmxlLlxuICogQHBhcmFtIHRhcmdldE9iamVjdCBIZWFkZXIgZmFjZXRzIG9yIEFjdGlvbnNcbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXNpYmxlKFxuXHR0YXJnZXRPYmplY3Q6XG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXNcblx0XHR8IFJlZmVyZW5jZUZhY2V0XG5cdFx0fCBDb2xsZWN0aW9uRmFjZXRcblx0XHR8IERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG5cdFx0fCBGaWVsZEdyb3VwXG5cdFx0fCBQcm9wZXJ0eVxuXHRcdHwgdW5kZWZpbmVkLFxuXHRuYXZpZ2F0aW9uUHJvcGVydGllcz86IHN0cmluZ1tdXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuLCBuYXZpZ2F0aW9uUHJvcGVydGllcyksIHRydWUpKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhY3Rpb24gcGFyYW1ldGVyIGlzIHN1cHBvcnRzIG11bHRpIGxpbmUgaW5wdXQuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlMaW5lID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QWN0aW9uUGFyYW1ldGVyPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFjdGlvbiBpcyBlbmFibGVkLlxuICogQHBhcmFtIGFjdGlvblRhcmdldCBBY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBDb252ZXJ0ZWRNZXRhZGF0YVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uIEJvb2xlYW5cbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24oXG5cdGFjdGlvblRhcmdldDogQWN0aW9uLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQgPVxuXHRcdGFjdGlvblRhcmdldC5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnRlcm0gPT09IENvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlO1xuXG5cdGlmICghb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQpIHtcblx0XHQvLyBPcGVyYXRpb25BdmFpbGFibGUgdGVybSBkb2Vzbid0IGV4aXN0IGZvciB0aGUgYWN0aW9uXG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0bGV0IHByZWZpeCA9IFwiXCI7XG5cdGlmIChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoICYmXG5cdFx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9PT0gdHJ1ZSAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24udGFyZ2V0RW50aXR5VHlwZSAhPT0gYWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGVcblx0KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvbnMgPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGxldCBzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbik7XG5cdFx0Ly9TdGFydCBmcm9tIGNvbnRleHRMb2NhdGlvbiBhbmQgbmF2aWdhdGUgdW50aWwgdGhlIHNvdXJjZSBlbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb24gdG8gZ2V0IHRoZSByaWdodCBwcmVmaXhcblx0XHRmb3IgKGNvbnN0IG5hdiBvZiBuYXZpZ2F0aW9ucykge1xuXHRcdFx0c291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0ID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LCBuYXYpO1xuXHRcdFx0aWYgKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlID09PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkge1xuXHRcdFx0XHRwcmVmaXggPSBgJHtnZXRSZWxhdGl2ZVBhdGhzKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCkuam9pbihcIi9cIil9L2A7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQuaXNCb3VuZCA/IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdPy5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0KHBhdGg6IHN0cmluZykgPT4gYCR7cHJlZml4fSR7YmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZWRUeXBlcywgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKX1gXG5cdCk7XG5cblx0cmV0dXJuIGVxdWFsKG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24sIHRydWUpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZXhwcmVzc2lvbiB0byBjaGVjayBpZiB0aGUgcXVpY2tWaWV3IGZhY2V0IGlzIHZpc2libGUuXG4gKiBAcGFyYW0gZmFjZXRNb2RlbFBhdGhcbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiBUaGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSB2aXNpYmlsaXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1F1aWNrVmlld0ZhY2V0VmlzaWJsZShmYWNldE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxSZWZlcmVuY2VGYWNldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB0YXJnZXRWaXNpYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxGaWVsZEdyb3VwPihmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0dGFyZ2V0VmlzaWJsZSA9IGlzVmlzaWJsZShmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldCk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChpc1Zpc2libGUoZmFjZXRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSwgdGFyZ2V0VmlzaWJsZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJFQTs7RUFZQTtBQUNBO0FBQ0E7O0VBa0NPLE1BQU1BLGFBQWEsR0FBRztJQUM1QjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxPQUFPLEVBQUUsU0FBUztJQUNsQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxnQkFBZ0IsRUFBRSxrQkFBa0I7SUFDcEM7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFO0VBQ1gsQ0FBQztFQUFDQyxRQUFBLENBQUFQLGFBQUEsR0FBQUEsYUFBQTtFQUVLLE1BQU1RLGNBQWMsR0FBRyxTQUFB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
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
isKey,
|
|
70
70
|
isMultiLineText
|
|
71
71
|
} from "sap/fe/core/templating/PropertyHelper";
|
|
72
|
-
import type
|
|
72
|
+
import type FieldFormatOptions from "sap/fe/macros/field/FieldFormatOptions";
|
|
73
73
|
import type { DataPointFormatOptions } from "sap/fe/macros/internal/helpers/DataPointTemplating";
|
|
74
74
|
import type Context from "sap/ui/model/Context";
|
|
75
75
|
|
|
@@ -874,9 +874,10 @@ export function isVisible(
|
|
|
874
874
|
| DataFieldForActionTypes
|
|
875
875
|
| FieldGroup
|
|
876
876
|
| Property
|
|
877
|
-
| undefined
|
|
877
|
+
| undefined,
|
|
878
|
+
navigationProperties?: string[]
|
|
878
879
|
): BindingToolkitExpression<boolean> {
|
|
879
|
-
return not(equal(getExpressionFromAnnotation(targetObject?.annotations?.UI?.Hidden), true));
|
|
880
|
+
return not(equal(getExpressionFromAnnotation(targetObject?.annotations?.UI?.Hidden, navigationProperties), true));
|
|
880
881
|
}
|
|
881
882
|
|
|
882
883
|
/**
|