@sapui5/sap.fe.core 1.130.0 → 1.131.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/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -713,8 +713,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
713
713
|
DeleteDialogContentControl,
|
|
714
714
|
setFocusAfterDelete,
|
|
715
715
|
getContextInfos,
|
|
716
|
-
addGenericDeleteFailureMessage
|
|
716
|
+
addGenericDeleteFailureMessage,
|
|
717
|
+
removeDescendantContexts
|
|
717
718
|
};
|
|
718
719
|
return deleteHelper;
|
|
719
720
|
}, false);
|
|
720
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsInNpbGVudE1vZGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsInBhcmVudENvbnRyb2wiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwidGFibGUiLCJkZWxldGVkUm93c0NvdW50IiwiX3RhYmxlJGdldFJvd0JpbmRpbmciLCJfdGFibGUkZ2V0Um93QmluZGluZyQiLCJ0YWJsZVJvd3NDb3VudCIsImdldFJvd0JpbmRpbmciLCJjYWxsIiwiZ2V0Q291bnQiLCJvcmlnaW5hbFRhYmxlUm93c0NvdW50IiwibmV4dEZvY3VzUm93SW5kZXgiLCJmb2N1c1JvdyIsImZvY3VzIiwiZ2V0TG9ja2VkQ29udGV4dFVzZXIiLCJsb2NrZWRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJnZXRPYmplY3QiLCJnZXRMb2NrZWRPYmplY3RzVGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwicmV0VHh0IiwibG9ja2VkVXNlciIsImdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJudW1iZXJPZkRyYWZ0cyIsInRvdGFsRGVsZXRhYmxlIiwiZ2V0VW5TYXZlZENvbnRleHRVc2VyIiwidW5TYXZlZENvbnRleHQiLCJzTGFzdENoYW5nZWRCeVVzZXIiLCJnZXRVbnNhdmVkQ29udGV4dHNUZXh0IiwidW5TYXZlZENvbnRleHRzIiwiaW5mb1R4dCIsIm9wdGlvblR4dCIsIm9wdGlvbldpdGhvdXRUeHQiLCJsYXN0Q2hhbmdlZEJ5VXNlciIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJtUGFyYW1ldGVycyIsInRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwibm9uRGVsZXRhYmxlQ29udGV4dHMiLCJUZXh0IiwidGV4dCIsImdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsImNvbmNhdCIsImdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlIiwidXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJ2Q29udGV4dHMiLCJpdGVtcyIsImxvY2tlZENvbnRleHRzVHh0IiwiZGVsZXRhYmxlRHJhZnRJbmZvIiwicHVzaCIsInNpYmxpbmdJbmZvIiwidGFyZ2V0Q29udGV4dCIsIm5vbkRlbGV0YWJsZUV4aXN0cyIsIm5vbkRlbGV0YWJsZVRleHRDdHJsIiwidW5zYXZlZENoYW5nZXNUeHRzIiwiY29udHJvbCIsIkNIRUNLQk9YIiwibm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCIsIlRFWFQiLCJ1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nIiwic2V0VGV4dCIsIkNoZWNrQm94Iiwic2VsZWN0Iiwib0V2ZW50IiwiY2hlY2tCb3giLCJnZXRTb3VyY2UiLCJnZXRTZWxlY3RlZCIsIl9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkIiwiY29udGV4dFRvRGVsZXRlIiwicmV0IiwiZmluZCIsImRyYWZ0U2libGluZ1BhaXIiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJkaXJlY3REZWxldGFibGVDb250ZXh0cyIsImRlc2NyaXB0aW9uIiwib1RhYmxlIiwic0tleSIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJ0eHQiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwic2luZ2xlQ29udGV4dCIsIm9MaW5lQ29udGV4dERhdGEiLCJPYmplY3QiLCJrZXlzIiwic0tleVZhbHVlIiwic0Rlc2NyaXB0aW9uIiwiZGVsZXRhYmxlT3B0aW9uVHh0IiwidW5zaGlmdCIsImFsbERlbGV0YWJsZVR4dCIsImRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMiLCJtZXNzYWdlSGFuZGxlciIsImFwcENvbXBvbmVudCIsImVuYWJsZVN0cmljdEhhbmRsaW5nIiwiZHJhZnRFcnJvcnMiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImRlbGV0ZURyYWZ0IiwiZSIsIkxvZyIsImVycm9yIiwiZ2V0UGF0aCIsInJlbW92ZURlc2NlbmRhbnRDb250ZXh0cyIsInRlbXBDb250ZXh0cyIsInBhcmVudENvbnRleHQiLCJwYXJlbnRJbmRleCIsImNoaWxkSW5kZXgiLCJjaGlsZENvbnRleHQiLCJpc0FuY2VzdG9yT2YiLCJmaWx0ZXIiLCJkZWxldGVDb25maXJtSGFuZGxlciIsImRyYWZ0RW5hYmxlZCIsImJpbmRpbmdUeXBlIiwiZ2V0SW5kZXgiLCJiZWZvcmVEZWxldGVDYWxsQmFjayIsImNvbnRleHRzVG9EZWxldGUiLCJhbGwiLCJfbVBhcmFtZXRlcnMkZHJhZnRzV2kiLCJkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUiLCJyZXNldENoYW5nZXMiLCJnZXRNb2RlbCIsImRlbGV0ZSIsImdldENhbm9uaWNhbFBhdGgiLCJFcnJvciIsImFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSIsInNob3dNZXNzYWdlRGlhbG9nIiwib0Vycm9yIiwic2hvd01lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiYWRkTWVzc2FnZXMiLCJNZXNzYWdlIiwibWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJ0ZWNobmljYWxEZXRhaWxzIiwiZmUiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJ1cGRhdGVJbmZvRnJvbVNpYmxpbmciLCJpbmZvIiwiZGVsZXRhYmxlUGF0aCIsInN0YXRpY0RlbGV0YWJsZSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwiX3NpYmxpbmdJbmZvcm1hdGlvbiR0Iiwic2libGluZ0luZm9ybWF0aW9uIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInNpYmxpbmdEZWxldGFibGUiLCJyZXF1ZXN0UHJvcGVydHkiLCJoYXNEcmFmdCIsInByb3BlcnRpZXNUb0ZldGNoIiwibG9ja2VkIiwicGF0aE1hcHBpbmciLCJkZWxldGFibGUiLCJfZSIsImdldENvbnRleHRJbmZvcyIsImlzVHJhbnNpZW50IiwiaXNJbmFjdGl2ZSIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YUNvbnRleHQiLCJpc0RyYWZ0Um9vdCIsImlzRHJhZnROb2RlIiwiaXNJbmFjdGl2ZUNvbnRleHQiLCJfY29udGV4dCRnZXRPYmplY3QiLCJJblByb2Nlc3NCeVVzZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dEluZm9zIiwiYnVja2V0cyIsImtleSIsInZhbHVlIiwiY29udGV4dFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlbGV0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5cbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbmVudW0gRGVsZXRlT3B0aW9uVHlwZXMge1xuXHRkZWxldGFibGVDb250ZXh0cyA9IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHR1blNhdmVkQ29udGV4dHMgPSBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID0gXCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZVwiXG59XG5cbmVudW0gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wge1xuXHRDSEVDS0JPWCA9IFwiY2hlY2tCb3hcIixcblx0VEVYVCA9IFwidGV4dFwiXG59XG5cbmV4cG9ydCB0eXBlIERyYWZ0U2libGluZ1BhaXIgPSB7XG5cdGRyYWZ0OiBPRGF0YVY0Q29udGV4dDtcblx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZU9wdGlvbiA9IHtcblx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXM7XG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRzZWxlY3RlZDogYm9vbGVhbjtcblx0dGV4dD86IHN0cmluZztcblx0Y29udHJvbD86IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udGV4dEluZm8gPSB7XG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXHRpc0RyYWZ0Um9vdDogYm9vbGVhbjtcblx0aXNEcmFmdE5vZGU6IGJvb2xlYW47XG5cdGlzQWN0aXZlOiBib29sZWFuO1xuXHRoYXNBY3RpdmU6IGJvb2xlYW47XG5cdGhhc0RyYWZ0OiBib29sZWFuO1xuXHRsb2NrZWQ6IGJvb2xlYW47XG5cdGRlbGV0YWJsZTogYm9vbGVhbjtcblx0c2libGluZ0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNJbmFjdGl2ZUNvbnRleHQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGUgPSB7XG5cdERyYWZ0VVVJRDogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXI/OiBzdHJpbmc7XG5cdEluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdENyZWF0ZWRCeVVzZXI/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlUGFyYW1ldGVycyA9IHtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cz86IG51bWJlcjtcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBwYXRoOiBzdHJpbmcgfTtcblx0YmVmb3JlRGVsZXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0dW5TYXZlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZT86IE9EYXRhVjRDb250ZXh0W107XG5cdGxvY2tlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZT86IERyYWZ0U2libGluZ1BhaXJbXTtcblx0c2lsZW50TW9kZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0SW5mbyA9IHtcblx0aW5mb1R4dD86IHN0cmluZztcblx0b3B0aW9uVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25XaXRob3V0VHh0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLFxuXHRzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRjb250ZXh0c1RvUmVtb3ZlOiBPRGF0YVY0Q29udGV4dFtdXG4pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0Y29uc3QgcmV0U2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0Y29udGV4dHNUb1JlbW92ZS5mb3JFYWNoKChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGlkeCA9IHJldFNlbGVjdGVkQ29udGV4dHMuaW5kZXhPZihjb250ZXh0KTtcblx0XHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdFx0cmV0U2VsZWN0ZWRDb250ZXh0cy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eSh0eXBlLCBbXSk7XG5cblx0cmV0dXJuIHJldFNlbGVjdGVkQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbjogRGVsZXRlT3B0aW9uKTogdm9pZCB7XG5cdGxldCBzZWxlY3RlZENvbnRleHRzID0gKGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSBhcyBPRGF0YVY0Q29udGV4dFtdKSB8fCBbXTtcblxuXHRpZiAob3B0aW9uLnR5cGUgPT09IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzKSB7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykgfHwgW11cblx0XHQpO1xuXG5cdFx0Y29uc3QgZHJhZnRTaWJsaW5nUGFpcnMgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlKSB8fCBbXTtcblx0XHRjb25zdCBkcmFmdHMgPSBkcmFmdFNpYmxpbmdQYWlycy5tYXAoKGNvbnRleHRQYWlyOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29udGV4dFBhaXIuZHJhZnQ7XG5cdFx0fSk7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGRyYWZ0c1xuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgY29udGV4dHNUb1JlbW92ZSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9wdGlvbi50eXBlKSB8fCBbXTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbi50eXBlLCBzZWxlY3RlZENvbnRleHRzLCBjb250ZXh0c1RvUmVtb3ZlKTtcblx0fVxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZWxldGVQcm9jZXNzKFxuXHRwYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGxhc3REZWxldGVkUm93SW5kZXg6IG51bWJlclxuKTogdm9pZCB7XG5cdGNvbnN0IHsgaW50ZXJuYWxNb2RlbENvbnRleHQsIGVudGl0eVNldE5hbWUgfSA9IHBhcmFtZXRlcnM7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIikgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBpZiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4gaXQgaXMgZGVsZXRlZC4gU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBzZWxlY3RlZCBjb250ZXh0cy5cblx0XHRcdFx0aWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpcyBub3Qgc2VsZWN0ZWQsIHRoZW4gdGhlIGRlbGV0ZSBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZC5cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFwiZGVsZXRlRW5hYmxlZFwiLFxuXHRcdFx0b3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFvcHRpb24uc2VsZWN0ZWQpXG5cdFx0KTtcblx0fVxuXG5cdGlmIChwYXJhbWV0ZXJzLnNpbGVudE1vZGUgIT09IHRydWUpIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9ERUxFVEVfVE9BU1RfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9QTFVSQUxcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhlIE11bHRpVmFsdWVGaWVsZCBkb2VzIG5vdCBuZWVkIHJlc2V0dGluZyBvZiBmb2N1cyBsaWtlIHRoZSB0YWJsZSwgd2l0aCB0aGUgcmVzZXR0aW5nIHdlIGdldCBjb25zb2xlIGVycm9ycyB3ZSBhdm9pZCB0cm91Z2ggdGhpcyBjaGVja1xuXHRpZiAocGFyYW1ldGVycy5wYXJlbnRDb250cm9sICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpICE9PSBcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpIHtcblx0XHRkZWxldGVIZWxwZXIuc2V0Rm9jdXNBZnRlckRlbGV0ZShwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgYXMgVGFibGUsIGNvbnRleHRzLmxlbmd0aCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Rm9jdXNBZnRlckRlbGV0ZSh0YWJsZTogVGFibGUsIGRlbGV0ZWRSb3dzQ291bnQ6IG51bWJlciwgbGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHRhYmxlUm93c0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZz8uKCk/LmdldENvdW50KCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgPSAodGFibGVSb3dzQ291bnQgPz8gMCkgKyBkZWxldGVkUm93c0NvdW50O1xuXHRsZXQgbmV4dEZvY3VzUm93SW5kZXg7XG5cblx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggIT09IC0xICYmIHRhYmxlUm93c0NvdW50ICE9PSB1bmRlZmluZWQgJiYgdGFibGVSb3dzQ291bnQgPiAwKSB7XG5cdFx0Ly9JZiB0aGUgbGFzdCByb3cgaXMgZGVsZXRlZCwgbW92ZSB0aGUgZm9jdXMgdG8gcHJldmlvdXMgcm93IHRvIGl0XG5cdFx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggPT09IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgLSAxKSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IHRhYmxlUm93c0NvdW50IC0gMTtcblx0XHRcdC8vRm9yIHRoZSBub3JtYWwgc2NlbmFyaW8sIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHJvd1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IGxhc3REZWxldGVkUm93SW5kZXggLSBkZWxldGVkUm93c0NvdW50ICsgMTtcblx0XHR9XG5cdFx0YXdhaXQgdGFibGUuZm9jdXNSb3cobmV4dEZvY3VzUm93SW5kZXgsIGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgemVybyByb3dzIG9yIGRlZmF1bHQgY2FzZSwgbW92ZSBmb2N1cyB0byB0YWJsZVxuXHRcdHRhYmxlLmZvY3VzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbbG9ja2VkVXNlcl0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGxvY2tlZFVzZXJcblx0XHRdKTtcblx0fSBlbHNlIGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIiwgW1xuXHRcdFx0bG9ja2VkQ29udGV4dHMubGVuZ3RoLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXG5cdFx0XSk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mRHJhZnRzOiBudW1iZXIsIHRvdGFsRGVsZXRhYmxlOiBudW1iZXIpOiBzdHJpbmcge1xuXHRsZXQgcmV0VHh0ID0gXCJcIjtcblxuXHRpZiAodG90YWxEZWxldGFibGUgPT09IG51bWJlck9mRHJhZnRzKSB7XG5cdFx0aWYgKG51bWJlck9mRHJhZnRzID09PSAxKSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSB1blNhdmVkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0bGV0IHNMYXN0Q2hhbmdlZEJ5VXNlciA9IFwiXCI7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdHNMYXN0Q2hhbmdlZEJ5VXNlciA9IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiXSB8fCBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyXCJdIHx8IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gc0xhc3RDaGFuZ2VkQnlVc2VyO1xufVxuXG5mdW5jdGlvbiBnZXRVbnNhdmVkQ29udGV4dHNUZXh0KFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IG51bWJlcixcblx0dW5TYXZlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyXG4pOiBEZWxldGVUZXh0SW5mbyB7XG5cdGxldCBpbmZvVHh0ID0gXCJcIixcblx0XHRvcHRpb25UeHQgPSBcIlwiLFxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSBmYWxzZTtcblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiB1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdCBhcmUgc2VsZWN0ZWRcblx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBbbGFzdENoYW5nZWRCeVVzZXJdKTtcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvL29ubHkgbXVsdGlwbGUgdW5zYXZlZCBvYmplY3RzIGFyZSBzZWxlY3RlZFxuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU19NVUxUSVBMRV9PQkpFQ1RTXCIpO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBhbGwgZGVsZXRhYmxlIGFyZSB1bnNhdmVkIGJ5IG90aGVyc1xuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9BTkRfRkVXX09CSkVDVFNfTE9DS0VEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIpO1xuXHRcdH1cblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0b3RhbERlbGV0YWJsZSA+IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGRlbGV0YWJsZSBpbmNsdWRlIHVuc2F2ZWQgYW5kIG90aGVyIHR5cGVzLlxuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0b3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19VTlNBVkVEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfUExVUkFMXCIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0dG90YWxOdW1EZWxldGFibGVDb250ZXh0czogbnVtYmVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBUZXh0IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGVudGl0eVNldE5hbWUsIGxvY2tlZENvbnRleHRzID0gW10sIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBbXSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID1cblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMhIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChcblx0XHRub25EZWxldGFibGVDb250ZXh0cyA+IDAgJiZcblx0XHQodG90YWxOdW1EZWxldGFibGVDb250ZXh0cyA9PT0gMCB8fCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA9PT0gdG90YWxOdW1EZWxldGFibGVDb250ZXh0cylcblx0KSB7XG5cdFx0Ly8gMS4gTm9uZSBvZiB0aGUgY2NvbnRleHRzIGFyZSBkZWxldGFibGVcblx0XHQvLyAyLiBPbmx5IGRyYWZ0cyBvZiBub24gZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0LlxuXHRcdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBMb2NrZWQgY29udGV4dHMgZXhpc3Rcblx0XHRcdGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX0FMTF9SRU1BSU5JTkdfTk9OX0RFTEVUQUJMRV9TSU5HVUxBUlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1BMVVJBTFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBzaW5nbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9BTkRfT05FX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3QgbXVsdGlwbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX01VTFRJUExFX0FORF9BTExfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIHNpbmdsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPiAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgbXVsdGlwbGVcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W25vbkRlbGV0YWJsZUNvbnRleHRzLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0ID8gbmV3IFRleHQoeyB0ZXh0OiByZXRUeHQgfSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlICE9PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5mdW5jdGlvbiBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zOiBEZWxldGVPcHRpb25bXSk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRyZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgb3B0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGl0ZW1zOiBDb250cm9sW10sXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdXG4pOiB2b2lkIHtcblx0bGV0IHsgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIH0gPVxuXHRcdG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRsZXQgbG9ja2VkQ29udGV4dHNUeHQgPSBcIlwiO1xuXG5cdC8vIGRyYWZ0cyB3aXRoIGFjdGl2ZVxuXHRpZiAoZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmZvckVhY2goKGRlbGV0YWJsZURyYWZ0SW5mbzogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0Ly8gSW4gZWl0aGVyIGNhc2VzLCBpZiBhbiBvd24gZHJhZnQgaXMgbG9ja2VkIG9yIG5vdCB0aGUgZHJhZnQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkIGJlZm9yZSBkZWxldGluZyBhY3RpdmUgcmVjb3JkLlxuXHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUucHVzaChkZWxldGFibGVEcmFmdEluZm8uZHJhZnQpO1xuXHRcdFx0dkNvbnRleHRzLnB1c2goZGVsZXRhYmxlRHJhZnRJbmZvLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQpO1xuXHRcdH0pO1xuXHRcdGlmIChkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaXRlbXMgbG9ja2VkIG1zZ1xuXHRpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGxvY2tlZENvbnRleHRzVHh0ID0gZGVsZXRlSGVscGVyLmdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMpIHx8IFwiXCI7XG5cdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IGxvY2tlZENvbnRleHRzVHh0IH0pKTtcblx0fVxuXG5cdC8vIG5vbiBkZWxldGFibGUgbXNnXG5cdGNvbnN0IG5vbkRlbGV0YWJsZUV4aXN0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAhPSB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVUZXh0Q3RybCA9IG5vbkRlbGV0YWJsZUV4aXN0cyAmJiBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRpZiAobm9uRGVsZXRhYmxlVGV4dEN0cmwpIHtcblx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHRDdHJsKTtcblx0fVxuXG5cdC8vIG9wdGlvbjogdW5zYXZlZCBjaGFuZ2VzIGJ5IG90aGVyc1xuXHRpZiAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCB1bnNhdmVkQ2hhbmdlc1R4dHMgPVxuXHRcdFx0ZGVsZXRlSGVscGVyLmdldFVuc2F2ZWRDb250ZXh0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSB8fCB7fTtcblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCB9KSk7XG5cdFx0fVxuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0IHx8IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25XaXRob3V0VHh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy51blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiB1blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb3B0aW9uOiBkcmFmdHMgd2l0aCBhY3RpdmUgbm90IGRlbGV0YWJsZVxuXHRpZiAoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChyZXNvdXJjZU1vZGVsLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCwgdG90YWxEZWxldGFibGUpIHx8IFwiXCI7XG5cdFx0aWYgKG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdGNvbnRleHRzOiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0XHR0ZXh0OiBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogdG90YWxEZWxldGFibGUgPiAwID8gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuQ0hFQ0tCT1ggOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zOiBEZWxldGVPcHRpb25bXSwgaXRlbXM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHQvLyBTaW5nbGUgb3B0aW9uIGRvZXNuJ3QgbmVlZCBjaGVja0JveFxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbMF07XG5cdFx0aWYgKG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcblx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRpdGVtcy5wdXNoKHRleHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBNdWx0aXBsZSBPcHRpb25zXG5cblx0XHQvLyBUZXh0c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJ0ZXh0XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG5cdFx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRcdGl0ZW1zLnB1c2godGV4dCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQ2hlY2tCb3hzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcImNoZWNrQm94XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0aXRlbXMucHVzaChcblx0XHRcdFx0XHRuZXcgQ2hlY2tCb3goe1xuXHRcdFx0XHRcdFx0dGV4dDogb3B0aW9uLnRleHQsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHNlbGVjdDogZnVuY3Rpb24gKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tCb3ggPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gY2hlY2tCb3guZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0XHRcdFx0b3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgb3JpZ2luYWwgcmVjb3JkIHNlbGVjdGVkIG9uIHRoZSBVSS5cbiAqXG4gKiBJbiB0aGUgY2FzZSB0aGUgY29udGV4dCB0byBkZWxldGUgaXMgYW4gYWN0aXZlIHJlY29yZCBidXQgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgYSBkcmFmdCByZWNvcmQuXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVsZXRlIHBhcmFtZXRlcnMgYW5kIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRUb0RlbGV0ZSBPRGF0YVY0Q29udGV4dCB0byBjaGVjay5cbiAqIEByZXR1cm5zIE9EYXRhVjRDb250ZXh0IGZvciBkZWxldGUuXG4gKi9cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCBjb250ZXh0VG9EZWxldGU6IE9EYXRhVjRDb250ZXh0KTogT0RhdGFWNENvbnRleHQge1xuXHRjb25zdCB7IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCByZXQgPSBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKChkcmFmdFNpYmxpbmdQYWlyKSA9PiBkcmFmdFNpYmxpbmdQYWlyLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQgPT09IGNvbnRleHRUb0RlbGV0ZSk7XG5cdHJldHVybiByZXQ/LmRyYWZ0ID8gcmV0LmRyYWZ0IDogY29udGV4dFRvRGVsZXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcG9zc2libGUgb3B0aW9ucyBmb3IgZGVsZXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIERlbGV0ZSBwYXJhbWV0ZXJzIGFuZCBpbmZvcm1hdGlvbiBvZiBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBkaXJlY3REZWxldGFibGVDb250ZXh0cyBDb250ZXh0cyB0aGF0IGNhbiBiZSBkZWxldGFibGUgZGlyZWN0bHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbC5cbiAqIEByZXR1cm5zIE9wdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgZm9yIHNlbGVjdGVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdGRpcmVjdERlbGV0YWJsZUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBEZWxldGVPcHRpb25bXSB7XG5cdGxldCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cyB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHsgZW50aXR5U2V0TmFtZSwgcGFyZW50Q29udHJvbCwgZGVzY3JpcHRpb24gfSA9IG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRjb25zdCB0b3RhbERlbGV0YWJsZSA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCArIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgdW5TYXZlZENvbnRleHRzLmxlbmd0aDtcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxEZWxldGFibGUgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGNvbnN0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIHNpbmdsZSBkZWxldGFibGUgY29udGV4dFxuXHRcdGNvbnN0IG9UYWJsZSA9IHBhcmVudENvbnRyb2wgYXMgVGFibGU7XG5cdFx0Y29uc3Qgc0tleSA9IG9UYWJsZSAmJiAoKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZyk7XG5cdFx0bGV0IHR4dDtcblx0XHRpZiAoc0tleSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb24gJiYgKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0bGV0IHNpbmdsZUNvbnRleHQgPSBkaXJlY3REZWxldGFibGVDb250ZXh0c1swXTtcblx0XHRcdGxldCBvTGluZUNvbnRleHREYXRhID0gc2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmICghb0xpbmVDb250ZXh0RGF0YSB8fCBPYmplY3Qua2V5cyhvTGluZUNvbnRleHREYXRhKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvcmlnaW5hbCBzZWxlY3RlZCByZWNvcmQgaXMgZHJhZnQoaW4gVUkpLiBUaGUgQWN0aXZlIHJlY29yZCBuZWVkcyB0byBiZSBkZWxldGVkKGRpcmVjdERlbGV0YWJsZUNvbnRleHRzIGhhcyBhY3RpdmUgcmVjb3JkKSwgYnV0IGRhdGEgaXMgbm90IHJlcXVlc3RlZC4gV2UgZ2V0IGRhdGEgZnJvbSB0aGUgZHJhZnQuXG5cdFx0XHRcdHNpbmdsZUNvbnRleHQgPSBfZ2V0T3JpZ2luYWxTZWxlY3RlZFJlY29yZChtUGFyYW1ldGVycywgc2luZ2xlQ29udGV4dCk7XG5cdFx0XHRcdG9MaW5lQ29udGV4dERhdGEgPSBzaW5nbGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc0tleVZhbHVlID0gc0tleSA/IG9MaW5lQ29udGV4dERhdGFbc0tleV0gOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBzRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvblBhdGggJiYgb0xpbmVDb250ZXh0RGF0YVtkZXNjcmlwdGlvblBhdGhdO1xuXHRcdFx0aWYgKHNLZXlWYWx1ZSkge1xuXHRcdFx0XHRpZiAoc0Rlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uICYmIHNLZXkgIT09IChkZXNjcmlwdGlvbiBhcyB7IHBhdGg/OiBzdHJpbmcgfSkucGF0aCkge1xuXHRcdFx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRbc0tleVZhbHVlLCBzRGVzY3JpcHRpb25dLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9PTkxZXCIsIFtzS2V5VmFsdWVdLCBlbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0fVxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHRleHQ6IHR4dCxcblx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggIT09IHRvdGFsRGVsZXRhYmxlICYmXG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gMCAmJlxuXHRcdChkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggPiAwIHx8ICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCAmJiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApKVxuXHQpIHtcblx0XHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoICYmIG5vbkRlbGV0YWJsZUNvbnRleHRzICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgZXhpc3RzIHdpdGggcHVyZSBkZWxldGFibGUgb25lc1xuXHRcdFx0bGV0IGRlbGV0YWJsZU9wdGlvblR4dCA9IFwiXCI7XG5cdFx0XHRpZiAodG90YWxEZWxldGFibGUgPT09IDEpIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUl9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0YWJsZU9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0b3B0aW9ucy51bnNoaWZ0KHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogZGVsZXRhYmxlT3B0aW9uVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG9ubHkgZGVsZXRhYmxlXG5cdFx0XHRjb25zdCBhbGxEZWxldGFibGVUeHQgPVxuXHRcdFx0XHR0b3RhbERlbGV0YWJsZSA9PT0gMVxuXHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpXG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1BMVVJBTFwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogYWxsRGVsZXRhYmxlVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMoXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRlbmFibGVTdHJpY3RIYW5kbGluZzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duW10+IHtcblx0Y29uc3QgZHJhZnRFcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQsIGVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0IHdpdGggcGF0aCA6ICR7Y29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdGRyYWZ0RXJyb3JzLnB1c2goZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KTtcblx0cmV0dXJuIGRyYWZ0RXJyb3JzO1xufVxuXG4vKipcbiAqIEluIGNhc2Ugb2YgYSB0cmVlIHRhYmxlLCB3ZSBzaGFsbCBub3QgZGVsZXRlIGEgY29udGV4dCBpZiBvbmUgaWYgaXRzIGFuY2VzdG9ycyBpcyBhbHNvIHRvIGJlIGRlbGV0ZWQuXG4gKiBUaGlzIGZ1bmN0aW9ucyBmaWx0ZXJzIG91dCBzdWNoIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IHRlbXBDb250ZXh0czogKE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKVtdID0gWy4uLmNvbnRleHRzXTtcblx0Ly8gRmlsdGVyIG91dCBjb250ZXh0cyB3aG9zZSBhbmNlc3RvciBpcyBhbHNvIGRlbGV0ZWQsIGFzIHRoZXkgd2lsbCBiZSBkZWxldGVkIHdpdGggdGhlaXIgYW5jZXN0b3Jcblx0dGVtcENvbnRleHRzLmZvckVhY2goKHBhcmVudENvbnRleHQsIHBhcmVudEluZGV4KSA9PiB7XG5cdFx0aWYgKHBhcmVudENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGNoaWxkSW5kZXggPSBwYXJlbnRJbmRleCArIDE7IGNoaWxkSW5kZXggPCB0ZW1wQ29udGV4dHMubGVuZ3RoOyBjaGlsZEluZGV4KyspIHtcblx0XHRcdGNvbnN0IGNoaWxkQ29udGV4dCA9IHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XTtcblx0XHRcdGlmIChjaGlsZENvbnRleHQgJiYgcGFyZW50Q29udGV4dC5pc0FuY2VzdG9yT2YoY2hpbGRDb250ZXh0KSkge1xuXHRcdFx0XHR0ZW1wQ29udGV4dHNbY2hpbGRJbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdGVtcENvbnRleHRzLmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVDb25maXJtSGFuZGxlcihcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRkcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGJpbmRpbmdUeXBlPzogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY29udGV4dHMgPSBkZWxldGVIZWxwZXIuZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChbXSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgbGFzdERlbGV0ZWRSb3dJbmRleCA9IGNvbnRleHRzW2NvbnRleHRzLmxlbmd0aCAtIDFdLmdldEluZGV4KCkgPz8gLTE7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zKTtcblxuXHRcdGNvbnN0IHsgYmVmb3JlRGVsZXRlQ2FsbEJhY2ssIHBhcmVudENvbnRyb2wgfSA9IG1QYXJhbWV0ZXJzO1xuXHRcdGlmIChiZWZvcmVEZWxldGVDYWxsQmFjaykge1xuXHRcdFx0YXdhaXQgYmVmb3JlRGVsZXRlQ2FsbEJhY2soeyBjb250ZXh0czogY29udGV4dHMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBjb250ZXh0cy5sZW5ndGggPT09IDEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RXJyb3JzOiB1bmtub3duW10gPSBhd2FpdCBkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzKFxuXHRcdFx0XHRcdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRlbmFibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGxldCBjb250ZXh0c1RvRGVsZXRlID0gY29udGV4dHM7XG5cdFx0XHRcdGlmIChiaW5kaW5nVHlwZSA9PT0gXCJUcmVlXCIpIHtcblx0XHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlID0gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRleHQgdG8gZGVsZXRlIGlzIGEgZHJhZnQgKGkuZS4gYWN1dGFsbHkgd2UganVzdCB3bmF0IHRvIGRpc2NhcmQpLCB3ZSBzaG91bGQgdXNlIGRyYWZ0LmRlbGV0ZURyYWZ0IGluIG9yZGVyIHRvIHVzZSBhIGRpc2NhcmQgYWN0aW9uIGlmIGRlZmluZWRcblx0XHRcdFx0XHRcdC8vIEhvd2V2ZXIsIGRyYWZ0LmRlbGV0ZURyYWZ0IHVzZXMgZ2V0UHJvcGVydHksIHdoaWNoIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjb250ZXh0IGlzIG5vdCByZWFkIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHQvLyBUaGlzIGNhbiBiZSB0aGUgY2FzZSwgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhpcyBjb250ZXh0IHZpYSB0aGUgc2libGluZyAoZS5nLiB3aGVuIGEgZHJhZnQgZXhpc3RlZCBhbmQgd2Ugd2FudCB0byBkZWxldGUgYm90aCAtIGluIHRoYXQgY2FzZVxuXHRcdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhbHJlYWR5IGRpc2NhcmRlZCB0aGUgZHJhZnQgYWJvdmUsIGFuZCBub3cgbmVlZCB0byBkZWxldGUgdGhlIGFjdGl2ZSBvbmUpLiBUbyBpZGVudGlmeSB0aGlzIHNpdHVhdGlvbiwgd2UgbXVzdCBub3QgdXNlIGdldFByb3BlcnR5XG5cdFx0XHRcdFx0XHQvLyAoYXMgdGhlIGNvbnRleHQgaXMgbm90IHJlYWQpLCBidXQgY2hlY2sgdGhlIHNhbWUgaW4gdGhlIG1QYXJhbWV0ZXJzLlxuXHRcdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhlIGNvbnRleHQuIEJ1dCB3ZSBzaG91bGQgbm90IHVzZSBjb250ZXh0LmRlbGV0ZSAoYWxzbyB1cGRhdGluZyBiaW5kaW5ncywgd2hpY2ggZmFpbHMgaW4gdGhlIGRlc2NyaWJlZCBzaXR1YXRpb24pLFxuXHRcdFx0XHRcdFx0Ly8gYnV0IG1vZGVsLmRlbGV0ZSAob25seSBzZW5kaW5nIHRoZSBkZWxldGUpLiBJbiBvdGhlciBjYXNlcyAoZS5nLiBub24tZHJhZnQpLCB0aGlzIGlzIGFsc28gc3VmZmljaWVudCwgYXMgd2UgYW55d2F5IHRha2UgY2FyZSBvZiBzZXR0aW5nXG5cdFx0XHRcdFx0XHQvLyBjb3JyZWN0IGJpZG5pbmdzIHdpdGggdGhlIG5hdmlnYXRpb24gdHJpZ2dlcmVkIGJ5IHRoZSBkZWxldGlvbi5cblx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb24gYW5hbHl0aWNhbCB0YWJsZSwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgY29udGV4dC5kZWxldGUsIGFzIGl0IHdpbGwgZmFpbC5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IWRyYWZ0RW5hYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUpID0+IGRyYWZ0V2l0aERlbGV0YWJsZUFjdGl2ZS5zaWJsaW5nSW5mby50YXJnZXRDb250ZXh0ID09PSBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdCkgfHxcblx0XHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPT09IFwiQW5hbHl0aWNhbFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0TW9kZWwoKS5kZWxldGUoY29udGV4dC5nZXRDYW5vbmljYWxQYXRoKCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQsIGVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRkZWxldGVIZWxwZXIuYWZ0ZXJEZWxldGVQcm9jZXNzKG1QYXJhbWV0ZXJzLCBvcHRpb25zLCBjb250ZXh0cywgcmVzb3VyY2VNb2RlbCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdFx0XHRcdGlmIChkcmFmdEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgRXJyb3IoYEZFIDogY29yZSA6IERlbGV0ZUhlbHBlciA6IEVycm9ycyBvbiBkcmFmdCBkZWxldGUgOiAke2RyYWZ0RXJyb3JzfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGRlbGV0ZUhlbHBlci5hZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UocmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBjb250cm9sOiBwYXJlbnRDb250cm9sIH0pO1xuXHRcdFx0XHQvLyByZS10aHJvdyBlcnJvciB0byBlbmZvcmNlIHJlamVjdGluZyB0aGUgZ2VuZXJhbCBwcm9taXNlXG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0Ly8gcmUtdGhyb3cgZXJyb3IgdG8gZW5mb3JjZSByZWplY3RpbmcgdGhlIGdlbmVyYWwgcHJvbWlzZVxuXHRcdHRocm93IG9FcnJvcjtcblx0fVxufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgZGVsZXRlIGZhaWx1cmUgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfVEVYVFwiKSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfREVUQUlMU19URVhUXCIpLFxuXHRcdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFX0NIQU5HRVNFVF9GQUlMVVJFX1NJTkdMRV9FUlJPUl9URVhUXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBDb250ZXh0SW5mbyB1c2luZyBpdHMgc2libGluZyBjb250ZXh0LCBpZiBuZWVkZWQuXG4gKiBSZXF1ZXN0cyB0aGUgc2libGluZyBjb250ZXh0IGFuZCB1cGRhdGVzIHRoZSBzaWJsaW5nRGVsZXRhYmxlIHByb3BlcnR5LlxuICogQWxzbyBtYW5hZ2VzIHRoZSBjYXNlIHdoZXJlIHRoZSBtYWluIGNvbnRleHQgaXMgYWN0aXZlIGJ1dCBoYXMgYSBkcmFmdCBzaWJsaW5nICgtLT4gc3dhcCBiZXR3ZWVuIG1haW4gYW5kIHNpYmxpbmcgY29udGV4dCkuXG4gKiBAcGFyYW0gaW5mb1xuICogQHBhcmFtIGRlbGV0YWJsZVBhdGhcbiAqIEBwYXJhbSBzdGF0aWNEZWxldGFibGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm86IENvbnRleHRJbmZvLCBkZWxldGFibGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRpY0RlbGV0YWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdGlmICghaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSkge1xuXHRcdFx0Ly8gQ2FzZSAxOiB0aGUgY29udGV4dCBpcyBhIGRyYWZ0LCB3ZSBuZWVkIHRvIGdldCBpdHMgYWN0aXZlIHNpYmxpbmdcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvcm1hdGlvbiA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oaW5mby5jb250ZXh0LCBpbmZvLmNvbnRleHQpO1xuXHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHNpYmxpbmdJbmZvcm1hdGlvbjtcblx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGhcblx0XHRcdFx0PyBhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQ/LnJlcXVlc3RQcm9wZXJ0eShkZWxldGFibGVQYXRoKVxuXHRcdFx0XHQ6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHR9IGVsc2UgaWYgKGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCkge1xuXHRcdFx0Ly8gQ2FzZSAyOiB0aGUgY29udGV4dCBpcyBhY3RpdmUsIHdlIG5lZWQgdG8gZ2V0IGl0cyBkcmFmdCBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGlmIChzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBkcmFmdCBzaWJsaW5nIGZyb20gdGhlIGFjdGl2ZSBpbnN0YW5jZSAtLT4gZmFsbGJhY2sgdG8gY2FzZSAxXG5cdFx0XHRcdC8vIGJ5IGV4Y2hhbmdpbmcgdGhlIGNvbnRleHQgd2l0aCB0aGUgc2libGluZyBjb250ZXh0IGluIHRoZSBpbmZvIG9iamVjdC5cblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvRmV0Y2ggPSBbXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0FjdGl2ZUVudGl0eVwiXTtcblx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9GZXRjaC5wdXNoKGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShwcm9wZXJ0aWVzVG9GZXRjaCk7XG5cdFx0XHRcdGluZm8ubG9ja2VkID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaGFzRHJhZnQgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5pc0FjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0FjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGNvbnRleHQgd2l0aCBzaWJsaW5nIGNvbnRleHRcblx0XHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHsgdGFyZ2V0Q29udGV4dDogaW5mby5jb250ZXh0LCBwYXRoTWFwcGluZzogW10gfTtcblx0XHRcdFx0aW5mby5jb250ZXh0ID0gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGRlbGV0YWJsZSB3aXRoIHNpYmxpbmcgZGVsZXRhYmxlXG5cdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGluZm8uZGVsZXRhYmxlO1xuXHRcdFx0XHRpbmZvLmRlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGggPyBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKF9lKSB7XG5cdFx0Ly8gRG8gbm90aGluZ1xuXHR9XG59XG5cbi8qKlxuICogQ29sbGVjdCBjb250ZXh0IGluZm9ybWF0aW9uIChpc0RyYWZ0Um9vdCwgaXNEcmFmdE5vZGUsIEhhc0RyYWZ0RW50aXR5LCBJc0FjdGl2ZUVudGl0eSwgSGFzQWN0aXZlRW50aXR5LCBpc0xvY2tlZCwgaXNJbmFjdGl2ZSkuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVGhlIGNvbnRleHQgaW5mbyBwcm9taXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0SW5mb3MoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPENvbnRleHRJbmZvPiB7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gISFjb250ZXh0Py5nZXRPYmplY3QoKVtcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdGNvbnN0IGlzSW5hY3RpdmUgPSBjb250ZXh0Py5pc0luYWN0aXZlKCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID1cblx0XHRpc0luYWN0aXZlIHx8ICghaXNJbmFjdGl2ZSAmJiBpc1RyYW5zaWVudClcblx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHQ6IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdGNvbnN0IGRlbGV0YWJsZVBhdGggPSBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlLyRQYXRoXCIpO1xuXHRjb25zdCBzdGF0aWNEZWxldGFibGUgPSAhZGVsZXRhYmxlUGF0aCAmJiBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlXCIpICE9PSBmYWxzZTtcblx0Y29uc3QgZGVsZXRhYmxlID0gZGVsZXRhYmxlUGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cblx0Y29uc3QgaW5mbzogQ29udGV4dEluZm8gPSB7XG5cdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRpc0RyYWZ0Um9vdDogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSxcblx0XHRpc0RyYWZ0Tm9kZTogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiKSxcblx0XHRpc0FjdGl2ZTogdHJ1ZSxcblx0XHRoYXNBY3RpdmU6IGZhbHNlLFxuXHRcdGhhc0RyYWZ0OiBmYWxzZSxcblx0XHRsb2NrZWQ6IGZhbHNlLFxuXHRcdC8vIGZvciBhbiBlbXB0eVJvdyAoaW5hY3RpdmUgY29udGV4dCkgaXQncyBhbHdheXMgZGVsZXRhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQga2VwdCBpbmFjdGl2ZS4uXG5cdFx0ZGVsZXRhYmxlOiBkZWxldGFibGUsXG5cdFx0c2libGluZ0luZm86IHVuZGVmaW5lZCxcblx0XHRzaWJsaW5nRGVsZXRhYmxlOiBmYWxzZSxcblx0XHRpc0luYWN0aXZlQ29udGV4dDogISFjb250ZXh0LmlzSW5hY3RpdmUoKVxuXHR9O1xuXHRpZiAoIWNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGluZm8uaXNEcmFmdFJvb3QpIHtcblx0XHRpbmZvLmxvY2tlZCA9ICEhY29udGV4dC5nZXRPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKT8uSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdGluZm8uaGFzRHJhZnQgPSBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIik7XG5cdFx0aW5mby5pc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRpbmZvLmhhc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0YXdhaXQgdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm8sIGRlbGV0YWJsZVBhdGgsIHN0YXRpY0RlbGV0YWJsZSk7XG5cdH1cblx0cmV0dXJuIGluZm87XG59XG5cbi8vIFRhYmxlIFJ1bnRpbWUgSGVscGVyczpcblxuLyogcmVmcmVzaGVzIGRhdGEgaW4gaW50ZXJuYWwgbW9kZWwgcmVsZXZhbnQgZm9yIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvbiBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgY29udGV4dHNcbnJlbGV2YW50IGRhdGEgYXJlOiBkZWxldGFibGVDb250ZXh0cywgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdW5TYXZlZENvbnRleHRzLCBkZWxldGVFbmFibGVkXG5ub3QgcmVsZXZhbnQ6IGxvY2tlZENvbnRleHRzXG4qL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0c2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGNvbnRleHRJbmZvcyA9IGF3YWl0IFByb21pc2UuYWxsKHNlbGVjdGVkQ29udGV4dHMubWFwKGdldENvbnRleHRJbmZvcykpO1xuXG5cdGNvbnN0IGJ1Y2tldHMgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEluIHRoYXQgY2FzZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbnQgZm9yIHRoZSBhY3RpdmUgKGkuZS4gdGhlIHNpYmxpbmcpLFxuXHRcdFx0Ly8gd2hpbGUgaW4gZHJhZnQgbm9kZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbmQgZm9yIHRoZSBkcmFmdCBpdHNlbGZcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSAmJiBpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHQvLyBvbmx5IGZvciBkcmFmdCByb290OiBGb3IgZHJhZnQgbm9kZSwgd2Ugb25seSByZWx5IG9uIGluZm9ybWF0aW9uIGluIHRoZSBkcmFmdCBpdHNlbGYgKG5vdCBpdHMgYWN0aXZlIHNpYmxpbmcpXG5cdFx0XHQvLyBhcHBsaWNhdGlvbiBoYXMgdG8gdGFrZSBjYXJlIHRvIHNldCB0aGlzIGNvcnJlY3RseSAoaW4gY2FzZSBhY3RpdmUgc2libGluZyBtdXN0IG5vdCBiZSBkZWxldGFibGUsIGFjdGl2YXRpb25cblx0XHRcdC8vIG9mIGRyYWZ0IHdpdGggZGVsZXRlZCBub2RlIHdvdWxkIGFsc28gZGVsdGUgYWN0aXZlIHNpYmxpbmcgPT4gZGVsZXRpb24gb2YgZHJhZnQgbm9kZSB0byBiZSBhdm9pZGVkKVxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmICFpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJsb2NrZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiBpbmZvLmxvY2tlZFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiAhaW5mby5sb2NrZWRcblx0XHRcdClcblx0XHR9LFxuXHRcdC8vIG5vbi1kcmFmdC9zdGlja3kgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGFjdGl2ZSBkcmFmdCByb290IHdpdGhvdXQgYW55IGRyYWZ0IGFuZCBkZWxldGFibGVcblx0XHQvLyBjcmVhdGVkIGRyYWZ0IHJvb3QgKHJlZ2FyZGxlc3Mgb2YgZGVsZXRhYmxlKVxuXHRcdC8vIGRyYWZ0IG5vZGUgb25seSBhY2NvcmRpbmcgdG8gaXRzIGFubm90YXRpb25cblx0XHR7XG5cdFx0XHRrZXk6IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT5cblx0XHRcdFx0XHRpbmZvLmlzSW5hY3RpdmVDb250ZXh0IHx8XG5cdFx0XHRcdFx0KCFpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzRHJhZnQgJiYgaW5mby5kZWxldGFibGUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzQWN0aXZlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKVxuXHRcdFx0KVxuXHRcdH1cblx0XTtcblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Zm9yIChjb25zdCB7IGtleSwgdmFsdWUgfSBvZiBidWNrZXRzKSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRjb250ZXh0UGF0aCArIGtleSxcblx0XHRcdC8vIEN1cnJlbnRseSwgYnVja2V0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSAoY29udGFpbmluZyBhbHNvIHNpYmxpbmcgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHVzZWRcblx0XHRcdC8vIGluIGNhc2Ugb2YgZGVsZXRpb24pLiBQb3NzaWJsZSBpbXByb3ZlbWVudDogUmVhZCBzaWJsaW5nIGluZm9ybWF0aW9uIG9ubHkgd2hlbiBuZWVkZWQsIGFuZCBidWlsZCBhbGwgYnVja2V0cyB3aXRoIHNhbWVcblx0XHRcdC8vIHN0cnVjdHVyZS4gSG93ZXZlciwgaW4gdGhhdCBjYXNlIHNpYmxpbmdJbmZvcm1hdGlvbiBtaWdodCBuZWVkIHRvIGJlIHJlYWQgdHdpY2UgKGlmIGFscmVhZHkgbmVlZGVkIGZvciBidXR0b24gZW5hYmxlbWVudCksXG5cdFx0XHQvLyB0aHVzIGEgYnVmZmVyIHByb2JhYmx5IHdvdWxkIG1ha2Ugc2Vuc2UuXG5cdFx0XHR2YWx1ZS5tYXAoKGluZm8pID0+XG5cdFx0XHRcdGtleSA9PT0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIgPyB7IGRyYWZ0OiBpbmZvLmNvbnRleHQsIHNpYmxpbmdJbmZvOiBpbmZvLnNpYmxpbmdJbmZvIH0gOiBpbmZvLmNvbnRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IGRlbGV0ZUhlbHBlciA9IHtcblx0Z2V0Tm9uRGVsZXRhYmxlVGV4dCxcblx0ZGVsZXRlQ29uZmlybUhhbmRsZXIsXG5cdGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0dXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyxcblx0dXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQsXG5cdGdldExvY2tlZE9iamVjdHNUZXh0LFxuXHRnZXRVbnNhdmVkQ29udGV4dHNUZXh0LFxuXHRnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRhZnRlckRlbGV0ZVByb2Nlc3MsXG5cdHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzLFxuXHREZWxldGVPcHRpb25UeXBlcyxcblx0RGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wsXG5cdHNldEZvY3VzQWZ0ZXJEZWxldGUsXG5cdGdldENvbnRleHRJbmZvcyxcblx0YWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWxldGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7TUFvQktBLGlCQUFpQjtFQUFBLFdBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0VBQUEsR0FB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
|
|
721
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsInNpbGVudE1vZGUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsInBhcmVudENvbnRyb2wiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwidGFibGUiLCJkZWxldGVkUm93c0NvdW50IiwiX3RhYmxlJGdldFJvd0JpbmRpbmciLCJfdGFibGUkZ2V0Um93QmluZGluZyQiLCJ0YWJsZVJvd3NDb3VudCIsImdldFJvd0JpbmRpbmciLCJjYWxsIiwiZ2V0Q291bnQiLCJvcmlnaW5hbFRhYmxlUm93c0NvdW50IiwibmV4dEZvY3VzUm93SW5kZXgiLCJmb2N1c1JvdyIsImZvY3VzIiwiZ2V0TG9ja2VkQ29udGV4dFVzZXIiLCJsb2NrZWRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJnZXRPYmplY3QiLCJnZXRMb2NrZWRPYmplY3RzVGV4dCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwicmV0VHh0IiwibG9ja2VkVXNlciIsImdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJudW1iZXJPZkRyYWZ0cyIsInRvdGFsRGVsZXRhYmxlIiwiZ2V0VW5TYXZlZENvbnRleHRVc2VyIiwidW5TYXZlZENvbnRleHQiLCJzTGFzdENoYW5nZWRCeVVzZXIiLCJnZXRVbnNhdmVkQ29udGV4dHNUZXh0IiwidW5TYXZlZENvbnRleHRzIiwiaW5mb1R4dCIsIm9wdGlvblR4dCIsIm9wdGlvbldpdGhvdXRUeHQiLCJsYXN0Q2hhbmdlZEJ5VXNlciIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJtUGFyYW1ldGVycyIsInRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwibm9uRGVsZXRhYmxlQ29udGV4dHMiLCJUZXh0IiwidGV4dCIsImdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQiLCJyZWR1Y2UiLCJyZXN1bHQiLCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsImNvbmNhdCIsImdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlIiwidXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJ2Q29udGV4dHMiLCJpdGVtcyIsImxvY2tlZENvbnRleHRzVHh0IiwiZGVsZXRhYmxlRHJhZnRJbmZvIiwicHVzaCIsInNpYmxpbmdJbmZvIiwidGFyZ2V0Q29udGV4dCIsIm5vbkRlbGV0YWJsZUV4aXN0cyIsIm5vbkRlbGV0YWJsZVRleHRDdHJsIiwidW5zYXZlZENoYW5nZXNUeHRzIiwiY29udHJvbCIsIkNIRUNLQk9YIiwibm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCIsIlRFWFQiLCJ1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nIiwic2V0VGV4dCIsIkNoZWNrQm94Iiwic2VsZWN0Iiwib0V2ZW50IiwiY2hlY2tCb3giLCJnZXRTb3VyY2UiLCJnZXRTZWxlY3RlZCIsIl9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkIiwiY29udGV4dFRvRGVsZXRlIiwicmV0IiwiZmluZCIsImRyYWZ0U2libGluZ1BhaXIiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJkaXJlY3REZWxldGFibGVDb250ZXh0cyIsImRlc2NyaXB0aW9uIiwib1RhYmxlIiwic0tleSIsImdldFBhcmVudCIsImdldElkZW50aWZpZXJDb2x1bW4iLCJ0eHQiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwic2luZ2xlQ29udGV4dCIsIm9MaW5lQ29udGV4dERhdGEiLCJPYmplY3QiLCJrZXlzIiwic0tleVZhbHVlIiwic0Rlc2NyaXB0aW9uIiwiZGVsZXRhYmxlT3B0aW9uVHh0IiwidW5zaGlmdCIsImFsbERlbGV0YWJsZVR4dCIsImRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMiLCJtZXNzYWdlSGFuZGxlciIsImFwcENvbXBvbmVudCIsImVuYWJsZVN0cmljdEhhbmRsaW5nIiwiZHJhZnRFcnJvcnMiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImRlbGV0ZURyYWZ0IiwiZSIsIkxvZyIsImVycm9yIiwiZ2V0UGF0aCIsInJlbW92ZURlc2NlbmRhbnRDb250ZXh0cyIsInRlbXBDb250ZXh0cyIsInBhcmVudENvbnRleHQiLCJwYXJlbnRJbmRleCIsImNoaWxkSW5kZXgiLCJjaGlsZENvbnRleHQiLCJpc0FuY2VzdG9yT2YiLCJmaWx0ZXIiLCJkZWxldGVDb25maXJtSGFuZGxlciIsImRyYWZ0RW5hYmxlZCIsImJpbmRpbmdUeXBlIiwiZ2V0SW5kZXgiLCJiZWZvcmVEZWxldGVDYWxsQmFjayIsImNvbnRleHRzVG9EZWxldGUiLCJhbGwiLCJfbVBhcmFtZXRlcnMkZHJhZnRzV2kiLCJkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUiLCJyZXNldENoYW5nZXMiLCJnZXRNb2RlbCIsImRlbGV0ZSIsImdldENhbm9uaWNhbFBhdGgiLCJFcnJvciIsImFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSIsInNob3dNZXNzYWdlRGlhbG9nIiwib0Vycm9yIiwic2hvd01lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiYWRkTWVzc2FnZXMiLCJNZXNzYWdlIiwibWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImNvZGUiLCJ0ZWNobmljYWxEZXRhaWxzIiwiZmUiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJ1cGRhdGVJbmZvRnJvbVNpYmxpbmciLCJpbmZvIiwiZGVsZXRhYmxlUGF0aCIsInN0YXRpY0RlbGV0YWJsZSIsImlzQWN0aXZlIiwiaGFzQWN0aXZlIiwiX3NpYmxpbmdJbmZvcm1hdGlvbiR0Iiwic2libGluZ0luZm9ybWF0aW9uIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInNpYmxpbmdEZWxldGFibGUiLCJyZXF1ZXN0UHJvcGVydHkiLCJoYXNEcmFmdCIsInByb3BlcnRpZXNUb0ZldGNoIiwibG9ja2VkIiwicGF0aE1hcHBpbmciLCJkZWxldGFibGUiLCJfZSIsImdldENvbnRleHRJbmZvcyIsImlzVHJhbnNpZW50IiwiaXNJbmFjdGl2ZSIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YUNvbnRleHQiLCJpc0RyYWZ0Um9vdCIsImlzRHJhZnROb2RlIiwiaXNJbmFjdGl2ZUNvbnRleHQiLCJfY29udGV4dCRnZXRPYmplY3QiLCJJblByb2Nlc3NCeVVzZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dEluZm9zIiwiYnVja2V0cyIsImtleSIsInZhbHVlIiwiY29udGV4dFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlbGV0ZUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNpYmxpbmdJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5cbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbmVudW0gRGVsZXRlT3B0aW9uVHlwZXMge1xuXHRkZWxldGFibGVDb250ZXh0cyA9IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHR1blNhdmVkQ29udGV4dHMgPSBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID0gXCJkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZVwiXG59XG5cbmVudW0gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wge1xuXHRDSEVDS0JPWCA9IFwiY2hlY2tCb3hcIixcblx0VEVYVCA9IFwidGV4dFwiXG59XG5cbmV4cG9ydCB0eXBlIERyYWZ0U2libGluZ1BhaXIgPSB7XG5cdGRyYWZ0OiBPRGF0YVY0Q29udGV4dDtcblx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZU9wdGlvbiA9IHtcblx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXM7XG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRzZWxlY3RlZDogYm9vbGVhbjtcblx0dGV4dD86IHN0cmluZztcblx0Y29udHJvbD86IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udGV4dEluZm8gPSB7XG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRzaWJsaW5nSW5mbzogU2libGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuXHRpc0RyYWZ0Um9vdDogYm9vbGVhbjtcblx0aXNEcmFmdE5vZGU6IGJvb2xlYW47XG5cdGlzQWN0aXZlOiBib29sZWFuO1xuXHRoYXNBY3RpdmU6IGJvb2xlYW47XG5cdGhhc0RyYWZ0OiBib29sZWFuO1xuXHRsb2NrZWQ6IGJvb2xlYW47XG5cdGRlbGV0YWJsZTogYm9vbGVhbjtcblx0c2libGluZ0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNJbmFjdGl2ZUNvbnRleHQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGUgPSB7XG5cdERyYWZ0VVVJRDogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXI/OiBzdHJpbmc7XG5cdEluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdENyZWF0ZWRCeVVzZXI/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdExhc3RDaGFuZ2VkQnlVc2VyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlUGFyYW1ldGVycyA9IHtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cz86IG51bWJlcjtcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBwYXRoOiBzdHJpbmcgfTtcblx0YmVmb3JlRGVsZXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0dW5TYXZlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZT86IE9EYXRhVjRDb250ZXh0W107XG5cdGxvY2tlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZT86IERyYWZ0U2libGluZ1BhaXJbXTtcblx0c2lsZW50TW9kZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0SW5mbyA9IHtcblx0aW5mb1R4dD86IHN0cmluZztcblx0b3B0aW9uVHh0Pzogc3RyaW5nO1xuXHRvcHRpb25XaXRob3V0VHh0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLFxuXHRzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRjb250ZXh0c1RvUmVtb3ZlOiBPRGF0YVY0Q29udGV4dFtdXG4pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0Y29uc3QgcmV0U2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0Y29udGV4dHNUb1JlbW92ZS5mb3JFYWNoKChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGlkeCA9IHJldFNlbGVjdGVkQ29udGV4dHMuaW5kZXhPZihjb250ZXh0KTtcblx0XHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdFx0cmV0U2VsZWN0ZWRDb250ZXh0cy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eSh0eXBlLCBbXSk7XG5cblx0cmV0dXJuIHJldFNlbGVjdGVkQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbjogRGVsZXRlT3B0aW9uKTogdm9pZCB7XG5cdGxldCBzZWxlY3RlZENvbnRleHRzID0gKGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSBhcyBPRGF0YVY0Q29udGV4dFtdKSB8fCBbXTtcblxuXHRpZiAob3B0aW9uLnR5cGUgPT09IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzKSB7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykgfHwgW11cblx0XHQpO1xuXG5cdFx0Y29uc3QgZHJhZnRTaWJsaW5nUGFpcnMgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlKSB8fCBbXTtcblx0XHRjb25zdCBkcmFmdHMgPSBkcmFmdFNpYmxpbmdQYWlycy5tYXAoKGNvbnRleHRQYWlyOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29udGV4dFBhaXIuZHJhZnQ7XG5cdFx0fSk7XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHREZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGRyYWZ0c1xuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgY29udGV4dHNUb1JlbW92ZSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9wdGlvbi50eXBlKSB8fCBbXTtcblx0XHRzZWxlY3RlZENvbnRleHRzID0gZ2V0VXBkYXRlZFNlbGVjdGlvbnMoaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbi50eXBlLCBzZWxlY3RlZENvbnRleHRzLCBjb250ZXh0c1RvUmVtb3ZlKTtcblx0fVxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJEZWxldGVQcm9jZXNzKFxuXHRwYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0Y29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGxhc3REZWxldGVkUm93SW5kZXg6IG51bWJlclxuKTogdm9pZCB7XG5cdGNvbnN0IHsgaW50ZXJuYWxNb2RlbENvbnRleHQsIGVudGl0eVNldE5hbWUgfSA9IHBhcmFtZXRlcnM7XG5cdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRlbGV0ZUVuYWJsZWRcIikgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBpZiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4gaXQgaXMgZGVsZXRlZC4gU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSBzZWxlY3RlZCBjb250ZXh0cy5cblx0XHRcdFx0aWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbihpbnRlcm5hbE1vZGVsQ29udGV4dCwgb3B0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpcyBub3Qgc2VsZWN0ZWQsIHRoZW4gdGhlIGRlbGV0ZSBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZC5cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFwiZGVsZXRlRW5hYmxlZFwiLFxuXHRcdFx0b3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFvcHRpb24uc2VsZWN0ZWQpXG5cdFx0KTtcblx0fVxuXG5cdGlmIChwYXJhbWV0ZXJzLnNpbGVudE1vZGUgIT09IHRydWUpIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9ERUxFVEVfVE9BU1RfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9QTFVSQUxcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhlIE11bHRpVmFsdWVGaWVsZCBkb2VzIG5vdCBuZWVkIHJlc2V0dGluZyBvZiBmb2N1cyBsaWtlIHRoZSB0YWJsZSwgd2l0aCB0aGUgcmVzZXR0aW5nIHdlIGdldCBjb25zb2xlIGVycm9ycyB3ZSBhdm9pZCB0cm91Z2ggdGhpcyBjaGVja1xuXHRpZiAocGFyYW1ldGVycy5wYXJlbnRDb250cm9sICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpICE9PSBcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpIHtcblx0XHRkZWxldGVIZWxwZXIuc2V0Rm9jdXNBZnRlckRlbGV0ZShwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgYXMgVGFibGUsIGNvbnRleHRzLmxlbmd0aCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Rm9jdXNBZnRlckRlbGV0ZSh0YWJsZTogVGFibGUsIGRlbGV0ZWRSb3dzQ291bnQ6IG51bWJlciwgbGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHRhYmxlUm93c0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZz8uKCk/LmdldENvdW50KCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgPSAodGFibGVSb3dzQ291bnQgPz8gMCkgKyBkZWxldGVkUm93c0NvdW50O1xuXHRsZXQgbmV4dEZvY3VzUm93SW5kZXg7XG5cblx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggIT09IC0xICYmIHRhYmxlUm93c0NvdW50ICE9PSB1bmRlZmluZWQgJiYgdGFibGVSb3dzQ291bnQgPiAwKSB7XG5cdFx0Ly9JZiB0aGUgbGFzdCByb3cgaXMgZGVsZXRlZCwgbW92ZSB0aGUgZm9jdXMgdG8gcHJldmlvdXMgcm93IHRvIGl0XG5cdFx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggPT09IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgLSAxKSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IHRhYmxlUm93c0NvdW50IC0gMTtcblx0XHRcdC8vRm9yIHRoZSBub3JtYWwgc2NlbmFyaW8sIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHJvd1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IGxhc3REZWxldGVkUm93SW5kZXggLSBkZWxldGVkUm93c0NvdW50ICsgMTtcblx0XHR9XG5cdFx0YXdhaXQgdGFibGUuZm9jdXNSb3cobmV4dEZvY3VzUm93SW5kZXgsIGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgemVybyByb3dzIG9yIGRlZmF1bHQgY2FzZSwgbW92ZSBmb2N1cyB0byB0YWJsZVxuXHRcdHRhYmxlLmZvY3VzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbbG9ja2VkVXNlcl0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGxvY2tlZFVzZXJcblx0XHRdKTtcblx0fSBlbHNlIGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIiwgW1xuXHRcdFx0bG9ja2VkQ29udGV4dHMubGVuZ3RoLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXG5cdFx0XSk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mRHJhZnRzOiBudW1iZXIsIHRvdGFsRGVsZXRhYmxlOiBudW1iZXIpOiBzdHJpbmcge1xuXHRsZXQgcmV0VHh0ID0gXCJcIjtcblxuXHRpZiAodG90YWxEZWxldGFibGUgPT09IG51bWJlck9mRHJhZnRzKSB7XG5cdFx0aWYgKG51bWJlck9mRHJhZnRzID09PSAxKSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSB1blNhdmVkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0bGV0IHNMYXN0Q2hhbmdlZEJ5VXNlciA9IFwiXCI7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdHNMYXN0Q2hhbmdlZEJ5VXNlciA9IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiXSB8fCBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyXCJdIHx8IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gc0xhc3RDaGFuZ2VkQnlVc2VyO1xufVxuXG5mdW5jdGlvbiBnZXRVbnNhdmVkQ29udGV4dHNUZXh0KFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IG51bWJlcixcblx0dW5TYXZlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyXG4pOiBEZWxldGVUZXh0SW5mbyB7XG5cdGxldCBpbmZvVHh0ID0gXCJcIixcblx0XHRvcHRpb25UeHQgPSBcIlwiLFxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSBmYWxzZTtcblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiB1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdCBhcmUgc2VsZWN0ZWRcblx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBbbGFzdENoYW5nZWRCeVVzZXJdKTtcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvL29ubHkgbXVsdGlwbGUgdW5zYXZlZCBvYmplY3RzIGFyZSBzZWxlY3RlZFxuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU19NVUxUSVBMRV9PQkpFQ1RTXCIpO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBhbGwgZGVsZXRhYmxlIGFyZSB1bnNhdmVkIGJ5IG90aGVyc1xuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9BTkRfRkVXX09CSkVDVFNfTE9DS0VEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIpO1xuXHRcdH1cblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0b3RhbERlbGV0YWJsZSA+IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGRlbGV0YWJsZSBpbmNsdWRlIHVuc2F2ZWQgYW5kIG90aGVyIHR5cGVzLlxuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0b3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19VTlNBVkVEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfUExVUkFMXCIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0dG90YWxOdW1EZWxldGFibGVDb250ZXh0czogbnVtYmVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBUZXh0IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGVudGl0eVNldE5hbWUsIGxvY2tlZENvbnRleHRzID0gW10sIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBbXSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID1cblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMhIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChcblx0XHRub25EZWxldGFibGVDb250ZXh0cyA+IDAgJiZcblx0XHQodG90YWxOdW1EZWxldGFibGVDb250ZXh0cyA9PT0gMCB8fCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA9PT0gdG90YWxOdW1EZWxldGFibGVDb250ZXh0cylcblx0KSB7XG5cdFx0Ly8gMS4gTm9uZSBvZiB0aGUgY2NvbnRleHRzIGFyZSBkZWxldGFibGVcblx0XHQvLyAyLiBPbmx5IGRyYWZ0cyBvZiBub24gZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0LlxuXHRcdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBMb2NrZWQgY29udGV4dHMgZXhpc3Rcblx0XHRcdGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX0FMTF9SRU1BSU5JTkdfTk9OX0RFTEVUQUJMRV9TSU5HVUxBUlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1BMVVJBTFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBzaW5nbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9BTkRfT05FX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3QgbXVsdGlwbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX01VTFRJUExFX0FORF9BTExfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIHNpbmdsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPiAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgbXVsdGlwbGVcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W25vbkRlbGV0YWJsZUNvbnRleHRzLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0ID8gbmV3IFRleHQoeyB0ZXh0OiByZXRUeHQgfSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlICE9PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5mdW5jdGlvbiBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zOiBEZWxldGVPcHRpb25bXSk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRyZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgb3B0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGl0ZW1zOiBDb250cm9sW10sXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdXG4pOiB2b2lkIHtcblx0bGV0IHsgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIH0gPVxuXHRcdG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRsZXQgbG9ja2VkQ29udGV4dHNUeHQgPSBcIlwiO1xuXG5cdC8vIGRyYWZ0cyB3aXRoIGFjdGl2ZVxuXHRpZiAoZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmZvckVhY2goKGRlbGV0YWJsZURyYWZ0SW5mbzogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0Ly8gSW4gZWl0aGVyIGNhc2VzLCBpZiBhbiBvd24gZHJhZnQgaXMgbG9ja2VkIG9yIG5vdCB0aGUgZHJhZnQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkIGJlZm9yZSBkZWxldGluZyBhY3RpdmUgcmVjb3JkLlxuXHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUucHVzaChkZWxldGFibGVEcmFmdEluZm8uZHJhZnQpO1xuXHRcdFx0dkNvbnRleHRzLnB1c2goZGVsZXRhYmxlRHJhZnRJbmZvLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQpO1xuXHRcdH0pO1xuXHRcdGlmIChkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaXRlbXMgbG9ja2VkIG1zZ1xuXHRpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGxvY2tlZENvbnRleHRzVHh0ID0gZGVsZXRlSGVscGVyLmdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMpIHx8IFwiXCI7XG5cdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IGxvY2tlZENvbnRleHRzVHh0IH0pKTtcblx0fVxuXG5cdC8vIG5vbiBkZWxldGFibGUgbXNnXG5cdGNvbnN0IG5vbkRlbGV0YWJsZUV4aXN0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAhPSB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVUZXh0Q3RybCA9IG5vbkRlbGV0YWJsZUV4aXN0cyAmJiBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRpZiAobm9uRGVsZXRhYmxlVGV4dEN0cmwpIHtcblx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHRDdHJsKTtcblx0fVxuXG5cdC8vIG9wdGlvbjogdW5zYXZlZCBjaGFuZ2VzIGJ5IG90aGVyc1xuXHRpZiAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCB1bnNhdmVkQ2hhbmdlc1R4dHMgPVxuXHRcdFx0ZGVsZXRlSGVscGVyLmdldFVuc2F2ZWRDb250ZXh0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSB8fCB7fTtcblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCB9KSk7XG5cdFx0fVxuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0IHx8IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25XaXRob3V0VHh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy51blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiB1blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb3B0aW9uOiBkcmFmdHMgd2l0aCBhY3RpdmUgbm90IGRlbGV0YWJsZVxuXHRpZiAoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChyZXNvdXJjZU1vZGVsLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCwgdG90YWxEZWxldGFibGUpIHx8IFwiXCI7XG5cdFx0aWYgKG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdGNvbnRleHRzOiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0XHR0ZXh0OiBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogdG90YWxEZWxldGFibGUgPiAwID8gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuQ0hFQ0tCT1ggOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zOiBEZWxldGVPcHRpb25bXSwgaXRlbXM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHQvLyBTaW5nbGUgb3B0aW9uIGRvZXNuJ3QgbmVlZCBjaGVja0JveFxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbMF07XG5cdFx0aWYgKG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcblx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRpdGVtcy5wdXNoKHRleHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBNdWx0aXBsZSBPcHRpb25zXG5cblx0XHQvLyBUZXh0c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJ0ZXh0XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG5cdFx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRcdGl0ZW1zLnB1c2godGV4dCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQ2hlY2tCb3hzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcImNoZWNrQm94XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0aXRlbXMucHVzaChcblx0XHRcdFx0XHRuZXcgQ2hlY2tCb3goe1xuXHRcdFx0XHRcdFx0dGV4dDogb3B0aW9uLnRleHQsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHNlbGVjdDogZnVuY3Rpb24gKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tCb3ggPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gY2hlY2tCb3guZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0XHRcdFx0b3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgb3JpZ2luYWwgcmVjb3JkIHNlbGVjdGVkIG9uIHRoZSBVSS5cbiAqXG4gKiBJbiB0aGUgY2FzZSB0aGUgY29udGV4dCB0byBkZWxldGUgaXMgYW4gYWN0aXZlIHJlY29yZCBidXQgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgYSBkcmFmdCByZWNvcmQuXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVsZXRlIHBhcmFtZXRlcnMgYW5kIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRUb0RlbGV0ZSBPRGF0YVY0Q29udGV4dCB0byBjaGVjay5cbiAqIEByZXR1cm5zIE9EYXRhVjRDb250ZXh0IGZvciBkZWxldGUuXG4gKi9cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCBjb250ZXh0VG9EZWxldGU6IE9EYXRhVjRDb250ZXh0KTogT0RhdGFWNENvbnRleHQge1xuXHRjb25zdCB7IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCByZXQgPSBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKChkcmFmdFNpYmxpbmdQYWlyKSA9PiBkcmFmdFNpYmxpbmdQYWlyLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQgPT09IGNvbnRleHRUb0RlbGV0ZSk7XG5cdHJldHVybiByZXQ/LmRyYWZ0ID8gcmV0LmRyYWZ0IDogY29udGV4dFRvRGVsZXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcG9zc2libGUgb3B0aW9ucyBmb3IgZGVsZXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIERlbGV0ZSBwYXJhbWV0ZXJzIGFuZCBpbmZvcm1hdGlvbiBvZiBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBkaXJlY3REZWxldGFibGVDb250ZXh0cyBDb250ZXh0cyB0aGF0IGNhbiBiZSBkZWxldGFibGUgZGlyZWN0bHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbC5cbiAqIEByZXR1cm5zIE9wdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgZm9yIHNlbGVjdGVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdGRpcmVjdERlbGV0YWJsZUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBEZWxldGVPcHRpb25bXSB7XG5cdGxldCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cyB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHsgZW50aXR5U2V0TmFtZSwgcGFyZW50Q29udHJvbCwgZGVzY3JpcHRpb24gfSA9IG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRjb25zdCB0b3RhbERlbGV0YWJsZSA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCArIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgdW5TYXZlZENvbnRleHRzLmxlbmd0aDtcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxEZWxldGFibGUgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGNvbnN0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIHNpbmdsZSBkZWxldGFibGUgY29udGV4dFxuXHRcdGNvbnN0IG9UYWJsZSA9IHBhcmVudENvbnRyb2wgYXMgVGFibGU7XG5cdFx0Y29uc3Qgc0tleSA9IG9UYWJsZSAmJiAoKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZyk7XG5cdFx0bGV0IHR4dDtcblx0XHRpZiAoc0tleSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb24gJiYgKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0bGV0IHNpbmdsZUNvbnRleHQgPSBkaXJlY3REZWxldGFibGVDb250ZXh0c1swXTtcblx0XHRcdGxldCBvTGluZUNvbnRleHREYXRhID0gc2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdGlmICghb0xpbmVDb250ZXh0RGF0YSB8fCBPYmplY3Qua2V5cyhvTGluZUNvbnRleHREYXRhKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvcmlnaW5hbCBzZWxlY3RlZCByZWNvcmQgaXMgZHJhZnQoaW4gVUkpLiBUaGUgQWN0aXZlIHJlY29yZCBuZWVkcyB0byBiZSBkZWxldGVkKGRpcmVjdERlbGV0YWJsZUNvbnRleHRzIGhhcyBhY3RpdmUgcmVjb3JkKSwgYnV0IGRhdGEgaXMgbm90IHJlcXVlc3RlZC4gV2UgZ2V0IGRhdGEgZnJvbSB0aGUgZHJhZnQuXG5cdFx0XHRcdHNpbmdsZUNvbnRleHQgPSBfZ2V0T3JpZ2luYWxTZWxlY3RlZFJlY29yZChtUGFyYW1ldGVycywgc2luZ2xlQ29udGV4dCk7XG5cdFx0XHRcdG9MaW5lQ29udGV4dERhdGEgPSBzaW5nbGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc0tleVZhbHVlID0gc0tleSA/IG9MaW5lQ29udGV4dERhdGFbc0tleV0gOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBzRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvblBhdGggJiYgb0xpbmVDb250ZXh0RGF0YVtkZXNjcmlwdGlvblBhdGhdO1xuXHRcdFx0aWYgKHNLZXlWYWx1ZSkge1xuXHRcdFx0XHRpZiAoc0Rlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uICYmIHNLZXkgIT09IChkZXNjcmlwdGlvbiBhcyB7IHBhdGg/OiBzdHJpbmcgfSkucGF0aCkge1xuXHRcdFx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPXCIsXG5cdFx0XHRcdFx0XHRbc0tleVZhbHVlLCBzRGVzY3JpcHRpb25dLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9PTkxZXCIsIFtzS2V5VmFsdWVdLCBlbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0fVxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHRleHQ6IHR4dCxcblx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggIT09IHRvdGFsRGVsZXRhYmxlICYmXG5cdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gMCAmJlxuXHRcdChkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggPiAwIHx8ICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCAmJiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApKVxuXHQpIHtcblx0XHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID4gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoICYmIG5vbkRlbGV0YWJsZUNvbnRleHRzICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgZXhpc3RzIHdpdGggcHVyZSBkZWxldGFibGUgb25lc1xuXHRcdFx0bGV0IGRlbGV0YWJsZU9wdGlvblR4dCA9IFwiXCI7XG5cdFx0XHRpZiAodG90YWxEZWxldGFibGUgPT09IDEpIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUl9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0YWJsZU9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0b3B0aW9ucy51bnNoaWZ0KHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogZGVsZXRhYmxlT3B0aW9uVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG9ubHkgZGVsZXRhYmxlXG5cdFx0XHRjb25zdCBhbGxEZWxldGFibGVUeHQgPVxuXHRcdFx0XHR0b3RhbERlbGV0YWJsZSA9PT0gMVxuXHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpXG5cdFx0XHRcdFx0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1BMVVJBTFwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiBkaXJlY3REZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0dGV4dDogYWxsRGVsZXRhYmxlVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZURyYWZ0c0JlZm9yZUFjdGl2ZXNBbmRHZXRFcnJvcnMoXG5cdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRlbmFibGVTdHJpY3RIYW5kbGluZzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duW10+IHtcblx0Y29uc3QgZHJhZnRFcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQsIGVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0IHdpdGggcGF0aCA6ICR7Y29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdGRyYWZ0RXJyb3JzLnB1c2goZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KTtcblx0cmV0dXJuIGRyYWZ0RXJyb3JzO1xufVxuXG4vKipcbiAqIEluIGNhc2Ugb2YgYSB0cmVlIHRhYmxlLCB3ZSBzaGFsbCBub3QgZGVsZXRlIGEgY29udGV4dCBpZiBvbmUgaWYgaXRzIGFuY2VzdG9ycyBpcyBhbHNvIHRvIGJlIGRlbGV0ZWQuXG4gKiBUaGlzIGZ1bmN0aW9ucyBmaWx0ZXJzIG91dCBzdWNoIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IHRlbXBDb250ZXh0czogKE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKVtdID0gWy4uLmNvbnRleHRzXTtcblx0Ly8gRmlsdGVyIG91dCBjb250ZXh0cyB3aG9zZSBhbmNlc3RvciBpcyBhbHNvIGRlbGV0ZWQsIGFzIHRoZXkgd2lsbCBiZSBkZWxldGVkIHdpdGggdGhlaXIgYW5jZXN0b3Jcblx0dGVtcENvbnRleHRzLmZvckVhY2goKHBhcmVudENvbnRleHQsIHBhcmVudEluZGV4KSA9PiB7XG5cdFx0aWYgKHBhcmVudENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGNoaWxkSW5kZXggPSBwYXJlbnRJbmRleCArIDE7IGNoaWxkSW5kZXggPCB0ZW1wQ29udGV4dHMubGVuZ3RoOyBjaGlsZEluZGV4KyspIHtcblx0XHRcdGNvbnN0IGNoaWxkQ29udGV4dCA9IHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XTtcblx0XHRcdGlmIChjaGlsZENvbnRleHQgJiYgcGFyZW50Q29udGV4dC5pc0FuY2VzdG9yT2YoY2hpbGRDb250ZXh0KSkge1xuXHRcdFx0XHR0ZW1wQ29udGV4dHNbY2hpbGRJbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdGVtcENvbnRleHRzLmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVDb25maXJtSGFuZGxlcihcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRkcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGJpbmRpbmdUeXBlPzogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgY29udGV4dHMgPSBkZWxldGVIZWxwZXIuZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChbXSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgbGFzdERlbGV0ZWRSb3dJbmRleCA9IGNvbnRleHRzW2NvbnRleHRzLmxlbmd0aCAtIDFdLmdldEluZGV4KCkgPz8gLTE7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zKTtcblxuXHRcdGNvbnN0IHsgYmVmb3JlRGVsZXRlQ2FsbEJhY2ssIHBhcmVudENvbnRyb2wgfSA9IG1QYXJhbWV0ZXJzO1xuXHRcdGlmIChiZWZvcmVEZWxldGVDYWxsQmFjaykge1xuXHRcdFx0YXdhaXQgYmVmb3JlRGVsZXRlQ2FsbEJhY2soeyBjb250ZXh0czogY29udGV4dHMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBjb250ZXh0cy5sZW5ndGggPT09IDEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0RXJyb3JzOiB1bmtub3duW10gPSBhd2FpdCBkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzKFxuXHRcdFx0XHRcdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRlbmFibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGxldCBjb250ZXh0c1RvRGVsZXRlID0gY29udGV4dHM7XG5cdFx0XHRcdGlmIChiaW5kaW5nVHlwZSA9PT0gXCJUcmVlXCIpIHtcblx0XHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlID0gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRleHQgdG8gZGVsZXRlIGlzIGEgZHJhZnQgKGkuZS4gYWN1dGFsbHkgd2UganVzdCB3bmF0IHRvIGRpc2NhcmQpLCB3ZSBzaG91bGQgdXNlIGRyYWZ0LmRlbGV0ZURyYWZ0IGluIG9yZGVyIHRvIHVzZSBhIGRpc2NhcmQgYWN0aW9uIGlmIGRlZmluZWRcblx0XHRcdFx0XHRcdC8vIEhvd2V2ZXIsIGRyYWZ0LmRlbGV0ZURyYWZ0IHVzZXMgZ2V0UHJvcGVydHksIHdoaWNoIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjb250ZXh0IGlzIG5vdCByZWFkIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHQvLyBUaGlzIGNhbiBiZSB0aGUgY2FzZSwgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhpcyBjb250ZXh0IHZpYSB0aGUgc2libGluZyAoZS5nLiB3aGVuIGEgZHJhZnQgZXhpc3RlZCBhbmQgd2Ugd2FudCB0byBkZWxldGUgYm90aCAtIGluIHRoYXQgY2FzZVxuXHRcdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhbHJlYWR5IGRpc2NhcmRlZCB0aGUgZHJhZnQgYWJvdmUsIGFuZCBub3cgbmVlZCB0byBkZWxldGUgdGhlIGFjdGl2ZSBvbmUpLiBUbyBpZGVudGlmeSB0aGlzIHNpdHVhdGlvbiwgd2UgbXVzdCBub3QgdXNlIGdldFByb3BlcnR5XG5cdFx0XHRcdFx0XHQvLyAoYXMgdGhlIGNvbnRleHQgaXMgbm90IHJlYWQpLCBidXQgY2hlY2sgdGhlIHNhbWUgaW4gdGhlIG1QYXJhbWV0ZXJzLlxuXHRcdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhlIGNvbnRleHQuIEJ1dCB3ZSBzaG91bGQgbm90IHVzZSBjb250ZXh0LmRlbGV0ZSAoYWxzbyB1cGRhdGluZyBiaW5kaW5ncywgd2hpY2ggZmFpbHMgaW4gdGhlIGRlc2NyaWJlZCBzaXR1YXRpb24pLFxuXHRcdFx0XHRcdFx0Ly8gYnV0IG1vZGVsLmRlbGV0ZSAob25seSBzZW5kaW5nIHRoZSBkZWxldGUpLiBJbiBvdGhlciBjYXNlcyAoZS5nLiBub24tZHJhZnQpLCB0aGlzIGlzIGFsc28gc3VmZmljaWVudCwgYXMgd2UgYW55d2F5IHRha2UgY2FyZSBvZiBzZXR0aW5nXG5cdFx0XHRcdFx0XHQvLyBjb3JyZWN0IGJpZG5pbmdzIHdpdGggdGhlIG5hdmlnYXRpb24gdHJpZ2dlcmVkIGJ5IHRoZSBkZWxldGlvbi5cblx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb24gYW5hbHl0aWNhbCB0YWJsZSwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgY29udGV4dC5kZWxldGUsIGFzIGl0IHdpbGwgZmFpbC5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IWRyYWZ0RW5hYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUpID0+IGRyYWZ0V2l0aERlbGV0YWJsZUFjdGl2ZS5zaWJsaW5nSW5mby50YXJnZXRDb250ZXh0ID09PSBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdCkgfHxcblx0XHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPT09IFwiQW5hbHl0aWNhbFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0TW9kZWwoKS5kZWxldGUoY29udGV4dC5nZXRDYW5vbmljYWxQYXRoKCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRyYWZ0LmRlbGV0ZURyYWZ0KGNvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQsIGVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRkZWxldGVIZWxwZXIuYWZ0ZXJEZWxldGVQcm9jZXNzKG1QYXJhbWV0ZXJzLCBvcHRpb25zLCBjb250ZXh0cywgcmVzb3VyY2VNb2RlbCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdFx0XHRcdGlmIChkcmFmdEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgRXJyb3IoYEZFIDogY29yZSA6IERlbGV0ZUhlbHBlciA6IEVycm9ycyBvbiBkcmFmdCBkZWxldGUgOiAke2RyYWZ0RXJyb3JzfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGRlbGV0ZUhlbHBlci5hZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UocmVzb3VyY2VNb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBjb250cm9sOiBwYXJlbnRDb250cm9sIH0pO1xuXHRcdFx0XHQvLyByZS10aHJvdyBlcnJvciB0byBlbmZvcmNlIHJlamVjdGluZyB0aGUgZ2VuZXJhbCBwcm9taXNlXG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0Ly8gcmUtdGhyb3cgZXJyb3IgdG8gZW5mb3JjZSByZWplY3RpbmcgdGhlIGdlbmVyYWwgcHJvbWlzZVxuXHRcdHRocm93IG9FcnJvcjtcblx0fVxufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgZGVsZXRlIGZhaWx1cmUgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfVEVYVFwiKSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfREVUQUlMU19URVhUXCIpLFxuXHRcdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFX0NIQU5HRVNFVF9GQUlMVVJFX1NJTkdMRV9FUlJPUl9URVhUXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBDb250ZXh0SW5mbyB1c2luZyBpdHMgc2libGluZyBjb250ZXh0LCBpZiBuZWVkZWQuXG4gKiBSZXF1ZXN0cyB0aGUgc2libGluZyBjb250ZXh0IGFuZCB1cGRhdGVzIHRoZSBzaWJsaW5nRGVsZXRhYmxlIHByb3BlcnR5LlxuICogQWxzbyBtYW5hZ2VzIHRoZSBjYXNlIHdoZXJlIHRoZSBtYWluIGNvbnRleHQgaXMgYWN0aXZlIGJ1dCBoYXMgYSBkcmFmdCBzaWJsaW5nICgtLT4gc3dhcCBiZXR3ZWVuIG1haW4gYW5kIHNpYmxpbmcgY29udGV4dCkuXG4gKiBAcGFyYW0gaW5mb1xuICogQHBhcmFtIGRlbGV0YWJsZVBhdGhcbiAqIEBwYXJhbSBzdGF0aWNEZWxldGFibGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm86IENvbnRleHRJbmZvLCBkZWxldGFibGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRpY0RlbGV0YWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdGlmICghaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSkge1xuXHRcdFx0Ly8gQ2FzZSAxOiB0aGUgY29udGV4dCBpcyBhIGRyYWZ0LCB3ZSBuZWVkIHRvIGdldCBpdHMgYWN0aXZlIHNpYmxpbmdcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvcm1hdGlvbiA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oaW5mby5jb250ZXh0LCBpbmZvLmNvbnRleHQpO1xuXHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHNpYmxpbmdJbmZvcm1hdGlvbjtcblx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGhcblx0XHRcdFx0PyBhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQ/LnJlcXVlc3RQcm9wZXJ0eShkZWxldGFibGVQYXRoKVxuXHRcdFx0XHQ6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHR9IGVsc2UgaWYgKGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCkge1xuXHRcdFx0Ly8gQ2FzZSAyOiB0aGUgY29udGV4dCBpcyBhY3RpdmUsIHdlIG5lZWQgdG8gZ2V0IGl0cyBkcmFmdCBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGlmIChzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBkcmFmdCBzaWJsaW5nIGZyb20gdGhlIGFjdGl2ZSBpbnN0YW5jZSAtLT4gZmFsbGJhY2sgdG8gY2FzZSAxXG5cdFx0XHRcdC8vIGJ5IGV4Y2hhbmdpbmcgdGhlIGNvbnRleHQgd2l0aCB0aGUgc2libGluZyBjb250ZXh0IGluIHRoZSBpbmZvIG9iamVjdC5cblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvRmV0Y2ggPSBbXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0FjdGl2ZUVudGl0eVwiXTtcblx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9GZXRjaC5wdXNoKGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShwcm9wZXJ0aWVzVG9GZXRjaCk7XG5cdFx0XHRcdGluZm8ubG9ja2VkID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaGFzRHJhZnQgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5pc0FjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0FjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGNvbnRleHQgd2l0aCBzaWJsaW5nIGNvbnRleHRcblx0XHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHsgdGFyZ2V0Q29udGV4dDogaW5mby5jb250ZXh0LCBwYXRoTWFwcGluZzogW10gfTtcblx0XHRcdFx0aW5mby5jb250ZXh0ID0gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGRlbGV0YWJsZSB3aXRoIHNpYmxpbmcgZGVsZXRhYmxlXG5cdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGluZm8uZGVsZXRhYmxlO1xuXHRcdFx0XHRpbmZvLmRlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGggPyBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKF9lKSB7XG5cdFx0Ly8gRG8gbm90aGluZ1xuXHR9XG59XG5cbi8qKlxuICogQ29sbGVjdCBjb250ZXh0IGluZm9ybWF0aW9uIChpc0RyYWZ0Um9vdCwgaXNEcmFmdE5vZGUsIEhhc0RyYWZ0RW50aXR5LCBJc0FjdGl2ZUVudGl0eSwgSGFzQWN0aXZlRW50aXR5LCBpc0xvY2tlZCwgaXNJbmFjdGl2ZSkuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVGhlIGNvbnRleHQgaW5mbyBwcm9taXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0SW5mb3MoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPENvbnRleHRJbmZvPiB7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gISFjb250ZXh0Py5nZXRPYmplY3QoKVtcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdGNvbnN0IGlzSW5hY3RpdmUgPSBjb250ZXh0Py5pc0luYWN0aXZlKCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID1cblx0XHRpc0luYWN0aXZlIHx8ICghaXNJbmFjdGl2ZSAmJiBpc1RyYW5zaWVudClcblx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHQ6IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdGNvbnN0IGRlbGV0YWJsZVBhdGggPSBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlLyRQYXRoXCIpO1xuXHRjb25zdCBzdGF0aWNEZWxldGFibGUgPSAhZGVsZXRhYmxlUGF0aCAmJiBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlXCIpICE9PSBmYWxzZTtcblx0Y29uc3QgZGVsZXRhYmxlID0gZGVsZXRhYmxlUGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cblx0Y29uc3QgaW5mbzogQ29udGV4dEluZm8gPSB7XG5cdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRpc0RyYWZ0Um9vdDogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSxcblx0XHRpc0RyYWZ0Tm9kZTogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiKSxcblx0XHRpc0FjdGl2ZTogdHJ1ZSxcblx0XHRoYXNBY3RpdmU6IGZhbHNlLFxuXHRcdGhhc0RyYWZ0OiBmYWxzZSxcblx0XHRsb2NrZWQ6IGZhbHNlLFxuXHRcdC8vIGZvciBhbiBlbXB0eVJvdyAoaW5hY3RpdmUgY29udGV4dCkgaXQncyBhbHdheXMgZGVsZXRhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQga2VwdCBpbmFjdGl2ZS4uXG5cdFx0ZGVsZXRhYmxlOiBkZWxldGFibGUsXG5cdFx0c2libGluZ0luZm86IHVuZGVmaW5lZCxcblx0XHRzaWJsaW5nRGVsZXRhYmxlOiBmYWxzZSxcblx0XHRpc0luYWN0aXZlQ29udGV4dDogISFjb250ZXh0LmlzSW5hY3RpdmUoKVxuXHR9O1xuXHRpZiAoIWNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGluZm8uaXNEcmFmdFJvb3QpIHtcblx0XHRpbmZvLmxvY2tlZCA9ICEhY29udGV4dC5nZXRPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKT8uSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdGluZm8uaGFzRHJhZnQgPSBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIik7XG5cdFx0aW5mby5pc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRpbmZvLmhhc0FjdGl2ZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0YXdhaXQgdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm8sIGRlbGV0YWJsZVBhdGgsIHN0YXRpY0RlbGV0YWJsZSk7XG5cdH1cblx0cmV0dXJuIGluZm87XG59XG5cbi8vIFRhYmxlIFJ1bnRpbWUgSGVscGVyczpcblxuLyogcmVmcmVzaGVzIGRhdGEgaW4gaW50ZXJuYWwgbW9kZWwgcmVsZXZhbnQgZm9yIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvbiBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgY29udGV4dHNcbnJlbGV2YW50IGRhdGEgYXJlOiBkZWxldGFibGVDb250ZXh0cywgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdW5TYXZlZENvbnRleHRzLCBkZWxldGVFbmFibGVkXG5ub3QgcmVsZXZhbnQ6IGxvY2tlZENvbnRleHRzXG4qL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0c2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGNvbnRleHRJbmZvcyA9IGF3YWl0IFByb21pc2UuYWxsKHNlbGVjdGVkQ29udGV4dHMubWFwKGdldENvbnRleHRJbmZvcykpO1xuXG5cdGNvbnN0IGJ1Y2tldHMgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEluIHRoYXQgY2FzZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbnQgZm9yIHRoZSBhY3RpdmUgKGkuZS4gdGhlIHNpYmxpbmcpLFxuXHRcdFx0Ly8gd2hpbGUgaW4gZHJhZnQgbm9kZSwgdGhlIGRlbGV0ZSByZXF1ZXN0IG5lZWRzIHRvIGJlIHNlbmQgZm9yIHRoZSBkcmFmdCBpdHNlbGZcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSAmJiBpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHQvLyBvbmx5IGZvciBkcmFmdCByb290OiBGb3IgZHJhZnQgbm9kZSwgd2Ugb25seSByZWx5IG9uIGluZm9ybWF0aW9uIGluIHRoZSBkcmFmdCBpdHNlbGYgKG5vdCBpdHMgYWN0aXZlIHNpYmxpbmcpXG5cdFx0XHQvLyBhcHBsaWNhdGlvbiBoYXMgdG8gdGFrZSBjYXJlIHRvIHNldCB0aGlzIGNvcnJlY3RseSAoaW4gY2FzZSBhY3RpdmUgc2libGluZyBtdXN0IG5vdCBiZSBkZWxldGFibGUsIGFjdGl2YXRpb25cblx0XHRcdC8vIG9mIGRyYWZ0IHdpdGggZGVsZXRlZCBub2RlIHdvdWxkIGFsc28gZGVsdGUgYWN0aXZlIHNpYmxpbmcgPT4gZGVsZXRpb24gb2YgZHJhZnQgbm9kZSB0byBiZSBhdm9pZGVkKVxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmICFpbmZvLnNpYmxpbmdEZWxldGFibGVcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJsb2NrZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiBpbmZvLmxvY2tlZFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcInVuU2F2ZWRDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCAmJiAhaW5mby5sb2NrZWRcblx0XHRcdClcblx0XHR9LFxuXHRcdC8vIG5vbi1kcmFmdC9zdGlja3kgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGFjdGl2ZSBkcmFmdCByb290IHdpdGhvdXQgYW55IGRyYWZ0IGFuZCBkZWxldGFibGVcblx0XHQvLyBjcmVhdGVkIGRyYWZ0IHJvb3QgKHJlZ2FyZGxlc3Mgb2YgZGVsZXRhYmxlKVxuXHRcdC8vIGRyYWZ0IG5vZGUgb25seSBhY2NvcmRpbmcgdG8gaXRzIGFubm90YXRpb25cblx0XHR7XG5cdFx0XHRrZXk6IFwiZGVsZXRhYmxlQ29udGV4dHNcIixcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT5cblx0XHRcdFx0XHRpbmZvLmlzSW5hY3RpdmVDb250ZXh0IHx8XG5cdFx0XHRcdFx0KCFpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmIGluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzRHJhZnQgJiYgaW5mby5kZWxldGFibGUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgIWluZm8uaGFzQWN0aXZlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnROb2RlICYmIGluZm8uZGVsZXRhYmxlKVxuXHRcdFx0KVxuXHRcdH1cblx0XTtcblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Zm9yIChjb25zdCB7IGtleSwgdmFsdWUgfSBvZiBidWNrZXRzKSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRjb250ZXh0UGF0aCArIGtleSxcblx0XHRcdC8vIEN1cnJlbnRseSwgYnVja2V0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSAoY29udGFpbmluZyBhbHNvIHNpYmxpbmcgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHVzZWRcblx0XHRcdC8vIGluIGNhc2Ugb2YgZGVsZXRpb24pLiBQb3NzaWJsZSBpbXByb3ZlbWVudDogUmVhZCBzaWJsaW5nIGluZm9ybWF0aW9uIG9ubHkgd2hlbiBuZWVkZWQsIGFuZCBidWlsZCBhbGwgYnVja2V0cyB3aXRoIHNhbWVcblx0XHRcdC8vIHN0cnVjdHVyZS4gSG93ZXZlciwgaW4gdGhhdCBjYXNlIHNpYmxpbmdJbmZvcm1hdGlvbiBtaWdodCBuZWVkIHRvIGJlIHJlYWQgdHdpY2UgKGlmIGFscmVhZHkgbmVlZGVkIGZvciBidXR0b24gZW5hYmxlbWVudCksXG5cdFx0XHQvLyB0aHVzIGEgYnVmZmVyIHByb2JhYmx5IHdvdWxkIG1ha2Ugc2Vuc2UuXG5cdFx0XHR2YWx1ZS5tYXAoKGluZm8pID0+XG5cdFx0XHRcdGtleSA9PT0gXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIgPyB7IGRyYWZ0OiBpbmZvLmNvbnRleHQsIHNpYmxpbmdJbmZvOiBpbmZvLnNpYmxpbmdJbmZvIH0gOiBpbmZvLmNvbnRleHRcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IGRlbGV0ZUhlbHBlciA9IHtcblx0Z2V0Tm9uRGVsZXRhYmxlVGV4dCxcblx0ZGVsZXRlQ29uZmlybUhhbmRsZXIsXG5cdGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0dXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyxcblx0dXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQsXG5cdGdldExvY2tlZE9iamVjdHNUZXh0LFxuXHRnZXRVbnNhdmVkQ29udGV4dHNUZXh0LFxuXHRnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRhZnRlckRlbGV0ZVByb2Nlc3MsXG5cdHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzLFxuXHREZWxldGVPcHRpb25UeXBlcyxcblx0RGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wsXG5cdHNldEZvY3VzQWZ0ZXJEZWxldGUsXG5cdGdldENvbnRleHRJbmZvcyxcblx0YWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlLFxuXHRyZW1vdmVEZXNjZW5kYW50Q29udGV4dHNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlbGV0ZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztNQW9CS0EsaUJBQWlCO0VBQUEsV0FBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEs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
|
|
@@ -65,6 +65,7 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
65
65
|
navigatedPaths = [];
|
|
66
66
|
}
|
|
67
67
|
break;
|
|
68
|
+
case "Singleton":
|
|
68
69
|
case "EntitySet":
|
|
69
70
|
if (rootEntitySet === undefined) {
|
|
70
71
|
rootEntitySet = objectPart;
|
|
@@ -197,16 +198,30 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
197
198
|
return this.getMetaPathForPath(targetObject.path);
|
|
198
199
|
} else {
|
|
199
200
|
var _targetObject$fullyQu, _this$rootEntitySet;
|
|
200
|
-
|
|
201
|
+
let metaPathApp = targetObject === null || targetObject === void 0 ? void 0 : (_targetObject$fullyQu = targetObject.fullyQualifiedName) === null || _targetObject$fullyQu === void 0 ? void 0 : _targetObject$fullyQu.replace((_this$rootEntitySet = this.rootEntitySet) === null || _this$rootEntitySet === void 0 ? void 0 : _this$rootEntitySet.entityType.fullyQualifiedName, this.contextPath);
|
|
202
|
+
if (metaPathApp === (targetObject === null || targetObject === void 0 ? void 0 : targetObject.fullyQualifiedName)) {
|
|
203
|
+
var _targetObject$fullyQu2, _this$targetObject;
|
|
204
|
+
metaPathApp = (_targetObject$fullyQu2 = targetObject.fullyQualifiedName) === null || _targetObject$fullyQu2 === void 0 ? void 0 : _targetObject$fullyQu2.replace((_this$targetObject = this.targetObject) === null || _this$targetObject === void 0 ? void 0 : _this$targetObject.fullyQualifiedName, this.relativePath); // This branch is reached when the target has no relationship to the parent, in that case the fullyQualifiedName refers to the full path of the new target as something completely independent somehow, we need to make sure it's considered as a root object.
|
|
205
|
+
}
|
|
201
206
|
return new MetaPath(this.convertedMetadata, metaPathApp, this.contextPath);
|
|
202
207
|
}
|
|
203
208
|
};
|
|
204
209
|
_proto.getConvertedMetadata = function getConvertedMetadata() {
|
|
205
210
|
return this.convertedMetadata;
|
|
206
211
|
};
|
|
212
|
+
_proto.getDataModelObjectPath = function getDataModelObjectPath() {
|
|
213
|
+
return {
|
|
214
|
+
targetObject: this.targetObject,
|
|
215
|
+
startingEntitySet: this.rootEntitySet,
|
|
216
|
+
targetEntitySet: this.getClosestEntitySet(),
|
|
217
|
+
targetEntityType: this.getClosestEntityType(),
|
|
218
|
+
navigationProperties: this.getNavigationProperties(),
|
|
219
|
+
convertedTypes: this.convertedMetadata
|
|
220
|
+
};
|
|
221
|
+
};
|
|
207
222
|
return MetaPath;
|
|
208
223
|
}();
|
|
209
224
|
_exports = MetaPath;
|
|
210
225
|
return _exports;
|
|
211
226
|
}, false);
|
|
212
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1NlcnZpY2VPYmplY3QiLCJvYmplY3RQYXJ0IiwiaGFzT3duUHJvcGVydHkiLCJlbmhhbmNlUGF0aCIsInNCYXNlUGF0aCIsInNQYXRoQWRkaXRpb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYWJzb2x1dGVQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVwbGFjZSIsInN1YnN0cmluZyIsInJlc29sdmVkTWV0YVBhdGgiLCJyZXNvbHZlUGF0aCIsInJlc29sdmVkQ29udGV4dFBhdGgiLCJ0YXJnZXQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInRhcmdldE9iamVjdCIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsImVudGl0eVR5cGUiLCJnZXRSZXNvbHZlZENvbnRleHRQYXRoIiwic2VydmljZU9iamVjdFBhdGgiLCJsZW5ndGgiLCJtYXAiLCJuYXYiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsImNvbnRleHRSb290RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRQYXRoIiwic1BhdGhQYXJ0IiwiZ2V0UmVsYXRpdmVQYXRoIiwiZ2V0VGFyZ2V0IiwiZ2V0Q2xvc2VzdEVudGl0eVNldCIsImNsb3Nlc3RFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJnZXRDbG9zZXN0RW50aXR5VHlwZSIsImNsb3Nlc3RFbnRpdHlUeXBlIiwiZ2V0Q29udGV4dENsb3Nlc3RFbnRpdHlTZXQiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldE1ldGFQYXRoRm9yUGF0aCIsInRhcmdldFBhdGgiLCJnZXRNZXRhUGF0aEZvck9iamVjdCIsImlzQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwicGF0aCIsIl90YXJnZXRPYmplY3QkZnVsbHlRdSIsIl90aGlzJHJvb3RFbnRpdHlTZXQiLCJtZXRhUGF0aEFwcCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldENvbnZlcnRlZE1ldGFkYXRhIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhUGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRSZXNvbHV0aW9uVGFyZ2V0LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uUGF0aCwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5cbmZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbik6IG9iamVjdFBhcnQgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBvYmplY3RQYXJ0ICYmIG9iamVjdFBhcnQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKTtcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVBhdGgoc0Jhc2VQYXRoOiBzdHJpbmcsIHNQYXRoQWRkaXRpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoc1BhdGhBZGRpdGlvbikge1xuXHRcdGlmIChzUGF0aEFkZGl0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGhBZGRpdGlvbjtcblx0XHR9IGVsc2UgaWYgKHNQYXRoQWRkaXRpb24uc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH0gZWxzZSBpZiAoIXNCYXNlUGF0aC5lbmRzV2l0aChcIi9cIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBcIi9cIiArIHNQYXRoQWRkaXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0Jhc2VQYXRoO1xufVxuXG50eXBlIFJlc29sdmVkVGFyZ2V0PFQ+ID0gVCBleHRlbmRzIEFubm90YXRpb25QYXRoPGluZmVyIEs+XG5cdD8gS1xuXHQ6IFQgZXh0ZW5kcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxpbmZlciBWIGV4dGVuZHMgc3RyaW5nPlxuXHQ/IFZcblx0OiBUIGV4dGVuZHMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+XG5cdD8gUHJvcGVydHkgfCB1bmRlZmluZWRcblx0OiBUO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhUGF0aDxUPiB7XG5cdHByaXZhdGUgcm9vdEVudGl0eVNldDogRW50aXR5U2V0O1xuXG5cdHByaXZhdGUgY29udGV4dFJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGFic29sdXRlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgc2VydmljZU9iamVjdFBhdGg6IHN0cmluZztcblxuXHRwcml2YXRlIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuXG5cdHByaXZhdGUgY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcblxuXHRwcml2YXRlIHRhcmdldE9iamVjdDogVDtcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBNZXRhUGF0aCBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZWRNZXRhZGF0YSBUaGUgY3VycmVudCBtb2RlbCBjb252ZXJ0ZXIgb3V0cHV0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgY3VycmVudCBvYmplY3QgbWV0YVBhdGhcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjdXJyZW50IGNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRcdHByaXZhdGUgbWV0YVBhdGg6IHN0cmluZyxcblx0XHRwcml2YXRlIGNvbnRleHRQYXRoOiBzdHJpbmdcblx0KSB7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5hYnNvbHV0ZVBhdGggPSBlbmhhbmNlUGF0aChjb250ZXh0UGF0aCwgbWV0YVBhdGgpO1xuXHRcdHRoaXMucmVsYXRpdmVQYXRoID0gdGhpcy5hYnNvbHV0ZVBhdGgucmVwbGFjZShjb250ZXh0UGF0aCwgXCJcIik7XG5cdFx0aWYgKHRoaXMucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHR0aGlzLnJlbGF0aXZlUGF0aCA9IHRoaXMucmVsYXRpdmVQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aCh0aGlzLmFic29sdXRlUGF0aCk7XG5cdFx0Y29uc3QgcmVzb2x2ZWRDb250ZXh0UGF0aDogUmVzb2x1dGlvblRhcmdldDxUPiA9IHRoaXMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoY29udGV4dFBhdGgpO1xuXHRcdGlmIChyZXNvbHZlZE1ldGFQYXRoLnRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIGFubm90YXRpb24gdGFyZ2V0IGZvdW5kIGZvciAke21ldGFQYXRofWApO1xuXHRcdH1cblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0O1xuXHRcdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXNvbHZlZENvbnRleHRQYXRoLm9iamVjdFBhdGguZm9yRWFjaCgob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pID0+IHtcblx0XHRcdHJvb3RFbnRpdHlTZXQgPSB0aGlzLmdldFJlc29sdmVkQ29udGV4dFBhdGgob2JqZWN0UGFydCwgY3VycmVudEVudGl0eVR5cGUsIHJvb3RFbnRpdHlTZXQpO1xuXHRcdH0pO1xuXHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQgfHwgY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTWV0YVBhdGggZG9lc24ndCBjb250YWluIGFuIGVudGl0eVNldCAtPiBTaG91bGQgbmV2ZXIgaGFwcGVuXCIpO1xuXHRcdH1cblx0XHR0aGlzLnNlcnZpY2VPYmplY3RQYXRoID0gdGhpcy5jb250ZXh0UGF0aDtcblx0XHRpZiAodGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc2VydmljZU9iamVjdFBhdGggKz0gXCIvXCIgKyB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2KSA9PiBuYXYubmFtZSkuam9pbihcIi9cIik7XG5cdFx0fVxuXHRcdHRoaXMucm9vdEVudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0dGhpcy5jdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHR0aGlzLmN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVR5cGU7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc29sdmVkQ29udGV4dFBhdGgoXG5cdFx0b2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQsXG5cdFx0cm9vdEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkXG5cdCk6IEVudGl0eVNldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0c3dpdGNoIChvYmplY3RQYXJ0Ll90eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjpcblx0XHRcdFx0XHR0aGlzLmNvbnRleHROYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9iamVjdFBhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0Um9vdEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQgJiYgb2JqZWN0UGFydC5lbnRpdHlUeXBlID09PSBjdXJyZW50RW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcm9vdEVudGl0eVNldDtcblx0fVxuXG5cdHB1YmxpYyBnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGlzIE1ldGFQYXRoLlxuXHQgKiBAcGFyYW0gc1BhdGhQYXJ0IFRoZSBwYXRoIHRvIGV2YWx1YXRlXG5cdCAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UGF0aChzUGF0aFBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBlbmhhbmNlUGF0aCh0aGlzLmFic29sdXRlUGF0aCwgc1BhdGhQYXJ0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29udGV4dCBmb3IgdGhpcyBNZXRhUGF0aC5cblx0ICogQHBhcmFtIHNQYXRoUGFydCBUaGUgcGF0aCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuXHQgKi9cblx0cHVibGljIGdldFJlbGF0aXZlUGF0aChzUGF0aFBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBlbmhhbmNlUGF0aCh0aGlzLnJlbGF0aXZlUGF0aCwgc1BhdGhQYXJ0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdHlwZWQgdGFyZ2V0IGZvciB0aGlzIG9iamVjdCBjYWxsLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZWQgdGFyZ2V0IG9iamVjdFxuXHQgKi9cblx0cHVibGljIGdldFRhcmdldCgpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXRPYmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNsb3Nlc3QgZW50aXR5c2V0IGluIHRoZSBwYXRoLlxuXHQgKiBAcmV0dXJucyBUaGUgY2xvc2VzdCBlbnRpdHlzZXRcblx0ICovXG5cdHB1YmxpYyBnZXRDbG9zZXN0RW50aXR5U2V0KCk6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiA9IHRoaXMucm9vdEVudGl0eVNldDtcblx0XHRmb3IgKGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSBvZiB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXSkge1xuXHRcdFx0XHRjbG9zZXN0RW50aXR5U2V0ID0gY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvc2VzdEVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gdGhpcy5yb290RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0Y2xvc2VzdEVudGl0eVR5cGUgPSBuYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjbG9zZXN0IGVudGl0eXNldCBpbiB0aGUgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGNsb3Nlc3QgZW50aXR5c2V0XG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGV4dENsb3Nlc3RFbnRpdHlTZXQoKTogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY2xvc2VzdEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gdGhpcy5jb250ZXh0Um9vdEVudGl0eVNldDtcblx0XHRpZiAoY2xvc2VzdEVudGl0eVNldCkge1xuXHRcdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5jb250ZXh0TmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV0pIHtcblx0XHRcdFx0XHRjbG9zZXN0RW50aXR5U2V0ID0gY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2xvc2VzdEVudGl0eVNldDtcblx0fVxuXG5cdHB1YmxpYyBnZXROYXZpZ2F0aW9uUHJvcGVydGllcygpOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSB7XG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YVBhdGhGb3JQYXRoPFN1YlR5cGU+KHRhcmdldFBhdGg6IHN0cmluZyk6IE1ldGFQYXRoPFN1YlR5cGU+IHtcblx0XHRyZXR1cm4gbmV3IE1ldGFQYXRoPFN1YlR5cGU+KHRoaXMuY29udmVydGVkTWV0YWRhdGEsIGVuaGFuY2VQYXRoKHRoaXMuc2VydmljZU9iamVjdFBhdGgsIHRhcmdldFBhdGgpLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhUGF0aEZvck9iamVjdDxTdWJUeXBlIGV4dGVuZHMgeyBmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyB9Pih0YXJnZXRPYmplY3Q6IFN1YlR5cGUpOiBNZXRhUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4ge1xuXHRcdGlmIChpc0Fubm90YXRpb25QYXRoKHRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldE1ldGFQYXRoRm9yUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGFyZ2V0T2JqZWN0LnZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldE1ldGFQYXRoRm9yUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZXRhUGF0aEFwcCA9IHRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lPy5yZXBsYWNlKFxuXHRcdFx0XHR0aGlzLnJvb3RFbnRpdHlTZXQ/LmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIG5ldyBNZXRhUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGhpcy5jb252ZXJ0ZWRNZXRhZGF0YSwgbWV0YVBhdGhBcHAsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRDb252ZXJ0ZWRNZXRhZGF0YSgpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkTWV0YWRhdGE7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQWNBLFNBQVNBLGVBQWVBLENBQUNDLFVBQXNDLEVBQStCO0lBQzdGLE9BQU9BLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxjQUFjLENBQUMsT0FBTyxDQUFDO0VBQ3hEO0VBRUEsU0FBU0MsV0FBV0EsQ0FBQ0MsU0FBaUIsRUFBRUMsYUFBc0IsRUFBVTtJQUN2RSxJQUFJQSxhQUFhLEVBQUU7TUFDbEIsSUFBSUEsYUFBYSxDQUFDQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEMsT0FBT0QsYUFBYTtNQUNyQixDQUFDLE1BQU0sSUFBSUEsYUFBYSxDQUFDQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekMsT0FBT0YsU0FBUyxHQUFHQyxhQUFhO01BQ2pDLENBQUMsTUFBTSxJQUFJLENBQUNELFNBQVMsQ0FBQ0csUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE9BQU9ILFNBQVMsR0FBRyxHQUFHLEdBQUdDLGFBQWE7TUFDdkMsQ0FBQyxNQUFNO1FBQ04sT0FBT0QsU0FBUyxHQUFHQyxhQUFhO01BQ2pDO0lBQ0Q7SUFDQSxPQUFPRCxTQUFTO0VBQ2pCO0VBQUMsSUFVb0JJLFFBQVE7SUFxQjVCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLFNBQ1NDLGlCQUFvQyxFQUNwQ0MsUUFBZ0IsRUFDaEJDLFdBQW1CLEVBQzFCO01BQUEsS0FIT0YsaUJBQW9DLEdBQXBDQSxpQkFBb0M7TUFBQSxLQUNwQ0MsUUFBZ0IsR0FBaEJBLFFBQWdCO01BQUEsS0FDaEJDLFdBQW1CLEdBQW5CQSxXQUFtQjtNQUUzQixJQUFJLENBQUNDLG9CQUFvQixHQUFHLEVBQUU7TUFDOUIsSUFBSSxDQUFDQywyQkFBMkIsR0FBRyxFQUFFO01BQ3JDLElBQUksQ0FBQ0MsWUFBWSxHQUFHWCxXQUFXLENBQUNRLFdBQVcsRUFBRUQsUUFBUSxDQUFDO01BQ3RELElBQUksQ0FBQ0ssWUFBWSxHQUFHLElBQUksQ0FBQ0QsWUFBWSxDQUFDRSxPQUFPLENBQUNMLFdBQVcsRUFBRSxFQUFFLENBQUM7TUFDOUQsSUFBSSxJQUFJLENBQUNJLFlBQVksQ0FBQ1QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLElBQUksQ0FBQ1MsWUFBWSxHQUFHLElBQUksQ0FBQ0EsWUFBWSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ25EO01BRUEsTUFBTUMsZ0JBQXFDLEdBQUcsSUFBSSxDQUFDVCxpQkFBaUIsQ0FBQ1UsV0FBVyxDQUFDLElBQUksQ0FBQ0wsWUFBWSxDQUFDO01BQ25HLE1BQU1NLG1CQUF3QyxHQUFHLElBQUksQ0FBQ1gsaUJBQWlCLENBQUNVLFdBQVcsQ0FBQ1IsV0FBVyxDQUFDO01BQ2hHLElBQUlPLGdCQUFnQixDQUFDRyxNQUFNLEtBQUtDLFNBQVMsSUFBSUosZ0JBQWdCLENBQUNHLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDOUUsTUFBTSxJQUFJRSxLQUFLLENBQUMsa0NBQWtDYixRQUFRLEVBQUUsQ0FBQztNQUM5RDtNQUNBLElBQUksQ0FBQ2MsWUFBWSxHQUFHTixnQkFBZ0IsQ0FBQ0csTUFBTTtNQUMzQyxJQUFJSSxhQUFvQztNQUN4QyxJQUFJQyxnQkFBbUQ7TUFDdkQsSUFBSUMsaUJBQXlDO01BQzdDLElBQUlDLGNBQXdCLEdBQUcsRUFBRTtNQUNqQ1YsZ0JBQWdCLENBQUNXLFVBQVUsQ0FBQ0MsT0FBTyxDQUFFN0IsVUFBc0MsSUFBSztRQUMvRSxJQUFJRCxlQUFlLENBQUNDLFVBQVUsQ0FBQyxFQUFFO1VBQ2hDLFFBQVFBLFVBQVUsQ0FBQzhCLEtBQUs7WUFDdkIsS0FBSyxvQkFBb0I7Y0FDeEJILGNBQWMsQ0FBQ0ksSUFBSSxDQUFDL0IsVUFBVSxDQUFDZ0MsSUFBSSxDQUFDO2NBQ3BDLElBQUksQ0FBQ3JCLG9CQUFvQixDQUFDb0IsSUFBSSxDQUFDL0IsVUFBVSxDQUFDO2NBQzFDMEIsaUJBQWlCLEdBQUcxQixVQUFVLENBQUNpQyxVQUFVO2NBQ3pDLElBQUlSLGdCQUFnQixJQUFJQSxnQkFBZ0IsQ0FBQ1MseUJBQXlCLENBQUNqQyxjQUFjLENBQUMwQixjQUFjLENBQUNRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM1R1YsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDUyx5QkFBeUIsQ0FBQ1AsY0FBYyxDQUFDUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZGUixjQUFjLEdBQUcsRUFBRTtjQUNwQjtjQUNBO1lBQ0QsS0FBSyxXQUFXO2NBQ2YsSUFBSUgsYUFBYSxLQUFLSCxTQUFTLEVBQUU7Z0JBQ2hDRyxhQUFhLEdBQUd4QixVQUFVO2NBQzNCO2NBQ0F5QixnQkFBZ0IsR0FBR3pCLFVBQVU7Y0FDN0IwQixpQkFBaUIsR0FBR0QsZ0JBQWdCLENBQUNXLFVBQVU7Y0FDL0M7WUFDRCxLQUFLLFlBQVk7Y0FDaEIsSUFBSVYsaUJBQWlCLEtBQUtMLFNBQVMsRUFBRTtnQkFDcENLLGlCQUFpQixHQUFHMUIsVUFBVTtjQUMvQjtjQUNBO1lBQ0Q7Y0FDQztVQUNGO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRm1CLG1CQUFtQixDQUFDUyxVQUFVLENBQUNDLE9BQU8sQ0FBRTdCLFVBQXNDLElBQUs7UUFDbEZ3QixhQUFhLEdBQUcsSUFBSSxDQUFDYSxzQkFBc0IsQ0FBQ3JDLFVBQVUsRUFBRTBCLGlCQUFpQixFQUFFRixhQUFhLENBQUM7TUFDMUYsQ0FBQyxDQUFDO01BQ0YsSUFBSUEsYUFBYSxLQUFLSCxTQUFTLElBQUlLLGlCQUFpQixLQUFLTCxTQUFTLEVBQUU7UUFDbkUsTUFBTSxJQUFJQyxLQUFLLENBQUMsOERBQThELENBQUM7TUFDaEY7TUFDQSxJQUFJLENBQUNnQixpQkFBaUIsR0FBRyxJQUFJLENBQUM1QixXQUFXO01BQ3pDLElBQUksSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQzRCLE1BQU0sRUFBRTtRQUNyQyxJQUFJLENBQUNELGlCQUFpQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMzQixvQkFBb0IsQ0FBQzZCLEdBQUcsQ0FBRUMsR0FBRyxJQUFLQSxHQUFHLENBQUNULElBQUksQ0FBQyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQzNGO01BQ0EsSUFBSSxDQUFDWCxhQUFhLEdBQUdBLGFBQWE7TUFDbEMsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBR0EsZ0JBQWdCO01BQ3hDLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUdBLGlCQUFpQjtJQUMzQztJQUFDZ0IsUUFBQSxHQUFBbkMsUUFBQTtJQUFBLElBQUFvQyxNQUFBLEdBQUFwQyxRQUFBLENBQUFxQyxTQUFBO0lBQUFELE1BQUEsQ0FFT04sc0JBQXNCLEdBQTlCLFNBQUFBLHVCQUNDckMsVUFBc0MsRUFDdEMwQixpQkFBeUMsRUFDekNGLGFBQW9DLEVBQ1o7TUFDeEIsSUFBSXpCLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDLEVBQUU7UUFDaEMsUUFBUUEsVUFBVSxDQUFDOEIsS0FBSztVQUN2QixLQUFLLG9CQUFvQjtZQUN4QixJQUFJLENBQUNsQiwyQkFBMkIsQ0FBQ21CLElBQUksQ0FBQy9CLFVBQVUsQ0FBQztZQUNqRDtVQUNELEtBQUssV0FBVztZQUNmLElBQUksSUFBSSxDQUFDNkMsb0JBQW9CLEtBQUt4QixTQUFTLEVBQUU7Y0FDNUMsSUFBSSxDQUFDd0Isb0JBQW9CLEdBQUc3QyxVQUFVO1lBQ3ZDO1lBQ0EsSUFBSXdCLGFBQWEsS0FBS0gsU0FBUyxJQUFJckIsVUFBVSxDQUFDb0MsVUFBVSxLQUFLVixpQkFBaUIsRUFBRTtjQUMvRUYsYUFBYSxHQUFHeEIsVUFBVTtZQUMzQjtZQUNBO1VBQ0Q7WUFDQztRQUNGO01BQ0Q7TUFDQSxPQUFPd0IsYUFBYTtJQUNyQixDQUFDO0lBQUFtQixNQUFBLENBRU1HLGNBQWMsR0FBckIsU0FBQUEsZUFBQSxFQUFnQztNQUMvQixPQUFPLElBQUksQ0FBQ3BDLFdBQVc7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFpQyxNQUFBLENBS09JLE9BQU8sR0FBZCxTQUFBQSxRQUFlQyxTQUFrQixFQUFVO01BQzFDLE9BQU85QyxXQUFXLENBQUMsSUFBSSxDQUFDVyxZQUFZLEVBQUVtQyxTQUFTLENBQUM7SUFDakQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFMLE1BQUEsQ0FLT00sZUFBZSxHQUF0QixTQUFBQSxnQkFBdUJELFNBQWtCLEVBQVU7TUFDbEQsT0FBTzlDLFdBQVcsQ0FBQyxJQUFJLENBQUNZLFlBQVksRUFBRWtDLFNBQVMsQ0FBQztJQUNqRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFMLE1BQUEsQ0FJT08sU0FBUyxHQUFoQixTQUFBQSxVQUFBLEVBQXNCO01BQ3JCLE9BQU8sSUFBSSxDQUFDM0IsWUFBWTtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFvQixNQUFBLENBSU9RLG1CQUFtQixHQUExQixTQUFBQSxvQkFBQSxFQUFvRDtNQUNuRCxJQUFJQyxnQkFBdUMsR0FBRyxJQUFJLENBQUM1QixhQUFhO01BQ2hFLEtBQUssTUFBTTZCLGtCQUFrQixJQUFJLElBQUksQ0FBQzFDLG9CQUFvQixFQUFFO1FBQzNELElBQUl5QyxnQkFBZ0IsQ0FBQ2xCLHlCQUF5QixDQUFDbUIsa0JBQWtCLENBQUNyQixJQUFJLENBQUMsRUFBRTtVQUN4RW9CLGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ2xCLHlCQUF5QixDQUFDbUIsa0JBQWtCLENBQUNyQixJQUFJLENBQUM7UUFDdkY7TUFDRDtNQUNBLE9BQU9vQixnQkFBZ0I7SUFDeEIsQ0FBQztJQUFBVCxNQUFBLENBRU1XLG9CQUFvQixHQUEzQixTQUFBQSxxQkFBQSxFQUEwQztNQUN6QyxJQUFJQyxpQkFBNkIsR0FBRyxJQUFJLENBQUMvQixhQUFhLENBQUNZLFVBQVU7TUFDakUsS0FBSyxNQUFNaUIsa0JBQWtCLElBQUksSUFBSSxDQUFDMUMsb0JBQW9CLEVBQUU7UUFDM0Q0QyxpQkFBaUIsR0FBR0Ysa0JBQWtCLENBQUNwQixVQUFVO01BQ2xEO01BQ0EsT0FBT3NCLGlCQUFpQjtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFaLE1BQUEsQ0FJT2EsMEJBQTBCLEdBQWpDLFNBQUFBLDJCQUFBLEVBQXVFO01BQ3RFLElBQUlKLGdCQUFtRCxHQUFHLElBQUksQ0FBQ1Asb0JBQW9CO01BQ25GLElBQUlPLGdCQUFnQixFQUFFO1FBQ3JCLEtBQUssTUFBTUMsa0JBQWtCLElBQUksSUFBSSxDQUFDekMsMkJBQTJCLEVBQUU7VUFDbEUsSUFBSXdDLGdCQUFnQixDQUFDbEIseUJBQXlCLENBQUNtQixrQkFBa0IsQ0FBQ3JCLElBQUksQ0FBQyxFQUFFO1lBQ3hFb0IsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDbEIseUJBQXlCLENBQUNtQixrQkFBa0IsQ0FBQ3JCLElBQUksQ0FBQztVQUN2RjtRQUNEO01BQ0Q7TUFDQSxPQUFPb0IsZ0JBQWdCO0lBQ3hCLENBQUM7SUFBQVQsTUFBQSxDQUVNYyx1QkFBdUIsR0FBOUIsU0FBQUEsd0JBQUEsRUFBdUQ7TUFDdEQsT0FBTyxJQUFJLENBQUM5QyxvQkFBb0I7SUFDakMsQ0FBQztJQUFBZ0MsTUFBQSxDQUVNZSxrQkFBa0IsR0FBekIsU0FBQUEsbUJBQW1DQyxVQUFrQixFQUFxQjtNQUN6RSxPQUFPLElBQUlwRCxRQUFRLENBQVUsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRU4sV0FBVyxDQUFDLElBQUksQ0FBQ29DLGlCQUFpQixFQUFFcUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDakQsV0FBVyxDQUFDO0lBQ3hILENBQUM7SUFBQWlDLE1BQUEsQ0FFTWlCLG9CQUFvQixHQUEzQixTQUFBQSxxQkFBNEVyQyxZQUFxQixFQUFxQztNQUNySSxJQUFJc0MsZ0JBQWdCLENBQUN0QyxZQUFZLENBQUMsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQ21DLGtCQUFrQixDQUEwQm5DLFlBQVksQ0FBQ3VDLEtBQUssQ0FBQztNQUM1RSxDQUFDLE1BQU0sSUFBSUMsMEJBQTBCLENBQUN4QyxZQUFZLENBQUMsRUFBRTtRQUNwRCxPQUFPLElBQUksQ0FBQ21DLGtCQUFrQixDQUEwQm5DLFlBQVksQ0FBQ3lDLElBQUksQ0FBQztNQUMzRSxDQUFDLE1BQU07UUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxtQkFBQTtRQUNOLE1BQU1DLFdBQVcsR0FBRzVDLFlBQVksYUFBWkEsWUFBWSx3QkFBQTBDLHFCQUFBLEdBQVoxQyxZQUFZLENBQUU2QyxrQkFBa0IsY0FBQUgscUJBQUEsdUJBQWhDQSxxQkFBQSxDQUFrQ2xELE9BQU8sRUFBQW1ELG1CQUFBLEdBQzVELElBQUksQ0FBQzFDLGFBQWEsY0FBQTBDLG1CQUFBLHVCQUFsQkEsbUJBQUEsQ0FBb0I5QixVQUFVLENBQUNnQyxrQkFBa0IsRUFDakQsSUFBSSxDQUFDMUQsV0FDTixDQUFDO1FBQ0QsT0FBTyxJQUFJSCxRQUFRLENBQTBCLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUyRCxXQUFXLEVBQUUsSUFBSSxDQUFDekQsV0FBVyxDQUFDO01BQ3BHO0lBQ0QsQ0FBQztJQUFBaUMsTUFBQSxDQUVNMEIsb0JBQW9CLEdBQTNCLFNBQUFBLHFCQUFBLEVBQWlEO01BQ2hELE9BQU8sSUFBSSxDQUFDN0QsaUJBQWlCO0lBQzlCLENBQUM7SUFBQSxPQUFBRCxRQUFBO0VBQUE7RUFBQW1DLFFBQUEsR0FBQW5DLFFBQUE7RUFBQSxPQUFBbUMsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
227
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1NlcnZpY2VPYmplY3QiLCJvYmplY3RQYXJ0IiwiaGFzT3duUHJvcGVydHkiLCJlbmhhbmNlUGF0aCIsInNCYXNlUGF0aCIsInNQYXRoQWRkaXRpb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYWJzb2x1dGVQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVwbGFjZSIsInN1YnN0cmluZyIsInJlc29sdmVkTWV0YVBhdGgiLCJyZXNvbHZlUGF0aCIsInJlc29sdmVkQ29udGV4dFBhdGgiLCJ0YXJnZXQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInRhcmdldE9iamVjdCIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsImVudGl0eVR5cGUiLCJnZXRSZXNvbHZlZENvbnRleHRQYXRoIiwic2VydmljZU9iamVjdFBhdGgiLCJsZW5ndGgiLCJtYXAiLCJuYXYiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsImNvbnRleHRSb290RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRQYXRoIiwic1BhdGhQYXJ0IiwiZ2V0UmVsYXRpdmVQYXRoIiwiZ2V0VGFyZ2V0IiwiZ2V0Q2xvc2VzdEVudGl0eVNldCIsImNsb3Nlc3RFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJnZXRDbG9zZXN0RW50aXR5VHlwZSIsImNsb3Nlc3RFbnRpdHlUeXBlIiwiZ2V0Q29udGV4dENsb3Nlc3RFbnRpdHlTZXQiLCJnZXROYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldE1ldGFQYXRoRm9yUGF0aCIsInRhcmdldFBhdGgiLCJnZXRNZXRhUGF0aEZvck9iamVjdCIsImlzQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwicGF0aCIsIl90YXJnZXRPYmplY3QkZnVsbHlRdSIsIl90aGlzJHJvb3RFbnRpdHlTZXQiLCJtZXRhUGF0aEFwcCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIl90YXJnZXRPYmplY3QkZnVsbHlRdTIiLCJfdGhpcyR0YXJnZXRPYmplY3QiLCJnZXRDb252ZXJ0ZWRNZXRhZGF0YSIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJjb252ZXJ0ZWRUeXBlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWV0YVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UmVzb2x1dGlvblRhcmdldCxcblx0U2VydmljZU9iamVjdCxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvblBhdGgsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuXG5mdW5jdGlvbiBpc1NlcnZpY2VPYmplY3Qob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pOiBvYmplY3RQYXJ0IGlzIFNlcnZpY2VPYmplY3Qge1xuXHRyZXR1cm4gb2JqZWN0UGFydCAmJiBvYmplY3RQYXJ0Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIik7XG59XG5cbmZ1bmN0aW9uIGVuaGFuY2VQYXRoKHNCYXNlUGF0aDogc3RyaW5nLCBzUGF0aEFkZGl0aW9uPzogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKHNQYXRoQWRkaXRpb24pIHtcblx0XHRpZiAoc1BhdGhBZGRpdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0cmV0dXJuIHNQYXRoQWRkaXRpb247XG5cdFx0fSBlbHNlIGlmIChzUGF0aEFkZGl0aW9uLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG5cdFx0XHRyZXR1cm4gc0Jhc2VQYXRoICsgc1BhdGhBZGRpdGlvbjtcblx0XHR9IGVsc2UgaWYgKCFzQmFzZVBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gc0Jhc2VQYXRoICsgXCIvXCIgKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc0Jhc2VQYXRoICsgc1BhdGhBZGRpdGlvbjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHNCYXNlUGF0aDtcbn1cblxudHlwZSBSZXNvbHZlZFRhcmdldDxUPiA9IFQgZXh0ZW5kcyBBbm5vdGF0aW9uUGF0aDxpbmZlciBLPlxuXHQ/IEtcblx0OiBUIGV4dGVuZHMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8aW5mZXIgViBleHRlbmRzIHN0cmluZz5cblx0PyBWXG5cdDogVCBleHRlbmRzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPlxuXHQ/IFByb3BlcnR5IHwgdW5kZWZpbmVkXG5cdDogVDtcblxudHlwZSBDb250ZXh0Um9vdEVudGl0eSA9IEVudGl0eVNldCB8IFNpbmdsZXRvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YVBhdGg8VD4ge1xuXHRwcml2YXRlIHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbjtcblxuXHRwcml2YXRlIGNvbnRleHRSb290RW50aXR5U2V0OiBDb250ZXh0Um9vdEVudGl0eSB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGFic29sdXRlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgc2VydmljZU9iamVjdFBhdGg6IHN0cmluZztcblxuXHRwcml2YXRlIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuXG5cdHByaXZhdGUgY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcblxuXHRwcml2YXRlIHRhcmdldE9iamVjdDogVDtcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBNZXRhUGF0aCBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZWRNZXRhZGF0YSBUaGUgY3VycmVudCBtb2RlbCBjb252ZXJ0ZXIgb3V0cHV0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgY3VycmVudCBvYmplY3QgbWV0YVBhdGhcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjdXJyZW50IGNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRcdHByaXZhdGUgbWV0YVBhdGg6IHN0cmluZyxcblx0XHRwcml2YXRlIGNvbnRleHRQYXRoOiBzdHJpbmdcblx0KSB7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5hYnNvbHV0ZVBhdGggPSBlbmhhbmNlUGF0aChjb250ZXh0UGF0aCwgbWV0YVBhdGgpO1xuXHRcdHRoaXMucmVsYXRpdmVQYXRoID0gdGhpcy5hYnNvbHV0ZVBhdGgucmVwbGFjZShjb250ZXh0UGF0aCwgXCJcIik7XG5cdFx0aWYgKHRoaXMucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHR0aGlzLnJlbGF0aXZlUGF0aCA9IHRoaXMucmVsYXRpdmVQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aCh0aGlzLmFic29sdXRlUGF0aCk7XG5cdFx0Y29uc3QgcmVzb2x2ZWRDb250ZXh0UGF0aDogUmVzb2x1dGlvblRhcmdldDxUPiA9IHRoaXMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoY29udGV4dFBhdGgpO1xuXHRcdGlmIChyZXNvbHZlZE1ldGFQYXRoLnRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIGFubm90YXRpb24gdGFyZ2V0IGZvdW5kIGZvciAke21ldGFQYXRofWApO1xuXHRcdH1cblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0O1xuXHRcdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiU2luZ2xldG9uXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdFx0aWYgKHJvb3RFbnRpdHlTZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRyb290RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRW50aXR5VHlwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRFbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmVzb2x2ZWRDb250ZXh0UGF0aC5vYmplY3RQYXRoLmZvckVhY2goKG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRyb290RW50aXR5U2V0ID0gdGhpcy5nZXRSZXNvbHZlZENvbnRleHRQYXRoKG9iamVjdFBhcnQsIGN1cnJlbnRFbnRpdHlUeXBlLCByb290RW50aXR5U2V0KTtcblx0XHR9KTtcblx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkIHx8IGN1cnJlbnRFbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk1ldGFQYXRoIGRvZXNuJ3QgY29udGFpbiBhbiBlbnRpdHlTZXQgLT4gU2hvdWxkIG5ldmVyIGhhcHBlblwiKTtcblx0XHR9XG5cdFx0dGhpcy5zZXJ2aWNlT2JqZWN0UGF0aCA9IHRoaXMuY29udGV4dFBhdGg7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnNlcnZpY2VPYmplY3RQYXRoICs9IFwiL1wiICsgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdikgPT4gbmF2Lm5hbWUpLmpvaW4oXCIvXCIpO1xuXHRcdH1cblx0XHR0aGlzLnJvb3RFbnRpdHlTZXQgPSByb290RW50aXR5U2V0O1xuXHRcdHRoaXMuY3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0dGhpcy5jdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlUeXBlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNvbHZlZENvbnRleHRQYXRoKFxuXHRcdG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uLFxuXHRcdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkLFxuXHRcdHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQpOiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChpc1NlcnZpY2VPYmplY3Qob2JqZWN0UGFydCkpIHtcblx0XHRcdHN3aXRjaCAob2JqZWN0UGFydC5fdHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0TmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvYmplY3RQYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRleHRSb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkICYmIG9iamVjdFBhcnQuZW50aXR5VHlwZSA9PT0gY3VycmVudEVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJvb3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZXh0UGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBNZXRhUGF0aC5cblx0ICogQHBhcmFtIHNQYXRoUGFydCBUaGUgcGF0aCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aFxuXHQgKi9cblx0cHVibGljIGdldFBhdGgoc1BhdGhQYXJ0Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZW5oYW5jZVBhdGgodGhpcy5hYnNvbHV0ZVBhdGgsIHNQYXRoUGFydCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGNvbnRleHQgZm9yIHRoaXMgTWV0YVBhdGguXG5cdCAqIEBwYXJhbSBzUGF0aFBhcnQgVGhlIHBhdGggdG8gZXZhbHVhdGVcblx0ICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhcblx0ICovXG5cdHB1YmxpYyBnZXRSZWxhdGl2ZVBhdGgoc1BhdGhQYXJ0Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZW5oYW5jZVBhdGgodGhpcy5yZWxhdGl2ZVBhdGgsIHNQYXRoUGFydCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGVkIHRhcmdldCBmb3IgdGhpcyBvYmplY3QgY2FsbC5cblx0ICogQHJldHVybnMgVGhlIHR5cGVkIHRhcmdldCBvYmplY3Rcblx0ICovXG5cdHB1YmxpYyBnZXRUYXJnZXQoKTogVCB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0T2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjbG9zZXN0IGVudGl0eXNldCBpbiB0aGUgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGNsb3Nlc3QgZW50aXR5c2V0XG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q2xvc2VzdEVudGl0eVNldCgpOiBFbnRpdHlTZXQgfCBTaW5nbGV0b24ge1xuXHRcdGxldCBjbG9zZXN0RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gPSB0aGlzLnJvb3RFbnRpdHlTZXQ7XG5cdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV0pIHtcblx0XHRcdFx0Y2xvc2VzdEVudGl0eVNldCA9IGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjbG9zZXN0RW50aXR5U2V0O1xuXHR9XG5cblx0cHVibGljIGdldENsb3Nlc3RFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdGxldCBjbG9zZXN0RW50aXR5VHlwZTogRW50aXR5VHlwZSA9IHRoaXMucm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3QgbmF2aWdhdGlvblByb3BlcnR5IG9mIHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdGNsb3Nlc3RFbnRpdHlUeXBlID0gbmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGU7XG5cdFx0fVxuXHRcdHJldHVybiBjbG9zZXN0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY2xvc2VzdCBlbnRpdHlzZXQgaW4gdGhlIHBhdGguXG5cdCAqIEByZXR1cm5zIFRoZSBjbG9zZXN0IGVudGl0eXNldFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHRDbG9zZXN0RW50aXR5U2V0KCk6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQ7XG5cdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQpIHtcblx0XHRcdGZvciAoY29uc3QgbmF2aWdhdGlvblByb3BlcnR5IG9mIHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjbG9zZXN0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblByb3BlcnR5Lm5hbWVdKSB7XG5cdFx0XHRcdFx0Y2xvc2VzdEVudGl0eVNldCA9IGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMoKTogTmF2aWdhdGlvblByb3BlcnR5W10ge1xuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldE1ldGFQYXRoRm9yUGF0aDxTdWJUeXBlPih0YXJnZXRQYXRoOiBzdHJpbmcpOiBNZXRhUGF0aDxTdWJUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBNZXRhUGF0aDxTdWJUeXBlPih0aGlzLmNvbnZlcnRlZE1ldGFkYXRhLCBlbmhhbmNlUGF0aCh0aGlzLnNlcnZpY2VPYmplY3RQYXRoLCB0YXJnZXRQYXRoKSwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YVBhdGhGb3JPYmplY3Q8U3ViVHlwZSBleHRlbmRzIHsgZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcgfT4odGFyZ2V0T2JqZWN0OiBTdWJUeXBlKTogTWV0YVBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+IHtcblx0XHRpZiAoaXNBbm5vdGF0aW9uUGF0aCh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhUGF0aEZvclBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+KHRhcmdldE9iamVjdC52YWx1ZSk7XG5cdFx0fSBlbHNlIGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhUGF0aEZvclBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+KHRhcmdldE9iamVjdC5wYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IG1ldGFQYXRoQXBwID0gdGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWU/LnJlcGxhY2UoXG5cdFx0XHRcdHRoaXMucm9vdEVudGl0eVNldD8uZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdHRoaXMuY29udGV4dFBhdGhcblx0XHRcdCk7XG5cdFx0XHRpZiAobWV0YVBhdGhBcHAgPT09IHRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHRcdG1ldGFQYXRoQXBwID0gdGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZT8ucmVwbGFjZShcblx0XHRcdFx0XHQodGhpcy50YXJnZXRPYmplY3QgYXMgeyBmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyB9KT8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHRoaXMucmVsYXRpdmVQYXRoXG5cdFx0XHRcdCk7IC8vIFRoaXMgYnJhbmNoIGlzIHJlYWNoZWQgd2hlbiB0aGUgdGFyZ2V0IGhhcyBubyByZWxhdGlvbnNoaXAgdG8gdGhlIHBhcmVudCwgaW4gdGhhdCBjYXNlIHRoZSBmdWxseVF1YWxpZmllZE5hbWUgcmVmZXJzIHRvIHRoZSBmdWxsIHBhdGggb2YgdGhlIG5ldyB0YXJnZXQgYXMgc29tZXRoaW5nIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgc29tZWhvdywgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBjb25zaWRlcmVkIGFzIGEgcm9vdCBvYmplY3QuXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmV3IE1ldGFQYXRoPFJlc29sdmVkVGFyZ2V0PFN1YlR5cGU+Pih0aGlzLmNvbnZlcnRlZE1ldGFkYXRhLCBtZXRhUGF0aEFwcCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldENvbnZlcnRlZE1ldGFkYXRhKCk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0ZWRNZXRhZGF0YTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRhTW9kZWxPYmplY3RQYXRoKCk6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0YXJnZXRPYmplY3Q6IHRoaXMudGFyZ2V0T2JqZWN0LFxuXHRcdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHRoaXMucm9vdEVudGl0eVNldCxcblx0XHRcdHRhcmdldEVudGl0eVNldDogdGhpcy5nZXRDbG9zZXN0RW50aXR5U2V0KCksXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlOiB0aGlzLmdldENsb3Nlc3RFbnRpdHlUeXBlKCksXG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogdGhpcy5nZXROYXZpZ2F0aW9uUHJvcGVydGllcygpLFxuXHRcdFx0Y29udmVydGVkVHlwZXM6IHRoaXMuY29udmVydGVkTWV0YWRhdGFcblx0XHR9O1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFlQSxTQUFTQSxlQUFlQSxDQUFDQyxVQUFzQyxFQUErQjtJQUM3RixPQUFPQSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsY0FB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WjFDLFlBQVksQ0FBRTZDLGtCQUFrQixjQUFBSCxxQkFBQSx1QkFBaENBLHFCQUFBLENBQWtDbEQsT0FBTyxFQUFBbUQsbUJBQUEsR0FDMUQsSUFBSSxDQUFDMUMsYUFBYSxjQUFBMEMsbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFvQjlCLFVBQVUsQ0FBQ2dDLGtCQUFrQixFQUNqRCxJQUFJLENBQUMxRCxXQUNOLENBQUM7UUFDRCxJQUFJeUQsV0FBVyxNQUFLNUMsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUU2QyxrQkFBa0IsR0FBRTtVQUFBLElBQUFDLHNCQUFBLEVBQUFDLGtCQUFBO1VBQ3JESCxXQUFXLElBQUFFLHNCQUFBLEdBQUc5QyxZQUFZLENBQUM2QyxrQkFBa0IsY0FBQUMsc0JBQUEsdUJBQS9CQSxzQkFBQSxDQUFpQ3RELE9BQU8sRUFBQXVELGtCQUFBLEdBQ3BELElBQUksQ0FBQy9DLFlBQVksY0FBQStDLGtCQUFBLHVCQUFsQkEsa0JBQUEsQ0FBdURGLGtCQUFrQixFQUN6RSxJQUFJLENBQUN0RCxZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0o7UUFDQSxPQUFPLElBQUlQLFFBQVEsQ0FBMEIsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRTJELFdBQVcsRUFBRSxJQUFJLENBQUN6RCxXQUFXLENBQUM7TUFDcEc7SUFDRCxDQUFDO0lBQUFpQyxNQUFBLENBRU00QixvQkFBb0IsR0FBM0IsU0FBQUEscUJBQUEsRUFBaUQ7TUFDaEQsT0FBTyxJQUFJLENBQUMvRCxpQkFBaUI7SUFDOUIsQ0FBQztJQUFBbUMsTUFBQSxDQUVNNkIsc0JBQXNCLEdBQTdCLFNBQUFBLHVCQUFBLEVBQXdEO01BQ3ZELE9BQU87UUFDTmpELFlBQVksRUFBRSxJQUFJLENBQUNBLFlBQVk7UUFDL0JrRCxpQkFBaUIsRUFBRSxJQUFJLENBQUNqRCxhQUFhO1FBQ3JDa0QsZUFBZSxFQUFFLElBQUksQ0FBQ3ZCLG1CQUFtQixDQUFDLENBQUM7UUFDM0N3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUNyQixvQkFBb0IsQ0FBQyxDQUFDO1FBQzdDM0Msb0JBQW9CLEVBQUUsSUFBSSxDQUFDOEMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRG1CLGNBQWMsRUFBRSxJQUFJLENBQUNwRTtNQUN0QixDQUFDO0lBQ0YsQ0FBQztJQUFBLE9BQUFELFFBQUE7RUFBQTtFQUFBbUMsUUFBQSxHQUFBbkMsUUFBQTtFQUFBLE9BQUFtQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|