@kepler.gl/reducers 3.3.0-alpha.16 → 3.3.0-alpha.18

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.
Files changed (42) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +28 -9
  4. package/dist/cjs/dataset-ops-updaters.js +101 -15
  5. package/dist/cjs/dataset-ops-updaters.spec.js +129 -4
  6. package/dist/cjs/export-utils.js +118 -46
  7. package/dist/cjs/interaction-utils.js +11 -3
  8. package/dist/cjs/layer-utils.js +3 -2
  9. package/dist/cjs/ui-state-updaters.js +70 -26
  10. package/dist/cjs/ui-state.js +2 -2
  11. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  12. package/dist/cjs/vis-state-merger.js +65 -22
  13. package/dist/cjs/vis-state-updaters.js +811 -298
  14. package/dist/cjs/vis-state.js +2 -2
  15. package/dist/column-edit-reconcile.d.ts +4 -0
  16. package/dist/column-edit-updaters.spec.d.ts +1 -0
  17. package/dist/combined-updaters.d.ts +14 -4
  18. package/dist/composers.d.ts +13 -2
  19. package/dist/dataset-ops-updaters.d.ts +3 -0
  20. package/dist/esm/column-edit-reconcile.js +95 -0
  21. package/dist/esm/column-edit-updaters.spec.js +839 -0
  22. package/dist/esm/combined-updaters.js +29 -10
  23. package/dist/esm/dataset-ops-updaters.js +99 -16
  24. package/dist/esm/dataset-ops-updaters.spec.js +129 -4
  25. package/dist/esm/export-utils.js +117 -45
  26. package/dist/esm/interaction-utils.js +10 -3
  27. package/dist/esm/layer-utils.js +3 -2
  28. package/dist/esm/ui-state-updaters.js +69 -25
  29. package/dist/esm/ui-state.js +2 -2
  30. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  31. package/dist/esm/vis-state-merger.js +66 -24
  32. package/dist/esm/vis-state-updaters.js +801 -306
  33. package/dist/esm/vis-state.js +2 -2
  34. package/dist/export-utils.d.ts +2 -2
  35. package/dist/interaction-utils.d.ts +4 -1
  36. package/dist/layer-utils.d.ts +1 -0
  37. package/dist/ui-state-updaters.d.ts +10 -0
  38. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  39. package/dist/vis-state-merger.d.ts +10 -2
  40. package/dist/vis-state-updaters.d.ts +31 -9
  41. package/dist/vis-state.d.ts +4 -0
  42. package/package.json +17 -17
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setThemeUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportVideoSettingUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportMapFileNameUpdater = exports.setExportIncludeLayerApiKeysUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.receiveMapConfigUpdater = exports.openReplaceDatasetModalUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.MUTUALLY_EXCLUSIVE_MAP_CONTROLS = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
7
+ exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setThemeUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportVideoSettingUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportMapFileNameUpdater = exports.setExportMapBrandingUpdater = exports.setExportIncludeLayerApiKeysUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.receiveMapConfigUpdater = exports.openReplaceDatasetModalUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.MUTUALLY_EXCLUSIVE_MAP_CONTROLS = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _constants = require("@kepler.gl/constants");
@@ -80,11 +80,17 @@ var DEFAULT_MAP_LEGEND_CONTROL = _objectSpread(_objectSpread({}, DEFAULT_MAP_CON
80
80
  * @property mapLocale Default: `{show: true, active: false}`
81
81
  * @property mapTheme Default: `{show: true, active: false}`
82
82
  * @property viewportJson Default: `{show: true, active: false}`
83
+ * @property mapInfo Default: `{show: true, active: true}`. `show` hides the on-map name and description.
83
84
  * @public
84
85
  */
85
- var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_constants.MAP_CONTROLS).reduce(function (_final, current) {
86
+ var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = _objectSpread(_objectSpread({}, Object.keys(_constants.MAP_CONTROLS).reduce(function (_final, current) {
86
87
  return _objectSpread(_objectSpread({}, _final), {}, (0, _defineProperty2["default"])({}, current, current === _constants.MAP_CONTROLS.mapLegend ? DEFAULT_MAP_LEGEND_CONTROL : DEFAULT_MAP_CONTROLS_FEATURES));
87
- }, {});
88
+ }, {})), {}, {
89
+ // Open by default so a saved title shows on load. An empty map still hides the card.
90
+ mapInfo: _objectSpread(_objectSpread({}, DEFAULT_MAP_CONTROLS_FEATURES), {}, {
91
+ active: true
92
+ })
93
+ });
88
94
 
89
95
  /**
90
96
  * Default image export config
@@ -94,6 +100,7 @@ var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_constants
94
100
  * @property resolution Default: `'ONE_X'`,
95
101
  * @property legend Default: `false`,
96
102
  * @property charts Default: `false`,
103
+ * @property transparentBackground Default: `false`,
97
104
  * @property mapH Default: 0,
98
105
  * @property mapW Default: 0,
99
106
  * @property imageSize Default: {zoomOffset: 0, scale: 1, imageW: 0, imageH: 0},
@@ -110,6 +117,7 @@ var DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_IMAGE = {
110
117
  resolution: _constants.RESOLUTIONS.ONE_X,
111
118
  legend: false,
112
119
  charts: false,
120
+ transparentBackground: false,
113
121
  mapH: 0,
114
122
  mapW: 0,
115
123
  imageSize: {
@@ -731,6 +739,20 @@ var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function
731
739
  });
732
740
  };
733
741
 
742
+ /**
743
+ * Set application branding overrides for exported maps.
744
+ * @param state - `uiState`
745
+ * @param action
746
+ * @param action.payload application name and/or website overrides
747
+ * @return nextState
748
+ */
749
+ var setExportMapBrandingUpdater = exports.setExportMapBrandingUpdater = function setExportMapBrandingUpdater(state, _ref20) {
750
+ var payload = _ref20.payload;
751
+ return _objectSpread(_objectSpread({}, state), {}, {
752
+ exportMap: _objectSpread(_objectSpread({}, state.exportMap), payload)
753
+ });
754
+ };
755
+
734
756
  /**
735
757
  * Whether to keep layer access tokens in exported HTML and JSON maps.
736
758
  * @param state - `uiState`
@@ -738,8 +760,8 @@ var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function
738
760
  * @param action.payload - include layer API keys
739
761
  * @return nextState
740
762
  */
741
- var setExportIncludeLayerApiKeysUpdater = exports.setExportIncludeLayerApiKeysUpdater = function setExportIncludeLayerApiKeysUpdater(state, _ref20) {
742
- var includeLayerApiKeys = _ref20.payload;
763
+ var setExportIncludeLayerApiKeysUpdater = exports.setExportIncludeLayerApiKeysUpdater = function setExportIncludeLayerApiKeysUpdater(state, _ref21) {
764
+ var includeLayerApiKeys = _ref21.payload;
743
765
  return _objectSpread(_objectSpread({}, state), {}, {
744
766
  exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
745
767
  includeLayerApiKeys: includeLayerApiKeys
@@ -757,8 +779,8 @@ var setExportIncludeLayerApiKeysUpdater = exports.setExportIncludeLayerApiKeysUp
757
779
  * @returns nextState
758
780
  * @public
759
781
  */
760
- var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref21) {
761
- var payload = _ref21.payload;
782
+ var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref22) {
783
+ var payload = _ref22.payload;
762
784
  var oldNotifications = state.notifications || [];
763
785
  // @ts-expect-error
764
786
  var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
@@ -789,8 +811,8 @@ var addNotificationUpdater = exports.addNotificationUpdater = function addNotifi
789
811
  * @returns nextState
790
812
  * @public
791
813
  */
792
- var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref22) {
793
- var id = _ref22.payload;
814
+ var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref23) {
815
+ var id = _ref23.payload;
794
816
  return _objectSpread(_objectSpread({}, state), {}, {
795
817
  notifications: state.notifications.filter(function (n) {
796
818
  return n.id !== id;
@@ -836,8 +858,8 @@ var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFil
836
858
  * @returns nextState
837
859
  * @public
838
860
  */
839
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref23) {
840
- var error = _ref23.error;
861
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref24) {
862
+ var error = _ref24.error;
841
863
  return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
842
864
  loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
843
865
  fileLoading: false
@@ -890,8 +912,8 @@ var showDatasetTableUpdater = exports.showDatasetTableUpdater = function showDat
890
912
  * @returns nextState
891
913
  * @public
892
914
  */
893
- var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref24) {
894
- var locale = _ref24.payload.locale;
915
+ var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref25) {
916
+ var locale = _ref25.payload.locale;
895
917
  return _objectSpread(_objectSpread({}, state), {}, {
896
918
  locale: locale
897
919
  });
@@ -907,8 +929,8 @@ var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(stat
907
929
  * @returns nextState
908
930
  * @public
909
931
  */
910
- var setThemeUpdater = exports.setThemeUpdater = function setThemeUpdater(state, _ref25) {
911
- var theme = _ref25.payload.theme;
932
+ var setThemeUpdater = exports.setThemeUpdater = function setThemeUpdater(state, _ref26) {
933
+ var theme = _ref26.payload.theme;
912
934
  return _objectSpread(_objectSpread({}, state), {}, {
913
935
  theme: theme
914
936
  });
@@ -923,10 +945,10 @@ var setThemeUpdater = exports.setThemeUpdater = function setThemeUpdater(state,
923
945
  * @returns nextState
924
946
  * @public
925
947
  */
926
- var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref26) {
927
- var _ref26$payload = _ref26.payload,
928
- panelId = _ref26$payload.panelId,
929
- listView = _ref26$payload.listView;
948
+ var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref27) {
949
+ var _ref27$payload = _ref27.payload,
950
+ panelId = _ref27$payload.panelId,
951
+ listView = _ref27$payload.listView;
930
952
  var stateProp = panelId === 'layer' ? 'layerPanelListView' : panelId === 'filter' ? 'filterPanelListView' : null;
931
953
  if (!stateProp || state[stateProp] === listView) {
932
954
  return state;
@@ -943,11 +965,11 @@ var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function t
943
965
  * @returns nextState
944
966
  * @public
945
967
  */
946
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref27) {
947
- var _uiState$mapControls, _uiState$mapControls2, _uiState$mapControls3;
948
- var config = _ref27.payload.config;
949
- var _ref28 = config || {},
950
- uiState = _ref28.uiState;
968
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref28) {
969
+ var _uiState$mapControls, _uiState$mapControls2, _uiState$mapControls3, _uiState$mapControls4;
970
+ var config = _ref28.payload.config;
971
+ var _ref29 = config || {},
972
+ uiState = _ref29.uiState;
951
973
  if (!uiState) {
952
974
  return state;
953
975
  }
@@ -978,7 +1000,29 @@ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receive
978
1000
  })
979
1001
  });
980
1002
  }
981
- if ((_uiState$mapControls3 = uiState.mapControls) !== null && _uiState$mapControls3 !== void 0 && (_uiState$mapControls3 = _uiState$mapControls3.mapLegend) !== null && _uiState$mapControls3 !== void 0 && _uiState$mapControls3.settings) {
1003
+
1004
+ // Honor an explicit collapsed or hidden state. A missing key keeps the default (shown, open).
1005
+ var savedMapInfo = (_uiState$mapControls3 = uiState.mapControls) === null || _uiState$mapControls3 === void 0 ? void 0 : _uiState$mapControls3.mapInfo;
1006
+ var savedMapInfoActive = savedMapInfo === null || savedMapInfo === void 0 ? void 0 : savedMapInfo.active;
1007
+ var savedMapInfoShow = savedMapInfo === null || savedMapInfo === void 0 ? void 0 : savedMapInfo.show;
1008
+ if (typeof savedMapInfoActive === 'boolean' || typeof savedMapInfoShow === 'boolean') {
1009
+ var currentMapInfo = newState.mapControls.mapInfo;
1010
+ newState = _objectSpread(_objectSpread({}, newState), {}, {
1011
+ mapControls: _objectSpread(_objectSpread({}, newState.mapControls), {}, {
1012
+ mapInfo: _objectSpread(_objectSpread(_objectSpread(_objectSpread({
1013
+ show: true,
1014
+ active: true
1015
+ }, currentMapInfo), typeof savedMapInfoShow === 'boolean' ? {
1016
+ show: savedMapInfoShow
1017
+ } : {}), typeof savedMapInfoActive === 'boolean' ? {
1018
+ active: savedMapInfoActive
1019
+ } : {}), {}, {
1020
+ activeMapIndex: 0
1021
+ })
1022
+ })
1023
+ });
1024
+ }
1025
+ if ((_uiState$mapControls4 = uiState.mapControls) !== null && _uiState$mapControls4 !== void 0 && (_uiState$mapControls4 = _uiState$mapControls4.mapLegend) !== null && _uiState$mapControls4 !== void 0 && _uiState$mapControls4.settings) {
982
1026
  newState = setMapControlSettingsUpdater(newState, {
983
1027
  payload: {
984
1028
  panelId: 'mapLegend',
@@ -1002,4 +1046,4 @@ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receive
1002
1046
  }
1003
1047
  return newState;
1004
1048
  };
1005
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJjaGFydHMiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsImVzY2FwZVhodG1sRm9yV2VicGFjayIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZmlsZU5hbWUiLCJERUZBVUxUX0xPQURfRklMRVMiLCJmaWxlTG9hZGluZyIsIkRFRkFVTFRfRVhQT1JUX0RBVEEiLCJzZWxlY3RlZERhdGFzZXQiLCJkYXRhVHlwZSIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJmaWx0ZXJlZCIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OUyIsIkRFRkFVTFRfRVhQT1JUX0hUTUwiLCJleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiIsInVzZXJNYXBib3hUb2tlbiIsIm1vZGUiLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiREVGQVVMVF9FWFBPUlRfSlNPTiIsImhhc0RhdGEiLCJERUZBVUxUX0VYUE9SVF9NQVAiLCJFWFBPUlRfTUFQX0ZPUk1BVFMiLCJIVE1MIiwiSlNPTiIsIkRFRkFVTFRfRVhQT1JUX1ZJREVPIiwibWVkaWFUeXBlIiwiY2FtZXJhUHJlc2V0IiwiZHVyYXRpb25NcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiSU5JVElBTF9VSV9TVEFURSIsInJlYWRPbmx5IiwiYWN0aXZlU2lkZVBhbmVsIiwiY3VycmVudE1vZGFsIiwiZGF0YXNldEtleVRvUmVtb3ZlIiwiZGF0YXNldFRvUmVwbGFjZUlkIiwidmlzaWJsZURyb3Bkb3duIiwiZXhwb3J0SW1hZ2UiLCJleHBvcnREYXRhIiwiZXhwb3J0TWFwIiwiZXhwb3J0VmlkZW8iLCJtYXBDb250cm9scyIsIm5vdGlmaWNhdGlvbnMiLCJsb2FkRmlsZXMiLCJsb2NhbGUiLCJMT0NBTEVfQ09ERVMiLCJlbiIsInRoZW1lIiwiVEhFTUUiLCJkYXJrIiwibGF5ZXJQYW5lbExpc3RWaWV3IiwiZmlsdGVyUGFuZWxMaXN0VmlldyIsImlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlIiwiaW5pdFVpU3RhdGVVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJfaW5pdGlhbFVpU3RhdGUkdGhlbWUiLCJpbml0aWFsVWlTdGF0ZSIsInBheWxvYWQiLCJ0aGVtZXMiLCJnZXRDb25maWd1cmVkVGhlbWVzIiwicmVxdWVzdGVkIiwiaW5jbHVkZXMiLCJnZXREZWZhdWx0VWlUaGVtZSIsInRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIiLCJfcmVmIiwiaWQiLCJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJfcmVmMiIsInNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJfcmVmMyIsImhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJ0b2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvblVwZGF0ZXIiLCJfcmVmNCIsIk1VVFVBTExZX0VYQ0xVU0lWRV9NQVBfQ09OVFJPTFMiLCJzcGxpdE1hcCIsInRvZ2dsZTNkIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwiX3JlZjUiLCJfdXBkYXRlZFN0YXRlJG1hcENvbnQiLCJfdXBkYXRlZFN0YXRlJG1hcENvbnQyIiwiX3JlZjUkcGF5bG9hZCIsInBhbmVsSWQiLCJfcmVmNSRwYXlsb2FkJGluZGV4IiwiaW5kZXgiLCJ1cGRhdGVkU3RhdGUiLCJpc09wZW5pbmciLCJuZXh0TWFwQ29udHJvbHMiLCJkaWREZWFjdGl2YXRlIiwiY29udHJvbElkIiwiX25leHRNYXBDb250cm9scyRjb250Iiwic2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyIiwiX3JlZjYiLCJfc3RhdGUkbWFwQ29udHJvbHMiLCJfcmVmNiRwYXlsb2FkIiwiQm9vbGVhbiIsInNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXIiLCJfcmVmNyIsIl9zdGF0ZSRtYXBDb250cm9sczIiLCJfcmVmNyRwYXlsb2FkIiwic2V0dGluZ3MiLCJtYXBDb250cm9sIiwib3BlbkRlbGV0ZU1vZGFsVXBkYXRlciIsIl9yZWY4IiwiREVMRVRFX0RBVEFfSUQiLCJvcGVuUmVwbGFjZURhdGFzZXRNb2RhbFVwZGF0ZXIiLCJfcmVmOSIsInNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIiLCJfcmVmMCIsIm5ld1NldHRpbmciLCJ1cGRhdGVkIiwiY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlciIsIl9yZWYxIiwiZGF0YVVyaSIsInNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyIiwiX3JlZjEwIiwiY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciIsInNldEV4cG9ydFZpZGVvU2V0dGluZ1VwZGF0ZXIiLCJfcmVmMTEiLCJzdGFydEV4cG9ydGluZ0ltYWdlVXBkYXRlciIsIl9yZWYxMiIsIl9yZWYxMiRwYXlsb2FkIiwib3B0aW9ucyIsImltYWdlU2V0dGluZ3MiLCJjb21wb3NlXyIsImFwcGx5XyIsInBheWxvYWRfIiwic2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlciIsIl9yZWYxMyIsImRhdGFzZXQiLCJzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIiLCJfcmVmMTQiLCJzZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXIiLCJfcmVmMTUiLCJzZXRFeHBvcnREYXRhVXBkYXRlciIsInNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIiLCJfcmVmMTYiLCJzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyIiwiX3JlZjE3IiwiZm9ybWF0Iiwic2V0RXhwb3J0TWFwRmlsZU5hbWVVcGRhdGVyIiwiX3JlZjE4Iiwic2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyIiwiX3JlZjE5Iiwic2V0RXhwb3J0SW5jbHVkZUxheWVyQXBpS2V5c1VwZGF0ZXIiLCJfcmVmMjAiLCJpbmNsdWRlTGF5ZXJBcGlLZXlzIiwiYWRkTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYyMSIsIm9sZE5vdGlmaWNhdGlvbnMiLCJwYXlsb2FkSWQiLCJub3RpZmljYXRpb25Ub1VwZGF0ZSIsImZpbmQiLCJuIiwibWFwIiwiY3JlYXRlTm90aWZpY2F0aW9uIiwiY291bnQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYyMiIsImxvYWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjMiLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ0b3BpYyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwiREFUQV9UQUJMRV9JRCIsInNldExvY2FsZVVwZGF0ZXIiLCJfcmVmMjQiLCJzZXRUaGVtZVVwZGF0ZXIiLCJfcmVmMjUiLCJ0b2dnbGVQYW5lbExpc3RWaWV3VXBkYXRlciIsIl9yZWYyNiIsIl9yZWYyNiRwYXlsb2FkIiwibGlzdFZpZXciLCJzdGF0ZVByb3AiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyNyIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMzIiwiY29uZmlnIiwiX3JlZjI4IiwidWlTdGF0ZSIsIm5ld1N0YXRlIiwiY3VycmVudExlZ2VuZCIsImNoYXJ0IiwiY3VycmVudENoYXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7XG4gIEFERF9EQVRBX0lELFxuICBEQVRBX1RBQkxFX0lELFxuICBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MsXG4gIERFTEVURV9EQVRBX0lELFxuICBFWFBPUlRfREFUQV9UWVBFLFxuICBFWFBPUlRfSFRNTF9NQVBfTU9ERVMsXG4gIEVYUE9SVF9JTUdfUkFUSU9TLFxuICBFWFBPUlRfTUFQX0ZPUk1BVFMsXG4gIFJFU09MVVRJT05TLFxuICBNQVBfQ09OVFJPTFMsXG4gIFRIRU1FXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBjcmVhdGVOb3RpZmljYXRpb24sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBnZXRDb25maWd1cmVkVGhlbWVzLFxuICBnZXREZWZhdWx0VWlUaGVtZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5XywgY29tcG9zZV99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblR5cGVzLFxuICBLZXBsZXJHbEluaXRQYXlsb2FkLFxuICBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVUlTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEV4cG9ydERhdGEsXG4gIEV4cG9ydEh0bWwsXG4gIEV4cG9ydEpzb24sXG4gIEV4cG9ydE1hcCxcbiAgRXhwb3J0SW1hZ2UsXG4gIEV4cG9ydFZpZGVvLFxuICBNYXBDb250cm9sSXRlbSxcbiAgTWFwQ29udHJvbE1hcExlZ2VuZCxcbiAgTWFwQ29udHJvbHMsXG4gIFVpU3RhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMID0gJ2xheWVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREFMID0gQUREX0RBVEFfSUQ7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB1aVN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt1aVN0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB1aVN0YXRlOiB1aVN0YXRlVXBkYXRlcnMudG9nZ2xlU2lkZVBhbmVsVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgdWlTdGF0ZSwge3BheWxvYWQ6IG51bGx9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB1aVN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVM6IE1hcENvbnRyb2xJdGVtID0ge1xuICBzaG93OiB0cnVlLFxuICBhY3RpdmU6IGZhbHNlLFxuICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAvLyBkZWZpbmVzIHdoaWNoIG1hcCBpbmRleCB1c2VycyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCAodGhyb3VnaCBtYXAgY29udHJvbHMpXG4gIGFjdGl2ZU1hcEluZGV4OiAwXG59O1xuXG5jb25zdCBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTCA9IHtcbiAgLi4uREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMsXG4gIGRpc2FibGVFZGl0OiBmYWxzZVxufTtcbi8qKlxuICogQSBsaXN0IG9mIG1hcCBjb250cm9sIHZpc2liaWxpdHkgYW5kIHdoZXRoZXIgaXMgaXQgYWN0aXZlLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgdmlzaWJsZUxheWVycyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExlZ2VuZCBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IHRvZ2dsZTNkIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgc3BsaXRNYXAgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBtYXBEcmF3IERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTG9jYWxlIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwVGhlbWUgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSB2aWV3cG9ydEpzb24gRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQX0NPTlRST0xTOiBNYXBDb250cm9scyA9IChcbiAgT2JqZWN0LmtleXMoTUFQX0NPTlRST0xTKSBhcyBBcnJheTxrZXlvZiB0eXBlb2YgTUFQX0NPTlRST0xTPlxuKS5yZWR1Y2UoXG4gIChmaW5hbCwgY3VycmVudCkgPT4gKHtcbiAgICAuLi5maW5hbCxcbiAgICBbY3VycmVudF06XG4gICAgICBjdXJyZW50ID09PSBNQVBfQ09OVFJPTFMubWFwTGVnZW5kXG4gICAgICAgID8gREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0xcbiAgICAgICAgOiBERUZBVUxUX01BUF9DT05UUk9MU19GRUFUVVJFU1xuICB9KSxcbiAge30gYXMgTWFwQ29udHJvbHNcbik7XG5cbi8qKlxuICogRGVmYXVsdCBpbWFnZSBleHBvcnQgY29uZmlnXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByYXRpbyBEZWZhdWx0OiBgJ1NDUkVFTidgLFxuICogQHByb3BlcnR5IHJlc29sdXRpb24gRGVmYXVsdDogYCdPTkVfWCdgLFxuICogQHByb3BlcnR5IGxlZ2VuZCBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IGNoYXJ0cyBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IG1hcEggRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBtYXBXIERlZmF1bHQ6IDAsXG4gKiBAcHJvcGVydHkgaW1hZ2VTaXplIERlZmF1bHQ6IHt6b29tT2Zmc2V0OiAwLCBzY2FsZTogMSwgaW1hZ2VXOiAwLCBpbWFnZUg6IDB9LFxuICogQHByb3BlcnR5IGltYWdlRGF0YVVyaSBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGV4cG9ydGluZyBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXJyb3IgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGVzY2FwZVhodG1sRm9yV2VicGFjayBEZWZhdWx0OiBmcm9tIGFwcGxpY2F0aW9uIGNvbmZpZyAoYXV0by1kZXRlY3RlZDogYHRydWVgIGZvciB3ZWJwYWNrKVxuICogQHByb3BlcnR5IGZpbGVOYW1lIERlZmF1bHQ6IGAnJ2BcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0lNQUdFOiBFeHBvcnRJbWFnZSA9IHtcbiAgLy8gdXNlciBvcHRpb25zXG4gIHJhdGlvOiBFWFBPUlRfSU1HX1JBVElPUy5TQ1JFRU4sXG4gIHJlc29sdXRpb246IFJFU09MVVRJT05TLk9ORV9YLFxuICBsZWdlbmQ6IGZhbHNlLFxuICBjaGFydHM6IGZhbHNlLFxuICBtYXBIOiAwLFxuICBtYXBXOiAwLFxuICBpbWFnZVNpemU6IHtcbiAgICB6b29tT2Zmc2V0OiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIGltYWdlVzogMCxcbiAgICBpbWFnZUg6IDBcbiAgfSxcbiAgLy8gd2hlbiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGUgbW9jayBtYXAgdmlld3BvcnQgd2lsbCBtb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZGF0YVxuICBjZW50ZXI6IGZhbHNlLFxuICAvLyBleHBvcnRpbmcgc3RhdGVcbiAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgLy8gZXhwb3J0aW5nOiB1c2VkIHRvIGF0dGFjaCBwbG90LWNvbnRhaW5lciB0byBkb21cbiAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgLy8gcHJvY2Vzc2luZzogdXNlZCBhcyBsb2FkaW5nIGluZGljYXRvciB3aGVuIGV4cG9ydCBpbWFnZSBpcyBiZWluZyBwcm9kdWNlZFxuICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgZXJyb3I6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIGFwcGx5IGZpeCBmb3IgdWdsaWZ5IGVycm9yIGluIGRvbS10by1pbWFnZSAoZnJvbSBhcHBsaWNhdGlvbiBjb25maWcsIGF1dG8tZGV0ZWN0cyBidWlsZCB0b29sKVxuICBlc2NhcGVYaHRtbEZvcldlYnBhY2s6IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZXNjYXBlWGh0bWxGb3JXZWJwYWNrLFxuICBmaWxlTmFtZTogJydcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQURfRklMRVMgPSB7XG4gIGZpbGVMb2FkaW5nOiBmYWxzZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYGV4cG9ydERhdGFgIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBzZWxlY3RlZERhdGFzZXQgRGVmYXVsdDogYCcnYCxcbiAqIEBwcm9wZXJ0eSBkYXRhVHlwZSBEZWZhdWx0OiBgJ2NzdidgLFxuICogQHByb3BlcnR5IGZpbHRlcmVkIERlZmF1bHQ6IGB0cnVlYCxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0RBVEE6IEV4cG9ydERhdGEgPSB7XG4gIHNlbGVjdGVkRGF0YXNldDogJycsXG4gIGRhdGFUeXBlOiBFWFBPUlRfREFUQV9UWVBFLkNTVixcbiAgZmlsdGVyZWQ6IHRydWVcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTlMgPSBbXTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiAtIERlZmF1bHQ6IG51bGwsIHRoaXMgaXMgdXNlZCB3aGVuIHdlIHByb3ZpZGUgYSBkZWZhdWx0IG1hcGJveCB0b2tlbiBmb3IgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2ZcbiAqIEBwcm9wZXJ0eSB1c2VyTWFwYm94VG9rZW4gLSBEZWZhdWx0OiAnJywgbWFwYm94IHRva2VuIHByb3ZpZGVkIGJ5IHVzZXIgdGhyb3VnaCBpbnB1dCBmaWVsZFxuICogQHByb3BlcnR5IG1vZGUgLSBEZWZhdWx0OiAnUkVBRCcsIHJlYWQgb25seSBvciBlZGl0YWJsZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSFRNTDogRXhwb3J0SHRtbCA9IHtcbiAgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW46IG51bGwsXG4gIHVzZXJNYXBib3hUb2tlbjogJycsXG4gIG1vZGU6IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEXG59O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGhhc0RhdGEgLSBEZWZhdWx0OiAndHJ1ZScsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9KU09OOiBFeHBvcnRKc29uID0ge1xuICBoYXNEYXRhOiB0cnVlXG59O1xuXG4vKipcbiAqIEV4cG9ydCBNYXAgQ29uZmlnXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBIVE1MIC0gRGVmYXVsdDogJ0RFRkFVTFRfRVhQT1JUX0hUTUwnLFxuICogQHByb3BlcnR5IEpTT04gLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSlNPTicsXG4gKiBAcHJvcGVydHkgZm9ybWF0IC0gRGVmYXVsdDogJ0hUTUwnLFxuICogQHByb3BlcnR5IGZpbGVOYW1lIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgaW5jbHVkZUxheWVyQXBpS2V5cyBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfTUFQOiBFeHBvcnRNYXAgPSB7XG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IERFRkFVTFRfRVhQT1JUX0hUTUwsXG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IERFRkFVTFRfRVhQT1JUX0pTT04sXG4gIGZvcm1hdDogRVhQT1JUX01BUF9GT1JNQVRTLkhUTUwsXG4gIGZpbGVOYW1lOiAnJyxcbiAgLy8gUHJpdmF0ZSBsYXllciB0b2tlbnMgc3RheSBvdXQgb2YgdGhlIGZpbGUgdW5sZXNzIHRoZSB1c2VyIG9wdHMgaW4uXG4gIGluY2x1ZGVMYXllckFwaUtleXM6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0VmlkZW9gIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBtZWRpYVR5cGUgRGVmYXVsdDogYCd3ZWJtJ2BcbiAqIEBwcm9wZXJ0eSBjYW1lcmFQcmVzZXQgRGVmYXVsdDogYCdOb25lJ2BcbiAqIEBwcm9wZXJ0eSBmaWxlTmFtZSBEZWZhdWx0OiBgJ2tlcGxlci5nbCdgXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJzEyODB4NzIwJ2BcbiAqIEBwcm9wZXJ0eSBkdXJhdGlvbk1zIERlZmF1bHQ6IGAxMDAwYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfVklERU86IEV4cG9ydFZpZGVvID0ge1xuICBtZWRpYVR5cGU6ICd3ZWJtJywgLy8gdXNlIHdlYm0gYXMgZGVmYXVsdCBhcyBnaWYgZXhwb3J0IHRlbmRzIHRvIGZyZWV6ZSBvbiBsYXJnZXIgcmVjb3JkaW5nc1xuICBjYW1lcmFQcmVzZXQ6ICdOb25lJyxcbiAgZmlsZU5hbWU6ICdrZXBsZXIuZ2wnLFxuICByZXNvbHV0aW9uOiAnMTI4MHg3MjAnLFxuICBkdXJhdGlvbk1zOiAxMDAwLFxuICBzd2lwZVN0YXJ0UGN0OiAwLFxuICBzd2lwZUVuZFBjdDogMTAwLFxuICBzd2lwZUVhc2luZzogJ2Vhc2UtaW4tb3V0J1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHVpU3RhdGVgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByZWFkT25seSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgYWN0aXZlU2lkZVBhbmVsIERlZmF1bHQ6IGAnbGF5ZXInYFxuICogQHByb3BlcnR5IGN1cnJlbnRNb2RhbCBEZWZhdWx0OiBgJ2FkZERhdGEnYFxuICogQHByb3BlcnR5IGRhdGFzZXRLZXlUb1JlbW92ZSBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSBkYXRhc2V0VG9SZXBsYWNlSWQgRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgdmlzaWJsZURyb3Bkb3duIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IGV4cG9ydEltYWdlIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfSU1BR0VgXSgjZGVmYXVsdF9leHBvcnRfaW1hZ2UpXG4gKiBAcHJvcGVydHkgZXhwb3J0RGF0YSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0RBVEFgXSgjZGVmYXVsdF9leHBvcnRfZGF0YSlcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXAgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9NQVBgXSgjZGVmYXVsdF9leHBvcnRfbWFwKVxuICogQHByb3BlcnR5IG1hcENvbnRyb2xzIERlZmF1bHQ6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbG9hZEZpbGVzXG4gKiBAcHJvcGVydHkgbG9jYWxlIERlZmF1bHQ6IGAnZW4nYFxuICogQHByb3BlcnR5IHRoZW1lIERlZmF1bHQ6IGAnZGFyaydgXG4gKiBAcHJvcGVydHkgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGUgRGVmYXVsdDogYHRydWVgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1VJX1NUQVRFOiBVaVN0YXRlID0ge1xuICByZWFkT25seTogZmFsc2UsXG4gIGFjdGl2ZVNpZGVQYW5lbDogREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCxcbiAgY3VycmVudE1vZGFsOiBERUZBVUxUX01PREFMLFxuICBkYXRhc2V0S2V5VG9SZW1vdmU6IG51bGwsXG4gIGRhdGFzZXRUb1JlcGxhY2VJZDogbnVsbCxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsLFxuICAvLyBleHBvcnQgaW1hZ2UgbW9kYWwgdWlcbiAgZXhwb3J0SW1hZ2U6IERFRkFVTFRfRVhQT1JUX0lNQUdFLFxuICAvLyBleHBvcnQgZGF0YSBtb2RhbCB1aVxuICBleHBvcnREYXRhOiBERUZBVUxUX0VYUE9SVF9EQVRBLFxuICAvLyBodG1sIGV4cG9ydFxuICBleHBvcnRNYXA6IERFRkFVTFRfRVhQT1JUX01BUCxcbiAgLy8gZXhwb3J0IHZpZGVvIG1vZGFsIHVpXG4gIGV4cG9ydFZpZGVvOiBERUZBVUxUX0VYUE9SVF9WSURFTyxcbiAgLy8gbWFwIGNvbnRyb2wgcGFuZWxzXG4gIG1hcENvbnRyb2xzOiBERUZBVUxUX01BUF9DT05UUk9MUyxcbiAgLy8gdWkgbm90aWZpY2F0aW9uc1xuICBub3RpZmljYXRpb25zOiBERUZBVUxUX05PVElGSUNBVElPTlMsXG4gIC8vIGxvYWQgZmlsZXNcbiAgbG9hZEZpbGVzOiBERUZBVUxUX0xPQURfRklMRVMsXG4gIC8vIExvY2FsZSBvZiB0aGUgVUlcbiAgbG9jYWxlOiBMT0NBTEVfQ09ERVMuZW4sXG4gIC8vIFRoZW1lIG9mIHRoZSBVSSAoYGxpZ2h0YCB8IGBkYXJrYCB8IGBzcGFjZWApLiBGaXJzdCBvZiBgdGhlbWVzYCBpcyB0aGUgZGVmYXVsdCB3aGVuIHNldC5cbiAgdGhlbWU6IFRIRU1FLmRhcmssXG4gIGxheWVyUGFuZWxMaXN0VmlldzogJ2xpc3QnLFxuICBmaWx0ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCcsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiB0cnVlXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0VWlTdGF0ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICBhY3Rpb246IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ0lOSVQnXTtcbiAgICBwYXlsb2FkOiBLZXBsZXJHbEluaXRQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgaW5pdGlhbFVpU3RhdGUgPSAoYWN0aW9uLnBheWxvYWQgfHwge30pLmluaXRpYWxVaVN0YXRlIHx8IHt9O1xuICBjb25zdCB0aGVtZXMgPSBnZXRDb25maWd1cmVkVGhlbWVzKCk7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IGluaXRpYWxVaVN0YXRlLnRoZW1lID8/IHN0YXRlLnRoZW1lO1xuICBjb25zdCB0aGVtZSA9XG4gICAgdGhlbWVzLmxlbmd0aCA9PT0gMCA/IHJlcXVlc3RlZCA6IHRoZW1lcy5pbmNsdWRlcyhyZXF1ZXN0ZWQpID8gcmVxdWVzdGVkIDogZ2V0RGVmYXVsdFVpVGhlbWUoKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC4uLmluaXRpYWxVaVN0YXRlLFxuICAgIHRoZW1lXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHNpZGUgcGFuZWwgdG8gYmUgc2hvd24sIG9uZSBvZiBgbGF5ZXJgLCBgZmlsdGVyYCwgYGludGVyYWN0aW9uYCwgYG1hcGAuIGNsb3NlIHNpZGUgcGFuZWwgaWYgYG51bGxgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgcmV0dXJuIGlkID09PSBzdGF0ZS5hY3RpdmVTaWRlUGFuZWxcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWw6IGlkXG4gICAgICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGFuZCBoaWRlIG1vZGFsIGRpYWxvZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtYWN0aW9uLnBheWxvYWQgaWQgb2YgbW9kYWwgdG8gYmUgc2hvd24sIG51bGwgdG8gaGlkZSBtb2RhbHMuIE9uZSBvZjpcbiAqICAtIFtgREFUQV9UQUJMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RhdGFfdGFibGVfaWQpXG4gKiAgLSBbYERFTEVURV9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGVsZXRlX2RhdGFfaWQpXG4gKiAgLSBbYEFERF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX2RhdGFfaWQpXG4gKiAgLSBbYEVYUE9SVF9JTUFHRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9pbWFnZV9pZClcbiAqICAtIFtgRVhQT1JUX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfZGF0YV9pZClcbiAqICAtIFtgQUREX01BUF9TVFlMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9tYXBfc3R5bGVfaWQpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBpZCxcbiAgLy8gQWRkIERhdGEgYW5kIGV2ZXJ5IG90aGVyIG1vZGFsIG9wZW4gbGVhdmUgcmVwbGFjZSBtb2RlLlxuICAvLyBSZXBsYWNlIG1vZGUgaXMgZW50ZXJlZCBvbmx5IHRocm91Z2ggb3BlblJlcGxhY2VEYXRhc2V0TW9kYWwuXG4gIGRhdGFzZXRUb1JlcGxhY2VJZDogbnVsbFxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGxcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBzaWRlIHBhbmVsIGNsb3NlIGJ1dHRvbiBvbiB0b3AgbGVmdCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtzaG93fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGU6IHNob3dcbn0pO1xuXG4vLyBNYXAgY29udHJvbCBkcm9wZG93bnMvbWVudXMgdGhhdCBvdmVybGFwIGVhY2ggb3RoZXIgdmlzdWFsbHkgYW5kIHRoZXJlZm9yZVxuLy8gc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZTogb3BlbmluZyBvbmUgY2xvc2VzIGFsbCB0aGUgb3RoZXJzLlxuLy8gKHNwbGl0L3ZpZXctbW9kZSBtZW51LCB0b3AvM2QvZ2xvYmUgbWVudSwgcG9seWdvbiBkcmF3IHRvb2wsIGxhbmd1YWdlIG1lbnUpXG5leHBvcnQgY29uc3QgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUzogc3RyaW5nW10gPSBbXG4gIE1BUF9DT05UUk9MUy5zcGxpdE1hcCxcbiAgTUFQX0NPTlRST0xTLnRvZ2dsZTNkLFxuICBNQVBfQ09OVFJPTFMubWFwRHJhdyxcbiAgTUFQX0NPTlRST0xTLm1hcExvY2FsZVxuXTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBpbmRleCA9IDB9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBsZXQgdXBkYXRlZFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gVGhlIG92ZXJsYXBwaW5nIG1hcCBjb250cm9sIG1lbnVzIHNob3VsZCBiZSBtdXR1YWxseSBleGNsdXNpdmU6IHdoZW4gb25lIG9mXG4gIC8vIHRoZW0gaXMgYmVpbmcgb3BlbmVkLCBkZWFjdGl2YXRlIGV2ZXJ5IG90aGVyIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBhY3RpdmVcbiAgLy8gc28gdGhlaXIgZHJvcGRvd25zIG5ldmVyIG92ZXJsYXAgb24gc2NyZWVuLlxuICBjb25zdCBpc09wZW5pbmcgPSAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdPy5hY3RpdmU7XG4gIGlmIChpc09wZW5pbmcgJiYgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUy5pbmNsdWRlcyhwYW5lbElkKSkge1xuICAgIGNvbnN0IG5leHRNYXBDb250cm9scyA9IHsuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHN9O1xuICAgIGxldCBkaWREZWFjdGl2YXRlID0gZmFsc2U7XG4gICAgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUy5mb3JFYWNoKGNvbnRyb2xJZCA9PiB7XG4gICAgICBpZiAoY29udHJvbElkICE9PSBwYW5lbElkICYmIG5leHRNYXBDb250cm9sc1tjb250cm9sSWRdPy5hY3RpdmUpIHtcbiAgICAgICAgbmV4dE1hcENvbnRyb2xzW2NvbnRyb2xJZF0gPSB7Li4ubmV4dE1hcENvbnRyb2xzW2NvbnRyb2xJZF0sIGFjdGl2ZTogZmFsc2V9O1xuICAgICAgICBkaWREZWFjdGl2YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGlkRGVhY3RpdmF0ZSkge1xuICAgICAgdXBkYXRlZFN0YXRlID0gey4uLnVwZGF0ZWRTdGF0ZSwgbWFwQ29udHJvbHM6IG5leHRNYXBDb250cm9sc307XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXToge1xuICAgICAgICAuLi4odXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdIGFzIE1hcENvbnRyb2xJdGVtKSxcbiAgICAgICAgYWN0aXZlOiAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdPy5hY3RpdmUsXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIG1hcCBjb250cm9sIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzaG93fX06IFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUubWFwQ29udHJvbHM/LltwYW5lbElkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgICBzaG93OiBCb29sZWFuKHNob3cpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgc2V0dGluZ3N9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IG1hcENvbnRyb2wgPSBzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdIGFzIE1hcENvbnRyb2xNYXBMZWdlbmQgfCB1bmRlZmluZWQ7XG4gIGlmICghbWFwQ29udHJvbCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLm1hcENvbnRyb2wsXG4gICAgICAgIHNldHRpbmdzOiB7Li4ubWFwQ29udHJvbC5zZXR0aW5ncywgLi4uc2V0dGluZ3N9XG4gICAgICB9IGFzIE1hcENvbnRyb2xNYXBMZWdlbmRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5EZWxldGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldEtleVRvUmVtb3ZlfTogVUlTdGF0ZUFjdGlvbnMuT3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBERUxFVEVfREFUQV9JRCxcbiAgZGF0YXNldEtleVRvUmVtb3ZlXG59KTtcblxuLyoqXG4gKiBPcGVuIHRoZSBhZGQtZGF0YSBtb2RhbCBzbyB0aGUgbmV4dCBjb25maXJtZWQgdXBsb2FkIHJlcGxhY2VzIG9uZSBkYXRhc2V0LlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlblJlcGxhY2VEYXRhc2V0TW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXRUb1JlcGxhY2VJZH06IFVJU3RhdGVBY3Rpb25zLk9wZW5SZXBsYWNlRGF0YXNldE1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBBRERfREFUQV9JRCxcbiAgZGF0YXNldFRvUmVwbGFjZUlkXG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlYCBvcHRpb25zIHN1Y2ggYXMgYGxlZ2VuZGAgYW5kIGBjaGFydHNgIHRvIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbmV3U2V0dGluZ306IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB1cGRhdGVkID0gey4uLnN0YXRlLmV4cG9ydEltYWdlLCAuLi5uZXdTZXR0aW5nfTtcbiAgY29uc3QgaW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHVwZGF0ZWQpIHx8IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi51cGRhdGVkLFxuICAgICAgaW1hZ2VTaXplXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBpbWFnZSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVVyaX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBpZiAoZGF0YVVyaSA9PT0gc3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VEYXRhVXJpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZXhwb3J0SW1hZ2U6IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgICBpbWFnZURhdGFVcmk6IGRhdGFVcmlcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGVycm9yfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZXJyb3JcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGNhY2hlZCBleHBvcnQgaW1hZ2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgY2VudGVyOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydFZpZGVvYCBzZXR0aW5nczogbWVkaWFUeXBlLCBjYW1lcmFQcmVzZXQsIGZpbGVOYW1lLCByZXNvbHV0aW9uLCBkdXJhdGlvbk1zXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbmV3IHZpZGVvIGV4cG9ydCBzZXR0aW5nc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRWaWRlbzoge1xuICAgIC4uLnN0YXRlLmV4cG9ydFZpZGVvLFxuICAgIC4uLm5ld1NldHRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogU3RhcnQgaW1hZ2UgZXhwb3J0aW5nIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtVaVN0YXRlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogb3B0aW9ucyA9IHt9fToge3BheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+fVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2V0dGluZ3MgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleHBvcnRpbmc6IHRydWVcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV8oW1xuICAgIGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIsXG4gICAgYXBwbHlfKHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIsIHBheWxvYWRfKGltYWdlU2V0dGluZ3MpKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIHNlbGVjdGVkRGF0YXNldDogZGF0YXNldFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgZGF0YSBmb3JtYXQgZm9yIGV4cG9ydGluZyBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVR5cGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGRhdGFUeXBlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gZXhwb3J0IGZpbHRlcmVkIGRhdGEsIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbHRlcmVkfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBmaWx0ZXJlZFxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0sXG4gICAgICBoYXNEYXRhOiAhc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXS5oYXNEYXRhXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiB3aGV0aGVyIHRvIGV4cG9ydCBhIG1hcGJveCBhY2Nlc3MgdG8gSFRNTCBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB1c2VyTWFwYm94VG9rZW59OiBVSVN0YXRlQWN0aW9ucy5TZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIHVzZXJNYXBib3hUb2tlblxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IG1hcCBmb3JtYXRcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGZvcm1hdCB0byB1c2UgdG8gZXhwb3J0IHRoZSBtYXAgaW50b1xuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZm9ybWF0fTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBmb3JtYXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gZXhwb3J0aW5nIGFuIEhUTUwgb3IgSlNPTiBtYXBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwRmlsZU5hbWVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbGVOYW1lfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRmlsZU5hbWVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgZmlsZU5hbWVcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBleHBvcnQgaHRtbCBtYXAgbW9kZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgdG8gYmUgc2V0IChhdmFpbGFibGUgbW9kZXM6IEVYUE9SVF9IVE1MX01BUF9NT0RFUylcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbW9kZX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICBtb2RlXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGtlZXAgbGF5ZXIgYWNjZXNzIHRva2VucyBpbiBleHBvcnRlZCBIVE1MIGFuZCBKU09OIG1hcHMuXG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCAtIGluY2x1ZGUgbGF5ZXIgQVBJIGtleXNcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbmNsdWRlTGF5ZXJBcGlLZXlzVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpbmNsdWRlTGF5ZXJBcGlLZXlzfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW5jbHVkZUxheWVyQXBpS2V5c1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBpbmNsdWRlTGF5ZXJBcGlLZXlzXG4gIH1cbn0pO1xuXG4vKipcbiAqIEFkZHMgYSBuZXcgbm90aWZpY2F0aW9uLlxuICogVXBkYXRlcyBhIG5vdGlmaWNhdGlvbiBpbiBjYXNlIG9mIG1hdGNoaW5nIGlkcy5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXJhbXMgb2YgYSBub3RpZmljYXRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTm90aWZpY2F0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkfTogVUlTdGF0ZUFjdGlvbnMuQWRkTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZE5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zIHx8IFtdO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGNvbnN0IHBheWxvYWRJZCA9IHBheWxvYWQ/LmlkO1xuICBjb25zdCBub3RpZmljYXRpb25Ub1VwZGF0ZSA9IHBheWxvYWRJZCA/IG9sZE5vdGlmaWNhdGlvbnMuZmluZChuID0+IG4uaWQgPT09IHBheWxvYWRJZCkgOiBudWxsO1xuXG4gIGxldCBub3RpZmljYXRpb25zO1xuICBpZiAobm90aWZpY2F0aW9uVG9VcGRhdGUpIHtcbiAgICBub3RpZmljYXRpb25zID0gb2xkTm90aWZpY2F0aW9ucy5tYXAobiA9PlxuICAgICAgbi5pZCA9PT0gcGF5bG9hZElkID8gY3JlYXRlTm90aWZpY2F0aW9uKHsuLi5wYXlsb2FkLCBjb3VudDogbi5jb3VudCArIDF9KSA6IG5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG5vdGlmaWNhdGlvbnMgPSBbLi4ub2xkTm90aWZpY2F0aW9ucywgY3JlYXRlTm90aWZpY2F0aW9uKHBheWxvYWQpXTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIG5vdGlmaWNhdGlvbnN9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBub3RpZmljYXRpb25cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBpZCBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG5vdGlmaWNhdGlvbnM6IHN0YXRlLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gaWQpXG59KTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGZpbGUgbG9hZGluZyBiZWdpblxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9hZEZpbGVzOiB7XG4gICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgIGZpbGVMb2FkaW5nOiB0cnVlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZGluZyBmaWxlIHN1Y2Nlc3MgYW5kIHNldCBmaWxlTG9hZGluZyBwcm9wZXJ0eSB0byBmYWxzZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogZmFsc2VcbiAgfVxufSk7XG5cbi8qKlxuICogSGFuZGxlcyBsb2FkIGZpbGUgZXJyb3IgYW5kIHNldCBmaWxlTG9hZGluZyBwcm9wZXJ0eSB0byBmYWxzZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLmVycm9yXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUsIHtlcnJvcn06IExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24pOiBVaVN0YXRlID0+XG4gIGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIoXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkRmlsZXM6IHtcbiAgICAgICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHBheWxvYWQ6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIHx8IHt9KS5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBsb2FkIGZpbGVzJyxcbiAgICAgICAgdG9waWM6IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUy5nbG9iYWxcbiAgICAgIH0pXG4gICAgfVxuICApO1xuXG4vKipcbiAqIEhhbmRsZXMgdG9nZ2xlIG1hcCBzcGxpdCBhbmQgcmVzZXQgYWxsIG1hcCBjb250cm9sIGluZGV4IHRvIDBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBDb250cm9sczogT2JqZWN0LmVudHJpZXMoc3RhdGUubWFwQ29udHJvbHMpLnJlZHVjZShcbiAgICAoYWNjLCBlbnRyeSkgPT4gKHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtlbnRyeVswXV06IHtcbiAgICAgICAgLi4uKGVudHJ5WzFdIGFzIE1hcENvbnRyb2xJdGVtKSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgIH1cbiAgICB9KSxcbiAgICB7fSBhcyBNYXBDb250cm9sc1xuICApXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbW9kYWwgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PlxuICB0b2dnbGVNb2RhbFVwZGF0ZXIoc3RhdGUsIHtwYXlsb2FkOiBEQVRBX1RBQkxFX0lEfSk7XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhbGUgb2YgdGhlIFVJXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5sb2NhbGUgbG9jYWxlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvY2FsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge2xvY2FsZX19OiBVSVN0YXRlQWN0aW9ucy5TZXRMb2NhbGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2NhbGVcbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgdGhlbWUgb2YgdGhlIFVJXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC50aGVtZSB0aGVtZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRUaGVtZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3RoZW1lfX06IFVJU3RhdGVBY3Rpb25zLlNldFRoZW1lVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdGhlbWVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBsYXllciBwYW5lbCBsaXN0IHZpZXdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBsYXllciBwYW5lbCBsaXN0VmlldyB2YWx1ZS4gQ2FuIGJlICdsaXN0JyBvciAnc29ydEJ5RGF0YXNldCdcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGxpc3RWaWV3fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVByb3AgPVxuICAgIHBhbmVsSWQgPT09ICdsYXllcidcbiAgICAgID8gJ2xheWVyUGFuZWxMaXN0VmlldydcbiAgICAgIDogcGFuZWxJZCA9PT0gJ2ZpbHRlcidcbiAgICAgID8gJ2ZpbHRlclBhbmVsTGlzdFZpZXcnXG4gICAgICA6IG51bGw7XG4gIGlmICghc3RhdGVQcm9wIHx8IHN0YXRlW3N0YXRlUHJvcF0gPT09IGxpc3RWaWV3KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgW3N0YXRlUHJvcF06IGxpc3RWaWV3XG4gIH07XG59O1xuXG4vKipcbiAqIE1lcmdlIHJlY2VpdmVkIHVpIHN0YXRlIGNvbmZpZyB3aGVuIGxvYWRpbmcgYSBzYXZlZCBtYXBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBzYXZlZCBtYXAgY29uZmlnIGB7bWFwU3R5bGUsIHZpc1N0YXRlLCBtYXBTdGF0ZSwgdWlTdGF0ZX1gXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWd9XG4gIH06IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ1JFQ0VJVkVfTUFQX0NPTkZJRyddO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3Qge3VpU3RhdGV9ID0gY29uZmlnIHx8IHt9O1xuICBpZiAoIXVpU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAodWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmUpIHtcbiAgICBjb25zdCBjdXJyZW50TGVnZW5kID0gbmV3U3RhdGUubWFwQ29udHJvbHMubWFwTGVnZW5kO1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBtYXBDb250cm9sczoge1xuICAgICAgICAuLi5uZXdTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgICAgbWFwTGVnZW5kOiB7XG4gICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAuLi5jdXJyZW50TGVnZW5kLFxuICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmICh1aVN0YXRlLm1hcENvbnRyb2xzPy5jaGFydD8uYWN0aXZlKSB7XG4gICAgY29uc3QgY3VycmVudENoYXJ0ID0gbmV3U3RhdGUubWFwQ29udHJvbHMuY2hhcnQ7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBjaGFydDoge1xuICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgLi4uY3VycmVudENoYXJ0LFxuICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmICh1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LnNldHRpbmdzKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIHNldHRpbmdzOiB1aVN0YXRlLm1hcENvbnRyb2xzLm1hcExlZ2VuZC5zZXR0aW5nc31cbiAgICB9IGFzIFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXJBY3Rpb24pO1xuICB9XG5cbiAgaWYgKHVpU3RhdGUubG9jYWxlKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRMb2NhbGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7bG9jYWxlOiB1aVN0YXRlLmxvY2FsZX1cbiAgICB9IGFzIFVJU3RhdGVBY3Rpb25zLlNldExvY2FsZVVwZGF0ZXJBY3Rpb24pO1xuICB9XG5cbiAgaWYgKHVpU3RhdGUudGhlbWUpIHtcbiAgICBuZXdTdGF0ZSA9IHNldFRoZW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3RoZW1lOiB1aVN0YXRlLnRoZW1lfVxuICAgIH0gYXMgVUlTdGF0ZUFjdGlvbnMuU2V0VGhlbWVVcGRhdGVyQWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQWFBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQVFBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFBOEQsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUs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
1049
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwibWFwSW5mbyIsIkRFRkFVTFRfRVhQT1JUX0lNQUdFIiwicmF0aW8iLCJFWFBPUlRfSU1HX1JBVElPUyIsIlNDUkVFTiIsInJlc29sdXRpb24iLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwibGVnZW5kIiwiY2hhcnRzIiwidHJhbnNwYXJlbnRCYWNrZ3JvdW5kIiwibWFwSCIsIm1hcFciLCJpbWFnZVNpemUiLCJ6b29tT2Zmc2V0Iiwic2NhbGUiLCJpbWFnZVciLCJpbWFnZUgiLCJjZW50ZXIiLCJpbWFnZURhdGFVcmkiLCJleHBvcnRpbmciLCJwcm9jZXNzaW5nIiwiZXJyb3IiLCJlc2NhcGVYaHRtbEZvcldlYnBhY2siLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImZpbGVOYW1lIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJERUZBVUxUX0VYUE9SVF9WSURFTyIsIm1lZGlhVHlwZSIsImNhbWVyYVByZXNldCIsImR1cmF0aW9uTXMiLCJzd2lwZVN0YXJ0UGN0Iiwic3dpcGVFbmRQY3QiLCJzd2lwZUVhc2luZyIsIklOSVRJQUxfVUlfU1RBVEUiLCJyZWFkT25seSIsImFjdGl2ZVNpZGVQYW5lbCIsImN1cnJlbnRNb2RhbCIsImRhdGFzZXRLZXlUb1JlbW92ZSIsImRhdGFzZXRUb1JlcGxhY2VJZCIsInZpc2libGVEcm9wZG93biIsImV4cG9ydEltYWdlIiwiZXhwb3J0RGF0YSIsImV4cG9ydE1hcCIsImV4cG9ydFZpZGVvIiwibWFwQ29udHJvbHMiLCJub3RpZmljYXRpb25zIiwibG9hZEZpbGVzIiwibG9jYWxlIiwiTE9DQUxFX0NPREVTIiwiZW4iLCJ0aGVtZSIsIlRIRU1FIiwiZGFyayIsImxheWVyUGFuZWxMaXN0VmlldyIsImZpbHRlclBhbmVsTGlzdFZpZXciLCJpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSIsImluaXRVaVN0YXRlVXBkYXRlciIsInN0YXRlIiwiYWN0aW9uIiwiX2luaXRpYWxVaVN0YXRlJHRoZW1lIiwiaW5pdGlhbFVpU3RhdGUiLCJwYXlsb2FkIiwidGhlbWVzIiwiZ2V0Q29uZmlndXJlZFRoZW1lcyIsInJlcXVlc3RlZCIsImluY2x1ZGVzIiwiZ2V0RGVmYXVsdFVpVGhlbWUiLCJ0b2dnbGVTaWRlUGFuZWxVcGRhdGVyIiwiX3JlZiIsImlkIiwidG9nZ2xlTW9kYWxVcGRhdGVyIiwiX3JlZjIiLCJzaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyIiwiX3JlZjMiLCJoaWRlRXhwb3J0RHJvcGRvd25VcGRhdGVyIiwidG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyIiwiX3JlZjQiLCJNVVRVQUxMWV9FWENMVVNJVkVfTUFQX0NPTlRST0xTIiwic3BsaXRNYXAiLCJ0b2dnbGUzZCIsIm1hcERyYXciLCJtYXBMb2NhbGUiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsIl9yZWY1IiwiX3VwZGF0ZWRTdGF0ZSRtYXBDb250IiwiX3VwZGF0ZWRTdGF0ZSRtYXBDb250MiIsIl9yZWY1JHBheWxvYWQiLCJwYW5lbElkIiwiX3JlZjUkcGF5bG9hZCRpbmRleCIsImluZGV4IiwidXBkYXRlZFN0YXRlIiwiaXNPcGVuaW5nIiwibmV4dE1hcENvbnRyb2xzIiwiZGlkRGVhY3RpdmF0ZSIsImNvbnRyb2xJZCIsIl9uZXh0TWFwQ29udHJvbHMkY29udCIsInNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciIsIl9yZWY2IiwiX3N0YXRlJG1hcENvbnRyb2xzIiwiX3JlZjYkcGF5bG9hZCIsIkJvb2xlYW4iLCJzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyIiwiX3JlZjciLCJfc3RhdGUkbWFwQ29udHJvbHMyIiwiX3JlZjckcGF5bG9hZCIsInNldHRpbmdzIiwibWFwQ29udHJvbCIsIm9wZW5EZWxldGVNb2RhbFVwZGF0ZXIiLCJfcmVmOCIsIkRFTEVURV9EQVRBX0lEIiwib3BlblJlcGxhY2VEYXRhc2V0TW9kYWxVcGRhdGVyIiwiX3JlZjkiLCJzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyIiwiX3JlZjAiLCJuZXdTZXR0aW5nIiwidXBkYXRlZCIsImNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSIsInNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIiLCJfcmVmMSIsImRhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlciIsIl9yZWYxMCIsImNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIiLCJzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyIiwiX3JlZjExIiwic3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIiLCJfcmVmMTIiLCJfcmVmMTIkcGF5bG9hZCIsIm9wdGlvbnMiLCJpbWFnZVNldHRpbmdzIiwiY29tcG9zZV8iLCJhcHBseV8iLCJwYXlsb2FkXyIsInNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIiLCJfcmVmMTMiLCJkYXRhc2V0Iiwic2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyIiwiX3JlZjE0Iiwic2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyIiwiX3JlZjE1Iiwic2V0RXhwb3J0RGF0YVVwZGF0ZXIiLCJzZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyIiwiX3JlZjE2Iiwic2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlciIsIl9yZWYxNyIsImZvcm1hdCIsInNldEV4cG9ydE1hcEZpbGVOYW1lVXBkYXRlciIsIl9yZWYxOCIsInNldEV4cG9ydE1hcEhUTUxNb2RlVXBkYXRlciIsIl9yZWYxOSIsInNldEV4cG9ydE1hcEJyYW5kaW5nVXBkYXRlciIsIl9yZWYyMCIsInNldEV4cG9ydEluY2x1ZGVMYXllckFwaUtleXNVcGRhdGVyIiwiX3JlZjIxIiwiaW5jbHVkZUxheWVyQXBpS2V5cyIsImFkZE5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMjIiLCJvbGROb3RpZmljYXRpb25zIiwicGF5bG9hZElkIiwibm90aWZpY2F0aW9uVG9VcGRhdGUiLCJmaW5kIiwibiIsIm1hcCIsImNyZWF0ZU5vdGlmaWNhdGlvbiIsImNvdW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMjMiLCJsb2FkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjI0IiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwidG9waWMiLCJERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MiLCJnbG9iYWwiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsIkRBVEFfVEFCTEVfSUQiLCJzZXRMb2NhbGVVcGRhdGVyIiwiX3JlZjI1Iiwic2V0VGhlbWVVcGRhdGVyIiwiX3JlZjI2IiwidG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVmMjckcGF5bG9hZCIsImxpc3RWaWV3Iiwic3RhdGVQcm9wIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjgiLCJfdWlTdGF0ZSRtYXBDb250cm9scyIsIl91aVN0YXRlJG1hcENvbnRyb2xzMiIsIl91aVN0YXRlJG1hcENvbnRyb2xzMyIsIl91aVN0YXRlJG1hcENvbnRyb2xzNCIsImNvbmZpZyIsIl9yZWYyOSIsInVpU3RhdGUiLCJuZXdTdGF0ZSIsImN1cnJlbnRMZWdlbmQiLCJjaGFydCIsImN1cnJlbnRDaGFydCIsInNhdmVkTWFwSW5mbyIsInNhdmVkTWFwSW5mb0FjdGl2ZSIsInNhdmVkTWFwSW5mb1Nob3ciLCJjdXJyZW50TWFwSW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICBBRERfREFUQV9JRCxcbiAgREFUQV9UQUJMRV9JRCxcbiAgREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLFxuICBERUxFVEVfREFUQV9JRCxcbiAgRVhQT1JUX0RBVEFfVFlQRSxcbiAgRVhQT1JUX0hUTUxfTUFQX01PREVTLFxuICBFWFBPUlRfSU1HX1JBVElPUyxcbiAgRVhQT1JUX01BUF9GT1JNQVRTLFxuICBSRVNPTFVUSU9OUyxcbiAgTUFQX0NPTlRST0xTLFxuICBUSEVNRVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgY3JlYXRlTm90aWZpY2F0aW9uLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgZ2V0Q29uZmlndXJlZFRoZW1lcyxcbiAgZ2V0RGVmYXVsdFVpVGhlbWVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge3BheWxvYWRfLCBhcHBseV8sIGNvbXBvc2VffSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuXG5pbXBvcnQge1xuICBBY3Rpb25UeXBlcyxcbiAgS2VwbGVyR2xJbml0UGF5bG9hZCxcbiAgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbixcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFVJU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1xuICBFeHBvcnREYXRhLFxuICBFeHBvcnRIdG1sLFxuICBFeHBvcnRKc29uLFxuICBFeHBvcnRNYXAsXG4gIEV4cG9ydEltYWdlLFxuICBFeHBvcnRWaWRlbyxcbiAgTWFwQ29udHJvbEl0ZW0sXG4gIE1hcENvbnRyb2xNYXBMZWdlbmQsXG4gIE1hcENvbnRyb2xzLFxuICBVaVN0YXRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCA9ICdsYXllcic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RBTCA9IEFERF9EQVRBX0lEO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdWlTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dWlTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIC8vIGNsaWNrIGJ1dHRvbiB0byBjbG9zZSBzaWRlIHBhbmVsXG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdWlTdGF0ZTogdWlTdGF0ZVVwZGF0ZXJzLnRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHVpU3RhdGUsIHtwYXlsb2FkOiBudWxsfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdWlTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmNvbnN0IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTOiBNYXBDb250cm9sSXRlbSA9IHtcbiAgc2hvdzogdHJ1ZSxcbiAgYWN0aXZlOiBmYWxzZSxcbiAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgLy8gZGVmaW5lcyB3aGljaCBtYXAgaW5kZXggdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggKHRocm91Z2ggbWFwIGNvbnRyb2xzKVxuICBhY3RpdmVNYXBJbmRleDogMFxufTtcblxuY29uc3QgREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wgPSB7XG4gIC4uLkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTLFxuICBkaXNhYmxlRWRpdDogZmFsc2Vcbn07XG4vKipcbiAqIEEgbGlzdCBvZiBtYXAgY29udHJvbCB2aXNpYmlsaXR5IGFuZCB3aGV0aGVyIGlzIGl0IGFjdGl2ZS5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHZpc2libGVMYXllcnMgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSBtYXBMZWdlbmQgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSB0b2dnbGUzZCBEZWZhdWx0OiBge3Nob3c6IHRydWV9YFxuICogQHByb3BlcnR5IHNwbGl0TWFwIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgbWFwRHJhdyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExvY2FsZSBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcFRoZW1lIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgdmlld3BvcnRKc29uIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwSW5mbyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogdHJ1ZX1gLiBgc2hvd2AgaGlkZXMgdGhlIG9uLW1hcCBuYW1lIGFuZCBkZXNjcmlwdGlvbi5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQX0NPTlRST0xTOiBNYXBDb250cm9scyA9IHtcbiAgLi4uKE9iamVjdC5rZXlzKE1BUF9DT05UUk9MUykgYXMgQXJyYXk8a2V5b2YgdHlwZW9mIE1BUF9DT05UUk9MUz4pLnJlZHVjZShcbiAgICAoZmluYWwsIGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5maW5hbCxcbiAgICAgIFtjdXJyZW50XTpcbiAgICAgICAgY3VycmVudCA9PT0gTUFQX0NPTlRST0xTLm1hcExlZ2VuZFxuICAgICAgICAgID8gREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0xcbiAgICAgICAgICA6IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTXG4gICAgfSksXG4gICAge30gYXMgTWFwQ29udHJvbHNcbiAgKSxcbiAgLy8gT3BlbiBieSBkZWZhdWx0IHNvIGEgc2F2ZWQgdGl0bGUgc2hvd3Mgb24gbG9hZC4gQW4gZW1wdHkgbWFwIHN0aWxsIGhpZGVzIHRoZSBjYXJkLlxuICBtYXBJbmZvOiB7XG4gICAgLi4uREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMsXG4gICAgYWN0aXZlOiB0cnVlXG4gIH1cbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbWFnZSBleHBvcnQgY29uZmlnXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByYXRpbyBEZWZhdWx0OiBgJ1NDUkVFTidgLFxuICogQHByb3BlcnR5IHJlc29sdXRpb24gRGVmYXVsdDogYCdPTkVfWCdgLFxuICogQHByb3BlcnR5IGxlZ2VuZCBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IGNoYXJ0cyBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IHRyYW5zcGFyZW50QmFja2dyb3VuZCBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IG1hcEggRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBtYXBXIERlZmF1bHQ6IDAsXG4gKiBAcHJvcGVydHkgaW1hZ2VTaXplIERlZmF1bHQ6IHt6b29tT2Zmc2V0OiAwLCBzY2FsZTogMSwgaW1hZ2VXOiAwLCBpbWFnZUg6IDB9LFxuICogQHByb3BlcnR5IGltYWdlRGF0YVVyaSBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGV4cG9ydGluZyBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXJyb3IgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGVzY2FwZVhodG1sRm9yV2VicGFjayBEZWZhdWx0OiBmcm9tIGFwcGxpY2F0aW9uIGNvbmZpZyAoYXV0by1kZXRlY3RlZDogYHRydWVgIGZvciB3ZWJwYWNrKVxuICogQHByb3BlcnR5IGZpbGVOYW1lIERlZmF1bHQ6IGAnJ2BcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0lNQUdFOiBFeHBvcnRJbWFnZSA9IHtcbiAgLy8gdXNlciBvcHRpb25zXG4gIHJhdGlvOiBFWFBPUlRfSU1HX1JBVElPUy5TQ1JFRU4sXG4gIHJlc29sdXRpb246IFJFU09MVVRJT05TLk9ORV9YLFxuICBsZWdlbmQ6IGZhbHNlLFxuICBjaGFydHM6IGZhbHNlLFxuICB0cmFuc3BhcmVudEJhY2tncm91bmQ6IGZhbHNlLFxuICBtYXBIOiAwLFxuICBtYXBXOiAwLFxuICBpbWFnZVNpemU6IHtcbiAgICB6b29tT2Zmc2V0OiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIGltYWdlVzogMCxcbiAgICBpbWFnZUg6IDBcbiAgfSxcbiAgLy8gd2hlbiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGUgbW9jayBtYXAgdmlld3BvcnQgd2lsbCBtb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZGF0YVxuICBjZW50ZXI6IGZhbHNlLFxuICAvLyBleHBvcnRpbmcgc3RhdGVcbiAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgLy8gZXhwb3J0aW5nOiB1c2VkIHRvIGF0dGFjaCBwbG90LWNvbnRhaW5lciB0byBkb21cbiAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgLy8gcHJvY2Vzc2luZzogdXNlZCBhcyBsb2FkaW5nIGluZGljYXRvciB3aGVuIGV4cG9ydCBpbWFnZSBpcyBiZWluZyBwcm9kdWNlZFxuICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgZXJyb3I6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIGFwcGx5IGZpeCBmb3IgdWdsaWZ5IGVycm9yIGluIGRvbS10by1pbWFnZSAoZnJvbSBhcHBsaWNhdGlvbiBjb25maWcsIGF1dG8tZGV0ZWN0cyBidWlsZCB0b29sKVxuICBlc2NhcGVYaHRtbEZvcldlYnBhY2s6IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZXNjYXBlWGh0bWxGb3JXZWJwYWNrLFxuICBmaWxlTmFtZTogJydcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQURfRklMRVMgPSB7XG4gIGZpbGVMb2FkaW5nOiBmYWxzZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYGV4cG9ydERhdGFgIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBzZWxlY3RlZERhdGFzZXQgRGVmYXVsdDogYCcnYCxcbiAqIEBwcm9wZXJ0eSBkYXRhVHlwZSBEZWZhdWx0OiBgJ2NzdidgLFxuICogQHByb3BlcnR5IGZpbHRlcmVkIERlZmF1bHQ6IGB0cnVlYCxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0RBVEE6IEV4cG9ydERhdGEgPSB7XG4gIHNlbGVjdGVkRGF0YXNldDogJycsXG4gIGRhdGFUeXBlOiBFWFBPUlRfREFUQV9UWVBFLkNTVixcbiAgZmlsdGVyZWQ6IHRydWVcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTlMgPSBbXTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiAtIERlZmF1bHQ6IG51bGwsIHRoaXMgaXMgdXNlZCB3aGVuIHdlIHByb3ZpZGUgYSBkZWZhdWx0IG1hcGJveCB0b2tlbiBmb3IgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2ZcbiAqIEBwcm9wZXJ0eSB1c2VyTWFwYm94VG9rZW4gLSBEZWZhdWx0OiAnJywgbWFwYm94IHRva2VuIHByb3ZpZGVkIGJ5IHVzZXIgdGhyb3VnaCBpbnB1dCBmaWVsZFxuICogQHByb3BlcnR5IG1vZGUgLSBEZWZhdWx0OiAnUkVBRCcsIHJlYWQgb25seSBvciBlZGl0YWJsZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSFRNTDogRXhwb3J0SHRtbCA9IHtcbiAgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW46IG51bGwsXG4gIHVzZXJNYXBib3hUb2tlbjogJycsXG4gIG1vZGU6IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEXG59O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGhhc0RhdGEgLSBEZWZhdWx0OiAndHJ1ZScsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9KU09OOiBFeHBvcnRKc29uID0ge1xuICBoYXNEYXRhOiB0cnVlXG59O1xuXG4vKipcbiAqIEV4cG9ydCBNYXAgQ29uZmlnXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBIVE1MIC0gRGVmYXVsdDogJ0RFRkFVTFRfRVhQT1JUX0hUTUwnLFxuICogQHByb3BlcnR5IEpTT04gLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSlNPTicsXG4gKiBAcHJvcGVydHkgZm9ybWF0IC0gRGVmYXVsdDogJ0hUTUwnLFxuICogQHByb3BlcnR5IGZpbGVOYW1lIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgaW5jbHVkZUxheWVyQXBpS2V5cyBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfTUFQOiBFeHBvcnRNYXAgPSB7XG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IERFRkFVTFRfRVhQT1JUX0hUTUwsXG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IERFRkFVTFRfRVhQT1JUX0pTT04sXG4gIGZvcm1hdDogRVhQT1JUX01BUF9GT1JNQVRTLkhUTUwsXG4gIGZpbGVOYW1lOiAnJyxcbiAgLy8gUHJpdmF0ZSBsYXllciB0b2tlbnMgc3RheSBvdXQgb2YgdGhlIGZpbGUgdW5sZXNzIHRoZSB1c2VyIG9wdHMgaW4uXG4gIGluY2x1ZGVMYXllckFwaUtleXM6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0VmlkZW9gIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBtZWRpYVR5cGUgRGVmYXVsdDogYCd3ZWJtJ2BcbiAqIEBwcm9wZXJ0eSBjYW1lcmFQcmVzZXQgRGVmYXVsdDogYCdOb25lJ2BcbiAqIEBwcm9wZXJ0eSBmaWxlTmFtZSBEZWZhdWx0OiBgJ2tlcGxlci5nbCdgXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJzEyODB4NzIwJ2BcbiAqIEBwcm9wZXJ0eSBkdXJhdGlvbk1zIERlZmF1bHQ6IGAxMDAwYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfVklERU86IEV4cG9ydFZpZGVvID0ge1xuICBtZWRpYVR5cGU6ICd3ZWJtJywgLy8gdXNlIHdlYm0gYXMgZGVmYXVsdCBhcyBnaWYgZXhwb3J0IHRlbmRzIHRvIGZyZWV6ZSBvbiBsYXJnZXIgcmVjb3JkaW5nc1xuICBjYW1lcmFQcmVzZXQ6ICdOb25lJyxcbiAgZmlsZU5hbWU6ICdrZXBsZXIuZ2wnLFxuICByZXNvbHV0aW9uOiAnMTI4MHg3MjAnLFxuICBkdXJhdGlvbk1zOiAxMDAwLFxuICBzd2lwZVN0YXJ0UGN0OiAwLFxuICBzd2lwZUVuZFBjdDogMTAwLFxuICBzd2lwZUVhc2luZzogJ2Vhc2UtaW4tb3V0J1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHVpU3RhdGVgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByZWFkT25seSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgYWN0aXZlU2lkZVBhbmVsIERlZmF1bHQ6IGAnbGF5ZXInYFxuICogQHByb3BlcnR5IGN1cnJlbnRNb2RhbCBEZWZhdWx0OiBgJ2FkZERhdGEnYFxuICogQHByb3BlcnR5IGRhdGFzZXRLZXlUb1JlbW92ZSBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSBkYXRhc2V0VG9SZXBsYWNlSWQgRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgdmlzaWJsZURyb3Bkb3duIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IGV4cG9ydEltYWdlIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfSU1BR0VgXSgjZGVmYXVsdF9leHBvcnRfaW1hZ2UpXG4gKiBAcHJvcGVydHkgZXhwb3J0RGF0YSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0RBVEFgXSgjZGVmYXVsdF9leHBvcnRfZGF0YSlcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXAgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9NQVBgXSgjZGVmYXVsdF9leHBvcnRfbWFwKVxuICogQHByb3BlcnR5IG1hcENvbnRyb2xzIERlZmF1bHQ6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbG9hZEZpbGVzXG4gKiBAcHJvcGVydHkgbG9jYWxlIERlZmF1bHQ6IGAnZW4nYFxuICogQHByb3BlcnR5IHRoZW1lIERlZmF1bHQ6IGAnZGFyaydgXG4gKiBAcHJvcGVydHkgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGUgRGVmYXVsdDogYHRydWVgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1VJX1NUQVRFOiBVaVN0YXRlID0ge1xuICByZWFkT25seTogZmFsc2UsXG4gIGFjdGl2ZVNpZGVQYW5lbDogREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCxcbiAgY3VycmVudE1vZGFsOiBERUZBVUxUX01PREFMLFxuICBkYXRhc2V0S2V5VG9SZW1vdmU6IG51bGwsXG4gIGRhdGFzZXRUb1JlcGxhY2VJZDogbnVsbCxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsLFxuICAvLyBleHBvcnQgaW1hZ2UgbW9kYWwgdWlcbiAgZXhwb3J0SW1hZ2U6IERFRkFVTFRfRVhQT1JUX0lNQUdFLFxuICAvLyBleHBvcnQgZGF0YSBtb2RhbCB1aVxuICBleHBvcnREYXRhOiBERUZBVUxUX0VYUE9SVF9EQVRBLFxuICAvLyBodG1sIGV4cG9ydFxuICBleHBvcnRNYXA6IERFRkFVTFRfRVhQT1JUX01BUCxcbiAgLy8gZXhwb3J0IHZpZGVvIG1vZGFsIHVpXG4gIGV4cG9ydFZpZGVvOiBERUZBVUxUX0VYUE9SVF9WSURFTyxcbiAgLy8gbWFwIGNvbnRyb2wgcGFuZWxzXG4gIG1hcENvbnRyb2xzOiBERUZBVUxUX01BUF9DT05UUk9MUyxcbiAgLy8gdWkgbm90aWZpY2F0aW9uc1xuICBub3RpZmljYXRpb25zOiBERUZBVUxUX05PVElGSUNBVElPTlMsXG4gIC8vIGxvYWQgZmlsZXNcbiAgbG9hZEZpbGVzOiBERUZBVUxUX0xPQURfRklMRVMsXG4gIC8vIExvY2FsZSBvZiB0aGUgVUlcbiAgbG9jYWxlOiBMT0NBTEVfQ09ERVMuZW4sXG4gIC8vIFRoZW1lIG9mIHRoZSBVSSAoYGxpZ2h0YCB8IGBkYXJrYCB8IGBzcGFjZWApLiBGaXJzdCBvZiBgdGhlbWVzYCBpcyB0aGUgZGVmYXVsdCB3aGVuIHNldC5cbiAgdGhlbWU6IFRIRU1FLmRhcmssXG4gIGxheWVyUGFuZWxMaXN0VmlldzogJ2xpc3QnLFxuICBmaWx0ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCcsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiB0cnVlXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0VWlTdGF0ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICBhY3Rpb246IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ0lOSVQnXTtcbiAgICBwYXlsb2FkOiBLZXBsZXJHbEluaXRQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgaW5pdGlhbFVpU3RhdGUgPSAoYWN0aW9uLnBheWxvYWQgfHwge30pLmluaXRpYWxVaVN0YXRlIHx8IHt9O1xuICBjb25zdCB0aGVtZXMgPSBnZXRDb25maWd1cmVkVGhlbWVzKCk7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IGluaXRpYWxVaVN0YXRlLnRoZW1lID8/IHN0YXRlLnRoZW1lO1xuICBjb25zdCB0aGVtZSA9XG4gICAgdGhlbWVzLmxlbmd0aCA9PT0gMCA/IHJlcXVlc3RlZCA6IHRoZW1lcy5pbmNsdWRlcyhyZXF1ZXN0ZWQpID8gcmVxdWVzdGVkIDogZ2V0RGVmYXVsdFVpVGhlbWUoKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC4uLmluaXRpYWxVaVN0YXRlLFxuICAgIHRoZW1lXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHNpZGUgcGFuZWwgdG8gYmUgc2hvd24sIG9uZSBvZiBgbGF5ZXJgLCBgZmlsdGVyYCwgYGludGVyYWN0aW9uYCwgYG1hcGAuIGNsb3NlIHNpZGUgcGFuZWwgaWYgYG51bGxgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgcmV0dXJuIGlkID09PSBzdGF0ZS5hY3RpdmVTaWRlUGFuZWxcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWw6IGlkXG4gICAgICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGFuZCBoaWRlIG1vZGFsIGRpYWxvZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtYWN0aW9uLnBheWxvYWQgaWQgb2YgbW9kYWwgdG8gYmUgc2hvd24sIG51bGwgdG8gaGlkZSBtb2RhbHMuIE9uZSBvZjpcbiAqICAtIFtgREFUQV9UQUJMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RhdGFfdGFibGVfaWQpXG4gKiAgLSBbYERFTEVURV9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGVsZXRlX2RhdGFfaWQpXG4gKiAgLSBbYEFERF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX2RhdGFfaWQpXG4gKiAgLSBbYEVYUE9SVF9JTUFHRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9pbWFnZV9pZClcbiAqICAtIFtgRVhQT1JUX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfZGF0YV9pZClcbiAqICAtIFtgQUREX01BUF9TVFlMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9tYXBfc3R5bGVfaWQpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBpZCxcbiAgLy8gQWRkIERhdGEgYW5kIGV2ZXJ5IG90aGVyIG1vZGFsIG9wZW4gbGVhdmUgcmVwbGFjZSBtb2RlLlxuICAvLyBSZXBsYWNlIG1vZGUgaXMgZW50ZXJlZCBvbmx5IHRocm91Z2ggb3BlblJlcGxhY2VEYXRhc2V0TW9kYWwuXG4gIGRhdGFzZXRUb1JlcGxhY2VJZDogbnVsbFxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGxcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBzaWRlIHBhbmVsIGNsb3NlIGJ1dHRvbiBvbiB0b3AgbGVmdCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtzaG93fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGU6IHNob3dcbn0pO1xuXG4vLyBNYXAgY29udHJvbCBkcm9wZG93bnMvbWVudXMgdGhhdCBvdmVybGFwIGVhY2ggb3RoZXIgdmlzdWFsbHkgYW5kIHRoZXJlZm9yZVxuLy8gc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZTogb3BlbmluZyBvbmUgY2xvc2VzIGFsbCB0aGUgb3RoZXJzLlxuLy8gKHNwbGl0L3ZpZXctbW9kZSBtZW51LCB0b3AvM2QvZ2xvYmUgbWVudSwgcG9seWdvbiBkcmF3IHRvb2wsIGxhbmd1YWdlIG1lbnUpXG5leHBvcnQgY29uc3QgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUzogc3RyaW5nW10gPSBbXG4gIE1BUF9DT05UUk9MUy5zcGxpdE1hcCxcbiAgTUFQX0NPTlRST0xTLnRvZ2dsZTNkLFxuICBNQVBfQ09OVFJPTFMubWFwRHJhdyxcbiAgTUFQX0NPTlRST0xTLm1hcExvY2FsZVxuXTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBpbmRleCA9IDB9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBsZXQgdXBkYXRlZFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gVGhlIG92ZXJsYXBwaW5nIG1hcCBjb250cm9sIG1lbnVzIHNob3VsZCBiZSBtdXR1YWxseSBleGNsdXNpdmU6IHdoZW4gb25lIG9mXG4gIC8vIHRoZW0gaXMgYmVpbmcgb3BlbmVkLCBkZWFjdGl2YXRlIGV2ZXJ5IG90aGVyIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBhY3RpdmVcbiAgLy8gc28gdGhlaXIgZHJvcGRvd25zIG5ldmVyIG92ZXJsYXAgb24gc2NyZWVuLlxuICBjb25zdCBpc09wZW5pbmcgPSAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdPy5hY3RpdmU7XG4gIGlmIChpc09wZW5pbmcgJiYgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUy5pbmNsdWRlcyhwYW5lbElkKSkge1xuICAgIGNvbnN0IG5leHRNYXBDb250cm9scyA9IHsuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHN9O1xuICAgIGxldCBkaWREZWFjdGl2YXRlID0gZmFsc2U7XG4gICAgTVVUVUFMTFlfRVhDTFVTSVZFX01BUF9DT05UUk9MUy5mb3JFYWNoKGNvbnRyb2xJZCA9PiB7XG4gICAgICBpZiAoY29udHJvbElkICE9PSBwYW5lbElkICYmIG5leHRNYXBDb250cm9sc1tjb250cm9sSWRdPy5hY3RpdmUpIHtcbiAgICAgICAgbmV4dE1hcENvbnRyb2xzW2NvbnRyb2xJZF0gPSB7Li4ubmV4dE1hcENvbnRyb2xzW2NvbnRyb2xJZF0sIGFjdGl2ZTogZmFsc2V9O1xuICAgICAgICBkaWREZWFjdGl2YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGlkRGVhY3RpdmF0ZSkge1xuICAgICAgdXBkYXRlZFN0YXRlID0gey4uLnVwZGF0ZWRTdGF0ZSwgbWFwQ29udHJvbHM6IG5leHRNYXBDb250cm9sc307XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXToge1xuICAgICAgICAuLi4odXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdIGFzIE1hcENvbnRyb2xJdGVtKSxcbiAgICAgICAgYWN0aXZlOiAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdPy5hY3RpdmUsXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIG1hcCBjb250cm9sIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzaG93fX06IFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUubWFwQ29udHJvbHM/LltwYW5lbElkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgICBzaG93OiBCb29sZWFuKHNob3cpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgc2V0dGluZ3N9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IG1hcENvbnRyb2wgPSBzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdIGFzIE1hcENvbnRyb2xNYXBMZWdlbmQgfCB1bmRlZmluZWQ7XG4gIGlmICghbWFwQ29udHJvbCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLm1hcENvbnRyb2wsXG4gICAgICAgIHNldHRpbmdzOiB7Li4ubWFwQ29udHJvbC5zZXR0aW5ncywgLi4uc2V0dGluZ3N9XG4gICAgICB9IGFzIE1hcENvbnRyb2xNYXBMZWdlbmRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5EZWxldGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldEtleVRvUmVtb3ZlfTogVUlTdGF0ZUFjdGlvbnMuT3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBERUxFVEVfREFUQV9JRCxcbiAgZGF0YXNldEtleVRvUmVtb3ZlXG59KTtcblxuLyoqXG4gKiBPcGVuIHRoZSBhZGQtZGF0YSBtb2RhbCBzbyB0aGUgbmV4dCBjb25maXJtZWQgdXBsb2FkIHJlcGxhY2VzIG9uZSBkYXRhc2V0LlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlblJlcGxhY2VEYXRhc2V0TW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXRUb1JlcGxhY2VJZH06IFVJU3RhdGVBY3Rpb25zLk9wZW5SZXBsYWNlRGF0YXNldE1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBBRERfREFUQV9JRCxcbiAgZGF0YXNldFRvUmVwbGFjZUlkXG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlYCBvcHRpb25zIHN1Y2ggYXMgYGxlZ2VuZGAgYW5kIGBjaGFydHNgIHRvIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbmV3U2V0dGluZ306IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB1cGRhdGVkID0gey4uLnN0YXRlLmV4cG9ydEltYWdlLCAuLi5uZXdTZXR0aW5nfTtcbiAgY29uc3QgaW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHVwZGF0ZWQpIHx8IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi51cGRhdGVkLFxuICAgICAgaW1hZ2VTaXplXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBpbWFnZSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVVyaX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBpZiAoZGF0YVVyaSA9PT0gc3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VEYXRhVXJpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZXhwb3J0SW1hZ2U6IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgICBpbWFnZURhdGFVcmk6IGRhdGFVcmlcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGVycm9yfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZXJyb3JcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGNhY2hlZCBleHBvcnQgaW1hZ2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgY2VudGVyOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydFZpZGVvYCBzZXR0aW5nczogbWVkaWFUeXBlLCBjYW1lcmFQcmVzZXQsIGZpbGVOYW1lLCByZXNvbHV0aW9uLCBkdXJhdGlvbk1zXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbmV3IHZpZGVvIGV4cG9ydCBzZXR0aW5nc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRWaWRlbzoge1xuICAgIC4uLnN0YXRlLmV4cG9ydFZpZGVvLFxuICAgIC4uLm5ld1NldHRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogU3RhcnQgaW1hZ2UgZXhwb3J0aW5nIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtVaVN0YXRlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogb3B0aW9ucyA9IHt9fToge3BheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+fVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2V0dGluZ3MgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleHBvcnRpbmc6IHRydWVcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV8oW1xuICAgIGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIsXG4gICAgYXBwbHlfKHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIsIHBheWxvYWRfKGltYWdlU2V0dGluZ3MpKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIHNlbGVjdGVkRGF0YXNldDogZGF0YXNldFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgZGF0YSBmb3JtYXQgZm9yIGV4cG9ydGluZyBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVR5cGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGRhdGFUeXBlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gZXhwb3J0IGZpbHRlcmVkIGRhdGEsIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbHRlcmVkfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBmaWx0ZXJlZFxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0sXG4gICAgICBoYXNEYXRhOiAhc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXS5oYXNEYXRhXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiB3aGV0aGVyIHRvIGV4cG9ydCBhIG1hcGJveCBhY2Nlc3MgdG8gSFRNTCBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB1c2VyTWFwYm94VG9rZW59OiBVSVN0YXRlQWN0aW9ucy5TZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIHVzZXJNYXBib3hUb2tlblxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IG1hcCBmb3JtYXRcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGZvcm1hdCB0byB1c2UgdG8gZXhwb3J0IHRoZSBtYXAgaW50b1xuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZm9ybWF0fTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBmb3JtYXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gZXhwb3J0aW5nIGFuIEhUTUwgb3IgSlNPTiBtYXBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwRmlsZU5hbWVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbGVOYW1lfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRmlsZU5hbWVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgZmlsZU5hbWVcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBleHBvcnQgaHRtbCBtYXAgbW9kZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgdG8gYmUgc2V0IChhdmFpbGFibGUgbW9kZXM6IEVYUE9SVF9IVE1MX01BUF9NT0RFUylcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbW9kZX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICBtb2RlXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgYXBwbGljYXRpb24gYnJhbmRpbmcgb3ZlcnJpZGVzIGZvciBleHBvcnRlZCBtYXBzLlxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgYXBwbGljYXRpb24gbmFtZSBhbmQvb3Igd2Vic2l0ZSBvdmVycmlkZXNcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBCcmFuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydE1hcEJyYW5kaW5nVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC4uLnBheWxvYWRcbiAgfVxufSk7XG5cbi8qKlxuICogV2hldGhlciB0byBrZWVwIGxheWVyIGFjY2VzcyB0b2tlbnMgaW4gZXhwb3J0ZWQgSFRNTCBhbmQgSlNPTiBtYXBzLlxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgLSBpbmNsdWRlIGxheWVyIEFQSSBrZXlzXG4gKiBAcmV0dXJuIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW5jbHVkZUxheWVyQXBpS2V5c1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaW5jbHVkZUxheWVyQXBpS2V5c306IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEluY2x1ZGVMYXllckFwaUtleXNVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgaW5jbHVkZUxheWVyQXBpS2V5c1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAqIFVwZGF0ZXMgYSBub3RpZmljYXRpb24gaW4gY2FzZSBvZiBtYXRjaGluZyBpZHMuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGFyYW1zIG9mIGEgbm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZH06IFVJU3RhdGVBY3Rpb25zLkFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBvbGROb3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucyB8fCBbXTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBwYXlsb2FkSWQgPSBwYXlsb2FkPy5pZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVG9VcGRhdGUgPSBwYXlsb2FkSWQgPyBvbGROb3RpZmljYXRpb25zLmZpbmQobiA9PiBuLmlkID09PSBwYXlsb2FkSWQpIDogbnVsbDtcblxuICBsZXQgbm90aWZpY2F0aW9ucztcbiAgaWYgKG5vdGlmaWNhdGlvblRvVXBkYXRlKSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IG9sZE5vdGlmaWNhdGlvbnMubWFwKG4gPT5cbiAgICAgIG4uaWQgPT09IHBheWxvYWRJZCA/IGNyZWF0ZU5vdGlmaWNhdGlvbih7Li4ucGF5bG9hZCwgY291bnQ6IG4uY291bnQgKyAxfSkgOiBuXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBub3RpZmljYXRpb25zID0gWy4uLm9sZE5vdGlmaWNhdGlvbnMsIGNyZWF0ZU5vdGlmaWNhdGlvbihwYXlsb2FkKV07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBub3RpZmljYXRpb25zfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbm90aWZpY2F0aW9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5SZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBub3RpZmljYXRpb25zOiBzdGF0ZS5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+IG4uaWQgIT09IGlkKVxufSk7XG5cbi8qKlxuICogRmlyZWQgd2hlbiBmaWxlIGxvYWRpbmcgYmVnaW5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogdHJ1ZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWRpbmcgZmlsZSBzdWNjZXNzIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZCBmaWxlIGVycm9yIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5lcnJvclxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlLCB7ZXJyb3J9OiBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uKTogVWlTdGF0ZSA9PlxuICBhZGROb3RpZmljYXRpb25VcGRhdGVyKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZEZpbGVzOiB7XG4gICAgICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBwYXlsb2FkOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciB8fCB7fSkubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwbG9hZCBmaWxlcycsXG4gICAgICAgIHRvcGljOiBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MuZ2xvYmFsXG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBIYW5kbGVzIHRvZ2dsZSBtYXAgc3BsaXQgYW5kIHJlc2V0IGFsbCBtYXAgY29udHJvbCBpbmRleCB0byAwXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwQ29udHJvbHM6IE9iamVjdC5lbnRyaWVzKHN0YXRlLm1hcENvbnRyb2xzKS5yZWR1Y2UoXG4gICAgKGFjYywgZW50cnkpID0+ICh7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZW50cnlbMF1dOiB7XG4gICAgICAgIC4uLihlbnRyeVsxXSBhcyBNYXBDb250cm9sSXRlbSksXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiAwXG4gICAgICB9XG4gICAgfSksXG4gICAge30gYXMgTWFwQ29udHJvbHNcbiAgKVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIG1vZGFsIGRhdGFcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT5cbiAgdG9nZ2xlTW9kYWxVcGRhdGVyKHN0YXRlLCB7cGF5bG9hZDogREFUQV9UQUJMRV9JRH0pO1xuXG4vKipcbiAqIFNldCB0aGUgbG9jYWxlIG9mIHRoZSBVSVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQubG9jYWxlIGxvY2FsZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2NhbGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtsb2NhbGV9fTogVUlTdGF0ZUFjdGlvbnMuU2V0TG9jYWxlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9jYWxlXG59KTtcblxuLyoqXG4gKiBTZXQgdGhlIHRoZW1lIG9mIHRoZSBVSVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQudGhlbWUgdGhlbWVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VGhlbWVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHt0aGVtZX19OiBVSVN0YXRlQWN0aW9ucy5TZXRUaGVtZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHRoZW1lXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbGF5ZXIgcGFuZWwgbGlzdCB2aWV3XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbGF5ZXIgcGFuZWwgbGlzdFZpZXcgdmFsdWUuIENhbiBiZSAnbGlzdCcgb3IgJ3NvcnRCeURhdGFzZXQnXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVBhbmVsTGlzdFZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBsaXN0Vmlld319OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVQYW5lbExpc3RWaWV3QWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVQcm9wID1cbiAgICBwYW5lbElkID09PSAnbGF5ZXInXG4gICAgICA/ICdsYXllclBhbmVsTGlzdFZpZXcnXG4gICAgICA6IHBhbmVsSWQgPT09ICdmaWx0ZXInXG4gICAgICA/ICdmaWx0ZXJQYW5lbExpc3RWaWV3J1xuICAgICAgOiBudWxsO1xuICBpZiAoIXN0YXRlUHJvcCB8fCBzdGF0ZVtzdGF0ZVByb3BdID09PSBsaXN0Vmlldykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIFtzdGF0ZVByb3BdOiBsaXN0Vmlld1xuICB9O1xufTtcblxuLyoqXG4gKiBNZXJnZSByZWNlaXZlZCB1aSBzdGF0ZSBjb25maWcgd2hlbiBsb2FkaW5nIGEgc2F2ZWQgbWFwXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgc2F2ZWQgbWFwIGNvbmZpZyBge21hcFN0eWxlLCB2aXNTdGF0ZSwgbWFwU3RhdGUsIHVpU3RhdGV9YFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnfVxuICB9OiB7XG4gICAgdHlwZT86ICh0eXBlb2YgQWN0aW9uVHlwZXMpWydSRUNFSVZFX01BUF9DT05GSUcnXTtcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IHt1aVN0YXRlfSA9IGNvbmZpZyB8fCB7fTtcbiAgaWYgKCF1aVN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlKSB7XG4gICAgY29uc3QgY3VycmVudExlZ2VuZCA9IG5ld1N0YXRlLm1hcENvbnRyb2xzLm1hcExlZ2VuZDtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgbWFwQ29udHJvbHM6IHtcbiAgICAgICAgLi4ubmV3U3RhdGUubWFwQ29udHJvbHMsXG4gICAgICAgIG1hcExlZ2VuZDoge1xuICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgLi4uY3VycmVudExlZ2VuZCxcbiAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAodWlTdGF0ZS5tYXBDb250cm9scz8uY2hhcnQ/LmFjdGl2ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRDaGFydCA9IG5ld1N0YXRlLm1hcENvbnRyb2xzLmNoYXJ0O1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBtYXBDb250cm9sczoge1xuICAgICAgICAuLi5uZXdTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgICAgY2hhcnQ6IHtcbiAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgIC4uLmN1cnJlbnRDaGFydCxcbiAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBIb25vciBhbiBleHBsaWNpdCBjb2xsYXBzZWQgb3IgaGlkZGVuIHN0YXRlLiBBIG1pc3Npbmcga2V5IGtlZXBzIHRoZSBkZWZhdWx0IChzaG93biwgb3BlbikuXG4gIGNvbnN0IHNhdmVkTWFwSW5mbyA9IHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcEluZm87XG4gIGNvbnN0IHNhdmVkTWFwSW5mb0FjdGl2ZSA9IHNhdmVkTWFwSW5mbz8uYWN0aXZlO1xuICBjb25zdCBzYXZlZE1hcEluZm9TaG93ID0gc2F2ZWRNYXBJbmZvPy5zaG93O1xuICBpZiAodHlwZW9mIHNhdmVkTWFwSW5mb0FjdGl2ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBzYXZlZE1hcEluZm9TaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICBjb25zdCBjdXJyZW50TWFwSW5mbyA9IG5ld1N0YXRlLm1hcENvbnRyb2xzLm1hcEluZm87XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBtYXBJbmZvOiB7XG4gICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgLi4uY3VycmVudE1hcEluZm8sXG4gICAgICAgICAgLi4uKHR5cGVvZiBzYXZlZE1hcEluZm9TaG93ID09PSAnYm9vbGVhbicgPyB7c2hvdzogc2F2ZWRNYXBJbmZvU2hvd30gOiB7fSksXG4gICAgICAgICAgLi4uKHR5cGVvZiBzYXZlZE1hcEluZm9BY3RpdmUgPT09ICdib29sZWFuJyA/IHthY3RpdmU6IHNhdmVkTWFwSW5mb0FjdGl2ZX0gOiB7fSksXG4gICAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBpZiAodWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5zZXR0aW5ncykge1xuICAgIG5ld1N0YXRlID0gc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBzZXR0aW5nczogdWlTdGF0ZS5tYXBDb250cm9scy5tYXBMZWdlbmQuc2V0dGluZ3N9XG4gICAgfSBhcyBVSVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyQWN0aW9uKTtcbiAgfVxuXG4gIGlmICh1aVN0YXRlLmxvY2FsZSkge1xuICAgIG5ld1N0YXRlID0gc2V0TG9jYWxlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge2xvY2FsZTogdWlTdGF0ZS5sb2NhbGV9XG4gICAgfSBhcyBVSVN0YXRlQWN0aW9ucy5TZXRMb2NhbGVVcGRhdGVyQWN0aW9uKTtcbiAgfVxuXG4gIGlmICh1aVN0YXRlLnRoZW1lKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRUaGVtZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHt0aGVtZTogdWlTdGF0ZS50aGVtZX1cbiAgICB9IGFzIFVJU3RhdGVBY3Rpb25zLlNldFRoZW1lVXBkYXRlckFjdGlvbik7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFhQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFRQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQThELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMs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