@sapui5/sap.fe.macros 1.140.0 → 1.141.1
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/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -75,6 +75,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
|
|
|
75
75
|
resultField.formatOptions ??= {};
|
|
76
76
|
resultField.formatOptions = getFormatOptions(resultField);
|
|
77
77
|
resultField.formatOptions.showOnlyUnitDecimals = viewDataModel?.getProperty("/sapFeManifestConfiguration/app/showOnlyUnitDecimals") === true;
|
|
78
|
+
resultField.formatOptions.preserveDecimalsForCurrency = viewDataModel?.getProperty("/sapFeManifestConfiguration/app/preserveDecimalsForCurrency") === true;
|
|
78
79
|
resultField.valueHelpMetaPath = metaPath ? metaPath : resultField.metaPath;
|
|
79
80
|
computeCommonProperties(resultField, resultField.valueHelpMetaPath?.getModel());
|
|
80
81
|
resultField.convertedMetaPath = setUpDataPointType(resultField.convertedMetaPath);
|
|
@@ -486,7 +487,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
|
|
|
486
487
|
if ((property.annotations?.Measures?.ISOCurrency || property.annotations?.Measures?.Unit) && String(resultField.formatOptions.isCurrencyOrUnitAligned) === "true" && resultField.formatOptions.measureDisplayMode !== "Hidden") {
|
|
487
488
|
const decimalPadding = FieldStructureHelper.getDecimalPadding(appComponent, property);
|
|
488
489
|
resultField.valueAsStringBindingExpression = resultField.value ? resultField.value : getValueBinding(dataModelPath, resultField.formatOptions, false, true, undefined, true, false, decimalPadding, true);
|
|
489
|
-
resultField.unitBindingExpression = compileExpression(UIFormatters.getBindingForUnitOrCurrency(dataModelPath, true, !!field.formatOptions.showOnlyUnitDecimals));
|
|
490
|
+
resultField.unitBindingExpression = compileExpression(UIFormatters.getBindingForUnitOrCurrency(dataModelPath, true, !!field.formatOptions.showOnlyUnitDecimals, !!field.formatOptions.preserveDecimalsForCurrency));
|
|
490
491
|
resultField.displayStyle = "NumberWithUnitOrCurrencyAligned";
|
|
491
492
|
return resultField;
|
|
492
493
|
}
|
|
@@ -644,4 +645,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controllerextensions/c
|
|
|
644
645
|
};
|
|
645
646
|
return FieldStructureHelper;
|
|
646
647
|
}, false);
|
|
647
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwic2V0VXBFZGl0U3R5bGUiLCJ2YWx1ZVN0YXRlIiwic2V0VXBWYWx1ZVN0YXRlIiwiZWRpdFN0eWxlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlciIsImNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzIiwiY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzIiwiYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQiLCJkaXNwbGF5U3R5bGUiLCJpbmNsdWRlcyIsInRhcmdldE9iamVjdCIsInRleHQiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRUZXh0QmluZGluZyIsInNob3dFbXB0eUluZGljYXRvciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsIlN0cmluZyIsInVuZGVmaW5lZCIsImlzUHJvcGVydHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImVxdWFsIiwicmVhZE9ubHkiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwidXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJfZXhwb3J0cyIsImNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJwcm9wZXJ0eSIsIlZhbHVlIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJjb250ZXh0UGF0aENvbnRleHQiLCJnZXRQYXRoIiwicmVwbGFjZUFsbCIsInJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJtZWFzdXJlUmVhZE9ubHkiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJnZXRFZGl0TW9kZSIsImV4dGVybmFsSURQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkiLCJ0eXBlIiwiaXNEYXRhRmllbGQiLCIkdGFyZ2V0IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZXh0ZXJuYWxJZENvbnRleHQiLCJjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwicHVzaCIsImxlbmd0aCIsIl9hcGlJZCIsImdldENvbnRlbnRJZCIsImVkaXRTdHlsZUlkIiwiZ2VuZXJhdGUiLCJmaWVsZE1vZGUiLCJkaXNwbGF5U3R5bGVJZCIsInRleHRBbGlnbk1vZGUiLCJkaXNwbGF5TW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsImZpZWxkRWRpdFN0eWxlIiwicmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCIsInNob3dUaW1lIiwic2hvd1RpbWV6b25lIiwic2hvd0RhdGUiLCJnZXRPYmplY3RJZGVudGlmaWVyVGV4dCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInRhcmdldERpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiY29tbW9uVGV4dCIsIkNvbW1vbiIsIlRleHQiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRUb0tlZXBXaGl0ZXNwYWNlIiwiZ2V0T3ZlcnJpZGVzIiwicHJvcHMiLCJjb250cm9sQ29uZmlnIiwia2V5cyIsImZvckVhY2giLCJjb25maWdLZXkiLCJtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJoYXNRdWlja1ZpZXciLCJxdWlja1ZpZXdUeXBlIiwiZm91bmRTZW1hbnRpY09iamVjdHMiLCJtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciIsInNlbWFudGljT2JqZWN0IiwiaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwicHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0IiwiZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QiLCJmaWVsZENvbnRhaW5lclR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJuYW1lIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsInJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlckV4cCIsImFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFBsYWNlaG9sZGVyIiwiZGF0YUZpZWxkIiwiZGF0YVBvaW50VHlwZSIsInRlcm0iLCIkVHlwZSIsImdldERlY2ltYWxQYWRkaW5nIiwibWFuaWZlc3QiLCJnZXRNYW5pZmVzdEVudHJ5IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1hY3JvcyIsInRhYmxlIiwiY3VycmVuY3kiLCJkZWNpbWFsUGFkZGluZyIsInVuaXRPZk1lYXN1cmUiLCJoYXNVbml0T3JDdXJyZW5jeSIsIlVuaXQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJpc0ZpZWxkR3JvdXBJdGVtIiwic2V0VXBEcmFmdEluZGljYXRvciIsIlRhcmdldCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJpc1NlbWFudGljS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCIsInNob3dFcnJvckluZGljYXRvciIsImNvbnRleHRMb2NhdGlvbiIsIl90eXBlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsIkNyaXRpY2FsaXR5IiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJGaWVsZFN0cnVjdHVyZUhlbHBlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsImdldFZhbHVlQmluZGluZyIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJNdWx0aUxpbmVUZXh0IiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJnZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwic2VtYW50aWNTdHlsZSIsImlkZW50aWZpZXJUaXRsZSIsImdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJzcGxpdFRpdGxlT25Ud29MaW5lcyIsImlkZW50aWZpZXJUZXh0Iiwib3ZlcnJpZGVQcm9wcyIsImdldERpc3BsYXlNb2RlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQiLCJoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJUZXh0QXJyYW5nZW1lbnQiLCJ2YWx1ZVN0YXRlRXhwIiwicHJvcGVydHlQYXRoSW5Nb2RlbCIsInRleHRQYXRoIiwiZm9ybWF0VmFsdWVTdGF0ZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZGlzcGxheVZpc2libGUiLCJtYWNyb0lkIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZU5hbWVBbm5vdGF0aW9uIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmaWxlTmFtZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJleHByIiwibW9kZWxOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0cnVjdHVyZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdFBhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LCBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgaXNTZW1hbnRpY0tleSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCwgbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dE1hc2tGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvSW5wdXRNYXNrXCI7XG5pbXBvcnQgKiBhcyBGaWVsZFRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUsXG5cdGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcsXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVCaW5kaW5nLFxuXHRnZXRWaXNpYmxlRXhwcmVzc2lvbixcblx0aGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMsXG5cdGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQsXG5cdGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMsXG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXNcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBTaXR1YXRpb25zSW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi8uLi9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheVN0eWxlIGFzIERpc3BsYXlTdHlsZVR5cGUsIEVkaXRTdHlsZSBhcyBFZGl0U3R5bGVUeXBlLCBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9GaWVsZFN0eWxlc1wiO1xuXG5leHBvcnQgdHlwZSBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gT21pdDxQcm9wZXJ0aWVzT2Y8RmllbGQ+LCBcInJlYWRPbmx5XCIgfCBcInNlbWFudGljT2JqZWN0XCI+ICYge1xuXHRpc1B1YmxpY0ZpZWxkPzogYm9vbGVhbjsgLy9cblx0Ly9hZGQgZXZlbnRzIGZyb20gRmllbGQgLSAnUHJvcGVydGllc09mJyBkb2VzIG5vdCBpbmNsdWRlIHRoZW1cblx0Y2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRvbkxpdmVDaGFuZ2U/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzZW1hbnRpY09iamVjdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcbmV4cG9ydCB0eXBlIEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0ge1xuXHRfY29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdF9zZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0aXNEeW5hbWljSW5zdGFudGlhdGlvbj86IGJvb2xlYW47XG5cdGNoYW5nZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgRXZlbnRIYW5kbGVyO1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdGlzUHVibGljRmllbGQ6IGJvb2xlYW47XG5cdHZpc2libGU/OiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlcjtcblx0b25MaXZlQ2hhbmdlPzogc3RyaW5nIHwgRXZlbnRIYW5kbGVyO1xuXHQvLy0tLS0tXG5cdGZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucztcblx0cHJvcGVydHk6IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0dmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHVuaXRCaW5kaW5nRXhwcmVzc2lvbj86IHN0cmluZztcblx0ZGlzcGxheVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb252ZXJ0ZWRNZXRhUGF0aDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcztcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nW107XG5cdGhhc1VuaXRPckN1cnJlbmN5PzogYm9vbGVhbjtcblx0dGV4dD86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW1wdHlJbmRpY2F0b3JNb2RlPzogc3RyaW5nO1xuXHRlZGl0YWJsZUV4cHJlc3Npb246IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWVsZEdyb3VwSWRzPzogc3RyaW5nW107XG5cdGRpc3BsYXlTdHlsZUlkPzogc3RyaW5nO1xuXHR0ZXh0RnJvbVZhbHVlTGlzdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW47XG5cdGlkZW50aWZpZXJUaXRsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZGVudGlmaWVyVGV4dD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0c2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRzaG93RXJyb3JJbmRpY2F0b3I6IGJvb2xlYW47XG5cdGR5bmFtaWNTZW1hbnRpY09iamVjdHM/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkYXRhU291cmNlUGF0aD86IHN0cmluZztcblx0ZWRpdFN0eWxlSWQ/OiBzdHJpbmc7XG5cdGVuYWJsZWRFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRlZGl0TW9kZUFzT2JqZWN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb21wdXRlZEVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZhbHVlQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0bWluRGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXhEYXRlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5kZWZpbmVkIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRzdGF0aWNEZXNjcmlwdGlvbj86IHN0cmluZztcblx0dmFsdWVTdGF0ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWxlRmlsZW5hbWVFeHByZXNzaW9uOiBzdHJpbmc7XG5cdGZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR0ZXh0QmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVG9vbHRpcD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXNrPzogSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB8IG51bGw7XG5cdGVkaXRTdHlsZT86IEVkaXRTdHlsZVR5cGUgfCBudWxsO1xuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cdGVudGl0eVR5cGU/OiBDb250ZXh0O1xuXHRvZGF0YU1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdHByb3BlcnR5Rm9yRmllbGRDb250cm9sOiBVSUZvcm1hdHRlcnMuUHJvcGVydHlPclBhdGg8UHJvcGVydHk+O1xuXHRkZXNjcmlwdGlvbkJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRxdWlja1ZpZXdUeXBlPzogXCJTZW1hbnRpY0xpbmtzXCIgfCBcIkZhY2V0c1wiIHwgXCJGYWNldHNBbmRTZW1hbnRpY0xpbmtzXCI7XG5cdGRpc3BsYXlTdHlsZT86IERpc3BsYXlTdHlsZVR5cGU7XG5cdHVuaXRFZGl0YWJsZT86IHN0cmluZztcblx0c3RhdGljVW5pdD86IHN0cmluZztcblx0dmFsdWVJbnB1dFdpZHRoPzogc3RyaW5nO1xuXHR2YWx1ZUlucHV0RmllbGRXaWR0aD86IHN0cmluZztcblx0dW5pdElucHV0VmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkcmFmdEluZGljYXRvclZpc2libGU/OiBzdHJpbmc7XG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zPzogYm9vbGVhbiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0YWRkRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRD86IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRD86IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+O1xuXHR2YWx1ZUhlbHBNZXRhUGF0aD86IENvbnRleHQ7XG5cdGlkOiBzdHJpbmc7XG5cdHZhbHVlSGVscElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdG1ldGFQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0Y29udGV4dFBhdGhDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRmaWxlVXBsb2FkZXJWaXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBib29sZWFuO1xuXHRldmVudEhhbmRsZXJzOiB7XG5cdFx0Y2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdFx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVR5cGVNaXNzbWF0Y2g6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBFdmVudEhhbmRsZXI7XG5cdFx0dXBsb2FkU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0cmVtb3ZlU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlQ2xvc2VVcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdG9wZW5FeHRlcm5hbExpbms6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkZvY3VzT3V0OiBFdmVudEhhbmRsZXI7XG5cdFx0bGlua1ByZXNzZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogRXZlbnRIYW5kbGVyO1xuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXG5cdHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoID0gbWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoO1xuXHRjb21wdXRlQ29tbW9uUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQudmFsdWVIZWxwTWV0YVBhdGg/LmdldE1vZGVsKCkpO1xuXHRyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IHNldFVwRGF0YVBvaW50VHlwZShyZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCk7XG5cdHNldFVwVmlzaWJsZVByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlSURzKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZGF0YVNvdXJjZVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRyZXN1bHRGaWVsZC5sYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdGNvbnRleHQ6IHJlc3VsdEZpZWxkLm1ldGFQYXRoXG5cdH0pO1xuXG5cdC8qIEVYVEVSTkFMSUQgKi9cblx0Y29tcHV0ZUV4dGVybmFsSUQocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5lbnRpdHlUeXBlID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0YC8ke3Jlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWV9YFxuXHQpO1xuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucz8uZm9ySW5saW5lQ3JlYXRpb25Sb3dzID09PSB0cnVlKSB7XG5cdFx0cmVzdWx0RmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMgPSBoYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyhyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0fVxuXHRjb21wdXRlRWRpdE1vZGUocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXHRjb21wdXRlRWRpdGFibGVFeHByZXNzaW9ucyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA6ICh7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHRzZXRVcEZvcm1hdE9wdGlvbnMoXG5cdFx0cmVzdWx0RmllbGQsXG5cdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdGNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdHZpZXdEYXRhTW9kZWxcblx0KTtcblx0c2V0VXBEaXNwbGF5U3R5bGUocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLCBpbnRlcm5hbE1vZGVsLCBhcHBDb21wb25lbnQpO1xuXHRzZXRVcEVkaXRTdHlsZShyZXN1bHRGaWVsZCwgYXBwQ29tcG9uZW50KTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZVN0YXRlID0gc2V0VXBWYWx1ZVN0YXRlKHJlc3VsdEZpZWxkKTtcblx0aWYgKHJlc3VsdEZpZWxkLmVkaXRTdHlsZSA9PT0gXCJJbnB1dFdpdGhWYWx1ZUhlbHBcIikge1xuXHRcdHJlc3VsdEZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gc2V0SW5wdXRXaXRoVmFsdWVoZWxwUGxhY2Vob2xkZXIocmVzdWx0RmllbGQpO1xuXHR9XG5cblx0Y29tcHV0ZUZpbGVVcGxvYWRlclByb3BlcnRpZXMocmVzdWx0RmllbGQpO1xuXG5cdGNvbXB1dGVJbmxpbmVFZGl0UHJvcGVydGllcyhyZXN1bHRGaWVsZCwgdmlld0RhdGFNb2RlbCk7XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21wdXRlIGJpbmRpbmdzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHRjb25zdCBhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dCA9IFtcIkF2YXRhclwiLCBcIkFtb3VudFdpdGhDdXJyZW5jeVwiXTtcblx0aWYgKFxuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSAmJlxuXHRcdCFhRGlzcGxheVN0eWxlc1dpdGhvdXRQcm9wVGV4dC5pbmNsdWRlcyhyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUpICYmXG5cdFx0cmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0KSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9XG5cdFx0XHRyZXN1bHRGaWVsZC50ZXh0ID8/XG5cdFx0XHRyZXN1bHRGaWVsZC52YWx1ZSA/P1xuXHRcdFx0RmllbGRUZW1wbGF0aW5nLmdldFRleHRCaW5kaW5nKFxuXHRcdFx0XHQocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pIHx8IHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnNcblx0XHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQudGV4dCA9IFwiXCI7XG5cdH1cblxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSBTdHJpbmcocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IpID09PSBcInRydWVcIiA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXN1bHRGaWVsZC5lbXB0eUluZGljYXRvck1vZGUgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgcHJvcGVydHkgd2l0aCBhIERhdGFGaWVsZERlZmF1bHQsIHVzZSB0aGlzIGFzIGRhdGEgZmllbGRcblx0aWYgKGlzUHJvcGVydHkocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpICYmIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVzdWx0RmllbGQubWV0YVBhdGggPSByZXN1bHRGaWVsZC5vZGF0YU1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWAsXG5cdFx0XHRtZXRhUGF0aCA/IG1ldGFQYXRoIDogcmVzdWx0RmllbGQubWV0YVBhdGhcblx0XHQpO1xuXHR9XG5cblx0aWYgKCFpc1JlYWRPbmx5SW5pdGlhbCkge1xuXHRcdHJlc3VsdEZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwocmVzdWx0RmllbGQucmVhZE9ubHksIHRydWUpLCBcIkRpc3BsYXlcIiwgXCJFZGl0YWJsZVwiKSk7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5ldmVudEhhbmRsZXJzID0ge1xuXHRcdGNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0bGl2ZUNoYW5nZTogKCk6IHZvaWQgPT4ge30sXG5cdFx0dmFsaWRhdGVGaWVsZEdyb3VwOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVUeXBlTWlzc21hdGNoOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVXBsb2FkQ29tcGxldGU6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHVwbG9hZFN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0cmVtb3ZlU3RyZWFtOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVPcGVuVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZUNsb3NlVXBsb2FkZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9wZW5FeHRlcm5hbExpbms6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRm9jdXNPdXQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpbmtQcmVzc2VkOiAoKTogdm9pZCA9PiB7fSxcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDogKCk6IHZvaWQgPT4ge30sXG5cdFx0c2hvd0NvbGxhYm9yYXRpb25FZGl0VXNlcjogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRBY3Rpb25CdXR0b246ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogKCk6IHZvaWQgPT4ge31cblx0fTtcblxuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY29tcHV0ZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbmVlZGVkIGZvciB0aGUgY29sbGFib3JhdGlvbiBhdmF0YXIuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ29sbGFib3JhdGlvblByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGNvbnN0IGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KTtcblx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKGZpZWxkLm9kYXRhTWV0YU1vZGVsKSAmJiBmaWVsZC5lZGl0TW9kZSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5KSB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdC8vIEV4cHJlc3Npb25zIG5lZWRlZCBmb3IgQ29sbGFib3JhdGlvbiBWaXN1YWxpemF0aW9uXG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0Q29sbGFib3JhdGlvbkZvcm1hdHRlcnMuaGFzQ29sbGFib3JhdGlvbkFjdGl2aXR5XG5cdFx0KTtcblx0XHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihhbmQoY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sIG5vdChjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbikpKTtcblxuXHRcdGNvbnN0IGVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudChcIlJlYWRPbmx5XCIpLFxuXHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHRcdClcblx0XHQpO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID0gY29sbGFib3JhdGlvbkVuYWJsZWQ7XG5cdFx0ZmllbGQuY29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBlZGl0YWJsZUV4cHJlc3Npb247XG5cdFx0ZmllbGQuY29tcHV0ZWRFZGl0TW9kZSA9IGVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIHNldHMgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGNvbnZlcnRlZE1ldGFQYXRoLCBkYXRhTW9kZWxQYXRoXG4gKiBhbmQgcHJvcGVydHkgdGhhdCBjYW4gYmUgcmV1c2VkIGluIHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyBpZiByZXF1aXJlZC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb21tb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkgYXNcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlcztcblxuXHRsZXQgZGF0YU1vZGVsUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXHRkYXRhTW9kZWxQYXRoID1cblx0XHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+KSB8fCBkYXRhTW9kZWxQYXRoO1xuXHRmaWVsZC5kYXRhTW9kZWxQYXRoID0gZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0ZmllbGQucHJvcGVydHkgPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0ZmllbGQub2RhdGFNZXRhTW9kZWwgPSBtZXRhTW9kZWw7XG5cdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sID0gKGRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/IChkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWVcblx0XHQ6IGRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gY29tcHV0ZXMgc29tZSBvZiB0aGUgZXhwcmVzc2lvbiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKFxuXHRcdChmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgPyBmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgOiBmaWVsZC5jb250ZXh0UGF0aClcblx0XHRcdD8uZ2V0UGF0aCgpXG5cdFx0XHQucmVwbGFjZUFsbChcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiwgXCIvXCIpLFxuXHRcdGZpZWxkLm9kYXRhTWV0YU1vZGVsXG5cdCk7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zKFxuXHRcdChmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgPyBmaWVsZC5jb250ZXh0UGF0aENvbnRleHQgOiBmaWVsZC5jb250ZXh0UGF0aClcblx0XHRcdD8uZ2V0UGF0aCgpXG5cdFx0XHQucmVwbGFjZUFsbChcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiwgXCIvXCIpLFxuXHRcdGZpZWxkLm9kYXRhTWV0YU1vZGVsXG5cdCk7XG5cdGNvbnN0IG9SZXF1aXJlZFByb3BlcnRpZXMgPSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9uczogcmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zOiByZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zXG5cdH07XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0RW5hYmxlZEV4cHJlc3Npb24oXG5cdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGgsXG5cdFx0ZmFsc2UsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0UmVxdWlyZWRFeHByZXNzaW9uKFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZhbHNlLFxuXHRcdGZhbHNlLFxuXHRcdG9SZXF1aXJlZFByb3BlcnRpZXMsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHQpIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uID0gZW5hYmxlZEV4cHJlc3Npb247XG5cdGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbiA9IHJlcXVpcmVkRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFZGl0TW9kZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmVkaXRNb2RlICE9PSB1bmRlZmluZWQgJiYgZmllbGQuZWRpdE1vZGUgIT09IG51bGwpIHtcblx0XHQvLyBFdmVuIGlmIGl0IHByb3ZpZGVkIGFzIGEgc3RyaW5nIGl0J3MgYSB2YWxpZCBwYXJ0IG9mIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY2FuIGJlIGxhdGVyIGNvbWJpbmVkIGludG8gc29tZXRoaW5nIGVsc2UuXG5cdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCA9IGZpZWxkLmVkaXRNb2RlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG1lYXN1cmVSZWFkT25seSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSA/IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIlJlYWRPbmx5XCIgOiBmYWxzZTtcblxuXHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgPSBVSUZvcm1hdHRlcnMuZ2V0RWRpdE1vZGUoXG5cdFx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRtZWFzdXJlUmVhZE9ubHksXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGhcblx0XHQpO1xuXHRcdGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShhbmQoVUkuSXNJbmFjdGl2ZSwgISFmaWVsZC5oYXNQcm9wZXJ0eUluc2VydFJlc3RyaWN0aW9ucyksIFwiRGlzcGxheVwiLCBmaWVsZC5lZGl0TW9kZUFzT2JqZWN0KVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFeHRlcm5hbElEKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCBleHRlcm5hbElEUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5KGZpZWxkLnByb3BlcnR5KTtcblxuXHRpZiAoZXh0ZXJuYWxJRFByb3BlcnR5KSB7XG5cdFx0aWYgKGZpZWxkLnByb3BlcnR5KSBmaWVsZC5wcm9wZXJ0eS50eXBlID0gZXh0ZXJuYWxJRFByb3BlcnR5LnR5cGU7XG5cdFx0aWYgKGlzRGF0YUZpZWxkKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoKSkge1xuXHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGguVmFsdWUuJHRhcmdldC50eXBlID0gZXh0ZXJuYWxJRFByb3BlcnR5LnR5cGU7XG5cdFx0fVxuXHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eVBhdGggPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aChmaWVsZC5wcm9wZXJ0eSk7XG5cdFx0Y29uc3QgZXh0ZXJuYWxJZENvbnRleHQgPSBmaWVsZC5tZXRhUGF0aFxuXHRcdFx0LmdldE1vZGVsKClcblx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChmaWVsZC5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpICsgXCIvXCIgKyBleHRlcm5hbElkUHJvcGVydHlQYXRoLCBmaWVsZC5tZXRhUGF0aCk7XG5cblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZXh0ZXJuYWxJZENvbnRleHQpIGFzIFByb3BlcnR5O1xuXG5cdFx0bGV0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdGV4dGVybmFsSWRDb250ZXh0IGFzIENvbnRleHQsXG5cdFx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHRcdCk7XG5cdFx0ZGF0YU1vZGVsUGF0aCA9IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JWYWx1ZShkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4pIHx8IGRhdGFNb2RlbFBhdGg7XG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgPSBkYXRhTW9kZWxQYXRoO1xuXHR9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBmaWVsZEdyb3VwSWRzIGZvciBhbiBJbnB1dCBvciBvdGhlciBlZGl0IGNvbnRyb2wuXG4gKiBAcGFyYW0gZmllbGRcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFRoZSBmaWVsZEdyb3VwSWRzXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaWVsZEdyb3VwSWRzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0eXBlc0ZvckNvbGxhYm9yYXRpb25Gb2N1c01hbmFnZW1lbnQgPSBbXG5cdFx0XCJJbnB1dFdpdGhWYWx1ZUhlbHBcIixcblx0XHRcIlRleHRBcmVhXCIsXG5cdFx0XCJEYXRlUGlja2VyXCIsXG5cdFx0XCJUaW1lUGlja2VyXCIsXG5cdFx0XCJEYXRlVGltZVBpY2tlclwiLFxuXHRcdFwiSW5wdXRXaXRoVW5pdFwiLFxuXHRcdFwiSW5wdXRcIixcblx0XHRcIklucHV0TWFza1wiLFxuXHRcdFwiTWFza2VkXCJcblx0XTtcblxuXHRpZiAoIWFwcENvbXBvbmVudCkge1xuXHRcdC8vZm9yIFZhbHVlSGVscCAvIE1hc3MgZWRpdCBUZW1wbGF0aW5nIHRoZSBhcHBDb21wb25lbnQgaXMgbm90IHBhc3NlZCB0byB0aGUgdGVtcGxhdGluZ1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBzaWRlRWZmZWN0U2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCIsXG5cdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdCk7XG5cblx0ZmllbGQubWFpblByb3BlcnR5UmVsYXRpdmVQYXRoID0gaXNQcm9wZXJ0eShmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdClcblx0XHQ/IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aClcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgJiYgdHlwZXNGb3JDb2xsYWJvcmF0aW9uRm9jdXNNYW5hZ2VtZW50LmluY2x1ZGVzKGZpZWxkLmVkaXRTdHlsZSB8fCBcIlwiKSkge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25GaWVsZEdyb3VwID0gYCR7Q29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXh9JHtmaWVsZC5kYXRhU291cmNlUGF0aH1gO1xuXHRcdGZpZWxkR3JvdXBJZHMucHVzaChjb2xsYWJvcmF0aW9uRmllbGRHcm91cCk7XG5cdH1cblxuXHRyZXR1cm4gZmllbGRHcm91cElkcy5sZW5ndGggPyBmaWVsZEdyb3VwSWRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIGlzIGZvciB0aGUgSUQgb2YgdGhlIGZpZWxkIGFjY29yZGluZyB0byBzZXZlcmFsIGRpZmZlcmVudCBzY2VuYXJpb3MuXG4gKlxuICogZGlzcGxheVN0eWxlSWQgaXMgdXNlZCBmb3IgYWxsIGNvbnRyb2xzIGluc2lkZSB0aGUgZmllbGQgd3JhcHBlciBpbiBkaXNwbGF5IG1vZGUuIEEgPHNhcC5tLnRleHQ+IGNvbnRyb2wgd291bGQgZ2V0IHRoaXMgSUQuIEFuIGV4YW1wbGUgaXM6IEFwcGxpY2F0aW9uQ29udGV4dDo6RmllbGQtZGlzcGxheS5cbiAqIGVkaXRTdHlsZUlkIGlzIHVzZWQgZm9yIGFsbCBjb250cm9scyBpbnNpZGUgdGhlIGZpZWxkIHdyYXBwZXIgaW4gZWRpdCBtb2RlLiBBIDxzYXAudWkubWRjLmZpZWxkPiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWVkaXQuXG4gKlxuICogSWYgbm8gd3JhcHBlciBleGlzdHMgdGhlIHdyYXBwZXJzIElEIHdpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUgZmlyc3QgY29udHJvbCBkaXNwbGF5ZWQsIEEgPHNhcC5tLnRleHQ+IGNvbnRyb2wgd291bGQgZ2V0IHRoaXMgSUQuIEFuIGV4YW1wbGUgaXM6IEFwcGxpY2F0aW9uQ29udGV4dDo6RmllbGQtY29udGVudC5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVJRHMoZmllbGQ6IFBhcnRpYWw8RmllbGRCbG9ja1Byb3BlcnRpZXM+KTogdm9pZCB7XG5cdGlmIChmaWVsZC5fZmxleElkICYmICFmaWVsZC5fYXBpSWQpIHtcblx0XHRmaWVsZC5fYXBpSWQgPSBmaWVsZC5fZmxleElkO1xuXHRcdGZpZWxkLl9mbGV4SWQgPSBnZXRDb250ZW50SWQoZmllbGQuX2ZsZXhJZCk7XG5cdH1cblxuXHRpZiAoZmllbGQuaWRQcmVmaXgpIHtcblx0XHRmaWVsZC5lZGl0U3R5bGVJZCA9IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1lZGl0XCJdKTtcblx0fVxuXHQvL05vV3JhcHBlcklkIHNjZW5hcmlvIGlzIGZvciB0aGUgTFIgdGFibGUuXG5cdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zPy5maWVsZE1vZGUgPT09IFwibm93cmFwcGVyXCIgJiYgZmllbGQuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiKSB7XG5cdFx0aWYgKGZpZWxkLl9mbGV4SWQpIHtcblx0XHRcdGZpZWxkLmRpc3BsYXlTdHlsZUlkID0gZmllbGQuX2ZsZXhJZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGQuZGlzcGxheVN0eWxlSWQgPSBmaWVsZC5pZFByZWZpeCA/IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1jb250ZW50XCJdKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSBpZiAoZmllbGQuaWRQcmVmaXgpIHtcblx0XHRmaWVsZC5kaXNwbGF5U3R5bGVJZCA9IGdlbmVyYXRlKFtmaWVsZC5pZFByZWZpeCwgXCJGaWVsZC1kaXNwbGF5XCJdKTtcblx0fVxufVxuXG4vKipcbiAqIFNldHMgdGhlIGludGVybmFsIGZvcm1hdE9wdGlvbnMgZm9yIHRoZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmaWVsZFxuICogQHJldHVybnMgQSBzdHJpbmcgd2l0aCB0aGUgaW50ZXJuYWwgZm9ybWF0T3B0aW9ucyBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXRPcHRpb25zKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IEZpZWxkRm9ybWF0T3B0aW9ucyB7XG5cdHJldHVybiB7XG5cdFx0Li4uZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHR0ZXh0QWxpZ25Nb2RlOiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPz8gXCJGb3JtXCIsXG5cdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvciA/PyB0cnVlLFxuXHRcdGRpc3BsYXlNb2RlOiBmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIGFzIERpc3BsYXlNb2RlLFxuXHRcdG1lYXN1cmVEaXNwbGF5TW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy5tZWFzdXJlRGlzcGxheU1vZGUsXG5cdFx0dGV4dExpbmVzRWRpdDogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMsXG5cdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5OiBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RoLFxuXHRcdGZpZWxkRWRpdFN0eWxlOiBmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlLFxuXHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ6IGZpZWxkLmZvcm1hdE9wdGlvbnMucmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCxcblx0XHRzaG93VGltZTogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93VGltZSxcblx0XHRzaG93VGltZXpvbmU6IGZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lLFxuXHRcdHNob3dEYXRlOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dEYXRlXG5cdH0gYXMgRmllbGRGb3JtYXRPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RJZGVudGlmaWVyVGV4dChcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBGaWVsZEZvcm1hdE9wdGlvbnMsXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IFByb3BlcnR5UGF0aD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpXG5cdCk7XG5cdGNvbnN0IHRhcmdldERpc3BsYXlNb2RlID0gZmllbGRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpXG5cdFx0PyAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0IGFzIFByb3BlcnR5KVxuXHRcdDogKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpO1xuXG5cdGNvbnN0IGNvbW1vblRleHQgPSBwcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0aWYgKGNvbW1vblRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRzd2l0Y2ggKHRhcmdldERpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pKTtcblx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRUb0tlZXBXaGl0ZXNwYWNlKSk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0T3ZlcnJpZGVzKGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLCBpZDogc3RyaW5nKTogRmllbGRQcm9wZXJ0aWVzIHtcblx0Lypcblx0XHRRdWFsbXM6IFdlIG5lZWQgdG8gdXNlIHRoaXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB0eXBlIHRvIGJlIGFibGUgdG8gaXRlcmF0ZVxuXHRcdG92ZXIgdGhlIHByb3BlcnRpZXMgbGF0ZXIgb24gYW5kIGNhc3QgaXQgYWZ0ZXJ3YXJkcyBhcyBhIGZpZWxkIHByb3BlcnR5IHR5cGVcblx0Ki9cblx0Y29uc3QgcHJvcHMgPSB7fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXG5cdGlmIChjb250cm9sQ29uZmlndXJhdGlvbikge1xuXHRcdGNvbnN0IGNvbnRyb2xDb25maWcgPSBjb250cm9sQ29uZmlndXJhdGlvbltpZF0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0XHRpZiAoY29udHJvbENvbmZpZykge1xuXHRcdFx0T2JqZWN0LmtleXMoY29udHJvbENvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG5cdFx0XHRcdHByb3BzW2NvbmZpZ0tleV0gPSBjb250cm9sQ29uZmlnW2NvbmZpZ0tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BzIGFzIHVua25vd24gYXMgRmllbGRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByZXBhcmUgdGhlIGRpc3BsYXkgc3R5bGUgb2YgdGhlIGZpZWxkIGluIGNhc2Ugb2Ygc2VtYW50aWMgb2JqZWN0cyBvciBxdWlja3ZpZXcgZmFjZXRzLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIGludGVybmFsTW9kZWxcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGhhc1NlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIGhhc1F1aWNrVmlld1xuICovXG5mdW5jdGlvbiBtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0aGFzU2VtYW50aWNPYmplY3RzOiBib29sZWFuLFxuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRpZiAoaGFzUXVpY2tWaWV3KSB7XG5cdFx0ZmllbGQuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHRmaWVsZC5xdWlja1ZpZXdUeXBlID0gXCJGYWNldHNcIjtcblx0fVxuXHRpZiAoaGFzU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgZm91bmRTZW1hbnRpY09iamVjdHMgPSBtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlcihmaWVsZC5zZW1hbnRpY09iamVjdCwgZGF0YU1vZGVsUGF0aCwgaW50ZXJuYWxNb2RlbCk7XG5cdFx0aWYgKGZvdW5kU2VtYW50aWNPYmplY3RzLmhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0IHx8IGZvdW5kU2VtYW50aWNPYmplY3RzLmR5bmFtaWNTZW1hbnRpY09iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRmaWVsZC5oYXNRdWlja1ZpZXcgPSB0cnVlO1xuXHRcdFx0ZmllbGQucXVpY2tWaWV3VHlwZSA9IGhhc1F1aWNrVmlldyA/IFwiRmFjZXRzQW5kU2VtYW50aWNMaW5rc1wiIDogXCJTZW1hbnRpY0xpbmtzXCI7XG5cdFx0XHRmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzID1cblx0XHRcdFx0Zm91bmRTZW1hbnRpY09iamVjdHMuaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QgIT09IHRydWUgPyBmb3VuZFNlbWFudGljT2JqZWN0cy5keW5hbWljU2VtYW50aWNPYmplY3RzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENoZWNrIGZpZWxkIHRvIGtub3cgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0LlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIGRhdGFNb2RlbFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUcnVlIGlmIGZpZWxkIGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdChkYXRhTW9kZWxQYXRoKSB8fCAoZmllbGQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5zZW1hbnRpY09iamVjdCAhPT0gXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB0YXJnZXRFbnRpdHlUeXBlO1xuXHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9IGZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyO1xuXHRjb25zdCBmaWVsZENvbnRhaW5lclR5cGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGU7XG5cdGlmIChmaWVsZENvbnRhaW5lclR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdHRhcmdldEVudGl0eVR5cGUgPSBmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdH1cblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/Lm5hbWU7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uVmFsdWUgPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVgKTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbiA9IHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmApO1xuXHRjb25zdCBwbGFjZWhvbGRlckV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgL2N1cnJlbnRDdHh0YCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5tZXNzYWdlVHlwZWApLFxuXHRcdFx0ZWRpdFN0eWxlUGxhY2Vob2xkZXIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG5cdFx0XSxcblx0XHRhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0UGxhY2Vob2xkZXIsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihwbGFjZWhvbGRlckV4cCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcERhdGFQb2ludFR5cGUoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRjb25zdCBkYXRhUG9pbnRUeXBlID0geyAuLi5kYXRhRmllbGQgfTtcblx0aWYgKChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhUG9pbnQpPy50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSB7XG5cdFx0ZGF0YVBvaW50VHlwZS4kVHlwZSA9IGRhdGFGaWVsZC4kVHlwZSB8fCBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlO1xuXHR9XG5cdHJldHVybiBkYXRhUG9pbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjaW1hbFBhZGRpbmcoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsIHByb3BlcnR5OiBQcm9wZXJ0eSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0ID0gYXBwQ29tcG9uZW50Py5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0XHQ/IG1hbmlmZXN0Py5tYWNyb3M/LnRhYmxlPy5jdXJyZW5jeT8uZGVjaW1hbFBhZGRpbmcgPz8gNVxuXHRcdDogbWFuaWZlc3Q/Lm1hY3Jvcz8udGFibGU/LnVuaXRPZk1lYXN1cmU/LmRlY2ltYWxQYWRkaW5nID8/IDM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcERpc3BsYXlTdHlsZShcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IFByb3BlcnR5Pixcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuKTogRmllbGRCbG9ja1Byb3BlcnRpZXMge1xuXHRjb25zdCByZXN1bHRGaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMgPSBmaWVsZDtcblx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmICghZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIlRleHRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5oYXNVbml0T3JDdXJyZW5jeSA9XG5cdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAhPT0gdW5kZWZpbmVkO1xuXHRyZXN1bHRGaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IFVJRm9ybWF0dGVycy5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdChcblx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG5cdCk7XG5cdHJlc3VsdEZpZWxkLnRleHRGcm9tVmFsdWVMaXN0ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0W1xuXHRcdFx0XHRwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFBhdGgpKSxcblx0XHRcdFx0YC8ke3Byb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZX1gLFxuXHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlXG5cdFx0XHRdLFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XCJcblx0XHQpXG5cdCk7XG5cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZSkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJBdmF0YXJcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHQvLyBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBTdHJlYW0gd2lsbCBiZSBzaG93biB3aXRoaW4gYW4gZW50aXR5IGluc3RhbmNlIGFzIGNpcmNsZSBpZiB0aGUgZW50aXR5IGlzIGFubm90YXRlZCBhcyBJc05hdHVyYWxQZXJzb25cblx0Ly8gYW5kIG5laXRoZXIgSXNJbWFnZSBub3IgSXNJbWFnZVVSTCBhbm5vdGF0aW9uIGhhcyBiZWVuIHVzZWQuXG5cdGlmIChwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5pc0ZpZWxkR3JvdXBJdGVtICYmIHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0c2V0VXBEcmFmdEluZGljYXRvcihkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCByZXN1bHRGaWVsZCk7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlIGFzIHN0cmluZykge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRGF0YVBvaW50XCI7XG5cdFx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PVxuXHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQ29udGFjdFwiO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQnV0dG9uXCI7XG5cdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGNvbnN0IGhhc1F1aWNrVmlldyA9IGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgcHJvcGVydHkpO1xuXHRjb25zdCBoYXNTZW1hbnRpY09iamVjdHMgPSBwcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5SGFzU2VtYW50aWNPYmplY3QocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXG5cdGlmIChpc1NlbWFudGljS2V5KHByb3BlcnR5LCBkYXRhTW9kZWxQYXRoKSAmJiByZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQocmVzdWx0RmllbGQsIGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pO1xuXHRcdHJlc3VsdEZpZWxkLnNob3dFcnJvckluZGljYXRvciA9XG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24gYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFNlcnZpY2VPYmplY3Q+KT8udGFyZ2V0T2JqZWN0Py5fdHlwZSA9PT1cblx0XHRcdFx0XCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg7XG5cdFx0cmVzdWx0RmllbGQuc2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCA9IChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSkubmFtZTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPVxuXHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFNlbWFudGljS2V5XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChkYXRhRmllbGQuQ3JpdGljYWxpdHkpIHtcblx0XHRtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUoXG5cdFx0XHRyZXN1bHRGaWVsZCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdFx0aGFzUXVpY2tWaWV3XG5cdFx0KTtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIk9iamVjdFN0YXR1c1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAoXG5cdFx0KHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSAmJlxuXHRcdFN0cmluZyhyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lPclVuaXRBbGlnbmVkKSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIlxuXHQpIHtcblx0XHRjb25zdCBkZWNpbWFsUGFkZGluZyA9IEZpZWxkU3RydWN0dXJlSGVscGVyLmdldERlY2ltYWxQYWRkaW5nKGFwcENvbXBvbmVudCwgcHJvcGVydHkpO1xuXHRcdHJlc3VsdEZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ/IHJlc3VsdEZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhcblx0XHRcdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRkZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHQgICk7XG5cblx0XHRyZXN1bHRGaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdCEhZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFsc1xuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkXCI7XG5cblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTGlua1wiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJFeHBhbmRhYmxlVGV4dFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXG5cdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIlRleHRcIjtcblx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdGludGVybmFsTW9kZWwsXG5cdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRoYXNTZW1hbnRpY09iamVjdHMsXG5cdFx0aGFzUXVpY2tWaWV3XG5cdCk7XG5cdGlmIChyZXN1bHRGaWVsZC5oYXNRdWlja1ZpZXcpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtXaXRoUXVpY2tWaWV3XCI7XG5cdH1cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHNob3VsZCBhZGQgYSBkcmFmdCBpbmRpY2F0b3Igd2l0aGluIHRoZSBmaWVsZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggcG9pbnRpbmcgdG8gdGhlIG1haW4gcHJvcGVydHkgZm9yIHRoZSBmaWVsZFxuICogQHBhcmFtIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIHNldFVwRHJhZnRJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoaXNTZW1hbnRpY0tleShkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSwgZGF0YU1vZGVsUGF0aCkpIHtcblx0XHRmaWVsZC5oYXNTaXR1YXRpb25zSW5kaWNhdG9yID0gU2l0dWF0aW9uc0luZGljYXRvci5nZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5KGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZSkgIT09IHVuZGVmaW5lZDtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdChkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgJiZcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGEgZ3JpZCB0YWJsZSBvciB0cmVlIHRhYmxlIGhhc0RyYWZ0SW5kaWNhdG9yIHdpbGwgYmUgZmFsc2Ugc2luY2UgdGhlIGRyYWZ0XG5cdFx0XHQvLyBpbmRpY2F0b3IgbmVlZHMgdG8gYmUgcmVuZGVyZWQgaW50byBhIHNlcGFyYXRlIGNvbHVtblxuXHRcdFx0Ly8gSGVuY2Ugd2UgdGhlbiBmYWxsIGJhY2sgdG8gZGlzcGxheSBzdHlsZXMgT2JqZWN0SWRlbnRpZmllciBvciBMYWJlbFNlbWFudGljS2V5IGluc3RlYWRcblx0XHRcdC8vIG9mIHRoZSBjb21iaW5lZCBJRCBhbmQgZHJhZnQgaW5kaWNhdG9yIHN0eWxlXG5cdFx0XHRmaWVsZC5kcmFmdEluZGljYXRvclZpc2libGUgPSBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lKSBhcyBzdHJpbmc7XG5cdFx0XHRmaWVsZC5hZGREcmFmdEluZGljYXRvciA9IHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEVkaXRTdHlsZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSBmaWVsZDtcblx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhyZXN1bHRGaWVsZCwgcmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgsIHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRyZXN1bHRGaWVsZC5maWVsZEdyb3VwSWRzID0gY29tcHV0ZUZpZWxkR3JvdXBJZHMocmVzdWx0RmllbGQsIGFwcENvbXBvbmVudCk7XG5cdHJldHVybiByZXN1bHRGaWVsZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dChcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+XG4pOiB2b2lkIHtcblx0Y29uc3Qgc2VtYW50aWNTdHlsZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNlbWFudGljS2V5U3R5bGU7XG5cdGNvbnN0IGRpc3BsYXlNb2RlID0gZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZTtcblx0ZmllbGQuaWRlbnRpZmllclRpdGxlID0gZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdHsgZGlzcGxheU1vZGUsIHNwbGl0VGl0bGVPblR3b0xpbmVzOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNlbWFudGljS2V5U3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiIH0sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZFxuXHQpO1xuXHRmaWVsZC5pZGVudGlmaWVyVGV4dCA9XG5cdFx0c2VtYW50aWNTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBnZXRPYmplY3RJZGVudGlmaWVyVGV4dChmaWVsZC5mb3JtYXRPcHRpb25zLCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGb3JtYXRPcHRpb25zKFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRjb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0dmlld0RhdGFNb2RlbDogSlNPTk1vZGVsXG4pOiB2b2lkIHtcblx0Y29uc3Qgb3ZlcnJpZGVQcm9wcyA9IGdldE92ZXJyaWRlcyhjb250cm9sQ29uZmlndXJhdGlvbiwgKGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoKS5nZXRQYXRoKCkpO1xuXG5cdGlmICghZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPSBVSUZvcm1hdHRlcnMuZ2V0RGlzcGxheU1vZGUoZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdGZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiA9IGZpZWxkLnZhbHVlXG5cdFx0XHQ/IGZpZWxkLnZhbHVlXG5cdFx0XHQ6IGdldFZhbHVlQmluZGluZyhkYXRhTW9kZWxQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zLCB0cnVlLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCA9XG5cdFx0KG92ZXJyaWRlUHJvcHMgYXMgdW5rbm93biBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpLnRleHRMaW5lc0VkaXQgfHxcblx0XHQob3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zICYmIG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0KSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCB8fFxuXHRcdDQ7XG5cdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzID1cblx0XHQob3ZlcnJpZGVQcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkRm9ybWF0T3B0aW9ucykudGV4dE1heExpbmVzIHx8XG5cdFx0KG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucyAmJiBvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzKSB8fFxuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzO1xuXG5cdC8vIFJldHJpZXZlIHRleHQgZnJvbSB2YWx1ZSBsaXN0IGFzIGZhbGxiYWNrIGZlYXR1cmUgZm9yIG1pc3NpbmcgdGV4dCBhbm5vdGF0aW9uIG9uIHRoZSBwcm9wZXJ0eVxuXHRpZiAodmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFwiKSkge1xuXHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQoXG5cdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCEsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHQvLyBDb25zaWRlciBUZXh0QXJyYW5nZW1lbnQgYXQgRW50aXR5VHlwZSBvdGhlcndpc2Ugc2V0IGRlZmF1bHQgZGlzcGxheSBmb3JtYXQgJ0Rlc2NyaXB0aW9uVmFsdWUnXG5cdFx0XHRjb25zdCBoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQgPSAhIWRhdGFNb2RlbFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50O1xuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9IGhhc0VudGl0eVRleHRBcnJhbmdlbWVudCA/IGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgOiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwVmFsdWVTdGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCB2YWx1ZVN0YXRlRXhwO1xuXHRjb25zdCBmaWVsZENvbnRhaW5lclR5cGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy50ZXh0QWxpZ25Nb2RlID8gZmllbGQuZm9ybWF0T3B0aW9ucz8udGV4dEFsaWduTW9kZSA6IFwiRm9ybVwiO1xuXHRjb25zdCBwcm9wZXJ0eVBhdGhJbk1vZGVsID0gcGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoKSkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFByb3BlcnR5Pjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IHRleHRQYXRoID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLmRhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvblZhbHVlID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlYCk7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gKTtcblx0aWYgKGZpZWxkQ29udGFpbmVyVHlwZSA9PT0gXCJUYWJsZVwiKSB7XG5cdFx0dmFsdWVTdGF0ZUV4cCA9IGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EZXNjcmlwdGlvbixcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9yZWNvbW1lbmRhdGlvbnNEYXRhYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0cGF0aEluTW9kZWwoYC9pc0VkaXRhYmxlYCwgXCJ1aVwiKSxcblx0XHRcdFx0ZmllbGQuZGF0YVNvdXJjZVBhdGgsXG5cdFx0XHRcdHByb3BlcnR5UGF0aEluTW9kZWwsXG5cdFx0XHRcdHRleHRQYXRoXG5cdFx0XHRdLFxuXHRcdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFZhbHVlU3RhdGUsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHZhbHVlU3RhdGVFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvaXNFZGl0YWJsZWAsIFwidWlcIiksXG5cdFx0XHRcdGZpZWxkLmRhdGFTb3VyY2VQYXRoLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhJbk1vZGVsLFxuXHRcdFx0XHR0ZXh0UGF0aFxuXHRcdFx0XSxcblx0XHRcdGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5mb3JtYXRWYWx1ZVN0YXRlXG5cdFx0KTtcblx0fVxuXG5cdGZpZWxkLnZhbHVlU3RhdGUgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZVN0YXRlRXhwKTtcblx0cmV0dXJuIGZpZWxkLnZhbHVlU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcFZpc2libGVQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHQvLyB3ZSBkbyB0aGlzIGJlZm9yZSBlbmhhbmNpbmcgdGhlIGRhdGFNb2RlbFBhdGggc28gdGhhdCBpdCBzdGlsbCBwb2ludHMgYXQgdGhlIERhdGFGaWVsZFxuXHQvLyBjb25zdCB2aXNpYmxlUHJvcGVydGllczogUGFydGlhbDxmaWVsZEJsb2NrPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KFxuXHRcdGZpZWxkLm1ldGFQYXRoQ29udGV4dCA/IGZpZWxkLm1ldGFQYXRoQ29udGV4dCA6IGZpZWxkLm1ldGFQYXRoLFxuXHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdCk7XG5cblx0ZmllbGQudmlzaWJsZSA/Pz0gZ2V0VmlzaWJsZUV4cHJlc3Npb24ocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zKTtcblx0ZmllbGQuZGlzcGxheVZpc2libGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5maWVsZE1vZGUgPT09IFwibm93cmFwcGVyXCIgPyBmaWVsZC52aXNpYmxlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHByb3BlcnRpZXMgZm9yIHRoZSBmaWxlIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRpZiAoZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkZpbGVcIikge1xuXHRcdGZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCkgfHwgXCJcIjtcblx0XHRjb25zdCBmaWxlTmFtZUFubm90YXRpb24gPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihmaWxlTmFtZUFubm90YXRpb24pKSB7XG5cdFx0XHRjb25zdCBmaWxlTmFtZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmaWVsZC5kYXRhTW9kZWxQYXRoLCBmaWxlTmFtZUFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRmaWVsZC5maWxlRmlsZW5hbWVFeHByZXNzaW9uID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChmaWxlTmFtZURhdGFNb2RlbFBhdGgpID8/IFwiXCI7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgcHJvcGVydGllcyBmb3IgdGhlIGlubGluZSBlZGl0IHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkXG4gKiBAcGFyYW0gdmlld0RhdGFNb2RlbFxuICovXG5mdW5jdGlvbiBjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJGaWxlXCIgfHwgZmllbGQuZGlzcGxheVN0eWxlID09PSBcIkF2YXRhclwiKSB7XG5cdFx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPSB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID1cblx0XHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9PT0gdHJ1ZSB8fCB2aWV3RGF0YU1vZGVsPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpID09PSB0cnVlID8gdHJ1ZSA6IHVuZGVmaW5lZDtcblx0aWYgKGZpZWxkLmlubGluZUVkaXRFbmFibGVkICYmIGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgIT09IFwiRGlzcGxheVwiKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QoXG5cdFx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aFxuXHRcdCk7XG5cblx0XHRmaWVsZC5oYXNJbmxpbmVFZGl0ID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdChleHByKSA9PiB7XG5cdFx0XHRcdGlmIChleHByLnBhdGggPT09IFwiaXNFZGl0YWJsZVwiICYmIGV4cHIubW9kZWxOYW1lID09PSBcInVpXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGV4cHI7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCkgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXHR9XG59XG5cbmNvbnN0IEZpZWxkU3RydWN0dXJlSGVscGVyID0ge1xuXHRnZXREZWNpbWFsUGFkZGluZyxcblx0c2V0VXBGaWVsZCxcblx0Y29tcHV0ZUV4dGVybmFsSUQsXG5cdHNldFVwRGlzcGxheVN0eWxlLFxuXHRzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQsXG5cdHNldFVwVmFsdWVTdGF0ZVxufTtcbmV4cG9ydCBkZWZhdWx0IEZpZWxkU3RydWN0dXJlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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
|
|
648
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXRVcEZpZWxkIiwiZmllbGQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdEYXRhTW9kZWwiLCJpbnRlcm5hbE1vZGVsIiwiYXBwQ29tcG9uZW50IiwiaXNSZWFkT25seUluaXRpYWwiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwicmVzdWx0RmllbGQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2UiLCJ2aXNpYmxlIiwidmhJZFByZWZpeCIsIl9mbGV4SWQiLCJpZCIsImlkUHJlZml4IiwiZm9ybWF0T3B0aW9ucyIsImdldEZvcm1hdE9wdGlvbnMiLCJzaG93T25seVVuaXREZWNpbWFscyIsImdldFByb3BlcnR5IiwicHJlc2VydmVEZWNpbWFsc0ZvckN1cnJlbmN5IiwidmFsdWVIZWxwTWV0YVBhdGgiLCJjb21wdXRlQ29tbW9uUHJvcGVydGllcyIsImdldE1vZGVsIiwiY29udmVydGVkTWV0YVBhdGgiLCJzZXRVcERhdGFQb2ludFR5cGUiLCJzZXRVcFZpc2libGVQcm9wZXJ0aWVzIiwiY29tcHV0ZUlEcyIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJsYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJjb21wdXRlRXh0ZXJuYWxJRCIsImVudGl0eVR5cGUiLCJvZGF0YU1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwiY29tcHV0ZUVkaXRNb2RlIiwiY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzIiwiY29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMiLCJzZXRVcEZvcm1hdE9wdGlvbnMiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInNldFVwRGlzcGxheVN0eWxlIiwic2V0VXBFZGl0U3R5bGUiLCJ2YWx1ZVN0YXRlIiwic2V0VXBWYWx1ZVN0YXRlIiwiZWRpdFN0eWxlIiwiZWRpdFN0eWxlUGxhY2Vob2xkZXIiLCJzZXRJbnB1dFdpdGhWYWx1ZWhlbHBQbGFjZWhvbGRlciIsImNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzIiwiY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzIiwiYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQiLCJkaXNwbGF5U3R5bGUiLCJpbmNsdWRlcyIsInRhcmdldE9iamVjdCIsInRleHQiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRUZXh0QmluZGluZyIsInNob3dFbXB0eUluZGljYXRvciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsIlN0cmluZyIsInVuZGVmaW5lZCIsImlzUHJvcGVydHkiLCJhbm5vdGF0aW9ucyIsIlVJIiwiRGF0YUZpZWxkRGVmYXVsdCIsImNvbXB1dGVkRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImVxdWFsIiwicmVhZE9ubHkiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbGlkYXRlRmllbGRHcm91cCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwidXBsb2FkU3RyZWFtIiwicmVtb3ZlU3RyZWFtIiwiaGFuZGxlT3BlblVwbG9hZGVyIiwiaGFuZGxlQ2xvc2VVcGxvYWRlciIsIm9wZW5FeHRlcm5hbExpbmsiLCJvbkZvY3VzT3V0IiwibGlua1ByZXNzZWQiLCJkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwib25EYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvbkRhdGFGaWVsZFdpdGhJQk4iLCJfZXhwb3J0cyIsImNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJEaXNwbGF5IiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJhbmQiLCJub3QiLCJjb25zdGFudCIsIklzSW5hY3RpdmUiLCJlZGl0TW9kZUFzT2JqZWN0IiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUiLCJwcm9wZXJ0eSIsIlZhbHVlIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJjb250ZXh0UGF0aENvbnRleHQiLCJnZXRQYXRoIiwicmVwbGFjZUFsbCIsInJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJtZWFzdXJlUmVhZE9ubHkiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJnZXRFZGl0TW9kZSIsImV4dGVybmFsSURQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkiLCJ0eXBlIiwiaXNEYXRhRmllbGQiLCIkdGFyZ2V0IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwiZXh0ZXJuYWxJZENvbnRleHQiLCJjb252ZXJ0ZWRNZXRhUGF0aEV4dGVybmFsSUQiLCJjb21wdXRlRmllbGRHcm91cElkcyIsInR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudCIsInNpZGVFZmZlY3RTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZmllbGRHcm91cElkcyIsIm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjb2xsYWJvcmF0aW9uRmllbGRHcm91cCIsIkNvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IiwicHVzaCIsImxlbmd0aCIsIl9hcGlJZCIsImdldENvbnRlbnRJZCIsImVkaXRTdHlsZUlkIiwiZ2VuZXJhdGUiLCJmaWVsZE1vZGUiLCJkaXNwbGF5U3R5bGVJZCIsInRleHRBbGlnbk1vZGUiLCJkaXNwbGF5TW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsImZpZWxkRWRpdFN0eWxlIiwicmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dCIsInNob3dUaW1lIiwic2hvd1RpbWV6b25lIiwic2hvd0RhdGUiLCJnZXRPYmplY3RJZGVudGlmaWVyVGV4dCIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInRhcmdldERpc3BsYXlNb2RlIiwicHJvcGVydHlEZWZpbml0aW9uIiwiaXNQcm9wZXJ0eVBhdGhFeHByZXNzaW9uIiwiY29tbW9uVGV4dCIsIkNvbW1vbiIsIlRleHQiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRUb0tlZXBXaGl0ZXNwYWNlIiwiZ2V0T3ZlcnJpZGVzIiwicHJvcHMiLCJjb250cm9sQ29uZmlnIiwia2V5cyIsImZvckVhY2giLCJjb25maWdLZXkiLCJtYW5hZ2VRdWlja1ZpZXdGb3JEaXNwbGF5U3R5bGUiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJoYXNRdWlja1ZpZXciLCJxdWlja1ZpZXdUeXBlIiwiZm91bmRTZW1hbnRpY09iamVjdHMiLCJtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciIsInNlbWFudGljT2JqZWN0IiwiaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3QiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwicHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0IiwiZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QiLCJmaWVsZENvbnRhaW5lclR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJuYW1lIiwicmVjb21tZW5kYXRpb25WYWx1ZSIsInJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlckV4cCIsImFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFBsYWNlaG9sZGVyIiwiZGF0YUZpZWxkIiwiZGF0YVBvaW50VHlwZSIsInRlcm0iLCIkVHlwZSIsImdldERlY2ltYWxQYWRkaW5nIiwibWFuaWZlc3QiLCJnZXRNYW5pZmVzdEVudHJ5IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1hY3JvcyIsInRhYmxlIiwiY3VycmVuY3kiLCJkZWNpbWFsUGFkZGluZyIsInVuaXRPZk1lYXN1cmUiLCJoYXNVbml0T3JDdXJyZW5jeSIsIlVuaXQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJbnB1dE1hc2siLCJNYXNrZWQiLCJpc0ZpZWxkR3JvdXBJdGVtIiwic2V0VXBEcmFmdEluZGljYXRvciIsIlRhcmdldCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJpc1NlbWFudGljS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInNldFVwT2JqZWN0SWRlbnRpZmllclRpdGxlQW5kVGV4dCIsInNob3dFcnJvckluZGljYXRvciIsImNvbnRleHRMb2NhdGlvbiIsIl90eXBlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsIkNyaXRpY2FsaXR5IiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJGaWVsZFN0cnVjdHVyZUhlbHBlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsImdldFZhbHVlQmluZGluZyIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJNdWx0aUxpbmVUZXh0IiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJnZXRTaXR1YXRpb25zTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwic2VtYW50aWNTdHlsZSIsImlkZW50aWZpZXJUaXRsZSIsImdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJzcGxpdFRpdGxlT25Ud29MaW5lcyIsImlkZW50aWZpZXJUZXh0Iiwib3ZlcnJpZGVQcm9wcyIsImdldERpc3BsYXlNb2RlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQiLCJoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQiLCJUZXh0QXJyYW5nZW1lbnQiLCJ2YWx1ZVN0YXRlRXhwIiwicHJvcGVydHlQYXRoSW5Nb2RlbCIsInRleHRQYXRoIiwiZm9ybWF0VmFsdWVTdGF0ZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiZGlzcGxheVZpc2libGUiLCJtYWNyb0lkIiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZU5hbWVBbm5vdGF0aW9uIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmaWxlTmFtZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJoYXNJbmxpbmVFZGl0IiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJleHByIiwibW9kZWxOYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZFN0cnVjdHVyZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUge1xuXHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdFBhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IENvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCAqIGFzIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVGl0bGVIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5LCBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LCBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgaXNTZW1hbnRpY0tleSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCwgbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9TZW1hbnRpY09iamVjdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dE1hc2tGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvSW5wdXRNYXNrXCI7XG5pbXBvcnQgKiBhcyBGaWVsZFRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUsXG5cdGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcsXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVCaW5kaW5nLFxuXHRnZXRWaXNpYmxlRXhwcmVzc2lvbixcblx0aGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMsXG5cdGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQsXG5cdGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMsXG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXNcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgYWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9BZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBTaXR1YXRpb25zSW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi8uLi9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheVN0eWxlIGFzIERpc3BsYXlTdHlsZVR5cGUsIEVkaXRTdHlsZSBhcyBFZGl0U3R5bGVUeXBlLCBGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9GaWVsZFN0eWxlc1wiO1xuXG5leHBvcnQgdHlwZSBJbnB1dEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gT21pdDxQcm9wZXJ0aWVzT2Y8RmllbGQ+LCBcInJlYWRPbmx5XCIgfCBcInNlbWFudGljT2JqZWN0XCI+ICYge1xuXHRpc1B1YmxpY0ZpZWxkPzogYm9vbGVhbjsgLy9cblx0Ly9hZGQgZXZlbnRzIGZyb20gRmllbGQgLSAnUHJvcGVydGllc09mJyBkb2VzIG5vdCBpbmNsdWRlIHRoZW1cblx0Y2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyO1xuXHRvbkxpdmVDaGFuZ2U/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzZW1hbnRpY09iamVjdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcbmV4cG9ydCB0eXBlIEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0ge1xuXHRfY29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdF9zZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0aXNEeW5hbWljSW5zdGFudGlhdGlvbj86IGJvb2xlYW47XG5cdGNoYW5nZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgRXZlbnRIYW5kbGVyO1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdGlzUHVibGljRmllbGQ6IGJvb2xlYW47XG5cdHZpc2libGU/OiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxpdmVDaGFuZ2U6IEV2ZW50SGFuZGxlcjtcblx0b25MaXZlQ2hhbmdlPzogc3RyaW5nIHwgRXZlbnRIYW5kbGVyO1xuXHQvLy0tLS0tXG5cdGZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucztcblx0cHJvcGVydHk6IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0dmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHVuaXRCaW5kaW5nRXhwcmVzc2lvbj86IHN0cmluZztcblx0ZGlzcGxheVZpc2libGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjb252ZXJ0ZWRNZXRhUGF0aDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcztcblx0Y2xhc3M/OiBzdHJpbmc7XG5cdGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nW107XG5cdGhhc1VuaXRPckN1cnJlbmN5PzogYm9vbGVhbjtcblx0dGV4dD86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxhYmVsPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW1wdHlJbmRpY2F0b3JNb2RlPzogc3RyaW5nO1xuXHRlZGl0YWJsZUV4cHJlc3Npb246IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWVsZEdyb3VwSWRzPzogc3RyaW5nW107XG5cdGRpc3BsYXlTdHlsZUlkPzogc3RyaW5nO1xuXHR0ZXh0RnJvbVZhbHVlTGlzdD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNRdWlja1ZpZXc6IGJvb2xlYW47XG5cdGlkZW50aWZpZXJUaXRsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZGVudGlmaWVyVGV4dD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRoYXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0c2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRzaG93RXJyb3JJbmRpY2F0b3I6IGJvb2xlYW47XG5cdGR5bmFtaWNTZW1hbnRpY09iamVjdHM/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkYXRhU291cmNlUGF0aD86IHN0cmluZztcblx0ZWRpdFN0eWxlSWQ/OiBzdHJpbmc7XG5cdGVuYWJsZWRFeHByZXNzaW9uOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRlZGl0TW9kZUFzT2JqZWN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRjb21wdXRlZEVkaXRNb2RlOiBGaWVsZEVkaXRNb2RlIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZhbHVlQmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0bWluRGF0ZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXhEYXRlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5kZWZpbmVkIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVkaXRTdHlsZVBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRzdGF0aWNEZXNjcmlwdGlvbj86IHN0cmluZztcblx0dmFsdWVTdGF0ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRmaWxlRmlsZW5hbWVFeHByZXNzaW9uOiBzdHJpbmc7XG5cdGZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHR0ZXh0QmluZGluZ0V4cHJlc3Npb24/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0cmF0aW5nSW5kaWNhdG9yVG9vbHRpcD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtYXNrPzogSW5wdXRNYXNrRm9ybWF0T3B0aW9ucyB8IG51bGw7XG5cdGVkaXRTdHlsZT86IEVkaXRTdHlsZVR5cGUgfCBudWxsO1xuXHRfYXBpSWQ/OiBzdHJpbmc7XG5cdGVudGl0eVR5cGU/OiBDb250ZXh0O1xuXHRvZGF0YU1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdHByb3BlcnR5Rm9yRmllbGRDb250cm9sOiBVSUZvcm1hdHRlcnMuUHJvcGVydHlPclBhdGg8UHJvcGVydHk+O1xuXHRkZXNjcmlwdGlvbkJpbmRpbmdFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRxdWlja1ZpZXdUeXBlPzogXCJTZW1hbnRpY0xpbmtzXCIgfCBcIkZhY2V0c1wiIHwgXCJGYWNldHNBbmRTZW1hbnRpY0xpbmtzXCI7XG5cdGRpc3BsYXlTdHlsZT86IERpc3BsYXlTdHlsZVR5cGU7XG5cdHVuaXRFZGl0YWJsZT86IHN0cmluZztcblx0c3RhdGljVW5pdD86IHN0cmluZztcblx0dmFsdWVJbnB1dFdpZHRoPzogc3RyaW5nO1xuXHR2YWx1ZUlucHV0RmllbGRXaWR0aD86IHN0cmluZztcblx0dW5pdElucHV0VmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkcmFmdEluZGljYXRvclZpc2libGU/OiBzdHJpbmc7XG5cdGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zPzogYm9vbGVhbiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0YWRkRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGNvbnZlcnRlZE1ldGFQYXRoRXh0ZXJuYWxJRD86IFByb3BlcnR5O1xuXHRkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRD86IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+O1xuXHR2YWx1ZUhlbHBNZXRhUGF0aD86IENvbnRleHQ7XG5cdGlkOiBzdHJpbmc7XG5cdHZhbHVlSGVscElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdG1ldGFQYXRoQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0Y29udGV4dFBhdGhDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRmaWxlVXBsb2FkZXJWaXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBib29sZWFuO1xuXHRldmVudEhhbmRsZXJzOiB7XG5cdFx0Y2hhbmdlOiBFdmVudEhhbmRsZXI7XG5cdFx0bGl2ZUNoYW5nZTogRXZlbnRIYW5kbGVyO1xuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVR5cGVNaXNzbWF0Y2g6IEV2ZW50SGFuZGxlcjtcblx0XHRoYW5kbGVGaWxlU2l6ZUV4Y2VlZDogRXZlbnRIYW5kbGVyO1xuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiBFdmVudEhhbmRsZXI7XG5cdFx0dXBsb2FkU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0cmVtb3ZlU3RyZWFtOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiBFdmVudEhhbmRsZXI7XG5cdFx0aGFuZGxlQ2xvc2VVcGxvYWRlcjogRXZlbnRIYW5kbGVyO1xuXHRcdG9wZW5FeHRlcm5hbExpbms6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkZvY3VzT3V0OiBFdmVudEhhbmRsZXI7XG5cdFx0bGlua1ByZXNzZWQ6IEV2ZW50SGFuZGxlcjtcblx0XHRkaXNwbGF5QWdncmVnYXRpb25EZXRhaWxzOiBFdmVudEhhbmRsZXI7XG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6IEV2ZW50SGFuZGxlcjtcblx0XHRvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogRXZlbnRIYW5kbGVyO1xuXHRcdG9uRGF0YUZpZWxkV2l0aElCTjogRXZlbnRIYW5kbGVyO1xuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6IEV2ZW50SGFuZGxlcjtcblx0fTtcbn0gJiBPbWl0PEZpZWxkLCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCIgfCBcImNoYW5nZVwiIHwgXCJ2aXNpYmxlXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBGaWVsZChcblx0ZmllbGQ6IElucHV0RmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbnRyb2xDb25maWd1cmF0aW9uOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHR2aWV3RGF0YU1vZGVsOiBKU09OTW9kZWwsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlzUmVhZE9ubHlJbml0aWFsPzogYm9vbGVhbixcblx0bWV0YVBhdGg/OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0UGF0aD86IENvbnRleHQgfCB1bmRlZmluZWRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQgPSB7IC4uLmZpZWxkIH0gYXMgdW5rbm93biBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdEZpZWxkLCBcInZhbHVlXCIsIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdHJldHVybiBmaWVsZC52YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0RmllbGQsIFwiZGVzY3JpcHRpb25cIiwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSk7XG5cblx0cmVzdWx0RmllbGQuY2hhbmdlID0gZmllbGQuY2hhbmdlO1xuXHRyZXN1bHRGaWVsZC5tZXRhUGF0aCA9IChtZXRhUGF0aCA/IG1ldGFQYXRoIDogZmllbGQubWV0YVBhdGgpIGFzIENvbnRleHQ7XG5cdHJlc3VsdEZpZWxkLmNvbnRleHRQYXRoID0gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggOiBmaWVsZC5jb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0cmVzdWx0RmllbGQudmlzaWJsZSA9IGZpZWxkLnZpc2libGU7XG5cblx0Ly90aGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IGZvciB0aGUgZmllbGRcblx0aWYgKCFyZXN1bHRGaWVsZC52aElkUHJlZml4KSB7XG5cdFx0cmVzdWx0RmllbGQudmhJZFByZWZpeCA9IFwiRmllbGRWYWx1ZUhlbHBcIjtcblx0XHRyZXN1bHRGaWVsZC5fZmxleElkID0gZmllbGQuaWQ7XG5cdFx0aWYgKCFyZXN1bHRGaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0cmVzdWx0RmllbGQuaWRQcmVmaXggPSBmaWVsZC5pZDtcblx0XHR9XG5cdH1cblxuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID8/PSB7fSBhcyBGaWVsZEZvcm1hdE9wdGlvbnM7XG5cdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgPSBnZXRGb3JtYXRPcHRpb25zKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFscyA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3Nob3dPbmx5VW5pdERlY2ltYWxzXCIpID09PSB0cnVlO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9XG5cdFx0dmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24vYXBwL3ByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVwiKSA9PT0gdHJ1ZTtcblxuXHRyZXN1bHRGaWVsZC52YWx1ZUhlbHBNZXRhUGF0aCA9IG1ldGFQYXRoID8gbWV0YVBhdGggOiByZXN1bHRGaWVsZC5tZXRhUGF0aDtcblx0Y29tcHV0ZUNvbW1vblByb3BlcnRpZXMocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLnZhbHVlSGVscE1ldGFQYXRoPy5nZXRNb2RlbCgpKTtcblx0cmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGggPSBzZXRVcERhdGFQb2ludFR5cGUocmVzdWx0RmllbGQuY29udmVydGVkTWV0YVBhdGgpO1xuXHRzZXRVcFZpc2libGVQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUlEcyhyZXN1bHRGaWVsZCk7XG5cdHJlc3VsdEZpZWxkLmRhdGFTb3VyY2VQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0cmVzdWx0RmllbGQubGFiZWwgPSBGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0KGZpZWxkIGFzIHVua25vd24gYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sIHtcblx0XHRjb250ZXh0OiByZXN1bHRGaWVsZC5tZXRhUGF0aFxuXHR9KTtcblxuXHQvKiBFWFRFUk5BTElEICovXG5cdGNvbXB1dGVFeHRlcm5hbElEKHJlc3VsdEZpZWxkKTtcblx0cmVzdWx0RmllbGQuZW50aXR5VHlwZSA9IHJlc3VsdEZpZWxkLm9kYXRhTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdGAvJHtyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lfWBcblx0KTtcblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnM/LmZvcklubGluZUNyZWF0aW9uUm93cyA9PT0gdHJ1ZSkge1xuXHRcdHJlc3VsdEZpZWxkLmhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMocmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdH1cblx0Y29tcHV0ZUVkaXRNb2RlKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblx0Y29tcHV0ZUVkaXRhYmxlRXhwcmVzc2lvbnMocmVzdWx0RmllbGQpO1xuXHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zID0gcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucyA/IHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMgOiAoe30gYXMgRmllbGRGb3JtYXRPcHRpb25zKTtcblx0c2V0VXBGb3JtYXRPcHRpb25zKFxuXHRcdHJlc3VsdEZpZWxkLFxuXHRcdChyZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PikgfHwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRjb250cm9sQ29uZmlndXJhdGlvbixcblx0XHR2aWV3RGF0YU1vZGVsXG5cdCk7XG5cdHNldFVwRGlzcGxheVN0eWxlKHJlc3VsdEZpZWxkLCByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCwgcmVzdWx0RmllbGQuZGF0YU1vZGVsUGF0aCwgaW50ZXJuYWxNb2RlbCwgYXBwQ29tcG9uZW50KTtcblx0c2V0VXBFZGl0U3R5bGUocmVzdWx0RmllbGQsIGFwcENvbXBvbmVudCk7XG5cblx0cmVzdWx0RmllbGQudmFsdWVTdGF0ZSA9IHNldFVwVmFsdWVTdGF0ZShyZXN1bHRGaWVsZCk7XG5cdGlmIChyZXN1bHRGaWVsZC5lZGl0U3R5bGUgPT09IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlciA9IHNldElucHV0V2l0aFZhbHVlaGVscFBsYWNlaG9sZGVyKHJlc3VsdEZpZWxkKTtcblx0fVxuXG5cdGNvbXB1dGVGaWxlVXBsb2FkZXJQcm9wZXJ0aWVzKHJlc3VsdEZpZWxkKTtcblxuXHRjb21wdXRlSW5saW5lRWRpdFByb3BlcnRpZXMocmVzdWx0RmllbGQsIHZpZXdEYXRhTW9kZWwpO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tcHV0ZSBiaW5kaW5ncy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Y29uc3QgYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQgPSBbXCJBdmF0YXJcIiwgXCJBbW91bnRXaXRoQ3VycmVuY3lcIl07XG5cdGlmIChcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgJiZcblx0XHQhYURpc3BsYXlTdHlsZXNXaXRob3V0UHJvcFRleHQuaW5jbHVkZXMocmVzdWx0RmllbGQuZGlzcGxheVN0eWxlKSAmJlxuXHRcdHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdCkge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPVxuXHRcdFx0cmVzdWx0RmllbGQudGV4dCA/P1xuXHRcdFx0cmVzdWx0RmllbGQudmFsdWUgPz9cblx0XHRcdEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhcblx0XHRcdFx0KHJlc3VsdEZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KSB8fCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zXG5cdFx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdEZpZWxkLnRleHQgPSBcIlwiO1xuXHR9XG5cblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gU3RyaW5nKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yKSA9PT0gXCJ0cnVlXCIgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdH0gZWxzZSB7XG5cdFx0cmVzdWx0RmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gSWYgdGhlIHRhcmdldCBpcyBhIHByb3BlcnR5IHdpdGggYSBEYXRhRmllbGREZWZhdWx0LCB1c2UgdGhpcyBhcyBkYXRhIGZpZWxkXG5cdGlmIChpc1Byb3BlcnR5KHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoKSAmJiByZXN1bHRGaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJlc3VsdEZpZWxkLm1ldGFQYXRoID0gcmVzdWx0RmllbGQub2RhdGFNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gLFxuXHRcdFx0bWV0YVBhdGggPyBtZXRhUGF0aCA6IHJlc3VsdEZpZWxkLm1ldGFQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGlmICghaXNSZWFkT25seUluaXRpYWwpIHtcblx0XHRyZXN1bHRGaWVsZC5jb21wdXRlZEVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKHJlc3VsdEZpZWxkLnJlYWRPbmx5LCB0cnVlKSwgXCJEaXNwbGF5XCIsIFwiRWRpdGFibGVcIikpO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuZXZlbnRIYW5kbGVycyA9IHtcblx0XHRjaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGxpdmVDaGFuZ2U6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHZhbGlkYXRlRmllbGRHcm91cDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlVHlwZU1pc3NtYXRjaDogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlRmlsZVNpemVFeGNlZWQ6ICgpOiB2b2lkID0+IHt9LFxuXHRcdGhhbmRsZVVwbG9hZENvbXBsZXRlOiAoKTogdm9pZCA9PiB7fSxcblx0XHR1cGxvYWRTdHJlYW06ICgpOiB2b2lkID0+IHt9LFxuXHRcdHJlbW92ZVN0cmVhbTogKCk6IHZvaWQgPT4ge30sXG5cdFx0aGFuZGxlT3BlblVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRoYW5kbGVDbG9zZVVwbG9hZGVyOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvcGVuRXh0ZXJuYWxMaW5rOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkZvY3VzT3V0OiAoKTogdm9pZCA9PiB7fSxcblx0XHRsaW5rUHJlc3NlZDogKCk6IHZvaWQgPT4ge30sXG5cdFx0ZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsczogKCk6IHZvaWQgPT4ge30sXG5cdFx0b25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6ICgpOiB2b2lkID0+IHt9LFxuXHRcdHNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXI6ICgpOiB2b2lkID0+IHt9LFxuXHRcdG9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uOiAoKTogdm9pZCA9PiB7fSxcblx0XHRvbkRhdGFGaWVsZFdpdGhJQk46ICgpOiB2b2lkID0+IHt9XG5cdH07XG5cblx0cmV0dXJuIHJlc3VsdEZpZWxkO1xufVxuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNvbXB1dGVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIGNvbGxhYm9yYXRpb24gYXZhdGFyLlxuICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNvbGxhYm9yYXRpb25Qcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCBjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChcblx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoXG5cdCk7XG5cdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChmaWVsZC5vZGF0YU1ldGFNb2RlbCkgJiYgZmllbGQuZWRpdE1vZGUgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSkge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FbmFibGVkID0gdHJ1ZTtcblx0XHQvLyBFeHByZXNzaW9ucyBuZWVkZWQgZm9yIENvbGxhYm9yYXRpb24gVmlzdWFsaXphdGlvblxuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmhhc0NvbGxhYm9yYXRpb25BY3Rpdml0eVxuXHRcdCk7XG5cdFx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uLCBub3QoY29sbGFib3JhdGlvbkV4cHJlc3Npb24pKSk7XG5cblx0XHRjb25zdCBlZGl0TW9kZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQoXCJSZWFkT25seVwiKSxcblx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0luYWN0aXZlLCAhIWZpZWxkLmhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zKSwgXCJEaXNwbGF5XCIsIGZpZWxkLmVkaXRNb2RlQXNPYmplY3QpXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9IGNvbGxhYm9yYXRpb25FbmFibGVkO1xuXHRcdGZpZWxkLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gY29sbGFib3JhdGlvbkV4cHJlc3Npb247XG5cdFx0ZmllbGQuZWRpdGFibGVFeHByZXNzaW9uID0gZWRpdGFibGVFeHByZXNzaW9uO1xuXHRcdGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUgPSBlZGl0TW9kZTtcblx0fSBlbHNlIHtcblx0XHRmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihjb21wdXRlZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGhlbHBlciBzZXRzIHRoZSBjb21tb24gcHJvcGVydGllcyBjb252ZXJ0ZWRNZXRhUGF0aCwgZGF0YU1vZGVsUGF0aFxuICogYW5kIHByb3BlcnR5IHRoYXQgY2FuIGJlIHJldXNlZCBpbiB0aGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXMgaWYgcmVxdWlyZWQuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKiBAcGFyYW0gbWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ29tbW9uUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0ZmllbGQuY29udmVydGVkTWV0YVBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgpIGFzXG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXM7XG5cblx0bGV0IGRhdGFNb2RlbFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4oXG5cdFx0ZmllbGQubWV0YVBhdGhDb250ZXh0ID8gZmllbGQubWV0YVBhdGhDb250ZXh0IDogZmllbGQubWV0YVBhdGgsXG5cdFx0ZmllbGQuY29udGV4dFBhdGhcblx0KTtcblx0ZGF0YU1vZGVsUGF0aCA9XG5cdFx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlKGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPikgfHwgZGF0YU1vZGVsUGF0aDtcblx0ZmllbGQuZGF0YU1vZGVsUGF0aCA9IGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdGZpZWxkLnByb3BlcnR5ID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGZpZWxkLm9kYXRhTWV0YU1vZGVsID0gbWV0YU1vZGVsO1xuXHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCA9IChkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0PyAoZGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0IGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlXG5cdFx0OiBkYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNvbXB1dGVzIHNvbWUgb2YgdGhlIGV4cHJlc3Npb24gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVFZGl0YWJsZUV4cHJlc3Npb25zKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHZvaWQge1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhcblx0XHQoZmllbGQuY29udGV4dFBhdGhDb250ZXh0ID8gZmllbGQuY29udGV4dFBhdGhDb250ZXh0IDogZmllbGQuY29udGV4dFBhdGgpXG5cdFx0XHQ/LmdldFBhdGgoKVxuXHRcdFx0LnJlcGxhY2VBbGwoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIsIFwiL1wiKSxcblx0XHRmaWVsZC5vZGF0YU1ldGFNb2RlbFxuXHQpO1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyhcblx0XHQoZmllbGQuY29udGV4dFBhdGhDb250ZXh0ID8gZmllbGQuY29udGV4dFBhdGhDb250ZXh0IDogZmllbGQuY29udGV4dFBhdGgpXG5cdFx0XHQ/LmdldFBhdGgoKVxuXHRcdFx0LnJlcGxhY2VBbGwoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIsIFwiL1wiKSxcblx0XHRmaWVsZC5vZGF0YU1ldGFNb2RlbFxuXHQpO1xuXHRjb25zdCBvUmVxdWlyZWRQcm9wZXJ0aWVzID0ge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM6IHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMsXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uczogcmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9uc1xuXHR9O1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVuYWJsZWRFeHByZXNzaW9uKFxuXHRcdGZpZWxkLnByb3BlcnR5Rm9yRmllbGRDb250cm9sLFxuXHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdGZhbHNlLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRmaWVsZC5wcm9wZXJ0eUZvckZpZWxkQ29udHJvbCxcblx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRmYWxzZSxcblx0XHRmYWxzZSxcblx0XHRvUmVxdWlyZWRQcm9wZXJ0aWVzLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblxuXHRmaWVsZC5lbmFibGVkRXhwcmVzc2lvbiA9IGVuYWJsZWRFeHByZXNzaW9uO1xuXHRmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRWRpdE1vZGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogdm9pZCB7XG5cdGlmIChmaWVsZC5lZGl0TW9kZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLmVkaXRNb2RlICE9PSBudWxsKSB7XG5cdFx0Ly8gRXZlbiBpZiBpdCBwcm92aWRlZCBhcyBhIHN0cmluZyBpdCdzIGEgdmFsaWQgcGFydCBvZiBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IGNhbiBiZSBsYXRlciBjb21iaW5lZCBpbnRvIHNvbWV0aGluZyBlbHNlLlxuXHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgPSBmaWVsZC5lZGl0TW9kZTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBtZWFzdXJlUmVhZE9ubHkgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPyBmaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJSZWFkT25seVwiIDogZmFsc2U7XG5cblx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0ID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRNb2RlKFxuXHRcdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLFxuXHRcdFx0bWVhc3VyZVJlYWRPbmx5LFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoXG5cdFx0KTtcblx0XHRmaWVsZC5jb21wdXRlZEVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoYW5kKFVJLklzSW5hY3RpdmUsICEhZmllbGQuaGFzUHJvcGVydHlJbnNlcnRSZXN0cmljdGlvbnMpLCBcIkRpc3BsYXlcIiwgZmllbGQuZWRpdE1vZGVBc09iamVjdClcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRXh0ZXJuYWxJRChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0Y29uc3QgZXh0ZXJuYWxJRFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eShmaWVsZC5wcm9wZXJ0eSk7XG5cblx0aWYgKGV4dGVybmFsSURQcm9wZXJ0eSkge1xuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eSkgZmllbGQucHJvcGVydHkudHlwZSA9IGV4dGVybmFsSURQcm9wZXJ0eS50eXBlO1xuXHRcdGlmIChpc0RhdGFGaWVsZChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCkpIHtcblx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLlZhbHVlLiR0YXJnZXQudHlwZSA9IGV4dGVybmFsSURQcm9wZXJ0eS50eXBlO1xuXHRcdH1cblx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHlQYXRoID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgoZmllbGQucHJvcGVydHkpO1xuXHRcdGNvbnN0IGV4dGVybmFsSWRDb250ZXh0ID0gZmllbGQubWV0YVBhdGhcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZmllbGQuY29udGV4dFBhdGg/LmdldFBhdGgoKSArIFwiL1wiICsgZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCwgZmllbGQubWV0YVBhdGgpO1xuXG5cdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGhFeHRlcm5hbElEID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KGV4dGVybmFsSWRDb250ZXh0KSBhcyBQcm9wZXJ0eTtcblxuXHRcdGxldCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRleHRlcm5hbElkQ29udGV4dCBhcyBDb250ZXh0LFxuXHRcdFx0ZmllbGQuY29udGV4dFBhdGhcblx0XHQpO1xuXHRcdGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KSB8fCBkYXRhTW9kZWxQYXRoO1xuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEID0gZGF0YU1vZGVsUGF0aDtcblx0fVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgZmllbGRHcm91cElkcyBmb3IgYW4gSW5wdXQgb3Igb3RoZXIgZWRpdCBjb250cm9sLlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgZmllbGRHcm91cElkc1xuICovXG5mdW5jdGlvbiBjb21wdXRlRmllbGRHcm91cElkcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdHlwZXNGb3JDb2xsYWJvcmF0aW9uRm9jdXNNYW5hZ2VtZW50ID0gW1xuXHRcdFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIsXG5cdFx0XCJUZXh0QXJlYVwiLFxuXHRcdFwiRGF0ZVBpY2tlclwiLFxuXHRcdFwiVGltZVBpY2tlclwiLFxuXHRcdFwiRGF0ZVRpbWVQaWNrZXJcIixcblx0XHRcIklucHV0V2l0aFVuaXRcIixcblx0XHRcIklucHV0XCIsXG5cdFx0XCJJbnB1dE1hc2tcIixcblx0XHRcIk1hc2tlZFwiXG5cdF07XG5cblx0aWYgKCFhcHBDb21wb25lbnQpIHtcblx0XHQvL2ZvciBWYWx1ZUhlbHAgLyBNYXNzIGVkaXQgVGVtcGxhdGluZyB0aGUgYXBwQ29tcG9uZW50IGlzIG5vdCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRpbmdcblx0XHRyZXR1cm47XG5cdH1cblx0Y29uc3Qgc2lkZUVmZmVjdFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0U2VydmljZS5jb21wdXRlRmllbGRHcm91cElkcyhcblx0XHRmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiLFxuXHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgPz8gXCJcIlxuXHQpO1xuXG5cdGZpZWxkLm1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCA9IGlzUHJvcGVydHkoZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpXG5cdFx0PyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkICYmIHR5cGVzRm9yQ29sbGFib3JhdGlvbkZvY3VzTWFuYWdlbWVudC5pbmNsdWRlcyhmaWVsZC5lZGl0U3R5bGUgfHwgXCJcIikpIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uRmllbGRHcm91cCA9IGAke0NvbGxhYm9yYXRpb25GaWVsZEdyb3VwUHJlZml4fSR7ZmllbGQuZGF0YVNvdXJjZVBhdGh9YDtcblx0XHRmaWVsZEdyb3VwSWRzLnB1c2goY29sbGFib3JhdGlvbkZpZWxkR3JvdXApO1xuXHR9XG5cblx0cmV0dXJuIGZpZWxkR3JvdXBJZHMubGVuZ3RoID8gZmllbGRHcm91cElkcyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGlzIGhlbHBlciBpcyBmb3IgdGhlIElEIG9mIHRoZSBmaWVsZCBhY2NvcmRpbmcgdG8gc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuICpcbiAqIGRpc3BsYXlTdHlsZUlkIGlzIHVzZWQgZm9yIGFsbCBjb250cm9scyBpbnNpZGUgdGhlIGZpZWxkIHdyYXBwZXIgaW4gZGlzcGxheSBtb2RlLiBBIDxzYXAubS50ZXh0PiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWRpc3BsYXkuXG4gKiBlZGl0U3R5bGVJZCBpcyB1c2VkIGZvciBhbGwgY29udHJvbHMgaW5zaWRlIHRoZSBmaWVsZCB3cmFwcGVyIGluIGVkaXQgbW9kZS4gQSA8c2FwLnVpLm1kYy5maWVsZD4gY29udHJvbCB3b3VsZCBnZXQgdGhpcyBJRC4gQW4gZXhhbXBsZSBpczogQXBwbGljYXRpb25Db250ZXh0OjpGaWVsZC1lZGl0LlxuICpcbiAqIElmIG5vIHdyYXBwZXIgZXhpc3RzIHRoZSB3cmFwcGVycyBJRCB3aWxsIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGZpcnN0IGNvbnRyb2wgZGlzcGxheWVkLCBBIDxzYXAubS50ZXh0PiBjb250cm9sIHdvdWxkIGdldCB0aGlzIElELiBBbiBleGFtcGxlIGlzOiBBcHBsaWNhdGlvbkNvbnRleHQ6OkZpZWxkLWNvbnRlbnQuXG4gKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSURzKGZpZWxkOiBQYXJ0aWFsPEZpZWxkQmxvY2tQcm9wZXJ0aWVzPik6IHZvaWQge1xuXHRpZiAoZmllbGQuX2ZsZXhJZCAmJiAhZmllbGQuX2FwaUlkKSB7XG5cdFx0ZmllbGQuX2FwaUlkID0gZmllbGQuX2ZsZXhJZDtcblx0XHRmaWVsZC5fZmxleElkID0gZ2V0Q29udGVudElkKGZpZWxkLl9mbGV4SWQpO1xuXHR9XG5cblx0aWYgKGZpZWxkLmlkUHJlZml4KSB7XG5cdFx0ZmllbGQuZWRpdFN0eWxlSWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtZWRpdFwiXSk7XG5cdH1cblx0Ly9Ob1dyYXBwZXJJZCBzY2VuYXJpbyBpcyBmb3IgdGhlIExSIHRhYmxlLlxuXHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucz8uZmllbGRNb2RlID09PSBcIm5vd3JhcHBlclwiICYmIGZpZWxkLmVkaXRNb2RlID09PSBcIkRpc3BsYXlcIikge1xuXHRcdGlmIChmaWVsZC5fZmxleElkKSB7XG5cdFx0XHRmaWVsZC5kaXNwbGF5U3R5bGVJZCA9IGZpZWxkLl9mbGV4SWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkLmRpc3BsYXlTdHlsZUlkID0gZmllbGQuaWRQcmVmaXggPyBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtY29udGVudFwiXSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGZpZWxkLmlkUHJlZml4KSB7XG5cdFx0ZmllbGQuZGlzcGxheVN0eWxlSWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtZGlzcGxheVwiXSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBpbnRlcm5hbCBmb3JtYXRPcHRpb25zIGZvciB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gZmllbGRcbiAqIEByZXR1cm5zIEEgc3RyaW5nIHdpdGggdGhlIGludGVybmFsIGZvcm1hdE9wdGlvbnMgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0T3B0aW9ucyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBGaWVsZEZvcm1hdE9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdC4uLmZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0dGV4dEFsaWduTW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlID8/IFwiRm9ybVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gdHJ1ZSxcblx0XHRkaXNwbGF5TW9kZTogZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBEaXNwbGF5TW9kZSxcblx0XHRtZWFzdXJlRGlzcGxheU1vZGU6IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCxcblx0XHR0ZXh0TWF4TGluZXM6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzLFxuXHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdHRleHRNYXhMZW5ndGg6IGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aCxcblx0XHRmaWVsZEVkaXRTdHlsZTogZmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEVkaXRTdHlsZSxcblx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0OiBmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQsXG5cdFx0c2hvd1RpbWU6IGZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd1RpbWUsXG5cdFx0c2hvd1RpbWV6b25lOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dUaW1lem9uZSxcblx0XHRzaG93RGF0ZTogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RGF0ZVxuXHR9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0SWRlbnRpZmllclRleHQoXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBQcm9wZXJ0eVBhdGg+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKVxuXHQpO1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZSA9IGZpZWxkRm9ybWF0T3B0aW9ucz8uZGlzcGxheU1vZGU7XG5cdGNvbnN0IHByb3BlcnR5RGVmaW5pdGlvbiA9IGlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KVxuXHRcdD8gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCBhcyBQcm9wZXJ0eSlcblx0XHQ6IChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5KTtcblxuXHRjb25zdCBjb21tb25UZXh0ID0gcHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGlmIChjb21tb25UZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cblx0c3dpdGNoICh0YXJnZXREaXNwbGF5TW9kZSkge1xuXHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjb21tb25UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKSk7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0VG9LZWVwV2hpdGVzcGFjZSkpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldE92ZXJyaWRlcyhjb250cm9sQ29uZmlndXJhdGlvbjogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncywgaWQ6IHN0cmluZyk6IEZpZWxkUHJvcGVydGllcyB7XG5cdC8qXG5cdFx0UXVhbG1zOiBXZSBuZWVkIHRvIHVzZSB0aGlzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgdHlwZSB0byBiZSBhYmxlIHRvIGl0ZXJhdGVcblx0XHRvdmVyIHRoZSBwcm9wZXJ0aWVzIGxhdGVyIG9uIGFuZCBjYXN0IGl0IGFmdGVyd2FyZHMgYXMgYSBmaWVsZCBwcm9wZXJ0eSB0eXBlXG5cdCovXG5cdGNvbnN0IHByb3BzID0ge30gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblxuXHRpZiAoY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRjb25zdCBjb250cm9sQ29uZmlnID0gY29udHJvbENvbmZpZ3VyYXRpb25baWRdIGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdFx0aWYgKGNvbnRyb2xDb25maWcpIHtcblx0XHRcdE9iamVjdC5rZXlzKGNvbnRyb2xDb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ0tleSkge1xuXHRcdFx0XHRwcm9wc1tjb25maWdLZXldID0gY29udHJvbENvbmZpZ1tjb25maWdLZXldO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wcyBhcyB1bmtub3duIGFzIEZpZWxkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcmVwYXJlIHRoZSBkaXNwbGF5IHN0eWxlIG9mIHRoZSBmaWVsZCBpbiBjYXNlIG9mIHNlbWFudGljIG9iamVjdHMgb3IgcXVpY2t2aWV3IGZhY2V0cy5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBoYXNTZW1hbnRpY09iamVjdHNcbiAqIEBwYXJhbSBoYXNRdWlja1ZpZXdcbiAqL1xuZnVuY3Rpb24gbWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGhhc1NlbWFudGljT2JqZWN0czogYm9vbGVhbixcblx0aGFzUXVpY2tWaWV3OiBib29sZWFuXG4pOiB2b2lkIHtcblx0aWYgKGhhc1F1aWNrVmlldykge1xuXHRcdGZpZWxkLmhhc1F1aWNrVmlldyA9IHRydWU7XG5cdFx0ZmllbGQucXVpY2tWaWV3VHlwZSA9IFwiRmFjZXRzXCI7XG5cdH1cblx0aWYgKGhhc1NlbWFudGljT2JqZWN0cykge1xuXHRcdGNvbnN0IGZvdW5kU2VtYW50aWNPYmplY3RzID0gbWFuYWdlU2VtYW50aWNPYmplY3RzRm9yQ3VycmVudFVzZXIoZmllbGQuc2VtYW50aWNPYmplY3QsIGRhdGFNb2RlbFBhdGgsIGludGVybmFsTW9kZWwpO1xuXHRcdGlmIChmb3VuZFNlbWFudGljT2JqZWN0cy5oYXNSZWFjaGFibGVTdGF0aWNTZW1hbnRpY09iamVjdCB8fCBmb3VuZFNlbWFudGljT2JqZWN0cy5keW5hbWljU2VtYW50aWNPYmplY3RzLmxlbmd0aCkge1xuXHRcdFx0ZmllbGQuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHRcdGZpZWxkLnF1aWNrVmlld1R5cGUgPSBoYXNRdWlja1ZpZXcgPyBcIkZhY2V0c0FuZFNlbWFudGljTGlua3NcIiA6IFwiU2VtYW50aWNMaW5rc1wiO1xuXHRcdFx0ZmllbGQuZHluYW1pY1NlbWFudGljT2JqZWN0cyA9XG5cdFx0XHRcdGZvdW5kU2VtYW50aWNPYmplY3RzLmhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0ICE9PSB0cnVlID8gZm91bmRTZW1hbnRpY09iamVjdHMuZHluYW1pY1NlbWFudGljT2JqZWN0cyA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVjayBmaWVsZCB0byBrbm93IGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdC5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGRcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVHJ1ZSBpZiBmaWVsZCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZ2V0UHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QoZGF0YU1vZGVsUGF0aCkgfHwgKGZpZWxkLnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgZmllbGQuc2VtYW50aWNPYmplY3QgIT09IFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5wdXRXaXRoVmFsdWVoZWxwUGxhY2Vob2xkZXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdGFyZ2V0RW50aXR5VHlwZTtcblx0Y29uc3QgZWRpdFN0eWxlUGxhY2Vob2xkZXIgPSBmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcjtcblx0Y29uc3QgZmllbGRDb250YWluZXJUeXBlID0gZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlO1xuXHRpZiAoZmllbGRDb250YWluZXJUeXBlID09PSBcIlRhYmxlXCIpIHtcblx0XHR0YXJnZXRFbnRpdHlUeXBlID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5uYW1lO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvblZhbHVlID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlYCk7XG5cdGNvbnN0IHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24gPSBwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gKTtcblx0Y29uc3QgcGxhY2Vob2xkZXJFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cmVjb21tZW5kYXRpb25WYWx1ZSxcblx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgL3JlY29tbWVuZGF0aW9uc0RhdGFgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYC9jdXJyZW50Q3R4dGAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUubWVzc2FnZVR5cGVgKSxcblx0XHRcdGVkaXRTdHlsZVBsYWNlaG9sZGVyLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuXHRcdF0sXG5cdFx0YWRkaXRpb25hbFZhbHVlRm9ybWF0dGVyLmZvcm1hdFBsYWNlaG9sZGVyLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocGxhY2Vob2xkZXJFeHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBEYXRhUG9pbnRUeXBlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMge1xuXHQvLyBkYXRhIHBvaW50IGFubm90YXRpb25zIG5lZWQgbm90IGhhdmUgJFR5cGUgZGVmaW5lZCwgc28gYWRkIGl0IGlmIG1pc3Npbmdcblx0Y29uc3QgZGF0YVBvaW50VHlwZSA9IHsgLi4uZGF0YUZpZWxkIH07XG5cdGlmICgoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YVBvaW50KT8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikge1xuXHRcdGRhdGFQb2ludFR5cGUuJFR5cGUgPSBkYXRhRmllbGQuJFR5cGUgfHwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTtcblx0fVxuXHRyZXR1cm4gZGF0YVBvaW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY2ltYWxQYWRkaW5nKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBwcm9wZXJ0eTogUHJvcGVydHkpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdCA9IGFwcENvbXBvbmVudD8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5XG5cdFx0PyBtYW5pZmVzdD8ubWFjcm9zPy50YWJsZT8uY3VycmVuY3k/LmRlY2ltYWxQYWRkaW5nID8/IDVcblx0XHQ6IG1hbmlmZXN0Py5tYWNyb3M/LnRhYmxlPy51bml0T2ZNZWFzdXJlPy5kZWNpbWFsUGFkZGluZyA/PyAzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBEaXNwbGF5U3R5bGUoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIHtcblx0Y29uc3QgcmVzdWx0RmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzID0gZmllbGQ7XG5cdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRpZiAoIWRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuaGFzVW5pdE9yQ3VycmVuY3kgPVxuXHRcdHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCAhPT0gdW5kZWZpbmVkIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgIT09IHVuZGVmaW5lZDtcblx0cmVzdWx0RmllbGQuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBVSUZvcm1hdHRlcnMuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQoXG5cdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuXHQpO1xuXHRyZXN1bHRGaWVsZC50ZXh0RnJvbVZhbHVlTGlzdCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFtcblx0XHRcdFx0cGF0aEluTW9kZWwoZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQYXRoKSksXG5cdFx0XHRcdGAvJHtwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWV9YCxcblx0XHRcdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZVxuXHRcdFx0XSxcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWUucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFwiXG5cdFx0KVxuXHQpO1xuXG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2UpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkZpbGVcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTCkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiQXZhdGFyXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaykge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiVGV4dFwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTWFza2VkKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJNYXNrZWRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0Ly8gRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgU3RyZWFtIHdpbGwgYmUgc2hvd24gd2l0aGluIGFuIGVudGl0eSBpbnN0YW5jZSBhcyBjaXJjbGUgaWYgdGhlIGVudGl0eSBpcyBhbm5vdGF0ZWQgYXMgSXNOYXR1cmFsUGVyc29uXG5cdC8vIGFuZCBuZWl0aGVyIElzSW1hZ2Ugbm9yIElzSW1hZ2VVUkwgYW5ub3RhdGlvbiBoYXMgYmVlbiB1c2VkLlxuXHRpZiAocHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyZWFtXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkZpbGVcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuaXNGaWVsZEdyb3VwSXRlbSAmJiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkNoZWNrQm94R3JvdXBJdGVtXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdHNldFVwRHJhZnRJbmRpY2F0b3IoZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiwgcmVzdWx0RmllbGQpO1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSBhcyBzdHJpbmcpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkRhdGFQb2ludFwiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkRhdGFQb2ludFwiO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT1cblx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkNvbnRhY3RcIjtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkJ1dHRvblwiO1xuXHRcdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRjb25zdCBoYXNRdWlja1ZpZXcgPSBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzKGRhdGFNb2RlbFBhdGgsIHByb3BlcnR5KTtcblx0Y29uc3QgaGFzU2VtYW50aWNPYmplY3RzID0gcHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eUhhc1NlbWFudGljT2JqZWN0KHJlc3VsdEZpZWxkLCBkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTtcblxuXHRpZiAoaXNTZW1hbnRpY0tleShwcm9wZXJ0eSwgZGF0YU1vZGVsUGF0aCkgJiYgcmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlKSB7XG5cdFx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdFx0cmVzdWx0RmllbGQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdGhhc1NlbWFudGljT2JqZWN0cyxcblx0XHRcdGhhc1F1aWNrVmlld1xuXHRcdCk7XG5cdFx0c2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0KHJlc3VsdEZpZWxkLCBkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTtcblx0XHRyZXN1bHRGaWVsZC5zaG93RXJyb3JJbmRpY2F0b3IgPVxuXHRcdFx0KGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uIGFzIHVua25vd24gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxTZXJ2aWNlT2JqZWN0Pik/LnRhcmdldE9iamVjdD8uX3R5cGUgPT09XG5cdFx0XHRcdFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgIXJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoO1xuXHRcdHJlc3VsdEZpZWxkLnNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGggPSAoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpLm5hbWU7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID1cblx0XHRcdHJlc3VsdEZpZWxkLmZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxTZW1hbnRpY0tleVwiO1xuXHRcdHJldHVybiByZXN1bHRGaWVsZDtcblx0fVxuXHRpZiAoZGF0YUZpZWxkLkNyaXRpY2FsaXR5KSB7XG5cdFx0bWFuYWdlUXVpY2tWaWV3Rm9yRGlzcGxheVN0eWxlKFxuXHRcdFx0cmVzdWx0RmllbGQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdGhhc1NlbWFudGljT2JqZWN0cyxcblx0XHRcdGhhc1F1aWNrVmlld1xuXHRcdCk7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJPYmplY3RTdGF0dXNcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKFxuXHRcdChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkgJiZcblx0XHRTdHJpbmcocmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiICYmXG5cdFx0cmVzdWx0RmllbGQuZm9ybWF0T3B0aW9ucy5tZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCJcblx0KSB7XG5cdFx0Y29uc3QgZGVjaW1hbFBhZGRpbmcgPSBGaWVsZFN0cnVjdHVyZUhlbHBlci5nZXREZWNpbWFsUGFkZGluZyhhcHBDb21wb25lbnQsIHByb3BlcnR5KTtcblx0XHRyZXN1bHRGaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24gPSByZXN1bHRGaWVsZC52YWx1ZVxuXHRcdFx0PyByZXN1bHRGaWVsZC52YWx1ZVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0XHRcdFx0ZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRyZXN1bHRGaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmcsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0ICApO1xuXG5cdFx0cmVzdWx0RmllbGQudW5pdEJpbmRpbmdFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KFxuXHRcdFx0XHRkYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHQhIWZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdCEhZmllbGQuZm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3lcblx0XHRcdClcblx0XHQpO1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFwiO1xuXG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MgfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXN1bHRGaWVsZC5kaXNwbGF5U3R5bGUgPSBcIkxpbmtcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dCkge1xuXHRcdHJlc3VsdEZpZWxkLmRpc3BsYXlTdHlsZSA9IFwiRXhwYW5kYWJsZVRleHRcIjtcblx0XHRyZXR1cm4gcmVzdWx0RmllbGQ7XG5cdH1cblxuXHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rXCI7XG5cdFx0cmV0dXJuIHJlc3VsdEZpZWxkO1xuXHR9XG5cblx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJUZXh0XCI7XG5cdG1hbmFnZVF1aWNrVmlld0ZvckRpc3BsYXlTdHlsZShcblx0XHRyZXN1bHRGaWVsZCxcblx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdGRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0aGFzU2VtYW50aWNPYmplY3RzLFxuXHRcdGhhc1F1aWNrVmlld1xuXHQpO1xuXHRpZiAocmVzdWx0RmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0cmVzdWx0RmllbGQuZGlzcGxheVN0eWxlID0gXCJMaW5rV2l0aFF1aWNrVmlld1wiO1xuXHR9XG5cdHJldHVybiByZXN1bHRGaWVsZDtcbn1cblxuLyoqXG4gKiBUaGlzIGRldGVybWluZXMgd2hldGhlciB3ZSBzaG91bGQgYWRkIGEgZHJhZnQgaW5kaWNhdG9yIHdpdGhpbiB0aGUgZmllbGQgdGVtcGxhdGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIHBvaW50aW5nIHRvIHRoZSBtYWluIHByb3BlcnR5IGZvciB0aGUgZmllbGRcbiAqIEBwYXJhbSBmaWVsZFxuICovXG5mdW5jdGlvbiBzZXRVcERyYWZ0SW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGlzU2VtYW50aWNLZXkoZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHksIGRhdGFNb2RlbFBhdGgpKSB7XG5cdFx0ZmllbGQuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IFNpdHVhdGlvbnNJbmRpY2F0b3IuZ2V0U2l0dWF0aW9uc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUpICE9PSB1bmRlZmluZWQ7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290ICYmXG5cdFx0XHQoZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290ICYmXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zPy5oYXNEcmFmdEluZGljYXRvciA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBoYXNEcmFmdEluZGljYXRvciB3aWxsIGJlIGZhbHNlIHNpbmNlIHRoZSBkcmFmdFxuXHRcdFx0Ly8gaW5kaWNhdG9yIG5lZWRzIHRvIGJlIHJlbmRlcmVkIGludG8gYSBzZXBhcmF0ZSBjb2x1bW5cblx0XHRcdC8vIEhlbmNlIHdlIHRoZW4gZmFsbCBiYWNrIHRvIGRpc3BsYXkgc3R5bGVzIE9iamVjdElkZW50aWZpZXIgb3IgTGFiZWxTZW1hbnRpY0tleSBpbnN0ZWFkXG5cdFx0XHQvLyBvZiB0aGUgY29tYmluZWQgSUQgYW5kIGRyYWZ0IGluZGljYXRvciBzdHlsZVxuXHRcdFx0ZmllbGQuZHJhZnRJbmRpY2F0b3JWaXNpYmxlID0gZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8ubmFtZSkgYXMgc3RyaW5nO1xuXHRcdFx0ZmllbGQuYWRkRHJhZnRJbmRpY2F0b3IgPSB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBFZGl0U3R5bGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQpOiBGaWVsZEJsb2NrUHJvcGVydGllcyB7XG5cdGNvbnN0IHJlc3VsdEZpZWxkID0gZmllbGQ7XG5cdHNldEVkaXRTdHlsZVByb3BlcnRpZXMocmVzdWx0RmllbGQsIHJlc3VsdEZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLCByZXN1bHRGaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0cmVzdWx0RmllbGQuZmllbGRHcm91cElkcyA9IGNvbXB1dGVGaWVsZEdyb3VwSWRzKHJlc3VsdEZpZWxkLCBhcHBDb21wb25lbnQpO1xuXHRyZXR1cm4gcmVzdWx0RmllbGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcE9iamVjdElkZW50aWZpZXJUaXRsZUFuZFRleHQoXG5cdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PlxuKTogdm9pZCB7XG5cdGNvbnN0IHNlbWFudGljU3R5bGUgPSBmaWVsZC5mb3JtYXRPcHRpb25zPy5zZW1hbnRpY0tleVN0eWxlO1xuXHRjb25zdCBkaXNwbGF5TW9kZSA9IGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGU7XG5cdGZpZWxkLmlkZW50aWZpZXJUaXRsZSA9IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24oXG5cdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0XHR7IGRpc3BsYXlNb2RlLCBzcGxpdFRpdGxlT25Ud29MaW5lczogZmllbGQuZm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlID09PSBcIk9iamVjdElkZW50aWZpZXJcIiB9LFxuXHRcdHVuZGVmaW5lZCxcblx0XHR1bmRlZmluZWRcblx0KTtcblx0ZmllbGQuaWRlbnRpZmllclRleHQgPVxuXHRcdHNlbWFudGljU3R5bGUgPT09IFwiT2JqZWN0SWRlbnRpZmllclwiID8gZ2V0T2JqZWN0SWRlbnRpZmllclRleHQoZmllbGQuZm9ybWF0T3B0aW9ucywgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwRm9ybWF0T3B0aW9ucyhcblx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Y29udHJvbENvbmZpZ3VyYXRpb246IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdHZpZXdEYXRhTW9kZWw6IEpTT05Nb2RlbFxuKTogdm9pZCB7XG5cdGNvbnN0IG92ZXJyaWRlUHJvcHMgPSBnZXRPdmVycmlkZXMoY29udHJvbENvbmZpZ3VyYXRpb24sIChmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCkuZ2V0UGF0aCgpKTtcblxuXHRpZiAoIWZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUpIHtcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gVUlGb3JtYXR0ZXJzLmdldERpc3BsYXlNb2RlKGRhdGFNb2RlbFBhdGgpO1xuXHR9XG5cdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24gPSBmaWVsZC52YWx1ZVxuXHRcdFx0PyBmaWVsZC52YWx1ZVxuXHRcdFx0OiBnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCwgZmllbGQuZm9ybWF0T3B0aW9ucywgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXQgPVxuXHRcdChvdmVycmlkZVByb3BzIGFzIHVua25vd24gYXMgRmllbGRGb3JtYXRPcHRpb25zKS50ZXh0TGluZXNFZGl0IHx8XG5cdFx0KG92ZXJyaWRlUHJvcHMuZm9ybWF0T3B0aW9ucyAmJiBvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdCkgfHxcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXQgfHxcblx0XHQ0O1xuXHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcyA9XG5cdFx0KG92ZXJyaWRlUHJvcHMgYXMgdW5rbm93biBhcyBGaWVsZEZvcm1hdE9wdGlvbnMpLnRleHRNYXhMaW5lcyB8fFxuXHRcdChvdmVycmlkZVByb3BzLmZvcm1hdE9wdGlvbnMgJiYgb3ZlcnJpZGVQcm9wcy5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcykgfHxcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcztcblxuXHQvLyBSZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgbGlzdCBhcyBmYWxsYmFjayBmZWF0dXJlIGZvciBtaXNzaW5nIHRleHQgYW5ub3RhdGlvbiBvbiB0aGUgcHJvcGVydHlcblx0aWYgKHZpZXdEYXRhTW9kZWw/LmdldFByb3BlcnR5KFwiL3JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RcIikpIHtcblx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPSBpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QhLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9uc1xuXHRcdCk7XG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCkge1xuXHRcdFx0Ly8gQ29uc2lkZXIgVGV4dEFycmFuZ2VtZW50IGF0IEVudGl0eVR5cGUgb3RoZXJ3aXNlIHNldCBkZWZhdWx0IGRpc3BsYXkgZm9ybWF0ICdEZXNjcmlwdGlvblZhbHVlJ1xuXHRcdFx0Y29uc3QgaGFzRW50aXR5VGV4dEFycmFuZ2VtZW50ID0gISFkYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudDtcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPSBoYXNFbnRpdHlUZXh0QXJyYW5nZW1lbnQgPyBmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIDogXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcFZhbHVlU3RhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdmFsdWVTdGF0ZUV4cDtcblx0Y29uc3QgZmllbGRDb250YWluZXJUeXBlID0gZmllbGQuZm9ybWF0T3B0aW9ucz8udGV4dEFsaWduTW9kZSA/IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnRleHRBbGlnbk1vZGUgOiBcIkZvcm1cIjtcblx0Y29uc3QgcHJvcGVydHlQYXRoSW5Nb2RlbCA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCkpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcm9wZXJ0eT47XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCB0ZXh0UGF0aCA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5kYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRjb25zdCBwcm9wZXJ0eVBhdGggPSBmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8ubmFtZTtcblx0Y29uc3QgcmVjb21tZW5kYXRpb25WYWx1ZSA9IHBhdGhJbk1vZGVsKGAke3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZWApO1xuXHRjb25zdCByZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uID0gcGF0aEluTW9kZWwoYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uYCk7XG5cdGlmIChmaWVsZENvbnRhaW5lclR5cGUgPT09IFwiVGFibGVcIikge1xuXHRcdHZhbHVlU3RhdGVFeHAgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uVmFsdWUsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGVzY3JpcHRpb24sXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvcmVjb21tZW5kYXRpb25zRGF0YWAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRcdHBhdGhJbk1vZGVsKGAvaXNFZGl0YWJsZWAsIFwidWlcIiksXG5cdFx0XHRcdGZpZWxkLmRhdGFTb3VyY2VQYXRoLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhJbk1vZGVsLFxuXHRcdFx0XHR0ZXh0UGF0aFxuXHRcdFx0XSxcblx0XHRcdGFkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlci5mb3JtYXRWYWx1ZVN0YXRlLFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR2YWx1ZVN0YXRlRXhwID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvblZhbHVlLFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRlc2NyaXB0aW9uLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL3JlY29tbWVuZGF0aW9uc0RhdGFgLCBcImludGVybmFsXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChgL2lzRWRpdGFibGVgLCBcInVpXCIpLFxuXHRcdFx0XHRmaWVsZC5kYXRhU291cmNlUGF0aCxcblx0XHRcdFx0cHJvcGVydHlQYXRoSW5Nb2RlbCxcblx0XHRcdFx0dGV4dFBhdGhcblx0XHRcdF0sXG5cdFx0XHRhZGRpdGlvbmFsVmFsdWVGb3JtYXR0ZXIuZm9ybWF0VmFsdWVTdGF0ZVxuXHRcdCk7XG5cdH1cblxuXHRmaWVsZC52YWx1ZVN0YXRlID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWVTdGF0ZUV4cCk7XG5cdHJldHVybiBmaWVsZC52YWx1ZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBWaXNpYmxlUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0Ly8gd2UgZG8gdGhpcyBiZWZvcmUgZW5oYW5jaW5nIHRoZSBkYXRhTW9kZWxQYXRoIHNvIHRoYXQgaXQgc3RpbGwgcG9pbnRzIGF0IHRoZSBEYXRhRmllbGRcblx0Ly8gY29uc3QgdmlzaWJsZVByb3BlcnRpZXM6IFBhcnRpYWw8ZmllbGRCbG9jaz4gPSB7fTtcblx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihcblx0XHRmaWVsZC5tZXRhUGF0aENvbnRleHQgPyBmaWVsZC5tZXRhUGF0aENvbnRleHQgOiBmaWVsZC5tZXRhUGF0aCxcblx0XHRmaWVsZC5jb250ZXh0UGF0aFxuXHQpO1xuXG5cdGZpZWxkLnZpc2libGUgPz89IGdldFZpc2libGVFeHByZXNzaW9uKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGQuZm9ybWF0T3B0aW9ucyk7XG5cdGZpZWxkLmRpc3BsYXlWaXNpYmxlID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uZmllbGRNb2RlID09PSBcIm5vd3JhcHBlclwiID8gZmllbGQudmlzaWJsZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudElkKG1hY3JvSWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgJHttYWNyb0lkfS1jb250ZW50YDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBwcm9wZXJ0aWVzIGZvciB0aGUgZmlsZSB0ZW1wbGF0aW5nLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICovXG5mdW5jdGlvbiBjb21wdXRlRmlsZVVwbG9hZGVyUHJvcGVydGllcyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiB2b2lkIHtcblx0aWYgKGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJGaWxlXCIpIHtcblx0XHRmaWVsZC5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpIHx8IFwiXCI7XG5cdFx0Y29uc3QgZmlsZU5hbWVBbm5vdGF0aW9uID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZTtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZmlsZU5hbWVBbm5vdGF0aW9uKSkge1xuXHRcdFx0Y29uc3QgZmlsZU5hbWVEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCwgZmlsZU5hbWVBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0ZmllbGQuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmlsZU5hbWVEYXRhTW9kZWxQYXRoKSA/PyBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENvbXB1dGVzIHByb3BlcnRpZXMgZm9yIHRoZSBpbmxpbmUgZWRpdCB0ZW1wbGF0aW5nLlxuICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZFxuICogQHBhcmFtIHZpZXdEYXRhTW9kZWxcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlubGluZUVkaXRQcm9wZXJ0aWVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdmlld0RhdGFNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdGlmIChmaWVsZC5kaXNwbGF5U3R5bGUgPT09IFwiRmlsZVwiIHx8IGZpZWxkLmRpc3BsYXlTdHlsZSA9PT0gXCJBdmF0YXJcIikge1xuXHRcdGZpZWxkLmlubGluZUVkaXRFbmFibGVkID0gdW5kZWZpbmVkO1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCA9XG5cdFx0ZmllbGQuaW5saW5lRWRpdEVuYWJsZWQgPT09IHRydWUgfHwgdmlld0RhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvaXNJbmxpbmVFZGl0RW5hYmxlZFwiKSA9PT0gdHJ1ZSA/IHRydWUgOiB1bmRlZmluZWQ7XG5cdGlmIChmaWVsZC5pbmxpbmVFZGl0RW5hYmxlZCAmJiBmaWVsZC5lZGl0TW9kZUFzT2JqZWN0ICE9PSBcIkRpc3BsYXlcIikge1xuXHRcdGNvbnN0IGNvbXB1dGVkRWRpdGFibGVFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KFxuXHRcdFx0ZmllbGQucHJvcGVydHlGb3JGaWVsZENvbnRyb2wsXG5cdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGhcblx0XHQpO1xuXG5cdFx0ZmllbGQuaGFzSW5saW5lRWRpdCA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0Y29tcHV0ZWRFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoZXhwcikgPT4ge1xuXHRcdFx0XHRpZiAoZXhwci5wYXRoID09PSBcImlzRWRpdGFibGVcIiAmJiBleHByLm1vZGVsTmFtZSA9PT0gXCJ1aVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBleHByO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpIGFzIHVua25vd24gYXMgYm9vbGVhbjtcblx0fVxufVxuXG5jb25zdCBGaWVsZFN0cnVjdHVyZUhlbHBlciA9IHtcblx0Z2V0RGVjaW1hbFBhZGRpbmcsXG5cdHNldFVwRmllbGQsXG5cdGNvbXB1dGVFeHRlcm5hbElELFxuXHRzZXRVcERpc3BsYXlTdHlsZSxcblx0c2V0VXBPYmplY3RJZGVudGlmaWVyVGl0bGVBbmRUZXh0LFxuXHRzZXRVcFZhbHVlU3RhdGVcbn07XG5leHBvcnQgZGVmYXVsdCBGaWVsZFN0cnVjdHVyZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrTU8sU0FBU0EsVUFBVUEsQ0FDekJDLEtBQWdDLEVBQ2hDQyxvQkFBK0MsRUFDL0NDLGFBQXdCLEVBQ3hCQyxhQUF3QixFQUN4QkMsWUFBMEIsRUFDMUJDLGlCQUEyQixFQUMzQkMsUUFBOEIsRUFDOUJDLFdBQWlDLEVBQ1Y7SUFDdkIsTUFBTUMsV0FBVyxHQUFHO01BQUUsR0FBR1I7SUFBTSxDQUFvQztJQUNuRVMsTUFBTSxDQUFDQyxjQUFjLENBQUNGLFdBQVcsRUFBRSxPQUFPLEVBQUU7TUFDM0NHLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO1FBQ1YsT0FBT1gsS0FBSyxDQUFDWSxLQUFLO01BQ25CO0lBQ0QsQ0FBQyxDQUFDO0lBQ0ZILE1BQU0sQ0FBQ0MsY0FBYyxDQUFDRixXQUFXLEVBQUUsYUFBYSxFQUFFO01BQ2pERyxHQUFHLEVBQUVBLENBQUEsS0FBTTtRQUNWLE9BQU9YLEtBQUssQ0FBQ2EsV0FBVztNQUN6QjtJQUNELENBQUMsQ0FBQztJQUVGTCxXQUFXLENBQUNNLE1BQU0sR0FBR2QsS0FBSyxDQUFDYyxNQUFNO0lBQ2pDTixXQUFXLENBQUNGLFFBQVEsR0FBSUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdOLEtBQUssQ0FBQ00sUUFBb0I7SUFDeEVFLFdBQVcsQ0FBQ0QsV0FBVyxHQUFJQSxXQUFXLEdBQUdBLFdBQVcsR0FBR1AsS0FBSyxDQUFDTyxXQUF1QjtJ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
|
|
@@ -232,6 +232,8 @@ export function setUpField(
|
|
|
232
232
|
resultField.formatOptions = getFormatOptions(resultField);
|
|
233
233
|
resultField.formatOptions.showOnlyUnitDecimals =
|
|
234
234
|
viewDataModel?.getProperty("/sapFeManifestConfiguration/app/showOnlyUnitDecimals") === true;
|
|
235
|
+
resultField.formatOptions.preserveDecimalsForCurrency =
|
|
236
|
+
viewDataModel?.getProperty("/sapFeManifestConfiguration/app/preserveDecimalsForCurrency") === true;
|
|
235
237
|
|
|
236
238
|
resultField.valueHelpMetaPath = metaPath ? metaPath : resultField.metaPath;
|
|
237
239
|
computeCommonProperties(resultField, resultField.valueHelpMetaPath?.getModel());
|
|
@@ -842,7 +844,8 @@ export function setUpDisplayStyle(
|
|
|
842
844
|
UIFormatters.getBindingForUnitOrCurrency(
|
|
843
845
|
dataModelPath as DataModelObjectPath<Property>,
|
|
844
846
|
true,
|
|
845
|
-
!!field.formatOptions.showOnlyUnitDecimals
|
|
847
|
+
!!field.formatOptions.showOnlyUnitDecimals,
|
|
848
|
+
!!field.formatOptions.preserveDecimalsForCurrency
|
|
846
849
|
)
|
|
847
850
|
);
|
|
848
851
|
resultField.displayStyle = "NumberWithUnitOrCurrencyAligned";
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
vhIdPrefix="{this>vhIdPrefix}"
|
|
13
13
|
property="{property>}"
|
|
14
14
|
contextPath="{contextPath>}"
|
|
15
|
+
label="{this>/label}"
|
|
15
16
|
useSemanticDateRange="{this>useSemanticDateRange}"
|
|
16
17
|
settings="{= COMMON_HELPER.stringifyCustomData(${this>settings}) }"
|
|
17
18
|
visualFilter="{visualFilter>}"
|