@sapui5/sap.fe.macros 1.133.0 → 1.134.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/CommonHelper.js +7 -6
- package/src/sap/fe/macros/CommonHelper.ts +20 -7
- package/src/sap/fe/macros/FooterContent.js +21 -7
- package/src/sap/fe/macros/FooterContent.tsx +29 -2
- package/src/sap/fe/macros/MacroAPI.js +3 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -1
- package/src/sap/fe/macros/MicroChartRuntime.js +231 -65
- package/src/sap/fe/macros/MicroChartRuntime.tsx +357 -81
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +9 -3
- package/src/sap/fe/macros/Share.js +797 -0
- package/src/sap/fe/macros/{share/Share.block.tsx → Share.tsx} +71 -81
- package/src/sap/fe/macros/chart/Chart.js +3 -2
- package/src/sap/fe/macros/chart/Chart.tsx +2 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +10 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +11 -0
- package/src/sap/fe/macros/controls/ConditionalWrapper.js +1 -1
- package/src/sap/fe/macros/controls/ConditionalWrapper.ts +2 -1
- package/src/sap/fe/macros/controls/CustomFilterFieldContentWrapper.js +70 -9
- package/src/sap/fe/macros/controls/CustomFilterFieldContentWrapper.ts +59 -7
- package/src/sap/fe/macros/controls/TextLink.js +9 -3
- package/src/sap/fe/macros/controls/TextLink.tsx +10 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +821 -0
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +983 -0
- package/src/sap/fe/macros/coreUI/ParameterDialog.js +7 -10
- package/src/sap/fe/macros/coreUI/ParameterDialog.tsx +5 -9
- package/src/sap/fe/macros/coreUI/factory.js +5 -2
- package/src/sap/fe/macros/coreUI/factory.ts +11 -1
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +8 -3
- package/src/sap/fe/macros/field/FieldAPI.js +17 -2
- package/src/sap/fe/macros/field/FieldAPI.ts +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.js +10 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +3 -0
- package/src/sap/fe/macros/field/FieldHelper.js +4 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +17 -3
- package/src/sap/fe/macros/field/FieldRuntime.js +2 -80
- package/src/sap/fe/macros/field/FieldRuntime.ts +1 -124
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +69 -4
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +108 -6
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +14 -4
- package/src/sap/fe/macros/filter/FilterFieldTemplating.js +4 -4
- package/src/sap/fe/macros/filter/FilterFieldTemplating.ts +4 -4
- package/src/sap/fe/macros/filter/FilterOperatorUtils.js +3 -3
- package/src/sap/fe/macros/filter/FilterOperatorUtils.ts +2 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +2 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +1 -1
- package/src/sap/fe/macros/filterBar/DraftEditState.fragment.xml +14 -16
- package/src/sap/fe/macros/filterBar/DraftEditState.js +3 -3
- package/src/sap/fe/macros/filterBar/DraftEditState.ts +3 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +13 -19
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +20 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +353 -120
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +394 -115
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +6 -5
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +9 -4
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +6 -2
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +4 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +159 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +187 -0
- package/src/sap/fe/macros/form/Form.block.js +3 -1
- package/src/sap/fe/macros/form/Form.block.ts +2 -0
- package/src/sap/fe/macros/form/Form.designtime.js +8 -2
- package/src/sap/fe/macros/form/Form.designtime.ts +7 -0
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +1 -1
- package/src/sap/fe/macros/form/FormContainer.designtime.js +8 -2
- package/src/sap/fe/macros/form/FormContainer.designtime.ts +7 -0
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +6 -6
- package/src/sap/fe/macros/form/FormElement.designtime.js +17 -0
- package/src/sap/fe/macros/form/FormElement.designtime.ts +9 -0
- package/src/sap/fe/macros/header/HeaderTitleDescription.js +3 -3
- package/src/sap/fe/macros/header/HeaderTitleDescription.tsx +2 -2
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +86 -16
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +95 -31
- package/src/sap/fe/macros/insights/CommonInsightsHelper.js +6 -2
- package/src/sap/fe/macros/insights/CommonInsightsHelper.ts +9 -3
- package/src/sap/fe/macros/insights/TableInsightsHelper.js +7 -6
- package/src/sap/fe/macros/insights/TableInsightsHelper.ts +12 -10
- package/src/sap/fe/macros/internal/DataPoint.js +6 -31
- package/src/sap/fe/macros/internal/DataPoint.tsx +5 -36
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +12 -25
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +5 -3
- package/src/sap/fe/macros/internal/InternalField.block.js +5 -1
- package/src/sap/fe/macros/internal/InternalField.block.ts +6 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +25 -41
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +35 -52
- package/src/sap/fe/macros/internal/field/EditStyle.js +6 -3
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +6 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +15 -3
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +4 -4
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +8 -3
- package/src/sap/fe/macros/internal/helpers/DefaultActionHandler.js +10 -9
- package/src/sap/fe/macros/internal/helpers/DefaultActionHandler.ts +12 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.tsx +4 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +1 -10
- package/src/sap/fe/macros/library.js +18 -3
- package/src/sap/fe/macros/library.ts +20 -0
- package/src/sap/fe/macros/macroLibrary.js +3 -3
- package/src/sap/fe/macros/macroLibrary.ts +0 -2
- package/src/sap/fe/macros/messagebundle.properties +4 -1
- package/src/sap/fe/macros/messagebundle_ar.properties +6 -0
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ca.properties +6 -0
- package/src/sap/fe/macros/messagebundle_cnr.properties +6 -0
- package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +6 -0
- package/src/sap/fe/macros/messagebundle_da.properties +6 -0
- package/src/sap/fe/macros/messagebundle_de.properties +6 -0
- package/src/sap/fe/macros/messagebundle_el.properties +6 -0
- package/src/sap/fe/macros/messagebundle_en.properties +6 -0
- package/src/sap/fe/macros/messagebundle_en_GB.properties +6 -0
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +6 -0
- package/src/sap/fe/macros/messagebundle_es.properties +6 -0
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -0
- package/src/sap/fe/macros/messagebundle_et.properties +6 -0
- package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -0
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +6 -0
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -0
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -0
- package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
- package/src/sap/fe/macros/messagebundle_id.properties +6 -0
- package/src/sap/fe/macros/messagebundle_it.properties +7 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ja.properties +6 -0
- package/src/sap/fe/macros/messagebundle_kk.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ko.properties +7 -1
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -0
- package/src/sap/fe/macros/messagebundle_lv.properties +6 -0
- package/src/sap/fe/macros/messagebundle_mk.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
- package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
- package/src/sap/fe/macros/messagebundle_no.properties +6 -0
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -0
- package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ro.properties +6 -0
- package/src/sap/fe/macros/messagebundle_ru.properties +6 -0
- package/src/sap/fe/macros/messagebundle_sh.properties +6 -0
- package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
- package/src/sap/fe/macros/messagebundle_sl.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sr.properties +6 -0
- package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
- package/src/sap/fe/macros/messagebundle_th.properties +6 -0
- package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
- package/src/sap/fe/macros/messagebundle_uk.properties +6 -0
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -0
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +6 -0
- package/src/sap/fe/macros/messages/MessageButton.js +90 -32
- package/src/sap/fe/macros/messages/MessageButton.ts +104 -33
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +15 -24
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +0 -7
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +174 -30
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +337 -56
- package/src/sap/fe/macros/microchart/fragments/AreaMicroChart.fragment.xml +1 -1
- package/src/sap/fe/macros/quickView/QuickView.js +7 -18
- package/src/sap/fe/macros/quickView/QuickView.tsx +2 -9
- package/src/sap/fe/macros/quickView/QuickViewDelegate.js +2 -2
- package/src/sap/fe/macros/quickView/QuickViewDelegate.ts +1 -1
- package/src/sap/fe/macros/quickView/fragments/QuickViewFormField.fragment.xml +1 -1
- package/src/sap/fe/macros/share/MsTeamsOptions.js +41 -0
- package/src/sap/fe/macros/share/MsTeamsOptions.tsx +17 -0
- package/src/sap/fe/macros/share/ShareOptions.js +71 -0
- package/src/sap/fe/macros/share/ShareOptions.tsx +34 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +74 -86
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +104 -143
- package/src/sap/fe/macros/table/MdcTableTemplate.js +124 -159
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +166 -317
- package/src/sap/fe/macros/table/Table.block.js +20 -5
- package/src/sap/fe/macros/table/Table.block.tsx +18 -3
- package/src/sap/fe/macros/table/TableAPI.js +157 -687
- package/src/sap/fe/macros/table/TableAPI.ts +81 -660
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +10 -4
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +28 -5
- package/src/sap/fe/macros/table/TableRuntime.js +9 -4
- package/src/sap/fe/macros/table/TableRuntime.ts +9 -3
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +82 -25
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +104 -35
- package/src/sap/fe/macros/table/designtime/Table.designtime.helper.js +30 -11
- package/src/sap/fe/macros/table/designtime/Table.designtime.helper.ts +31 -9
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +6 -2
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +5 -0
- package/src/sap/fe/macros/table/massEdit/MassEdit.js +37 -17
- package/src/sap/fe/macros/table/massEdit/MassEdit.tsx +31 -22
- package/src/sap/fe/macros/table/massEdit/library.js +1 -1
- package/src/sap/fe/macros/table/massEdit/library.ts +6 -1
- package/src/sap/fe/macros/table/mixin/ColumnManagement.js +395 -0
- package/src/sap/fe/macros/table/mixin/ColumnManagement.ts +419 -0
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +2 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +1 -1
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +3 -3
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +1 -2
- package/src/sap/fe/macros/table/mixin/TableExport.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableExport.ts +2 -3
- package/src/sap/fe/macros/table/mixin/TableOptimisticBatch.js +2 -2
- package/src/sap/fe/macros/table/mixin/TableOptimisticBatch.ts +1 -1
- package/src/sap/fe/macros/table/mixin/TableSharing.js +222 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +284 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -5
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +4 -4
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +1 -9
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +0 -8
- package/src/sap/fe/macros/share/Share.block.js +0 -813
package/package.json
CHANGED
|
@@ -526,24 +526,25 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
526
526
|
* @returns MeasureAttribute index.
|
|
527
527
|
* @private
|
|
528
528
|
*/
|
|
529
|
-
getMeasureAttributeIndex: function (iMeasure, oChartAnnotations) {
|
|
529
|
+
getMeasureAttributeIndex: function (iMeasure, oChartAnnotations, isMicroChart) {
|
|
530
530
|
let aMeasures, sMeasurePropertyPath;
|
|
531
531
|
if (oChartAnnotations?.Measures?.length && oChartAnnotations?.Measures?.length > 0) {
|
|
532
532
|
aMeasures = oChartAnnotations.Measures;
|
|
533
|
-
sMeasurePropertyPath = aMeasures[iMeasure].$PropertyPath;
|
|
533
|
+
sMeasurePropertyPath = isMicroChart ? aMeasures[iMeasure].value : aMeasures[iMeasure].$PropertyPath;
|
|
534
534
|
} else if (oChartAnnotations?.DynamicMeasures?.length && oChartAnnotations?.DynamicMeasures?.length > 0) {
|
|
535
535
|
aMeasures = oChartAnnotations.DynamicMeasures;
|
|
536
|
-
sMeasurePropertyPath = aMeasures[iMeasure].$AnnotationPath;
|
|
536
|
+
sMeasurePropertyPath = aMeasures?.[iMeasure].$AnnotationPath;
|
|
537
537
|
}
|
|
538
538
|
let bMeasureAttributeExists;
|
|
539
539
|
const aMeasureAttributes = oChartAnnotations.MeasureAttributes;
|
|
540
540
|
let iMeasureAttribute = -1;
|
|
541
541
|
const fnCheckMeasure = function (sMeasurePath, oMeasureAttribute, index) {
|
|
542
542
|
if (oMeasureAttribute) {
|
|
543
|
-
|
|
543
|
+
const path = isMicroChart ? oMeasureAttribute.Measure?.value : oMeasureAttribute.Measure?.$PropertyPath;
|
|
544
|
+
if (oMeasureAttribute.Measure && path === sMeasurePath) {
|
|
544
545
|
iMeasureAttribute = index;
|
|
545
546
|
return true;
|
|
546
|
-
} else if (oMeasureAttribute.DynamicMeasure && oMeasureAttribute
|
|
547
|
+
} else if (oMeasureAttribute.DynamicMeasure && oMeasureAttribute?.DynamicMeasure?.$AnnotationPath === sMeasurePath) {
|
|
547
548
|
iMeasureAttribute = index;
|
|
548
549
|
return true;
|
|
549
550
|
}
|
|
@@ -828,4 +829,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
828
829
|
CommonHelper.getSortConditions.requiresIContext = true;
|
|
829
830
|
return CommonHelper;
|
|
830
831
|
}, false);
|
|
831
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiVmFsdWVDb2xvciIsIm1MaWJyYXJ5IiwiQ29tbW9uSGVscGVyIiwiZ2V0UGF0aFRvS2V5Iiwib0N0eCIsImdldE9iamVjdCIsImdldFBhcmFtZXRlckVkaXRNb2RlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiZmllbGRDb250cm9sIiwiaW1tdXRhYmxlIiwiY29tcHV0ZWQiLCJzRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCIkUGF0aCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsSWQiLCJjb252ZXJ0VHlwZXMiLCJnZXRJZCIsImlzRGVza3RvcCIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsIm5hdkNvbGxlY3Rpb24iLCJzUGF0aCIsIm1vZGVsIiwibWV0YU1vZGVsIiwiaXNBIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJyZXBsYWNlIiwiJFR5cGUiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwiZ290b0FjdGlvblBhcmFtZXRlciIsIm9Db250ZXh0Iiwic1Byb3BlcnR5TmFtZSIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVyUGF0aCIsImdldEVudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwia2V5IiwiZ2V0QWN0aW9uUGF0aCIsIm9BY3Rpb24iLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwiYXJndW1lbnRzIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJwYXRoIiwiaXNDbGlja2FibGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImNvbnN0YW50IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsIm5vdEVxdWFsIiwib2JqZWN0VG9TdHJpbmciLCJvUGFyYW1zIiwiaU51bWJlck9mS2V5cyIsIk9iamVjdCIsImtleXMiLCJzS2V5IiwicmVtb3ZlRXNjYXBlQ2hhcmFjdGVycyIsInNFeHByZXNzaW9uIiwic3RyaW5naWZ5T2JqZWN0Iiwic1N0cmluZ2lmaWVkIiwib09iamVjdCIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsIm9VSTVPYmplY3QiLCJ1aTVvYmplY3QiLCJhc3NpZ24iLCJzdHJpbmdpZnkiLCJzVHlwZSIsIkxvZyIsImVycm9yIiwiRXJyb3IiLCJzdHJpbmdpZnlDdXN0b21EYXRhIiwidkRhdGEiLCJDb250ZXh0IiwicGFyc2VDdXN0b21EYXRhIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDb250ZXh0UGF0aCIsIm9WYWx1ZSIsImdldFNvcnRDb25kaXRpb25zIiwib1ByZXNlbnRhdGlvblZhcmlhbnQiLCJzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIlNvcnRPcmRlciIsImFTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzRW50aXR5UGF0aCIsImZvckVhY2giLCJvQ29uZGl0aW9uIiwib1NvcnRQcm9wZXJ0eSIsIm9Tb3J0ZXIiLCJEeW5hbWljUHJvcGVydHkiLCIkQW5ub3RhdGlvblBhdGgiLCJOYW1lIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicHVzaCIsImFubm90YXRpb25QYXRoIiwiY3JlYXRlUHJlc2VudGF0aW9uUGF0aENvbnRleHQiLCJvUHJlc2VudGF0aW9uQ29udGV4dCIsImFQYXRocyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwic0NvbnRleHQiLCJiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwiZm9yQ29udGV4dE1lbnUiLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImxhYmVsIiwiTGFiZWwiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0RW50aXR5U2V0IiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmciLCJzSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJzRGV2aWF0aW9uTG93Iiwic1RvbGVyYW5jZUxvdyIsInNBY2NlcHRhbmNlTG93Iiwic0FjY2VwdGFuY2VIaWdoIiwic1RvbGVyYW5jZUhpZ2giLCJzRGV2aWF0aW9uSGlnaCIsInNDcml0aWNhbGl0eUV4cHJlc3Npb24iLCJOZXV0cmFsIiwiSW5maW5pdHkiLCJHb29kIiwiQ3JpdGljYWwiLCJ3YXJuaW5nIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwiaU1lYXN1cmUiLCJvQ2hhcnRBbm5vdGF0aW9ucyIsImFNZWFzdXJlcyIsInNNZWFzdXJlUHJvcGVydHlQYXRoIiwiTWVhc3VyZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyIsImFNZWFzdXJlQXR0cmlidXRlcyIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiaU1lYXN1cmVBdHRyaWJ1dGUiLCJmbkNoZWNrTWVhc3VyZSIsInNNZWFzdXJlUGF0aCIsIm9NZWFzdXJlQXR0cmlidXRlIiwiaW5kZXgiLCJNZWFzdXJlIiwiRHluYW1pY01lYXN1cmUiLCJzb21lIiwiYmluZCIsImdldE1lYXN1cmVBdHRyaWJ1dGUiLCJzQ2hhcnRBbm5vdGF0aW9uUGF0aCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwic01lYXN1cmVBdHRyaWJ1dGVQYXRoIiwiRGF0YVBvaW50IiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmUiLCJzdWJzdHJpbmciLCJpc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQiLCJvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0Iiwib1RhYmxlTWV0YWRhdGEiLCJwYXJlbnRFbnRpdHlTZXQiLCJzUGFyZW50RW50aXR5U2V0UGF0aCIsIm9EcmFmdFJvb3QiLCJvRHJhZnROb2RlIiwiZ2V0RGF0YUZyb21UZW1wbGF0ZSIsImRhdGFFbGVtZW50Iiwic3BsaXRQYXRoIiwiZGF0YUtleSIsImNvbm5lY3RlZERhdGFQYXRoIiwiY29ubmVjdGVkT2JqZWN0IiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsInNwbGl0VGVtcCIsInRlbXBBcnJheSIsInRyaW0iLCJEYXRhIiwibm90TGFzdEluZGV4IiwiZWxlbWVudCIsImlzTGFzdEluZGV4IiwidGVtcGxhdGVJbmZvIiwibGFzdEluZGV4IiwiZ2V0RGVsaW1pdGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0UGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJJbmZvIiwiZ2V0UGFyYW1ldGVySW5mbyIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJvVGhpcyIsImFQYXJhbXMiLCJyZWYiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImlkIiwiaW50ZXJuYWxNb2RlbFBhdGgiLCJvQWRkaXRpb25hbFBhcmFtcyIsImNvbnRleHRzIiwiZm4iLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbiIsImRhdGFGaWVsZEFubm90YXRpb25zIiwiaGlkZGVuIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJzRW50aXR5U2V0UGF0aCIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsInNldHRpbmdzIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsImFFcXVhbHNPcHMiLCJhU2luZ2xlUmFuZ2VPcHMiLCJhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzIiwiYU11bHRpUmFuZ2VPcHMiLCJhU2VhcmNoRXhwcmVzc2lvbk9wcyIsImFCYXNpY1NlbWFudGljRGF0ZU9wcyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldEJhc2ljU2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsIkRlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYURlZmF1bHRPcGVyYXRvcnMiLCJzdXBwb3J0ZWRPcGVyYXRvcnMiLCJleHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsIkV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwicmVzdHJpY3Rpb25zIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0FsbG93ZWRFeHByZXNzaW9uIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsInNpbmdsZVZhbHVlRGF0ZU9wcyIsImdldFNpbmdsZVZhbHVlRGF0ZU9wZXJhdGlvbnMiLCJhU2luZ2xlVmFsdWVPcHMiLCJtdWx0aVZhbHVlT3BlcmF0b3JzIiwic09wZXJhdG9ycyIsImNvbmNhdCIsImdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eSIsInByb3BlcnR5VHlwZSIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHRQcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBmbiwgaWZFbHNlLCBub3RFcXVhbCwgcGF0aEluTW9kZWwsIHJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlsIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9GaWx0ZXJPcGVyYXRvclV0aWxcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogc3RyaW5nW10sIGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0cmV0dXJuIGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5jbHVkZXMoc0VsZW1lbnQpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVNYXAuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBDb250ZXh0KTogb2JqZWN0IHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUgfCBzdHJpbmcgPSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSW5hcHBsaWNhYmxlXCIgfHxcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkgK1xuXHRcdFx0XHRcdFwiJykgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldE1ldGFNb2RlbElkOiBmdW5jdGlvbiAodGFyZ2V0OiBDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnZlcnRUeXBlcyhvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLmdldElkKCk7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgPT09IHRydWU7XG5cdH0sXG5cdGdldFRhcmdldENvbGxlY3Rpb25QYXRoOiBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCwgbmF2Q29sbGVjdGlvbj86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0KGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHQoY29udGV4dC5nZXRPYmplY3QoXCIkQ29udGFpbnNUYXJnZXRcIikgYXMgdW5rbm93biBhcyBib29sZWFuKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5pc0E8T0RhdGFNZXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpID8gbW9kZWwgOiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRzUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuICEhc1BhcnQgJiYgc1BhcnQgIT0gXCIkVHlwZVwiO1xuXHRcdH0pOyAvL2ZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBhbmQgcGFydHMgcmVmZXJyaW5nIHRvICckVHlwZSdcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBgLyR7YVBhcnRzWzBdfWA7XG5cdFx0aWYgKGFQYXJ0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRpb25Db2xsZWN0aW9uID0gbmF2Q29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gYVBhcnRzLnNsaWNlKDEpLmpvaW4oXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIDogbmF2Q29sbGVjdGlvbjtcblx0XHRyZXR1cm4gYCR7ZW50aXR5U2V0fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke25hdmlnYXRpb25Db2xsZWN0aW9ufWA7IC8vIHVzZWQgaW4gZ290b1RhcmdldEVudGl0eVNldCBtZXRob2QgaW4gdGhlIHNhbWUgZmlsZVxuXHR9LFxuXG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBmdW5jdGlvbiAoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRvRGF0YUZpZWxkPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz5cblx0KTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBvTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHQvLyBMb2FjYXRpb25QYXRoIHdvdWxkIGJlIHRoZSBwcmVmaXggb2Ygc1Byb3BlcnR5UGF0aCwgZXhhbXBsZTogc1Byb3BlcnR5UGF0aCA9ICcvQ3VzdG9tZXIvU2V0L05hbWUnIC0+IHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9ICcvQ3VzdG9tZXIvU2V0J1xuXHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9Nb2RlbCwgc1Byb3BlcnR5UGF0aCksXG5cdFx0XHRzUHJvcGVydHkgPSBzUHJvcGVydHlQYXRoLnJlcGxhY2UoYCR7c1Byb3BlcnR5TG9jYXRpb25QYXRofS9gLCBcIlwiKTtcblxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQgJiZcblx0XHRcdChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9Nb2RlbCwgc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBzUHJvcGVydHkpO1xuXHR9LFxuXG5cdGdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoOiBmdW5jdGlvbiAob01vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1Byb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgaUxlbmd0aDtcblx0XHRsZXQgc0NvbGxlY3Rpb25QYXRoID0gc1Byb3BlcnR5UGF0aC5zbGljZSgwLCBzUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0aWYgKG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbGxlY3Rpb25QYXRofS8ka2luZGApID09PSBcIkVudGl0eUNvbnRhaW5lclwiKSB7XG5cdFx0XHRpTGVuZ3RoID0gc0NvbGxlY3Rpb25QYXRoLmxlbmd0aCArIDE7XG5cdFx0XHRzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKGlMZW5ndGgsIHNQcm9wZXJ0eVBhdGguaW5kZXhPZihcIi9cIiwgaUxlbmd0aCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbGxlY3Rpb25QYXRoO1xuXHR9LFxuXHRnb3RvQWN0aW9uUGFyYW1ldGVyOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0c1Byb3BlcnR5TmFtZSA9IG9Db250ZXh0LmdldE9iamVjdChgJHtzUGF0aH0vJE5hbWVgKTtcblxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJQYXRoKHNQYXRoLCBzUHJvcGVydHlOYW1lKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGVudGl0eSBzZXQgbmFtZSBmcm9tIHRoZSBlbnRpdHkgdHlwZSBuYW1lLlxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBPRGF0YSB2NCBtZXRhbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHNFbnRpdHlUeXBlIEVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbVxuXHQgKiBAcmV0dXJucyBUaGUgRW50aXR5U2V0IG9mIHRoZSBib3VuZCBhY3Rpb25cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEVudGl0eVNldE5hbWU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBrZXk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIGJvdW5kIGFjdGlvbnMgaWYgdXNlZCB3aXRoIGJSZXR1cm5Pbmx5UGF0aCBhcyB0cnVlLFxuXHQgKiBlbHNlIHJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGhhcyAzIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uLiBUaGV5IGFyZSB0aGUgZW50aXR5IHNldCBuYW1lLFxuXHQgKiB0aGUgJFBhdGggdmFsdWUgb2YgdGhlIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uIGFuZCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZS4gSWZcblx0ICogYkNoZWNrU3RhdGljVmFsdWUgaXMgdHJ1ZSwgcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLCBpZiBwcmVzZW50LlxuXHQgKiBlLmcuIGZvciBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cblx0ICogb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LCB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGJSZXR1cm5Pbmx5UGF0aCBJZiBmYWxzZSwgYWRkaXRpb25hbCBpbmZvIGlzIHJldHVybmVkIGFsb25nIHdpdGggbWV0YW1vZGVsIHBhdGggdG8gdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGJvdW5kIGFjdGlvbiBvZiB0aGUgZm9ybSBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBAcGFyYW0gYkNoZWNrU3RhdGljVmFsdWUgSWYgdHJ1ZSwgdGhlIHN0YXRpYyB2YWx1ZSBvZiBPcGVyYXRpb25BdmFpbGFibGUgaXMgcmV0dXJuZWQsIGlmIHByZXNlbnRcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyBvciBvYmplY3QgYXMgc3BlY2lmaWVkIGJ5IGJSZXR1cm5Pbmx5UGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uUGF0aDogZnVuY3Rpb24gKFxuXHRcdG9BY3Rpb246IENvbnRleHQsXG5cdFx0YlJldHVybk9ubHlQYXRoOiBib29sZWFuLFxuXHRcdHNBY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRcdGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhblxuXHQpOlxuXHRcdHwgc3RyaW5nXG5cdFx0fCB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc3RyaW5nO1xuXHRcdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZztcblx0XHQgIH0ge1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXG5cdFx0c0FjdGlvbk5hbWUgPSAhc0FjdGlvbk5hbWUgPyBvQWN0aW9uLmdldE9iamVjdChvQWN0aW9uLmdldFBhdGgoKSkgOiBzQWN0aW9uTmFtZTtcblxuXHRcdGlmIChzQWN0aW9uTmFtZSAmJiBzQWN0aW9uTmFtZS5pbmNsdWRlcyhcIihcIikpIHtcblx0XHRcdC8vIGFjdGlvbiBib3VuZCB0byBhbm90aGVyIGVudGl0eSB0eXBlXG5cdFx0XHRzQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiKFwiKVswXTtcblx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkpIHtcblx0XHRcdC8vIFRPRE86IHRoaXMgbG9naWMgc291bmRzIHdyb25nLCB0byBiZSBjb3JyZWN0ZWRcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkuJFR5cGU7XG5cdFx0XHRjb25zdCBzRW50aXR5TmFtZSA9IHRoaXMuZ2V0RW50aXR5U2V0TmFtZShvQWN0aW9uLmdldE1vZGVsKCksIHNFbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQ29udGV4dFBhdGg7XG5cdFx0fVxuXG5cdFx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0XHR9XG5cdFx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZS8kUGF0aGApLFxuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB3aXRob3V0IHRoZSBlbnRpdHkgdHlwZSAocG90ZW50aWFsbHkgZmlyc3QpIGFuZCBwcm9wZXJ0eSAobGFzdCkgcGFydCAob3B0aW9uYWwpLlxuXHQgKiBUaGUgcmVzdWx0IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgYSBzaW1wbGUgZGlyZWN0IHByb3BlcnR5LlxuXHQgKlxuXHQgKiBJZiBhbmQgb25seSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoICgvKSwgaXQgaXMgY29uc2lkZXJlZCB0aGF0IHRoZSBlbnRpdHkgdHlwZVxuXHQgKiBpcyBwYXJ0IG9mIHRoZSBwYXRoIGFuZCB3aWxsIGJlIHN0cmlwcGVkIGF3YXkuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBiS2VlcFByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdGdldE5hdmlnYXRpb25QYXRoOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBiS2VlcFByb3BlcnR5PzogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgYlN0YXJ0c1dpdGhFbnRpdHlUeXBlID0gc1Byb3BlcnR5UGF0aC5zdGFydHNXaXRoKFwiL1wiKTtcblx0XHRjb25zdCBhUGFydHMgPSBzUHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuICEhcGFydDtcblx0XHR9KTtcblx0XHRpZiAoYlN0YXJ0c1dpdGhFbnRpdHlUeXBlKSB7XG5cdFx0XHRhUGFydHMuc2hpZnQoKTtcblx0XHR9XG5cdFx0aWYgKCFiS2VlcFByb3BlcnR5KSB7XG5cdFx0XHRhUGFydHMucG9wKCk7XG5cdFx0fVxuXHRcdHJldHVybiBhUGFydHMuam9pbihcIi9cIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvcnJlY3QgbWV0YW1vZGVsIHBhdGggZm9yIGJvdW5kIGFjdGlvbnMuXG5cdCAqXG5cdCAqIFNpbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdGlvbiB0eXBlLCB0aGlzIHdpbGwgYmUgYXBwbGllZCB0byB1bmJvdW5kIGFjdGlvbnMuXG5cdCAqIEluIHN1Y2ggYSBjYXNlLCBpZiBhbiBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgaXQgaXMgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICpcblx0ICogRXhhbXBsZTogZm9yIHRoZSBib3VuZCBhY3Rpb24gc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb24gb2YgZW50aXR5IHNldCBTb21lRW50aXR5U2V0LFxuXHQgKiB0aGUgc3RyaW5nIFwiL1NvbWVFbnRpdHlTZXQvc29tZU5hbWVTcGFjZS5Tb21lQm91bmRBY3Rpb25cIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gQ29udGV4dCBvYmplY3QgZm9yIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgQ29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEFjdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdldEFjdGlvblBhdGgob0FjdGlvbiwgdHJ1ZSkgYXMgc3RyaW5nO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbWV0YW1vZGVsIHBhdGggY29ycmVjdGx5IGZvciBvdmVybG9hZGVkIGJvdW5kIGFjdGlvbnMuIEZvciB1bmJvdW5kIGFjdGlvbnMsXG5cdCAqIHRoZSBpbmNvcnJlY3QgcGF0aCBpcyByZXR1cm5lZCwgYnV0IGlnbm9yZWQgZHVyaW5nIHRlbXBsYXRpbmcuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbi9AJHVpNS5vdmVybG9hZC8wXCIgaXMgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9uIG92ZXJsb2FkIGFuZCBpbmNvcnJlY3QgcGF0aCBmb3IgdW5ib3VuZCBhY3Rpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkOiBmdW5jdGlvbiAob0FjdGlvbjogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKTtcblx0XHRyZXR1cm4gYCR7c1BhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzLlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcGFyYW0gW2JFc2NhcGVdIFNob3VsZCB0aGUgc3RyaW5nIGJlIGVzY2FwZWQgYmVmb3JlaGFuZFxuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXNcblx0ICovXG5cdGFkZFNpbmdsZVF1b3RlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBiRXNjYXBlPzogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0aWYgKGJFc2NhcGUgJiYgc1ZhbHVlKSB7XG5cdFx0XHRzVmFsdWUgPSB0aGlzLmVzY2FwZVNpbmdsZVF1b3RlcyhzVmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYCcke3NWYWx1ZX0nYDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzLlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFNvbWUgc3RyaW5nIHRoYXQgbmVlZHMgZXNjYXBpbmcgb2Ygc2luZ2xlIHF1b3Rlc1xuXHQgKiBAcmV0dXJucyAtIFN0cmluZyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0ZXNjYXBlU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBzVmFsdWUucmVwbGFjZSgvWyddL2csIFwiXFxcXCdcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHN0cmluZ1xuXHQgKiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgZ2VuZXJhdGVGdW5jdGlvbiBpcyBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBSZW1haW5pbmcgYXJndW1lbnRzIG9mIGdlbmVyYXRlRnVuY3Rpb24gYXJlIGFyZ3VtZW50cyBvZiB0aGUgbmV3bHkgZ2VuZXJhdGVkIGZ1bmN0aW9uIHN0cmluZy5cblx0ICogQHBhcmFtIHNGdW5jTmFtZSBTb21lIHN0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVcblx0ICogQHBhcmFtIGFyZ3MgVGhlIHJlbWFpbmluZyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgLSBGdW5jdGlvbiBzdHJpbmcgZGVwZW5kcyBvbiBhcmd1bWVudHMgcGFzc2VkXG5cdCAqL1xuXHRnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiAoc0Z1bmNOYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhcmFtcyA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGFyYW1zICs9IGFyZ3NbaV07XG5cdFx0XHRpZiAoaSA8IGFyZ3MubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgpYDtcblx0XHRpZiAoc1BhcmFtcykge1xuXHRcdFx0c0Z1bmN0aW9uID0gYCR7c0Z1bmNOYW1lfSgke3NQYXJhbXN9KWA7XG5cdFx0fVxuXHRcdHJldHVybiBzRnVuY3Rpb247XG5cdH0sXG5cdC8qXG5cdCAqIFJldHVybnMgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBmb3IgZGF0YXBvaW50IHRpdGxlL2xpbmtcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gYW5ub3RhdGlvbiBwYXRoIG9mIGRhdGEgcG9pbnQgb3IgTWljcm9jaGFydFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0NsaWNrYWJsZV0gdHJ1ZSBpZiBsaW5rIGlzIHZpc2libGVcblx0ICogQHJldHVybnMge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9ufSB2aXNpYmlsaXR5RXhwIFVzZWQgdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGJpbmRpbmcgZm9yIERhdGFQb2ludHMgdGl0bGUgaW4gdGhlIEhlYWRlci5cblx0ICpcblx0ICovXG5cblx0Z2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzQ2xpY2thYmxlOiBib29sZWFuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29uc3RhbnQoaXNDbGlja2FibGUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0bm90RXF1YWwocGF0aEluTW9kZWwoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3BhdGh9YCwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBvYmplY3QgdG8gc3RyaW5nKGRpZmZlcmVudCBmcm9tIEpTT04uc3RyaW5naWZ5IG9yLnRvU3RyaW5nKS5cblx0ICogQHBhcmFtIG9QYXJhbXMgU29tZSBvYmplY3Rcblx0ICogQHJldHVybnMgLSBPYmplY3Qgc3RyaW5nXG5cdCAqL1xuXHRvYmplY3RUb1N0cmluZzogZnVuY3Rpb24gKG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcblx0XHRsZXQgaU51bWJlck9mS2V5cyA9IE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCxcblx0XHRcdHNQYXJhbXMgPSBcIlwiO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9QYXJhbXMpIHtcblx0XHRcdGxldCBzVmFsdWUgPSBvUGFyYW1zW3NLZXldO1xuXHRcdFx0aWYgKHNWYWx1ZSAmJiB0eXBlb2Ygc1ZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHNWYWx1ZSA9IHRoaXMub2JqZWN0VG9TdHJpbmcoc1ZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblx0XHRcdH1cblx0XHRcdHNQYXJhbXMgKz0gYCR7c0tleX06ICR7c1ZhbHVlfWA7XG5cdFx0XHRpZiAoaU51bWJlck9mS2V5cyA+IDEpIHtcblx0XHRcdFx0LS1pTnVtYmVyT2ZLZXlzO1xuXHRcdFx0XHRzUGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYHsgJHtzUGFyYW1zfX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGVzY2FwZSBjaGFyYWN0ZXJzIChcXCkgZnJvbSBhbiBleHByZXNzaW9uLlxuXHQgKiBAcGFyYW0gc0V4cHJlc3Npb24gQW4gZXhwcmVzc2lvbiB3aXRoIGVzY2FwZSBjaGFyYWN0ZXJzXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gc3RyaW5nIHdpdGhvdXQgZXNjYXBlIGNoYXJhY3RlcnMgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzOiBmdW5jdGlvbiAoc0V4cHJlc3Npb24/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBzRXhwcmVzc2lvbiA/IHNFeHByZXNzaW9uLnJlcGxhY2UoL1xcXFw/XFxcXChbe31dKS9nLCBcIiQxXCIpIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNYWtlcyB1cGRhdGVzIHRvIGEgc3RyaW5naWZpZWQgb2JqZWN0IHNvIHRoYXQgaXQgd29ya3MgcHJvcGVybHkgaW4gYSB0ZW1wbGF0ZSBieSBhZGRpbmcgdWk1T2JqZWN0OnRydWUuXG5cdCAqIEBwYXJhbSBzU3RyaW5naWZpZWRcblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3Rcblx0ICovXG5cdHN0cmluZ2lmeU9iamVjdDogZnVuY3Rpb24gKHNTdHJpbmdpZmllZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXNTdHJpbmdpZmllZCB8fCBzU3RyaW5naWZpZWQgPT09IFwie31cIikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb09iamVjdCA9IEpTT04ucGFyc2Uoc1N0cmluZ2lmaWVkKTtcblx0XHRcdGlmICh0eXBlb2Ygb09iamVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBvVUk1T2JqZWN0ID0ge1xuXHRcdFx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG9VSTVPYmplY3QsIG9PYmplY3QpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob1VJNU9iamVjdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzVHlwZSA9IEFycmF5LmlzQXJyYXkob09iamVjdCkgPyBcIkFycmF5XCIgOiB0eXBlb2Ygb09iamVjdDtcblx0XHRcdFx0TG9nLmVycm9yKGBVbmV4cGVjdGVkIG9iamVjdCB0eXBlIGluIHN0cmluZ2lmeU9iamVjdCAoJHtzVHlwZX0pIC0gb25seSB3b3JrcyB3aXRoIG9iamVjdGApO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdpZnlPYmplY3Qgb25seSB3b3JrcyB3aXRoIG9iamVjdHMhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkYXRhLCB0YWtpbmcgY2FyZSB0aGF0IGl0IGlzIG5vdCB0cmVhdGVkIGFzIGEgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gc3RyaW5naWZ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuXG5cdCAqL1xuXHRzdHJpbmdpZnlDdXN0b21EYXRhOiBmdW5jdGlvbiAodkRhdGE6IG9iamVjdCB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb09iamVjdDogeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0gPSB7XG5cdFx0XHR1aTVvYmplY3Q6IHRydWVcblx0XHR9O1xuXHRcdG9PYmplY3RbXCJjdXN0b21EYXRhXCJdID0gdkRhdGEgaW5zdGFuY2VvZiBDb250ZXh0ID8gdkRhdGEuZ2V0T2JqZWN0KCkgOiB2RGF0YTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob09iamVjdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgZ2l2ZW4gZGF0YSwgcG90ZW50aWFsbHkgdW53cmFwcyB0aGUgZGF0YS5cblx0ICogQHBhcmFtIHZEYXRhIFRoZSBkYXRhIHRvIHBhcnNlXG5cdCAqIEBwYXJhbSB2RGF0YS51aTVvYmplY3Rcblx0ICogQHBhcmFtIHZEYXRhLmN1c3RvbURhdGFcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBwYXJzaW5nXG5cdCAqL1xuXHRwYXJzZUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YT86IHN0cmluZyB8IHsgdWk1b2JqZWN0OiB0cnVlOyBjdXN0b21EYXRhPzogdW5rbm93biB9KTogdW5rbm93biB7XG5cdFx0dkRhdGEgPSB0eXBlb2YgdkRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEYXRhKSA6IHZEYXRhO1xuXHRcdGlmICh2RGF0YSAmJiB2RGF0YS5oYXNPd25Qcm9wZXJ0eShcImN1c3RvbURhdGFcIikpIHtcblx0XHRcdHJldHVybiAodkRhdGEgYXMgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pW1wiY3VzdG9tRGF0YVwiXTtcblx0XHR9XG5cdFx0cmV0dXJuIHZEYXRhO1xuXHR9LFxuXHRnZXRDb250ZXh0UGF0aDogZnVuY3Rpb24gKG9WYWx1ZTogdW5rbm93biwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIHNQYXRoW3NQYXRoLmxlbmd0aCAtIDFdID09PSBcIi9cIiA/IHNQYXRoLnNsaWNlKDAsIC0xKSA6IHNQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyBhIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgIFByZXNlbnRhdGlvbiBWYXJpYW50IHNvcnQgY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIG9Db250ZXh0XG5cdCAqIEBwYXJhbSBvQ29udGV4dC5nZXRQYXRoXG5cdCAqIEBwYXJhbSBvQ29udGV4dC5nZXRNb2RlbFxuXHQgKiBAcGFyYW0gb1ByZXNlbnRhdGlvblZhcmlhbnQgUHJlc2VudGF0aW9uIHZhcmlhbnQgQW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdCAqIEByZXR1cm5zIFN0cmluZ2lmaWVkIEpTT04gb2JqZWN0XG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uczogZnVuY3Rpb24gKFxuXHRcdG9Db250ZXh0OiB7IGdldFBhdGgobnVtOiBudW1iZXIpOiBzdHJpbmc7IGdldE1vZGVsKG51bTogbnVtYmVyKTogT0RhdGFNZXRhTW9kZWwgfSxcblx0XHRvUHJlc2VudGF0aW9uVmFyaWFudDogTWV0YU1vZGVsVHlwZTxQcmVzZW50YXRpb25WYXJpYW50Pixcblx0XHRzUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHN0cmluZ1xuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50ICYmXG5cdFx0XHRDb21tb25IZWxwZXIuX2lzUHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24oc1ByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSAmJlxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBhU29ydENvbmRpdGlvbnM6IHsgc29ydGVyczogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9W10gfSA9IHtcblx0XHRcdFx0c29ydGVyczogW11cblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgwKS5zcGxpdChcIkBcIilbMF07XG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXIuZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbiA9IHt9KSB7XG5cdFx0XHRcdGxldCBvU29ydFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG9Tb3J0ZXI6IHsgbmFtZT86IHN0cmluZzsgZGVzY2VuZGluZz86IGJvb2xlYW4gfSA9IHt9O1xuXHRcdFx0XHRpZiAob0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbnRleHQuZ2V0TW9kZWwoMCkuZ2V0T2JqZWN0KHNFbnRpdHlQYXRoICsgb0NvbmRpdGlvbi5EeW5hbWljUHJvcGVydHkuJEFubm90YXRpb25QYXRoKT8uTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29uZGl0aW9uLlByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRQcm9wZXJ0eSA9IG9Db25kaXRpb24uUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1NvcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0ZXIubmFtZSA9IG9Tb3J0UHJvcGVydHk7XG5cdFx0XHRcdFx0b1NvcnRlci5kZXNjZW5kaW5nID0gISFvQ29uZGl0aW9uLkRlc2NlbmRpbmc7XG5cdFx0XHRcdFx0YVNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaChvU29ydGVyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgZGVmaW5lIHRoZSByaWdodCBwYXRoIHRvIHRoZSBzb3J0IHByb3BlcnR5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhU29ydENvbmRpdGlvbnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogZnVuY3Rpb24gKGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YCkgfHxcblx0XHRcdGFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWApXG5cdFx0KTtcblx0fSxcblx0Y3JlYXRlUHJlc2VudGF0aW9uUGF0aENvbnRleHQ6IGZ1bmN0aW9uIChvUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCk6IENvbnRleHQge1xuXHRcdGNvbnN0IGFQYXRocyA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIkBcIikgfHwgW107XG5cdFx0Y29uc3Qgb01vZGVsID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCAmJiBhUGF0aHNbYVBhdGhzLmxlbmd0aCAtIDFdLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiKSkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvUHJlc2VudGF0aW9uVmFyaWFudFwiKVswXTtcblx0XHRcdHJldHVybiBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c1BhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRQYXRoKCl9QHNhcHVpLm5hbWVgKTtcblx0fSxcblx0Z2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOOiBmdW5jdGlvbiAoXG5cdFx0b0RhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHNDb250ZXh0Pzogc3RyaW5nLFxuXHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2c/OiBib29sZWFuLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIW9EYXRhRmllbGQpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBzdHJpbmc7XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IHN0cmluZztcblx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IHN0cmluZztcblx0XHR9ID0ge1xuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBzQ29udGV4dCA/IHNDb250ZXh0IDogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiXG5cdFx0fTtcblx0XHRpZiAob0RhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiYgIW9EYXRhRmllbGQuSW5saW5lICYmIGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzID0gYFxcJHtpbnRlcm5hbD5pYm4vJHtvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke29EYXRhRmllbGQuQWN0aW9ufS8ke2FwcGxpY2FibGVQcm9wZXJ0eX0vfWA7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzID0gYFxcJHtpbnRlcm5hbD5pYm4vJHtvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke29EYXRhRmllbGQuQWN0aW9ufS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX0vfWA7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubGFiZWwgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZywgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChvRGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSB0aGlzLmFkZFNpbmdsZVF1b3RlcyhKU09OLnN0cmluZ2lmeShvRGF0YUZpZWxkLk1hcHBpbmcpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdGJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPyBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZ1wiIDogXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLFxuXHRcdFx0dGhpcy5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyksXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyksXG5cdFx0XHR0aGlzLm9iamVjdFRvU3RyaW5nKG1OYXZpZ2F0aW9uUGFyYW1ldGVycyksXG5cdFx0XHRcIiR7JHNvdXJjZT4vfVwiXG5cdFx0KTtcblx0fSxcblx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRvIHRoZSBjYWxjdWxhdGlvbiBvZiBjcml0aWNhbGl0eSBpbiBjYXNlIENyaXRpY2FsaXR5Q2FsY3VsYXRpb24gcHJlc2VudCBpbiB0aGUgYW5ub3RhdGlvblxuXHQgKlxuXHQgKiBUaGUgY2FsY3VsYXRpb24gaXMgZG9uZSBieSBjb21wYXJpbmcgYSB2YWx1ZSB0byB0aGUgdGhyZXNob2xkIHZhbHVlcyByZWxldmFudCBmb3IgdGhlIHNwZWNpZmllZCBpbXByb3ZlbWVudCBkaXJlY3Rpb24uXG5cdCAqIEZvciBpbXByb3ZlbWVudCBkaXJlY3Rpb24gVGFyZ2V0LCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyBib3RoIGxvdyBhbmQgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCB3aWxsIGJlXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgbG93ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUgT1IgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSBvciBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNaW5pbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGhpZ2ggdGhyZXNob2xkIHZhbHVlcy4gSXQgaXNcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSBhbmQgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICpcblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBNYXhpbWl6ZSwgdGhlIGNyaXRpY2FsaXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGxvdyB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKlxuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBOZXV0cmFsIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXG5cdCAqIC0gQ3JpdGljYWwgaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlXG5cdCAqXG5cdCAqIFRocmVzaG9sZHMgYXJlIG9wdGlvbmFsLiBGb3IgdW5hc3NpZ25lZCB2YWx1ZXMsIGRlZmF1bHRzIGFyZSBkZXRlcm1pbmVkIGluIHRoaXMgb3JkZXI6XG5cdCAqXG5cdCAqIC0gRm9yIERldmlhdGlvblJhbmdlLCBhbiBvbWl0dGVkIExvd1ZhbHVlIHRyYW5zbGF0ZXMgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgbnVtYmVyICgtSU5GKSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciAoK0lORilcblx0ICogLSBGb3IgVG9sZXJhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIEZvciBBY2NlcHRhbmNlUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsIGFuIG9taXR0ZWQgSGlnaFZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZS5cblx0ICogQHBhcmFtIHNJbXByb3ZlbWVudERpcmVjdGlvbiBJbXByb3ZlbWVudERpcmVjdGlvbiB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgY3JpdGljYWxpdHkgYmluZGluZ1xuXHQgKiBAcGFyYW0gc1ZhbHVlIFZhbHVlIGZyb20gRGF0YXBvaW50IHRvIGJlIG1lYXN1cmVkXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uTG93IEV4cHJlc3Npb25CaW5kaW5nIGZvciBMb3dlciBEZXZpYXRpb24gbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIFRvbGVyYW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VMb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNBY2NlcHRhbmNlSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIEFjY2VwdGFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNUb2xlcmFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzRGV2aWF0aW9uSGlnaCBFeHByZXNzaW9uQmluZGluZyBmb3IgSGlnaGVyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGFzIGV4cHJlc3Npb24gYmluZGluZ1xuXHQgKi9cblx0Z2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmc6IGZ1bmN0aW9uIChcblx0XHRzSW1wcm92ZW1lbnREaXJlY3Rpb246IHN0cmluZyxcblx0XHRzVmFsdWU6IHN0cmluZyxcblx0XHRzRGV2aWF0aW9uTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUxvdzogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNBY2NlcHRhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VIaWdoOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c1RvbGVyYW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzRGV2aWF0aW9uSGlnaDogc3RyaW5nIHwgbnVtYmVyXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNDcml0aWNhbGl0eUV4cHJlc3Npb246IHR5cGVvZiBWYWx1ZUNvbG9yIHwgc3RyaW5nID0gVmFsdWVDb2xvci5OZXV0cmFsOyAvLyBEZWZhdWx0IENyaXRpY2FsaXR5IFN0YXRlXG5cblx0XHRzVmFsdWUgPSBgJSR7c1ZhbHVlfWA7XG5cblx0XHQvLyBTZXR0aW5nIFVuYXNzaWduZWQgVmFsdWVzXG5cdFx0c0RldmlhdGlvbkxvdyA9IHNEZXZpYXRpb25Mb3cgfHwgLUluZmluaXR5O1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93IHx8IHNEZXZpYXRpb25Mb3c7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyB8fCBzVG9sZXJhbmNlTG93O1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggfHwgSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCB8fCBzRGV2aWF0aW9uSGlnaDtcblx0XHRzQWNjZXB0YW5jZUhpZ2ggPSBzQWNjZXB0YW5jZUhpZ2ggfHwgc1RvbGVyYW5jZUhpZ2g7XG5cblx0XHQvLyBEZWFsaW5nIHdpdGggRGVjaW1hbCBhbmQgUGF0aCBiYXNlZCBiaW5nZGluZ3Ncblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyAmJiAoK3NEZXZpYXRpb25Mb3cgPyArc0RldmlhdGlvbkxvdyA6IGAlJHtzRGV2aWF0aW9uTG93fWApO1xuXHRcdHNUb2xlcmFuY2VMb3cgPSBzVG9sZXJhbmNlTG93ICYmICgrc1RvbGVyYW5jZUxvdyA/ICtzVG9sZXJhbmNlTG93IDogYCUke3NUb2xlcmFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VMb3cgPSBzQWNjZXB0YW5jZUxvdyAmJiAoK3NBY2NlcHRhbmNlTG93ID8gK3NBY2NlcHRhbmNlTG93IDogYCUke3NBY2NlcHRhbmNlTG93fWApO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCAmJiAoK3NBY2NlcHRhbmNlSGlnaCA/ICtzQWNjZXB0YW5jZUhpZ2ggOiBgJSR7c0FjY2VwdGFuY2VIaWdofWApO1xuXHRcdHNUb2xlcmFuY2VIaWdoID0gc1RvbGVyYW5jZUhpZ2ggJiYgKCtzVG9sZXJhbmNlSGlnaCA/ICtzVG9sZXJhbmNlSGlnaCA6IGAlJHtzVG9sZXJhbmNlSGlnaH1gKTtcblx0XHRzRGV2aWF0aW9uSGlnaCA9IHNEZXZpYXRpb25IaWdoICYmICgrc0RldmlhdGlvbkhpZ2ggPyArc0RldmlhdGlvbkhpZ2ggOiBgJSR7c0RldmlhdGlvbkhpZ2h9YCk7XG5cblx0XHQvLyBDcmVhdGluZyBydW50aW1lIGV4cHJlc3Npb24gYmluZGluZyBmcm9tIGNyaXRpY2FsaXR5IGNhbGN1bGF0aW9uIGZvciBDcml0aWNhbGl0eSBTdGF0ZVxuXHRcdGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNaW5pbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Hb29kICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIGlmIChzSW1wcm92ZW1lbnREaXJlY3Rpb24uaW5jbHVkZXMoXCJNYXhpbWl6ZVwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIihcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIlRhcmdldFwiKSkge1xuXHRcdFx0c0NyaXRpY2FsaXR5RXhwcmVzc2lvbiA9XG5cdFx0XHRcdFwiez0gKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlTG93ICtcblx0XHRcdFx0XCIpIHx8IChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID4gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiAmJiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5OZXV0cmFsICtcblx0XHRcdFx0XCInIDogXCIgK1xuXHRcdFx0XHRcIigoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDwgXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIpKSB8fCAoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VIaWdoICtcblx0XHRcdFx0XCIpICYmIFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25IaWdoICtcblx0XHRcdFx0XCIpKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkNyaXRpY2FsICtcblx0XHRcdFx0XCInIDogJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5FcnJvciArXG5cdFx0XHRcdFwiJyB9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2FzZSBub3Qgc3VwcG9ydGVkLCByZXR1cm5pbmcgdGhlIGRlZmF1bHQgVmFsdWUgTmV1dHJhbFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjtcblx0fSxcblx0LyoqXG5cdCAqIFRvIGZldGNoIG1lYXN1cmUgYXR0cmlidXRlIGluZGV4LlxuXHQgKiBAcGFyYW0gaU1lYXN1cmUgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIG9DaGFydEFubm90YXRpb25zIENoYXJ0IEFubm90YXRpb25zXG5cdCAqIEByZXR1cm5zIE1lYXN1cmVBdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXg6IGZ1bmN0aW9uIChpTWVhc3VyZTogbnVtYmVyLCBvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pOiBudW1iZXIge1xuXHRcdGxldCBhTWVhc3VyZXMsIHNNZWFzdXJlUHJvcGVydHlQYXRoO1xuXHRcdGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCAmJiBvQ2hhcnRBbm5vdGF0aW9ucz8uTWVhc3VyZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGFNZWFzdXJlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBhTWVhc3VyZXNbaU1lYXN1cmVdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuRHluYW1pY01lYXN1cmVzO1xuXHRcdFx0c01lYXN1cmVQcm9wZXJ0eVBhdGggPSBhTWVhc3VyZXNbaU1lYXN1cmVdLiRBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0bGV0IGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzO1xuXHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzO1xuXHRcdGxldCBpTWVhc3VyZUF0dHJpYnV0ZSA9IC0xO1xuXHRcdGNvbnN0IGZuQ2hlY2tNZWFzdXJlID0gZnVuY3Rpb24gKFxuXHRcdFx0c01lYXN1cmVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0XHRvTWVhc3VyZUF0dHJpYnV0ZTogTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPixcblx0XHRcdGluZGV4OiBudW1iZXJcblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZSkge1xuXHRcdFx0XHRpZiAob01lYXN1cmVBdHRyaWJ1dGUuTWVhc3VyZSAmJiBvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlLiRQcm9wZXJ0eVBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiYgb01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUuJEFubm90YXRpb25QYXRoID09PSBzTWVhc3VyZVBhdGgpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgPyBpTWVhc3VyZUF0dHJpYnV0ZSA6IC0xO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGFzeW5jIGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXM/LltpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofS9NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUgYXMgdW5rbm93biBhcyBudW1iZXIsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAoXG5cdFx0b1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LFxuXHRcdG9UYWJsZU1ldGFkYXRhOiB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQ/OiB7XG5cdFx0XHRcdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdHNQYXRoPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIHRhcmdldC5UZW1wbGF0ZVxuXHQgKiBAcGFyYW0gdGFyZ2V0LkRhdGFcblx0ICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUcnVlIG9yIEZhbHNlIChkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGluZGV4KS5cblx0ICovXG5cdG5vdExhc3RJbmRleDogZnVuY3Rpb24gKHRhcmdldDogeyBUZW1wbGF0ZTogc3RyaW5nOyBEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBlbGVtZW50OiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRhcmdldC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBpc0xhc3RJbmRleCA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRUZW1wLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goZGF0YUtleSk7XG5cdFx0fVxuXG5cdFx0dGVtcEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHRlbXBsYXRlSW5mbzogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSB0ZW1wQXJyYXkubGVuZ3RoIC0gMTtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsITtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZ1tdIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdFx0XHRpZiAob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogQnVpbGQgYW4gZXhwcmVzc2lvbiBjYWxsaW5nIGFuIGFjdGlvbiBoYW5kbGVyIHZpYSB0aGUgRlBNIGhlbHBlcidzIGFjdGlvbldyYXBwZXIgZnVuY3Rpb25cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICdGUE0uYWN0aW9uV3JhcHBlcigpJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYXQgcnVudGltZS5cblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNb2R1bGUgTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGFjdGlvbiBoYW5kbGVyIG1ldGhvZFxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTWV0aG9kIEFjdGlvbiBoYW5kbGVyIG1ldGhvZCBuYW1lXG5cdCAqIEBwYXJhbSBbb1RoaXNdIGB0aGlzYCAoaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgbWFjcm8pXG5cdCAqIEBwYXJhbSBvVGhpcy5pZCBUaGUgdGFibGUncyBJRFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd3JhcHBlciBiaW5kaW5nXHRleHByZXNzaW9uXG5cdCAqL1xuXHRidWlsZEFjdGlvbldyYXBwZXI6IGZ1bmN0aW9uIChcblx0XHRvQWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdFx0b1RoaXM6IHsgaWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBhUGFyYW1zOiB1bmtub3duW10gPSBbcmVmKFwiJGV2ZW50XCIpLCBvQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG9BY3Rpb24uaGFuZGxlck1ldGhvZF07XG5cblx0XHRpZiAob1RoaXMgJiYgb1RoaXMuaWQpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCIke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9XCIgOiBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIjtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsUGFyYW1zID0geyBjb250ZXh0czogcmVmKGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0YVBhcmFtcy5wdXNoKG9BZGRpdGlvbmFsUGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiRlBNLmFjdGlvbldyYXBwZXJcIiwgYVBhcmFtcykpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUgZGVwZW5kaW5nIG9uIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0ICogSXQgaXMgaW52ZXJ0ZWQgYXMgdGhlIFVJIGVsZW1lbnRzIGhhdmUgYSB2aXNpYmxlIHByb3BlcnR5IGluc3RlYWQgb2YgYSBoaWRkZW4gb25lLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQW5ub3RhdGlvbnMgVGhlIGRhdGFGaWVsZCBvYmplY3Rcblx0ICogQHJldHVybnMgQSBwYXRoIG9yIGEgQm9vbGVhblxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uIChkYXRhRmllbGRBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgeyAkUGF0aD86IHN0cmluZyB9Pik6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRcdGlmIChkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGhpZGRlbiA9IGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZldGNoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdCAqIFdlIHJldHVybiB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByZXN0cmljdGlvbiBhbmQgYWxzbyBjaGVjayBmb3IgdGhlIG9wZXJhdG9ycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlbS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eSBTdHJpbmcgbmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNFbnRpdHlTZXRQYXRoIFN0cmluZyBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHVzZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0ICogQHBhcmFtIHNUeXBlIFN0cmluZyBkYXRhIHR5cGUgb2QgdGhlIHByb3BlcnR5LCBmb3IgZXhhbXBsZSBlZG0uRGF0ZVxuXHQgKiBAcGFyYW0gYlVzZVNlbWFudGljRGF0ZVJhbmdlIEJvb2xlYW4gcGFzc2VkIGZyb20gdGhlIG1hbmlmZXN0IGZvciBzZW1hbnRpYyBkYXRlIHJhbmdlXG5cdCAqIEBwYXJhbSBzZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzIG9yIHByb3BlcnR5IHNldHRpbmdzIGFzIGEgd2hvbGVcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcblx0ICovXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0c1R5cGU/OiBzdHJpbmcsXG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzIHwgc3RyaW5nXG5cdCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoLCBvQ29udGV4dCk7XG5cdFx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRcdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRcdGNvbnN0IGFTaW5nbGVSYW5nZURUQmFzaWNPcHMgPSBbXCJFUVwiLCBcIkJUXCJdO1xuXHRcdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRcdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0XHRjb25zdCBhQmFzaWNTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0QmFzaWNTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdFx0bGV0IGFTZW1hbnRpY0RhdGVPcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgb1NldHRpbmdzID0gc2V0dGluZ3MgJiYgdHlwZW9mIHNldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzZXR0aW5ncykuY3VzdG9tRGF0YSA6IHNldHRpbmdzO1xuXG5cdFx0aWYgKChvQ29udGV4dC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApIGFzIHVua25vd24pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gYUVxdWFsc09wcztcblx0XHR9XG5cblx0XHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiwgc1R5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKHNUeXBlKTtcblx0XHR9XG5cdFx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdFx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cdFx0bGV0IHN1cHBvcnRlZE9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzO1xuXHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdGNvbnN0IGV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzID0gRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0c3VwcG9ydGVkT3BlcmF0b3JzID0gWy4uLmFCYXNpY1NlbWFudGljRGF0ZU9wcywgLi4uYURlZmF1bHRPcGVyYXRvcnMsIC4uLmV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdHJpY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0XHRpZiAoXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zICYmXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJlxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XVxuXHRcdCkge1xuXHRcdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRcdGNvbnN0IHNpbmdsZVZhbHVlRGF0ZU9wcyA9IERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2luZ2xlVmFsdWVEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gc2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0XHRjb25zdCBtdWx0aVZhbHVlT3BlcmF0b3JzID0gWy4uLmFFcXVhbHNPcHMsIFwiRW1wdHlcIiwgXCJOb3RFbXB0eVwiXTtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgbXVsdGlWYWx1ZU9wZXJhdG9ycyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRcdGxldCBhRXhwcmVzc2lvbk9wczogc3RyaW5nW107XG5cdFx0XHRcdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2VtYW50aWNEYXRlT3BzO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTZW1hbnRpY0RhdGVPcHM7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURUQmFzaWNPcHM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBzT3BlcmF0b3JzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcmVjb2duaXNlZCwgdW5kZWZpbmVkIGluIHJldHVybiByZXN1bHRzIGluIHRoZSBkZWZhdWx0IHNldCBvZlxuXHRcdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZS5cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3RyaWN0aW9ucztcblx0fSxcblx0Z2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHlUeXBlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQgZXhjbHVkaW5nIHNlbWFudGljIG9wZXJhdG9ycyBmcm9tIHRoZSBsaXN0LlxuXHRcdGNvbnN0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMocHJvcGVydHlUeXBlKTtcblx0XHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRyZXR1cm4gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHR9XG59O1xuKENvbW1vbkhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25IZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUNBLFNBQVNBLGdCQUFnQkEsQ0FBQ0MsV0FBcUIsRUFBRUMsY0FBd0IsRUFBWTtJQUNwRjtJQUNBO0lBQ0EsT0FBT0QsV0FBVyxDQUFDRSxNQUFNLENBQUMsVUFBVUMsUUFBUSxFQUFFO01BQzdDLE9BQU9GLGNBQWMsQ0FBQ0csUUFBUSxDQUFDRCxRQUFRLENBQUM7SUFDekMsQ0FBQyxDQUFDO0VBQ0g7RUFFQSxTQUFTRSxvQkFBb0JBLENBQUNDLGFBQXNCLEVBQVk7SUFDL0Q7SUFDQTtJQUNBLE1BQU1DLFVBQVUsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQ0gsYUFBYSxDQUFDO0lBQzlEO0lBQ0EsTUFBTUksU0FBUyxHQUFHRixPQUFPLENBQUNHLFdBQVcsQ0FBQ0osVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU9LLGtCQUFrQixDQUFDQyxtQkFBbUIsQ0FBQ0gsU0FBUyxDQUFDO0VBQ3pEO0VBRUEsTUFBTUksVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFDdEMsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxZQUFZLEVBQUUsU0FBQUEsQ0FBVUMsSUFBYSxFQUFVO01BQzlDLE9BQU9BLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxvQkFBb0IsRUFBRSxT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
|
|
832
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiVmFsdWVDb2xvciIsIm1MaWJyYXJ5IiwiQ29tbW9uSGVscGVyIiwiZ2V0UGF0aFRvS2V5Iiwib0N0eCIsImdldE9iamVjdCIsImdldFBhcmFtZXRlckVkaXRNb2RlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiZmllbGRDb250cm9sIiwiaW1tdXRhYmxlIiwiY29tcHV0ZWQiLCJzRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCIkUGF0aCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsSWQiLCJjb252ZXJ0VHlwZXMiLCJnZXRJZCIsImlzRGVza3RvcCIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsIm5hdkNvbGxlY3Rpb24iLCJzUGF0aCIsIm1vZGVsIiwibWV0YU1vZGVsIiwiaXNBIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJyZXBsYWNlIiwiJFR5cGUiLCJpTGVuZ3RoIiwic0NvbGxlY3Rpb25QYXRoIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwiZ290b0FjdGlvblBhcmFtZXRlciIsIm9Db250ZXh0Iiwic1Byb3BlcnR5TmFtZSIsIkNvbW1vblV0aWxzIiwiZ2V0UGFyYW1ldGVyUGF0aCIsImdldEVudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwia2V5IiwiZ2V0QWN0aW9uUGF0aCIsIm9BY3Rpb24iLCJiUmV0dXJuT25seVBhdGgiLCJzQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0NvbnRleHRQYXRoIiwic0VudGl0eVR5cGVOYW1lIiwic0VudGl0eU5hbWUiLCJzQmluZGluZ1BhcmFtZXRlciIsImdldE5hdmlnYXRpb25Db250ZXh0IiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImJLZWVwUHJvcGVydHkiLCJiU3RhcnRzV2l0aEVudGl0eVR5cGUiLCJzdGFydHNXaXRoIiwicGFydCIsInNoaWZ0IiwicG9wIiwiZ2V0QWN0aW9uQ29udGV4dCIsImdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQiLCJhZGRTaW5nbGVRdW90ZXMiLCJzVmFsdWUiLCJiRXNjYXBlIiwiZXNjYXBlU2luZ2xlUXVvdGVzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsInNGdW5jTmFtZSIsInNQYXJhbXMiLCJpIiwiYXJndW1lbnRzIiwic0Z1bmN0aW9uIiwiZ2V0SGVhZGVyRGF0YVBvaW50TGlua1Zpc2liaWxpdHkiLCJwYXRoIiwiaXNDbGlja2FibGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImNvbnN0YW50IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsIm5vdEVxdWFsIiwib2JqZWN0VG9TdHJpbmciLCJvUGFyYW1zIiwiaU51bWJlck9mS2V5cyIsIk9iamVjdCIsImtleXMiLCJzS2V5IiwicmVtb3ZlRXNjYXBlQ2hhcmFjdGVycyIsInNFeHByZXNzaW9uIiwic3RyaW5naWZ5T2JqZWN0Iiwic1N0cmluZ2lmaWVkIiwib09iamVjdCIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsIm9VSTVPYmplY3QiLCJ1aTVvYmplY3QiLCJhc3NpZ24iLCJzdHJpbmdpZnkiLCJzVHlwZSIsIkxvZyIsImVycm9yIiwiRXJyb3IiLCJzdHJpbmdpZnlDdXN0b21EYXRhIiwidkRhdGEiLCJDb250ZXh0IiwicGFyc2VDdXN0b21EYXRhIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDb250ZXh0UGF0aCIsIm9WYWx1ZSIsImdldFNvcnRDb25kaXRpb25zIiwib1ByZXNlbnRhdGlvblZhcmlhbnQiLCJzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJfaXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiIsIlNvcnRPcmRlciIsImFTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzRW50aXR5UGF0aCIsImZvckVhY2giLCJvQ29uZGl0aW9uIiwib1NvcnRQcm9wZXJ0eSIsIm9Tb3J0ZXIiLCJEeW5hbWljUHJvcGVydHkiLCIkQW5ub3RhdGlvblBhdGgiLCJOYW1lIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicHVzaCIsImFubm90YXRpb25QYXRoIiwiY3JlYXRlUHJlc2VudGF0aW9uUGF0aENvbnRleHQiLCJvUHJlc2VudGF0aW9uQ29udGV4dCIsImFQYXRocyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwic0NvbnRleHQiLCJiTmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwiZm9yQ29udGV4dE1lbnUiLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImxhYmVsIiwiTGFiZWwiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0RW50aXR5U2V0IiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZ2V0Q3JpdGljYWxpdHlDYWxjdWxhdGlvbkJpbmRpbmciLCJzSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJzRGV2aWF0aW9uTG93Iiwic1RvbGVyYW5jZUxvdyIsInNBY2NlcHRhbmNlTG93Iiwic0FjY2VwdGFuY2VIaWdoIiwic1RvbGVyYW5jZUhpZ2giLCJzRGV2aWF0aW9uSGlnaCIsInNDcml0aWNhbGl0eUV4cHJlc3Npb24iLCJOZXV0cmFsIiwiSW5maW5pdHkiLCJHb29kIiwiQ3JpdGljYWwiLCJ3YXJuaW5nIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZUluZGV4IiwiaU1lYXN1cmUiLCJvQ2hhcnRBbm5vdGF0aW9ucyIsImlzTWljcm9DaGFydCIsImFNZWFzdXJlcyIsInNNZWFzdXJlUHJvcGVydHlQYXRoIiwiTWVhc3VyZXMiLCJ2YWx1ZSIsIkR5bmFtaWNNZWFzdXJlcyIsImJNZWFzdXJlQXR0cmlidXRlRXhpc3RzIiwiYU1lYXN1cmVBdHRyaWJ1dGVzIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJpTWVhc3VyZUF0dHJpYnV0ZSIsImZuQ2hlY2tNZWFzdXJlIiwic01lYXN1cmVQYXRoIiwib01lYXN1cmVBdHRyaWJ1dGUiLCJpbmRleCIsIk1lYXN1cmUiLCJEeW5hbWljTWVhc3VyZSIsInNvbWUiLCJiaW5kIiwiZ2V0TWVhc3VyZUF0dHJpYnV0ZSIsInNDaGFydEFubm90YXRpb25QYXRoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJzTWVhc3VyZUF0dHJpYnV0ZVBhdGgiLCJEYXRhUG9pbnQiLCJnZXRNZWFzdXJlQXR0cmlidXRlRm9yTWVhc3VyZSIsInN1YnN0cmluZyIsImlzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCIsIm9UYXJnZXRDb2xsZWN0aW9uQ29udGFpbnNUYXJnZXQiLCJvVGFibGVNZXRhZGF0YSIsInBhcmVudEVudGl0eVNldCIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib0RyYWZ0Um9vdCIsIm9EcmFmdE5vZGUiLCJnZXREYXRhRnJvbVRlbXBsYXRlIiwiZGF0YUVsZW1lbnQiLCJzcGxpdFBhdGgiLCJkYXRhS2V5IiwiY29ubmVjdGVkRGF0YVBhdGgiLCJjb25uZWN0ZWRPYmplY3QiLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlIiwic3BsaXRUZW1wIiwidGVtcEFycmF5IiwidHJpbSIsIkRhdGEiLCJub3RMYXN0SW5kZXgiLCJlbGVtZW50IiwiaXNMYXN0SW5kZXgiLCJ0ZW1wbGF0ZUluZm8iLCJsYXN0SW5kZXgiLCJnZXREZWxpbWl0ZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlckluZm8iLCJnZXRQYXJhbWV0ZXJJbmZvIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsIm9UaGlzIiwiYVBhcmFtcyIsInJlZiIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiaWQiLCJpbnRlcm5hbE1vZGVsUGF0aCIsIm9BZGRpdGlvbmFsUGFyYW1zIiwiY29udGV4dHMiLCJmbiIsImdldEhpZGRlblBhdGhFeHByZXNzaW9uIiwiZGF0YUZpZWxkQW5ub3RhdGlvbnMiLCJoaWRkZW4iLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNFbnRpdHlTZXRQYXRoIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic2V0dGluZ3MiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYUJhc2ljU2VtYW50aWNEYXRlT3BzIiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0QmFzaWNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYlNlbWFudGljRGF0ZVJhbmdlIiwiYVNlbWFudGljRGF0ZU9wcyIsIm9TZXR0aW5ncyIsImN1c3RvbURhdGEiLCJvcGVyYXRvckNvbmZpZ3VyYXRpb24iLCJnZXRGaWx0ZXJPcGVyYXRpb25zIiwiRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInN1cHBvcnRlZE9wZXJhdG9ycyIsImV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJyZXN0cmljdGlvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzQWxsb3dlZEV4cHJlc3Npb24iLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwic2luZ2xlVmFsdWVEYXRlT3BzIiwiZ2V0U2luZ2xlVmFsdWVEYXRlT3BlcmF0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsIm11bHRpVmFsdWVPcGVyYXRvcnMiLCJzT3BlcmF0b3JzIiwiY29uY2F0IiwiZ2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5IiwicHJvcGVydHlUeXBlIiwicmVxdWlyZXNJQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdFByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGZuLCBpZkVsc2UsIG5vdEVxdWFsLCBwYXRoSW5Nb2RlbCwgcmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCAqIGFzIERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IG1MaWJyYXJ5IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlsIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9GaWx0ZXJPcGVyYXRvclV0aWxcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxudHlwZSBNZXRhTW9kZWxNZWFzdXJlID0ge1xuXHQkUHJvcGVydHlQYXRoOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BzOiBzdHJpbmdbXSwgYUV4cHJlc3Npb25PcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHQvLyBGcm9tIHRoZSBkZWZhdWx0IHNldCBvZiBPcGVyYXRvcnMgZm9yIHRoZSBCYXNlIFR5cGUsIHNlbGVjdCB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBbGxvd2VkIFZhbHVlLlxuXHQvLyBJbiBjYXNlIHRoYXQgbm8gb3BlcmF0b3JzIGFyZSBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldCBpcyB1c2VkLlxuXHRyZXR1cm4gYURlZmF1bHRPcHMuZmlsdGVyKGZ1bmN0aW9uIChzRWxlbWVudCkge1xuXHRcdHJldHVybiBhRXhwcmVzc2lvbk9wcy5pbmNsdWRlcyhzRWxlbWVudCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzUHJvcGVydHlUeXBlPzogc3RyaW5nKTogc3RyaW5nW10ge1xuXHQvLyBtZGMgZGVmaW5lcyB0aGUgZnVsbCBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSBtZWFuaW5nZnVsIGZvciBlYWNoIEVkbSBUeXBlXG5cdC8vIFRPRE8gUmVwbGFjZSB3aXRoIG1vZGVsIC8gaW50ZXJuYWwgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBtb2RlbCB0eXBlIHVzZWQgZm9yIHRoZSBwcm9wZXJ0eVxuXHRjb25zdCBvRGF0YUNsYXNzID0gVHlwZU1hcC5nZXREYXRhVHlwZUNsYXNzTmFtZShzUHJvcGVydHlUeXBlKTtcblx0Ly8gVE9ETyBuZWVkIHRvIHBhc3MgcHJvcGVyIGZvcm1hdE9wdGlvbnMsIGNvbnN0cmFpbnRzIGhlcmVcblx0Y29uc3Qgb0Jhc2VUeXBlID0gVHlwZU1hcC5nZXRCYXNlVHlwZShvRGF0YUNsYXNzLCB7fSwge30pO1xuXHRyZXR1cm4gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yc0ZvclR5cGUob0Jhc2VUeXBlKTtcbn1cblxuY29uc3QgVmFsdWVDb2xvciA9IG1MaWJyYXJ5LlZhbHVlQ29sb3I7XG5jb25zdCBDb21tb25IZWxwZXIgPSB7XG5cdGdldFBhdGhUb0tleTogZnVuY3Rpb24gKG9DdHg6IENvbnRleHQpOiBvYmplY3Qge1xuXHRcdHJldHVybiBvQ3R4LmdldE9iamVjdCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIEludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBIEJpbmRpbmcgRXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWVsZCBzaG91bGQgYmUgZWRpdGFibGUgb3Igbm90LlxuXHQgKi9cblx0Z2V0UGFyYW1ldGVyRWRpdE1vZGU6IGZ1bmN0aW9uICh0YXJnZXQ6IG9iamVjdCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdGZpZWxkQ29udHJvbCA9IG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdLFxuXHRcdFx0aW1tdXRhYmxlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXSxcblx0XHRcdGNvbXB1dGVkID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdO1xuXG5cdFx0bGV0IHNFZGl0TW9kZTogRmllbGRFZGl0TW9kZSB8IHN0cmluZyA9IEZpZWxkRWRpdE1vZGUuRWRpdGFibGU7XG5cblx0XHRpZiAoaW1tdXRhYmxlIHx8IGNvbXB1dGVkKSB7XG5cdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdGlmIChmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIikge1xuXHRcdFx0XHRcdHNFZGl0TW9kZSA9IEZpZWxkRWRpdE1vZGUuUmVhZE9ubHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIiB8fFxuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9IaWRkZW5cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLkRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmllbGRDb250cm9sLiRQYXRoKSB7XG5cdFx0XHRcdHNFZGl0TW9kZSA9XG5cdFx0XHRcdFx0XCJ7PSAle1wiICtcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA8IDMgPyAoJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDAgPyAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQgK1xuXHRcdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSArXG5cdFx0XHRcdFx0XCInKSA6ICdcIiArXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZSArXG5cdFx0XHRcdFx0XCInfVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzRWRpdE1vZGU7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNvbXBsZXRlIG1ldGFwYXRoIHRvIHRoZSB0YXJnZXQuXG5cdCAqIEBwYXJhbSB0YXJnZXRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2Vcblx0ICogQHJldHVybnMgVGhlIG1ldGFwYXRoXG5cdCAqL1xuXHRnZXRNZXRhUGF0aDogZnVuY3Rpb24gKHRhcmdldDogdW5rbm93biwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0ICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkpIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0Z2V0TWV0YU1vZGVsSWQ6IGZ1bmN0aW9uICh0YXJnZXQ6IENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdFx0Y29udmVydFR5cGVzKG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpKTtcblx0XHRyZXR1cm4gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkuZ2V0SWQoKTtcblx0fSxcblx0aXNEZXNrdG9wOiBmdW5jdGlvbiAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIERldmljZS5zeXN0ZW0uZGVza3RvcCA9PT0gdHJ1ZTtcblx0fSxcblx0Z2V0VGFyZ2V0Q29sbGVjdGlvblBhdGg6IGZ1bmN0aW9uIChjb250ZXh0OiBDb250ZXh0LCBuYXZDb2xsZWN0aW9uPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoXG5cdFx0XHQoY29udGV4dC5nZXRPYmplY3QoXCIka2luZFwiKSBhcyB1bmtub3duIGFzIHN0cmluZykgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdChjb250ZXh0LmdldE9iamVjdChcIiRDb250YWluc1RhcmdldFwiKSBhcyB1bmtub3duIGFzIGJvb2xlYW4pID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmlzQTxPRGF0YU1ldGFNb2RlbD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIikgPyBtb2RlbCA6IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHNQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblxuXHRcdC8vU3VwcG9ydGluZyBzUGF0aCBvZiBhbnkgZm9ybWF0LCBlaXRoZXIgJy88ZW50aXR5U2V0Pi88bmF2aWdhdGlvbkNvbGxlY3Rpb24+JyA8T1I+ICcvPGVudGl0eVNldD4vJFR5cGUvPG5hdmlnYXRpb25Db2xsZWN0aW9uPidcblx0XHRjb25zdCBhUGFydHMgPSBzUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKGZ1bmN0aW9uIChzUGFydDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gISFzUGFydCAmJiBzUGFydCAhPSBcIiRUeXBlXCI7XG5cdFx0fSk7IC8vZmlsdGVyIG91dCBlbXB0eSBzdHJpbmdzIGFuZCBwYXJ0cyByZWZlcnJpbmcgdG8gJyRUeXBlJ1xuXHRcdGNvbnN0IGVudGl0eVNldCA9IGAvJHthUGFydHNbMF19YDtcblx0XHRpZiAoYVBhcnRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldDtcblx0XHR9XG5cdFx0Y29uc3QgbmF2aWdhdGlvbkNvbGxlY3Rpb24gPSBuYXZDb2xsZWN0aW9uID09PSB1bmRlZmluZWQgPyBhUGFydHMuc2xpY2UoMSkuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIikgOiBuYXZDb2xsZWN0aW9uO1xuXHRcdHJldHVybiBgJHtlbnRpdHlTZXR9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7bmF2aWdhdGlvbkNvbGxlY3Rpb259YDsgLy8gdXNlZCBpbiBnb3RvVGFyZ2V0RW50aXR5U2V0IG1ldGhvZCBpbiB0aGUgc2FtZSBmaWxlXG5cdH0sXG5cblx0aXNQcm9wZXJ0eUZpbHRlcmFibGU6IGZ1bmN0aW9uIChcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdG9EYXRhRmllbGQ/OiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPlxuXHQpOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNQcm9wZXJ0eVBhdGggPSBjb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdC8vIExvYWNhdGlvblBhdGggd291bGQgYmUgdGhlIHByZWZpeCBvZiBzUHJvcGVydHlQYXRoLCBleGFtcGxlOiBzUHJvcGVydHlQYXRoID0gJy9DdXN0b21lci9TZXQvTmFtZScgLT4gc1Byb3BlcnR5TG9jYXRpb25QYXRoID0gJy9DdXN0b21lci9TZXQnXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdHNQcm9wZXJ0eSA9IHNQcm9wZXJ0eVBhdGgucmVwbGFjZShgJHtzUHJvcGVydHlMb2NhdGlvblBhdGh9L2AsIFwiXCIpO1xuXG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZCAmJlxuXHRcdFx0KG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNQcm9wZXJ0eUZpbHRlcmFibGUob01vZGVsLCBzUHJvcGVydHlMb2NhdGlvblBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGFtb2RlbCBwYXRoIGNvcnJlY3RseSBmb3IgYm91bmQgYWN0aW9ucyBpZiB1c2VkIHdpdGggYlJldHVybk9ubHlQYXRoIGFzIHRydWUsXG5cdCAqIGVsc2UgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggaGFzIDMgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24uIFRoZXkgYXJlIHRoZSBlbnRpdHkgc2V0IG5hbWUsXG5cdCAqIHRoZSAkUGF0aCB2YWx1ZSBvZiB0aGUgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gYW5kIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lLiBJZlxuXHQgKiBiQ2hlY2tTdGF0aWNWYWx1ZSBpcyB0cnVlLCByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24sIGlmIHByZXNlbnQuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBUaGUgY29udGV4dCBvYmplY3Qgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gYlJldHVybk9ubHlQYXRoIElmIGZhbHNlLCBhZGRpdGlvbmFsIGluZm8gaXMgcmV0dXJuZWQgYWxvbmcgd2l0aCBtZXRhbW9kZWwgcGF0aCB0byB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYm91bmQgYWN0aW9uIG9mIHRoZSBmb3JtIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIEBwYXJhbSBiQ2hlY2tTdGF0aWNWYWx1ZSBJZiB0cnVlLCB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBpcyByZXR1cm5lZCwgaWYgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBUaGUgc3RyaW5nIG9yIG9iamVjdCBhcyBzcGVjaWZpZWQgYnkgYlJldHVybk9ubHlQYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdFx0YkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuXG5cdCk6XG5cdFx0fCBzdHJpbmdcblx0XHR8IHtcblx0XHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogc3RyaW5nO1xuXHRcdCAgfSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9BY3Rpb24uZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cblx0XHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBiU3RhcnRzV2l0aEVudGl0eVR5cGUgPSBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAocGFydDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gISFwYXJ0O1xuXHRcdH0pO1xuXHRcdGlmIChiU3RhcnRzV2l0aEVudGl0eVR5cGUpIHtcblx0XHRcdGFQYXJ0cy5zaGlmdCgpO1xuXHRcdH1cblx0XHRpZiAoIWJLZWVwUHJvcGVydHkpIHtcblx0XHRcdGFQYXJ0cy5wb3AoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQYXJ0cy5qb2luKFwiL1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9ucy5cblx0ICpcblx0ICogU2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0aW9uIHR5cGUsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHVuYm91bmQgYWN0aW9ucy5cblx0ICogSW4gc3VjaCBhIGNhc2UsIGlmIGFuIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBpdCBpcyBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBmb3IgdGhlIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBDb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9BY3Rpb246IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKSBhcyBzdHJpbmc7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIG92ZXJsb2FkZWQgYm91bmQgYWN0aW9ucy4gRm9yIHVuYm91bmQgYWN0aW9ucyxcblx0ICogdGhlIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBidXQgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uL0AkdWk1Lm92ZXJsb2FkLzBcIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb24gb3ZlcmxvYWQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHRcdHJldHVybiBgJHtzUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBzaW5nbGUgcXVvdGVzXG5cdCAqIEBwYXJhbSBbYkVzY2FwZV0gU2hvdWxkIHRoZSBzdHJpbmcgYmUgZXNjYXBlZCBiZWZvcmVoYW5kXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0YWRkU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGJFc2NhcGU/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoYkVzY2FwZSAmJiBzVmFsdWUpIHtcblx0XHRcdHNWYWx1ZSA9IHRoaXMuZXNjYXBlU2luZ2xlUXVvdGVzKHNWYWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBgJyR7c1ZhbHVlfSdgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyBlc2NhcGluZyBvZiBzaW5nbGUgcXVvdGVzXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRlc2NhcGVTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHNWYWx1ZS5yZXBsYWNlKC9bJ10vZywgXCJcXFxcJ1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZnVuY3Rpb24gc3RyaW5nXG5cdCAqIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGlzIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqIFJlbWFpbmluZyBhcmd1bWVudHMgb2YgZ2VuZXJhdGVGdW5jdGlvbiBhcmUgYXJndW1lbnRzIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBAcGFyYW0gc0Z1bmNOYW1lIFNvbWUgc3RyaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gYXJncyBUaGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyAtIEZ1bmN0aW9uIHN0cmluZyBkZXBlbmRzIG9uIGFyZ3VtZW50cyBwYXNzZWRcblx0ICovXG5cdGdlbmVyYXRlRnVuY3Rpb246IGZ1bmN0aW9uIChzRnVuY05hbWU6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGFyYW1zID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXJhbXMgKz0gYXJnc1tpXTtcblx0XHRcdGlmIChpIDwgYXJncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KClgO1xuXHRcdGlmIChzUGFyYW1zKSB7XG5cdFx0XHRzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KCR7c1BhcmFtc30pYDtcblx0XHR9XG5cdFx0cmV0dXJuIHNGdW5jdGlvbjtcblx0fSxcblx0Lypcblx0ICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIGZvciBkYXRhcG9pbnQgdGl0bGUvbGlua1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzQ2xpY2thYmxlXSB0cnVlIGlmIGxpbmsgaXMgdmlzaWJsZVxuXHQgKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb259IHZpc2liaWxpdHlFeHAgVXNlZCB0byBnZXQgdGhlIHZpc2liaWxpdHkgYmluZGluZyBmb3IgRGF0YVBvaW50cyB0aXRsZSBpbiB0aGUgSGVhZGVyLlxuXHQgKlxuXHQgKi9cblxuXHRnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eTogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNDbGlja2FibGU6IGJvb2xlYW4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb25zdGFudChpc0NsaWNrYWJsZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtwYXRofWAsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRub3RFcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKiBAcGFyYW0gb1BhcmFtcyBTb21lIG9iamVjdFxuXHQgKiBAcmV0dXJucyAtIE9iamVjdCBzdHJpbmdcblx0ICovXG5cdG9iamVjdFRvU3RyaW5nOiBmdW5jdGlvbiAob1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuXHRcdGxldCBpTnVtYmVyT2ZLZXlzID0gT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoLFxuXHRcdFx0c1BhcmFtcyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb1BhcmFtcykge1xuXHRcdFx0bGV0IHNWYWx1ZSA9IG9QYXJhbXNbc0tleV07XG5cdFx0XHRpZiAoc1ZhbHVlICYmIHR5cGVvZiBzVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0c1ZhbHVlID0gdGhpcy5vYmplY3RUb1N0cmluZyhzVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0fVxuXHRcdFx0c1BhcmFtcyArPSBgJHtzS2V5fTogJHtzVmFsdWV9YDtcblx0XHRcdGlmIChpTnVtYmVyT2ZLZXlzID4gMSkge1xuXHRcdFx0XHQtLWlOdW1iZXJPZktleXM7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBgeyAke3NQYXJhbXN9fWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgZXNjYXBlIGNoYXJhY3RlcnMgKFxcKSBmcm9tIGFuIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghc1N0cmluZ2lmaWVkIHx8IHNTdHJpbmdpZmllZCA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0ID0gSlNPTi5wYXJzZShzU3RyaW5naWZpZWQpO1xuXHRcdFx0aWYgKHR5cGVvZiBvT2JqZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9PYmplY3QpKSB7XG5cdFx0XHRcdGNvbnN0IG9VSTVPYmplY3QgPSB7XG5cdFx0XHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24ob1VJNU9iamVjdCwgb09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvVUk1T2JqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNUeXBlID0gQXJyYXkuaXNBcnJheShvT2JqZWN0KSA/IFwiQXJyYXlcIiA6IHR5cGVvZiBvT2JqZWN0O1xuXHRcdFx0XHRMb2cuZXJyb3IoYFVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgaW4gc3RyaW5naWZ5T2JqZWN0ICgke3NUeXBlfSkgLSBvbmx5IHdvcmtzIHdpdGggb2JqZWN0YCk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0cmluZ2lmeU9iamVjdCBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEsIHRha2luZyBjYXJlIHRoYXQgaXQgaXMgbm90IHRyZWF0ZWQgYXMgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBzdHJpbmdpZnlcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS5cblx0ICovXG5cdHN0cmluZ2lmeUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBvT2JqZWN0OiB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHBhcmFtIHZEYXRhLnVpNW9iamVjdFxuXHQgKiBAcGFyYW0gdkRhdGEuY3VzdG9tRGF0YVxuXHQgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBkYXRhIHBhcnNpbmdcblx0ICovXG5cdHBhcnNlQ3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhPzogc3RyaW5nIHwgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pOiB1bmtub3duIHtcblx0XHR2RGF0YSA9IHR5cGVvZiB2RGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRhdGEpIDogdkRhdGE7XG5cdFx0aWYgKHZEYXRhICYmIHZEYXRhLmhhc093blByb3BlcnR5KFwiY3VzdG9tRGF0YVwiKSkge1xuXHRcdFx0cmV0dXJuICh2RGF0YSBhcyB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSlbXCJjdXN0b21EYXRhXCJdO1xuXHRcdH1cblx0XHRyZXR1cm4gdkRhdGE7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiB1bmtub3duLCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldFBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldE1vZGVsXG5cdCAqIEBwYXJhbSBvUHJlc2VudGF0aW9uVmFyaWFudCBQcmVzZW50YXRpb24gdmFyaWFudCBBbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0ICogQHJldHVybnMgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0b0NvbnRleHQ6IHsgZ2V0UGF0aChudW06IG51bWJlcik6IHN0cmluZzsgZ2V0TW9kZWwobnVtOiBudW1iZXIpOiBPRGF0YU1ldGFNb2RlbCB9LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50OiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRcdHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogeyBzb3J0ZXJzOiB7IG5hbWU/OiBzdHJpbmc7IGRlc2NlbmRpbmc/OiBib29sZWFuIH1bXSB9ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3Qgb1NvcnRlcjogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9ID0ge307XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29udGV4dC5nZXRNb2RlbCgwKS5nZXRPYmplY3Qoc0VudGl0eVBhdGggKyBvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eS4kQW5ub3RhdGlvblBhdGgpPy5OYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db25kaXRpb24uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbmRpdGlvbi5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU29ydFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRlci5uYW1lID0gb1NvcnRQcm9wZXJ0eTtcblx0XHRcdFx0XHRvU29ydGVyLmRlc2NlbmRpbmcgPSAhIW9Db25kaXRpb24uRGVzY2VuZGluZztcblx0XHRcdFx0XHRhU29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKG9Tb3J0ZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBkZWZpbmUgdGhlIHJpZ2h0IHBhdGggdG8gdGhlIHNvcnQgcHJvcGVydHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFTb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSB8fFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YClcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB7XG5cdFx0Y29uc3QgYVBhdGhzID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpKSB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKX1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0c0NvbnRleHQ/OiBzdHJpbmcsXG5cdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZz86IGJvb2xlYW4sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IHN0cmluZztcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdH0gPSB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHNDb250ZXh0ID8gc0NvbnRleHQgOiBcIiR7JHNvdXJjZT4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCJcblx0XHR9O1xuXHRcdGlmIChvRGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhb0RhdGFGaWVsZC5JbmxpbmUgJiYgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKEpTT04uc3RyaW5naWZ5KG9EYXRhRmllbGQuTWFwcGluZykpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA/IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nXCIgOiBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMub2JqZWN0VG9TdHJpbmcobU5hdmlnYXRpb25QYXJhbWV0ZXJzKSxcblx0XHRcdFwiJHskc291cmNlPi99XCJcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KTogc3RyaW5nIHtcblx0XHRsZXQgc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjogdHlwZW9mIFZhbHVlQ29sb3IgfCBzdHJpbmcgPSBWYWx1ZUNvbG9yLk5ldXRyYWw7IC8vIERlZmF1bHQgQ3JpdGljYWxpdHkgU3RhdGVcblxuXHRcdHNWYWx1ZSA9IGAlJHtzVmFsdWV9YDtcblxuXHRcdC8vIFNldHRpbmcgVW5hc3NpZ25lZCBWYWx1ZXNcblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyB8fCAtSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgfHwgc0RldmlhdGlvbkxvdztcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93IHx8IHNUb2xlcmFuY2VMb3c7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCB8fCBJbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoIHx8IHNEZXZpYXRpb25IaWdoO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCB8fCBzVG9sZXJhbmNlSGlnaDtcblxuXHRcdC8vIERlYWxpbmcgd2l0aCBEZWNpbWFsIGFuZCBQYXRoIGJhc2VkIGJpbmdkaW5nc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93ICYmICgrc0RldmlhdGlvbkxvdyA/ICtzRGV2aWF0aW9uTG93IDogYCUke3NEZXZpYXRpb25Mb3d9YCk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgJiYgKCtzVG9sZXJhbmNlTG93ID8gK3NUb2xlcmFuY2VMb3cgOiBgJSR7c1RvbGVyYW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93ICYmICgrc0FjY2VwdGFuY2VMb3cgPyArc0FjY2VwdGFuY2VMb3cgOiBgJSR7c0FjY2VwdGFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoICYmICgrc0FjY2VwdGFuY2VIaWdoID8gK3NBY2NlcHRhbmNlSGlnaCA6IGAlJHtzQWNjZXB0YW5jZUhpZ2h9YCk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCAmJiAoK3NUb2xlcmFuY2VIaWdoID8gK3NUb2xlcmFuY2VIaWdoIDogYCUke3NUb2xlcmFuY2VIaWdofWApO1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggJiYgKCtzRGV2aWF0aW9uSGlnaCA/ICtzRGV2aWF0aW9uSGlnaCA6IGAlJHtzRGV2aWF0aW9uSGlnaH1gKTtcblxuXHRcdC8vIENyZWF0aW5nIHJ1bnRpbWUgZXhwcmVzc2lvbiBiaW5kaW5nIGZyb20gY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gZm9yIENyaXRpY2FsaXR5IFN0YXRlXG5cdFx0aWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1heGltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiVGFyZ2V0XCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgfHwgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIikgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIikpIHx8ICgoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikgJiYgXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYXNlIG5vdCBzdXBwb3J0ZWQsIHJldHVybmluZyB0aGUgZGVmYXVsdCBWYWx1ZSBOZXV0cmFsXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzQ3JpdGljYWxpdHlFeHByZXNzaW9uO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBudW1iZXIsIG9DaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LCBpc01pY3JvQ2hhcnQ/OiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gaXNNaWNyb0NoYXJ0XG5cdFx0XHRcdD8gKGFNZWFzdXJlc1tpTWVhc3VyZV0gYXMgUHJvcGVydHlQYXRoKS52YWx1ZVxuXHRcdFx0XHQ6IChhTWVhc3VyZXNbaU1lYXN1cmVdIGFzIE1ldGFNb2RlbE1lYXN1cmUpLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gKG9DaGFydEFubm90YXRpb25zIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnQ+KS5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlcz8uW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChcblx0XHRcdHNNZWFzdXJlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0b01lYXN1cmVBdHRyaWJ1dGU6IE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRcdFx0aW5kZXg6IG51bWJlclxuXHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBpc01pY3JvQ2hhcnRcblx0XHRcdFx0XHQ/IChvTWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlKS5NZWFzdXJlPy52YWx1ZVxuXHRcdFx0XHRcdDogKG9NZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4pLk1lYXN1cmU/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIHBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiZcblx0XHRcdFx0XHQob01lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPik/LkR5bmFtaWNNZWFzdXJlPy4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgPyBpTWVhc3VyZUF0dHJpYnV0ZSA6IC0xO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGFzeW5jIGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXM/LltpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofS9NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUgYXMgdW5rbm93biBhcyBudW1iZXIsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAoXG5cdFx0b1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LFxuXHRcdG9UYWJsZU1ldGFkYXRhOiB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQ/OiB7XG5cdFx0XHRcdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdHNQYXRoPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIHRhcmdldC5UZW1wbGF0ZVxuXHQgKiBAcGFyYW0gdGFyZ2V0LkRhdGFcblx0ICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUcnVlIG9yIEZhbHNlIChkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGluZGV4KS5cblx0ICovXG5cdG5vdExhc3RJbmRleDogZnVuY3Rpb24gKHRhcmdldDogeyBUZW1wbGF0ZTogc3RyaW5nOyBEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBlbGVtZW50OiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRhcmdldC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBpc0xhc3RJbmRleCA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRUZW1wLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goZGF0YUtleSk7XG5cdFx0fVxuXG5cdFx0dGVtcEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHRlbXBsYXRlSW5mbzogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSB0ZW1wQXJyYXkubGVuZ3RoIC0gMTtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsITtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZ1tdIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzUGF0aCk7XG5cdFx0XHRpZiAob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMob1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogQnVpbGQgYW4gZXhwcmVzc2lvbiBjYWxsaW5nIGFuIGFjdGlvbiBoYW5kbGVyIHZpYSB0aGUgRlBNIGhlbHBlcidzIGFjdGlvbldyYXBwZXIgZnVuY3Rpb25cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICdGUE0uYWN0aW9uV3JhcHBlcigpJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYXQgcnVudGltZS5cblx0ICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBvQWN0aW9uLmhhbmRsZXJNb2R1bGUgTW9kdWxlIGNvbnRhaW5pbmcgdGhlIGFjdGlvbiBoYW5kbGVyIG1ldGhvZFxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTWV0aG9kIEFjdGlvbiBoYW5kbGVyIG1ldGhvZCBuYW1lXG5cdCAqIEBwYXJhbSBbb1RoaXNdIGB0aGlzYCAoaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgbWFjcm8pXG5cdCAqIEBwYXJhbSBvVGhpcy5pZCBUaGUgdGFibGUncyBJRFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd3JhcHBlciBiaW5kaW5nXHRleHByZXNzaW9uXG5cdCAqL1xuXHRidWlsZEFjdGlvbldyYXBwZXI6IGZ1bmN0aW9uIChcblx0XHRvQWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdFx0b1RoaXM6IHsgaWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBhUGFyYW1zOiB1bmtub3duW10gPSBbcmVmKFwiJGV2ZW50XCIpLCBvQWN0aW9uLmhhbmRsZXJNb2R1bGUsIG9BY3Rpb24uaGFuZGxlck1ldGhvZF07XG5cblx0XHRpZiAob1RoaXMgJiYgb1RoaXMuaWQpIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCIke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9XCIgOiBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIjtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsUGFyYW1zID0geyBjb250ZXh0czogcmVmKGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0YVBhcmFtcy5wdXNoKG9BZGRpdGlvbmFsUGFyYW1zKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiRlBNLmFjdGlvbldyYXBwZXJcIiwgYVBhcmFtcykpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUgZGVwZW5kaW5nIG9uIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0ICogSXQgaXMgaW52ZXJ0ZWQgYXMgdGhlIFVJIGVsZW1lbnRzIGhhdmUgYSB2aXNpYmxlIHByb3BlcnR5IGluc3RlYWQgb2YgYSBoaWRkZW4gb25lLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQW5ub3RhdGlvbnMgVGhlIGRhdGFGaWVsZCBvYmplY3Rcblx0ICogQHJldHVybnMgQSBwYXRoIG9yIGEgQm9vbGVhblxuXHQgKi9cblx0Z2V0SGlkZGVuUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uIChkYXRhRmllbGRBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgeyAkUGF0aD86IHN0cmluZyB9Pik6IHN0cmluZyB8IGJvb2xlYW4ge1xuXHRcdGlmIChkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGhpZGRlbiA9IGRhdGFGaWVsZEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGlkZGVuID09PSBcIm9iamVjdFwiID8gXCJ7PSAhJHtcIiArIGhpZGRlbi4kUGF0aCArIFwifSB9XCIgOiAhaGlkZGVuO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZldGNoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdCAqIFdlIHJldHVybiB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByZXN0cmljdGlvbiBhbmQgYWxzbyBjaGVjayBmb3IgdGhlIG9wZXJhdG9ycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlbS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eSBTdHJpbmcgbmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNFbnRpdHlTZXRQYXRoIFN0cmluZyBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHVzZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0ICogQHBhcmFtIHNUeXBlIFN0cmluZyBkYXRhIHR5cGUgb2QgdGhlIHByb3BlcnR5LCBmb3IgZXhhbXBsZSBlZG0uRGF0ZVxuXHQgKiBAcGFyYW0gYlVzZVNlbWFudGljRGF0ZVJhbmdlIEJvb2xlYW4gcGFzc2VkIGZyb20gdGhlIG1hbmlmZXN0IGZvciBzZW1hbnRpYyBkYXRlIHJhbmdlXG5cdCAqIEBwYXJhbSBzZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzIG9yIHByb3BlcnR5IHNldHRpbmdzIGFzIGEgd2hvbGVcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcblx0ICovXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0c1R5cGU/OiBzdHJpbmcsXG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzIHwgc3RyaW5nXG5cdCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoLCBvQ29udGV4dCk7XG5cdFx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRcdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRcdGNvbnN0IGFTaW5nbGVSYW5nZURUQmFzaWNPcHMgPSBbXCJFUVwiLCBcIkJUXCJdO1xuXHRcdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRcdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0XHRjb25zdCBhQmFzaWNTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0QmFzaWNTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdFx0bGV0IGFTZW1hbnRpY0RhdGVPcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgb1NldHRpbmdzID0gc2V0dGluZ3MgJiYgdHlwZW9mIHNldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzZXR0aW5ncykuY3VzdG9tRGF0YSA6IHNldHRpbmdzO1xuXG5cdFx0aWYgKChvQ29udGV4dC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApIGFzIHVua25vd24pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gYUVxdWFsc09wcztcblx0XHR9XG5cblx0XHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiwgc1R5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhU2VtYW50aWNEYXRlT3BzID0gRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKHNUeXBlKTtcblx0XHR9XG5cdFx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdFx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cdFx0bGV0IHN1cHBvcnRlZE9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzO1xuXHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdGNvbnN0IGV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzID0gRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0c3VwcG9ydGVkT3BlcmF0b3JzID0gWy4uLmFCYXNpY1NlbWFudGljRGF0ZU9wcywgLi4uYURlZmF1bHRPcGVyYXRvcnMsIC4uLmV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdHJpY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0XHRpZiAoXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zICYmXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJlxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XVxuXHRcdCkge1xuXHRcdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRcdGNvbnN0IHNpbmdsZVZhbHVlRGF0ZU9wcyA9IERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2luZ2xlVmFsdWVEYXRlT3BlcmF0aW9ucygpO1xuXHRcdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gc2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0XHRjb25zdCBtdWx0aVZhbHVlT3BlcmF0b3JzID0gWy4uLmFFcXVhbHNPcHMsIFwiRW1wdHlcIiwgXCJOb3RFbXB0eVwiXTtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgbXVsdGlWYWx1ZU9wZXJhdG9ycyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRcdGxldCBhRXhwcmVzc2lvbk9wczogc3RyaW5nW107XG5cdFx0XHRcdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2VtYW50aWNEYXRlT3BzO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTZW1hbnRpY0RhdGVPcHM7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURUQmFzaWNPcHM7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBzT3BlcmF0b3JzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlSYW5nZVwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcmVjb2duaXNlZCwgdW5kZWZpbmVkIGluIHJldHVybiByZXN1bHRzIGluIHRoZSBkZWZhdWx0IHNldCBvZlxuXHRcdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZS5cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3RyaWN0aW9ucztcblx0fSxcblx0Z2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5OiBmdW5jdGlvbiAocHJvcGVydHlUeXBlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHByb3ZpZGVkIGZvciB0eXBlIEVkbS5EYXRlIHRoZW4gYWxsIHRoZSBkZWZhdWx0XG5cdFx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQgZXhjbHVkaW5nIHNlbWFudGljIG9wZXJhdG9ycyBmcm9tIHRoZSBsaXN0LlxuXHRcdGNvbnN0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMocHJvcGVydHlUeXBlKTtcblx0XHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRyZXR1cm4gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHR9XG59O1xuKENvbW1vbkhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25IZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0NBLFNBQVNBLGdCQUFnQkEs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
|