@sapui5/sap.fe.macros 1.138.0 → 1.139.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/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +21 -4
- package/src/sap/fe/macros/Field.ts +21 -3
- package/src/sap/fe/macros/FooterContent.js +40 -10
- package/src/sap/fe/macros/FooterContent.tsx +44 -8
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MultiValueField.js +17 -4
- package/src/sap/fe/macros/MultiValueField.tsx +7 -2
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +73 -40
- package/src/sap/fe/macros/Share.tsx +29 -1
- package/src/sap/fe/macros/ValueHelp.js +3 -4
- package/src/sap/fe/macros/ValueHelp.tsx +2 -3
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +9 -3
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +37 -29
- package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
- package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
- package/src/sap/fe/macros/messagebundle_da.properties +6 -4
- package/src/sap/fe/macros/messagebundle_de.properties +11 -9
- package/src/sap/fe/macros/messagebundle_el.properties +7 -5
- package/src/sap/fe/macros/messagebundle_en.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_es.properties +6 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
- package/src/sap/fe/macros/messagebundle_et.properties +5 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/src/sap/fe/macros/messagebundle_id.properties +8 -6
- package/src/sap/fe/macros/messagebundle_it.properties +4 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
- package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
- package/src/sap/fe/macros/messagebundle_no.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
- package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_th.properties +4 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/macros/messages/MessageButton.js +17 -19
- package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +18 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableRuntime.js +3 -3
- package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
|
@@ -45,6 +45,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
45
45
|
if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
|
|
46
46
|
TableRuntime.clearSelection(table);
|
|
47
47
|
table.fireSelectionChange();
|
|
48
|
+
} else if (forContextMenu) {
|
|
49
|
+
// Using the context menu implicitly defines a context for the action
|
|
50
|
+
table.fireSelectionChange();
|
|
48
51
|
}
|
|
49
52
|
internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);
|
|
50
53
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
|
|
@@ -491,4 +494,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
491
494
|
_exports = TableHierarchy;
|
|
492
495
|
return _exports;
|
|
493
496
|
}, false);
|
|
494
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FD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
|
|
497
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH0gZWxzZSBpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdC8vIFVzaW5nIHRoZSBjb250ZXh0IG1lbnUgaW1wbGljaXRseSBkZWZpbmVzIGEgY29udGV4dCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lB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
|
|
@@ -60,6 +60,9 @@ export default class TableHierarchy implements IInterfaceWithMixin {
|
|
|
60
60
|
if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
|
|
61
61
|
TableRuntime.clearSelection(table);
|
|
62
62
|
table.fireSelectionChange();
|
|
63
|
+
} else if (forContextMenu) {
|
|
64
|
+
// Using the context menu implicitly defines a context for the action
|
|
65
|
+
table.fireSelectionChange();
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);
|