@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
|
@@ -154,7 +154,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
154
154
|
const viewId = this._getViewId(this.getId());
|
|
155
155
|
const view = UI5Element.getElementById(viewId);
|
|
156
156
|
const uIModel = view?.getModel("internal");
|
|
157
|
-
uIModel?.setProperty("/
|
|
157
|
+
uIModel?.setProperty("/messageTargetPropertyPath", undefined);
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
/**
|
|
@@ -332,15 +332,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
332
332
|
const includeTableGroupName = this._checkMergeLogicForMessageGrouping(section, subSection, hasMultipleSubSections);
|
|
333
333
|
const sectionBasedGroupName = messageHandling.createSectionGroupName(section, subSection, hasMultipleSubSections, targetTableInfo, resourceModel, includeTableGroupName);
|
|
334
334
|
message.setGroupName(sectionBasedGroupName);
|
|
335
|
-
const
|
|
336
|
-
const
|
|
337
|
-
const
|
|
338
|
-
const
|
|
339
|
-
|
|
335
|
+
const view = UI5Element.getElementById(this._getViewId(this.getId()));
|
|
336
|
+
const viewContextPath = view?.getBindingContext()?.getPath();
|
|
337
|
+
const messageTargetPropertyName = messageObject.getTargets()[0]?.split("/").pop();
|
|
338
|
+
const internalModel = view?.getModel("internal");
|
|
339
|
+
const internalModelMessageTargetPropertyPath = internalModel?.getProperty("/messageTargetPropertyPath");
|
|
340
|
+
const internalModelMessageTargetPropertyContextPath = internalModelMessageTargetPropertyPath?.substring(0, internalModelMessageTargetPropertyPath.lastIndexOf("/"));
|
|
341
|
+
// activeTitlePress should only be triggered in forward navigation and not in back navigation
|
|
342
|
+
if (internalModelMessageTargetPropertyContextPath && messageTargetPropertyName && viewContextPath && messageTargetPropertyName === internalModelMessageTargetPropertyPath.split("/").pop() && viewContextPath.length >= internalModelMessageTargetPropertyContextPath.length && viewContextPath.startsWith(internalModelMessageTargetPropertyContextPath)) {
|
|
340
343
|
this.oMessagePopover.fireActiveTitlePress({
|
|
341
344
|
item: message
|
|
342
345
|
});
|
|
343
|
-
|
|
346
|
+
internalModel.setProperty("/messageTargetPropertyPath", false);
|
|
344
347
|
}
|
|
345
348
|
}
|
|
346
349
|
this.oItemBinding.attachChange(this._setMessageData, this);
|
|
@@ -669,11 +672,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
669
672
|
this.fireEvent("messageChange", {
|
|
670
673
|
iMessageLength: 0
|
|
671
674
|
});
|
|
672
|
-
const view = UI5Element.getElementById(this.sViewId);
|
|
673
|
-
if (view) {
|
|
674
|
-
// If there are no messages to show, we reset 'messageTargetProperty'.
|
|
675
|
-
view.getModel("internal").setProperty("/messageTargetProperty", undefined);
|
|
676
|
-
}
|
|
677
675
|
}
|
|
678
676
|
|
|
679
677
|
/**
|
|
@@ -840,9 +838,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
840
838
|
return undefined;
|
|
841
839
|
} else {
|
|
842
840
|
// control not found on table
|
|
843
|
-
const
|
|
844
|
-
if (
|
|
845
|
-
oView.getModel("internal").setProperty("/
|
|
841
|
+
const errorPropertyPath = oMessage.getTargets()[0];
|
|
842
|
+
if (errorPropertyPath) {
|
|
843
|
+
oView.getModel("internal").setProperty("/messageTargetPropertyPath", errorPropertyPath);
|
|
846
844
|
}
|
|
847
845
|
if (this._navigationConfigured(targetMdcTable)) {
|
|
848
846
|
return oView.getController()._routing.navigateForwardToContext(oTargetRow.getBindingContext());
|
|
@@ -1031,9 +1029,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1031
1029
|
this.setFocusToControl(oTargetField);
|
|
1032
1030
|
return undefined;
|
|
1033
1031
|
} else {
|
|
1034
|
-
const
|
|
1035
|
-
if (
|
|
1036
|
-
view.getModel("internal").setProperty("/
|
|
1032
|
+
const errorPropertyPath = message.getTargets()[0];
|
|
1033
|
+
if (errorPropertyPath) {
|
|
1034
|
+
view.getModel("internal").setProperty("/messageTargetPropertyPath", errorPropertyPath);
|
|
1037
1035
|
}
|
|
1038
1036
|
if (targetMdcTable && this._navigationConfigured(targetMdcTable)) {
|
|
1039
1037
|
return view.getController()._routing.navigateForwardToContext(oTargetRow.getBindingContext());
|
|
@@ -1498,4 +1496,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
1498
1496
|
}), _class2)) || _class);
|
|
1499
1497
|
return MessageButton;
|
|
1500
1498
|
}, false);
|
|
1501
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwibWVzc2FnZVRhcmdldFByb3BlcnR5Iiwic3BsaXQiLCJwb3AiLCJmaXJlQWN0aXZlVGl0bGVQcmVzcyIsIml0ZW0iLCJiSW5jbHVkZVRhYmxlR3JvdXBOYW1lIiwic2luZ2xlU3Vic2VjdGlvbkluUGFnZUxheW91dCIsImdldFZpZXdEYXRhIiwic2VjdGlvbkxheW91dCIsIm11bHRpU3Vic2VjdGlvbkluVGFiTGF5b3V0IiwiYmxvY2siLCJnZXRCbG9ja3MiLCJjb250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJibG9ja3MiLCJnZXRNYWluQ29udGVudCIsIkZ1bmN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaiIsImsiLCJhVmlzaWJsZVNlY3Rpb25zIiwiYklzR2VuZXJhbEdyb3VwTmFtZSIsInNob3VsZEJyZWFrIiwib01lc3NhZ2VPYmplY3QiLCJfZ2V0R2VuZXJhbEdyb3VwVGV4dCIsImFDb250cm9scyIsImdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uIiwib1RhcmdldGVkQ29udHJvbCIsInBlcnNpc3RlbnQiLCJnZXRHcm91cE5hbWUiLCJfZmluZFRhcmdldEZvck1lc3NhZ2UiLCJ2aWV3UGF0aCIsIm1lc3NhZ2VUYXJnZXRQYXRoIiwiaW5jbHVkZXMiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aCIsIm9Db250ZXh0UGF0aE1ldGFkYXRhIiwiJGtpbmQiLCJfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyIsImdldE1vcmVCbG9ja3MiLCJzdWJCbG9jayIsImdldEFjdGlvbnMiLCJhY3Rpb25zIiwiYVNlY3Rpb25zIiwiaVNlY3Rpb24iLCJpU3ViU2VjdGlvbiIsIm9BbGxCbG9ja3MiLCJfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic0NvbnRyb2xJZCIsIm9Db250cm9sIiwiVmlldyIsIl9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uIiwib0RpYWdub3Npc1RpdGxlIiwic2V0QXN5bmNEZXNjcmlwdGlvbkhhbmRsZXIiLCJjb25maWciLCJzTG9uZ1RleHRVcmwiLCJnZXRMb25ndGV4dFVybCIsImpRdWVyeSIsImFqYXgiLCJ1cmwiLCJzdWNjZXNzIiwiZGF0YSIsInNEaWFnbm9zaXNUZXh0IiwiZ2V0SHRtbFRleHQiLCJvbGREZXNjcmlwdGlvbiIsImdldERlc2NyaXB0aW9uIiwic2V0RGVzY3JpcHRpb24iLCJwcm9taXNlIiwic0Vycm9yIiwicmVqZWN0IiwicHJvY2Vzc1RhYmxlQ29sdW1uUHJvcGVydGllcyIsInRhYmxlQ29sUHJvcGVydHkiLCJyb3dJbmZvcm1hdGlvbiIsInRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbiIsImdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbiIsInRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoIiwidGFibGVDb2xUZXh0QXJyYW5nZW1lbnQiLCJsYWJlbFdpdGhWYWx1ZSIsImdldFRhYmxlQ29sVmFsdWUiLCJjb21wdXRlQ29sdW1uSW5mbyIsInRhYmxlVGFyZ2V0Q29sTmFtZSIsIm1zZ09iaiIsImNvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsImF2YWlsYWJpbGl0eSIsImdldFR5cGUiLCJqb2luIiwiX25hdmlnYXRpb25Db25maWd1cmVkIiwiZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyIsIl9yZWYiLCJ2aXNpYmlsaXR5IiwiZmllbGRzQWZmZWN0ZWRUaXRsZSIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsImZpZWxkQWZmZWN0ZWRUZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwiZGlhZ25vc2lzVGl0bGUiLCJ1SU1lc3NhZ2VEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiZGlhZ25vc2lzVGV4dCIsIm1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQiLCJoYW5kbGVOb01lc3NhZ2VzIiwic2V0VmlzaWJsZSIsImZpcmVFdmVudCIsImlNZXNzYWdlTGVuZ3RoIiwiY2xlYXJUaW1lb3V0IiwiX3NldE1lc3NhZ2VEYXRhVGltZW91dCIsInNJY29uIiwib01lc3NhZ2VzIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIm9SZXNvdXJjZUJ1bmRsZSIsInNCdXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkRlZmF1bHQiLCJzTWVzc2FnZUtleSIsInNUb29sdGlwVGV4dCIsInNNZXNzYWdlVGV4dCIsInRvU3RyaW5nIiwiTWVzc2FnZVR5cGUiLCJOZWdhdGl2ZSIsIkNyaXRpY2FsIiwiTmV1dHJhbCIsInRvdGFsTnVtYmVyT2ZNZXNzYWdlcyIsInNldFRleHQiLCJzZXRUb29sdGlwIiwic2V0SWNvbiIsInNldFR5cGUiLCJvUGFnZVJlYWR5IiwiZ2V0Q29udHJvbGxlciIsInBhZ2VSZWFkeSIsIndhaXRQYWdlUmVhZHkiLCJuYXZpZ2F0ZUJhY2siLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvSXRlbSIsImdldFBhcmFtZXRlciIsIm9NZXNzYWdlIiwiYklzQmFja2VuZE1lc3NhZ2UiLCJzU2VjdGlvblRpdGxlIiwiX2RlZmF1bHRGb2N1cyIsIm1kY1RhYmxlIiwiZm9jdXNJbmZvIiwicHJldmVudFNjcm9sbCIsInRhcmdldEluZm8iLCJmb2N1cyIsInN1YlNlY3Rpb25zIiwidmlzaWJsZVNlY3Rpb25zIiwiY29udHJvbHMiLCJvVGFyZ2V0TWRjVGFibGUiLCJjb250cm9sSWRzIiwiY29udHJvbElkIiwiY29udHJvbCIsInBhcmVudENvbnRyb2wiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9Db250ZXh0IiwiX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25UYWJsZUluSWNvblRhYkJhck1vZGUiLCJvUmVmRXJyb3JDb250ZXh0Iiwib1JlZkVycm9yIiwiX3NldEZvY3VzT25UYXJnZXRGaWVsZCIsInRhcmdldE1kY1RhYmxlIiwiaVJvd0luZGV4IiwiYVRhcmdldE1kY1RhYmxlUm93IiwiX2dldE1kY1RhYmxlUm93cyIsImlGaXJzdFZpc2libGVSb3ciLCJfZ2V0R3JpZFRhYmxlIiwiZ2V0Rmlyc3RWaXNpYmxlUm93Iiwib1RhcmdldFJvdyIsIm9UYXJnZXRDZWxsIiwiZ2V0VGFyZ2V0Q2VsbCIsInNldEZvY3VzVG9Db250cm9sIiwiZXJyb3JQcm9wZXJ0eSIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c09uVGFyZ2V0RmllbGQiLCJmb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbldpdGhUaGVDb250cm9sIiwiZmluZCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZSIsImhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uIiwiZ2V0Q29udHJvbElkcyIsImZpbmRTdWJTZWN0aW9uIiwic2V0TW9kZSIsImdyb3VwTmFtZXMiLCJmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wiLCJ0aXRsZSIsImdldFRpdGxlIiwic29tZSIsInRhcmdldFJvdyIsImhhc05vbkVkaXRhYmxlRmllbGQiLCJnZXRFZGl0YWJsZSIsImlzQ29udHJvbEluVGFibGUiLCJlbGVtIiwiYUFsbFZpZXdFbGVtZW50cyIsImFFcnJvbmVvdXNDb250cm9scyIsImdldERvbVJlZiIsImFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzIiwiQ29sdW1uTGlzdEl0ZW0iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvVGFyZ2V0RmllbGQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRNZXNzYWdlUmFuayIsImFFbGVtZW50cyIsImFBbGxFbGVtZW50cyIsInNlY3Rpb25SYW5rIiwiX2ZuRmlsdGVyVXBvbklkIiwiZ2V0Q29udHJvbElkIiwiZ2V0VmlzaWJsZSIsImhhc093blByb3BlcnR5Iiwic2VjdGlvbk5hbWUiLCJzdWJTZWN0aW9uTmFtZSIsImdldFBlcnNpc3RlbnQiLCJfZmlsdGVyT3V0TWVzc2FnZXNJbkRpYWxvZyIsImZuVGVzdCIsImFDb250cm9sSWRzIiwiaXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2ciLCJGaWx0ZXIiLCJwYXRoIiwiY2FzZVNlbnNpdGl2ZSIsIl9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiYm91bmRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzIiwiX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24iLCJnZXRJZHNPZkZpZWxzZFdpdGhFcnJvclZhbGlkYXRpb24iLCJ2YWxpZGF0aW9uIiwibWF0Y2giLCJmaWx0ZXJzIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiYW5kIiwib1ZhbGlkYXRpb25GaWx0ZXJzIiwiaGlkZGVuRHJhZnRGaWx0ZXIiLCJvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIiLCJvRmlsdGVycyIsInNQYXRoIiwib1NvcnRlciIsIm9EaWFsb2dGaWx0ZXIiLCJvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMiLCJhVXNlckRlZmluZWRGaWx0ZXIiLCJhQ3VzdG9tRmlsdGVycyIsInZhbHVlMiIsIm9CaW5kaW5nQ29udGV4dCIsIm1lc3NhZ2VCdXR0b25IZWxwZXIiLCJnZXRDaGVja0NvbnRyb2xJblZpZXdGaWx0ZXIiLCJvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzIiwiZmlsdGVyQXJyYXkiLCJ2aWV3Q29udGV4dCIsImVkaXRGbG93IiwiZ2V0Um9vdENvbnRleHQiLCJnZXRIaWRkZW5EcmFmdFVzZUNhc2VGaWx0ZXIiLCJ2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIiLCJTdGFydHNXaXRoIiwib1ZhbGlkYXRpb25Db250ZXh0RGlhbG9nRmlsdGVycyIsIlNvcnRlciIsIm9iajEiLCJvYmoyIiwicmFua0EiLCJyYW5rQiIsInNvcnQiLCJfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwic1NlbGVjdGVkU2VjdGlvbklkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib1RhYmxlQ29udGV4dCIsIm9PUENvbnRleHQiLCJiU2hvdWxkV2FpdEZvclRhYmxlUmVmcmVzaCIsIm9FbGVtZW50Iiwib1BhcmVudEVsZW1lbnQiLCJvTWRjVGFibGUiLCJvVGFibGVSb3ciLCJnZXRUYWJsZSIsImZpbmRJbmRleCIsImdldFRhcmdldENlbGxJbmRleCIsImVsdCIsImdldENlbGxzIiwiY2VsbCIsImdldFRhcmdldENvbHVtbkluZGV4IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldENlbGxJbmRleCIsInRhcmdldENlbGxJZCIsInRhYmxlQ29sdW1ucyIsImNvbHVtbiIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJzZWFyY2giLCJjb21wb25lbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJuYXZPYmplY3QiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldE5hdmlnYXRpb24iLCJzdWJPUENvbmZpZ3VyZWQiLCJuYXZDb25maWd1cmVkIiwiZGV0YWlsIiwicm91dGUiLCJnZXRSb3dTZXR0aW5ncyIsImdldFJvd0FjdGlvbnMiLCJtZXNzYWdlUG9wb3ZlciIsImZuRm9jdXMiLCJpc09wZW4iLCJmbk9uQ2xvc2UiLCJkZXRhY2hFdmVudCIsImF0dGFjaEV2ZW50IiwiY2xvc2UiLCJ3YXJuaW5nIiwiZXNjYXBlIiwiU3RyaW5nIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlQnV0dG9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhcmdldFRhYmxlSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyB0eXBlIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpZWxkV3JhcHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWVsZFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VGaWx0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUZpbHRlclwiO1xuaW1wb3J0IE1lc3NhZ2VQb3BvdmVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21lc3NhZ2VzL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbHVtblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgJEJ1dHRvblNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ29sdW1uTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0NvbHVtbkxpc3RJdGVtXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVBvcG92ZXIkQWN0aXZlVGl0bGVQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBSZXNwb25zaXZlVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBtZGNGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRlbnQgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgUm93IGZyb20gXCJzYXAvdWkvdGFibGUvUm93XCI7XG5pbXBvcnQgdHlwZSBVSVRhYmxlIGZyb20gXCJzYXAvdWkvdGFibGUvVGFibGVcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcIi4uL2NvbnRyb2xzL3NlY3Rpb24vU3ViU2VjdGlvblwiO1xuaW1wb3J0IG1lc3NhZ2VCdXR0b25IZWxwZXIgZnJvbSBcIi4vTWVzc2FnZUJ1dHRvbkhlbHBlclwiO1xuXG50eXBlIE1lc3NhZ2VDb3VudCA9IHtcblx0RXJyb3I6IG51bWJlcjtcblx0V2FybmluZzogbnVtYmVyO1xuXHRTdWNjZXNzOiBudW1iZXI7XG5cdEluZm9ybWF0aW9uOiBudW1iZXI7XG59O1xuXG50eXBlICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MgPSAkQnV0dG9uU2V0dGluZ3MgJiB7XG5cdG1lc3NhZ2VDaGFuZ2U6IEZ1bmN0aW9uO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlcy5NZXNzYWdlQnV0dG9uXCIpXG5jbGFzcyBNZXNzYWdlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0Y29uc3RydWN0b3IoaWQ/OiBzdHJpbmcgfCAkTWVzc2FnZUJ1dHRvblNldHRpbmdzLCBzZXR0aW5ncz86ICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN1cGVyKGlkLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MubWVzc2FnZXMuTWVzc2FnZUZpbHRlclwiLCBtdWx0aXBsZTogdHJ1ZSwgc2luZ3VsYXJOYW1lOiBcImN1c3RvbUZpbHRlclwiIH0pXG5cdGN1c3RvbUZpbHRlcnMhOiBNZXNzYWdlRmlsdGVyO1xuXG5cdEBldmVudCgpXG5cdG1lc3NhZ2VDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRwdWJsaWMgb01lc3NhZ2VQb3BvdmVyITogTWVzc2FnZVBvcG92ZXI7XG5cblx0cHVibGljIG9JdGVtQmluZGluZyE6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNHZW5lcmFsR3JvdXBUZXh0ID0gXCJcIjtcblxuXHRwcml2YXRlIF9zZXRNZXNzYWdlRGF0YVRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHNWaWV3SWQgPSBcIlwiO1xuXG5cdHByaXZhdGUgc0xhc3RBY3Rpb25UZXh0ID0gXCJcIjtcblxuXHRwdWJsaWMgaXNIaWRkZW5EcmFmdEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyk7XG5cdFx0dGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IChcblx0XHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0XG5cdFx0KT8uZW5hYmxlZDtcblx0XHQvL3ByZXNzIGV2ZW50IGhhbmRsZXIgYXR0YWNoZWQgdG8gb3BlbiB0aGUgbWVzc2FnZSBwb3BvdmVyXG5cdFx0dGhpcy5hdHRhY2hQcmVzcyh0aGlzLmhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MsIHRoaXMpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyID0gbmV3IE1lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcgPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHR0aGlzLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdGNvbnN0IG1lc3NhZ2VCdXR0b25JZCA9IHRoaXMuZ2V0SWQoKTtcblx0XHRpZiAobWVzc2FnZUJ1dHRvbklkKSB7XG5cdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBcIm1lc3NhZ2VCdXR0b25JZFwiLCB2YWx1ZTogbWVzc2FnZUJ1dHRvbklkIH0pKTsgLy8gVE9ETyBjaGVjayBmb3IgY3VzdG9tIGRhdGEgdHlwZVxuXHRcdH1cblx0XHR0aGlzLmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSh0aGlzLl9hcHBseUZpbHRlcnNBbmRTb3J0LmJpbmQodGhpcykpO1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmF0dGFjaEFjdGl2ZVRpdGxlUHJlc3ModGhpcy5fYWN0aXZlVGl0bGVQcmVzcy5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgTWVzc2FnZUJ1dHRvbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0V2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0aGFuZGxlTWVzc2FnZVBvcG92ZXJQcmVzcyhvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnRvZ2dsZShvRXZlbnQuZ2V0U291cmNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gdGhleSBiZWxvbmcgdG8uXG5cdCAqIFRoaXMgbWV0aG9kIGZvcmNlIHRoZSBsb2FkaW5nIG9mIGNvbnRleHRzIGZvciBhbGwgdGFibGVzIGJlZm9yZSB0byBhcHBseSB0aGUgZ3JvdXBpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBDdXJyZW50IHZpZXcuXG5cdCAqIEByZXR1cm5zIFJldHVybiBwcm9taXNlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5R3JvdXBpbmdBc3luYyhvVmlldzogRkVWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYVdhaXRGb3JEYXRhOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRjb25zdCBvVmlld0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzID0gKHZpZXc6IFZpZXcpOiB7IHRhYmxlOiBNRENUYWJsZTsgc3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfVtdID0+IHtcblx0XHRcdGNvbnN0IG9SZXM6IHsgdGFibGU6IE1EQ1RhYmxlOyBzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9W10gPSBbXTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub0l0ZW1CaW5kaW5nLmdldENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvVmlld0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRpZiAob1ZpZXdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlOiBDb250cm9sID0gdmlldy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dChvT2JqZWN0UGFnZSkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvRWxlbS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VsZW1lQmluZGluZ1BhdGggPSBgJHtvVmlld0NvbnRleHQuZ2V0UGF0aCgpfS8ke29FbGVtLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCl9YDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFNZXNzYWdlc1tpXS50YXJnZXQuaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzLnB1c2goeyB0YWJsZTogb0VsZW0sIHN1YnNlY3Rpb246IG9TdWJTZWN0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlcztcblx0XHR9O1xuXHRcdC8vIFNlYXJjaCBmb3IgdGFibGUgcmVsYXRlZCB0byBNZXNzYWdlcyBhbmQgaW5pdGlhbGl6ZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYXJlbnQgc3Vic2VjdGlvbiB0byByZXRyaWV2ZSB0aGUgZGF0YVxuXHRcdGNvbnN0IG9UYWJsZXMgPSBfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzLmJpbmQodGhpcykob1ZpZXcpO1xuXHRcdG9UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoX29UYWJsZSkge1xuXHRcdFx0Y29uc3Qgb01EQ1RhYmxlID0gX29UYWJsZS50YWJsZSxcblx0XHRcdFx0b1N1YnNlY3Rpb24gPSBfb1RhYmxlLnN1YnNlY3Rpb247XG5cdFx0XHRpZiAoIW9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpIHx8IG9NRENUYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgIT09IG9WaWV3QmluZGluZ0NvbnRleHQ/LmdldFBhdGgoKSkge1xuXHRcdFx0XHRvU3Vic2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChvVmlld0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKCFvTURDVGFibGUuZ2V0Um93QmluZGluZygpLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0XHRcdGFXYWl0Rm9yRGF0YS5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdG9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCkuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgd2FpdEZvckdyb3VwaW5nQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FwcGx5R3JvdXBpbmcoKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Rm9yRGF0YSk7XG5cdFx0XHRvVmlldy5nZXRNb2RlbCgpLmNoZWNrTWVzc2FnZXMoKTtcblx0XHRcdGF3YWl0IHdhaXRGb3JHcm91cGluZ0FwcGxpZWQ7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBncm91cGluZyB0aGUgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2VQb3BPdmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIHRoZSBtZXNzYWdlcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHRoZXkgYmVsb25nIHRvLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2FwcGx5R3JvdXBpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXQodGhpcywgdGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0aWYgKCF0aGlzLm9PYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBzZWN0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdGNvbnN0IGVuYWJsZUJpbmRpbmcgPSB0aGlzLl9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXMsIGZhbHNlKTtcblx0XHRpZiAoZW5hYmxlQmluZGluZykge1xuXHRcdFx0dGhpcy5fZm5FbmFibGVCaW5kaW5ncyhzZWN0aW9uKTtcblx0XHR9XG5cdFx0Ly9DbGVhciBtZXNzYWdlVGFyZ2V0UHJvcGVydHlcblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKTtcblx0XHRjb25zdCB1SU1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dUlNb2RlbD8uc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5XCIsIHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHJlZkVycm9yIG9iamVjdC5cblx0ICogVGhlIHJlZkVycm9yIGNvbnRhaW5zIGEgbWFwIHRvIHN0b3JlIHRoZSBpbmRleGVzIG9mIHRoZSByb3dzIHdpdGggZXJyb3JzLlxuXHQgKiBAcGFyYW0gb1RhYmxlIFRoZSB0YWJsZSBmb3Igd2hpY2ggd2Ugd2FudCB0byBnZXQgdGhlIHJlZkVycm9yIE9iamVjdC5cblx0ICogQHJldHVybnMgQ29udGV4dCBvZiB0aGUgcmVmRXJyb3IuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSZWZFcnJvckNvbnRleHQob1RhYmxlOiBNRENUYWJsZSk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly9pbml0aWFsaXplIHRoZSByZWZFcnJvciBwcm9wZXJ0eSBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0aWYgKCFvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJyZWZFcnJvclwiKSkge1xuXHRcdFx0b01vZGVsLnNldFByb3BlcnR5KFwicmVmRXJyb3JcIiwge30sIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpISk7XG5cdFx0fVxuXHRcdGNvbnN0IHNSZWZFcnJvckNvbnRleHRQYXRoID1cblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQYXRoKCkgK1xuXHRcdFx0XCIvcmVmRXJyb3IvXCIgK1xuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKS5yZXBsYWNlKFwiL1wiLCBcIiRcIikgK1xuXHRcdFx0XCIkXCIgK1xuXHRcdFx0b1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCkucmVwbGFjZShcIi9cIiwgXCIkXCIpO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb01vZGVsLmdldENvbnRleHQoc1JlZkVycm9yQ29udGV4dFBhdGgpO1xuXHRcdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJcIikpIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShcIlwiLCB7fSwgb0NvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0NvbnRleHQ7XG5cdH1cblxuXHRfdXBkYXRlSW50ZXJuYWxNb2RlbChcblx0XHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlT2JqZWN0OiBNZXNzYWdlLFxuXHRcdGlzQ3JlYXRpb25Sb3c/OiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGxldCB0ZW1wO1xuXHRcdGlmIChpc0NyZWF0aW9uUm93KSB7XG5cdFx0XHR0ZW1wID0ge1xuXHRcdFx0XHRyb3dJbmRleDogXCJDcmVhdGlvblJvd1wiLFxuXHRcdFx0XHR0YXJnZXRDb2xQcm9wZXJ0eTogdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA/IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgOiBcIlwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ZW1wID0ge1xuXHRcdFx0XHRyb3dJbmRleDogdGFibGVSb3dDb250ZXh0ID8gcm93SW5kZXggOiBcIlwiLFxuXHRcdFx0XHR0YXJnZXRDb2xQcm9wZXJ0eTogdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA/IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgOiBcIlwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0Y29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KHRhYmxlKTtcblx0XHQvL3dlIGZpcnN0IHJlbW92ZSB0aGUgZW50cmllcyB3aXRoIG9ic29sZXRlIG1lc3NhZ2UgaWRzIGZyb20gdGhlIGludGVybmFsIG1vZGVsIGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBlcnJvciBpbmZvIDpcblx0XHRjb25zdCBhVmFsaWRNZXNzYWdlSWRzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHRsZXQgYU9ic29sZXRlTWVzc2FnZWxJZHM7XG5cdFx0aWYgKGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpKSB7XG5cdFx0XHRhT2Jzb2xldGVNZXNzYWdlbElkcyA9IE9iamVjdC5rZXlzKGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpKS5maWx0ZXIoZnVuY3Rpb24gKGludGVybmFsTWVzc2FnZUlkKSB7XG5cdFx0XHRcdHJldHVybiBhVmFsaWRNZXNzYWdlSWRzLmluZGV4T2YoaW50ZXJuYWxNZXNzYWdlSWQpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdFx0YU9ic29sZXRlTWVzc2FnZWxJZHMuZm9yRWFjaChmdW5jdGlvbiAob2Jzb2xldGVJZCkge1xuXHRcdFx0XHRkZWxldGUgY29udGV4dD8uZ2V0UHJvcGVydHkoXCJcIilbb2Jzb2xldGVJZF07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bW9kZWw/LnNldFByb3BlcnR5KFxuXHRcdFx0bWVzc2FnZU9iamVjdC5nZXRJZCgpLFxuXHRcdFx0T2JqZWN0LmFzc2lnbih7fSwgY29udGV4dD8uZ2V0UHJvcGVydHkobWVzc2FnZU9iamVjdC5nZXRJZCgpKSA/IGNvbnRleHQuZ2V0UHJvcGVydHkobWVzc2FnZU9iamVjdC5nZXRJZCgpKSA6IHt9LCB0ZW1wKSxcblx0XHRcdGNvbnRleHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBzZXRzIGdyb3VwcyBmb3IgdHJhbnNpZW50IG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdHJhbnNpZW50IG1lc3NhZ2UgZm9yIHdoaWNoIHdlIHdhbnQgdG8gY29tcHV0ZSBhbmQgc2V0IGdyb3VwLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3NldEdyb3VwTGFiZWxGb3JUcmFuc2llbnRNc2cobWVzc2FnZTogTWVzc2FnZUl0ZW0sIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHR0aGlzLnNMYXN0QWN0aW9uVGV4dCA9IHRoaXMuc0xhc3RBY3Rpb25UZXh0XG5cdFx0XHQ/IHRoaXMuc0xhc3RBY3Rpb25UZXh0XG5cdFx0XHQ6IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblxuXHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKGAke3RoaXMuc0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIG1lc3NhZ2VzIGFuZCBhZGRzIHRoZSBzdWJ0aXRsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2Ugd2UgdXNlIHRvIGNvbXB1dGUgdGhlIGdyb3VwIGFuZCBzdWJ0aXRsZS5cblx0ICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIFRoZSBzdWJzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gZWxlbWVudHMgTGlzdCBvZiBjb250cm9scyBmcm9tIGEgc3Vic2VjdGlvbiByZWxhdGVkIHRvIGEgbWVzc2FnZS5cblx0ICogQHBhcmFtIGhhc011bHRpcGxlU3ViU2VjdGlvbnMgVHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSBzdWJzZWN0aW9uIGluIHRoZSBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWUsIGlmIGFueS5cblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBjb250cm9sIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2NvbXB1dGVNZXNzYWdlR3JvdXBBbmRTdWJUaXRsZShcblx0XHRtZXNzYWdlOiBNZXNzYWdlSXRlbSxcblx0XHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0XHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRlbGVtZW50czogVUk1RWxlbWVudFtdLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHNlY3Rpb24pO1xuXHRcdHRoaXMub0l0ZW1CaW5kaW5nLmRldGFjaENoYW5nZSh0aGlzLl9zZXRNZXNzYWdlRGF0YSwgdGhpcyk7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSBhcyBNZXNzYWdlO1xuXHRcdGNvbnN0IHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IHRydWU7XG5cdFx0bGV0IGVsZW1lbnQ6IFVJNUVsZW1lbnQsXG5cdFx0XHR0YWJsZTogTURDVGFibGUgfCB1bmRlZmluZWQsXG5cdFx0XHR0YXJnZXRUYWJsZUluZm8gPSB7fSBhcyBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRcdFx0bCxcblx0XHRcdHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG5cdFx0XHR0YXJnZXRlZENvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0XHRpc0NyZWF0aW9uUm93OiBib29sZWFuO1xuXHRcdGNvbnN0IGlzQmFja0VuZE1lc3NhZ2UgPSBuZXcgUmVnRXhwKFwiXi9cIikudGVzdChtZXNzYWdlT2JqZWN0Py5nZXRUYXJnZXRzKClbMF0pO1xuXHRcdGlmIChpc0JhY2tFbmRNZXNzYWdlKSB7XG5cdFx0XHRmb3IgKGwgPSAwOyBsIDwgZWxlbWVudHMubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnRzW2xdO1xuXHRcdFx0XHR0YXJnZXRlZENvbnRyb2wgPSBlbGVtZW50O1xuXHRcdFx0XHRpZiAoZWxlbWVudC5pc0EoXCJzYXAubS5UYWJsZVwiKSB8fCAoZWxlbWVudCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0YWJsZSA9IGVsZW1lbnQuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0XHRcdFx0Y29uc3Qgcm93QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRjb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBhY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChyb3dCaW5kaW5nICYmIHJvd0JpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0ZWxlbWVudCxcblx0XHRcdFx0XHRcdFx0cm93QmluZGluZyxcblx0XHRcdFx0XHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwLFxuXHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvID0gb2JqLm9UYXJnZXRUYWJsZUluZm87XG5cdFx0XHRcdFx0XHRpZiAob2JqLnN1YlRpdGxlKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUob2JqLnN1YlRpdGxlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZShcblx0XHRcdFx0XHRcdFx0ISF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJlxuXHRcdFx0XHRcdFx0XHRcdCF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpICYmIC8vIGNoZWNrIGlmIHRoZSByb3djb250ZXh0IGlzIGFjdGl2ZVxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSAhPT1cblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRQcm9wZXJ0eShcInRhcmdldFwiKS5yZXBsYWNlKC9cXC8kLywgXCJcIikgLy8gY2hlY2sgaWYgdGhlIHRhcmdldCBvZiB0aGUgbWVzc2FnZSBpcyBub3QgdGhlIHJvdyBpdHNlbGYgKHJlbW92ZSB0aGUgbGFzdCAvIGlmIHByZXNlbnRzKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmICF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJvd0luZGV4ID0gdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiYgdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRyb3dJbmRleCxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZSh0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChtZXNzYWdlLmdldFN1YnRpdGxlKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdGxldCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRsZXQgcGFyZW50ID0gdGFyZ2V0ZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0d2hpbGUgKHBhcmVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudC5pc0E8Rm9ybUVsZW1lbnQ+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnQgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoZm9ybUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBmb3JtRWxlbWVudC5nZXRMYWJlbCgpO1xuXHRcdFx0XHRcdFx0XHRsZXQgbGFiZWxUZXh0ID0gXCJcIjtcblxuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxUZXh0ID0gbGFiZWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxUZXh0ID0gKGxhYmVsIGFzIExhYmVsKS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShsYWJlbFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vY2hlY2sgaWYgdGhlIHRhcmdldGVkIGNvbnRyb2wgaXMgYSBjaGlsZCBvZiBvbmUgb2YgdGhlIG90aGVyIGNvbnRyb2xzXG5cdFx0XHRcdFx0Y29uc3QgaXNUYXJnZXRlZENvbnRyb2xPcnBoYW4gPSBtZXNzYWdlSGFuZGxpbmcuYklzT3JwaGFuRWxlbWVudCh0YXJnZXRlZENvbnRyb2wsIGVsZW1lbnRzKTtcblx0XHRcdFx0XHRpZiAoaXNUYXJnZXRlZENvbnRyb2xPcnBoYW4pIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL1RoZXJlIGlzIG9ubHkgb25lIGVsdCBhcyB0aGlzIGlzIGEgZnJvbnRFbmQgbWVzc2FnZVxuXHRcdFx0dGFyZ2V0ZWRDb250cm9sID0gZWxlbWVudHNbMF07XG5cdFx0XHR0YWJsZSA9IHRoaXMuX2dldE1kY1RhYmxlKHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHR0YXJnZXRUYWJsZUluZm8gPSB7fSBhcyBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRcdFx0aWYgKHRhYmxlKSB7XG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciA9IHRhYmxlLmdldEhlYWRlcigpO1xuXHRcdFx0XHRjb25zdCB0YXJnZXRDb2x1bW5JbmRleCA9IHRoaXMuX2dldFRhYmxlQ29sdW1uSW5kZXgodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID1cblx0XHRcdFx0XHR0YXJnZXRDb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldENvbHVtbkluZGV4ID4gLTFcblx0XHRcdFx0XHRcdD8gdGFibGUuZ2V0Q29sdW1ucygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRQcm9wZXJ0eUtleSgpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSA9XG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ICYmIHRhcmdldENvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0Q29sdW1uSW5kZXggPiAtMVxuXHRcdFx0XHRcdFx0PyB0YWJsZS5nZXRDb2x1bW5zKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldEhlYWRlcigpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aXNDcmVhdGlvblJvdyA9IHRoaXMuX2dldFRhYmxlUm93KHRhcmdldGVkQ29udHJvbCk/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgPz8gZmFsc2U7XG5cdFx0XHRcdGlmICghaXNDcmVhdGlvblJvdykge1xuXHRcdFx0XHRcdHJvd0luZGV4ID0gdGhpcy5fZ2V0VGFibGVSb3dJbmRleCh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgPVxuXHRcdFx0XHRcdFx0cm93SW5kZXggIT09IHVuZGVmaW5lZCA/IHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHNbcm93SW5kZXhdIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdWJ0aXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlU3VidGl0bGUoXG5cdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGlzQ3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggPT09IDAgJiYgKHRhcmdldGVkQ29udHJvbCBhcyBtZGNGaWVsZCkuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCJcblx0XHRcdFx0XHRcdD8gKHRhcmdldGVkQ29udHJvbCBhcyBDb250cm9sKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly9zZXQgdGhlIHN1YnRpdGxlXG5cdFx0XHRcdGlmIChtZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKG1lc3NhZ2VTdWJ0aXRsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZSghIXRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKG1lc3NhZ2UsIHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LCB0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSwgdGFibGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0cm93SW5kZXgsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0aXNDcmVhdGlvblJvd1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdGNvbnN0IGluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IHRoaXMuX2NoZWNrTWVyZ2VMb2dpY0Zvck1lc3NhZ2VHcm91cGluZyhzZWN0aW9uLCBzdWJTZWN0aW9uLCBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zKTtcblx0XHRcdGNvbnN0IHNlY3Rpb25CYXNlZEdyb3VwTmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5jcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRcdFx0XHRzZWN0aW9uLFxuXHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zLFxuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdGluY2x1ZGVUYWJsZUdyb3VwTmFtZVxuXHRcdFx0KTtcblxuXHRcdFx0bWVzc2FnZS5zZXRHcm91cE5hbWUoc2VjdGlvbkJhc2VkR3JvdXBOYW1lKTtcblx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0Y29uc3QgdmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkIGFzIHN0cmluZyk7XG5cdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0UHJvcGVydHkgPSBtZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXSAmJiBtZXNzYWdlT2JqZWN0LmdldFRhcmdldHMoKVswXS5zcGxpdChcIi9cIikucG9wKCk7XG5cdFx0XHRjb25zdCB1SU1vZGVsID0gdmlldz8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHVJTW9kZWwgJiZcblx0XHRcdFx0dUlNb2RlbC5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlcIikgJiZcblx0XHRcdFx0bWVzc2FnZVRhcmdldFByb3BlcnR5ICYmXG5cdFx0XHRcdG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eSA9PT0gdUlNb2RlbC5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlcIilcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5maXJlQWN0aXZlVGl0bGVQcmVzcyh7IGl0ZW06IG1lc3NhZ2UgfSk7XG5cdFx0XHRcdHVJTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX3NldE1lc3NhZ2VEYXRhLCB0aGlzKTtcblx0XHRyZXR1cm4gdGFyZ2V0ZWRDb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdG8gY2hlY2sgaWYgdGhlIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24gaGFzIHNpbmdsZSB0YWJsZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBPYmplY3RQYWdlIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdFBhZ2Ugc3ViIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIFRydWUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgc3Vic2VjdGlvbiBpbiB0aGUgc2VjdGlvbi5cblx0ICogQHJldHVybnMgUmV0dXJucyBib29sZWFuIHZhbHVlIGZvciB0aGUgc2luZ2xlIGNvbnRyb2wgaW5zaWRlIHRoZSBzZWN0aW9uLCBieSBkZWZhdWx0IGl0IGlzIHRydWUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfY2hlY2tNZXJnZUxvZ2ljRm9yTWVzc2FnZUdyb3VwaW5nKFxuXHRcdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRcdHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdmlldyA9IHZpZXdJZCA/IChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykgOiB1bmRlZmluZWQ7XG5cdFx0bGV0IGJJbmNsdWRlVGFibGVHcm91cE5hbWUgPSB0cnVlO1xuXHRcdGNvbnN0IHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQgPVxuXHRcdFx0IWhhc011bHRpcGxlU3ViU2VjdGlvbnMgJiYgKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpPy5zZWN0aW9uTGF5b3V0ID09PSBcIlBhZ2VcIjtcblx0XHRjb25zdCBtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCA9XG5cdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zICYmICh2aWV3Py5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKT8uc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdFx0aWYgKHNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQpIHtcblx0XHRcdGNvbnN0IGJsb2NrID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBibG9jay5sZW5ndGggPT09IDEgPyAoYmxvY2tbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3QpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGNvbnRlbnQ/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobXVsdGlTdWJzZWN0aW9uSW5UYWJMYXlvdXQpIHtcblx0XHRcdGxldCBjb250ZW50O1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdC8vIEluIGNhc2Ugb2YgUmVmZXJlbmNlIEZhY2V0LCB0aGUgZmlyc3QgYmxvY2sgd2lsbCBiZSBTdWJTZWN0aW9uQmxvY2tcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxICYmIGJsb2Nrc1swXT8uaXNBPFN1YlNlY3Rpb25CbG9jaz4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBibG9ja3NbMF0uZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpIGFzIE1hbmFnZWRPYmplY3Q7XG5cdFx0XHRcdGlmIChjb250ZW50Py5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9XG5cdFx0XHRcdFx0XHQoY29udGVudCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcblx0XHRcdFx0XHRcdChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCk/LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGggPT09IDEgJiYgY29udGVudFswXT8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0YkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYkluY2x1ZGVUYWJsZUdyb3VwTmFtZTtcblx0fVxuXG5cdF9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMobWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10sIGVuYWJsZUJpbmRpbmc/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuXHRcdGxldCBzZWN0aW9uLCBhU3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0dGhpcy5zR2VuZXJhbEdyb3VwVGV4dCA9IHRoaXMuc0dlbmVyYWxHcm91cFRleHRcblx0XHRcdD8gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dFxuXHRcdFx0OiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHQvL0dldCBhbGwgc2VjdGlvbnMgZnJvbSB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgYVZpc2libGVTZWN0aW9ucyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCh0aGlzLm9PYmplY3RQYWdlTGF5b3V0ISk7XG5cdFx0aWYgKGFWaXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB2aWV3SWQgPyAoVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQpIGFzIFZpZXcpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiKTtcblx0XHRcdGlmIChzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHQob1ZpZXc/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwic0FjdGlvbk5hbWVcIiwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0bGV0IGJJc0dlbmVyYWxHcm91cE5hbWUgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKGogPSBhVmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0bGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IGFWaXNpYmxlU2VjdGlvbnNbal07XG5cdFx0XHRcdFx0YVN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNba107XG5cdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2U/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5fZ2V0R2VuZXJhbEdyb3VwVGV4dChvVmlldywgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gbWVzc2FnZUhhbmRsaW5nLmdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0KTtcblx0XHRcdFx0XHRcdGlmIChhQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ZWRDb250cm9sID0gdGhpcy5fY29tcHV0ZU1lc3NhZ2VHcm91cEFuZFN1YlRpdGxlKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0c2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250cm9scyxcblx0XHRcdFx0XHRcdFx0XHRhU3ViU2VjdGlvbnMubGVuZ3RoID4gMSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHdlIGZvdW5kIHRhYmxlIHRoYXQgbWF0Y2hlcyB3aXRoIHRoZSBtZXNzYWdlLCB3ZSBkb24ndCBzdG9wIHRoZSBsb29wXG5cdFx0XHRcdFx0XHRcdC8vIGluIGNhc2Ugd2UgZmluZCBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgKGVnIG1kYyBmaWVsZCkgdGhhdCBhbHNvIG1hdGNoIHdpdGggdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRlZENvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0XHQhb1RhcmdldGVkQ29udHJvbC5pc0EoXCJzYXAubS5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEob1RhcmdldGVkQ29udHJvbCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIilcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkQnJlYWsgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzaG91bGRCcmVhaykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChiSXNHZW5lcmFsR3JvdXBOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob01lc3NhZ2VPYmplY3QucGVyc2lzdGVudCAmJiBzQWN0aW9uTmFtZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKHRoaXMuc0dlbmVyYWxHcm91cFRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWVuYWJsZUJpbmRpbmcgJiYgbWVzc2FnZS5nZXRHcm91cE5hbWUoKSA9PT0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dCAmJiB0aGlzLl9maW5kVGFyZ2V0Rm9yTWVzc2FnZShtZXNzYWdlKSkge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdmlldyBwb3J0XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL0ZldGNoZXMgdGhlIGdyb3VwIG5hbWUgb2YgdGhlIG1lc3NhZ2UgYmFzZWQgb24gZW5hYmxlZG1lbnQgb2YgaGlkZGVuIGRyYWZ0IGFuZCBwYWdlIHdoZXJlIGVycm9yIGlzIHByZXNlbnQoY3VycmVudCBwYWdlL290aGVyIHBhZ2UpXG5cdF9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3OiBWaWV3IHwgdW5kZWZpbmVkLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgdmlld1BhdGggPSBvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXRQYXRoID0gb01lc3NhZ2VPYmplY3Q/LmdldFRhcmdldHMoKVswXTtcblx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCAmJiB2aWV3UGF0aCAmJiAhbWVzc2FnZVRhcmdldFBhdGguaW5jbHVkZXModmlld1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX09USEVSX1BBR0VTXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpICYmIG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRpZiAobWVzc2FnZU9iamVjdCAmJiBtZXNzYWdlT2JqZWN0LnRhcmdldCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMub09iamVjdFBhZ2VMYXlvdXQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRjb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChtZXNzYWdlT2JqZWN0LnRhcmdldCksXG5cdFx0XHRcdG9Db250ZXh0UGF0aE1ldGFkYXRhID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAob0NvbnRleHRQYXRoTWV0YWRhdGEgJiYgb0NvbnRleHRQYXRoTWV0YWRhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBiaW5kaW5ncyBvZiBzdWIgc2VjdGlvbiBjb250ZW50IChibG9ja3MsIG1vcmUgYmxvY2tzLCBhbmQgYWN0aW9ucykuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uXG5cdCAqL1xuXHRfZm5FbmFibGVTdWJTZWN0aW9uQmluZGluZyhzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQge1xuXHRcdHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRzdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X2ZuRW5hYmxlQmluZGluZ3MoYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IG9BbGxCbG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0aWYgKG9BbGxCbG9ja3MpIHtcblx0XHRcdFx0XHR0aGlzLl9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKG9TdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRcdHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZygpO1xuXHRcdFx0XHRcdChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LmdldEJpbmRpbmcoKVxuXHRcdFx0XHRcdFx0LmF0dGFjaERhdGFSZWNlaXZlZCh0aGlzLl9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcuYmluZCh0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFNZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0dGhpcy5fY2hlY2tDb250cm9sSWRJblNlY3Rpb25zKGFNZXNzYWdlcywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IHJldHJpZXZlcyB0aGUgdmlldyBJRCAoSFRNTFZpZXcvWE1MVmlldy9KU09Odmlldy9KU1ZpZXcvVGVtcGxhdGV2aWV3KSBvZiBhbnkgY29udHJvbC5cblx0ICogQHBhcmFtIHNDb250cm9sSWQgSUQgb2YgdGhlIGNvbnRyb2wgbmVlZGVkIHRvIHJldHJpZXZlIHRoZSB2aWV3IElEXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IElEIG9mIHRoZSBjb250cm9sXG5cdCAqL1xuXHRfZ2V0Vmlld0lkKHNDb250cm9sSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHNWaWV3SWQsXG5cdFx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGwgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykge1xuXHRcdFx0XHRzVmlld0lkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gc1ZpZXdJZDtcblx0fVxuXG5cdF9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKG9EaWFnbm9zaXNUaXRsZTogRm9ybWF0dGVkVGV4dCk6IHZvaWQge1xuXHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLnNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyKGZ1bmN0aW9uIChjb25maWc6IHtcblx0XHRcdGl0ZW06IE1lc3NhZ2VJdGVtO1xuXHRcdFx0cHJvbWlzZToge1xuXHRcdFx0XHRyZXNvbHZlOiBGdW5jdGlvbjtcblx0XHRcdFx0cmVqZWN0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0fSkge1xuXHRcdFx0Ly8gSGVyZSB3ZSBjYW4gZmV0Y2ggdGhlIGRhdGEgYW5kIGNvbmNhdGVuYXRlIGl0IHRvIHRoZSBvbGQgb25lXG5cdFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgbG9uZ3RleHRVcmwgZmV0Y2hpbmcgd2lsbCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICh3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW91cilcblx0XHRcdC8vIEhlcmUgYXMgd2UgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGVmYXVsdCBhc3luYyBoYW5kbGVyLCB3aGljaCBmZXRjaGVzIGFuZCByZXBsYWNlcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1cblx0XHRcdC8vIHdlIGNhbiBtYW51YWxseSBtb2RpZnkgaXQgdG8gaW5jbHVkZSB3aGF0ZXZlciBuZWVkZWQuXG5cdFx0XHRjb25zdCBzTG9uZ1RleHRVcmwgPSBjb25maWcuaXRlbS5nZXRMb25ndGV4dFVybCgpO1xuXHRcdFx0aWYgKHNMb25nVGV4dFVybCkge1xuXHRcdFx0XHRqUXVlcnkuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJHRVRcIixcblx0XHRcdFx0XHR1cmw6IHNMb25nVGV4dFVybCxcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRGlhZ25vc2lzVGV4dCA9IG9EaWFnbm9zaXNUaXRsZS5nZXRIdG1sVGV4dCgpICsgZGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZERlc2NyaXB0aW9uID0gY29uZmlnLml0ZW0uZ2V0RGVzY3JpcHRpb24oKSA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uZmlnLml0ZW0uc2V0RGVzY3JpcHRpb24oYCR7b2xkRGVzY3JpcHRpb259JHtzRGlhZ25vc2lzVGV4dH1gKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzRXJyb3IgPSBgQSByZXF1ZXN0IGhhcyBmYWlsZWQgZm9yIGxvbmcgdGV4dCBkYXRhLiBVUkw6ICR7c0xvbmdUZXh0VXJsfWA7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdFx0XHRcdGNvbmZpZy5wcm9taXNlLnJlamVjdChzRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVDb2xQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyByb3dJbmZvcm1hdGlvblxuXHQgKi9cblxuXHRwcm9jZXNzVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKHRhYmxlOiBUYWJsZSwgdGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgdGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgcm93SW5mb3JtYXRpb24gPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0XHRcdHRhYmxlLFxuXHRcdFx0dGFibGVSb3dDb250ZXh0LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0Y29uc3QgdGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGggPSB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdD8gdGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uLmdldE9iamVjdChcIiRQYXRoXCIpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBcnJhbmdlbWVudCA9XG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCAmJiB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb25cblx0XHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudC8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBsYWJlbFdpdGhWYWx1ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sVmFsdWUoXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0dGFibGVDb2xQcm9wZXJ0eVxuXHRcdCk7XG5cdFx0cm93SW5mb3JtYXRpb24gKz0gYCR7bGFiZWxXaXRoVmFsdWV9YDtcblxuXHRcdHJldHVybiByb3dJbmZvcm1hdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBjb21wdXRlcyB0aGUgY29sdW1uIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSByb3dJbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMgY29sdW1uSW5mb1xuXHQgKi9cblxuXHRjb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlOiBNZXNzYWdlSXRlbSwgdGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJvd0luZm9ybWF0aW9uOiBzdHJpbmdbXSwgdGFibGU6IFRhYmxlKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3QgbXNnT2JqID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IGNvbEZyb21UYWJsZVNldHRpbmdzID0gbWVzc2FnZUhhbmRsaW5nLmZldGNoQ29sdW1uSW5mbyhtc2dPYmosIHRhYmxlKTtcblx0XHRsZXQgY29sdW1uSW5mbyA9IFwiXCI7XG5cblx0XHRpZiAodGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHQvLyBpZiBjb2x1bW4gaW4gcHJlc2VudCBpbiB0YWJsZSBkZWZpbml0aW9uXG5cdFx0XHRjb2x1bW5JbmZvID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX06ICR7dGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdFx0fSBlbHNlIGlmIChjb2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdFx0aWYgKGNvbEZyb21UYWJsZVNldHRpbmdzLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaW4gbmVpdGhlciBpbiB0YWJsZSBkZWZpbml0aW9uIG5vciBwZXJzb25hbGl6YXRpb25cblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NfRVJST1JcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0XHRyb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHRcdD8gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDXCIpfSAke3Jvd0luZm9ybWF0aW9uLmpvaW4oXCIsIFwiKX1gICsgXCIuXCJcblx0XHRcdFx0XHRcdFx0OiBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9YCArIFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb2x1bW4gaXMgbm90IGluIHRhYmxlIGRlZmluaXRpb24gYnV0IGluIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHQvL2lmIG5vIG5hdmlnYXRpb24gdG8gc3ViIG9wIHRoZW4gcmVtb3ZlIGxpbmsgdG8gZXJyb3IgZmllbGQgQkNQIDogMjI4MDE2ODg5OVxuXHRcdFx0XHRpZiAoIXRoaXMuX25hdmlnYXRpb25Db25maWd1cmVkKHRhYmxlKSkge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0QWN0aXZlVGl0bGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHtcblx0XHRcdFx0XHRjb2xGcm9tVGFibGVTZXR0aW5ncy5sYWJlbFxuXHRcdFx0XHR9ICgke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCIpfSlgO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGRpc3BsYXlzIHRoZSByb3cgaW5mb3JtYXRpb24gb2YgdGhlIGVycm9yIGV4aXN0aW5nIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHRhYmxlUm93Q29udGV4dFxuXHQgKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblxuXHRfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0dGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCB0YWJsZUNvbFByb3BlcnR5ID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyh0YWJsZVJvd0NvbnRleHQpO1xuXG5cdFx0Y29uc3Qgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdID0gW107XG5cdFx0dGFibGVDb2xQcm9wZXJ0eT8uZm9yRWFjaCgoeyBrZXksIHZpc2liaWxpdHkgfSkgPT4ge1xuXHRcdFx0cm93SW5mb3JtYXRpb24ucHVzaCh0aGlzLnByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGUsIHRhYmxlUm93Q29udGV4dCwgW3sga2V5LCB2aXNpYmlsaXR5IH1dKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb21wdXRlQ29sdW1uSW5mbyhtZXNzYWdlLCB0YWJsZVRhcmdldENvbE5hbWUsIHJvd0luZm9ybWF0aW9uLCB0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZHNBZmZlY3RlZFRpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9GSUVMRFNfQUZGRUNURURfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdGxldCBmaWVsZEFmZmVjdGVkVGV4dDogc3RyaW5nO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHJvd0luZm9ybWF0aW9uKSAmJiByb3dJbmZvcm1hdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocm93SW5mb3JtYXRpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIElmIHRoZXJl4oCZcyBvbmx5IG9uZSBjb2x1bW4gaW4gdGhlIHRhYmxlLCBkaXNwbGF5IGl0IGluIGEgc2luZ2xlIGxpbmUuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTogJHtyb3dJbmZvcm1hdGlvbn08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCBkaXNwbGF5IHRoZW0gaW4gbXVsdGlwbGUgbGluZXMuXG5cdFx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gYCR7ZmllbGRzQWZmZWN0ZWRUaXRsZS5nZXRIdG1sVGV4dCgpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dcIlxuXHRcdFx0XHQpfTo8YnI+JmVtc3A7ICR7cm93SW5mb3JtYXRpb24uam9pbihcIjxicj4mZW1zcDsgXCIpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvID09IFwiXCIgfHwgIWNvbHVtbkluZm8pIHtcblx0XHRcdGZpZWxkQWZmZWN0ZWRUZXh0ID0gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiXG5cdFx0XHQpfTogJHt0YWJsZS5nZXRIZWFkZXIoKX08YnI+JHtjb2x1bW5JbmZvfTxicj5gO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpYWdub3Npc1RpdGxlID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0aHRtbFRleHQ6IGA8aHRtbD48Ym9keT48c3Ryb25nPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9ESUFHTk9TSVNfVElUTEVcIil9PC9zdHJvbmc+PC9ib2R5PjwvaHRtbD48YnI+YFxuXHRcdH0pO1xuXHRcdC8vIGdldCB0aGUgVUkgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBjb250ZXh0IHRvIHNldCBpdCB0byBEaWFnbm9zaXMgc2VjdGlvblxuXHRcdGNvbnN0IHVJTWVzc2FnZURlc2NyaXB0aW9uID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpLmRlc2NyaXB0aW9uO1xuXHRcdC8vc2V0IHRoZSBkZXNjcmlwdGlvbiB0byB1bmRlZmluZWQgdG8gcmVzZXQgaXQgYmVsb3dcblx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKHVuZGVmaW5lZCk7XG5cdFx0bGV0IGRpYWdub3Npc1RleHQgPSBcIlwiO1xuXHRcdGxldCBtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gXCJcIjtcblx0XHRpZiAobWVzc2FnZS5nZXRMb25ndGV4dFVybCgpKSB7XG5cdFx0XHRtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50ID0gZmllbGRBZmZlY3RlZFRleHQgPyBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+YCA6IFwiXCI7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdFx0dGhpcy5fc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbihkaWFnbm9zaXNUaXRsZSk7XG5cdFx0fSBlbHNlIGlmICh1SU1lc3NhZ2VEZXNjcmlwdGlvbikge1xuXHRcdFx0ZGlhZ25vc2lzVGV4dCA9IGAke2RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7dUlNZXNzYWdlRGVzY3JpcHRpb259YDtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBgJHtmaWVsZEFmZmVjdGVkVGV4dH08YnI+JHtkaWFnbm9zaXNUZXh0fWA7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlLnNldERlc2NyaXB0aW9uKGZpZWxkQWZmZWN0ZWRUZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgTWVzc2FnZSBCb3guXG5cdCAqL1xuXHRoYW5kbGVOb01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdGlNZXNzYWdlTGVuZ3RoOiAwXG5cdFx0fSk7XG5cblx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNWaWV3SWQpIGFzIEZFVmlldyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodmlldykge1xuXHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIHRvIHNob3csIHdlIHJlc2V0ICdtZXNzYWdlVGFyZ2V0UHJvcGVydHknLlxuXHRcdFx0dmlldy5nZXRNb2RlbChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVwiLCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBidXR0b24gdGV4dCwgY291bnQgYW5kIGljb24gcHJvcGVydHkgYmFzZWQgdXBvbiB0aGUgbWVzc2FnZSBpdGVtc1xuXHQgKiBCdXR0b25UeXBlOiAgUG9zc2libGUgc2V0dGluZ3MgZm9yIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzIGFyZSAnY3JpdGljYWwnIGFuZCAnbmVnYXRpdmUnLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3NldE1lc3NhZ2VEYXRhKCk6IHZvaWQge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzLl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQpO1xuXG5cdFx0dGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBzSWNvbiA9IFwiXCIsXG5cdFx0XHRcdG9NZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCksXG5cdFx0XHRcdG9NZXNzYWdlQ291bnQ6IE1lc3NhZ2VDb3VudCA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH0sXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0XHRcdGlNZXNzYWdlTGVuZ3RoID0gb01lc3NhZ2VzLmxlbmd0aDtcblx0XHRcdGxldCBzQnV0dG9uVHlwZSA9IEJ1dHRvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRzVG9vbHRpcFRleHQgPSBcIlwiLFxuXHRcdFx0XHRzTWVzc2FnZVRleHQgPSBcIlwiO1xuXHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlNZXNzYWdlTGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoIW9NZXNzYWdlc1tpXS5nZXRUeXBlKCkgfHwgb01lc3NhZ2VzW2ldLmdldFR5cGUoKS50b1N0cmluZygpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbXCJJbmZvcm1hdGlvblwiXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KytvTWVzc2FnZUNvdW50W29NZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgTWVzc2FnZUNvdW50XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5OZWdhdGl2ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5Dcml0aWNhbDtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5TdWNjZXNzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5OZXV0cmFsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdG90YWxOdW1iZXJPZk1lc3NhZ2VzID1cblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl07XG5cblx0XHRcdFx0dGhpcy5zZXRUZXh0KHRvdGFsTnVtYmVyT2ZNZXNzYWdlcy50b1N0cmluZygpKTtcblxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudC5FcnJvciA9PT0gMSkge1xuXHRcdFx0XHRcdHNNZXNzYWdlS2V5ID0gXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudC5FcnJvciA+IDEpIHtcblx0XHRcdFx0XHRzTWVzc2FnZUtleSA9IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9FUlJPUl9UT09MVElQXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9NZXNzYWdlQ291bnQuRXJyb3IgJiYgb01lc3NhZ2VDb3VudC5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfV0FSTklOR19UT09MVElQXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9NZXNzYWdlQ291bnQuRXJyb3IgJiYgIW9NZXNzYWdlQ291bnQuV2FybmluZyAmJiBvTWVzc2FnZUNvdW50LkluZm9ybWF0aW9uKSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIjtcblx0XHRcdFx0fSBlbHNlIGlmICghb01lc3NhZ2VDb3VudC5FcnJvciAmJiAhb01lc3NhZ2VDb3VudC5XYXJuaW5nICYmICFvTWVzc2FnZUNvdW50LkluZm9ybWF0aW9uICYmIG9NZXNzYWdlQ291bnQuU3VjY2Vzcykge1xuXHRcdFx0XHRcdHNNZXNzYWdlS2V5ID0gXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNNZXNzYWdlS2V5KSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc01lc3NhZ2VLZXkpO1xuXHRcdFx0XHRcdHNUb29sdGlwVGV4dCA9IG9NZXNzYWdlQ291bnQuRXJyb3IgPyBgJHtvTWVzc2FnZUNvdW50LkVycm9yfSAke3NNZXNzYWdlVGV4dH1gIDogc01lc3NhZ2VUZXh0O1xuXHRcdFx0XHRcdHRoaXMuc2V0VG9vbHRpcChzVG9vbHRpcFRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0SWNvbihzSWNvbik7XG5cdFx0XHRcdHRoaXMuc2V0VHlwZShzQnV0dG9uVHlwZSk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc1ZpZXdJZCkgYXMgRkVWaWV3O1xuXHRcdFx0XHRpZiAob1ZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCBvUGFnZVJlYWR5ID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb1BhZ2VSZWFkeS53YWl0UGFnZVJlYWR5KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9hcHBseUdyb3VwaW5nQXN5bmMob1ZpZXcpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiZmFpbCBncm91cGluZyBtZXNzYWdlc1wiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdFx0XHRcdGlNZXNzYWdlTGVuZ3RoOiBpTWVzc2FnZUxlbmd0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpTWVzc2FnZUxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVOb01lc3NhZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSwgMTAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgdGl0bGUgb2YgdGhlIG1lc3NhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSBoYW5kbGVyXG5cdCAqL1xuXHRhc3luYyBfYWN0aXZlVGl0bGVQcmVzcyhvRXZlbnQ6IE1lc3NhZ2VQb3BvdmVyJEFjdGl2ZVRpdGxlUHJlc3NFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgdHJ1ZSk7XG5cdFx0Y29uc3Qgb0l0ZW0gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXRlbVwiKSxcblx0XHRcdG9NZXNzYWdlID0gb0l0ZW0/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCksXG5cdFx0XHRiSXNCYWNrZW5kTWVzc2FnZSA9IG5ldyBSZWdFeHAoXCJeL1wiKS50ZXN0KG9NZXNzYWdlLmdldFRhcmdldHMoKVswXSksXG5cdFx0XHRvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBWaWV3O1xuXHRcdGlmICghb0l0ZW0pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLCBzU2VjdGlvblRpdGxlO1xuXHRcdGNvbnN0IF9kZWZhdWx0Rm9jdXMgPSBmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSwgbWRjVGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0XHRjb25zdCBmb2N1c0luZm8gPSB7IHByZXZlbnRTY3JvbGw6IHRydWUsIHRhcmdldEluZm86IG1lc3NhZ2UgfTtcblx0XHRcdG1kY1RhYmxlLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fTtcblxuXHRcdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0XHRsZXQgc2VjdGlvbiwgc3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0Y29uc3QgdmlzaWJsZVNlY3Rpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQhKTtcblx0XHRpZiAodmlzaWJsZVNlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0Zm9yIChqID0gdmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IHZpc2libGVTZWN0aW9uc1tqXTtcblx0XHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0XHRmb3IgKGsgPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlPy5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbHMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbiwgbWVzc2FnZU9iamVjdCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1RhcmdldE1kY1RhYmxlID0gb01lc3NhZ2UuY29udHJvbElkc1xuXHRcdFx0Lm1hcCgoY29udHJvbElkOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50Q29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbC5nZXRQYXJlbnQoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gcGFyZW50Q29udHJvbCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGFyZW50Q29udHJvbCAmJlxuXHRcdFx0XHRcdHBhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdG9JdGVtLmdldEdyb3VwTmFtZSgpLmluY2x1ZGVzKChwYXJlbnRDb250cm9sIGFzIFRhYmxlKS5nZXRIZWFkZXIoKSlcblx0XHRcdFx0XHQ/IHBhcmVudENvbnRyb2xcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHR9KVxuXHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjOiBDb250cm9sLCB2YWw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIHZhbCA/IHZhbCA6IGFjYztcblx0XHRcdH0pO1xuXG5cdFx0Ly9jaGVjayBpZiB0aGUgcHJlc3NlZCBpdGVtIGlzIHJlbGF0ZWQgdG8gYSB0YWJsZSBjb250cm9sXG5cdFx0aWYgKG9UYXJnZXRNZGNUYWJsZSkge1xuXHRcdFx0aWYgKGJJc0JhY2tlbmRNZXNzYWdlKSB7XG5cdFx0XHRcdHNTZWN0aW9uVGl0bGUgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpWzBdO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkICYmIChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSAhPT0gdGhpcy5zVmlld0lkIHx8IGJJc0dlbmVyYWxHcm91cE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQob1RhcmdldE1kY1RhYmxlLmdldElkKCkpO1xuXHRcdFx0XHRcdFx0KChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25UYWJsZUluSWNvblRhYkJhck1vZGUoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRNZGNUYWJsZSxcblx0XHRcdFx0XHRcdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCEsXG5cdFx0XHRcdFx0XHRcdHNTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG9SZWZFcnJvckNvbnRleHQgPSB0aGlzLl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dChvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdGNvbnN0IG9SZWZFcnJvciA9IG9SZWZFcnJvckNvbnRleHQ/LmdldFByb3BlcnR5KG9JdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0Y29uc3QgX3NldEZvY3VzT25UYXJnZXRGaWVsZCA9IGFzeW5jICh0YXJnZXRNZGNUYWJsZTogTURDVGFibGUsIGlSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuIHwgdW5kZWZpbmVkPiA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhVGFyZ2V0TWRjVGFibGVSb3cgPSB0aGlzLl9nZXRNZGNUYWJsZVJvd3ModGFyZ2V0TWRjVGFibGUpLFxuXHRcdFx0XHRcdFx0XHRpRmlyc3RWaXNpYmxlUm93ID0gdGhpcy5fZ2V0R3JpZFRhYmxlKHRhcmdldE1kY1RhYmxlKT8uZ2V0Rmlyc3RWaXNpYmxlUm93KCkgPz8gMDtcblx0XHRcdFx0XHRcdGlmIChhVGFyZ2V0TWRjVGFibGVSb3cubGVuZ3RoID4gMCAmJiBhVGFyZ2V0TWRjVGFibGVSb3dbMF0pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1RhcmdldFJvdyA9IGFUYXJnZXRNZGNUYWJsZVJvd1tpUm93SW5kZXggLSBpRmlyc3RWaXNpYmxlUm93XSxcblx0XHRcdFx0XHRcdFx0XHRvVGFyZ2V0Q2VsbCA9IHRoaXMuZ2V0VGFyZ2V0Q2VsbChvVGFyZ2V0Um93LCBvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob1RhcmdldENlbGwpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29udHJvbCBub3QgZm91bmQgb24gdGFibGVcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5ID0gb01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZXJyb3JQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0KG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlcIiwgZXJyb3JQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLl9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YXJnZXRNZGNUYWJsZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0TWRjVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSA9PT0gXCJHcmlkVGFibGVcIiAmJiBvUmVmRXJyb3Iucm93SW5kZXggIT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9UYXJnZXRNZGNUYWJsZS5zY3JvbGxUb0luZGV4KG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZvY3VzT25UYXJnZXRGaWVsZCA9IGF3YWl0IF9zZXRGb2N1c09uVGFyZ2V0RmllbGQob1RhcmdldE1kY1RhYmxlLCBvUmVmRXJyb3Iucm93SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmb2N1c09uVGFyZ2V0RmllbGQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZm9jdXNpbmcgb24gZXJyb3JcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvVGFyZ2V0TWRjVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiAmJiBvUmVmRXJyb3IpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbCA9IGF3YWl0IHRoaXMuZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdFx0XHRcdFx0XHRvVmlldyxcblx0XHRcdFx0XHRcdFx0b01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRNZGNUYWJsZSxcblx0XHRcdFx0XHRcdFx0b1JlZkVycm9yLnJvd0luZGV4XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0aWYgKGZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0X2RlZmF1bHRGb2N1cyhvTWVzc2FnZSwgb1RhcmdldE1kY1RhYmxlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wob1ZpZXcsIG9NZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkZhaWwgdG8gbmF2aWdhdGUgdG8gRXJyb3IgY29udHJvbFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmNvbnRyb2xJZHNbMF0pO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHQvL0lmIHRoZSBjb250cm9sIHVuZGVybHlpbmcgdGhlIGZyb250RW5kIG1lc3NhZ2UgaXMgbm90IHdpdGhpbiB0aGUgY3VycmVudCBzZWN0aW9uLCB3ZSBmaXJzdCBnbyBpbnRvIHRoZSB0YXJnZXQgc2VjdGlvbjpcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9ucyA9ICh0aGlzLm9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRcdFx0Y29uc3Qgc2VjdGlvbldpdGhUaGVDb250cm9sID0gc2VjdGlvbnMuZmluZCgoc2VjdGlvbikgPT4gc2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuaW5jbHVkZXMob0NvbnRyb2wgYXMgVUk1RWxlbWVudCkpO1xuXHRcdFx0XHRcdGlmIChzZWN0aW9uV2l0aFRoZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHNTZWN0aW9uVGl0bGUgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpWzBdO1xuXHRcdFx0XHRcdFx0dGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUodGhpcy5vT2JqZWN0UGFnZUxheW91dCEsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9Db250cm9sKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsbCB0aGUgZnVuY3Rpb24gd2hlcmV2ZXIgbmVlZGVkXG5cdFx0XHR0aGlzLmhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9NZXNzYWdlLCBvVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIG1lc3NhZ2UgbmF2aWdhdGlvbiBieSBmaW5kaW5nIHRoZSBhc3NvY2lhdGVkIHN1YnNlY3Rpb24sIGV4cGFuZGluZyBpdCxcblx0ICogYW5kIG5hdmlnYXRpbmcgdG8gdGhlIGNvcnJlY3Qgc2VjdGlvbiBpbiB0aGUgT2JqZWN0IFBhZ2UgTGF5b3V0LlxuXHQgKiBAcGFyYW0gb0l0ZW0gVGhlIG1lc3NhZ2UgaXRlbSBjb250YWluaW5nIHRoZSBncm91cCBuYW1lLlxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMgaW4gdGhlIE9iamVjdCBQYWdlLlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgY29udHJvbCBJRHMuXG5cdCAqIEBwYXJhbSBvVmlldyBUaGUgY3VycmVudCBVSTUgdmlldy5cblx0ICovXG5cdGhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uKG9JdGVtOiBNZXNzYWdlSXRlbSwgdmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLCBvTWVzc2FnZTogTWVzc2FnZSwgb1ZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHQvLyBHZXQgY29udHJvbCBpZiBpdCBpcyBpbnNpZGUgYSBoaWRkZW4gc3Vic2VjdGlvblxuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvTWVzc2FnZS5nZXRDb250cm9sSWRzKClbMF0pO1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gdGhpcy5maW5kU3ViU2VjdGlvbihvSXRlbSwgdmlzaWJsZVNlY3Rpb25zLCBvQ29udHJvbCk7XG5cblx0XHQvLyBJZiBzdWJzZWN0aW9uIGZvdW5kLCBleHBhbmQgaXRcblx0XHRpZiAob1N1YlNlY3Rpb24pIHtcblx0XHRcdChvU3ViU2VjdGlvbiBhcyBTdWJTZWN0aW9uKS5zZXRNb2RlKFwiRXhwYW5kZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGUgdG8gdGhlIHNlY3Rpb24gYmFzZWQgb24gdGhlIG1lc3NhZ2UncyBncm91cCBuYW1lXG5cdFx0Y29uc3Qgc1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0dGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUodGhpcy5vT2JqZWN0UGFnZUxheW91dCEsIHNTZWN0aW9uVGl0bGUpO1xuXG5cdFx0Ly8gRm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sXG5cdFx0dGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wob1ZpZXcsIG9NZXNzYWdlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgY29ycmVzcG9uZGluZyBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBtZXNzYWdlIGl0ZW0ncyBncm91cCBuYW1lXG5cdCAqIG9yIGJ5IGNoZWNraW5nIGlmIHRoZSBnaXZlbiBjb250cm9sIGV4aXN0cyBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcGFyYW0gb0l0ZW0gVGhlIG1lc3NhZ2UgaXRlbSBjb250YWluaW5nIHRoZSBncm91cCBuYW1lLlxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMgaW4gdGhlIE9iamVjdCBQYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIFVJNSBjb250cm9sIHRvIGNoZWNrIGZvciBpbnNpZGUgTW9yZUJsb2Nrcy5cblx0ICogQHJldHVybnMgLSBUaGUgZm91bmQgc3Vic2VjdGlvbiwgc2VjdGlvbiwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRmaW5kU3ViU2VjdGlvbihcblx0XHRvSXRlbTogTWVzc2FnZUl0ZW0sXG5cdFx0dmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkXG5cdCk6IFN1YlNlY3Rpb24gfCBPYmplY3RQYWdlU2VjdGlvbiB8IHVua25vd24gfCBudWxsIHtcblx0XHRjb25zdCBncm91cE5hbWVzID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKTtcblx0XHRyZXR1cm4gdGhpcy5maW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wodmlzaWJsZVNlY3Rpb25zLCBncm91cE5hbWVzWzFdLCBvQ29udHJvbCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VhcmNoZXMgZm9yIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGl0bGUgb3IgYnkgY2hlY2tpbmdcblx0ICogaWYgdGhlIHNwZWNpZmllZCBjb250cm9sIGlzIHByZXNlbnQgaW5zaWRlIHRoZSBzdWJzZWN0aW9uJ3MgTW9yZUJsb2Nrcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHZpc2libGVTZWN0aW9ucyBUaGUgbGlzdCBvZiB2aXNpYmxlIHNlY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRvIG1hdGNoIGFnYWluc3Qgc3Vic2VjdGlvbiB0aXRsZXMuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gc2VhcmNoIGZvciB3aXRoaW4gTW9yZUJsb2Nrcy5cblx0ICogQHJldHVybnMgLSBUaGUgZm91bmQgc3Vic2VjdGlvbiBvciBudWxsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxuXHQgKi9cblx0cHJpdmF0ZSBmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2woXG5cdFx0dmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRcdHRpdGxlOiBzdHJpbmcsXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiB2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc3Vic2VjdGlvbiB0aXRsZSBtYXRjaGVzXG5cdFx0XHRcdGlmIChzdWJTZWN0aW9uLmdldFRpdGxlKCkgPT09IHRpdGxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBjb250cm9sIGV4aXN0cyBpbnNpZGUgTW9yZUJsb2Nrc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3ViU2VjdGlvblxuXHRcdFx0XHRcdFx0LmdldE1vcmVCbG9ja3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoXG5cdFx0XHRcdFx0XHRcdChibG9jaykgPT5cblx0XHRcdFx0XHRcdFx0XHQoKGJsb2NrIGFzIFZpZXcpLmdldENvbnRlbnQoKSBhcyB1bmtub3duIGFzIENvbnRlbnQpPy5maW5kRWxlbWVudHModHJ1ZSkuaW5jbHVkZXMob0NvbnRyb2wgYXMgVUk1RWxlbWVudClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGFibGUgY2VsbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UsIGVuc3VyaW5nIHRoZSBjZWxsIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Um93IEEgdGFibGUgcm93XG5cdCAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdGFyZ2V0aW5nIGEgY2VsbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBlZGl0YWJsZSBjZWxsIG9yIG51bGwvdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFRhcmdldENlbGwodGFyZ2V0Um93OiBVSTVFbGVtZW50LCBtZXNzYWdlOiBNZXNzYWdlKTogVUk1RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZHMgPSBtZXNzYWdlLmdldENvbnRyb2xJZHMoKTtcblx0XHRjb25zdCBoYXNOb25FZGl0YWJsZUZpZWxkID0gY29udHJvbElkcy5zb21lKChpZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdHJldHVybiBjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGNvbnRyb2wuZ2V0RWRpdGFibGUgJiYgIWNvbnRyb2wuZ2V0RWRpdGFibGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb250cm9sSWRzLmxlbmd0aCA+IDBcblx0XHRcdD8gY29udHJvbElkc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKGNvbnRyb2xJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDb250cm9sSW5UYWJsZSA9IHRhcmdldFJvdy5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0SWQoKSA9PT0gY29udHJvbElkO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NvbnRyb2xJblRhYmxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRcdGlmIChoYXNOb25FZGl0YWJsZUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQ/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmdldEVkaXRhYmxlICYmICFlbGVtZW50LmdldEVkaXRhYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWwgPyB2YWwgOiBhY2M7XG5cdFx0XHRcdFx0fSwgbnVsbClcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBvbiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdGFyZ2V0aW5nIHRoZSBjb250cm9sIG9uIHdoaWNoIHdlIHdhbnQgdG8gc2V0IHRoZSBmb2N1c1xuXHQgKiBAcGFyYW0gdGFyZ2V0TWRjVGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHBhcmFtIHJvd0luZGV4IFRoZSByb3cgaW5kZXggb2YgdGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHR0YXJnZXRNZGNUYWJsZT86IE1EQ1RhYmxlLFxuXHRcdHJvd0luZGV4PzogbnVtYmVyXG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGFBbGxWaWV3RWxlbWVudHMgPSB2aWV3LmZpbmRFbGVtZW50cyh0cnVlKTtcblx0XHRjb25zdCBhRXJyb25lb3VzQ29udHJvbHMgPSBtZXNzYWdlXG5cdFx0XHQuZ2V0Q29udHJvbElkcygpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFBbGxWaWV3RWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gc0NvbnRyb2xJZCAmJiBvRWxlbS5nZXREb21SZWYoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAoc0NvbnRyb2xJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0Y29uc3QgYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMgPSBhRXJyb25lb3VzQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICFvRWxlbT8uaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpICYmICFvRWxlbT8uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdC8vVGhlIGZvY3VzIGlzIHNldCBvbiBOb3QgVGFibGUgY29udHJvbCBpbiBwcmlvcml0eVxuXHRcdGlmIChhTm90VGFibGVFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzWzBdKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChhRXJyb25lb3VzQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhcmdldE1kY1RhYmxlUm93ID0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0PyB0YXJnZXRNZGNUYWJsZS5maW5kRWxlbWVudHMoXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0KGVsZW06IENvbnRyb2wpID0+XG5cdFx0XHRcdFx0XHRcdGVsZW0uaXNBKENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJiBlbGVtLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSA9PT0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoYVRhcmdldE1kY1RhYmxlUm93Lmxlbmd0aCA+IDAgJiYgYVRhcmdldE1kY1RhYmxlUm93WzBdKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRSb3cgPSBhVGFyZ2V0TWRjVGFibGVSb3dbcm93SW5kZXggYXMgbnVtYmVyXTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwob1RhcmdldFJvdywgbWVzc2FnZSk7XG5cdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRGaWVsZCA9IG9UYXJnZXRDZWxsLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpXG5cdFx0XHRcdFx0XHQ/IChvVGFyZ2V0Q2VsbC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHRcdFx0OiAoKChvVGFyZ2V0Q2VsbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIEZpZWxkKS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9UYXJnZXRGaWVsZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5ID0gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHQodmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5XCIsIGVycm9yUHJvcGVydHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFyZ2V0TWRjVGFibGUgJiYgdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFyZ2V0TWRjVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqIFRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gYVNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyBpbiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHJldHVybnMgVGhlIHJhbmsgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9nZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSwgYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0XHRpZiAoYVNlY3Rpb25zKSB7XG5cdFx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBzdWJTZWN0aW9uLCBqLCBrLCBhRWxlbWVudHMsIGFBbGxFbGVtZW50cywgc2VjdGlvblJhbms7XG5cdFx0XHRmb3IgKGogPSBhU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzZWN0aW9uc1xuXHRcdFx0XHRzZWN0aW9uID0gYVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRhU3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc3ViLXNlY3Rpb25zXG5cdFx0XHRcdFx0c3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRhQWxsRWxlbWVudHMgPSBzdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKTsgLy8gR2V0IGFsbCBlbGVtZW50cyBpbnNpZGUgYSBzdWItc2VjdGlvblxuXHRcdFx0XHRcdC8vVHJ5IHRvIGZpbmQgdGhlIGNvbnRyb2wgMSBpbnNpZGUgdGhlIHN1YiBzZWN0aW9uXG5cdFx0XHRcdFx0YUVsZW1lbnRzID0gYUFsbEVsZW1lbnRzLmZpbHRlcih0aGlzLl9mbkZpbHRlclVwb25JZC5iaW5kKHRoaXMsIG9iai5nZXRDb250cm9sSWQoKSkpO1xuXHRcdFx0XHRcdHNlY3Rpb25SYW5rID0gaiArIDE7XG5cdFx0XHRcdFx0aWYgKGFFbGVtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VjdGlvbi5nZXRWaXNpYmxlKCkgJiYgc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoXCJzZWN0aW9uTmFtZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9iai5zZWN0aW9uTmFtZSA9IHNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShcInN1YlNlY3Rpb25OYW1lXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2JqLnN1YlNlY3Rpb25OYW1lID0gc3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWN0aW9uUmFuayAqIDEwICsgKGsgKyAxKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiBpcyBpbnZpc2libGUgdGhlbiBncm91cCBuYW1lIHdvdWxkIGJlIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHJhbmtpbmcgc2hvdWxkIGJlIGxvd2VyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9pZiBzdWIgc2VjdGlvbiB0aXRsZSBpcyBPdGhlciBtZXNzYWdlcywgd2UgcmV0dXJuIGEgaGlnaCBudW1iZXIocmFuayksIHdoaWNoIGVuc3VyZXNcblx0XHRcdC8vdGhhdCBtZXNzYWdlcyBiZWxvbmdpbmcgdG8gdGhpcyBzdWIgc2VjdGlvbiBhbHdheXMgY29tZSBsYXRlciBpbiBtZXNzYWdlUG9wb3ZlclxuXHRcdFx0aWYgKCFvYmouc2VjdGlvbk5hbWUgJiYgIW9iai5zdWJTZWN0aW9uTmFtZSAmJiBvYmouZ2V0UGVyc2lzdGVudCgpKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDk5OTtcblx0XHR9XG5cdFx0cmV0dXJuIDk5OTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgRmlsdGVyIHRvIGhpZGUgbWVzc2FnZXMgZnJvbSB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJcblx0ICovXG5cdF9maWx0ZXJPdXRNZXNzYWdlc0luRGlhbG9nKCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgZm5UZXN0ID0gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBzdWNjZXNzIG1lc3NhZ2UgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgd2UgZG8gbm90IGZpbHRlciBpdCBvdXQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaWYgdGhlIHNpbmdsZSBzdWNjZXNzIG1lc3NhZ2UgaXMgZm91bmRcblx0ICovXG5cdF9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcyA9IFtdO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2Vzc1xuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gd2Ugd2FudCB0byBoaWRlIHN1Y2Nlc3MgbWVzc2FnZXMgb25seSBpZiB0aGV5IGFyZSBib3VuZCB0byB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzaW5nbGUgc3VjY2VzcyBtZXNzYWdlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXIgZnVuY3Rpb24gdG8gaGlkZSBiYWNrLWVuZCBtZXNzYWdlcyBpZiB0aGUgY29udHJvbCBoYXMgZXJyb3IgdmFsaWRhdGlvbi5cblx0ICogQHJldHVybnMgRmlsdGVyXG5cdCAqL1xuXHRfZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpOiBGaWx0ZXIge1xuXHRcdGNvbnN0IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpOiBzdHJpbmdbXSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS52YWxpZGF0aW9uID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0Q29udHJvbElkKCk/Lm1hdGNoKC9maWVsZC4qLWlubmVyJC9pKSlcblx0XHRcdFx0XHQvL3RoZSBlcnJvciBwb2ludCB0byB0aGUgaW5uZXIgY29udHJvbCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIC1pbm5lciB0byBnZXQgdGhlIGZpZWxkIGlkXG5cdFx0XHRcdFx0Lm1hcCgobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRDb250cm9sSWQoKT8ucmVwbGFjZShcIi1pbm5lclwiLCBcIlwiKSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZuVGVzdCA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdC8vIGZpbHRlcmluZyBvdXQgdGhlIGJhY2tlbmQgbWVzc2FnZXMgaWYgdGhlIGNvbnRyb2wgaGFzIGVycm9yIHZhbGlkYXRpb25cblx0XHRcdHJldHVybiAhYUNvbnRyb2xJZHMuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbigpLmluY2x1ZGVzKGNvbnRyb2xJZCkpO1xuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0dmFsdWUxOiBmYWxzZVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdFx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMTogdHJ1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBmaWx0ZXJzIGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogVGhlIGRlc2lyZWQgZmlsdGVyIG9wZXJhdGlvbiBpczpcblx0ICogKCBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHVzZXIgJiYgKCB2YWxpZGF0aW9uID0gdHJ1ZSAmJiBDb250cm9sIHNob3VsZCBiZSBwcmVzZW50IGluIHZpZXcgKSB8fCBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgY29udGV4dCApLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5RmlsdGVyc0FuZFNvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9WYWxpZGF0aW9uRmlsdGVycyxcblx0XHRcdGhpZGRlbkRyYWZ0RmlsdGVyLFxuXHRcdFx0b1ZhbGlkYXRpb25BbmRDb250ZXh0RmlsdGVyLFxuXHRcdFx0b0ZpbHRlcnMsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG9Tb3J0ZXIsXG5cdFx0XHRvRGlhbG9nRmlsdGVyLFxuXHRcdFx0b2JqZWN0UGFnZUxheW91dFNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFVc2VyRGVmaW5lZEZpbHRlcjogRmlsdGVyW10gPSBbXTtcblxuXHRcdHRoaXMuc1ZpZXdJZCA9IHRoaXMuc1ZpZXdJZCA/IHRoaXMuc1ZpZXdJZCA6ICh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdC8vQWRkIHRoZSBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdFx0Y29uc3QgYUN1c3RvbUZpbHRlcnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRmlsdGVyc1wiKSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFDdXN0b21GaWx0ZXJzKSB7XG5cdFx0XHRhQ3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXI6IENvbnRyb2wpIHtcblx0XHRcdFx0YVVzZXJEZWZpbmVkRmlsdGVyLnB1c2goXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJwYXRoXCIpLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IGZpbHRlci5nZXRQcm9wZXJ0eShcIm9wZXJhdG9yXCIpLFxuXHRcdFx0XHRcdFx0dmFsdWUxOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJ2YWx1ZTFcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMlwiKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHQvL0ZpbHRlciBmb3IgZmlsdGVyaW5nIG91dCBvbmx5IHZhbGlkYXRpb24gbWVzc2FnZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2aWV3XG5cdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRtZXNzYWdlQnV0dG9uSGVscGVyLmdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlcih0aGlzLnNWaWV3SWQpXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdG9EaWFsb2dGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW3RoaXMuX2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKV1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHRlc3Q6IHRoaXMuX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMuYmluZCh0aGlzKSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmaWx0ZXJBcnJheTtcblx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKSBhcyBWaWV3O1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gKGF3YWl0ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcik/LmVkaXRGbG93LmdldFJvb3RDb250ZXh0KHZpZXdDb250ZXh0KSk/LmdldFBhdGgoKTtcblx0XHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIgPSBtZXNzYWdlQnV0dG9uSGVscGVyLmdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlcihjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtvVmFsaWRhdGlvbkZpbHRlcnMsIGhpZGRlbkRyYWZ0RmlsdGVyXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWx0ZXJBcnJheSA9IFt2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIsIG9EaWFsb2dGaWx0ZXIsIHRoaXMuX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGgsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1BhdGhcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW1xuXHRcdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdFx0XHRvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzLFxuXHRcdFx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXG5cdFx0XHRcdF07XG5cdFx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IHRoZSBib3VuZCBtZXNzYWdlcyBpLmUgdGFyZ2V0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0IHBhdGhcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogZmlsdGVyQXJyYXksXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBhbmQgZmluYWxseSAtIGlmIHRoZXJlIGFueSAtIGFkZCBjdXN0b20gZmlsdGVyICh2aWEgT1IpXG5cdFx0XHRpZiAoYVVzZXJEZWZpbmVkRmlsdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbYVVzZXJEZWZpbmVkRmlsdGVyLCBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzXSBhcyB1bmtub3duIGFzIEZpbHRlcltdLCAvLyBUT0RPIGluY29ycmVjdCxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuZmlsdGVyKG9GaWx0ZXJzKTtcblx0XHRcdHRoaXMub09iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0KHRoaXMsIHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0Ly8gV2Ugc3VwcG9ydCBzb3J0aW5nIG9ubHkgZm9yIE9iamVjdFBhZ2VMYXlvdXQgdXNlLWNhc2UuXG5cdFx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0XHRvU29ydGVyID0gbmV3IFNvcnRlcihcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0b2JqMTogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9LFxuXHRcdFx0XHRcdFx0b2JqMjogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9XG5cdFx0XHRcdFx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMgPSB0aGlzLm9PYmplY3RQYWdlTGF5b3V0ICYmIHRoaXMub09iamVjdFBhZ2VMYXlvdXQuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtBID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMSwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtCID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMiwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLm9JdGVtQmluZGluZy5zb3J0KG9Tb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gc0NvbnRyb2xJZFxuXHQgKiBAcGFyYW0gb0l0ZW1cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29udHJvbCBJRCBtYXRjaGVzIHRoZSBpdGVtIElEXG5cdCAqL1xuXHRfZm5GaWx0ZXJVcG9uSWQoc0NvbnRyb2xJZDogc3RyaW5nLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbiBiYXNlZCBvbiBzZWN0aW9uIHRpdGxlIGFuZCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlKG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LCBzU2VjdGlvblRpdGxlOiBzdHJpbmcpOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc1NlY3Rpb25UaXRsZSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhU2VjdGlvbnNbaV0uZ2V0VmlzaWJsZSgpICYmIGFTZWN0aW9uc1tpXS5nZXRUaXRsZSgpID09PSBzU2VjdGlvblRpdGxlKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24gPSBhU2VjdGlvbnNbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc2VjdGlvbiBpZiB0aGUgb2JqZWN0IHBhZ2UgdXNlcyBhbiBJY29uVGFiQmFyIGFuZCBpZiB0aGUgY3VycmVudCBzZWN0aW9uIGlzIG5vdCB0aGUgdGFyZ2V0IG9mIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHNTZWN0aW9uVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGlmIChiVXNlSWNvblRhYkJhcikge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSB0aGlzLl9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUob09iamVjdFBhZ2UsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkU2VjdGlvbklkID0gb09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCk7XG5cdFx0XHRpZiAob1NlY3Rpb24gJiYgc1NlbGVjdGVkU2VjdGlvbklkICE9PSBvU2VjdGlvbi5nZXRJZCgpKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHNTZWN0aW9uVGl0bGU6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9PUENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoID0gIShvVGFibGVDb250ZXh0ID09PSBvT1BDb250ZXh0KTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZShvT2JqZWN0UGFnZSwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiBGdW5jdGlvbikge1xuXHRcdFx0aWYgKGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoKSB7XG5cdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIE1kY1RhYmxlIGlmIGl0IGlzIGZvdW5kIGFtb25nIGFueSBvZiB0aGUgcGFyZW50IGVsZW1lbnRzLlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBNREMgdGFibGUgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0TWRjVGFibGUob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBNRENUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Ly9jaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYSB0YWJsZSB3aXRoaW4gYW55IG9mIGl0cyBwYXJlbnRzXG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmICFvUGFyZW50RWxlbWVudC5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpID8gb1BhcmVudEVsZW1lbnQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0R3JpZFRhYmxlKG9NZGNUYWJsZTogTURDVGFibGUpOiBVSVRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gb01kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FbGVtLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJlxuXHRcdFx0XHQvKiogV2UgY2hlY2sgdGhlIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgTWRjVGFibGUgOiovXG5cdFx0XHRcdG9FbGVtLmdldFBhcmVudCgpID09PSBvTWRjVGFibGVcblx0XHRcdCk7XG5cdFx0fSlbMF0gYXMgVUlUYWJsZSB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIHJvdyAoaWYgYXZhaWxhYmxlKSBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUYWJsZSByb3cgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSb3cob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAoXG5cdFx0XHRvUGFyZW50RWxlbWVudCAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Q29sdW1uTGlzdEl0ZW0+KENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKVxuXHRcdCkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmXG5cdFx0XHQob1BhcmVudEVsZW1lbnQuaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpIHx8XG5cdFx0XHRcdG9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgfHxcblx0XHRcdFx0b1BhcmVudEVsZW1lbnQuaXNBPENvbHVtbkxpc3RJdGVtPihDb2x1bW5MaXN0SXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkpXG5cdFx0XHQ/IChvUGFyZW50RWxlbWVudCBhcyBVSTVFbGVtZW50KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgcm93IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFJvdyBpbmRleCB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJvd0luZGV4KG9FbGVtZW50OiBVSTVFbGVtZW50KTogbnVtYmVyIHtcblx0XHRjb25zdCBvVGFibGVSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhvRWxlbWVudCk7XG5cdFx0bGV0IGlSb3dJbmRleDtcblx0XHRpZiAob1RhYmxlUm93Py5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikpIHtcblx0XHRcdGlSb3dJbmRleCA9IG9UYWJsZVJvdy5nZXRJbmRleCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpUm93SW5kZXggPSAob1RhYmxlUm93IGFzIHsgZ2V0VGFibGU/OiAoKSA9PiBSZXNwb25zaXZlVGFibGUgfSlcblx0XHRcdFx0Py5nZXRUYWJsZT8uKClcblx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlbWVudDogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LmdldElkKCkgPT09IG9UYWJsZVJvdz8uZ2V0SWQoKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBpUm93SW5kZXggPz8gLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBlbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgQ29sdW1uIGluZGV4IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlQ29sdW1uSW5kZXgoZWxlbWVudDogVUk1RWxlbWVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZ2V0VGFyZ2V0Q2VsbEluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0cmV0dXJuIHRhcmdldFJvdz8uZ2V0Q2VsbHMoKS5maW5kSW5kZXgoZnVuY3Rpb24gKGNlbGw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIGNlbGwuZ2V0SWQoKSA9PT0gZWx0LmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFRhcmdldENvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBlbHQuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudCxcblx0XHRcdFx0dGFyZ2V0Q2VsbEluZGV4ID0gZ2V0VGFyZ2V0Q2VsbEluZGV4KHRhcmdldEVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0XHR3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRDZWxsSW5kZXggJiYgdGFyZ2V0Q2VsbEluZGV4IDwgMCkge1xuXHRcdFx0XHR0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50O1xuXHRcdFx0XHR0YXJnZXRDZWxsSW5kZXggPSBnZXRUYXJnZXRDZWxsSW5kZXgodGFyZ2V0RWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRDZWxsSW5kZXg7XG5cdFx0fTtcblx0XHRjb25zdCB0YXJnZXRSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhlbGVtZW50KSBhcyBSb3cgfCB1bmRlZmluZWQ7XG5cblx0XHRsZXQgdGFyZ2V0Q29sdW1uSW5kZXggPSBnZXRUYXJnZXRDb2x1bW5JbmRleChlbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdGlmICh0YXJnZXRSb3c/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldENlbGxJZCA9IHRhcmdldENvbHVtbkluZGV4ID8gdGFyZ2V0Um93LmdldENlbGxzKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldElkKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHRhYmxlQ29sdW1ucyA9IHRhcmdldFJvdy5nZXRUYWJsZSgpPy5nZXRDb2x1bW5zKCk7XG5cdFx0XHR0YXJnZXRDb2x1bW5JbmRleCA9IHRhYmxlQ29sdW1ucz8uZmluZEluZGV4KGZ1bmN0aW9uIChjb2x1bW46IENvbHVtbikge1xuXHRcdFx0XHRpZiAoY29sdW1uLmdldENyZWF0aW9uVGVtcGxhdGUoKSAmJiB0YXJnZXRDZWxsSWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q2VsbElkLnNlYXJjaChjb2x1bW4uZ2V0Q3JlYXRpb25UZW1wbGF0ZSgpLmdldElkKCkpID4gLTEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbHVtbkluZGV4O1xuXHR9XG5cblx0X2dldE1kY1RhYmxlUm93cyhvTWRjVGFibGU6IE1EQ1RhYmxlKTogUm93W10ge1xuXHRcdHJldHVybiBvTWRjVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b0VsZW0uaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0XHRcdC8qKiBXZSBjaGVjayB0aGUgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBNZGMgVGFibGUgOiovXG5cdFx0XHRcdChvRWxlbSBhcyB7IGdldFRhYmxlPzogKCkgPT4gVUk1RWxlbWVudCB9KS5nZXRUYWJsZT8uKCkuZ2V0UGFyZW50KCkgPT09IG9NZGNUYWJsZVxuXHRcdFx0KTtcblx0XHR9KSBhcyBSb3dbXTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0KG9FbGVtZW50OiBNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkLCBvT2JqZWN0UGFnZUxheW91dD86IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdHJldHVybiBvT2JqZWN0UGFnZUxheW91dDtcblx0XHR9XG5cdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHQvL0l0ZXJhdGUgb3ZlciBwYXJlbnQgdGlsbCB5b3UgaGF2ZSBub3QgcmVhY2hlZCB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0d2hpbGUgKHRhcmdldEVsZW1lbnQgJiYgIXRhcmdldEVsZW1lbnQuaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSkge1xuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuZ2V0UGFyZW50KCkgPz8gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIGNoZWNrIGlmIGEgbmF2aWdhdGlvbiBpcyBjb25maWd1cmVkIGZyb20gdGhlIHRhYmxlIHRvIGEgc3ViIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdGFibGUgTWRjVGFibGVcblx0ICogQHJldHVybnMgRWl0aGVyIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdF9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHQvLyBUT0RPOiB0aGlzIGxvZ2ljIHdvdWxkIGJlIG1vdmVkIHRvIGNoZWNrIHRoZSBzYW1lIGF0IHRoZSB0ZW1wbGF0ZSB0aW1lIHRvIGF2b2lkIHRoZSBzYW1lIGNoZWNrIGhhcHBlbmluZyBtdWx0aXBsZSB0aW1lcy5cblx0XHRjb25zdCBjb21wb25lbnQgPSBzYXAudWkucmVxdWlyZShcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiKSxcblx0XHRcdG5hdk9iamVjdCA9IHRhYmxlICYmIGNvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0YWJsZSkgJiYgY29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRhYmxlKS5nZXROYXZpZ2F0aW9uKCk7XG5cdFx0bGV0IHN1Yk9QQ29uZmlndXJlZCA9IGZhbHNlLFxuXHRcdFx0bmF2Q29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdGlmIChuYXZPYmplY3QgJiYgT2JqZWN0LmtleXMobmF2T2JqZWN0KS5pbmNsdWRlcyh0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpKSkge1xuXHRcdFx0c3ViT1BDb25maWd1cmVkID1cblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXSAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbCAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbC5yb3V0ZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdG5hdkNvbmZpZ3VyZWQgPVxuXHRcdFx0c3ViT1BDb25maWd1cmVkICYmXG5cdFx0XHR0YWJsZT8uZ2V0Um93U2V0dGluZ3MoKS5nZXRSb3dBY3Rpb25zKCkgJiZcblx0XHRcdHRhYmxlPy5nZXRSb3dTZXR0aW5ncygpLmdldFJvd0FjdGlvbnMoKVswXS5nZXRUeXBlKCkuaW5jbHVkZXMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdHJldHVybiBuYXZDb25maWd1cmVkO1xuXHR9XG5cblx0c2V0Rm9jdXNUb0NvbnRyb2woY29udHJvbD86IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlUG9wb3ZlciA9IHRoaXMub01lc3NhZ2VQb3BvdmVyO1xuXHRcdGlmIChtZXNzYWdlUG9wb3ZlciAmJiBjb250cm9sICYmIGNvbnRyb2wuZm9jdXMpIHtcblx0XHRcdGNvbnN0IGZuRm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIW1lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdC8vIHdoZW4gbmF2aWdhdGluZyB0byBwYXJlbnQgcGFnZSB0byBjaGlsZCBwYWdlIChvbiBjbGljayBvZiBtZXNzYWdlKSwgdGhlIGNoaWxkIHBhZ2UgbWlnaHQgaGF2ZSBhIGZvY3VzIGxvZ2ljIHRoYXQgbWlnaHQgdXNlIGEgdGltZW91dC5cblx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBiZWxvdyB0aW1lb3V0cyB0byBvdmVycmlkZSB0aGlzIGZvY3VzIHNvIHRoYXQgd2UgZm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sIG9mIHRoZSBtZXNzYWdlIGluIHRoZSBjaGlsZCBwYWdlLlxuXHRcdFx0XHRzZXRUaW1lb3V0KGZuRm9jdXMsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZm5Gb2N1cywgMCk7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkZFIFY0IDogTWVzc2FnZUJ1dHRvbiA6IGVsZW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIG1ldGhvZCBmb3IgZm9jdXNpbmcuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGVzY2FwZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKVxuXHRcdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0RU1BLGFBQWEsSUFBQUMsSUFBQSxHQURsQkMsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLEVBQUFDLEtBQUEsR0FRckRDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsc0NBQXNDO0lBQUVDLFFBQVEsRUFBRSxJQUFJO0lBQUVDLFlBQVksRUFBRTtFQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNHQyxLQUFLLENBQUMsQ0FBQyxFQUFBUixJQUFBLENBQUFTLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsT0FBQTtJQVRSLFNBQUFaLGNBQVlhLEVBQW9DLEVBQUVDLFFBQWlDLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3BGO01BQ0E7TUFDQUEsS0FBQSxHQUFBSCxPQUFBLENBQUFJLElBQUEsT0FBTUgsRUFBRSxFQUFFQyxRQUFRLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSxtQkFBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsbUJBQUFJLFlBQUEsRUFBQUosS0FBQTtNQUFBQSxLQUFBLENBZWJLLGlCQUFpQixHQUFHLEVBQUU7TUFBQUwsS0FBQSxDQUl0Qk0sT0FBTyxHQUFHLEVBQUU7TUFBQU4sS0FBQSxDQUVaTyxlQUFlLEdBQUcsRUFBRTtNQUFBLE9BQUFQLEtBQUE7SUFwQjVCO0lBQUNRLGNBQUEsQ0FBQXZCLGFBQUEsRUFBQVksT0FBQTtJQUFBLElBQUFZLE1BQUEsR0FBQXhCLGFBQUEsQ0FBQXlCLFNBQUE7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
|
|
1499
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlQnV0dG9uIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJtdWx0aXBsZSIsInNpbmd1bGFyTmFtZSIsIl9kZWMzIiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1dHRvbiIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwic0dlbmVyYWxHcm91cFRleHQiLCJzVmlld0lkIiwic0xhc3RBY3Rpb25UZXh0IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0IiwiQnV0dG9uIiwiYXBwbHkiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJhdHRhY2hQcmVzcyIsImhhbmRsZU1lc3NhZ2VQb3BvdmVyUHJlc3MiLCJvTWVzc2FnZVBvcG92ZXIiLCJNZXNzYWdlUG9wb3ZlciIsIm9JdGVtQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfc2V0TWVzc2FnZURhdGEiLCJtZXNzYWdlQnV0dG9uSWQiLCJnZXRJZCIsImFkZEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJfYXBwbHlGaWx0ZXJzQW5kU29ydCIsImJpbmQiLCJhdHRhY2hBY3RpdmVUaXRsZVByZXNzIiwiX2FjdGl2ZVRpdGxlUHJlc3MiLCJvRXZlbnQiLCJ0b2dnbGUiLCJnZXRTb3VyY2UiLCJfYXBwbHlHcm91cGluZ0FzeW5jIiwib1ZpZXciLCJhV2FpdEZvckRhdGEiLCJvVmlld0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJfZmluZFRhYmxlc1JlbGF0ZWRUb01lc3NhZ2VzIiwidmlldyIsIm9SZXMiLCJhTWVzc2FnZXMiLCJnZXRDb250ZXh0cyIsIm1hcCIsIm9Db250ZXh0IiwiZ2V0T2JqZWN0Iiwib1ZpZXdDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJnZXRDb250ZW50IiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJmb3JFYWNoIiwib1NlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiZmluZEVsZW1lbnRzIiwib0VsZW0iLCJpc0EiLCJpIiwibGVuZ3RoIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwic0VsZW1lQmluZGluZ1BhdGgiLCJnZXRQYXRoIiwidGFyZ2V0IiwiaW5kZXhPZiIsInB1c2giLCJ0YWJsZSIsInN1YnNlY3Rpb24iLCJvVGFibGVzIiwiX29UYWJsZSIsIm9NRENUYWJsZSIsIm9TdWJzZWN0aW9uIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0xlbmd0aEZpbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hFdmVudE9uY2UiLCJ3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkIiwic2V0VGltZW91dCIsIl9hcHBseUdyb3VwaW5nIiwiYWxsIiwiZ2V0TW9kZWwiLCJjaGVja01lc3NhZ2VzIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJvT2JqZWN0UGFnZUxheW91dCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsInNlY3Rpb24iLCJlbmFibGVCaW5kaW5nIiwiX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyIsIl9mbkVuYWJsZUJpbmRpbmdzIiwidmlld0lkIiwiX2dldFZpZXdJZCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVJTW9kZWwiLCJzZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dCIsIm9UYWJsZSIsIm9Nb2RlbCIsImdldFByb3BlcnR5Iiwic1JlZkVycm9yQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiZ2V0Q29udGV4dCIsIl91cGRhdGVJbnRlcm5hbE1vZGVsIiwidGFibGVSb3dDb250ZXh0Iiwicm93SW5kZXgiLCJ0YWJsZVRhcmdldENvbFByb3BlcnR5IiwibWVzc2FnZU9iamVjdCIsImlzQ3JlYXRpb25Sb3ciLCJ0ZW1wIiwidGFyZ2V0Q29sUHJvcGVydHkiLCJtb2RlbCIsImNvbnRleHQiLCJhVmFsaWRNZXNzYWdlSWRzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1lc3NhZ2UiLCJhT2Jzb2xldGVNZXNzYWdlbElkcyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJpbnRlcm5hbE1lc3NhZ2VJZCIsIm9ic29sZXRlSWQiLCJhc3NpZ24iLCJfc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyIsInNBY3Rpb25OYW1lIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInNldEdyb3VwTmFtZSIsIl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUiLCJzdWJTZWN0aW9uIiwiZWxlbWVudHMiLCJoYXNNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYWN0aW9uTmFtZSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZGV0YWNoQ2hhbmdlIiwic2V0U2VjdGlvbk5hbWVJbkdyb3VwIiwiZWxlbWVudCIsInRhcmdldFRhYmxlSW5mbyIsImwiLCJ0YXJnZXRlZENvbnRyb2wiLCJpc0JhY2tFbmRNZXNzYWdlIiwiUmVnRXhwIiwidGVzdCIsImdldFRhcmdldHMiLCJnZXRQYXJlbnQiLCJyb3dCaW5kaW5nIiwiZm5DYWxsYmFja1NldEdyb3VwTmFtZSIsIm9iaiIsImdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGUiLCJvVGFyZ2V0VGFibGVJbmZvIiwic3ViVGl0bGUiLCJzZXRTdWJ0aXRsZSIsInNldEFjdGl2ZVRpdGxlIiwib1RhYmxlUm93Q29udGV4dCIsImlzSW5hY3RpdmUiLCJfZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uIiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldEluZGV4Iiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJnZXRTdWJ0aXRsZSIsImZvcm1FbGVtZW50IiwicGFyZW50IiwibGFiZWwiLCJnZXRMYWJlbCIsImxhYmVsVGV4dCIsImlzVGFyZ2V0ZWRDb250cm9sT3JwaGFuIiwiYklzT3JwaGFuRWxlbWVudCIsIl9nZXRNZGNUYWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0SGVhZGVyIiwidGFyZ2V0Q29sdW1uSW5kZXgiLCJfZ2V0VGFibGVDb2x1bW5JbmRleCIsImdldENvbHVtbnMiLCJnZXRQcm9wZXJ0eUtleSIsIl9nZXRUYWJsZVJvdyIsIl9nZXRUYWJsZVJvd0luZGV4Iiwib1RhYmxlUm93QmluZGluZ0NvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZVN1YnRpdGxlIiwiZ2V0TWVzc2FnZVN1YnRpdGxlIiwiZ2V0VmFsdWVTdGF0ZSIsImluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsIl9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmciLCJzZWN0aW9uQmFzZWRHcm91cE5hbWUiLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwidmlld0NvbnRleHRQYXRoIiwibWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSIsInNwbGl0IiwicG9wIiwiaW50ZXJuYWxNb2RlbCIsImludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoIiwiaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwiZmlyZUFjdGl2ZVRpdGxlUHJlc3MiLCJpdGVtIiwiYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSIsInNpbmdsZVN1YnNlY3Rpb25JblBhZ2VMYXlvdXQiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCIsImJsb2NrIiwiZ2V0QmxvY2tzIiwiY29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYmxvY2tzIiwiZ2V0TWFpbkNvbnRlbnQiLCJGdW5jdGlvbiIsImFTdWJTZWN0aW9ucyIsImoiLCJrIiwiYVZpc2libGVTZWN0aW9ucyIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJzaG91bGRCcmVhayIsIm9NZXNzYWdlT2JqZWN0IiwiX2dldEdlbmVyYWxHcm91cFRleHQiLCJhQ29udHJvbHMiLCJnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbiIsIm9UYXJnZXRlZENvbnRyb2wiLCJwZXJzaXN0ZW50IiwiZ2V0R3JvdXBOYW1lIiwiX2ZpbmRUYXJnZXRGb3JNZXNzYWdlIiwidmlld1BhdGgiLCJtZXNzYWdlVGFyZ2V0UGF0aCIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQ29udGV4dFBhdGhNZXRhZGF0YSIsIiRraW5kIiwiX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmciLCJnZXRNb3JlQmxvY2tzIiwic3ViQmxvY2siLCJnZXRBY3Rpb25zIiwiYWN0aW9ucyIsImFTZWN0aW9ucyIsImlTZWN0aW9uIiwiaVN1YlNlY3Rpb24iLCJvQWxsQmxvY2tzIiwiX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZyIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNDb250cm9sSWQiLCJvQ29udHJvbCIsIlZpZXciLCJfc2V0TG9uZ3RleHRVcmxEZXNjcmlwdGlvbiIsIm9EaWFnbm9zaXNUaXRsZSIsInNldEFzeW5jRGVzY3JpcHRpb25IYW5kbGVyIiwiY29uZmlnIiwic0xvbmdUZXh0VXJsIiwiZ2V0TG9uZ3RleHRVcmwiLCJqUXVlcnkiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImRhdGEiLCJzRGlhZ25vc2lzVGV4dCIsImdldEh0bWxUZXh0Iiwib2xkRGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInNldERlc2NyaXB0aW9uIiwicHJvbWlzZSIsInNFcnJvciIsInJlamVjdCIsInByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXMiLCJ0YWJsZUNvbFByb3BlcnR5Iiwicm93SW5mb3JtYXRpb24iLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwibGFiZWxXaXRoVmFsdWUiLCJnZXRUYWJsZUNvbFZhbHVlIiwiY29tcHV0ZUNvbHVtbkluZm8iLCJ0YWJsZVRhcmdldENvbE5hbWUiLCJtc2dPYmoiLCJjb2xGcm9tVGFibGVTZXR0aW5ncyIsImZldGNoQ29sdW1uSW5mbyIsImNvbHVtbkluZm8iLCJhdmFpbGFiaWxpdHkiLCJnZXRUeXBlIiwiam9pbiIsIl9uYXZpZ2F0aW9uQ29uZmlndXJlZCIsImdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8iLCJfcmVmIiwidmlzaWJpbGl0eSIsImZpZWxkc0FmZmVjdGVkVGl0bGUiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJmaWVsZEFmZmVjdGVkVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImRpYWdub3Npc1RpdGxlIiwidUlNZXNzYWdlRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsImRpYWdub3Npc1RleHQiLCJtZXNzYWdlRGVzY3JpcHRpb25Db250ZW50IiwiaGFuZGxlTm9NZXNzYWdlcyIsInNldFZpc2libGUiLCJmaXJlRXZlbnQiLCJpTWVzc2FnZUxlbmd0aCIsImNsZWFyVGltZW91dCIsIl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQiLCJzSWNvbiIsIm9NZXNzYWdlcyIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJvUmVzb3VyY2VCdW5kbGUiLCJzQnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJEZWZhdWx0Iiwic01lc3NhZ2VLZXkiLCJzVG9vbHRpcFRleHQiLCJzTWVzc2FnZVRleHQiLCJ0b1N0cmluZyIsIk1lc3NhZ2VUeXBlIiwiTmVnYXRpdmUiLCJDcml0aWNhbCIsIk5ldXRyYWwiLCJ0b3RhbE51bWJlck9mTWVzc2FnZXMiLCJzZXRUZXh0Iiwic2V0VG9vbHRpcCIsInNldEljb24iLCJzZXRUeXBlIiwib1BhZ2VSZWFkeSIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0UGFnZVJlYWR5IiwibmF2aWdhdGVCYWNrIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0l0ZW0iLCJnZXRQYXJhbWV0ZXIiLCJvTWVzc2FnZSIsImJJc0JhY2tlbmRNZXNzYWdlIiwic1NlY3Rpb25UaXRsZSIsIl9kZWZhdWx0Rm9jdXMiLCJtZGNUYWJsZSIsImZvY3VzSW5mbyIsInByZXZlbnRTY3JvbGwiLCJ0YXJnZXRJbmZvIiwiZm9jdXMiLCJzdWJTZWN0aW9ucyIsInZpc2libGVTZWN0aW9ucyIsImNvbnRyb2xzIiwib1RhcmdldE1kY1RhYmxlIiwiY29udHJvbElkcyIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwicmVkdWNlIiwiYWNjIiwidmFsIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvQ29udGV4dCIsIl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uVGFibGVJbkljb25UYWJCYXJNb2RlIiwib1JlZkVycm9yQ29udGV4dCIsIm9SZWZFcnJvciIsIl9zZXRGb2N1c09uVGFyZ2V0RmllbGQiLCJ0YXJnZXRNZGNUYWJsZSIsImlSb3dJbmRleCIsImFUYXJnZXRNZGNUYWJsZVJvdyIsIl9nZXRNZGNUYWJsZVJvd3MiLCJpRmlyc3RWaXNpYmxlUm93IiwiX2dldEdyaWRUYWJsZSIsImdldEZpcnN0VmlzaWJsZVJvdyIsIm9UYXJnZXRSb3ciLCJvVGFyZ2V0Q2VsbCIsImdldFRhcmdldENlbGwiLCJzZXRGb2N1c1RvQ29udHJvbCIsImVycm9yUHJvcGVydHlQYXRoIiwibmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzT25UYXJnZXRGaWVsZCIsImZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbCIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJzZWN0aW9uV2l0aFRoZUNvbnRyb2wiLCJmaW5kIiwiX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25Jbkljb25UYWJCYXJNb2RlIiwiaGFuZGxlTWVzc2FnZU5hdmlnYXRpb24iLCJnZXRDb250cm9sSWRzIiwiZmluZFN1YlNlY3Rpb24iLCJzZXRNb2RlIiwiZ3JvdXBOYW1lcyIsImZpbmRTdWJTZWN0aW9uQnlUaXRsZU9yQ29udHJvbCIsInRpdGxlIiwiZ2V0VGl0bGUiLCJzb21lIiwidGFyZ2V0Um93IiwiaGFzTm9uRWRpdGFibGVGaWVsZCIsImdldEVkaXRhYmxlIiwiaXNDb250cm9sSW5UYWJsZSIsImVsZW0iLCJhQWxsVmlld0VsZW1lbnRzIiwiYUVycm9uZW91c0NvbnRyb2xzIiwiZ2V0RG9tUmVmIiwiYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMiLCJDb2x1bW5MaXN0SXRlbSIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9UYXJnZXRGaWVsZCIsImdldENvbnRlbnRFZGl0IiwiX2dldE1lc3NhZ2VSYW5rIiwiYUVsZW1lbnRzIiwiYUFsbEVsZW1lbnRzIiwic2VjdGlvblJhbmsiLCJfZm5GaWx0ZXJVcG9uSWQiLCJnZXRDb250cm9sSWQiLCJnZXRWaXNpYmxlIiwiaGFzT3duUHJvcGVydHkiLCJzZWN0aW9uTmFtZSIsInN1YlNlY3Rpb25OYW1lIiwiZ2V0UGVyc2lzdGVudCIsIl9maWx0ZXJPdXRNZXNzYWdlc0luRGlhbG9nIiwiZm5UZXN0IiwiYUNvbnRyb2xJZHMiLCJpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyIsIkZpbHRlciIsInBhdGgiLCJjYXNlU2Vuc2l0aXZlIiwiX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMiLCJib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMiLCJfZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbiIsImdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbiIsInZhbGlkYXRpb24iLCJtYXRjaCIsImZpbHRlcnMiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJ2YWx1ZTEiLCJhbmQiLCJvVmFsaWRhdGlvbkZpbHRlcnMiLCJoaWRkZW5EcmFmdEZpbHRlciIsIm9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlciIsIm9GaWx0ZXJzIiwic1BhdGgiLCJvU29ydGVyIiwib0RpYWxvZ0ZpbHRlciIsIm9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucyIsImFVc2VyRGVmaW5lZEZpbHRlciIsImFDdXN0b21GaWx0ZXJzIiwidmFsdWUyIiwib0JpbmRpbmdDb250ZXh0IiwibWVzc2FnZUJ1dHRvbkhlbHBlciIsImdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlciIsIm9Db250ZXh0U3VjY2Vzc0ZpbHRlcnMiLCJmaWx0ZXJBcnJheSIsInZpZXdDb250ZXh0IiwiZWRpdEZsb3ciLCJnZXRSb290Q29udGV4dCIsImdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlciIsInZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciIsIlN0YXJ0c1dpdGgiLCJvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzIiwiU29ydGVyIiwib2JqMSIsIm9iajIiLCJyYW5rQSIsInJhbmtCIiwic29ydCIsIl9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUiLCJiVXNlSWNvblRhYkJhciIsImdldFVzZUljb25UYWJCYXIiLCJzU2VsZWN0ZWRTZWN0aW9uSWQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvVGFibGVDb250ZXh0Iiwib09QQ29udGV4dCIsImJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoIiwib0VsZW1lbnQiLCJvUGFyZW50RWxlbWVudCIsIm9NZGNUYWJsZSIsIm9UYWJsZVJvdyIsImdldFRhYmxlIiwiZmluZEluZGV4IiwiZ2V0VGFyZ2V0Q2VsbEluZGV4IiwiZWx0IiwiZ2V0Q2VsbHMiLCJjZWxsIiwiZ2V0VGFyZ2V0Q29sdW1uSW5kZXgiLCJ0YXJnZXRFbGVtZW50IiwidGFyZ2V0Q2VsbEluZGV4IiwidGFyZ2V0Q2VsbElkIiwidGFibGVDb2x1bW5zIiwiY29sdW1uIiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsInNlYXJjaCIsImNvbXBvbmVudCIsInNhcCIsInVpIiwicmVxdWlyZSIsIm5hdk9iamVjdCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0TmF2aWdhdGlvbiIsInN1Yk9QQ29uZmlndXJlZCIsIm5hdkNvbmZpZ3VyZWQiLCJkZXRhaWwiLCJyb3V0ZSIsImdldFJvd1NldHRpbmdzIiwiZ2V0Um93QWN0aW9ucyIsIm1lc3NhZ2VQb3BvdmVyIiwiZm5Gb2N1cyIsImlzT3BlbiIsImZuT25DbG9zZSIsImRldGFjaEV2ZW50IiwiYXR0YWNoRXZlbnQiLCJjbG9zZSIsIndhcm5pbmciLCJlc2NhcGUiLCJTdHJpbmciLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VCdXR0b24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgVGFyZ2V0VGFibGVJbmZvVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IHR5cGUgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUZpbHRlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlRmlsdGVyXCI7XG5pbXBvcnQgTWVzc2FnZVBvcG92ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZVBvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29sdW1uUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb25CbG9jayBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N1YlNlY3Rpb25CbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyAkQnV0dG9uU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDb2x1bW5MaXN0SXRlbSBmcm9tIFwic2FwL20vQ29sdW1uTGlzdEl0ZW1cIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgdHlwZSBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlUG9wb3ZlciRBY3RpdmVUaXRsZVByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vTWVzc2FnZVBvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFJlc3BvbnNpdmVUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29yZUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbmltcG9ydCB0eXBlIG1kY0ZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGVudCBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvYmFzZS9Db250ZW50XCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBDcmVhdGlvblJvdyBmcm9tIFwic2FwL3VpL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgdHlwZSBSb3cgZnJvbSBcInNhcC91aS90YWJsZS9Sb3dcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbiBmcm9tIFwiLi4vY29udHJvbHMvc2VjdGlvbi9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgbWVzc2FnZUJ1dHRvbkhlbHBlciBmcm9tIFwiLi9NZXNzYWdlQnV0dG9uSGVscGVyXCI7XG5cbnR5cGUgTWVzc2FnZUNvdW50ID0ge1xuXHRFcnJvcjogbnVtYmVyO1xuXHRXYXJuaW5nOiBudW1iZXI7XG5cdFN1Y2Nlc3M6IG51bWJlcjtcblx0SW5mb3JtYXRpb246IG51bWJlcjtcbn07XG5cbnR5cGUgJE1lc3NhZ2VCdXR0b25TZXR0aW5ncyA9ICRCdXR0b25TZXR0aW5ncyAmIHtcblx0bWVzc2FnZUNoYW5nZTogRnVuY3Rpb247XG59O1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VzLk1lc3NhZ2VCdXR0b25cIilcbmNsYXNzIE1lc3NhZ2VCdXR0b24gZXh0ZW5kcyBCdXR0b24ge1xuXHRjb25zdHJ1Y3RvcihpZD86IHN0cmluZyB8ICRNZXNzYWdlQnV0dG9uU2V0dGluZ3MsIHNldHRpbmdzPzogJE1lc3NhZ2VCdXR0b25TZXR0aW5ncykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3VwZXIoaWQsIHNldHRpbmdzKTtcblx0fVxuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlcy5NZXNzYWdlRmlsdGVyXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiY3VzdG9tRmlsdGVyXCIgfSlcblx0Y3VzdG9tRmlsdGVycyE6IE1lc3NhZ2VGaWx0ZXI7XG5cblx0QGV2ZW50KClcblx0bWVzc2FnZUNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdHB1YmxpYyBvTWVzc2FnZVBvcG92ZXIhOiBNZXNzYWdlUG9wb3ZlcjtcblxuXHRwdWJsaWMgb0l0ZW1CaW5kaW5nITogT0RhdGFMaXN0QmluZGluZztcblxuXHRwcml2YXRlIG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgc0dlbmVyYWxHcm91cFRleHQgPSBcIlwiO1xuXG5cdHByaXZhdGUgX3NldE1lc3NhZ2VEYXRhVGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgc1ZpZXdJZCA9IFwiXCI7XG5cblx0cHJpdmF0ZSBzTGFzdEFjdGlvblRleHQgPSBcIlwiO1xuXG5cdHB1YmxpYyBpc0hpZGRlbkRyYWZ0RW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdEJ1dHRvbi5wcm90b3R5cGUuaW5pdC5hcHBseSh0aGlzKTtcblx0XHR0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkID0gKFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnRcblx0XHQpPy5lbmFibGVkO1xuXHRcdC8vcHJlc3MgZXZlbnQgaGFuZGxlciBhdHRhY2hlZCB0byBvcGVuIHRoZSBtZXNzYWdlIHBvcG92ZXJcblx0XHR0aGlzLmF0dGFjaFByZXNzKHRoaXMuaGFuZGxlTWVzc2FnZVBvcG92ZXJQcmVzcywgdGhpcyk7XG5cdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIgPSBuZXcgTWVzc2FnZVBvcG92ZXIoKTtcblx0XHR0aGlzLm9JdGVtQmluZGluZyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHRoaXMub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9zZXRNZXNzYWdlRGF0YSwgdGhpcyk7XG5cdFx0Y29uc3QgbWVzc2FnZUJ1dHRvbklkID0gdGhpcy5nZXRJZCgpO1xuXHRcdGlmIChtZXNzYWdlQnV0dG9uSWQpIHtcblx0XHRcdHRoaXMub01lc3NhZ2VQb3BvdmVyLmFkZEN1c3RvbURhdGEobmV3IEN1c3RvbURhdGEoeyBrZXk6IFwibWVzc2FnZUJ1dHRvbklkXCIsIHZhbHVlOiBtZXNzYWdlQnV0dG9uSWQgfSkpOyAvLyBUT0RPIGNoZWNrIGZvciBjdXN0b20gZGF0YSB0eXBlXG5cdFx0fVxuXHRcdHRoaXMuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKHRoaXMuX2FwcGx5RmlsdGVyc0FuZFNvcnQuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIuYXR0YWNoQWN0aXZlVGl0bGVQcmVzcyh0aGlzLl9hY3RpdmVUaXRsZVByZXNzLmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBNZXNzYWdlQnV0dG9uIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRoYW5kbGVNZXNzYWdlUG9wb3ZlclByZXNzKG9FdmVudDogQ29yZUV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIudG9nZ2xlKG9FdmVudC5nZXRTb3VyY2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0aGF0IGdyb3VwcyB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiB0aGV5IGJlbG9uZyB0by5cblx0ICogVGhpcyBtZXRob2QgZm9yY2UgdGhlIGxvYWRpbmcgb2YgY29udGV4dHMgZm9yIGFsbCB0YWJsZXMgYmVmb3JlIHRvIGFwcGx5IHRoZSBncm91cGluZy5cblx0ICogQHBhcmFtIG9WaWV3IEN1cnJlbnQgdmlldy5cblx0ICogQHJldHVybnMgUmV0dXJuIHByb21pc2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBfYXBwbHlHcm91cGluZ0FzeW5jKG9WaWV3OiBGRVZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhV2FpdEZvckRhdGE6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXHRcdGNvbnN0IG9WaWV3QmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IF9maW5kVGFibGVzUmVsYXRlZFRvTWVzc2FnZXMgPSAodmlldzogVmlldyk6IHsgdGFibGU6IE1EQ1RhYmxlOyBzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9W10gPT4ge1xuXHRcdFx0Y29uc3Qgb1JlczogeyB0YWJsZTogTURDVGFibGU7IHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH1bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzID0gdGhpcy5vSXRlbUJpbmRpbmcuZ2V0Q29udGV4dHMoKS5tYXAoZnVuY3Rpb24gKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9WaWV3Q29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGlmIChvVmlld0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2U6IENvbnRyb2wgPSB2aWV3LmdldENvbnRlbnQoKVswXTtcblx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9PYmplY3RQYWdlKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZmluZEVsZW1lbnRzKHRydWUpLmZvckVhY2goZnVuY3Rpb24gKG9FbGVtOiBVSTVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvRWxlbS5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUm93QmluZGluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAke29WaWV3Q29udGV4dC5nZXRQYXRoKCl9LyR7b0VsZW0uZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYU1lc3NhZ2VzW2ldLnRhcmdldC5pbmRleE9mKHNFbGVtZUJpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9SZXMucHVzaCh7IHRhYmxlOiBvRWxlbSwgc3Vic2VjdGlvbjogb1N1YlNlY3Rpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvUmVzO1xuXHRcdH07XG5cdFx0Ly8gU2VhcmNoIGZvciB0YWJsZSByZWxhdGVkIHRvIE1lc3NhZ2VzIGFuZCBpbml0aWFsaXplIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhcmVudCBzdWJzZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBkYXRhXG5cdFx0Y29uc3Qgb1RhYmxlcyA9IF9maW5kVGFibGVzUmVsYXRlZFRvTWVzc2FnZXMuYmluZCh0aGlzKShvVmlldyk7XG5cdFx0b1RhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChfb1RhYmxlKSB7XG5cdFx0XHRjb25zdCBvTURDVGFibGUgPSBfb1RhYmxlLnRhYmxlLFxuXHRcdFx0XHRvU3Vic2VjdGlvbiA9IF9vVGFibGUuc3Vic2VjdGlvbjtcblx0XHRcdGlmICghb01EQ1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCkgfHwgb01EQ1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAhPT0gb1ZpZXdCaW5kaW5nQ29udGV4dD8uZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdG9TdWJzZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KG9WaWV3QmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRpZiAoIW9NRENUYWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNMZW5ndGhGaW5hbCgpKSB7XG5cdFx0XHRcdFx0YVdhaXRGb3JEYXRhLnB1c2goXG5cdFx0XHRcdFx0XHRuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0b01EQ1RhYmxlLmdldFJvd0JpbmRpbmcoKS5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCB3YWl0Rm9yR3JvdXBpbmdBcHBsaWVkID0gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5fYXBwbHlHcm91cGluZygpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9KTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRGb3JEYXRhKTtcblx0XHRcdG9WaWV3LmdldE1vZGVsKCkuY2hlY2tNZXNzYWdlcygpO1xuXHRcdFx0YXdhaXQgd2FpdEZvckdyb3VwaW5nQXBwbGllZDtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdyb3VwaW5nIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZVBvcE92ZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBncm91cHMgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gdGhleSBiZWxvbmcgdG8uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfYXBwbHlHcm91cGluZygpOiB2b2lkIHtcblx0XHR0aGlzLm9PYmplY3RQYWdlTGF5b3V0ID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dCh0aGlzLCB0aGlzLm9PYmplY3RQYWdlTGF5b3V0KTtcblx0XHRpZiAoIXRoaXMub09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VJdGVtW10gPSB0aGlzLm9NZXNzYWdlUG9wb3Zlci5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IHNlY3Rpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQodGhpcy5vT2JqZWN0UGFnZUxheW91dCk7XG5cdFx0Y29uc3QgZW5hYmxlQmluZGluZyA9IHRoaXMuX2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyhtZXNzYWdlcywgZmFsc2UpO1xuXHRcdGlmIChlbmFibGVCaW5kaW5nKSB7XG5cdFx0XHR0aGlzLl9mbkVuYWJsZUJpbmRpbmdzKHNlY3Rpb24pO1xuXHRcdH1cblx0XHQvL0NsZWFyIG1lc3NhZ2VUYXJnZXRQcm9wZXJ0eVxuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdGNvbnN0IHZpZXcgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IHVJTW9kZWwgPSB2aWV3Py5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHR1SU1vZGVsPy5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoXCIsIHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHJlZkVycm9yIG9iamVjdC5cblx0ICogVGhlIHJlZkVycm9yIGNvbnRhaW5zIGEgbWFwIHRvIHN0b3JlIHRoZSBpbmRleGVzIG9mIHRoZSByb3dzIHdpdGggZXJyb3JzLlxuXHQgKiBAcGFyYW0gb1RhYmxlIFRoZSB0YWJsZSBmb3Igd2hpY2ggd2Ugd2FudCB0byBnZXQgdGhlIHJlZkVycm9yIE9iamVjdC5cblx0ICogQHJldHVybnMgQ29udGV4dCBvZiB0aGUgcmVmRXJyb3IuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSZWZFcnJvckNvbnRleHQob1RhYmxlOiBNRENUYWJsZSk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly9pbml0aWFsaXplIHRoZSByZWZFcnJvciBwcm9wZXJ0eSBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0aWYgKCFvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJyZWZFcnJvclwiKSkge1xuXHRcdFx0b01vZGVsLnNldFByb3BlcnR5KFwicmVmRXJyb3JcIiwge30sIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpISk7XG5cdFx0fVxuXHRcdGNvbnN0IHNSZWZFcnJvckNvbnRleHRQYXRoID1cblx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQYXRoKCkgK1xuXHRcdFx0XCIvcmVmRXJyb3IvXCIgK1xuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKS5yZXBsYWNlKFwiL1wiLCBcIiRcIikgK1xuXHRcdFx0XCIkXCIgK1xuXHRcdFx0b1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCkucmVwbGFjZShcIi9cIiwgXCIkXCIpO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb01vZGVsLmdldENvbnRleHQoc1JlZkVycm9yQ29udGV4dFBhdGgpO1xuXHRcdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJcIikpIHtcblx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShcIlwiLCB7fSwgb0NvbnRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0NvbnRleHQ7XG5cdH1cblxuXHRfdXBkYXRlSW50ZXJuYWxNb2RlbChcblx0XHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlT2JqZWN0OiBNZXNzYWdlLFxuXHRcdGlzQ3JlYXRpb25Sb3c/OiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGxldCB0ZW1wO1xuXHRcdGlmIChpc0NyZWF0aW9uUm93KSB7XG5cdFx0XHR0ZW1wID0ge1xuXHRcdFx0XHRyb3dJbmRleDogXCJDcmVhdGlvblJvd1wiLFxuXHRcdFx0XHR0YXJnZXRDb2xQcm9wZXJ0eTogdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA/IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgOiBcIlwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ZW1wID0ge1xuXHRcdFx0XHRyb3dJbmRleDogdGFibGVSb3dDb250ZXh0ID8gcm93SW5kZXggOiBcIlwiLFxuXHRcdFx0XHR0YXJnZXRDb2xQcm9wZXJ0eTogdGFibGVUYXJnZXRDb2xQcm9wZXJ0eSA/IHRhYmxlVGFyZ2V0Q29sUHJvcGVydHkgOiBcIlwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0Y29udGV4dCA9IHRoaXMuX2dldFRhYmxlUmVmRXJyb3JDb250ZXh0KHRhYmxlKTtcblx0XHQvL3dlIGZpcnN0IHJlbW92ZSB0aGUgZW50cmllcyB3aXRoIG9ic29sZXRlIG1lc3NhZ2UgaWRzIGZyb20gdGhlIGludGVybmFsIG1vZGVsIGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBlcnJvciBpbmZvIDpcblx0XHRjb25zdCBhVmFsaWRNZXNzYWdlSWRzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHRsZXQgYU9ic29sZXRlTWVzc2FnZWxJZHM7XG5cdFx0aWYgKGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpKSB7XG5cdFx0XHRhT2Jzb2xldGVNZXNzYWdlbElkcyA9IE9iamVjdC5rZXlzKGNvbnRleHQ/LmdldFByb3BlcnR5KFwiXCIpKS5maWx0ZXIoZnVuY3Rpb24gKGludGVybmFsTWVzc2FnZUlkKSB7XG5cdFx0XHRcdHJldHVybiBhVmFsaWRNZXNzYWdlSWRzLmluZGV4T2YoaW50ZXJuYWxNZXNzYWdlSWQpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdFx0YU9ic29sZXRlTWVzc2FnZWxJZHMuZm9yRWFjaChmdW5jdGlvbiAob2Jzb2xldGVJZCkge1xuXHRcdFx0XHRkZWxldGUgY29udGV4dD8uZ2V0UHJvcGVydHkoXCJcIilbb2Jzb2xldGVJZF07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0bW9kZWw/LnNldFByb3BlcnR5KFxuXHRcdFx0bWVzc2FnZU9iamVjdC5nZXRJZCgpLFxuXHRcdFx0T2JqZWN0LmFzc2lnbih7fSwgY29udGV4dD8uZ2V0UHJvcGVydHkobWVzc2FnZU9iamVjdC5nZXRJZCgpKSA/IGNvbnRleHQuZ2V0UHJvcGVydHkobWVzc2FnZU9iamVjdC5nZXRJZCgpKSA6IHt9LCB0ZW1wKSxcblx0XHRcdGNvbnRleHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBtZXRob2QgdGhhdCBzZXRzIGdyb3VwcyBmb3IgdHJhbnNpZW50IG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgdHJhbnNpZW50IG1lc3NhZ2UgZm9yIHdoaWNoIHdlIHdhbnQgdG8gY29tcHV0ZSBhbmQgc2V0IGdyb3VwLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3NldEdyb3VwTGFiZWxGb3JUcmFuc2llbnRNc2cobWVzc2FnZTogTWVzc2FnZUl0ZW0sIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHR0aGlzLnNMYXN0QWN0aW9uVGV4dCA9IHRoaXMuc0xhc3RBY3Rpb25UZXh0XG5cdFx0XHQ/IHRoaXMuc0xhc3RBY3Rpb25UZXh0XG5cdFx0XHQ6IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblxuXHRcdG1lc3NhZ2Uuc2V0R3JvdXBOYW1lKGAke3RoaXMuc0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgZ3JvdXBzIG1lc3NhZ2VzIGFuZCBhZGRzIHRoZSBzdWJ0aXRsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2Ugd2UgdXNlIHRvIGNvbXB1dGUgdGhlIGdyb3VwIGFuZCBzdWJ0aXRsZS5cblx0ICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uIFRoZSBzdWJzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzLlxuXHQgKiBAcGFyYW0gZWxlbWVudHMgTGlzdCBvZiBjb250cm9scyBmcm9tIGEgc3Vic2VjdGlvbiByZWxhdGVkIHRvIGEgbWVzc2FnZS5cblx0ICogQHBhcmFtIGhhc011bHRpcGxlU3ViU2VjdGlvbnMgVHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSBzdWJzZWN0aW9uIGluIHRoZSBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWUsIGlmIGFueS5cblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBjb250cm9sIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2NvbXB1dGVNZXNzYWdlR3JvdXBBbmRTdWJUaXRsZShcblx0XHRtZXNzYWdlOiBNZXNzYWdlSXRlbSxcblx0XHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0XHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRlbGVtZW50czogVUk1RWxlbWVudFtdLFxuXHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHNlY3Rpb24pO1xuXHRcdHRoaXMub0l0ZW1CaW5kaW5nLmRldGFjaENoYW5nZSh0aGlzLl9zZXRNZXNzYWdlRGF0YSwgdGhpcyk7XG5cdFx0Y29uc3QgbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKSBhcyBNZXNzYWdlO1xuXHRcdGNvbnN0IHNldFNlY3Rpb25OYW1lSW5Hcm91cCA9IHRydWU7XG5cdFx0bGV0IGVsZW1lbnQ6IFVJNUVsZW1lbnQsXG5cdFx0XHR0YWJsZTogTURDVGFibGUgfCB1bmRlZmluZWQsXG5cdFx0XHR0YXJnZXRUYWJsZUluZm8gPSB7fSBhcyBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRcdFx0bCxcblx0XHRcdHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG5cdFx0XHR0YXJnZXRlZENvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0XHRpc0NyZWF0aW9uUm93OiBib29sZWFuO1xuXHRcdGNvbnN0IGlzQmFja0VuZE1lc3NhZ2UgPSBuZXcgUmVnRXhwKFwiXi9cIikudGVzdChtZXNzYWdlT2JqZWN0Py5nZXRUYXJnZXRzKClbMF0pO1xuXHRcdGlmIChpc0JhY2tFbmRNZXNzYWdlKSB7XG5cdFx0XHRmb3IgKGwgPSAwOyBsIDwgZWxlbWVudHMubGVuZ3RoOyBsKyspIHtcblx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnRzW2xdO1xuXHRcdFx0XHR0YXJnZXRlZENvbnRyb2wgPSBlbGVtZW50O1xuXHRcdFx0XHRpZiAoZWxlbWVudC5pc0EoXCJzYXAubS5UYWJsZVwiKSB8fCAoZWxlbWVudCBhcyBVSTVFbGVtZW50KS5pc0EoXCJzYXAudWkudGFibGUuVGFibGVcIikpIHtcblx0XHRcdFx0XHR0YWJsZSA9IGVsZW1lbnQuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0XHRcdFx0Y29uc3Qgcm93QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRjb25zdCBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0R3JvdXBMYWJlbEZvclRyYW5zaWVudE1zZyhtZXNzYWdlLCBhY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChyb3dCaW5kaW5nICYmIHJvd0JpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0ZWxlbWVudCxcblx0XHRcdFx0XHRcdFx0cm93QmluZGluZyxcblx0XHRcdFx0XHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdFx0XHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwLFxuXHRcdFx0XHRcdFx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvID0gb2JqLm9UYXJnZXRUYWJsZUluZm87XG5cdFx0XHRcdFx0XHRpZiAob2JqLnN1YlRpdGxlKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0U3VidGl0bGUob2JqLnN1YlRpdGxlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZShcblx0XHRcdFx0XHRcdFx0ISF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCAmJlxuXHRcdFx0XHRcdFx0XHRcdCF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dD8uaXNJbmFjdGl2ZSgpICYmIC8vIGNoZWNrIGlmIHRoZSByb3djb250ZXh0IGlzIGFjdGl2ZVxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LmdldFBhdGgoKSAhPT1cblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRQcm9wZXJ0eShcInRhcmdldFwiKS5yZXBsYWNlKC9cXC8kLywgXCJcIikgLy8gY2hlY2sgaWYgdGhlIHRhcmdldCBvZiB0aGUgbWVzc2FnZSBpcyBub3QgdGhlIHJvdyBpdHNlbGYgKHJlbW92ZSB0aGUgbGFzdCAvIGlmIHByZXNlbnRzKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0ICYmICF0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJvd0luZGV4ID0gdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgJiYgdGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0XHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRyb3dJbmRleCxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZSh0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChtZXNzYWdlLmdldFN1YnRpdGxlKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdGxldCBmb3JtRWxlbWVudDogRm9ybUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRsZXQgcGFyZW50ID0gdGFyZ2V0ZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0d2hpbGUgKHBhcmVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudC5pc0E8Rm9ybUVsZW1lbnQ+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnQgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoZm9ybUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWwgPSBmb3JtRWxlbWVudC5nZXRMYWJlbCgpO1xuXHRcdFx0XHRcdFx0XHRsZXQgbGFiZWxUZXh0ID0gXCJcIjtcblxuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxUZXh0ID0gbGFiZWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxUZXh0ID0gKGxhYmVsIGFzIExhYmVsKS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRTdWJ0aXRsZShsYWJlbFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vY2hlY2sgaWYgdGhlIHRhcmdldGVkIGNvbnRyb2wgaXMgYSBjaGlsZCBvZiBvbmUgb2YgdGhlIG90aGVyIGNvbnRyb2xzXG5cdFx0XHRcdFx0Y29uc3QgaXNUYXJnZXRlZENvbnRyb2xPcnBoYW4gPSBtZXNzYWdlSGFuZGxpbmcuYklzT3JwaGFuRWxlbWVudCh0YXJnZXRlZENvbnRyb2wsIGVsZW1lbnRzKTtcblx0XHRcdFx0XHRpZiAoaXNUYXJnZXRlZENvbnRyb2xPcnBoYW4pIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL1RoZXJlIGlzIG9ubHkgb25lIGVsdCBhcyB0aGlzIGlzIGEgZnJvbnRFbmQgbWVzc2FnZVxuXHRcdFx0dGFyZ2V0ZWRDb250cm9sID0gZWxlbWVudHNbMF07XG5cdFx0XHR0YWJsZSA9IHRoaXMuX2dldE1kY1RhYmxlKHRhcmdldGVkQ29udHJvbCk7XG5cdFx0XHR0YXJnZXRUYWJsZUluZm8gPSB7fSBhcyBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRcdFx0aWYgKHRhYmxlKSB7XG5cdFx0XHRcdHRhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlciA9IHRhYmxlLmdldEhlYWRlcigpO1xuXHRcdFx0XHRjb25zdCB0YXJnZXRDb2x1bW5JbmRleCA9IHRoaXMuX2dldFRhYmxlQ29sdW1uSW5kZXgodGFyZ2V0ZWRDb250cm9sKTtcblx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ID1cblx0XHRcdFx0XHR0YXJnZXRDb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldENvbHVtbkluZGV4ID4gLTFcblx0XHRcdFx0XHRcdD8gdGFibGUuZ2V0Q29sdW1ucygpW3RhcmdldENvbHVtbkluZGV4XS5nZXRQcm9wZXJ0eUtleSgpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSA9XG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5ICYmIHRhcmdldENvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0Q29sdW1uSW5kZXggPiAtMVxuXHRcdFx0XHRcdFx0PyB0YWJsZS5nZXRDb2x1bW5zKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldEhlYWRlcigpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aXNDcmVhdGlvblJvdyA9IHRoaXMuX2dldFRhYmxlUm93KHRhcmdldGVkQ29udHJvbCk/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgPz8gZmFsc2U7XG5cdFx0XHRcdGlmICghaXNDcmVhdGlvblJvdykge1xuXHRcdFx0XHRcdHJvd0luZGV4ID0gdGhpcy5fZ2V0VGFibGVSb3dJbmRleCh0YXJnZXRlZENvbnRyb2wpO1xuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHMgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQgPVxuXHRcdFx0XHRcdFx0cm93SW5kZXggIT09IHVuZGVmaW5lZCA/IHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dCaW5kaW5nQ29udGV4dHNbcm93SW5kZXhdIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdWJ0aXRsZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlU3VidGl0bGUoXG5cdFx0XHRcdFx0bWVzc2FnZU9iamVjdCxcblx0XHRcdFx0XHR0YXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LFxuXHRcdFx0XHRcdHRhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGlzQ3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0dGFyZ2V0Q29sdW1uSW5kZXggPT09IDAgJiYgKHRhcmdldGVkQ29udHJvbCBhcyBtZGNGaWVsZCkuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCJcblx0XHRcdFx0XHRcdD8gKHRhcmdldGVkQ29udHJvbCBhcyBDb250cm9sKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly9zZXQgdGhlIHN1YnRpdGxlXG5cdFx0XHRcdGlmIChtZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdFx0XHRtZXNzYWdlLnNldFN1YnRpdGxlKG1lc3NhZ2VTdWJ0aXRsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZSghIXRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fZm9ybWF0TWVzc2FnZURlc2NyaXB0aW9uKG1lc3NhZ2UsIHRhcmdldFRhYmxlSW5mby5vVGFibGVSb3dDb250ZXh0LCB0YXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSwgdGFibGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUludGVybmFsTW9kZWwoXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLm9UYWJsZVJvd0NvbnRleHQsXG5cdFx0XHRcdFx0cm93SW5kZXgsXG5cdFx0XHRcdFx0dGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdG1lc3NhZ2VPYmplY3QsXG5cdFx0XHRcdFx0aXNDcmVhdGlvblJvd1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzZXRTZWN0aW9uTmFtZUluR3JvdXApIHtcblx0XHRcdGNvbnN0IGluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IHRoaXMuX2NoZWNrTWVyZ2VMb2dpY0Zvck1lc3NhZ2VHcm91cGluZyhzZWN0aW9uLCBzdWJTZWN0aW9uLCBoYXNNdWx0aXBsZVN1YlNlY3Rpb25zKTtcblx0XHRcdGNvbnN0IHNlY3Rpb25CYXNlZEdyb3VwTmFtZSA9IG1lc3NhZ2VIYW5kbGluZy5jcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRcdFx0XHRzZWN0aW9uLFxuXHRcdFx0XHRzdWJTZWN0aW9uLFxuXHRcdFx0XHRoYXNNdWx0aXBsZVN1YlNlY3Rpb25zLFxuXHRcdFx0XHR0YXJnZXRUYWJsZUluZm8sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdGluY2x1ZGVUYWJsZUdyb3VwTmFtZVxuXHRcdFx0KTtcblxuXHRcdFx0bWVzc2FnZS5zZXRHcm91cE5hbWUoc2VjdGlvbkJhc2VkR3JvdXBOYW1lKTtcblx0XHRcdGNvbnN0IHZpZXcgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpIGFzIHN0cmluZyk7XG5cdFx0XHRjb25zdCB2aWV3Q29udGV4dFBhdGggPSB2aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0UHJvcGVydHlOYW1lID0gbWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0/LnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3Py5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoID0gaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiKTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlDb250ZXh0UGF0aCA9IGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoPy5zdWJzdHJpbmcoXG5cdFx0XHRcdDAsXG5cdFx0XHRcdGludGVybmFsTW9kZWxNZXNzYWdlVGFyZ2V0UHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKVxuXHRcdFx0KTtcblx0XHRcdC8vIGFjdGl2ZVRpdGxlUHJlc3Mgc2hvdWxkIG9ubHkgYmUgdHJpZ2dlcmVkIGluIGZvcndhcmQgbmF2aWdhdGlvbiBhbmQgbm90IGluIGJhY2sgbmF2aWdhdGlvblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGggJiZcblx0XHRcdFx0bWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSAmJlxuXHRcdFx0XHR2aWV3Q29udGV4dFBhdGggJiZcblx0XHRcdFx0bWVzc2FnZVRhcmdldFByb3BlcnR5TmFtZSA9PT0gaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLnBvcCgpICYmXG5cdFx0XHRcdHZpZXdDb250ZXh0UGF0aC5sZW5ndGggPj0gaW50ZXJuYWxNb2RlbE1lc3NhZ2VUYXJnZXRQcm9wZXJ0eUNvbnRleHRQYXRoLmxlbmd0aCAmJlxuXHRcdFx0XHR2aWV3Q29udGV4dFBhdGguc3RhcnRzV2l0aChpbnRlcm5hbE1vZGVsTWVzc2FnZVRhcmdldFByb3BlcnR5Q29udGV4dFBhdGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIuZmlyZUFjdGl2ZVRpdGxlUHJlc3MoeyBpdGVtOiBtZXNzYWdlIH0pO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fc2V0TWVzc2FnZURhdGEsIHRoaXMpO1xuXHRcdHJldHVybiB0YXJnZXRlZENvbnRyb2w7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCB0byBjaGVjayBpZiB0aGUgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiBoYXMgc2luZ2xlIHRhYmxlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBzZWN0aW9uIE9iamVjdFBhZ2Ugc2VjdGlvbi5cblx0ICogQHBhcmFtIHN1YlNlY3Rpb24gT2JqZWN0UGFnZSBzdWIgc2VjdGlvbi5cblx0ICogQHBhcmFtIGhhc011bHRpcGxlU3ViU2VjdGlvbnMgVHJ1ZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSBzdWJzZWN0aW9uIGluIHRoZSBzZWN0aW9uLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGJvb2xlYW4gdmFsdWUgZm9yIHRoZSBzaW5nbGUgY29udHJvbCBpbnNpZGUgdGhlIHNlY3Rpb24sIGJ5IGRlZmF1bHQgaXQgaXMgdHJ1ZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9jaGVja01lcmdlTG9naWNGb3JNZXNzYWdlR3JvdXBpbmcoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0aGFzTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhblxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKTtcblx0XHRjb25zdCB2aWV3ID0gdmlld0lkID8gKFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmlld0lkKSBhcyBWaWV3KSA6IHVuZGVmaW5lZDtcblx0XHRsZXQgYkluY2x1ZGVUYWJsZUdyb3VwTmFtZSA9IHRydWU7XG5cdFx0Y29uc3Qgc2luZ2xlU3Vic2VjdGlvbkluUGFnZUxheW91dCA9XG5cdFx0XHQhaGFzTXVsdGlwbGVTdWJTZWN0aW9ucyAmJiAodmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyk/LnNlY3Rpb25MYXlvdXQgPT09IFwiUGFnZVwiO1xuXHRcdGNvbnN0IG11bHRpU3Vic2VjdGlvbkluVGFiTGF5b3V0ID1cblx0XHRcdGhhc011bHRpcGxlU3ViU2VjdGlvbnMgJiYgKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpPy5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIjtcblx0XHRpZiAoc2luZ2xlU3Vic2VjdGlvbkluUGFnZUxheW91dCkge1xuXHRcdFx0Y29uc3QgYmxvY2sgPSBzdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0Y29uc3QgY29udGVudCA9IGJsb2NrLmxlbmd0aCA9PT0gMSA/IChibG9ja1swXS5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIikgYXMgTWFuYWdlZE9iamVjdCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoY29udGVudD8uaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRiSW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtdWx0aVN1YnNlY3Rpb25JblRhYkxheW91dCkge1xuXHRcdFx0bGV0IGNvbnRlbnQ7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBzdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBSZWZlcmVuY2UgRmFjZXQsIHRoZSBmaXJzdCBibG9jayB3aWxsIGJlIFN1YlNlY3Rpb25CbG9ja1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEgJiYgYmxvY2tzWzBdPy5pc0E8U3ViU2VjdGlvbkJsb2NrPihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdFx0Y29udGVudCA9IGJsb2Nrc1swXS5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIikgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdFx0aWYgKGNvbnRlbnQ/LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0XHRiSW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKGNvbnRlbnQgYXMgRHluYW1pY1NpZGVDb250ZW50KT8uaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0XHRjb250ZW50ID1cblx0XHRcdFx0XHRcdChjb250ZW50IGFzIER5bmFtaWNTaWRlQ29udGVudCkuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJlxuXHRcdFx0XHRcdFx0KGNvbnRlbnQgYXMgRHluYW1pY1NpZGVDb250ZW50KT8uZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0XHRpZiAoY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCA9PT0gMSAmJiBjb250ZW50WzBdPy5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRiSW5jbHVkZVRhYmxlR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSW5jbHVkZVRhYmxlR3JvdXBOYW1lO1xuXHR9XG5cblx0X2NoZWNrQ29udHJvbElkSW5TZWN0aW9ucyhtZXNzYWdlczogTWVzc2FnZUl0ZW1bXSwgZW5hYmxlQmluZGluZz86IGJvb2xlYW4pOiBib29sZWFuIHwgdm9pZCB7XG5cdFx0bGV0IHNlY3Rpb24sIGFTdWJTZWN0aW9ucywgbWVzc2FnZSwgaSwgaiwgaztcblx0XHR0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ID0gdGhpcy5zR2VuZXJhbEdyb3VwVGV4dFxuXHRcdFx0PyB0aGlzLnNHZW5lcmFsR3JvdXBUZXh0XG5cdFx0XHQ6IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdC8vR2V0IGFsbCBzZWN0aW9ucyBmcm9tIHRoZSBvYmplY3QgcGFnZSBsYXlvdXRcblx0XHRjb25zdCBhVmlzaWJsZVNlY3Rpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQhKTtcblx0XHRpZiAoYVZpc2libGVTZWN0aW9ucykge1xuXHRcdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5fZ2V0Vmlld0lkKHRoaXMuZ2V0SWQoKSk7XG5cdFx0XHRjb25zdCBvVmlldyA9IHZpZXdJZCA/IChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykgOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IG9WaWV3Py5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNBY3Rpb25OYW1lXCIpO1xuXHRcdFx0aWYgKHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRcdChvVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiLCBudWxsKTtcblx0XHRcdH1cblx0XHRcdGZvciAoaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgbWVzc2FnZXNcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuXHRcdFx0XHRsZXQgYklzR2VuZXJhbEdyb3VwTmFtZSA9IHRydWU7XG5cdFx0XHRcdGZvciAoaiA9IGFWaXNpYmxlU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0XHRsZXQgc2hvdWxkQnJlYWsgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHZpc2libGUgc2VjdGlvbnNcblx0XHRcdFx0XHRzZWN0aW9uID0gYVZpc2libGVTZWN0aW9uc1tqXTtcblx0XHRcdFx0XHRhU3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdFx0Zm9yIChrID0gYVN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IGsgPj0gMDsgLS1rKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9uc1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gbWVzc2FnZT8uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdHRoaXMuc0dlbmVyYWxHcm91cFRleHQgPSB0aGlzLl9nZXRHZW5lcmFsR3JvdXBUZXh0KG9WaWV3LCBvTWVzc2FnZU9iamVjdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbiwgb01lc3NhZ2VPYmplY3QpO1xuXHRcdFx0XHRcdFx0aWYgKGFDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRlZENvbnRyb2wgPSB0aGlzLl9jb21wdXRlTWVzc2FnZUdyb3VwQW5kU3ViVGl0bGUoXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0XHRzZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLFxuXHRcdFx0XHRcdFx0XHRcdGFTdWJTZWN0aW9ucy5sZW5ndGggPiAxLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgd2UgZm91bmQgdGFibGUgdGhhdCBtYXRjaGVzIHdpdGggdGhlIG1lc3NhZ2UsIHdlIGRvbid0IHN0b3AgdGhlIGxvb3Bcblx0XHRcdFx0XHRcdFx0Ly8gaW4gY2FzZSB3ZSBmaW5kIGFuIGFkZGl0aW9uYWwgY29udHJvbCAoZWcgbWRjIGZpZWxkKSB0aGF0IGFsc28gbWF0Y2ggd2l0aCB0aGUgbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0b1RhcmdldGVkQ29udHJvbCAmJlxuXHRcdFx0XHRcdFx0XHRcdCFvVGFyZ2V0ZWRDb250cm9sLmlzQShcInNhcC5tLlRhYmxlXCIpICYmXG5cdFx0XHRcdFx0XHRcdFx0IShvVGFyZ2V0ZWRDb250cm9sIGFzIFVJNUVsZW1lbnQpLmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRzaG91bGRCcmVhayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHNob3VsZEJyZWFrKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGJJc0dlbmVyYWxHcm91cE5hbWUpIHtcblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IG1lc3NhZ2UuZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpPy5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZSh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZShmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvTWVzc2FnZU9iamVjdC5wZXJzaXN0ZW50ICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9zZXRHcm91cExhYmVsRm9yVHJhbnNpZW50TXNnKG1lc3NhZ2UsIHNBY3Rpb25OYW1lKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRHcm91cE5hbWUodGhpcy5zR2VuZXJhbEdyb3VwVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZW5hYmxlQmluZGluZyAmJiBtZXNzYWdlLmdldEdyb3VwTmFtZSgpID09PSB0aGlzLnNHZW5lcmFsR3JvdXBUZXh0ICYmIHRoaXMuX2ZpbmRUYXJnZXRGb3JNZXNzYWdlKG1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiB0aGUgc2VjdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB2aWV3IHBvcnRcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vRmV0Y2hlcyB0aGUgZ3JvdXAgbmFtZSBvZiB0aGUgbWVzc2FnZSBiYXNlZCBvbiBlbmFibGVkbWVudCBvZiBoaWRkZW4gZHJhZnQgYW5kIHBhZ2Ugd2hlcmUgZXJyb3IgaXMgcHJlc2VudChjdXJyZW50IHBhZ2Uvb3RoZXIgcGFnZSlcblx0X2dldEdlbmVyYWxHcm91cFRleHQob1ZpZXc6IFZpZXcgfCB1bmRlZmluZWQsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlKTogc3RyaW5nIHtcblx0XHRjb25zdCB2aWV3UGF0aCA9IG9WaWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbWVzc2FnZVRhcmdldFBhdGggPSBvTWVzc2FnZU9iamVjdD8uZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkICYmIHZpZXdQYXRoICYmICFtZXNzYWdlVGFyZ2V0UGF0aC5pbmNsdWRlcyh2aWV3UGF0aCkpIHtcblx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfT1RIRVJfUEFHRVNcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZmluZFRhcmdldEZvck1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUl0ZW0pOiBib29sZWFuIHtcblx0XHRjb25zdCBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikgJiYgbWVzc2FnZS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdGlmIChtZXNzYWdlT2JqZWN0ICYmIG1lc3NhZ2VPYmplY3QudGFyZ2V0KSB7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5vT2JqZWN0UGFnZUxheW91dD8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdGNvbnRleHRQYXRoID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG1lc3NhZ2VPYmplY3QudGFyZ2V0KSxcblx0XHRcdFx0b0NvbnRleHRQYXRoTWV0YWRhdGEgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblx0XHRcdGlmIChvQ29udGV4dFBhdGhNZXRhZGF0YSAmJiBvQ29udGV4dFBhdGhNZXRhZGF0YS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlIGJpbmRpbmdzIG9mIHN1YiBzZWN0aW9uIGNvbnRlbnQgKGJsb2NrcywgbW9yZSBibG9ja3MsIGFuZCBhY3Rpb25zKS5cblx0ICogQHBhcmFtIHN1YlNlY3Rpb24gT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25cblx0ICovXG5cdF9mbkVuYWJsZVN1YlNlY3Rpb25CaW5kaW5nKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKTogdm9pZCB7XG5cdFx0c3ViU2VjdGlvbi5nZXRCbG9ja3MoKS5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0c3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdHN1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfZm5FbmFibGVCaW5kaW5ncyhhU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3Qgb0FsbEJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0XHRpZiAob0FsbEJsb2Nrcykge1xuXHRcdFx0XHRcdHRoaXMuX2ZuRW5hYmxlU3ViU2VjdGlvbkJpbmRpbmcob1N1YlNlY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5fZmluZE1lc3NhZ2VHcm91cEFmdGVyUmViaW5kaW5nKCk7XG5cdFx0XHRcdFx0KG9TdWJTZWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHRcdFx0XHQuZ2V0QmluZGluZygpXG5cdFx0XHRcdFx0XHQuYXR0YWNoRGF0YVJlY2VpdmVkKHRoaXMuX2ZpbmRNZXNzYWdlR3JvdXBBZnRlclJlYmluZGluZy5iaW5kKHRoaXMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9maW5kTWVzc2FnZUdyb3VwQWZ0ZXJSZWJpbmRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgYU1lc3NhZ2VzID0gdGhpcy5vTWVzc2FnZVBvcG92ZXIuZ2V0SXRlbXMoKTtcblx0XHR0aGlzLl9jaGVja0NvbnRyb2xJZEluU2VjdGlvbnMoYU1lc3NhZ2VzLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgcmV0cmlldmVzIHRoZSB2aWV3IElEIChIVE1MVmlldy9YTUxWaWV3L0pTT052aWV3L0pTVmlldy9UZW1wbGF0ZXZpZXcpIG9mIGFueSBjb250cm9sLlxuXHQgKiBAcGFyYW0gc0NvbnRyb2xJZCBJRCBvZiB0aGUgY29udHJvbCBuZWVkZWQgdG8gcmV0cmlldmUgdGhlIHZpZXcgSURcblx0ICogQHJldHVybnMgVGhlIHZpZXcgSUQgb2YgdGhlIGNvbnRyb2xcblx0ICovXG5cdF9nZXRWaWV3SWQoc0NvbnRyb2xJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgc1ZpZXdJZCxcblx0XHRcdG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkIHwgbnVsbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc0NvbnRyb2xJZCk7XG5cdFx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiBWaWV3KSB7XG5cdFx0XHRcdHNWaWV3SWQgPSBvQ29udHJvbC5nZXRJZCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBzVmlld0lkO1xuXHR9XG5cblx0X3NldExvbmd0ZXh0VXJsRGVzY3JpcHRpb24ob0RpYWdub3Npc1RpdGxlOiBGb3JtYXR0ZWRUZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5vTWVzc2FnZVBvcG92ZXIuc2V0QXN5bmNEZXNjcmlwdGlvbkhhbmRsZXIoZnVuY3Rpb24gKGNvbmZpZzoge1xuXHRcdFx0aXRlbTogTWVzc2FnZUl0ZW07XG5cdFx0XHRwcm9taXNlOiB7XG5cdFx0XHRcdHJlc29sdmU6IEZ1bmN0aW9uO1xuXHRcdFx0XHRyZWplY3Q6IEZ1bmN0aW9uO1xuXHRcdFx0fTtcblx0XHR9KSB7XG5cdFx0XHQvLyBIZXJlIHdlIGNhbiBmZXRjaCB0aGUgZGF0YSBhbmQgY29uY2F0ZW5hdGUgaXQgdG8gdGhlIG9sZCBvbmVcblx0XHRcdC8vIEJ5IGRlZmF1bHQsIHRoZSBsb25ndGV4dFVybCBmZXRjaGluZyB3aWxsIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRpb24gKHdpdGggdGhlIGRlZmF1bHQgYmVoYXZpb3VyKVxuXHRcdFx0Ly8gSGVyZSBhcyB3ZSBoYXZlIG92ZXJ3cml0dGVuIHRoZSBkZWZhdWx0IGFzeW5jIGhhbmRsZXIsIHdoaWNoIGZldGNoZXMgYW5kIHJlcGxhY2VzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaXRlbVxuXHRcdFx0Ly8gd2UgY2FuIG1hbnVhbGx5IG1vZGlmeSBpdCB0byBpbmNsdWRlIHdoYXRldmVyIG5lZWRlZC5cblx0XHRcdGNvbnN0IHNMb25nVGV4dFVybCA9IGNvbmZpZy5pdGVtLmdldExvbmd0ZXh0VXJsKCk7XG5cdFx0XHRpZiAoc0xvbmdUZXh0VXJsKSB7XG5cdFx0XHRcdGpRdWVyeS5hamF4KHtcblx0XHRcdFx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdFx0XHRcdHVybDogc0xvbmdUZXh0VXJsLFxuXHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNEaWFnbm9zaXNUZXh0ID0gb0RpYWdub3Npc1RpdGxlLmdldEh0bWxUZXh0KCkgKyBkYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkRGVzY3JpcHRpb24gPSBjb25maWcuaXRlbS5nZXREZXNjcmlwdGlvbigpID8/IFwiXCI7XG5cdFx0XHRcdFx0XHRjb25maWcuaXRlbS5zZXREZXNjcmlwdGlvbihgJHtvbGREZXNjcmlwdGlvbn0ke3NEaWFnbm9zaXNUZXh0fWApO1xuXHRcdFx0XHRcdFx0Y29uZmlnLnByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3I6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNFcnJvciA9IGBBIHJlcXVlc3QgaGFzIGZhaWxlZCBmb3IgbG9uZyB0ZXh0IGRhdGEuIFVSTDogJHtzTG9uZ1RleHRVcmx9YDtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihzRXJyb3IpO1xuXHRcdFx0XHRcdFx0Y29uZmlnLnByb21pc2UucmVqZWN0KHNFcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdCBkaXNwbGF5cyB0aGUgcm93IGluZm9ybWF0aW9uIG9mIHRoZSBlcnJvciBleGlzdGluZyBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG5cdCAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG5cdCAqIEByZXR1cm5zIHJvd0luZm9ybWF0aW9uXG5cdCAqL1xuXG5cdHByb2Nlc3NUYWJsZUNvbHVtblByb3BlcnRpZXModGFibGU6IFRhYmxlLCB0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCB0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCByb3dJbmZvcm1hdGlvbiA9IFwiXCI7XG5cblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGxhYmVsV2l0aFZhbHVlID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKT8uZ2V0VGFibGVDb2xWYWx1ZShcblx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoLFxuXHRcdFx0dGFibGVDb2xUZXh0QXJyYW5nZW1lbnQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRyb3dJbmZvcm1hdGlvbiArPSBgJHtsYWJlbFdpdGhWYWx1ZX1gO1xuXG5cdFx0cmV0dXJuIHJvd0luZm9ybWF0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0IGNvbXB1dGVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB0YWJsZVRhcmdldENvbE5hbWVcblx0ICogQHBhcmFtIHJvd0luZm9ybWF0aW9uXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBjb2x1bW5JbmZvXG5cdCAqL1xuXG5cdGNvbXB1dGVDb2x1bW5JbmZvKG1lc3NhZ2U6IE1lc3NhZ2VJdGVtLCB0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcm93SW5mb3JtYXRpb246IHN0cmluZ1tdLCB0YWJsZTogVGFibGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBtc2dPYmogPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1zZ09iaiwgdGFibGUpO1xuXHRcdGxldCBjb2x1bW5JbmZvID0gXCJcIjtcblxuXHRcdGlmICh0YWJsZVRhcmdldENvbE5hbWUpIHtcblx0XHRcdC8vIGlmIGNvbHVtbiBpbiBwcmVzZW50IGluIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbHVtbkluZm8gPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpfTogJHt0YWJsZVRhcmdldENvbE5hbWV9YDtcblx0XHR9IGVsc2UgaWYgKGNvbEZyb21UYWJsZVNldHRpbmdzKSB7XG5cdFx0XHRpZiAoY29sRnJvbVRhYmxlU2V0dGluZ3MuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdC8vIGlmIGNvbHVtbiBpbiBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHRpZiAobWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIikge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8gPVxuXHRcdFx0XHRcdFx0cm93SW5mb3JtYXRpb24ubGVuZ3RoID4gMFxuXHRcdFx0XHRcdFx0XHQ/IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ19FUlJPUlwiKX0gJHtyb3dJbmZvcm1hdGlvbi5qb2luKFwiLCBcIil9YCArIFwiLlwiXG5cdFx0XHRcdFx0XHRcdDogYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fQVZBSUxBQkxFX0RJQUdOT1NJU19NU0dERVNDX0VSUk9SXCIpfWAgKyBcIi5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvID1cblx0XHRcdFx0XHRcdHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTFVNTl9BVkFJTEFCTEVfRElBR05PU0lTX01TR0RFU0NcIil9ICR7cm93SW5mb3JtYXRpb24uam9pbihcIiwgXCIpfWAgKyBcIi5cIlxuXHRcdFx0XHRcdFx0XHQ6IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQ09MVU1OX0FWQUlMQUJMRV9ESUFHTk9TSVNfTVNHREVTQ1wiKX1gICsgXCIuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGlmIGNvbHVtbiBpcyBub3QgaW4gdGFibGUgZGVmaW5pdGlvbiBidXQgaW4gcGVyc29uYWxpemF0aW9uXG5cdFx0XHRcdC8vaWYgbm8gbmF2aWdhdGlvbiB0byBzdWIgb3AgdGhlbiByZW1vdmUgbGluayB0byBlcnJvciBmaWVsZCBCQ1AgOiAyMjgwMTY4ODk5XG5cdFx0XHRcdGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFibGUpKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRBY3RpdmVUaXRsZShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29sdW1uSW5mbyA9IGAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9DT0xVTU5cIil9OiAke1xuXHRcdFx0XHRcdGNvbEZyb21UYWJsZVNldHRpbmdzLmxhYmVsXG5cdFx0XHRcdH0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT0xVTU5fSU5ESUNBVE9SX0lOX1RBQkxFX0RFRklOSVRJT05cIil9KWA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdH1cblxuXHQvKipcblx0ICogSXQgZGlzcGxheXMgdGhlIHJvdyBpbmZvcm1hdGlvbiBvZiB0aGUgZXJyb3IgZXhpc3RpbmcgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG5cdCAqIEBwYXJhbSB0YWJsZVRhcmdldENvbE5hbWVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqL1xuXG5cdF9mb3JtYXRNZXNzYWdlRGVzY3JpcHRpb24oXG5cdFx0bWVzc2FnZTogTWVzc2FnZUl0ZW0sXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZTogTURDVGFibGVcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGFibGUpO1xuXHRcdGNvbnN0IHRhYmxlQ29sUHJvcGVydHkgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbHVtblZpc2liaWxpdHlJbmZvKHRhYmxlUm93Q29udGV4dCk7XG5cblx0XHRjb25zdCByb3dJbmZvcm1hdGlvbjogc3RyaW5nW10gPSBbXTtcblx0XHR0YWJsZUNvbFByb3BlcnR5Py5mb3JFYWNoKCh7IGtleSwgdmlzaWJpbGl0eSB9KSA9PiB7XG5cdFx0XHRyb3dJbmZvcm1hdGlvbi5wdXNoKHRoaXMucHJvY2Vzc1RhYmxlQ29sdW1uUHJvcGVydGllcyh0YWJsZSwgdGFibGVSb3dDb250ZXh0LCBbeyBrZXksIHZpc2liaWxpdHkgfV0pKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbXB1dGVDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlVGFyZ2V0Q29sTmFtZSwgcm93SW5mb3JtYXRpb24sIHRhYmxlKTtcblxuXHRcdGNvbnN0IGZpZWxkc0FmZmVjdGVkVGl0bGUgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRodG1sVGV4dDogYDxodG1sPjxib2R5PjxzdHJvbmc+JHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0ZJRUxEU19BRkZFQ1RFRF9USVRMRVwiKX08L3N0cm9uZz48L2JvZHk+PC9odG1sPjxicj5gXG5cdFx0fSk7XG5cdFx0bGV0IGZpZWxkQWZmZWN0ZWRUZXh0OiBzdHJpbmc7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocm93SW5mb3JtYXRpb24pICYmIHJvd0luZm9ybWF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChyb3dJbmZvcm1hdGlvbi5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmXigJlzIG9ubHkgb25lIGNvbHVtbiBpbiB0aGUgdGFibGUsIGRpc3BsYXkgaXQgaW4gYSBzaW5nbGUgbGluZS5cblx0XHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCJcblx0XHRcdFx0KX06ICR7dGFibGUuZ2V0SGVhZGVyKCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiXG5cdFx0XHRcdCl9OiAke3Jvd0luZm9ybWF0aW9ufTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29sdW1ucyBpbiB0aGUgdGFibGUsIGRpc3BsYXkgdGhlbSBpbiBtdWx0aXBsZSBsaW5lcy5cblx0XHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBgJHtmaWVsZHNBZmZlY3RlZFRpdGxlLmdldEh0bWxUZXh0KCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCJcblx0XHRcdFx0KX06ICR7dGFibGUuZ2V0SGVhZGVyKCl9PGJyPiR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiXG5cdFx0XHRcdCl9Ojxicj4mZW1zcDsgJHtyb3dJbmZvcm1hdGlvbi5qb2luKFwiPGJyPiZlbXNwOyBcIil9PGJyPiR7Y29sdW1uSW5mb308YnI+YDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNvbHVtbkluZm8gPT0gXCJcIiB8fCAhY29sdW1uSW5mbykge1xuXHRcdFx0ZmllbGRBZmZlY3RlZFRleHQgPSBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWVsZEFmZmVjdGVkVGV4dCA9IGAke2ZpZWxkc0FmZmVjdGVkVGl0bGUuZ2V0SHRtbFRleHQoKX08YnI+JHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFwiVF9NRVNTQUdFX0dST1VQX1RJVExFX1RBQkxFX0RFTk9NSU5BVE9SXCJcblx0XHRcdCl9OiAke3RhYmxlLmdldEhlYWRlcigpfTxicj4ke2NvbHVtbkluZm99PGJyPmA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGlhZ25vc2lzVGl0bGUgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRodG1sVGV4dDogYDxodG1sPjxib2R5PjxzdHJvbmc+JHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0RJQUdOT1NJU19USVRMRVwiKX08L3N0cm9uZz48L2JvZHk+PC9odG1sPjxicj5gXG5cdFx0fSk7XG5cdFx0Ly8gZ2V0IHRoZSBVSSBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIGNvbnRleHQgdG8gc2V0IGl0IHRvIERpYWdub3NpcyBzZWN0aW9uXG5cdFx0Y29uc3QgdUlNZXNzYWdlRGVzY3JpcHRpb24gPSBtZXNzYWdlLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkuZGVzY3JpcHRpb247XG5cdFx0Ly9zZXQgdGhlIGRlc2NyaXB0aW9uIHRvIHVuZGVmaW5lZCB0byByZXNldCBpdCBiZWxvd1xuXHRcdG1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24odW5kZWZpbmVkKTtcblx0XHRsZXQgZGlhZ25vc2lzVGV4dCA9IFwiXCI7XG5cdFx0bGV0IG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBcIlwiO1xuXHRcdGlmIChtZXNzYWdlLmdldExvbmd0ZXh0VXJsKCkpIHtcblx0XHRcdG1lc3NhZ2VEZXNjcmlwdGlvbkNvbnRlbnQgPSBmaWVsZEFmZmVjdGVkVGV4dCA/IGAke2ZpZWxkQWZmZWN0ZWRUZXh0fTxicj5gIDogXCJcIjtcblx0XHRcdG1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24obWVzc2FnZURlc2NyaXB0aW9uQ29udGVudCk7XG5cdFx0XHR0aGlzLl9zZXRMb25ndGV4dFVybERlc2NyaXB0aW9uKGRpYWdub3Npc1RpdGxlKTtcblx0XHR9IGVsc2UgaWYgKHVJTWVzc2FnZURlc2NyaXB0aW9uKSB7XG5cdFx0XHRkaWFnbm9zaXNUZXh0ID0gYCR7ZGlhZ25vc2lzVGl0bGUuZ2V0SHRtbFRleHQoKX08YnI+JHt1SU1lc3NhZ2VEZXNjcmlwdGlvbn1gO1xuXHRcdFx0bWVzc2FnZURlc2NyaXB0aW9uQ29udGVudCA9IGAke2ZpZWxkQWZmZWN0ZWRUZXh0fTxicj4ke2RpYWdub3Npc1RleHR9YDtcblx0XHRcdG1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24obWVzc2FnZURlc2NyaXB0aW9uQ29udGVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oZmllbGRBZmZlY3RlZFRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaGVuIHRoZXJlIGFyZSBubyBtZXNzYWdlcyB0byBzaG93IGluIHRoZSBNZXNzYWdlIEJveC5cblx0ICovXG5cdGhhbmRsZU5vTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZpcmVFdmVudChcIm1lc3NhZ2VDaGFuZ2VcIiwge1xuXHRcdFx0aU1lc3NhZ2VMZW5ndGg6IDBcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBidXR0b24gdGV4dCwgY291bnQgYW5kIGljb24gcHJvcGVydHkgYmFzZWQgdXBvbiB0aGUgbWVzc2FnZSBpdGVtc1xuXHQgKiBCdXR0b25UeXBlOiAgUG9zc2libGUgc2V0dGluZ3MgZm9yIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzIGFyZSAnY3JpdGljYWwnIGFuZCAnbmVnYXRpdmUnLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3NldE1lc3NhZ2VEYXRhKCk6IHZvaWQge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzLl9zZXRNZXNzYWdlRGF0YVRpbWVvdXQpO1xuXG5cdFx0dGhpcy5fc2V0TWVzc2FnZURhdGFUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBzSWNvbiA9IFwiXCIsXG5cdFx0XHRcdG9NZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCksXG5cdFx0XHRcdG9NZXNzYWdlQ291bnQ6IE1lc3NhZ2VDb3VudCA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH0sXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0XHRcdGlNZXNzYWdlTGVuZ3RoID0gb01lc3NhZ2VzLmxlbmd0aDtcblx0XHRcdGxldCBzQnV0dG9uVHlwZSA9IEJ1dHRvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIlwiLFxuXHRcdFx0XHRzVG9vbHRpcFRleHQgPSBcIlwiLFxuXHRcdFx0XHRzTWVzc2FnZVRleHQgPSBcIlwiO1xuXHRcdFx0aWYgKGlNZXNzYWdlTGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlNZXNzYWdlTGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoIW9NZXNzYWdlc1tpXS5nZXRUeXBlKCkgfHwgb01lc3NhZ2VzW2ldLmdldFR5cGUoKS50b1N0cmluZygpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHQrK29NZXNzYWdlQ291bnRbXCJJbmZvcm1hdGlvblwiXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KytvTWVzc2FnZUNvdW50W29NZXNzYWdlc1tpXS5nZXRUeXBlKCkgYXMga2V5b2YgTWVzc2FnZUNvdW50XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5OZWdhdGl2ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5Dcml0aWNhbDtcblx0XHRcdFx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5TdWNjZXNzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdFx0XHRcdHNCdXR0b25UeXBlID0gQnV0dG9uVHlwZS5OZXV0cmFsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdG90YWxOdW1iZXJPZk1lc3NhZ2VzID1cblx0XHRcdFx0XHRvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSArXG5cdFx0XHRcdFx0b01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl07XG5cblx0XHRcdFx0dGhpcy5zZXRUZXh0KHRvdGFsTnVtYmVyT2ZNZXNzYWdlcy50b1N0cmluZygpKTtcblxuXHRcdFx0XHRpZiAob01lc3NhZ2VDb3VudC5FcnJvciA9PT0gMSkge1xuXHRcdFx0XHRcdHNNZXNzYWdlS2V5ID0gXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudC5FcnJvciA+IDEpIHtcblx0XHRcdFx0XHRzTWVzc2FnZUtleSA9IFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9NVUxUSVBMRV9FUlJPUl9UT09MVElQXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9NZXNzYWdlQ291bnQuRXJyb3IgJiYgb01lc3NhZ2VDb3VudC5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfV0FSTklOR19UT09MVElQXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9NZXNzYWdlQ291bnQuRXJyb3IgJiYgIW9NZXNzYWdlQ291bnQuV2FybmluZyAmJiBvTWVzc2FnZUNvdW50LkluZm9ybWF0aW9uKSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VLZXkgPSBcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIjtcblx0XHRcdFx0fSBlbHNlIGlmICghb01lc3NhZ2VDb3VudC5FcnJvciAmJiAhb01lc3NhZ2VDb3VudC5XYXJuaW5nICYmICFvTWVzc2FnZUNvdW50LkluZm9ybWF0aW9uICYmIG9NZXNzYWdlQ291bnQuU3VjY2Vzcykge1xuXHRcdFx0XHRcdHNNZXNzYWdlS2V5ID0gXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNNZXNzYWdlS2V5KSB7XG5cdFx0XHRcdFx0c01lc3NhZ2VUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc01lc3NhZ2VLZXkpO1xuXHRcdFx0XHRcdHNUb29sdGlwVGV4dCA9IG9NZXNzYWdlQ291bnQuRXJyb3IgPyBgJHtvTWVzc2FnZUNvdW50LkVycm9yfSAke3NNZXNzYWdlVGV4dH1gIDogc01lc3NhZ2VUZXh0O1xuXHRcdFx0XHRcdHRoaXMuc2V0VG9vbHRpcChzVG9vbHRpcFRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0SWNvbihzSWNvbik7XG5cdFx0XHRcdHRoaXMuc2V0VHlwZShzQnV0dG9uVHlwZSk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc1ZpZXdJZCkgYXMgRkVWaWV3O1xuXHRcdFx0XHRpZiAob1ZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCBvUGFnZVJlYWR5ID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb1BhZ2VSZWFkeS53YWl0UGFnZVJlYWR5KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9hcHBseUdyb3VwaW5nQXN5bmMob1ZpZXcpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiZmFpbCBncm91cGluZyBtZXNzYWdlc1wiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJtZXNzYWdlQ2hhbmdlXCIsIHtcblx0XHRcdFx0XHRcdGlNZXNzYWdlTGVuZ3RoOiBpTWVzc2FnZUxlbmd0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpTWVzc2FnZUxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aGlzLm9NZXNzYWdlUG9wb3Zlci5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVOb01lc3NhZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSwgMTAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgdGl0bGUgb2YgdGhlIG1lc3NhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSBoYW5kbGVyXG5cdCAqL1xuXHRhc3luYyBfYWN0aXZlVGl0bGVQcmVzcyhvRXZlbnQ6IE1lc3NhZ2VQb3BvdmVyJEFjdGl2ZVRpdGxlUHJlc3NFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgdHJ1ZSk7XG5cdFx0Y29uc3Qgb0l0ZW0gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXRlbVwiKSxcblx0XHRcdG9NZXNzYWdlID0gb0l0ZW0/LmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCksXG5cdFx0XHRiSXNCYWNrZW5kTWVzc2FnZSA9IG5ldyBSZWdFeHAoXCJeL1wiKS50ZXN0KG9NZXNzYWdlLmdldFRhcmdldHMoKVswXSksXG5cdFx0XHRvVmlldyA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zVmlld0lkKSBhcyBWaWV3O1xuXHRcdGlmICghb0l0ZW0pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLCBzU2VjdGlvblRpdGxlO1xuXHRcdGNvbnN0IF9kZWZhdWx0Rm9jdXMgPSBmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSwgbWRjVGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0XHRjb25zdCBmb2N1c0luZm8gPSB7IHByZXZlbnRTY3JvbGw6IHRydWUsIHRhcmdldEluZm86IG1lc3NhZ2UgfTtcblx0XHRcdG1kY1RhYmxlLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fTtcblxuXHRcdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0XHRsZXQgc2VjdGlvbiwgc3ViU2VjdGlvbnMsIG1lc3NhZ2UsIGksIGosIGs7XG5cdFx0Y29uc3QgdmlzaWJsZVNlY3Rpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KHRoaXMub09iamVjdFBhZ2VMYXlvdXQhKTtcblx0XHRpZiAodmlzaWJsZVNlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMub01lc3NhZ2VQb3BvdmVyLmdldEl0ZW1zKCk7XG5cdFx0XHRmb3IgKGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0XHQvLyBMb29wIG92ZXIgYWxsIG1lc3NhZ2VzXG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcblx0XHRcdFx0Zm9yIChqID0gdmlzaWJsZVNlY3Rpb25zLmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG5cdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCB2aXNpYmxlIHNlY3Rpb25zXG5cdFx0XHRcdFx0c2VjdGlvbiA9IHZpc2libGVTZWN0aW9uc1tqXTtcblx0XHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0XHRmb3IgKGsgPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzdWItc2VjdGlvbnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlPy5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIik/LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbHMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24oc3ViU2VjdGlvbiwgbWVzc2FnZU9iamVjdCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1RhcmdldE1kY1RhYmxlID0gb01lc3NhZ2UuY29udHJvbElkc1xuXHRcdFx0Lm1hcCgoY29udHJvbElkOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50Q29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbC5nZXRQYXJlbnQoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gcGFyZW50Q29udHJvbCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGFyZW50Q29udHJvbCAmJlxuXHRcdFx0XHRcdHBhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJlxuXHRcdFx0XHRcdG9JdGVtLmdldEdyb3VwTmFtZSgpLmluY2x1ZGVzKChwYXJlbnRDb250cm9sIGFzIFRhYmxlKS5nZXRIZWFkZXIoKSlcblx0XHRcdFx0XHQ/IHBhcmVudENvbnRyb2xcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHR9KVxuXHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjOiBDb250cm9sLCB2YWw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIHZhbCA/IHZhbCA6IGFjYztcblx0XHRcdH0pO1xuXG5cdFx0Ly9jaGVjayBpZiB0aGUgcHJlc3NlZCBpdGVtIGlzIHJlbGF0ZWQgdG8gYSB0YWJsZSBjb250cm9sXG5cdFx0aWYgKG9UYXJnZXRNZGNUYWJsZSkge1xuXHRcdFx0aWYgKGJJc0JhY2tlbmRNZXNzYWdlKSB7XG5cdFx0XHRcdHNTZWN0aW9uVGl0bGUgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpWzBdO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkICYmIChvVGFyZ2V0TWRjVGFibGUuZ2V0SWQoKSAhPT0gdGhpcy5zVmlld0lkIHx8IGJJc0dlbmVyYWxHcm91cE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLl9nZXRWaWV3SWQob1RhcmdldE1kY1RhYmxlLmdldElkKCkpO1xuXHRcdFx0XHRcdFx0KChVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZpZXdJZCkgYXMgVmlldykuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChcblx0XHRcdFx0XHRcdFx0b1RhcmdldE1kY1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX25hdmlnYXRlRnJvbU1lc3NhZ2VUb1NlY3Rpb25UYWJsZUluSWNvblRhYkJhck1vZGUoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRNZGNUYWJsZSxcblx0XHRcdFx0XHRcdFx0dGhpcy5vT2JqZWN0UGFnZUxheW91dCEsXG5cdFx0XHRcdFx0XHRcdHNTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG9SZWZFcnJvckNvbnRleHQgPSB0aGlzLl9nZXRUYWJsZVJlZkVycm9yQ29udGV4dChvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdGNvbnN0IG9SZWZFcnJvciA9IG9SZWZFcnJvckNvbnRleHQ/LmdldFByb3BlcnR5KG9JdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKT8uZ2V0T2JqZWN0KCkuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0Y29uc3QgX3NldEZvY3VzT25UYXJnZXRGaWVsZCA9IGFzeW5jICh0YXJnZXRNZGNUYWJsZTogTURDVGFibGUsIGlSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuIHwgdW5kZWZpbmVkPiA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhVGFyZ2V0TWRjVGFibGVSb3cgPSB0aGlzLl9nZXRNZGNUYWJsZVJvd3ModGFyZ2V0TWRjVGFibGUpLFxuXHRcdFx0XHRcdFx0XHRpRmlyc3RWaXNpYmxlUm93ID0gdGhpcy5fZ2V0R3JpZFRhYmxlKHRhcmdldE1kY1RhYmxlKT8uZ2V0Rmlyc3RWaXNpYmxlUm93KCkgPz8gMDtcblx0XHRcdFx0XHRcdGlmIChhVGFyZ2V0TWRjVGFibGVSb3cubGVuZ3RoID4gMCAmJiBhVGFyZ2V0TWRjVGFibGVSb3dbMF0pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1RhcmdldFJvdyA9IGFUYXJnZXRNZGNUYWJsZVJvd1tpUm93SW5kZXggLSBpRmlyc3RWaXNpYmxlUm93XSxcblx0XHRcdFx0XHRcdFx0XHRvVGFyZ2V0Q2VsbCA9IHRoaXMuZ2V0VGFyZ2V0Q2VsbChvVGFyZ2V0Um93LCBvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9jdXNUb0NvbnRyb2wob1RhcmdldENlbGwpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29udHJvbCBub3QgZm91bmQgb24gdGFibGVcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5UGF0aCA9IG9NZXNzYWdlLmdldFRhcmdldHMoKVswXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZXJyb3JQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdChvVmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVRhcmdldFByb3BlcnR5UGF0aFwiLCBlcnJvclByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLl9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YXJnZXRNZGNUYWJsZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0TWRjVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSA9PT0gXCJHcmlkVGFibGVcIiAmJiBvUmVmRXJyb3Iucm93SW5kZXggIT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9UYXJnZXRNZGNUYWJsZS5zY3JvbGxUb0luZGV4KG9SZWZFcnJvci5yb3dJbmRleCk7XG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZvY3VzT25UYXJnZXRGaWVsZCA9IGF3YWl0IF9zZXRGb2N1c09uVGFyZ2V0RmllbGQob1RhcmdldE1kY1RhYmxlLCBvUmVmRXJyb3Iucm93SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmb2N1c09uVGFyZ2V0RmllbGQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRfZGVmYXVsdEZvY3VzKG9NZXNzYWdlLCBvVGFyZ2V0TWRjVGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZm9jdXNpbmcgb24gZXJyb3JcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvVGFyZ2V0TWRjVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiAmJiBvUmVmRXJyb3IpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbCA9IGF3YWl0IHRoaXMuZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdFx0XHRcdFx0XHRvVmlldyxcblx0XHRcdFx0XHRcdFx0b01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRNZGNUYWJsZSxcblx0XHRcdFx0XHRcdFx0b1JlZkVycm9yLnJvd0luZGV4XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0aWYgKGZvY3VzT25NZXNzYWdlVGFyZ2V0Q29udHJvbCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0X2RlZmF1bHRGb2N1cyhvTWVzc2FnZSwgb1RhcmdldE1kY1RhYmxlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wob1ZpZXcsIG9NZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkZhaWwgdG8gbmF2aWdhdGUgdG8gRXJyb3IgY29udHJvbFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9NZXNzYWdlLmNvbnRyb2xJZHNbMF0pO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHQvL0lmIHRoZSBjb250cm9sIHVuZGVybHlpbmcgdGhlIGZyb250RW5kIG1lc3NhZ2UgaXMgbm90IHdpdGhpbiB0aGUgY3VycmVudCBzZWN0aW9uLCB3ZSBmaXJzdCBnbyBpbnRvIHRoZSB0YXJnZXQgc2VjdGlvbjpcblx0XHRcdFx0XHRjb25zdCBzZWN0aW9ucyA9ICh0aGlzLm9PYmplY3RQYWdlTGF5b3V0IGFzIE9iamVjdFBhZ2VMYXlvdXQpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRcdFx0Y29uc3Qgc2VjdGlvbldpdGhUaGVDb250cm9sID0gc2VjdGlvbnMuZmluZCgoc2VjdGlvbikgPT4gc2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuaW5jbHVkZXMob0NvbnRyb2wgYXMgVUk1RWxlbWVudCkpO1xuXHRcdFx0XHRcdGlmIChzZWN0aW9uV2l0aFRoZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHNTZWN0aW9uVGl0bGUgPSBvSXRlbS5nZXRHcm91cE5hbWUoKS5zcGxpdChcIiwgXCIpWzBdO1xuXHRcdFx0XHRcdFx0dGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUodGhpcy5vT2JqZWN0UGFnZUxheW91dCEsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9Db250cm9sKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsbCB0aGUgZnVuY3Rpb24gd2hlcmV2ZXIgbmVlZGVkXG5cdFx0XHR0aGlzLmhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uKG9JdGVtLCB2aXNpYmxlU2VjdGlvbnMsIG9NZXNzYWdlLCBvVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIG1lc3NhZ2UgbmF2aWdhdGlvbiBieSBmaW5kaW5nIHRoZSBhc3NvY2lhdGVkIHN1YnNlY3Rpb24sIGV4cGFuZGluZyBpdCxcblx0ICogYW5kIG5hdmlnYXRpbmcgdG8gdGhlIGNvcnJlY3Qgc2VjdGlvbiBpbiB0aGUgT2JqZWN0IFBhZ2UgTGF5b3V0LlxuXHQgKiBAcGFyYW0gb0l0ZW0gVGhlIG1lc3NhZ2UgaXRlbSBjb250YWluaW5nIHRoZSBncm91cCBuYW1lLlxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMgaW4gdGhlIE9iamVjdCBQYWdlLlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgY29udHJvbCBJRHMuXG5cdCAqIEBwYXJhbSBvVmlldyBUaGUgY3VycmVudCBVSTUgdmlldy5cblx0ICovXG5cdGhhbmRsZU1lc3NhZ2VOYXZpZ2F0aW9uKG9JdGVtOiBNZXNzYWdlSXRlbSwgdmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLCBvTWVzc2FnZTogTWVzc2FnZSwgb1ZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHQvLyBHZXQgY29udHJvbCBpZiBpdCBpcyBpbnNpZGUgYSBoaWRkZW4gc3Vic2VjdGlvblxuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvTWVzc2FnZS5nZXRDb250cm9sSWRzKClbMF0pO1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gdGhpcy5maW5kU3ViU2VjdGlvbihvSXRlbSwgdmlzaWJsZVNlY3Rpb25zLCBvQ29udHJvbCk7XG5cblx0XHQvLyBJZiBzdWJzZWN0aW9uIGZvdW5kLCBleHBhbmQgaXRcblx0XHRpZiAob1N1YlNlY3Rpb24pIHtcblx0XHRcdChvU3ViU2VjdGlvbiBhcyBTdWJTZWN0aW9uKS5zZXRNb2RlKFwiRXhwYW5kZWRcIik7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGUgdG8gdGhlIHNlY3Rpb24gYmFzZWQgb24gdGhlIG1lc3NhZ2UncyBncm91cCBuYW1lXG5cdFx0Y29uc3Qgc1NlY3Rpb25UaXRsZSA9IG9JdGVtLmdldEdyb3VwTmFtZSgpLnNwbGl0KFwiLCBcIilbMF07XG5cdFx0dGhpcy5fbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUodGhpcy5vT2JqZWN0UGFnZUxheW91dCEsIHNTZWN0aW9uVGl0bGUpO1xuXG5cdFx0Ly8gRm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sXG5cdFx0dGhpcy5mb2N1c09uTWVzc2FnZVRhcmdldENvbnRyb2wob1ZpZXcsIG9NZXNzYWdlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgY29ycmVzcG9uZGluZyBzdWJzZWN0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBtZXNzYWdlIGl0ZW0ncyBncm91cCBuYW1lXG5cdCAqIG9yIGJ5IGNoZWNraW5nIGlmIHRoZSBnaXZlbiBjb250cm9sIGV4aXN0cyBpbnNpZGUgdGhlIHN1YnNlY3Rpb24ncyBNb3JlQmxvY2tzLlxuXHQgKiBAcGFyYW0gb0l0ZW0gVGhlIG1lc3NhZ2UgaXRlbSBjb250YWluaW5nIHRoZSBncm91cCBuYW1lLlxuXHQgKiBAcGFyYW0gdmlzaWJsZVNlY3Rpb25zIFRoZSBsaXN0IG9mIHZpc2libGUgc2VjdGlvbnMgaW4gdGhlIE9iamVjdCBQYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIFVJNSBjb250cm9sIHRvIGNoZWNrIGZvciBpbnNpZGUgTW9yZUJsb2Nrcy5cblx0ICogQHJldHVybnMgLSBUaGUgZm91bmQgc3Vic2VjdGlvbiwgc2VjdGlvbiwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRmaW5kU3ViU2VjdGlvbihcblx0XHRvSXRlbTogTWVzc2FnZUl0ZW0sXG5cdFx0dmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkXG5cdCk6IFN1YlNlY3Rpb24gfCBPYmplY3RQYWdlU2VjdGlvbiB8IHVua25vd24gfCBudWxsIHtcblx0XHRjb25zdCBncm91cE5hbWVzID0gb0l0ZW0uZ2V0R3JvdXBOYW1lKCkuc3BsaXQoXCIsIFwiKTtcblx0XHRyZXR1cm4gdGhpcy5maW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2wodmlzaWJsZVNlY3Rpb25zLCBncm91cE5hbWVzWzFdLCBvQ29udHJvbCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VhcmNoZXMgZm9yIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGl0bGUgb3IgYnkgY2hlY2tpbmdcblx0ICogaWYgdGhlIHNwZWNpZmllZCBjb250cm9sIGlzIHByZXNlbnQgaW5zaWRlIHRoZSBzdWJzZWN0aW9uJ3MgTW9yZUJsb2Nrcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHZpc2libGVTZWN0aW9ucyBUaGUgbGlzdCBvZiB2aXNpYmxlIHNlY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRvIG1hdGNoIGFnYWluc3Qgc3Vic2VjdGlvbiB0aXRsZXMuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgVUk1IGNvbnRyb2wgdG8gc2VhcmNoIGZvciB3aXRoaW4gTW9yZUJsb2Nrcy5cblx0ICogQHJldHVybnMgLSBUaGUgZm91bmQgc3Vic2VjdGlvbiBvciBudWxsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxuXHQgKi9cblx0cHJpdmF0ZSBmaW5kU3ViU2VjdGlvbkJ5VGl0bGVPckNvbnRyb2woXG5cdFx0dmlzaWJsZVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRcdHRpdGxlOiBzdHJpbmcsXG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWRcblx0KTogU3ViU2VjdGlvbiB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiB2aXNpYmxlU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc3Vic2VjdGlvbiB0aXRsZSBtYXRjaGVzXG5cdFx0XHRcdGlmIChzdWJTZWN0aW9uLmdldFRpdGxlKCkgPT09IHRpdGxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBjb250cm9sIGV4aXN0cyBpbnNpZGUgTW9yZUJsb2Nrc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3ViU2VjdGlvblxuXHRcdFx0XHRcdFx0LmdldE1vcmVCbG9ja3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoXG5cdFx0XHRcdFx0XHRcdChibG9jaykgPT5cblx0XHRcdFx0XHRcdFx0XHQoKGJsb2NrIGFzIFZpZXcpLmdldENvbnRlbnQoKSBhcyB1bmtub3duIGFzIENvbnRlbnQpPy5maW5kRWxlbWVudHModHJ1ZSkuaW5jbHVkZXMob0NvbnRyb2wgYXMgVUk1RWxlbWVudClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YlNlY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgdGFibGUgY2VsbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UsIGVuc3VyaW5nIHRoZSBjZWxsIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0Um93IEEgdGFibGUgcm93XG5cdCAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdGFyZ2V0aW5nIGEgY2VsbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBlZGl0YWJsZSBjZWxsIG9yIG51bGwvdW5kZWZpbmVkIGlmIG5vbmUgaXMgZm91bmRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFRhcmdldENlbGwodGFyZ2V0Um93OiBVSTVFbGVtZW50LCBtZXNzYWdlOiBNZXNzYWdlKTogVUk1RWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZHMgPSBtZXNzYWdlLmdldENvbnRyb2xJZHMoKTtcblx0XHRjb25zdCBoYXNOb25FZGl0YWJsZUZpZWxkID0gY29udHJvbElkcy5zb21lKChpZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkPjtcblx0XHRcdHJldHVybiBjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIGNvbnRyb2wuZ2V0RWRpdGFibGUgJiYgIWNvbnRyb2wuZ2V0RWRpdGFibGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb250cm9sSWRzLmxlbmd0aCA+IDBcblx0XHRcdD8gY29udHJvbElkc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKGNvbnRyb2xJZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDb250cm9sSW5UYWJsZSA9IHRhcmdldFJvdy5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0SWQoKSA9PT0gY29udHJvbElkO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChpc0NvbnRyb2xJblRhYmxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKSBhcyBFbmhhbmNlV2l0aFVJNTxGaWVsZD47XG5cdFx0XHRcdFx0XHRcdGlmIChoYXNOb25FZGl0YWJsZUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQ/LmlzQShcInNhcC51aS5tZGMuRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmdldEVkaXRhYmxlICYmICFlbGVtZW50LmdldEVkaXRhYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWwgPyB2YWwgOiBhY2M7XG5cdFx0XHRcdFx0fSwgbnVsbClcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBvbiB0aGUgY29udHJvbCB0YXJnZXRlZCBieSBhIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdGFyZ2V0aW5nIHRoZSBjb250cm9sIG9uIHdoaWNoIHdlIHdhbnQgdG8gc2V0IHRoZSBmb2N1c1xuXHQgKiBAcGFyYW0gdGFyZ2V0TWRjVGFibGUgVGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHBhcmFtIHJvd0luZGV4IFRoZSByb3cgaW5kZXggb2YgdGhlIHRhYmxlIHRhcmdldGVkIGJ5IHRoZSBtZXNzYWdlIChvcHRpb25hbClcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZm9jdXNPbk1lc3NhZ2VUYXJnZXRDb250cm9sKFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHR0YXJnZXRNZGNUYWJsZT86IE1EQ1RhYmxlLFxuXHRcdHJvd0luZGV4PzogbnVtYmVyXG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGFBbGxWaWV3RWxlbWVudHMgPSB2aWV3LmZpbmRFbGVtZW50cyh0cnVlKTtcblx0XHRjb25zdCBhRXJyb25lb3VzQ29udHJvbHMgPSBtZXNzYWdlXG5cdFx0XHQuZ2V0Q29udHJvbElkcygpXG5cdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzQ29udHJvbElkOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFBbGxWaWV3RWxlbWVudHMuc29tZShmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gc0NvbnRyb2xJZCAmJiBvRWxlbS5nZXREb21SZWYoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAoc0NvbnRyb2xJZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0Y29uc3QgYU5vdFRhYmxlRXJyb25lb3VzQ29udHJvbHMgPSBhRXJyb25lb3VzQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvRWxlbTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICFvRWxlbT8uaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpICYmICFvRWxlbT8uaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdC8vVGhlIGZvY3VzIGlzIHNldCBvbiBOb3QgVGFibGUgY29udHJvbCBpbiBwcmlvcml0eVxuXHRcdGlmIChhTm90VGFibGVFcnJvbmVvdXNDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKGFOb3RUYWJsZUVycm9uZW91c0NvbnRyb2xzWzBdKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChhRXJyb25lb3VzQ29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhcmdldE1kY1RhYmxlUm93ID0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0PyB0YXJnZXRNZGNUYWJsZS5maW5kRWxlbWVudHMoXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0KGVsZW06IENvbnRyb2wpID0+XG5cdFx0XHRcdFx0XHRcdGVsZW0uaXNBKENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAmJiBlbGVtLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSA9PT0gdGFyZ2V0TWRjVGFibGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogW107XG5cdFx0XHRpZiAoYVRhcmdldE1kY1RhYmxlUm93Lmxlbmd0aCA+IDAgJiYgYVRhcmdldE1kY1RhYmxlUm93WzBdKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRSb3cgPSBhVGFyZ2V0TWRjVGFibGVSb3dbcm93SW5kZXggYXMgbnVtYmVyXTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwob1RhcmdldFJvdywgbWVzc2FnZSk7XG5cdFx0XHRcdGlmIChvVGFyZ2V0Q2VsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRGaWVsZCA9IG9UYXJnZXRDZWxsLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpXG5cdFx0XHRcdFx0XHQ/IChvVGFyZ2V0Q2VsbC5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHRcdFx0OiAoKChvVGFyZ2V0Q2VsbCBhcyBIQm94KS5nZXRJdGVtcygpWzBdIGFzIEZpZWxkKS5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPikuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR0aGlzLnNldEZvY3VzVG9Db250cm9sKG9UYXJnZXRGaWVsZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByb3BlcnR5UGF0aCA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdO1xuXHRcdFx0XHRcdGlmIChlcnJvclByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0KHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL21lc3NhZ2VUYXJnZXRQcm9wZXJ0eVBhdGhcIiwgZXJyb3JQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGFyZ2V0TWRjVGFibGUgJiYgdGhpcy5fbmF2aWdhdGlvbkNvbmZpZ3VyZWQodGFyZ2V0TWRjVGFibGUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5uYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoXG5cdFx0XHRcdFx0XHRcdG9UYXJnZXRSb3cuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqIFRoZSBtZXNzYWdlIG9iamVjdFxuXHQgKiBAcGFyYW0gYVNlY3Rpb25zIFRoZSBhcnJheSBvZiBzZWN0aW9ucyBpbiB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHJldHVybnMgVGhlIHJhbmsgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdF9nZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2UgJiB7IHNlY3Rpb25OYW1lOiBzdHJpbmc7IHN1YlNlY3Rpb25OYW1lOiBzdHJpbmcgfSwgYVNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0XHRpZiAoYVNlY3Rpb25zKSB7XG5cdFx0XHRsZXQgc2VjdGlvbiwgYVN1YlNlY3Rpb25zLCBzdWJTZWN0aW9uLCBqLCBrLCBhRWxlbWVudHMsIGFBbGxFbGVtZW50cywgc2VjdGlvblJhbms7XG5cdFx0XHRmb3IgKGogPSBhU2VjdGlvbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyAtLWopIHtcblx0XHRcdFx0Ly8gTG9vcCBvdmVyIGFsbCBzZWN0aW9uc1xuXHRcdFx0XHRzZWN0aW9uID0gYVNlY3Rpb25zW2pdO1xuXHRcdFx0XHRhU3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAoayA9IGFTdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBrID49IDA7IC0taykge1xuXHRcdFx0XHRcdC8vIExvb3Agb3ZlciBhbGwgc3ViLXNlY3Rpb25zXG5cdFx0XHRcdFx0c3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1trXTtcblx0XHRcdFx0XHRhQWxsRWxlbWVudHMgPSBzdWJTZWN0aW9uLmZpbmRFbGVtZW50cyh0cnVlKTsgLy8gR2V0IGFsbCBlbGVtZW50cyBpbnNpZGUgYSBzdWItc2VjdGlvblxuXHRcdFx0XHRcdC8vVHJ5IHRvIGZpbmQgdGhlIGNvbnRyb2wgMSBpbnNpZGUgdGhlIHN1YiBzZWN0aW9uXG5cdFx0XHRcdFx0YUVsZW1lbnRzID0gYUFsbEVsZW1lbnRzLmZpbHRlcih0aGlzLl9mbkZpbHRlclVwb25JZC5iaW5kKHRoaXMsIG9iai5nZXRDb250cm9sSWQoKSkpO1xuXHRcdFx0XHRcdHNlY3Rpb25SYW5rID0gaiArIDE7XG5cdFx0XHRcdFx0aWYgKGFFbGVtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VjdGlvbi5nZXRWaXNpYmxlKCkgJiYgc3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoXCJzZWN0aW9uTmFtZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdG9iai5zZWN0aW9uTmFtZSA9IHNlY3Rpb24uZ2V0VGl0bGUoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShcInN1YlNlY3Rpb25OYW1lXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2JqLnN1YlNlY3Rpb25OYW1lID0gc3ViU2VjdGlvbi5nZXRUaXRsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWN0aW9uUmFuayAqIDEwICsgKGsgKyAxKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiBpcyBpbnZpc2libGUgdGhlbiBncm91cCBuYW1lIHdvdWxkIGJlIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHJhbmtpbmcgc2hvdWxkIGJlIGxvd2VyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9pZiBzdWIgc2VjdGlvbiB0aXRsZSBpcyBPdGhlciBtZXNzYWdlcywgd2UgcmV0dXJuIGEgaGlnaCBudW1iZXIocmFuayksIHdoaWNoIGVuc3VyZXNcblx0XHRcdC8vdGhhdCBtZXNzYWdlcyBiZWxvbmdpbmcgdG8gdGhpcyBzdWIgc2VjdGlvbiBhbHdheXMgY29tZSBsYXRlciBpbiBtZXNzYWdlUG9wb3ZlclxuXHRcdFx0aWYgKCFvYmouc2VjdGlvbk5hbWUgJiYgIW9iai5zdWJTZWN0aW9uTmFtZSAmJiBvYmouZ2V0UGVyc2lzdGVudCgpKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIDk5OTtcblx0XHR9XG5cdFx0cmV0dXJuIDk5OTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgRmlsdGVyIHRvIGhpZGUgbWVzc2FnZXMgZnJvbSB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJcblx0ICovXG5cdF9maWx0ZXJPdXRNZXNzYWdlc0luRGlhbG9nKCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgZm5UZXN0ID0gKGFDb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5pc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhhQ29udHJvbElkcyk7XG5cdFx0fTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBzdWNjZXNzIG1lc3NhZ2UgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgd2UgZG8gbm90IGZpbHRlciBpdCBvdXQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaWYgdGhlIHNpbmdsZSBzdWNjZXNzIG1lc3NhZ2UgaXMgZm91bmRcblx0ICovXG5cdF9maWx0ZXJPdXRDb250ZXh0U3VjY2Vzc01lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcyA9IFtdO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2Vzc1xuXHRcdFx0KSB7XG5cdFx0XHRcdGJvdW5kQ29udGV4dFN1Y2Nlc3NNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChib3VuZENvbnRleHRTdWNjZXNzTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gd2Ugd2FudCB0byBoaWRlIHN1Y2Nlc3MgbWVzc2FnZXMgb25seSBpZiB0aGV5IGFyZSBib3VuZCB0byB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzaW5nbGUgc3VjY2VzcyBtZXNzYWdlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXIgZnVuY3Rpb24gdG8gaGlkZSBiYWNrLWVuZCBtZXNzYWdlcyBpZiB0aGUgY29udHJvbCBoYXMgZXJyb3IgdmFsaWRhdGlvbi5cblx0ICogQHJldHVybnMgRmlsdGVyXG5cdCAqL1xuXHRfZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpOiBGaWx0ZXIge1xuXHRcdGNvbnN0IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpOiBzdHJpbmdbXSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS52YWxpZGF0aW9uID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0Q29udHJvbElkKCk/Lm1hdGNoKC9maWVsZC4qLWlubmVyJC9pKSlcblx0XHRcdFx0XHQvL3RoZSBlcnJvciBwb2ludCB0byB0aGUgaW5uZXIgY29udHJvbCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIC1pbm5lciB0byBnZXQgdGhlIGZpZWxkIGlkXG5cdFx0XHRcdFx0Lm1hcCgobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRDb250cm9sSWQoKT8ucmVwbGFjZShcIi1pbm5lclwiLCBcIlwiKSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZuVGVzdCA9IGZ1bmN0aW9uIChhQ29udHJvbElkczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0XHRcdC8vIGZpbHRlcmluZyBvdXQgdGhlIGJhY2tlbmQgbWVzc2FnZXMgaWYgdGhlIGNvbnRyb2wgaGFzIGVycm9yIHZhbGlkYXRpb25cblx0XHRcdHJldHVybiAhYUNvbnRyb2xJZHMuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGdldElkc09mRmllbHNkV2l0aEVycm9yVmFsaWRhdGlvbigpLmluY2x1ZGVzKGNvbnRyb2xJZCkpO1xuXHRcdH07XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0dmFsdWUxOiBmYWxzZVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdFx0XHRcdHRlc3Q6IGZuVGVzdCxcblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMTogdHJ1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XSxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2V0IHRoZSBmaWx0ZXJzIGJhc2VkIHVwb24gdGhlIG1lc3NhZ2UgaXRlbXNcblx0ICogVGhlIGRlc2lyZWQgZmlsdGVyIG9wZXJhdGlvbiBpczpcblx0ICogKCBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHVzZXIgJiYgKCB2YWxpZGF0aW9uID0gdHJ1ZSAmJiBDb250cm9sIHNob3VsZCBiZSBwcmVzZW50IGluIHZpZXcgKSB8fCBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgY29udGV4dCApLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2FwcGx5RmlsdGVyc0FuZFNvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IG9WYWxpZGF0aW9uRmlsdGVycyxcblx0XHRcdGhpZGRlbkRyYWZ0RmlsdGVyLFxuXHRcdFx0b1ZhbGlkYXRpb25BbmRDb250ZXh0RmlsdGVyLFxuXHRcdFx0b0ZpbHRlcnMsXG5cdFx0XHRzUGF0aCxcblx0XHRcdG9Tb3J0ZXIsXG5cdFx0XHRvRGlhbG9nRmlsdGVyLFxuXHRcdFx0b2JqZWN0UGFnZUxheW91dFNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFVc2VyRGVmaW5lZEZpbHRlcjogRmlsdGVyW10gPSBbXTtcblxuXHRcdHRoaXMuc1ZpZXdJZCA9IHRoaXMuc1ZpZXdJZCA/IHRoaXMuc1ZpZXdJZCA6ICh0aGlzLl9nZXRWaWV3SWQodGhpcy5nZXRJZCgpKSBhcyBzdHJpbmcpO1xuXHRcdC8vQWRkIHRoZSBmaWx0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG5cdFx0Y29uc3QgYUN1c3RvbUZpbHRlcnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRmlsdGVyc1wiKSBhcyBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFDdXN0b21GaWx0ZXJzKSB7XG5cdFx0XHRhQ3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXI6IENvbnRyb2wpIHtcblx0XHRcdFx0YVVzZXJEZWZpbmVkRmlsdGVyLnB1c2goXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJwYXRoXCIpLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IGZpbHRlci5nZXRQcm9wZXJ0eShcIm9wZXJhdG9yXCIpLFxuXHRcdFx0XHRcdFx0dmFsdWUxOiBmaWx0ZXIuZ2V0UHJvcGVydHkoXCJ2YWx1ZTFcIiksXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IGZpbHRlci5nZXRQcm9wZXJ0eShcInZhbHVlMlwiKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHQvL0ZpbHRlciBmb3IgZmlsdGVyaW5nIG91dCBvbmx5IHZhbGlkYXRpb24gbWVzc2FnZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2aWV3XG5cdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJ2YWxpZGF0aW9uXCIsXG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IHRydWVcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRtZXNzYWdlQnV0dG9uSGVscGVyLmdldENoZWNrQ29udHJvbEluVmlld0ZpbHRlcih0aGlzLnNWaWV3SWQpXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdG9EaWFsb2dGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW3RoaXMuX2ZpbHRlck91dE1lc3NhZ2VzSW5EaWFsb2coKV1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHRlc3Q6IHRoaXMuX2ZpbHRlck91dENvbnRleHRTdWNjZXNzTWVzc2FnZXMuYmluZCh0aGlzKSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmaWx0ZXJBcnJheTtcblx0XHRcdGlmICh0aGlzLmlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuX2dldFZpZXdJZCh0aGlzLmdldElkKCkpO1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh2aWV3SWQgYXMgc3RyaW5nKSBhcyBWaWV3O1xuXHRcdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gKGF3YWl0ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcik/LmVkaXRGbG93LmdldFJvb3RDb250ZXh0KHZpZXdDb250ZXh0KSk/LmdldFBhdGgoKTtcblx0XHRcdFx0aGlkZGVuRHJhZnRGaWx0ZXIgPSBtZXNzYWdlQnV0dG9uSGVscGVyLmdldEhpZGRlbkRyYWZ0VXNlQ2FzZUZpbHRlcihjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25BbmRIaWRkZW5EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IFtvVmFsaWRhdGlvbkZpbHRlcnMsIGhpZGRlbkRyYWZ0RmlsdGVyXSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRmaWx0ZXJBcnJheSA9IFt2YWxpZGF0aW9uQW5kSGlkZGVuRHJhZnRGaWx0ZXIsIG9EaWFsb2dGaWx0ZXIsIHRoaXMuX2dldEZpbHRlclRvSGlkZUJhY2tlbmRNZXNzYWdlT25FcnJvclZhbGlkYXRpb24oKV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsaWRhdGlvbkFuZENvbnRleHRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXG5cdFx0XHRcdFx0XHRvVmFsaWRhdGlvbkZpbHRlcnMsXG5cdFx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGgsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1BhdGhcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZpbHRlckFycmF5ID0gW1xuXHRcdFx0XHRcdG9WYWxpZGF0aW9uQW5kQ29udGV4dEZpbHRlcixcblx0XHRcdFx0XHRvQ29udGV4dFN1Y2Nlc3NGaWx0ZXJzLFxuXHRcdFx0XHRcdG9EaWFsb2dGaWx0ZXIsXG5cdFx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyVG9IaWRlQmFja2VuZE1lc3NhZ2VPbkVycm9yVmFsaWRhdGlvbigpXG5cdFx0XHRcdF07XG5cdFx0XHRcdC8vRmlsdGVyIGZvciBmaWx0ZXJpbmcgb3V0IHRoZSBib3VuZCBtZXNzYWdlcyBpLmUgdGFyZ2V0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZXh0IHBhdGhcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9WYWxpZGF0aW9uQ29udGV4dERpYWxvZ0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogZmlsdGVyQXJyYXksXG5cdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBhbmQgZmluYWxseSAtIGlmIHRoZXJlIGFueSAtIGFkZCBjdXN0b20gZmlsdGVyICh2aWEgT1IpXG5cdFx0XHRpZiAoYVVzZXJEZWZpbmVkRmlsdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRmaWx0ZXJzOiBbYVVzZXJEZWZpbmVkRmlsdGVyLCBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzXSBhcyB1bmtub3duIGFzIEZpbHRlcltdLCAvLyBUT0RPIGluY29ycmVjdCxcblx0XHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0ZpbHRlcnMgPSBvVmFsaWRhdGlvbkNvbnRleHREaWFsb2dGaWx0ZXJzO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vSXRlbUJpbmRpbmcuZmlsdGVyKG9GaWx0ZXJzKTtcblx0XHRcdHRoaXMub09iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0KHRoaXMsIHRoaXMub09iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0Ly8gV2Ugc3VwcG9ydCBzb3J0aW5nIG9ubHkgZm9yIE9iamVjdFBhZ2VMYXlvdXQgdXNlLWNhc2UuXG5cdFx0XHRpZiAodGhpcy5vT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0XHRvU29ydGVyID0gbmV3IFNvcnRlcihcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0b2JqMTogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9LFxuXHRcdFx0XHRcdFx0b2JqMjogTWVzc2FnZSAmIHsgc2VjdGlvbk5hbWU6IHN0cmluZzsgc3ViU2VjdGlvbk5hbWU6IHN0cmluZyB9XG5cdFx0XHRcdFx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9iamVjdFBhZ2VMYXlvdXRTZWN0aW9ucykge1xuXHRcdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0U2VjdGlvbnMgPSB0aGlzLm9PYmplY3RQYWdlTGF5b3V0ICYmIHRoaXMub09iamVjdFBhZ2VMYXlvdXQuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtBID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMSwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtCID0gdGhpcy5fZ2V0TWVzc2FnZVJhbmsob2JqMiwgb2JqZWN0UGFnZUxheW91dFNlY3Rpb25zKTtcblx0XHRcdFx0XHRcdGlmIChyYW5rQSA8IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChyYW5rQSA+IHJhbmtCKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLm9JdGVtQmluZGluZy5zb3J0KG9Tb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gc0NvbnRyb2xJZFxuXHQgKiBAcGFyYW0gb0l0ZW1cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29udHJvbCBJRCBtYXRjaGVzIHRoZSBpdGVtIElEXG5cdCAqL1xuXHRfZm5GaWx0ZXJVcG9uSWQoc0NvbnRyb2xJZDogc3RyaW5nLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbiBiYXNlZCBvbiBzZWN0aW9uIHRpdGxlIGFuZCB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWN0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0U2VjdGlvbkJ5U2VjdGlvblRpdGxlKG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LCBzU2VjdGlvblRpdGxlOiBzdHJpbmcpOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc1NlY3Rpb25UaXRsZSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhU2VjdGlvbnNbaV0uZ2V0VmlzaWJsZSgpICYmIGFTZWN0aW9uc1tpXS5nZXRUaXRsZSgpID09PSBzU2VjdGlvblRpdGxlKSB7XG5cdFx0XHRcdFx0b1NlY3Rpb24gPSBhU2VjdGlvbnNbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWN0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc2VjdGlvbiBpZiB0aGUgb2JqZWN0IHBhZ2UgdXNlcyBhbiBJY29uVGFiQmFyIGFuZCBpZiB0aGUgY3VycmVudCBzZWN0aW9uIGlzIG5vdCB0aGUgdGFyZ2V0IG9mIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb09iamVjdFBhZ2UgT2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU2VjdGlvblRpdGxlIFNlY3Rpb24gdGl0bGUuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvbkluSWNvblRhYkJhck1vZGUob09iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQsIHNTZWN0aW9uVGl0bGU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGlmIChiVXNlSWNvblRhYkJhcikge1xuXHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSB0aGlzLl9nZXRTZWN0aW9uQnlTZWN0aW9uVGl0bGUob09iamVjdFBhZ2UsIHNTZWN0aW9uVGl0bGUpO1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkU2VjdGlvbklkID0gb09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCk7XG5cdFx0XHRpZiAob1NlY3Rpb24gJiYgc1NlbGVjdGVkU2VjdGlvbklkICE9PSBvU2VjdGlvbi5nZXRJZCgpKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfbmF2aWdhdGVGcm9tTWVzc2FnZVRvU2VjdGlvblRhYmxlSW5JY29uVGFiQmFyTW9kZShcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdG9PYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHNTZWN0aW9uVGl0bGU6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9PUENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoID0gIShvVGFibGVDb250ZXh0ID09PSBvT1BDb250ZXh0KTtcblx0XHR0aGlzLl9uYXZpZ2F0ZUZyb21NZXNzYWdlVG9TZWN0aW9uSW5JY29uVGFiQmFyTW9kZShvT2JqZWN0UGFnZSwgc1NlY3Rpb25UaXRsZSk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiBGdW5jdGlvbikge1xuXHRcdFx0aWYgKGJTaG91bGRXYWl0Rm9yVGFibGVSZWZyZXNoKSB7XG5cdFx0XHRcdG9Sb3dCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIE1kY1RhYmxlIGlmIGl0IGlzIGZvdW5kIGFtb25nIGFueSBvZiB0aGUgcGFyZW50IGVsZW1lbnRzLlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBNREMgdGFibGUgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0TWRjVGFibGUob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBNRENUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Ly9jaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYSB0YWJsZSB3aXRoaW4gYW55IG9mIGl0cyBwYXJlbnRzXG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmICFvUGFyZW50RWxlbWVudC5pc0E8TURDVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpID8gb1BhcmVudEVsZW1lbnQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0R3JpZFRhYmxlKG9NZGNUYWJsZTogTURDVGFibGUpOiBVSVRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gb01kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlLCBmdW5jdGlvbiAob0VsZW06IENvbnRyb2wpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9FbGVtLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJlxuXHRcdFx0XHQvKiogV2UgY2hlY2sgdGhlIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgTWRjVGFibGUgOiovXG5cdFx0XHRcdG9FbGVtLmdldFBhcmVudCgpID09PSBvTWRjVGFibGVcblx0XHRcdCk7XG5cdFx0fSlbMF0gYXMgVUlUYWJsZSB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIHJvdyAoaWYgYXZhaWxhYmxlKSBjb250YWluaW5nIHRoZSBlbGVtZW50LlxuXHQgKiBAcGFyYW0gb0VsZW1lbnQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUYWJsZSByb3cgfHwgdW5kZWZpbmVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0VGFibGVSb3cob0VsZW1lbnQ6IFVJNUVsZW1lbnQpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1BhcmVudEVsZW1lbnQgPSBvRWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR3aGlsZSAoXG5cdFx0XHRvUGFyZW50RWxlbWVudCAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxSb3c+KFwic2FwLnVpLnRhYmxlLlJvd1wiKSAmJlxuXHRcdFx0IW9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHRcdCFvUGFyZW50RWxlbWVudC5pc0E8Q29sdW1uTGlzdEl0ZW0+KENvbHVtbkxpc3RJdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKVxuXHRcdCkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ICYmXG5cdFx0XHQob1BhcmVudEVsZW1lbnQuaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpIHx8XG5cdFx0XHRcdG9QYXJlbnRFbGVtZW50LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgfHxcblx0XHRcdFx0b1BhcmVudEVsZW1lbnQuaXNBPENvbHVtbkxpc3RJdGVtPihDb2x1bW5MaXN0SXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkpXG5cdFx0XHQ/IChvUGFyZW50RWxlbWVudCBhcyBVSTVFbGVtZW50KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgcm93IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBvRWxlbWVudCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFJvdyBpbmRleCB8fCB1bmRlZmluZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRUYWJsZVJvd0luZGV4KG9FbGVtZW50OiBVSTVFbGVtZW50KTogbnVtYmVyIHtcblx0XHRjb25zdCBvVGFibGVSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhvRWxlbWVudCk7XG5cdFx0bGV0IGlSb3dJbmRleDtcblx0XHRpZiAob1RhYmxlUm93Py5pc0E8Um93PihcInNhcC51aS50YWJsZS5Sb3dcIikpIHtcblx0XHRcdGlSb3dJbmRleCA9IG9UYWJsZVJvdy5nZXRJbmRleCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpUm93SW5kZXggPSAob1RhYmxlUm93IGFzIHsgZ2V0VGFibGU/OiAoKSA9PiBSZXNwb25zaXZlVGFibGUgfSlcblx0XHRcdFx0Py5nZXRUYWJsZT8uKClcblx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0LmZpbmRJbmRleChmdW5jdGlvbiAoZWxlbWVudDogVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LmdldElkKCkgPT09IG9UYWJsZVJvdz8uZ2V0SWQoKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBpUm93SW5kZXggPz8gLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbmRleCBvZiB0aGUgdGFibGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBlbGVtZW50IENvbnRyb2xcblx0ICogQHJldHVybnMgQ29sdW1uIGluZGV4IHx8IHVuZGVmaW5lZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldFRhYmxlQ29sdW1uSW5kZXgoZWxlbWVudDogVUk1RWxlbWVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZ2V0VGFyZ2V0Q2VsbEluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0cmV0dXJuIHRhcmdldFJvdz8uZ2V0Q2VsbHMoKS5maW5kSW5kZXgoZnVuY3Rpb24gKGNlbGw6IENvbnRyb2wpIHtcblx0XHRcdFx0cmV0dXJuIGNlbGwuZ2V0SWQoKSA9PT0gZWx0LmdldElkKCk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFRhcmdldENvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGVsdDogVUk1RWxlbWVudCwgdGFyZ2V0Um93OiBSb3cgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBlbHQuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudCxcblx0XHRcdFx0dGFyZ2V0Q2VsbEluZGV4ID0gZ2V0VGFyZ2V0Q2VsbEluZGV4KHRhcmdldEVsZW1lbnQsIHRhcmdldFJvdyk7XG5cdFx0XHR3aGlsZSAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRDZWxsSW5kZXggJiYgdGFyZ2V0Q2VsbEluZGV4IDwgMCkge1xuXHRcdFx0XHR0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5nZXRQYXJlbnQoKSBhcyBVSTVFbGVtZW50O1xuXHRcdFx0XHR0YXJnZXRDZWxsSW5kZXggPSBnZXRUYXJnZXRDZWxsSW5kZXgodGFyZ2V0RWxlbWVudCwgdGFyZ2V0Um93KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRDZWxsSW5kZXg7XG5cdFx0fTtcblx0XHRjb25zdCB0YXJnZXRSb3cgPSB0aGlzLl9nZXRUYWJsZVJvdyhlbGVtZW50KSBhcyBSb3cgfCB1bmRlZmluZWQ7XG5cblx0XHRsZXQgdGFyZ2V0Q29sdW1uSW5kZXggPSBnZXRUYXJnZXRDb2x1bW5JbmRleChlbGVtZW50LCB0YXJnZXRSb3cpO1xuXHRcdGlmICh0YXJnZXRSb3c/LmlzQTxDcmVhdGlvblJvdz4oXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldENlbGxJZCA9IHRhcmdldENvbHVtbkluZGV4ID8gdGFyZ2V0Um93LmdldENlbGxzKClbdGFyZ2V0Q29sdW1uSW5kZXhdLmdldElkKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHRhYmxlQ29sdW1ucyA9IHRhcmdldFJvdy5nZXRUYWJsZSgpPy5nZXRDb2x1bW5zKCk7XG5cdFx0XHR0YXJnZXRDb2x1bW5JbmRleCA9IHRhYmxlQ29sdW1ucz8uZmluZEluZGV4KGZ1bmN0aW9uIChjb2x1bW46IENvbHVtbikge1xuXHRcdFx0XHRpZiAoY29sdW1uLmdldENyZWF0aW9uVGVtcGxhdGUoKSAmJiB0YXJnZXRDZWxsSWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q2VsbElkLnNlYXJjaChjb2x1bW4uZ2V0Q3JlYXRpb25UZW1wbGF0ZSgpLmdldElkKCkpID4gLTEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbHVtbkluZGV4O1xuXHR9XG5cblx0X2dldE1kY1RhYmxlUm93cyhvTWRjVGFibGU6IE1EQ1RhYmxlKTogUm93W10ge1xuXHRcdHJldHVybiBvTWRjVGFibGUuZmluZEVsZW1lbnRzKHRydWUsIGZ1bmN0aW9uIChvRWxlbTogQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b0VsZW0uaXNBPFJvdz4oXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0XHRcdC8qKiBXZSBjaGVjayB0aGUgZWxlbWVudCBiZWxvbmdzIHRvIHRoZSBNZGMgVGFibGUgOiovXG5cdFx0XHRcdChvRWxlbSBhcyB7IGdldFRhYmxlPzogKCkgPT4gVUk1RWxlbWVudCB9KS5nZXRUYWJsZT8uKCkuZ2V0UGFyZW50KCkgPT09IG9NZGNUYWJsZVxuXHRcdFx0KTtcblx0XHR9KSBhcyBSb3dbXTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0KG9FbGVtZW50OiBNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkLCBvT2JqZWN0UGFnZUxheW91dD86IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob09iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdHJldHVybiBvT2JqZWN0UGFnZUxheW91dDtcblx0XHR9XG5cdFx0bGV0IHRhcmdldEVsZW1lbnQgPSBvRWxlbWVudDtcblx0XHQvL0l0ZXJhdGUgb3ZlciBwYXJlbnQgdGlsbCB5b3UgaGF2ZSBub3QgcmVhY2hlZCB0aGUgb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0d2hpbGUgKHRhcmdldEVsZW1lbnQgJiYgIXRhcmdldEVsZW1lbnQuaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSkge1xuXHRcdFx0dGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQuZ2V0UGFyZW50KCkgPz8gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIGNoZWNrIGlmIGEgbmF2aWdhdGlvbiBpcyBjb25maWd1cmVkIGZyb20gdGhlIHRhYmxlIHRvIGEgc3ViIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gdGFibGUgTWRjVGFibGVcblx0ICogQHJldHVybnMgRWl0aGVyIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdF9uYXZpZ2F0aW9uQ29uZmlndXJlZCh0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHQvLyBUT0RPOiB0aGlzIGxvZ2ljIHdvdWxkIGJlIG1vdmVkIHRvIGNoZWNrIHRoZSBzYW1lIGF0IHRoZSB0ZW1wbGF0ZSB0aW1lIHRvIGF2b2lkIHRoZSBzYW1lIGNoZWNrIGhhcHBlbmluZyBtdWx0aXBsZSB0aW1lcy5cblx0XHRjb25zdCBjb21wb25lbnQgPSBzYXAudWkucmVxdWlyZShcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiKSxcblx0XHRcdG5hdk9iamVjdCA9IHRhYmxlICYmIGNvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0YWJsZSkgJiYgY29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRhYmxlKS5nZXROYXZpZ2F0aW9uKCk7XG5cdFx0bGV0IHN1Yk9QQ29uZmlndXJlZCA9IGZhbHNlLFxuXHRcdFx0bmF2Q29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdGlmIChuYXZPYmplY3QgJiYgT2JqZWN0LmtleXMobmF2T2JqZWN0KS5pbmNsdWRlcyh0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpKSkge1xuXHRcdFx0c3ViT1BDb25maWd1cmVkID1cblx0XHRcdFx0bmF2T2JqZWN0W3RhYmxlPy5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpXSAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbCAmJlxuXHRcdFx0XHRuYXZPYmplY3RbdGFibGU/LmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCldLmRldGFpbC5yb3V0ZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogZmFsc2U7XG5cdFx0fVxuXHRcdG5hdkNvbmZpZ3VyZWQgPVxuXHRcdFx0c3ViT1BDb25maWd1cmVkICYmXG5cdFx0XHR0YWJsZT8uZ2V0Um93U2V0dGluZ3MoKS5nZXRSb3dBY3Rpb25zKCkgJiZcblx0XHRcdHRhYmxlPy5nZXRSb3dTZXR0aW5ncygpLmdldFJvd0FjdGlvbnMoKVswXS5nZXRUeXBlKCkuaW5jbHVkZXMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdHJldHVybiBuYXZDb25maWd1cmVkO1xuXHR9XG5cblx0c2V0Rm9jdXNUb0NvbnRyb2woY29udHJvbD86IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlUG9wb3ZlciA9IHRoaXMub01lc3NhZ2VQb3BvdmVyO1xuXHRcdGlmIChtZXNzYWdlUG9wb3ZlciAmJiBjb250cm9sICYmIGNvbnRyb2wuZm9jdXMpIHtcblx0XHRcdGNvbnN0IGZuRm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnRyb2wuZm9jdXMoKTtcblx0XHRcdH07XG5cdFx0XHRpZiAoIW1lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdC8vIHdoZW4gbmF2aWdhdGluZyB0byBwYXJlbnQgcGFnZSB0byBjaGlsZCBwYWdlIChvbiBjbGljayBvZiBtZXNzYWdlKSwgdGhlIGNoaWxkIHBhZ2UgbWlnaHQgaGF2ZSBhIGZvY3VzIGxvZ2ljIHRoYXQgbWlnaHQgdXNlIGEgdGltZW91dC5cblx0XHRcdFx0Ly8gd2UgdXNlIHRoZSBiZWxvdyB0aW1lb3V0cyB0byBvdmVycmlkZSB0aGlzIGZvY3VzIHNvIHRoYXQgd2UgZm9jdXMgb24gdGhlIHRhcmdldCBjb250cm9sIG9mIHRoZSBtZXNzYWdlIGluIHRoZSBjaGlsZCBwYWdlLlxuXHRcdFx0XHRzZXRUaW1lb3V0KGZuRm9jdXMsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZm5Gb2N1cywgMCk7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2VQb3BvdmVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJDbG9zZVwiLCBmbk9uQ2xvc2UpO1xuXHRcdFx0XHRtZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkZFIFY0IDogTWVzc2FnZUJ1dHRvbiA6IGVsZW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIG1ldGhvZCBmb3IgZm9jdXNpbmcuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGVzY2FwZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKVxuXHRcdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdFx0LnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpXG5cdFx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlQnV0dG9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0RU1BLGFBQWEsSUFBQUMsSUFBQSxHQURsQkMsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLEVBQUFDLEtBQUEsR0FRckRDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsc0NBQXNDO0lBQUVD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
|