@sapui5/sap.fe.macros 1.140.0 → 1.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/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
|
@@ -100,7 +100,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
100
100
|
editStyle: "Masked"
|
|
101
101
|
};
|
|
102
102
|
} else if (oTargetProperty?.annotations?.Measures?.Unit || oTargetProperty?.annotations?.Measures?.ISOCurrency) {
|
|
103
|
-
oTargetBinding = UIFormatters.getBindingWithUnitOrCurrency(propertyDataModelObjectPath, oPropertyBindingExpression, undefined, {}, true, fieldFormatOptions.showOnlyUnitDecimals);
|
|
103
|
+
oTargetBinding = UIFormatters.getBindingWithUnitOrCurrency(propertyDataModelObjectPath, oPropertyBindingExpression, undefined, {}, true, fieldFormatOptions.showOnlyUnitDecimals, fieldFormatOptions.preserveDecimalsForCurrency);
|
|
104
104
|
if (fieldFormatOptions?.measureDisplayMode === "Hidden" && isComplexTypeExpression(oTargetBinding)) {
|
|
105
105
|
// TODO: Refactor once types are less generic here
|
|
106
106
|
oTargetBinding.formatOptions = {
|
|
@@ -172,7 +172,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
172
172
|
if (String(fieldFormatOptions.isCurrencyOrUnitAligned) === "true") {
|
|
173
173
|
targetFormatOptions["decimalPadding"] = decimalPadding;
|
|
174
174
|
}
|
|
175
|
-
oBindingExpression = UIFormatters.getBindingWithUnitOrCurrency(oPropertyDataModelObjectPath, oBindingExpression, true, keepUnit ? undefined : targetFormatOptions, forDisplay, fieldFormatOptions.showOnlyUnitDecimals);
|
|
175
|
+
oBindingExpression = UIFormatters.getBindingWithUnitOrCurrency(oPropertyDataModelObjectPath, oBindingExpression, true, keepUnit ? undefined : targetFormatOptions, forDisplay, fieldFormatOptions.showOnlyUnitDecimals, fieldFormatOptions.preserveDecimalsForCurrency);
|
|
176
176
|
} else if (targetObject?.annotations?.Common?.IsTimezone) {
|
|
177
177
|
oBindingExpression = UIFormatters.getBindingForTimezone(oPropertyDataModelObjectPath, oBindingExpression);
|
|
178
178
|
} else if (targetObject?.annotations?.UI?.DateTimeStyle || fieldFormatOptions?.dateTimePattern || fieldFormatOptions?.dateTimeStyle) {
|
|
@@ -695,4 +695,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
695
695
|
_exports.getAvatarShape = getAvatarShape;
|
|
696
696
|
return _exports;
|
|
697
697
|
}, false);
|
|
698
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5Iiwib0JpbmRpbmdFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJDb21tdW5pY2F0aW9uIiwiSXNFbWFpbEFkZHJlc3MiLCJzdHlsZSIsInRhcmdldEZvcm1hdE9wdGlvbnMiLCJTdHJpbmciLCJpc0N1cnJlbmN5T3JVbml0QWxpZ25lZCIsIkV4dGVybmFsSUQiLCJjb25zdHJhaW50cyIsInBhcmFtZXRlcnMiLCJ0YXJnZXRUeXBlIiwiJFR5cGUiLCJnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmciLCJ0ZXh0UHJvcGVydHlQYXRoIiwiUHJvcGVydHlIZWxwZXIiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsIm9UZXh0UHJvcGVydHlQYXRoIiwiYWxsb3dQYXRjaCIsInZhbHVlTGlzdE91dFBhcmFtZXRlcnMiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwibWFwIiwicGFyYW1ldGVyIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpbmNsdWRlcyIsIiQkbm9QYXRjaCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvRGF0YU1vZGVsUGF0aCIsIm9Qcm9wZXJ0eSIsImFOYXZpZ2F0aW9uUHJvcGVydGllcyIsImFTZW1hbnRpY09iamVjdHMiLCJTZW1hbnRpY0tleSIsImJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIiwib05hdlByb3AiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJvUmVmQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5IiwibmFtZSIsIlF1aWNrVmlld0ZhY2V0cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVNldCIsImFJc1RhcmdldFNlbWFudGljS2V5Iiwic29tZSIsIm9TZW1hbnRpYyIsImlzS2V5IiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsIm9Qcm9wZXJ0eVBhdGgiLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwidGV4dEFsaWduTW9kZSIsImdldFRleHRBbGlnbm1lbnQiLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJjb21wdXRlZEVkaXRNb2RlIiwiY29uc2lkZXJUZXh0QW5ub3RhdGlvbiIsInR5cGVGb3JBbGlnbm1lbnQiLCJUYXJnZXQiLCJkaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwidGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsIkZpZWxkSGVscGVyIiwiZ2V0UHJvcGVydHlBbGlnbm1lbnQiLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRXhwcmVzc2lvbnNGb3JDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudCIsImRhdGFGaWVsZEZvckFubm90YXRpb24iLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMiLCJjb25uZWN0ZWRGaWVsZHMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhIiwiZmlsdGVyIiwiY29ubmVjdGVkRmllbGQiLCJoYXNPd25Qcm9wZXJ0eSIsImRhdGFGaWVsZCIsImJpbmRpbmdFeHByZXNzaW9uT2JqZWN0Iiwib3IiLCJnZXRRdWlja1ZpZXdCaW5kaW5nIiwiZ2V0UXVpY2tWaWV3VHlwZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJVcmwiLCJJc1Bob25lTnVtYmVyIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwiYVNlbU9iakV4cHJUb1Jlc29sdmUiLCJzQ3VzdG9tRGF0YUtleSIsInNDdXN0b21EYXRhVmFsdWUiLCJhU2VtT2JqQ3VzdG9tRGF0YSIsIml0ZW0iLCJrZXkiLCJ2YWx1ZSIsIm9TZW1hbnRpY09iamVjdHNNb2RlbCIsIkpTT05Nb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQiLCJvVGhpcyIsImlzTXVsdGlMaW5lVGV4dCIsIndyYXAiLCJfaGFzVmFsdWVIZWxwVG9TaG93Iiwib1Byb3BlcnR5VW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvUHJvcGVydHlDdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24iLCJkYXRlQW5ub3RhdGlvbiIsInJlbGF0aXZlTG9jYXRpb24iLCJmaXhlZERhdGUiLCJWYWxpZGF0aW9uIiwiJERhdGUiLCJkYXRlUHJvcGVydHkiLCJmb3JtYXRSZXN1bHQiLCJjb25zdGFudCIsInZhbHVlRm9ybWF0dGVycyIsInByb3ZpZGVEYXRlSW5zdGFuY2UiLCJCaW5kaW5nVG9vbGtpdCIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJvUHJvcHMiLCJvRGF0YUZpZWxkIiwib25seUVkaXRTdHlsZSIsIk1heGltdW0iLCJNaW5pbXVtIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsInZhbHVlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXIiLCJkYXRhUG9pbnRBbm5vdGF0aW9uIiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiVmlzdWFsaXphdGlvbiIsIlF1aWNrSW5mbyIsInJhdGluZ0luZGljYXRvclRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsIlRhcmdldFZhbHVlIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJ0ZXh0QmluZGluZ0V4cHJlc3Npb24iLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsImlzSlNPTk1vZGVsVXNlZEZvclZhbHVlIiwidGVzdCIsImRlc2NyaXB0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsIm1heERhdGVFeHByZXNzaW9uIiwibWluRGF0ZUV4cHJlc3Npb24iLCJzaG93VGltZXpvbmUiLCJNdWx0aUxpbmVUZXh0Iiwic3RhdGljRGVzY3JpcHRpb24iLCJtYXNraW5nUnVsZXMiLCJzeW1ib2wiLCJyZWdleCIsIm1hc2tpbmdSdWxlIiwiTWFza1N5bWJvbCIsIlJlZ0V4cCIsImhhc1NlbWFudGljT2JqZWN0SW5OYXZpZ2F0aW9uT3JQcm9wZXJ0eSIsInByb3BlcnR5IiwiU2VtYW50aWNPYmplY3RIZWxwZXIiLCJoYXNTZW1hbnRpY09iamVjdCIsImxhc3ROYXZQcm9wIiwiZmluZCIsImNvbnRleHROYXZQcm9wIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwiaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgiLCJ2YWx1ZVBhdGgiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJpbmRleE9mIiwicmVwbGFjZSIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwibm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiIsImNhcGFiaWxpdGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIk5vbkluc2VydGFibGVQcm9wZXJ0aWVzIiwibm9uSW5zZXJ0YWJsZVByb3BlcnR5IiwiZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyIsImRyYWZ0SW5kaWNhdG9yS2V5IiwiZ2V0QXZhdGFyU2hhcGUiLCJJc0ltYWdlVVJMIiwiSXNOYXR1cmFsUGVyc29uIiwiSXNJbWFnZSIsImVudGl0eUFubm90YXRpb25UYXJnZXQiLCJhdmF0YXJTaGFwZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJBdmF0YXJTaGFwZSIsIkNpcmNsZSIsIlNxdWFyZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMsXG5cdFZhbHVlTGlzdFBhcmFtZXRlclR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoQWN0aW9uLFxuXHREYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0SW5wdXRNYXNrUnVsZVR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMsIHR5cGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRGb3JtYXRPcHRpb25zLFxuXHRQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdFByaW1pdGl2ZVR5cGVcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBCaW5kaW5nVG9vbGtpdCBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb21wbGV4VHlwZUV4cHJlc3Npb24sXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5XG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Fubm90YXRpb25PZlRlcm0sXG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCAqIGFzIENvbW1vbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ29tbW9uRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbixcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRoc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUsIFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBVSUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0TWFza1J1bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9JbnB1dE1hc2tcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IEF2YXRhclNoYXBlIGZyb20gXCJzYXAvbS9BdmF0YXJTaGFwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuL0ZpZWxkSGVscGVyXCI7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgYWRkIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHRvIGEgYmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gYmUgZW5oYW5jZWRcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIHdlJ3JlIG9uICh0byBwcm9wZXJseSByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnRpZXMpXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgdGV4dCBhcnJhbmdlbWVudCBiaW5kaW5nLlxuICovXG5leHBvcnQgY29uc3QgYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IFBhcnRpYWw8RmllbGRGb3JtYXRPcHRpb25zPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gZ2V0VGV4dEJpbmRpbmcob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0aW5wdXREYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+LFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRjdXN0b21Gb3JtYXR0ZXI/OiBzdHJpbmdcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFxuXHRcdFx0fCBEYXRhRmllbGRcblx0XHRcdHwgRGF0YVBvaW50VHlwZVxuXHRcdFx0fCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdHwgRGF0YUZpZWxkV2l0aFVybFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHQ+KGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIFtcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHRdKVxuXHQpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyByZXNvbHZlZCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGFzIGEgY29uc3RhbnRcblx0XHRjb25zdCBmaWVsZFZhbHVlID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuVmFsdWUpID8/IFwiXCI7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWUpO1xuXHR9XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHtcblx0XHRpbnB1dERhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oaW5wdXREYXRhTW9kZWxQYXRoLCBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cdC8vIFdoZW4gdGFyZ2V0T2JqZWN0IGlzIGEgY29uc3RhbnQgdmFsdWVcblx0aWYgKHR5cGVvZiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGlucHV0RGF0YU1vZGVsUGF0aCkpO1xuXHRsZXQgb1RhcmdldEJpbmRpbmc7XG5cdGNvbnN0IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGlucHV0RGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PjsgLy8gQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgb25seSBoYXZlIGEgcHJvcGVydHlcblx0Y29uc3Qgb1RhcmdldFByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0Ly8gZm9ybWF0dGluZ1xuXG5cdGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuSW5wdXRNYXNrXCI7XG5cdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdG1hc2s6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uTWFzay50b1N0cmluZygpLFxuXHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUnVsZXMpXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvVGFyZ2V0UHJvcGVydHksIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0ZWRpdFN0eWxlOiBcIk1hc2tlZFwiXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgb1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0e30sXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnNob3dPbmx5VW5pdERlY2ltYWxzXG5cdFx0KTtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIgJiYgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0Li4ub1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIG9UYXJnZXRQcm9wZXJ0eS50eXBlID09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0b1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMgYXMgRmllbGRGb3JtYXRPcHRpb25zXG5cdFx0KTtcblx0fSBlbHNlIGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yVGltZXpvbmUocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdH0gZWxzZSBpZiAoXG5cdFx0b1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lUGF0dGVybiB8fFxuXHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZVxuXHQpIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCBmaWVsZEZvcm1hdE9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLFxuXHRcdFx0Y3VzdG9tRm9ybWF0dGVyXG5cdFx0KTtcblx0fVxuXG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBvVGFyZ2V0QmluZGluZztcblx0fVxuXHQvLyBXZSBkb24ndCBpbmNsdWRlICQkbm9wYXRjaCBhbmQgcGFyc2VLZWVwRW1wdHlTdHJpbmcgYXMgdGhleSBtYWtlIG5vIHNlbnNlIGluIHRoZSB0ZXh0IGJpbmRpbmcgY2FzZVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob1RhcmdldEJpbmRpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBQYXJ0aWFsPEZpZWxkRm9ybWF0T3B0aW9ucz4sXG5cdGlnbm9yZVVuaXQgPSBmYWxzZSxcblx0aWdub3JlRm9ybWF0dGluZyA9IGZhbHNlLFxuXHRiaW5kaW5nUGFyYW1ldGVycz86IG9iamVjdCxcblx0dGFyZ2V0VHlwZUFueSA9IGZhbHNlLFxuXHRrZWVwVW5pdCA9IGZhbHNlLFxuXHRkZWNpbWFsUGFkZGluZz86IG51bWJlcixcblx0Zm9yRGlzcGxheSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiYgb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJHRhcmdldCkge1xuXHRcdGNvbnN0IG9OYXZQYXRoID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgsIHRydWUpO1xuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb05hdlBhdGgudGFyZ2V0O1xuXHRcdG9OYXZQYXRoLnZpc2l0ZWRPYmplY3RzLmZvckVhY2goKG9OYXZPYmo6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkob05hdk9iaikpIHtcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9OYXZPYmopO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkpIHtcblx0XHRsZXQgb0JpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gPSBwYXRoSW5Nb2RlbChcblx0XHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aClcblx0XHQpO1xuXHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRW1haWxcIjtcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5JbnB1dE1hc2tcIjtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0bWFzazogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5NYXNrLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sOiB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlBsYWNlaG9sZGVyU3ltYm9sLFxuXHRcdFx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suUnVsZXMpXG5cdFx0XHRcdH0gYXMgRm9ybWF0T3B0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0XHQuLi5vQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRzdHlsZTogXCJwYXNzd29yZFwiXG5cdFx0XHRcdH0gYXMgRm9ybWF0T3B0aW9ucztcblx0XHRcdH0gZWxzZSBpZiAoIWlnbm9yZVVuaXQgJiYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldEZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG5cdFx0XHRcdH0gPSB7fTtcblx0XHRcdFx0aWYgKCFrZWVwVW5pdCkge1xuXHRcdFx0XHRcdHRhcmdldEZvcm1hdE9wdGlvbnNbXCJzaG93TWVhc3VyZVwiXSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChTdHJpbmcoZmllbGRGb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lPclVuaXRBbGlnbmVkKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wiZGVjaW1hbFBhZGRpbmdcIl0gPSBkZWNpbWFsUGFkZGluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGtlZXBVbml0ID8gdW5kZWZpbmVkIDogdGFyZ2V0Rm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRmb3JEaXNwbGF5LFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93T25seVVuaXREZWNpbWFsc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1Byb3BzLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBmb3IgdGhlIE1EQyBGaWVsZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHVuaXQgaW5zaWRlIHRoZSB2YWx1ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BzLnZhbHVlXG5cdFx0XHRcdFx0PyBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IGdldFZhbHVlQmluZGluZyhvRGF0YU1vZGVsUGF0aCwgb1Byb3BzLmZvcm1hdE9wdGlvbnMsIGZhbHNlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAob1Byb3BlcnR5LnR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVQaWNrZXJcIjtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5tYXhEYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWF4aW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5taW5EYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWluaW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGltZVBpY2tlclwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJEYXRlVGltZVBpY2tlclwiO1xuXHRcdFx0Ly8gTm8gdGltZXpvbmUgZGVmaW5lZC4gQWxzbyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLlxuXHRcdFx0aWYgKCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUpIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wcy5zaG93VGltZXpvbmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiQ2hlY2tCb3hcIjtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlN0cmVhbVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlRleHRBcmVhXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dE1hc2tcIjtcblx0XHRcdFx0b1Byb3BzLm1hc2sgPSB7XG5cdFx0XHRcdFx0bWFzazogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyhvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LlJ1bGVzKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0b1Byb3BzLnN0YXRpY0Rlc2NyaXB0aW9uID0gXCIlXCI7XG5cdFx0XHR9XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xuXHR9XG5cblx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRcIjtcbn07XG5cbmNvbnN0IF9nZXRNYXNraW5nUnVsZXMgPSAobWFza2luZ1J1bGVzOiBJbnB1dE1hc2tSdWxlVHlwZVR5cGVzW10gfCB1bmRlZmluZWQpOiBJbnB1dE1hc2tSdWxlW10gPT4ge1xuXHRpZiAoIW1hc2tpbmdSdWxlcyB8fCBtYXNraW5nUnVsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFt7IHN5bWJvbDogXCIqXCIsIHJlZ2V4OiBcIlthLXpBLVowLTldXCIgfV07XG5cdH1cblxuXHRyZXR1cm4gbWFza2luZ1J1bGVzLm1hcCgobWFza2luZ1J1bGUpID0+ICh7XG5cdFx0c3ltYm9sOiBtYXNraW5nUnVsZS5NYXNrU3ltYm9sLnRvU3RyaW5nKCksXG5cdFx0cmVnZXg6IG1hc2tpbmdSdWxlLlJlZ0V4cC50b1N0cmluZygpXG5cdH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdEluTmF2aWdhdGlvbk9yUHJvcGVydHkgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmIChTZW1hbnRpY09iamVjdEhlbHBlci5oYXNTZW1hbnRpY09iamVjdChwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRjb25zdCBsYXN0TmF2UHJvcCA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aFxuXHRcdD8gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllc1twcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGggLSAxXVxuXHRcdDogbnVsbDtcblx0aWYgKFxuXHRcdCFsYXN0TmF2UHJvcCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0KGNvbnRleHROYXZQcm9wKSA9PiBjb250ZXh0TmF2UHJvcC5uYW1lID09PSBsYXN0TmF2UHJvcC5uYW1lXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KGxhc3ROYXZQcm9wKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5IGFzIHRhcmdldE9iamVjdCBpZiBpdCBleGlzdHNcbiAqIGZvciBhIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIGEgRGF0YUZpZWxkIG9yIGEgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHRhcmdldGluZyB0aGUgdmFsdWUgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgPSAoXG5cdGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT5cbik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRyZXR1cm4gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdH1cblx0bGV0IHZhbHVlUGF0aCA9IFwiXCI7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLCBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlIHx8IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU7XG5cdH1cblx0c3dpdGNoIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRpZiAodHlwZW9mIGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUucGF0aDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQudmFsdWUucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xcL0AuKi8sXG5cdFx0XHRcdFx0XHRcdGAvJHtpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGh9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0LlZhbHVlPy5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZVBhdGggPSAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPik/LnBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGlmICh2YWx1ZVBhdGggJiYgdmFsdWVQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gZW5oYW5jZURhdGFNb2RlbFBhdGgoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIHZhbHVlUGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY29uc2lkZXJlZCBwcm9wZXJ0eSBpcyBhIG5vbi1pbnNlcnRhYmxlIHByb3BlcnR5XG4gKiBBIGZpcnN0IGNoZWNrIGlzIGRvbmUgb24gdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIHRoZSBjb250ZXh0TG9jYXRpb246XG4gKiAtIElmIHRoZSBhbm5vdGF0aW9uICdub25JbnNlcnRhYmxlUHJvcGVydHknIGlzIGZvdW5kIGFuZCB0aGUgcHJvcGVydHkgaXMgbGlzdGVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBpcyBub24taW5zZXJ0YWJsZSxcbiAqIC0gRWxzZSB0aGUgc2FtZSBjaGVjayBpcyBkb25lIG9uIHRoZSB0YXJnZXQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluc2VydGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuID0+IHtcblx0Y29uc3Qgbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMgPSBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIChjYXBhYmlsaXRpZXMpID0+IHtcblx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/Lk5vbkluc2VydGFibGVQcm9wZXJ0aWVzO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMuc29tZSgobm9uSW5zZXJ0YWJsZVByb3BlcnR5KSA9PiB7XG5cdFx0cmV0dXJuIG5vbkluc2VydGFibGVQcm9wZXJ0eT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGJpbmRpbmcgZm9yIHRoZSBkcmFmdCBpbmRpY2F0b3IgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBkcmFmdEluZGljYXRvcktleVxuICogQHJldHVybnMgIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcgPSAoZHJhZnRJbmRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdHJldHVybiBkcmFmdEluZGljYXRvcktleVxuXHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRjb25zdGFudChkcmFmdEluZGljYXRvcktleSksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJoaWRlRHJhZnRJbmZvXCIsIFwicGFnZUludGVybmFsXCIpXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lLmlzRHJhZnRJbmRpY2F0b3JWaXNpYmxlXCJcblx0XHRcdFx0KVxuXHRcdCAgKVxuXHRcdDogXCJmYWxzZVwiO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgRGlzcGxheVNoYXBlIGZvciB0aGUgQXZhdGFyIGRlcGVuZGluZyBvbiB0aGUgYW5ub3RhdGlvbiBJc05hdHVyYWxQZXJzb24uXG4gKlxuICogSWYgdGhlIGVudGl0eSB0eXBlIGlzIGFubm90YXRlZCB3aXRoIFwiSXNOYXR1cmFsUGVyc29uXCIsIHRoZW4gYWxsIFN0cmVhbXMgYW5kIEltYWdlVVJsc1xuICogaW4gdGhpcyBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGVyc29uIHRoZXJlZm9yZSBoYXZlIHNoYXBlIGNpcmNsZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGEgcHJvcGVydHkgd2l0aGluIHN1Y2ggYW4gZW50aXR5IGlzIGFubm90YXRlZCB3aXRoIFVJLklzSW1hZ2Ugb3IgVUkuSXNJbWFnZVVSTCwgYm90aFxuICogb2YgdGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFubm90YXRlZCB3aXRoIENvbW1vbi5Jc05hdHVyYWxQZXJzb24uXG4gKlxuICogVGhlIGFubm90YXRpb24gYXQgdGhlIHByb3BlcnR5IGxldmVsIG92ZXJyaWRlcyB0aGUgYW5ub3RhdGlvbiBhdCB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBhcyBzdHJpbmcgb3IgYXMgYW4gZXhwcmVzc2lvblxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXJTaGFwZSA9IChkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPVxuXHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uIHx8XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGNvbnN0IGVudGl0eUFubm90YXRpb25UYXJnZXQgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGxldCBhdmF0YXJTaGFwZUV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdCk7XG5cdH0gZWxzZSBpZiAoZW50aXR5QW5ub3RhdGlvblRhcmdldCkge1xuXHRcdGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KTtcblx0fSBlbHNlIGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGZhbHNlO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYXZhdGFyU2hhcGVF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
|
|
698
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2UiLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsIkNvbW1vbkZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudCIsIl9leHBvcnRzIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsInRhcmdldE9iamVjdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0VGV4dEJpbmRpbmciLCJpbnB1dERhdGFNb2RlbFBhdGgiLCJhc09iamVjdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImN1c3RvbUZvcm1hdHRlciIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImZpZWxkVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJWYWx1ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0Iiwib1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJvVGFyZ2V0QmluZGluZyIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9UYXJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJJbnB1dE1hc2siLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsIm1hc2siLCJNYXNrIiwidG9TdHJpbmciLCJwbGFjZWhvbGRlclN5bWJvbCIsIlBsYWNlaG9sZGVyU3ltYm9sIiwibWFza1J1bGUiLCJfZ2V0TWFza2luZ1J1bGVzIiwiUnVsZXMiLCJDb21tb24iLCJNYXNrZWQiLCJ2YWx1ZU9mIiwiZWRpdFN0eWxlIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd09ubHlVbml0RGVjaW1hbHMiLCJwcmVzZXJ2ZURlY2ltYWxzRm9yQ3VycmVuY3kiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsInNob3dNZWFzdXJlIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiSXNUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsIkRhdGVUaW1lU3R5bGUiLCJkYXRlVGltZVBhdHRlcm4iLCJkYXRlVGltZVN0eWxlIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJnZXRWYWx1ZUJpbmRpbmciLCJpZ25vcmVVbml0IiwiaWdub3JlRm9ybWF0dGluZyIsImJpbmRpbmdQYXJhbWV0ZXJzIiwidGFyZ2V0VHlwZUFueSIsImtlZXBVbml0IiwiZGVjaW1hbFBhZGRpbmciLCJmb3JEaXNwbGF5Iiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInB1c2giLCJpc1Byb3BlcnR5Iiwib0JpbmRpbmdFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJDb21tdW5pY2F0aW9uIiwiSXNFbWFpbEFkZHJlc3MiLCJzdHlsZSIsInRhcmdldEZvcm1hdE9wdGlvbnMiLCJTdHJpbmciLCJpc0N1cnJlbmN5T3JVbml0QWxpZ25lZCIsIkV4dGVybmFsSUQiLCJjb25zdHJhaW50cyIsInBhcmFtZXRlcnMiLCJ0YXJnZXRUeXBlIiwiJFR5cGUiLCJnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmciLCJ0ZXh0UHJvcGVydHlQYXRoIiwiUHJvcGVydHlIZWxwZXIiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsIm9UZXh0UHJvcGVydHlQYXRoIiwiYWxsb3dQYXRjaCIsInZhbHVlTGlzdE91dFBhcmFtZXRlcnMiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwibWFwIiwicGFyYW1ldGVyIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpbmNsdWRlcyIsIiQkbm9QYXRjaCIsImlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMiLCJvRGF0YU1vZGVsUGF0aCIsIm9Qcm9wZXJ0eSIsImFOYXZpZ2F0aW9uUHJvcGVydGllcyIsImFTZW1hbnRpY09iamVjdHMiLCJTZW1hbnRpY0tleSIsImJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIiwib05hdlByb3AiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJvUmVmQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5IiwibmFtZSIsIlF1aWNrVmlld0ZhY2V0cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVNldCIsImFJc1RhcmdldFNlbWFudGljS2V5Iiwic29tZSIsIm9TZW1hbnRpYyIsImlzS2V5IiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsIm9Qcm9wZXJ0eVBhdGgiLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwidGV4dEFsaWduTW9kZSIsImdldFRleHRBbGlnbm1lbnQiLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJjb21wdXRlZEVkaXRNb2RlIiwiY29uc2lkZXJUZXh0QW5ub3RhdGlvbiIsInR5cGVGb3JBbGlnbm1lbnQiLCJUYXJnZXQiLCJkaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwidGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsIkZpZWxkSGVscGVyIiwiZ2V0UHJvcGVydHlBbGlnbm1lbnQiLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRXhwcmVzc2lvbnNGb3JDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudCIsImRhdGFGaWVsZEZvckFubm90YXRpb24iLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMiLCJjb25uZWN0ZWRGaWVsZHMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhIiwiZmlsdGVyIiwiY29ubmVjdGVkRmllbGQiLCJoYXNPd25Qcm9wZXJ0eSIsImRhdGFGaWVsZCIsImJpbmRpbmdFeHByZXNzaW9uT2JqZWN0Iiwib3IiLCJnZXRRdWlja1ZpZXdCaW5kaW5nIiwiZ2V0UXVpY2tWaWV3VHlwZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJVcmwiLCJJc1Bob25lTnVtYmVyIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwiYVNlbU9iakV4cHJUb1Jlc29sdmUiLCJzQ3VzdG9tRGF0YUtleSIsInNDdXN0b21EYXRhVmFsdWUiLCJhU2VtT2JqQ3VzdG9tRGF0YSIsIml0ZW0iLCJrZXkiLCJ2YWx1ZSIsIm9TZW1hbnRpY09iamVjdHNNb2RlbCIsIkpTT05Nb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQiLCJvVGhpcyIsImlzTXVsdGlMaW5lVGV4dCIsIndyYXAiLCJfaGFzVmFsdWVIZWxwVG9TaG93Iiwib1Byb3BlcnR5VW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvUHJvcGVydHlDdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0TWluTWF4RGF0ZUV4cHJlc3Npb24iLCJkYXRlQW5ub3RhdGlvbiIsInJlbGF0aXZlTG9jYXRpb24iLCJmaXhlZERhdGUiLCJWYWxpZGF0aW9uIiwiJERhdGUiLCJkYXRlUHJvcGVydHkiLCJmb3JtYXRSZXN1bHQiLCJjb25zdGFudCIsInZhbHVlRm9ybWF0dGVycyIsInByb3ZpZGVEYXRlSW5zdGFuY2UiLCJCaW5kaW5nVG9vbGtpdCIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJvUHJvcHMiLCJvRGF0YUZpZWxkIiwib25seUVkaXRTdHlsZSIsIk1heGltdW0iLCJNaW5pbXVtIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsInZhbHVlQmluZGluZ0V4cHJlc3Npb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXIiLCJkYXRhUG9pbnRBbm5vdGF0aW9uIiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiVmlzdWFsaXphdGlvbiIsIlF1aWNrSW5mbyIsInJhdGluZ0luZGljYXRvclRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsIlRhcmdldFZhbHVlIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJ0ZXh0QmluZGluZ0V4cHJlc3Npb24iLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsImlzSlNPTk1vZGVsVXNlZEZvclZhbHVlIiwidGVzdCIsImRlc2NyaXB0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsIm1heERhdGVFeHByZXNzaW9uIiwibWluRGF0ZUV4cHJlc3Npb24iLCJzaG93VGltZXpvbmUiLCJNdWx0aUxpbmVUZXh0Iiwic3RhdGljRGVzY3JpcHRpb24iLCJtYXNraW5nUnVsZXMiLCJzeW1ib2wiLCJyZWdleCIsIm1hc2tpbmdSdWxlIiwiTWFza1N5bWJvbCIsIlJlZ0V4cCIsImhhc1NlbWFudGljT2JqZWN0SW5OYXZpZ2F0aW9uT3JQcm9wZXJ0eSIsInByb3BlcnR5IiwiU2VtYW50aWNPYmplY3RIZWxwZXIiLCJoYXNTZW1hbnRpY09iamVjdCIsImxhc3ROYXZQcm9wIiwiZmluZCIsImNvbnRleHROYXZQcm9wIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclZhbHVlIiwiaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgiLCJ2YWx1ZVBhdGgiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJpbmRleE9mIiwicmVwbGFjZSIsImhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zIiwibm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMiLCJnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiIsImNhcGFiaWxpdGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIk5vbkluc2VydGFibGVQcm9wZXJ0aWVzIiwibm9uSW5zZXJ0YWJsZVByb3BlcnR5IiwiZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyIsImRyYWZ0SW5kaWNhdG9yS2V5IiwiZ2V0QXZhdGFyU2hhcGUiLCJJc0ltYWdlVVJMIiwiSXNOYXR1cmFsUGVyc29uIiwiSXNJbWFnZSIsImVudGl0eUFubm90YXRpb25UYXJnZXQiLCJhdmF0YXJTaGFwZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJBdmF0YXJTaGFwZSIsIkNpcmNsZSIsIlNxdWFyZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCxcblx0VmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMsXG5cdFZhbHVlTGlzdFBhcmFtZXRlclR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoQWN0aW9uLFxuXHREYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0SW5wdXRNYXNrUnVsZVR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMsIHR5cGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRGb3JtYXRPcHRpb25zLFxuXHRQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdFByaW1pdGl2ZVR5cGVcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBCaW5kaW5nVG9vbGtpdCBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb21wbGV4VHlwZUV4cHJlc3Npb24sXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5XG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Fubm90YXRpb25PZlRlcm0sXG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCAqIGFzIENvbW1vbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ29tbW9uRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbixcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRoc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGlzcGxheU1vZGUsIFByb3BlcnR5T3JQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBVSUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0TWFza1J1bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9JbnB1dE1hc2tcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IEF2YXRhclNoYXBlIGZyb20gXCJzYXAvbS9BdmF0YXJTaGFwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuL0ZpZWxkSGVscGVyXCI7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgYWRkIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHRvIGEgYmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gYmUgZW5oYW5jZWRcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIHdlJ3JlIG9uICh0byBwcm9wZXJseSByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnRpZXMpXG4gKiBAcmV0dXJucyBBbiB1cGRhdGVkIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgdGV4dCBhcnJhbmdlbWVudCBiaW5kaW5nLlxuICovXG5leHBvcnQgY29uc3QgYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0YmluZGluZ0V4cHJlc3Npb25Ub0VuaGFuY2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPixcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvblRvRW5oYW5jZSwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gQ29tbW9uRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbiAoXG5cdGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uVG9FbmhhbmNlLCBcIlBhdGhJbk1vZGVsXCIsIChleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gZXhwcmVzc2lvbjtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkZWZhdWx0IG1vZGVsIHdlIHRoZW4gbmVlZCB0byByZXNvbHZlIHRoZSB0ZXh0IGFycmFuZ2VtZW50IHByb3BlcnR5XG5cdFx0XHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IFBhcnRpYWw8RmllbGRGb3JtYXRPcHRpb25zPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gZ2V0VGV4dEJpbmRpbmcob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0aW5wdXREYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+LFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRjdXN0b21Gb3JtYXR0ZXI/OiBzdHJpbmdcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFxuXHRcdFx0fCBEYXRhRmllbGRcblx0XHRcdHwgRGF0YVBvaW50VHlwZVxuXHRcdFx0fCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcblx0XHRcdHwgRGF0YUZpZWxkV2l0aFVybFxuXHRcdFx0fCBEYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXG5cdFx0XHR8IERhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHQ+KGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIFtcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsLFxuXHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHRdKVxuXHQpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyByZXNvbHZlZCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGFzIGEgY29uc3RhbnRcblx0XHRjb25zdCBmaWVsZFZhbHVlID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QuVmFsdWUpID8/IFwiXCI7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkVmFsdWUpO1xuXHR9XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHtcblx0XHRpbnB1dERhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oaW5wdXREYXRhTW9kZWxQYXRoLCBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cdC8vIFdoZW4gdGFyZ2V0T2JqZWN0IGlzIGEgY29uc3RhbnQgdmFsdWVcblx0aWYgKHR5cGVvZiBpbnB1dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGlucHV0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGlucHV0RGF0YU1vZGVsUGF0aCkpO1xuXHRsZXQgb1RhcmdldEJpbmRpbmc7XG5cdGNvbnN0IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGlucHV0RGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PjsgLy8gQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgb25seSBoYXZlIGEgcHJvcGVydHlcblx0Y29uc3Qgb1RhcmdldFByb3BlcnR5ID0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0Ly8gZm9ybWF0dGluZ1xuXG5cdGlmIChvVGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9UYXJnZXRQcm9wZXJ0eSwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdG9UYXJnZXRCaW5kaW5nLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuSW5wdXRNYXNrXCI7XG5cdFx0b1RhcmdldEJpbmRpbmcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdG1hc2s6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uTWFzay50b1N0cmluZygpLFxuXHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdG1hc2tSdWxlOiBfZ2V0TWFza2luZ1J1bGVzKG9UYXJnZXRQcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUnVsZXMpXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdG9UYXJnZXRCaW5kaW5nID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvVGFyZ2V0UHJvcGVydHksIG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRvVGFyZ2V0QmluZGluZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0ZWRpdFN0eWxlOiBcIk1hc2tlZFwiXG5cdFx0fSBhcyB1bmtub3duIGFzIEZvcm1hdE9wdGlvbnM7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgb1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0e30sXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnNob3dPbmx5VW5pdERlY2ltYWxzLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdCk7XG5cdFx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiICYmIGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9UYXJnZXRCaW5kaW5nKSkge1xuXHRcdFx0Ly8gVE9ETzogUmVmYWN0b3Igb25jZSB0eXBlcyBhcmUgbGVzcyBnZW5lcmljIGhlcmVcblx0XHRcdG9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLm9UYXJnZXRCaW5kaW5nLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSAmJiBvVGFyZ2V0UHJvcGVydHkudHlwZSA9PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhUaW1lem9uZShcblx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdG9Qcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0cnVlLFxuXHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zIGFzIEZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdCk7XG5cdH0gZWxzZSBpZiAob1RhcmdldFByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1RpbWV6b25lKSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclRpbWV6b25lKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb1Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHR9IGVsc2UgaWYgKFxuXHRcdG9UYXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlIHx8XG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnM/LmRhdGVUaW1lU3R5bGVcblx0KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgZmllbGRGb3JtYXRPcHRpb25zKTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0QmluZGluZyA9IENvbW1vbkZvcm1hdHRlcnMuZ2V0QmluZGluZ1dpdGhUZXh0QXJyYW5nZW1lbnQoXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRvUHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkRm9ybWF0T3B0aW9ucyxcblx0XHRcdGN1c3RvbUZvcm1hdHRlclxuXHRcdCk7XG5cdH1cblxuXHRpZiAoYXNPYmplY3QpIHtcblx0XHRyZXR1cm4gb1RhcmdldEJpbmRpbmc7XG5cdH1cblx0Ly8gV2UgZG9uJ3QgaW5jbHVkZSAkJG5vcGF0Y2ggYW5kIHBhcnNlS2VlcEVtcHR5U3RyaW5nIGFzIHRoZXkgbWFrZSBubyBzZW5zZSBpbiB0aGUgdGV4dCBiaW5kaW5nIGNhc2Vcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9UYXJnZXRCaW5kaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHkgfCBEYXRhRmllbGRUeXBlcz4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+LFxuXHRpZ25vcmVVbml0ID0gZmFsc2UsXG5cdGlnbm9yZUZvcm1hdHRpbmcgPSBmYWxzZSxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBvYmplY3QsXG5cdHRhcmdldFR5cGVBbnkgPSBmYWxzZSxcblx0a2VlcFVuaXQgPSBmYWxzZSxcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXIsXG5cdGZvckRpc3BsYXkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpICYmIG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiR0YXJnZXQpIHtcblx0XHRjb25zdCBvTmF2UGF0aCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXRoLCB0cnVlKTtcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCA9IG9OYXZQYXRoLnRhcmdldDtcblx0XHRvTmF2UGF0aC52aXNpdGVkT2JqZWN0cy5mb3JFYWNoKChvTmF2T2JqOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KG9OYXZPYmopKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvTmF2T2JqKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gcGF0aEluTW9kZWwoXG5cdFx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpXG5cdFx0KTtcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKSkge1xuXHRcdFx0aWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih0YXJnZXRPYmplY3QsIG9CaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkVtYWlsXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaykge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuSW5wdXRNYXNrXCI7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHRcdC4uLm9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdG1hc2s6IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucy5VSS5JbnB1dE1hc2suTWFzayxcblx0XHRcdFx0XHRwbGFjZWhvbGRlclN5bWJvbDogdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLlVJLklucHV0TWFzay5QbGFjZWhvbGRlclN5bWJvbCxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUkuSW5wdXRNYXNrLlJ1bGVzKVxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5NYXNrZWQ/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Li4ub0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0c3R5bGU6IFwicGFzc3dvcmRcIlxuXHRcdFx0XHR9IGFzIEZvcm1hdE9wdGlvbnM7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVVbml0ICYmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRGb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGlmICgha2VlcFVuaXQpIHtcblx0XHRcdFx0XHR0YXJnZXRGb3JtYXRPcHRpb25zW1wic2hvd01lYXN1cmVcIl0gPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoU3RyaW5nKGZpZWxkRm9ybWF0T3B0aW9ucy5pc0N1cnJlbmN5T3JVbml0QWxpZ25lZCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Rm9ybWF0T3B0aW9uc1tcImRlY2ltYWxQYWRkaW5nXCJdID0gZGVjaW1hbFBhZGRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3koXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRrZWVwVW5pdCA/IHVuZGVmaW5lZCA6IHRhcmdldEZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Zm9yRGlzcGxheSxcblx0XHRcdFx0XHRmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd09ubHlVbml0RGVjaW1hbHMsXG5cdFx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmUpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JUaW1lem9uZShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGUgfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gfHxcblx0XHRcdFx0ZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlXG5cdFx0XHQpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlRm9ybWF0KFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICYmIHRhcmdldE9iamVjdC50eXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IFVJRm9ybWF0dGVycy5nZXRCaW5kaW5nV2l0aFRpbWV6b25lKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBvQmluZGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRCkge1xuXHRcdFx0XHRcdChvQmluZGluZ0V4cHJlc3Npb24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aCArPSBcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvQmluZGluZ0V4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdGRlbGV0ZSBvQmluZGluZ0V4cHJlc3Npb24uY29uc3RyYWludHM7XG5cdFx0XHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiaW5kaW5nUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRhcmdldFR5cGVBbnkpIHtcblx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChhc09iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gb0JpbmRpbmdFeHByZXNzaW9uIGFzIHVua25vd24gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob0JpbmRpbmdFeHByZXNzaW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgc29tZWhvdyB3ZSBjb3VsZCBub3QgY29tcGlsZSB0aGUgYmluZGluZyAtPiByZXR1cm4gZW1wdHkgc3RyaW5nXG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0dGFyZ2V0T2JqZWN0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0QmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogUGFydGlhbDxGaWVsZEZvcm1hdE9wdGlvbnM+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdGlmICh0ZXh0UHJvcGVydHlQYXRoKSB7XG5cdFx0Y29uc3Qgb1RleHRQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Ly9CQ1AgMjM4MDEyMDgwNjogZ2V0VmFsdWVCaW5kaW5nIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IGZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nLlxuXHRcdC8vT3RoZXJ3aXNlIGVtcHR5aW5nIGFuIGlucHV0IGZpZWxkIHRoYXQgaGFzIGEgdGV4dCBhbm5vdGF0aW9uIHRvIGEgbm90IG51bGxhYmxlIHN0cmluZyB3b3VsZCByZXN1bHQgaW5cblx0XHQvL2FuIGVycm9yIG1lc3NhZ2UuIFRoZXJlZm9yZSBpbXBvcnQgcGFyYW0gJ2lnbm9yZUZvcm1hdHRpbmcnIGlzIG5vdyBzZXQgdG8gZmFsc2UuXG5cdFx0bGV0IGFsbG93UGF0Y2ggPSBmYWxzZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RPdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9XG5cdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Py5QYXJhbWV0ZXJzLm1hcChcblx0XHRcdFx0KHBhcmFtZXRlcjogVmFsdWVMaXN0UGFyYW1ldGVyVHlwZXMpID0+IHtcblx0XHRcdFx0XHRpZiAoIXBhcmFtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQocGFyYW1ldGVyIGFzIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHwgVmFsdWVMaXN0UGFyYW1ldGVyT3V0VHlwZXMpPy5Mb2NhbERhdGFQcm9wZXJ0eT8uJHRhcmdldFxuXHRcdFx0XHRcdFx0XHQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KSB8fCBbXTtcblx0XHRpZiAoXG5cdFx0XHRvVGV4dFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgJiZcblx0XHRcdHZhbHVlTGlzdE91dFBhcmFtZXRlcnMuaW5jbHVkZXMob1RleHRQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQpIHtcblx0XHRcdGFsbG93UGF0Y2ggPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVycyA9IGFsbG93UGF0Y2ggPyB1bmRlZmluZWQgOiB7ICQkbm9QYXRjaDogdHJ1ZSB9O1xuXHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgZmFsc2UsIGJpbmRpbmdQYXJhbWV0ZXJzLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LCBvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5uYXZpZ2F0aW9uUHJvcGVydGllcyB8fCBbXTtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0cyA9IG9EYXRhTW9kZWxQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXTtcblx0bGV0IGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZmFsc2U7XG5cdGFOYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChvTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0aWYgKG9OYXZQcm9wLnJlZmVyZW50aWFsQ29uc3RyYWludCAmJiBvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQubGVuZ3RoKSB7XG5cdFx0XHRvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQuZm9yRWFjaCgob1JlZkNvbnN0cmFpbnQpID0+IHtcblx0XHRcdFx0aWYgKG9SZWZDb25zdHJhaW50Py5zb3VyY2VQcm9wZXJ0eSA9PT0gb1Byb3BlcnR5Lm5hbWUpIHtcblx0XHRcdFx0XHRpZiAob05hdlByb3A/LnRhcmdldFR5cGU/LmFubm90YXRpb25zPy5VST8uUXVpY2tWaWV3RmFjZXRzKSB7XG5cdFx0XHRcdFx0XHRiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQgIT09IG9EYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdGNvbnN0IGFJc1RhcmdldFNlbWFudGljS2V5ID0gYVNlbWFudGljT2JqZWN0cy5zb21lKGZ1bmN0aW9uIChvU2VtYW50aWMpIHtcblx0XHRcdHJldHVybiBvU2VtYW50aWM/LiR0YXJnZXQ/Lm5hbWUgPT09IG9Qcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdGlmICgoYUlzVGFyZ2V0U2VtYW50aWNLZXkgfHwgb1Byb3BlcnR5LmlzS2V5KSAmJiBvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiB7IGRpc3BsYXlNb2RlPzogRGlzcGxheU1vZGU7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcyAmJlxuXHRcdFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHkpICYmXG5cdFx0ZmllbGRGb3JtYXRPcHRpb25zLnRleHRBbGlnbk1vZGUgPT09IFwiRm9ybVwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0ZXh0IGFsaWdubWVudCBiYXNlZCBvbiB0aGUgZGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIHByb3BlcnR5J3MgdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgVGhlIGZpZWxkIGZvcm1hdCBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBEaXNwbGF5IGZvcm1hdFxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBjb21wdXRlZEVkaXRNb2RlIFRoZSBlZGl0TW9kZSB1c2VkIGluIHRoaXMgY2FzZVxuICogQHBhcmFtIGNvbnNpZGVyVGV4dEFubm90YXRpb24gV2hldGhlciB0byBjb25zaWRlciB0aGUgdGV4dCBhbm5vdGF0aW9uIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRleHRBbGlnbm1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0Zm9ybWF0T3B0aW9uczogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRjb21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0Y29uc2lkZXJUZXh0QW5ub3RhdGlvbiA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdC8vIGNoZWNrIGZvciB0aGUgdGFyZ2V0IHZhbHVlIHR5cGUgZGlyZWN0bHksIG9yIGluIGNhc2UgaXQgaXMgcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0bGV0IHR5cGVGb3JBbGlnbm1lbnQgPVxuXHRcdChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQudHlwZSB8fFxuXHRcdCgoZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WYWx1ZS4kdGFyZ2V0LnR5cGU7XG5cblx0aWYgKFxuXHRcdFByb3BlcnR5SGVscGVyLmlzS2V5KFxuXHRcdFx0KGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldCB8fFxuXHRcdFx0XHQoKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXRcblx0XHQpXG5cdCkge1xuXHRcdHJldHVybiBcIkJlZ2luXCI7XG5cdH1cblx0aWYgKFxuXHRcdGNvbnNpZGVyVGV4dEFubm90YXRpb24gJiZcblx0XHRmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlICYmXG5cdFx0W1wiRGVzY3JpcHRpb25cIiwgXCJEZXNjcmlwdGlvblZhbHVlXCIsIFwiVmFsdWVEZXNjcmlwdGlvblwiXS5pbmNsdWRlcyhmb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlKVxuXHQpIHtcblx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvbiA9IChkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRjb25zdCB0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50LnZhbHVlT2YoKTtcblx0XHRpZiAodGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiAhPT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHR0eXBlRm9yQWxpZ25tZW50ID0gdGV4dEFubm90YXRpb24uJHRhcmdldC50eXBlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGaWVsZEhlbHBlci5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlRm9yQWxpZ25tZW50LCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7IGlzQW5hbHl0aWNzPzogYm9vbGVhbiB9XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZE1vZGVsUGF0aCwgZm9ybWF0T3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgRm9ybUVsZW1lbnQuXG4gKiBUaGUgRm9ybUVsZW1lbnQgaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgY29udGVudCBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaW52aXNpYmxlLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHJldHVybnMgQSBCb29sZWFuIG9yIG90aGVyIGV4cHJlc3Npb24gdGhhdCBjYW4gYmUgYm91bmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgdmlzaWJsZUV4cHJlc3Npb25zRm9yQ29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZEZvckFubm90YXRpb24gPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZ2VuZXJhdGVWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRNb2RlbFBhdGgpKTtcblxuXHRjb25zdCBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zOiAoYm9vbGVhbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSA9IFtdO1xuXHRpZiAodHlwZW9mIHZpc2libGVFeHByZXNzaW9uID09PSBcInN0cmluZ1wiICYmIHZpc2libGVFeHByZXNzaW9uLmluY2x1ZGVzKFwiez1cIikpIHtcblx0XHRyZXR1cm4gdmlzaWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKFxuXHRcdGRhdGFGaWVsZEZvckFubm90YXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQuRGF0YSkuZmlsdGVyKFxuXHRcdFx0KGNvbm5lY3RlZEZpZWxkKSA9PiBjb25uZWN0ZWRGaWVsZD8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdCkgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdO1xuXHRcdGNvbm5lY3RlZEZpZWxkcy5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGQ7XG5cdFx0XHRjb25zdCBiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCA9IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkTW9kZWxQYXRoKTtcblx0XHRcdGlmIChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMucHVzaChiaW5kaW5nRXhwcmVzc2lvbk9iamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogQ29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBvciAqL1xuXHRcdHJldHVybiBkYXRhRmllbGRzQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA/IGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLmRhdGFGaWVsZHNCaW5kaW5nRXhwcmVzc2lvbnMpKSA6IHZpc2libGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiB2aXNpYmxlRXhwcmVzc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBmb3IgYSBwcm9wZXJ0eSBpbiBhIFF1aWNrVmlld0ZhY2V0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0aGUgdmFsdWUsIG9yIGEgQmluZGluZ0V4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld0JpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcge1xuXHRpZiAoIXByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdHJldHVybiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHt9IGFzIEZpZWxkRm9ybWF0T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgUXVpY2tWaWV3R3JvdXBFbGVtZW50LlxuICogQHBhcmFtIGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggVGhlIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIFF1aWNrVmlld0dyb3VwRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tWaWV3VHlwZSA9IGZ1bmN0aW9uIChkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzIHwgUHJvcGVydHk+KTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkV2l0aFVybD4odGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJiB0YXJnZXRPYmplY3Q/LlVybCkge1xuXHRcdHJldHVybiBcImxpbmtcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MpIHx8XG5cdFx0KGlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcylcblx0KSB7XG5cdFx0cmV0dXJuIFwiZW1haWxcIjtcblx0fVxuXHRpZiAoXG5cdFx0KCFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkgJiYgdGFyZ2V0T2JqZWN0Py5WYWx1ZS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikgfHxcblx0XHQoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcInBob25lXCI7XG5cdH1cblx0cmV0dXJuIFwidGV4dFwiO1xufTtcblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3RDdXN0b21EYXRhID0ge1xuXHRrZXk6IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoXG5cdGFTZW1PYmpFeHByVG9SZXNvbHZlOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfVtdXG4pOiBDb250ZXh0IHtcblx0aWYgKGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgc0N1c3RvbURhdGFLZXkgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiXCI7XG5cdFx0Y29uc3QgYVNlbU9iakN1c3RvbURhdGE6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVNlbU9iakV4cHJUb1Jlc29sdmUpIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gaXRlbS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGl0ZW0udmFsdWUpKTtcblx0XHRcdGFTZW1PYmpDdXN0b21EYXRhLnB1c2goe1xuXHRcdFx0XHRrZXk6IHNDdXN0b21EYXRhS2V5LFxuXHRcdFx0XHR2YWx1ZTogc0N1c3RvbURhdGFWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYVNlbU9iakN1c3RvbURhdGEpO1xuXHRcdChvU2VtYW50aWNPYmplY3RzTW9kZWwgYXMgeyAkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbiB9KS4kJHZhbHVlQXNQcm9taXNlID0gdHJ1ZTtcblx0XHRyZXR1cm4gb1NlbWFudGljT2JqZWN0c01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IEpTT05Nb2RlbChbXSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgTXVsdGlwbGVMaW5lcyBmb3IgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0ge2FueX0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlMaW5lVGV4dCBUaGUgcHJvcGVydHkgaXNNdWx0aUxpbmVUZXh0XG4gKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBkYXRhIGZpZWxkIHNob3VsZCBiZSBhIE11bHRpTGluZVRleHQgb3Igbm90XG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQgPSBmdW5jdGlvbiAob1RoaXM6IFBhcnRpYWw8eyB3cmFwPzogYm9vbGVhbiB9PiwgaXNNdWx0aUxpbmVUZXh0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGlmIChvVGhpcy53cmFwID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0O1xufTtcblxuY29uc3QgX2hhc1ZhbHVlSGVscFRvU2hvdyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5LCBtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHQvLyB3ZSBzaG93IGEgdmFsdWUgaGVscCBpZiB0ZWggcHJvcGVydHkgaGFzIG9uZSBvciBpZiBpdHMgdmlzaWJsZSB1bml0IGhhcyBvbmVcblx0Y29uc3Qgb1Byb3BlcnR5VW5pdCA9IFByb3BlcnR5SGVscGVyLmdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3Qgb1Byb3BlcnR5Q3VycmVuY3kgPSBQcm9wZXJ0eUhlbHBlci5nZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRyZXR1cm4gKFxuXHRcdChQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSAmJiBvUHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB8fFxuXHRcdChtZWFzdXJlRGlzcGxheU1vZGUgIT09IFwiSGlkZGVuXCIgJiZcblx0XHRcdCgob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdChvUHJvcGVydHlDdXJyZW5jeSAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZGF0ZSBmb3IgdGhlIGRhdGUgZmllbGQuXG4gKiBAcGFyYW0gZGF0ZUFubm90YXRpb24gUHJvcGVydHkgQW5ub3RhdGlvbnMgZm9yIHRoZSBkYXRlIGZpZWxkLlxuICogQHBhcmFtIHR5cGUgRWl0aGVyICdNYXhpbXVtJyBvciAnTWluaW11bScuXG4gKiBAcGFyYW0gcmVsYXRpdmVMb2NhdGlvblxuICogQHJldHVybnMgTWluaW51bSBvciBNYXhpbXVtIGRhdGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pbk1heERhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRlQW5ub3RhdGlvbjogUHJvcGVydHlBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZCxcblx0dHlwZTogXCJNYXhpbXVtXCIgfCBcIk1pbmltdW1cIixcblx0cmVsYXRpdmVMb2NhdGlvbjogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGZpeGVkRGF0ZSA9IGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0/LiREYXRlO1xuXHRjb25zdCBkYXRlUHJvcGVydHkgPSBkYXRlQW5ub3RhdGlvbj8uVmFsaWRhdGlvbj8uW3R5cGVdO1xuXHRpZiAoZml4ZWREYXRlKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbY29uc3RhbnQoZml4ZWREYXRlKV0sIHZhbHVlRm9ybWF0dGVycy5wcm92aWRlRGF0ZUluc3RhbmNlKTtcblx0fSBlbHNlIGlmIChkYXRlUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gQmluZGluZ1Rvb2xraXQuZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGVBbm5vdGF0aW9uPy5WYWxpZGF0aW9uPy5bdHlwZV0sIHJlbGF0aXZlTG9jYXRpb24pO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFNldHMgRWRpdCBTdHlsZSBwcm9wZXJ0aWVzIGZvciBGaWVsZCBpbiBjYXNlIG9mIE1hY3JvIEZpZWxkIGFuZCBNYXNzRWRpdERpYWxvZyBmaWVsZHMuXG4gKiBAcGFyYW0gb1Byb3BzIEZpZWxkIFByb3BlcnRpZXMgZm9yIHRoZSBNYWNybyBGaWVsZC5cbiAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFGaWVsZCBPYmplY3QuXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggRGF0YU1vZGVsIE9iamVjdCBQYXRoIHRvIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvbmx5RWRpdFN0eWxlIFRvIGFkZCBvbmx5IGVkaXRTdHlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRTdHlsZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wczogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRvbmx5RWRpdFN0eWxlPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IG9EYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0aWYgKFxuXHRcdCFpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkgfHxcblx0XHRbXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdF0uaW5jbHVkZXMob0RhdGFGaWVsZC4kVHlwZSlcblx0KSB7XG5cdFx0b1Byb3BzLmVkaXRTdHlsZSA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghb25seUVkaXRTdHlsZSkge1xuXHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZSB8fCBvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0RhdGFNb2RlbFBhdGgpKTtcblx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldEJpbmRpbmdGb3JEYXRlUGlja2VyKFxuXHRcdFx0XHRvRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvblxuXHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb3BzLnZhbHVlQmluZGluZ0V4cHJlc3Npb24gPSBvUHJvcHMudmFsdWUgPyBvUHJvcHMudmFsdWUgOiBnZXRWYWx1ZUJpbmRpbmcob0RhdGFNb2RlbFBhdGgsIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblx0XHR9XG5cblx0XHRjb25zdCBlZGl0U3R5bGVQbGFjZWhvbGRlciA9XG5cdFx0XHQob0RhdGFGaWVsZCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LlBsYWNlaG9sZGVyIHx8XG5cdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5QbGFjZWhvbGRlcjtcblxuXHRcdGlmIChlZGl0U3R5bGVQbGFjZWhvbGRlcikge1xuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZVBsYWNlaG9sZGVyID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVkaXRTdHlsZVBsYWNlaG9sZGVyKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0dXAgUmF0aW5nSW5kaWNhdG9yXG5cdGNvbnN0IGRhdGFQb2ludEFubm90YXRpb24gPSAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKG9EYXRhRmllbGQpID8gb0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgOiBvRGF0YUZpZWxkKSBhcyBEYXRhUG9pbnRUeXBlO1xuXHRpZiAoZGF0YVBvaW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlJhdGluZ0luZGljYXRvclwiO1xuXG5cdFx0aWYgKGRhdGFQb2ludEFubm90YXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0XHRvUHJvcHMucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YVBvaW50QW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9Qcm9wcy5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhUG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKFxuXHRcdF9oYXNWYWx1ZUhlbHBUb1Nob3cob1Byb3BlcnR5LCBvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlKSB8fFxuXHRcdChvUHJvcHMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlICE9PSBcIkhpZGRlblwiICYmXG5cdFx0XHQob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgJiYgIWhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpKSlcblx0KSB7XG5cdFx0aWYgKCFvbmx5RWRpdFN0eWxlKSB7XG5cdFx0XHQvKiBUaGUgdGV4dEJpbmRpbmdFeHByZXNzaW9uIGlzIHVzZWQgZm9yIG1kY0ZpZWxkLWF0dHJpYnV0ZSAnYWRkaXRpb25hbFZhbHVlJyBhbmQgbWVhbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSAqL1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSURcblx0XHRcdFx0PyBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob1Byb3BzLmRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBvUHJvcHMuZm9ybWF0T3B0aW9ucylcblx0XHRcdFx0OiBnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmcob0RhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIG9Qcm9wcy5mb3JtYXRPcHRpb25zKTtcblxuXHRcdFx0Y29uc3QgaXNKU09OTW9kZWxVc2VkRm9yVmFsdWUgPSAhIW9Qcm9wcy52YWx1ZSAmJiAve1xcdys+Lit9Ly50ZXN0KG9Qcm9wcy52YWx1ZSk7XG5cblx0XHRcdGlmIChpc0pTT05Nb2RlbFVzZWRGb3JWYWx1ZSkge1xuXHRcdFx0XHRpZiAob1Byb3BzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0b1Byb3BzLnRleHRCaW5kaW5nRXhwcmVzc2lvbiA9IG9Qcm9wcy5kZXNjcmlwdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdG9Qcm9wcy5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcHMudGV4dEJpbmRpbmdFeHByZXNzaW9uID0gdGV4dEJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1Byb3BzLmZvcm1hdE9wdGlvbnM/Lm1lYXN1cmVEaXNwbGF5TW9kZSAhPT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBmb3IgdGhlIE1EQyBGaWVsZCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHVuaXQgaW5zaWRlIHRoZSB2YWx1ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0XHRcdG9Qcm9wcy52YWx1ZUJpbmRpbmdFeHByZXNzaW9uID0gb1Byb3BzLnZhbHVlXG5cdFx0XHRcdFx0PyBvUHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IGdldFZhbHVlQmluZGluZyhvRGF0YU1vZGVsUGF0aCwgb1Byb3BzLmZvcm1hdE9wdGlvbnMsIGZhbHNlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAob1Byb3BlcnR5LnR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIkRhdGVQaWNrZXJcIjtcblx0XHRcdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5tYXhEYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWF4aW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHk/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSB7XG5cdFx0XHRcdG9Qcm9wcy5taW5EYXRlRXhwcmVzc2lvbiA9IGdldE1pbk1heERhdGVFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMsIFwiTWluaW11bVwiLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiVGltZVBpY2tlclwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJEYXRlVGltZVBpY2tlclwiO1xuXHRcdFx0Ly8gTm8gdGltZXpvbmUgZGVmaW5lZC4gQWxzbyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLlxuXHRcdFx0aWYgKCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUpIHtcblx0XHRcdFx0b1Byb3BzLnNob3dUaW1lem9uZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wcy5zaG93VGltZXpvbmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiQ2hlY2tCb3hcIjtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlIFwiRWRtLlN0cmVhbVwiOlxuXHRcdFx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiRmlsZVwiO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIlRleHRBcmVhXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LnZhbHVlT2YoKSkge1xuXHRcdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dE1hc2tcIjtcblx0XHRcdFx0b1Byb3BzLm1hc2sgPSB7XG5cdFx0XHRcdFx0bWFzazogb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSW5wdXRNYXNrPy5NYXNrLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXJTeW1ib2w6IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklucHV0TWFzaz8uUGxhY2Vob2xkZXJTeW1ib2wudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRtYXNrUnVsZTogX2dldE1hc2tpbmdSdWxlcyhvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5JbnB1dE1hc2s/LlJ1bGVzKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/Lk1hc2tlZD8udmFsdWVPZigpKSB7XG5cdFx0XHRcdG9Qcm9wcy5lZGl0U3R5bGUgPSBcIk1hc2tlZFwiO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0b1Byb3BzLnN0YXRpY0Rlc2NyaXB0aW9uID0gXCIlXCI7XG5cdFx0XHR9XG5cdFx0XHRvUHJvcHMuZWRpdFN0eWxlID0gXCJJbnB1dFwiO1xuXHR9XG5cblx0b1Byb3BzLmVkaXRTdHlsZSA9IFwiSW5wdXRcIjtcbn07XG5cbmNvbnN0IF9nZXRNYXNraW5nUnVsZXMgPSAobWFza2luZ1J1bGVzOiBJbnB1dE1hc2tSdWxlVHlwZVR5cGVzW10gfCB1bmRlZmluZWQpOiBJbnB1dE1hc2tSdWxlW10gPT4ge1xuXHRpZiAoIW1hc2tpbmdSdWxlcyB8fCBtYXNraW5nUnVsZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFt7IHN5bWJvbDogXCIqXCIsIHJlZ2V4OiBcIlthLXpBLVowLTldXCIgfV07XG5cdH1cblxuXHRyZXR1cm4gbWFza2luZ1J1bGVzLm1hcCgobWFza2luZ1J1bGUpID0+ICh7XG5cdFx0c3ltYm9sOiBtYXNraW5nUnVsZS5NYXNrU3ltYm9sLnRvU3RyaW5nKCksXG5cdFx0cmVnZXg6IG1hc2tpbmdSdWxlLlJlZ0V4cC50b1N0cmluZygpXG5cdH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdEluTmF2aWdhdGlvbk9yUHJvcGVydHkgPSAocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGlmIChTZW1hbnRpY09iamVjdEhlbHBlci5oYXNTZW1hbnRpY09iamVjdChwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRjb25zdCBsYXN0TmF2UHJvcCA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aFxuXHRcdD8gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllc1twcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGggLSAxXVxuXHRcdDogbnVsbDtcblx0aWYgKFxuXHRcdCFsYXN0TmF2UHJvcCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0KGNvbnRleHROYXZQcm9wKSA9PiBjb250ZXh0TmF2UHJvcC5uYW1lID09PSBsYXN0TmF2UHJvcC5uYW1lXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KGxhc3ROYXZQcm9wKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHdpdGggdGhlIHZhbHVlIHByb3BlcnR5IGFzIHRhcmdldE9iamVjdCBpZiBpdCBleGlzdHNcbiAqIGZvciBhIGRhdGFNb2RlbE9iamVjdFBhdGggdGFyZ2V0aW5nIGEgRGF0YUZpZWxkIG9yIGEgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIHRhcmdldGluZyB0aGUgdmFsdWUgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yVmFsdWUgPSAoXG5cdGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eT5cbik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkpIHtcblx0XHRyZXR1cm4gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cdH1cblx0bGV0IHZhbHVlUGF0aCA9IFwiXCI7XG5cdC8vIGRhdGEgcG9pbnQgYW5ub3RhdGlvbnMgbmVlZCBub3QgaGF2ZSAkVHlwZSBkZWZpbmVkLCBzbyBhZGQgaXQgaWYgbWlzc2luZ1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtKGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLCBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQpKSB7XG5cdFx0aW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LiRUeXBlIHx8IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU7XG5cdH1cblx0c3dpdGNoIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRpZiAodHlwZW9mIGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUucGF0aDtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdGlmIChpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUsXG5cdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGluaXRpYWxEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5UYXJnZXQudmFsdWUucmVwbGFjZShcblx0XHRcdFx0XHRcdFx0L1xcL0AuKi8sXG5cdFx0XHRcdFx0XHRcdGAvJHtpbml0aWFsRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQuVmFsdWU/LnBhdGh9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWVQYXRoID0gaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0LlZhbHVlPy5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZVBhdGggPSAoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlRhcmdldCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPik/LnBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGlmICh2YWx1ZVBhdGggJiYgdmFsdWVQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gZW5oYW5jZURhdGFNb2RlbFBhdGgoaW5pdGlhbERhdGFNb2RlbE9iamVjdFBhdGgsIHZhbHVlUGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY29uc2lkZXJlZCBwcm9wZXJ0eSBpcyBhIG5vbi1pbnNlcnRhYmxlIHByb3BlcnR5XG4gKiBBIGZpcnN0IGNoZWNrIGlzIGRvbmUgb24gdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIHRoZSBjb250ZXh0TG9jYXRpb246XG4gKiAtIElmIHRoZSBhbm5vdGF0aW9uICdub25JbnNlcnRhYmxlUHJvcGVydHknIGlzIGZvdW5kIGFuZCB0aGUgcHJvcGVydHkgaXMgbGlzdGVkLCB0aGVuIHRoZSBwcm9wZXJ0eSBpcyBub24taW5zZXJ0YWJsZSxcbiAqIC0gRWxzZSB0aGUgc2FtZSBjaGVjayBpcyBkb25lIG9uIHRoZSB0YXJnZXQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGluc2VydGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5SW5zZXJ0UmVzdHJpY3Rpb25zID0gKHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBib29sZWFuID0+IHtcblx0Y29uc3Qgbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMgPSBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIChjYXBhYmlsaXRpZXMpID0+IHtcblx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/Lk5vbkluc2VydGFibGVQcm9wZXJ0aWVzO1xuXHR9KTtcblxuXHRyZXR1cm4gbm9uSW5zZXJ0YWJsZVByb3BlcnRpZXMuc29tZSgobm9uSW5zZXJ0YWJsZVByb3BlcnR5KSA9PiB7XG5cdFx0cmV0dXJuIG5vbkluc2VydGFibGVQcm9wZXJ0eT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGJpbmRpbmcgZm9yIHRoZSBkcmFmdCBpbmRpY2F0b3IgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBkcmFmdEluZGljYXRvcktleVxuICogQHJldHVybnMgIFRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcgPSAoZHJhZnRJbmRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdHJldHVybiBkcmFmdEluZGljYXRvcktleVxuXHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRjb25zdGFudChkcmFmdEluZGljYXRvcktleSksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJoaWRlRHJhZnRJbmZvXCIsIFwicGFnZUludGVybmFsXCIpXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcInNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRSdW50aW1lLmlzRHJhZnRJbmRpY2F0b3JWaXNpYmxlXCJcblx0XHRcdFx0KVxuXHRcdCAgKVxuXHRcdDogXCJmYWxzZVwiO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgRGlzcGxheVNoYXBlIGZvciB0aGUgQXZhdGFyIGRlcGVuZGluZyBvbiB0aGUgYW5ub3RhdGlvbiBJc05hdHVyYWxQZXJzb24uXG4gKlxuICogSWYgdGhlIGVudGl0eSB0eXBlIGlzIGFubm90YXRlZCB3aXRoIFwiSXNOYXR1cmFsUGVyc29uXCIsIHRoZW4gYWxsIFN0cmVhbXMgYW5kIEltYWdlVVJsc1xuICogaW4gdGhpcyBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGVyc29uIHRoZXJlZm9yZSBoYXZlIHNoYXBlIGNpcmNsZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGEgcHJvcGVydHkgd2l0aGluIHN1Y2ggYW4gZW50aXR5IGlzIGFubm90YXRlZCB3aXRoIFVJLklzSW1hZ2Ugb3IgVUkuSXNJbWFnZVVSTCwgYm90aFxuICogb2YgdGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFubm90YXRlZCB3aXRoIENvbW1vbi5Jc05hdHVyYWxQZXJzb24uXG4gKlxuICogVGhlIGFubm90YXRpb24gYXQgdGhlIHByb3BlcnR5IGxldmVsIG92ZXJyaWRlcyB0aGUgYW5ub3RhdGlvbiBhdCB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgc2hhcGUgb2YgdGhlIEF2YXRhciBhcyBzdHJpbmcgb3IgYXMgYW4gZXhwcmVzc2lvblxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXJTaGFwZSA9IChkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPVxuXHRcdGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uIHx8XG5cdFx0ZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGNvbnN0IGVudGl0eUFubm90YXRpb25UYXJnZXQgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc05hdHVyYWxQZXJzb247XG5cdGxldCBhdmF0YXJTaGFwZUV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0YXZhdGFyU2hhcGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdCk7XG5cdH0gZWxzZSBpZiAoZW50aXR5QW5ub3RhdGlvblRhcmdldCkge1xuXHRcdGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihlbnRpdHlBbm5vdGF0aW9uVGFyZ2V0KTtcblx0fSBlbHNlIGF2YXRhclNoYXBlRXhwcmVzc2lvbiA9IGZhbHNlO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoYXZhdGFyU2hhcGVFeHByZXNzaW9uLCBBdmF0YXJTaGFwZS5DaXJjbGUsIEF2YXRhclNoYXBlLlNxdWFyZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQ0FBcUMsR0FBRyxTQUFBQSxDQUNwREMsMEJBQW1FLEVBQ25FQyxlQUEyRCxFQUNqQjtJQUMxQyxPQUFPQyxvQkFBb0IsQ0FBQ0YsMEJBQTBCLEVBQUUsYUFBYSxFQUFHRyxVQUFnRCxJQUFLO01BQzVILElBQUlDLGFBQXNELEdBQUdELFVBQVU7TUFDdkUsSUFBSUEsVUFBVSxDQUFDRSxTQUFTLEtBQUtDLFNBQVMsRUFBRTtRQUN2QztRQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxvQkFBb0IsQ0FBV1AsZUFBZSxFQUFFRSxVQUFVLENBQUNNLElBQUksQ0FBQztRQUMvRkwsYUFBYSxHQUFHTSxnQkFBZ0IsQ0FBQ0MsNkJBQTZCLENBQUNKLHNCQUFzQixFQUFFSixVQUFVLENBQUM7TUFDbkc7TUFDQSxPQUFPQyxhQUFhO0lBQ3JCLENBQUMsQ0FBQztFQUNILENBQUM7RUFBQ1EsUUFBQSxDQUFBYixxQ0FBQSxHQUFBQSxxQ0FBQTtFQUVLLE1BQU1jLHNCQUFzQixHQUFHLFNBQUFBLENBQ3JDYiwwQkFBNkQsRUFDN0RDLGVBQTZDLEVBQ1Q7SUFDcEMsT0FBT0Msb0JBQW9CLENBQUNGLDBCQUEwQixFQUFFLGFBQWEsRUFBR0csVUFBMEMsSUFBSztNQUN0SCxJQUFJQyxhQUFnRCxHQUFHRCxVQUFVO01BQ2pFLElBQUlBLFVBQVUsQ0FBQ0UsU0FBUyxLQUFLQyxTQUFTLEVBQUU7UUFDdkM7UUFD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
|
|
@@ -184,7 +184,8 @@ export const getTextBinding = function (
|
|
|
184
184
|
undefined,
|
|
185
185
|
{},
|
|
186
186
|
true,
|
|
187
|
-
fieldFormatOptions.showOnlyUnitDecimals
|
|
187
|
+
fieldFormatOptions.showOnlyUnitDecimals,
|
|
188
|
+
fieldFormatOptions.preserveDecimalsForCurrency
|
|
188
189
|
);
|
|
189
190
|
if (fieldFormatOptions?.measureDisplayMode === "Hidden" && isComplexTypeExpression(oTargetBinding)) {
|
|
190
191
|
// TODO: Refactor once types are less generic here
|
|
@@ -288,7 +289,8 @@ export const getValueBinding = function (
|
|
|
288
289
|
true,
|
|
289
290
|
keepUnit ? undefined : targetFormatOptions,
|
|
290
291
|
forDisplay,
|
|
291
|
-
fieldFormatOptions.showOnlyUnitDecimals
|
|
292
|
+
fieldFormatOptions.showOnlyUnitDecimals,
|
|
293
|
+
fieldFormatOptions.preserveDecimalsForCurrency
|
|
292
294
|
);
|
|
293
295
|
} else if (targetObject?.annotations?.Common?.IsTimezone) {
|
|
294
296
|
oBindingExpression = UIFormatters.getBindingForTimezone(
|