@kepler.gl/reducers 3.3.0-alpha.5 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +491 -0
- package/dist/cjs/composer-helpers.js +101 -0
- package/dist/cjs/composers.js +22 -0
- package/dist/cjs/core.js +105 -0
- package/dist/cjs/data-utils.js +53 -0
- package/dist/cjs/export-utils.js +91 -0
- package/dist/{index.js → cjs/index.js} +1 -1
- package/dist/cjs/interaction-utils.js +105 -0
- package/dist/cjs/layer-utils.js +635 -0
- package/dist/cjs/map-state-updaters.js +654 -0
- package/dist/cjs/map-state.js +35 -0
- package/dist/cjs/map-style-updaters.js +660 -0
- package/dist/cjs/map-style.js +33 -0
- package/dist/cjs/merger-handler.js +105 -0
- package/dist/cjs/middleware.js +27 -0
- package/dist/cjs/provider-state-updaters.js +465 -0
- package/dist/cjs/provider-state.js +34 -0
- package/dist/cjs/root.js +207 -0
- package/dist/cjs/ui-state-updaters.js +905 -0
- package/dist/cjs/ui-state.js +36 -0
- package/dist/cjs/vis-state-merger.js +1193 -0
- package/dist/cjs/vis-state-selectors.js +30 -0
- package/dist/cjs/vis-state-updaters.js +4114 -0
- package/dist/cjs/vis-state.js +35 -0
- package/dist/{combined-updaters.js → esm/combined-updaters.js} +74 -81
- package/dist/esm/composer-helpers.js +85 -0
- package/dist/esm/composers.js +14 -0
- package/dist/esm/core.js +101 -0
- package/dist/esm/data-utils.js +47 -0
- package/dist/esm/export-utils.js +86 -0
- package/dist/esm/index.js +62 -0
- package/dist/esm/interaction-utils.js +96 -0
- package/dist/esm/layer-utils.js +602 -0
- package/dist/esm/map-state-updaters.js +646 -0
- package/dist/esm/map-state.js +29 -0
- package/dist/esm/map-style-updaters.js +652 -0
- package/dist/esm/map-style.js +27 -0
- package/dist/esm/merger-handler.js +96 -0
- package/dist/esm/middleware.js +19 -0
- package/dist/esm/provider-state-updaters.js +458 -0
- package/dist/esm/provider-state.js +28 -0
- package/dist/esm/root.js +201 -0
- package/dist/esm/ui-state-updaters.js +900 -0
- package/dist/esm/ui-state.js +30 -0
- package/dist/esm/vis-state-merger.js +1161 -0
- package/dist/esm/vis-state-selectors.js +24 -0
- package/dist/esm/vis-state-updaters.js +4035 -0
- package/dist/esm/vis-state.js +29 -0
- package/package.json +29 -20
- package/dist/composer-helpers.js +0 -101
- package/dist/composers.js +0 -22
- package/dist/core.js +0 -105
- package/dist/data-utils.js +0 -53
- package/dist/export-utils.js +0 -91
- package/dist/interaction-utils.js +0 -105
- package/dist/layer-utils.js +0 -635
- package/dist/map-state-updaters.js +0 -649
- package/dist/map-state.js +0 -35
- package/dist/map-style-updaters.js +0 -660
- package/dist/map-style.js +0 -33
- package/dist/merger-handler.js +0 -105
- package/dist/middleware.js +0 -27
- package/dist/provider-state-updaters.js +0 -465
- package/dist/provider-state.js +0 -34
- package/dist/root.js +0 -207
- package/dist/ui-state-updaters.js +0 -905
- package/dist/ui-state.js +0 -36
- package/dist/vis-state-merger.js +0 -1193
- package/dist/vis-state-selectors.js +0 -30
- package/dist/vis-state-updaters.js +0 -4114
- package/dist/vis-state.js +0 -35
package/dist/root.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports["default"] = void 0;
|
|
8
|
-
exports.provideInitialState = provideInitialState;
|
|
9
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
var _actions = require("@kepler.gl/actions");
|
|
13
|
-
var _reduxActions = require("redux-actions");
|
|
14
|
-
var _core = require("./core");
|
|
15
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
17
|
-
// Copyright contributors to the kepler.gl project
|
|
18
|
-
// Extend this type with additional actions to enforce strict typings
|
|
19
|
-
|
|
20
|
-
// INITIAL_STATE
|
|
21
|
-
var initialCoreState = {};
|
|
22
|
-
function provideInitialState(initialState, extraReducers) {
|
|
23
|
-
var coreReducer = (0, _core.coreReducerFactory)(initialState, extraReducers);
|
|
24
|
-
var handleRegisterEntry = function handleRegisterEntry(state, _ref) {
|
|
25
|
-
var _ref$payload = _ref.payload,
|
|
26
|
-
id = _ref$payload.id,
|
|
27
|
-
mint = _ref$payload.mint,
|
|
28
|
-
mapboxApiAccessToken = _ref$payload.mapboxApiAccessToken,
|
|
29
|
-
mapboxApiUrl = _ref$payload.mapboxApiUrl,
|
|
30
|
-
mapStylesReplaceDefault = _ref$payload.mapStylesReplaceDefault,
|
|
31
|
-
initialUiState = _ref$payload.initialUiState;
|
|
32
|
-
// by default, always create a mint state even if the same id already exist
|
|
33
|
-
// if state.id exist and mint=false, keep the existing state
|
|
34
|
-
var previousState = state[id] && mint === false ? state[id] : undefined;
|
|
35
|
-
return _objectSpread(_objectSpread({}, state), {}, (0, _defineProperty2["default"])({}, id, coreReducer(previousState, (0, _actions.keplerGlInit)({
|
|
36
|
-
mapboxApiAccessToken: mapboxApiAccessToken,
|
|
37
|
-
mapboxApiUrl: mapboxApiUrl,
|
|
38
|
-
mapStylesReplaceDefault: mapStylesReplaceDefault,
|
|
39
|
-
initialUiState: initialUiState
|
|
40
|
-
}))));
|
|
41
|
-
};
|
|
42
|
-
var handleDeleteEntry = function handleDeleteEntry(state, _ref2) {
|
|
43
|
-
var id = _ref2.payload.id;
|
|
44
|
-
return Object.keys(state).reduce(function (accu, curr) {
|
|
45
|
-
return _objectSpread(_objectSpread({}, accu), curr === id ? {} : (0, _defineProperty2["default"])({}, curr, state[curr]));
|
|
46
|
-
}, {});
|
|
47
|
-
};
|
|
48
|
-
var handleRenameEntry = function handleRenameEntry(state, _ref4) {
|
|
49
|
-
var _ref4$payload = _ref4.payload,
|
|
50
|
-
oldId = _ref4$payload.oldId,
|
|
51
|
-
newId = _ref4$payload.newId;
|
|
52
|
-
return Object.keys(state).reduce(function (accu, curr) {
|
|
53
|
-
return _objectSpread(_objectSpread({}, accu), (0, _defineProperty2["default"])({}, curr === oldId ? newId : curr, state[curr]));
|
|
54
|
-
}, {});
|
|
55
|
-
};
|
|
56
|
-
return function () {
|
|
57
|
-
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialCoreState;
|
|
58
|
-
var action = arguments.length > 1 ? arguments[1] : undefined;
|
|
59
|
-
// update child states
|
|
60
|
-
Object.keys(state).forEach(function (id) {
|
|
61
|
-
var updateItemState = coreReducer(state[id], (0, _actions._actionFor)(id, action));
|
|
62
|
-
state = (0, _actions._updateProperty)(state, id, updateItemState);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// perform additional state reducing (e.g. switch action.type etc...)
|
|
66
|
-
var handlers = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _actions.ActionTypes.REGISTER_ENTRY, handleRegisterEntry), _actions.ActionTypes.DELETE_ENTRY, handleDeleteEntry), _actions.ActionTypes.RENAME_ENTRY, handleRenameEntry);
|
|
67
|
-
return (0, _reduxActions.handleActions)(handlers, initialCoreState)(state, action);
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
var _keplerGlReducer = provideInitialState(initialCoreState);
|
|
71
|
-
function mergeInitialState() {
|
|
72
|
-
var saved = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
73
|
-
var provided = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
74
|
-
var extraInitialStateKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
75
|
-
var keys = ['mapState', 'mapStyle', 'visState', 'uiState'].concat((0, _toConsumableArray2["default"])(extraInitialStateKeys));
|
|
76
|
-
|
|
77
|
-
// shallow merge each reducer
|
|
78
|
-
var newState = keys.reduce(function (accu, key) {
|
|
79
|
-
return _objectSpread(_objectSpread({}, accu), saved[key] && provided[key] ? (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, saved[key]), provided[key])) : (0, _defineProperty2["default"])({}, key, saved[key] || provided[key] || {}));
|
|
80
|
-
}, {});
|
|
81
|
-
return newState;
|
|
82
|
-
}
|
|
83
|
-
function decorate(target) {
|
|
84
|
-
var savedInitialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
85
|
-
var targetInitialState = savedInitialState;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Returns a kepler.gl reducer that will also pass each action through additional reducers spiecified.
|
|
89
|
-
* The parameter should be either a reducer map or a reducer function.
|
|
90
|
-
* The state passed into the additional action handler is the instance state.
|
|
91
|
-
* It will include all the subreducers `visState`, `uiState`, `mapState` and `mapStyle`.
|
|
92
|
-
* `.plugin` is only meant to be called once when mounting the keplerGlReducer to the store.
|
|
93
|
-
* **Note** This is an advanced option to give you more freedom to modify the internal state of the kepler.gl instance.
|
|
94
|
-
* You should only use this to adding additional actions instead of replacing default actions.
|
|
95
|
-
*
|
|
96
|
-
* @mixin keplerGlReducer.plugin
|
|
97
|
-
* @memberof keplerGlReducer
|
|
98
|
-
* @param {Object|Function} customReducer - A reducer map or a reducer
|
|
99
|
-
* @param {Object} options - options to be applied to custom reducer logic
|
|
100
|
-
* @param {Object} options.override - objects that describe which action to override, e.g. {[ActionTypes.LAYER_TYPE_CHANGE]: true}
|
|
101
|
-
* @public
|
|
102
|
-
* @example
|
|
103
|
-
* const myKeplerGlReducer = keplerGlReducer
|
|
104
|
-
* .plugin({
|
|
105
|
-
* // 1. as reducer map
|
|
106
|
-
* HIDE_AND_SHOW_SIDE_PANEL: (state, action) => ({
|
|
107
|
-
* ...state,
|
|
108
|
-
* uiState: {
|
|
109
|
-
* ...state.uiState,
|
|
110
|
-
* readOnly: !state.uiState.readOnly
|
|
111
|
-
* }
|
|
112
|
-
* })
|
|
113
|
-
* })
|
|
114
|
-
* .plugin(handleActions({
|
|
115
|
-
* // 2. as reducer
|
|
116
|
-
* 'HIDE_MAP_CONTROLS': (state, action) => ({
|
|
117
|
-
* ...state,
|
|
118
|
-
* uiState: {
|
|
119
|
-
* ...state.uiState,
|
|
120
|
-
* mapControls: hiddenMapControl
|
|
121
|
-
* }
|
|
122
|
-
* })
|
|
123
|
-
* }, {}));
|
|
124
|
-
*/
|
|
125
|
-
target.plugin = function plugin(customReducer, options) {
|
|
126
|
-
var _this = this;
|
|
127
|
-
if ((0, _typeof2["default"])(customReducer) === 'object') {
|
|
128
|
-
// if only provided a reducerMap, wrap it in a reducer
|
|
129
|
-
customReducer = (0, _reduxActions.handleActions)(customReducer, {});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// use 'function' keyword to enable 'this'
|
|
133
|
-
// TODO: temporarily making action type to any, will fix that by creating a shared action interface
|
|
134
|
-
return decorate(function () {
|
|
135
|
-
var _options$override;
|
|
136
|
-
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
137
|
-
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
138
|
-
var nextState = state;
|
|
139
|
-
if (action.type && !(options !== null && options !== void 0 && (_options$override = options.override) !== null && _options$override !== void 0 && _options$override[action.type])) {
|
|
140
|
-
nextState = _this(state, action);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// for each entry in the staten
|
|
144
|
-
Object.keys(nextState).forEach(function (id) {
|
|
145
|
-
// update child states
|
|
146
|
-
nextState = (0, _actions._updateProperty)(nextState, id, customReducer(nextState[id], (0, _actions._actionFor)(id, action)));
|
|
147
|
-
});
|
|
148
|
-
return nextState;
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Return a reducer that initiated with custom initial state.
|
|
154
|
-
* The parameter should be an object mapping from `subreducer` name to custom subreducer state,
|
|
155
|
-
* which will be shallow **merged** with default initial state.
|
|
156
|
-
*
|
|
157
|
-
* Default subreducer state:
|
|
158
|
-
* - [`visState`](./vis-state.md#INITIAL_VIS_STATE)
|
|
159
|
-
* - [`mapState`](./map-state.md#INITIAL_MAP_STATE)
|
|
160
|
-
* - [`mapStyle`](./map-style.md#INITIAL_MAP_STYLE)
|
|
161
|
-
* - [`uiState`](./ui-state.md#INITIAL_UI_STATE)
|
|
162
|
-
* @mixin keplerGlReducer.initialState
|
|
163
|
-
* @memberof keplerGlReducer
|
|
164
|
-
* @param {Object} iniSt - custom state to be merged with default initial state
|
|
165
|
-
* @param {Object} extraReducers - optional custom reducers in addition to the default `visState`, `mapState`, `mapStyle`, and `uiState`
|
|
166
|
-
* @public
|
|
167
|
-
* @example
|
|
168
|
-
* const myKeplerGlReducer = keplerGlReducer
|
|
169
|
-
* .initialState({
|
|
170
|
-
* uiState: {readOnly: true}
|
|
171
|
-
* });
|
|
172
|
-
*/
|
|
173
|
-
target.initialState = function initialState(iniSt) {
|
|
174
|
-
var extraReducers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
175
|
-
// passing through extraInitialStateKeys and extraReducers allows external customization by adding additional subreducers and state beyond the default `visState`, `mapState`, `mapStyle`, and `uiState`
|
|
176
|
-
var extraInitialStateKeys = Object.keys(extraReducers);
|
|
177
|
-
var merged = mergeInitialState(targetInitialState, iniSt, extraInitialStateKeys);
|
|
178
|
-
var targetReducer = provideInitialState(merged, extraReducers);
|
|
179
|
-
return decorate(targetReducer, merged);
|
|
180
|
-
};
|
|
181
|
-
return target;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Kepler.gl reducer to be mounted to your store. You can mount `keplerGlReducer` at property `keplerGl`, if you choose
|
|
186
|
-
* to mount it at another address e.g. `foo` you will need to specify it when you mount `KeplerGl` component in your app with `getState: state => state.foo`
|
|
187
|
-
* @public
|
|
188
|
-
* @example
|
|
189
|
-
* import keplerGlReducer from '@kepler.gl/reducers';
|
|
190
|
-
* import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
|
|
191
|
-
* import {taskMiddleware} from 'react-palm/tasks';
|
|
192
|
-
*
|
|
193
|
-
* const initialState = {};
|
|
194
|
-
* const reducers = combineReducers({
|
|
195
|
-
* // <-- mount kepler.gl reducer in your app
|
|
196
|
-
* keplerGl: keplerGlReducer,
|
|
197
|
-
*
|
|
198
|
-
* // Your other reducers here
|
|
199
|
-
* app: appReducer
|
|
200
|
-
* });
|
|
201
|
-
*
|
|
202
|
-
* // using createStore
|
|
203
|
-
* export default createStore(reducer, initialState, applyMiddleware(taskMiddleware));
|
|
204
|
-
*/
|
|
205
|
-
var keplerGlReducer = decorate(_keplerGlReducer);
|
|
206
|
-
var _default = exports["default"] = keplerGlReducer;
|
|
207
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9ucyIsInJlcXVpcmUiLCJfcmVkdXhBY3Rpb25zIiwiX2NvcmUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImluaXRpYWxDb3JlU3RhdGUiLCJwcm92aWRlSW5pdGlhbFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwiZXh0cmFSZWR1Y2VycyIsImNvcmVSZWR1Y2VyIiwiY29yZVJlZHVjZXJGYWN0b3J5IiwiaGFuZGxlUmVnaXN0ZXJFbnRyeSIsInN0YXRlIiwiX3JlZiIsIl9yZWYkcGF5bG9hZCIsInBheWxvYWQiLCJpZCIsIm1pbnQiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIm1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0IiwiaW5pdGlhbFVpU3RhdGUiLCJwcmV2aW91c1N0YXRlIiwidW5kZWZpbmVkIiwia2VwbGVyR2xJbml0IiwiaGFuZGxlRGVsZXRlRW50cnkiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJjdXJyIiwiaGFuZGxlUmVuYW1lRW50cnkiLCJfcmVmNCIsIl9yZWY0JHBheWxvYWQiLCJvbGRJZCIsIm5ld0lkIiwiYWN0aW9uIiwidXBkYXRlSXRlbVN0YXRlIiwiX2FjdGlvbkZvciIsIl91cGRhdGVQcm9wZXJ0eSIsImhhbmRsZXJzIiwiQWN0aW9uVHlwZXMiLCJSRUdJU1RFUl9FTlRSWSIsIkRFTEVURV9FTlRSWSIsIlJFTkFNRV9FTlRSWSIsImhhbmRsZUFjdGlvbnMiLCJfa2VwbGVyR2xSZWR1Y2VyIiwibWVyZ2VJbml0aWFsU3RhdGUiLCJzYXZlZCIsInByb3ZpZGVkIiwiZXh0cmFJbml0aWFsU3RhdGVLZXlzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm5ld1N0YXRlIiwia2V5IiwiZGVjb3JhdGUiLCJ0YXJnZXQiLCJzYXZlZEluaXRpYWxTdGF0ZSIsInRhcmdldEluaXRpYWxTdGF0ZSIsInBsdWdpbiIsImN1c3RvbVJlZHVjZXIiLCJvcHRpb25zIiwiX3RoaXMiLCJfdHlwZW9mMiIsIl9vcHRpb25zJG92ZXJyaWRlIiwibmV4dFN0YXRlIiwidHlwZSIsIm92ZXJyaWRlIiwiaW5pU3QiLCJtZXJnZWQiLCJ0YXJnZXRSZWR1Y2VyIiwia2VwbGVyR2xSZWR1Y2VyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Jvb3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZXMsXG4gIGtlcGxlckdsSW5pdCxcbiAgX2FjdGlvbkZvcixcbiAgX3VwZGF0ZVByb3BlcnR5LFxuICBSZWdpc3RlckVudHJ5VXBkYXRlckFjdGlvbixcbiAgUmVuYW1lRW50cnlVcGRhdGVyQWN0aW9uXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge2hhbmRsZUFjdGlvbnN9IGZyb20gJ3JlZHV4LWFjdGlvbnMnO1xuXG5pbXBvcnQge2NvcmVSZWR1Y2VyRmFjdG9yeSwgS2VwbGVyR2xTdGF0ZX0gZnJvbSAnLi9jb3JlJztcblxudHlwZSBLZXBsZXJHbFN0YXRlTWFwID0ge1xuICBbaWQ6IHN0cmluZ106IFBhcnRpYWw8S2VwbGVyR2xTdGF0ZT47XG59O1xuXG50eXBlIENvbWJpbmVSZWdpc3RlclVwZGF0ZUFjdGlvbnMgPSBSZWdpc3RlckVudHJ5VXBkYXRlckFjdGlvblsncGF5bG9hZCddICZcbiAgUmVuYW1lRW50cnlVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ107IC8vIEV4dGVuZCB0aGlzIHR5cGUgd2l0aCBhZGRpdGlvbmFsIGFjdGlvbnMgdG8gZW5mb3JjZSBzdHJpY3QgdHlwaW5nc1xuXG4vLyBJTklUSUFMX1NUQVRFXG5jb25zdCBpbml0aWFsQ29yZVN0YXRlID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlSW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSwgZXh0cmFSZWR1Y2Vycz8pIHtcbiAgY29uc3QgY29yZVJlZHVjZXIgPSBjb3JlUmVkdWNlckZhY3RvcnkoaW5pdGlhbFN0YXRlLCBleHRyYVJlZHVjZXJzKTtcblxuICBjb25zdCBoYW5kbGVSZWdpc3RlckVudHJ5ID0gKFxuICAgIHN0YXRlOiBLZXBsZXJHbFN0YXRlTWFwLFxuICAgIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgaWQsXG4gICAgICAgIG1pbnQsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0LFxuICAgICAgICBpbml0aWFsVWlTdGF0ZVxuICAgICAgfVxuICAgIH06IHtcbiAgICAgIHBheWxvYWQ6IFJlZ2lzdGVyRW50cnlVcGRhdGVyQWN0aW9uWydwYXlsb2FkJ107XG4gICAgfVxuICApOiBLZXBsZXJHbFN0YXRlTWFwID0+IHtcbiAgICAvLyBieSBkZWZhdWx0LCBhbHdheXMgY3JlYXRlIGEgbWludCBzdGF0ZSBldmVuIGlmIHRoZSBzYW1lIGlkIGFscmVhZHkgZXhpc3RcbiAgICAvLyBpZiBzdGF0ZS5pZCBleGlzdCBhbmQgbWludD1mYWxzZSwga2VlcCB0aGUgZXhpc3Rpbmcgc3RhdGVcbiAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gc3RhdGVbaWRdICYmIG1pbnQgPT09IGZhbHNlID8gc3RhdGVbaWRdIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHJlZ2lzdGVyIGVudHJ5IHRvIGtlcGxlci5nbCBwYXNzaW5nIGluIG1hcGJveCBjb25maWcgdG8gbWFwU3R5bGVcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgW2lkXTogY29yZVJlZHVjZXIoXG4gICAgICAgIHByZXZpb3VzU3RhdGUsXG4gICAgICAgIGtlcGxlckdsSW5pdCh7bWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCwgbWFwU3R5bGVzUmVwbGFjZURlZmF1bHQsIGluaXRpYWxVaVN0YXRlfSlcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUVudHJ5ID0gKFxuICAgIHN0YXRlOiBLZXBsZXJHbFN0YXRlTWFwLFxuICAgIHtwYXlsb2FkOiB7aWR9fToge3BheWxvYWQ6IHtpZDogc3RyaW5nfX1cbiAgKTogS2VwbGVyR2xTdGF0ZU1hcCA9PlxuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgY3VycikgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKGN1cnIgPT09IGlkID8ge30gOiB7W2N1cnJdOiBzdGF0ZVtjdXJyXX0pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICBjb25zdCBoYW5kbGVSZW5hbWVFbnRyeSA9IChcbiAgICBzdGF0ZTogS2VwbGVyR2xTdGF0ZU1hcCxcbiAgICB7XG4gICAgICBwYXlsb2FkOiB7b2xkSWQsIG5ld0lkfVxuICAgIH06IHtcbiAgICAgIHBheWxvYWQ6IFJlbmFtZUVudHJ5VXBkYXRlckFjdGlvblsncGF5bG9hZCddO1xuICAgIH1cbiAgKTogS2VwbGVyR2xTdGF0ZU1hcCA9PlxuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgY3VycikgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4ue1tjdXJyID09PSBvbGRJZCA/IG5ld0lkIDogY3Vycl06IHN0YXRlW2N1cnJdfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgcmV0dXJuIChzdGF0ZSA9IGluaXRpYWxDb3JlU3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIC8vIHVwZGF0ZSBjaGlsZCBzdGF0ZXNcbiAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVJdGVtU3RhdGUgPSBjb3JlUmVkdWNlcihzdGF0ZVtpZF0sIF9hY3Rpb25Gb3IoaWQsIGFjdGlvbikpO1xuICAgICAgc3RhdGUgPSBfdXBkYXRlUHJvcGVydHkoc3RhdGUsIGlkLCB1cGRhdGVJdGVtU3RhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gcGVyZm9ybSBhZGRpdGlvbmFsIHN0YXRlIHJlZHVjaW5nIChlLmcuIHN3aXRjaCBhY3Rpb24udHlwZSBldGMuLi4pXG4gICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICBbQWN0aW9uVHlwZXMuUkVHSVNURVJfRU5UUlldOiBoYW5kbGVSZWdpc3RlckVudHJ5LFxuICAgICAgW0FjdGlvblR5cGVzLkRFTEVURV9FTlRSWV06IGhhbmRsZURlbGV0ZUVudHJ5LFxuICAgICAgW0FjdGlvblR5cGVzLlJFTkFNRV9FTlRSWV06IGhhbmRsZVJlbmFtZUVudHJ5XG4gICAgfTtcblxuICAgIHJldHVybiBoYW5kbGVBY3Rpb25zPEtlcGxlckdsU3RhdGVNYXAsIENvbWJpbmVSZWdpc3RlclVwZGF0ZUFjdGlvbnM+KFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBpbml0aWFsQ29yZVN0YXRlXG4gICAgKShzdGF0ZSwgYWN0aW9uKTtcbiAgfTtcbn1cblxuY29uc3QgX2tlcGxlckdsUmVkdWNlciA9IHByb3ZpZGVJbml0aWFsU3RhdGUoaW5pdGlhbENvcmVTdGF0ZSk7XG5cbmZ1bmN0aW9uIG1lcmdlSW5pdGlhbFN0YXRlKHNhdmVkID0ge30sIHByb3ZpZGVkID0ge30sIGV4dHJhSW5pdGlhbFN0YXRlS2V5czogc3RyaW5nW10gPSBbXSkge1xuICBjb25zdCBrZXlzID0gWydtYXBTdGF0ZScsICdtYXBTdHlsZScsICd2aXNTdGF0ZScsICd1aVN0YXRlJywgLi4uZXh0cmFJbml0aWFsU3RhdGVLZXlzXTtcblxuICAvLyBzaGFsbG93IG1lcmdlIGVhY2ggcmVkdWNlclxuICBjb25zdCBuZXdTdGF0ZSA9IGtleXMucmVkdWNlKFxuICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgLi4uKHNhdmVkW2tleV0gJiYgcHJvdmlkZWRba2V5XVxuICAgICAgICA/IHtba2V5XTogey4uLnNhdmVkW2tleV0sIC4uLnByb3ZpZGVkW2tleV19fVxuICAgICAgICA6IHtba2V5XTogc2F2ZWRba2V5XSB8fCBwcm92aWRlZFtrZXldIHx8IHt9fSlcbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUodGFyZ2V0LCBzYXZlZEluaXRpYWxTdGF0ZSA9IHt9KSB7XG4gIGNvbnN0IHRhcmdldEluaXRpYWxTdGF0ZSA9IHNhdmVkSW5pdGlhbFN0YXRlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEga2VwbGVyLmdsIHJlZHVjZXIgdGhhdCB3aWxsIGFsc28gcGFzcyBlYWNoIGFjdGlvbiB0aHJvdWdoIGFkZGl0aW9uYWwgcmVkdWNlcnMgc3BpZWNpZmllZC5cbiAgICogVGhlIHBhcmFtZXRlciBzaG91bGQgYmUgZWl0aGVyIGEgcmVkdWNlciBtYXAgb3IgYSByZWR1Y2VyIGZ1bmN0aW9uLlxuICAgKiBUaGUgc3RhdGUgcGFzc2VkIGludG8gdGhlIGFkZGl0aW9uYWwgYWN0aW9uIGhhbmRsZXIgaXMgdGhlIGluc3RhbmNlIHN0YXRlLlxuICAgKiBJdCB3aWxsIGluY2x1ZGUgYWxsIHRoZSBzdWJyZWR1Y2VycyBgdmlzU3RhdGVgLCBgdWlTdGF0ZWAsIGBtYXBTdGF0ZWAgYW5kIGBtYXBTdHlsZWAuXG4gICAqIGAucGx1Z2luYCBpcyBvbmx5IG1lYW50IHRvIGJlIGNhbGxlZCBvbmNlIHdoZW4gbW91bnRpbmcgdGhlIGtlcGxlckdsUmVkdWNlciB0byB0aGUgc3RvcmUuXG4gICAqICoqTm90ZSoqIFRoaXMgaXMgYW4gYWR2YW5jZWQgb3B0aW9uIHRvIGdpdmUgeW91IG1vcmUgZnJlZWRvbSB0byBtb2RpZnkgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBrZXBsZXIuZ2wgaW5zdGFuY2UuXG4gICAqIFlvdSBzaG91bGQgb25seSB1c2UgdGhpcyB0byBhZGRpbmcgYWRkaXRpb25hbCBhY3Rpb25zIGluc3RlYWQgb2YgcmVwbGFjaW5nIGRlZmF1bHQgYWN0aW9ucy5cbiAgICpcbiAgICogQG1peGluIGtlcGxlckdsUmVkdWNlci5wbHVnaW5cbiAgICogQG1lbWJlcm9mIGtlcGxlckdsUmVkdWNlclxuICAgKiBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gY3VzdG9tUmVkdWNlciAtIEEgcmVkdWNlciBtYXAgb3IgYSByZWR1Y2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0byBiZSBhcHBsaWVkIHRvIGN1c3RvbSByZWR1Y2VyIGxvZ2ljXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLm92ZXJyaWRlIC0gb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHdoaWNoIGFjdGlvbiB0byBvdmVycmlkZSwgZS5nLiB7W0FjdGlvblR5cGVzLkxBWUVSX1RZUEVfQ0hBTkdFXTogdHJ1ZX1cbiAgICogQHB1YmxpY1xuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBteUtlcGxlckdsUmVkdWNlciA9IGtlcGxlckdsUmVkdWNlclxuICAgKiAgLnBsdWdpbih7XG4gICAqICAgIC8vIDEuIGFzIHJlZHVjZXIgbWFwXG4gICAqICAgIEhJREVfQU5EX1NIT1dfU0lERV9QQU5FTDogKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAqICAgICAgLi4uc3RhdGUsXG4gICAqICAgICAgdWlTdGF0ZToge1xuICAgKiAgICAgICAgLi4uc3RhdGUudWlTdGF0ZSxcbiAgICogICAgICAgIHJlYWRPbmx5OiAhc3RhdGUudWlTdGF0ZS5yZWFkT25seVxuICAgKiAgICAgIH1cbiAgICogICAgfSlcbiAgICogIH0pXG4gICAqIC5wbHVnaW4oaGFuZGxlQWN0aW9ucyh7XG4gICAqICAgLy8gMi4gYXMgcmVkdWNlclxuICAgKiAgICdISURFX01BUF9DT05UUk9MUyc6IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAgKiAgICAgLi4uc3RhdGUsXG4gICAqICAgICB1aVN0YXRlOiB7XG4gICAqICAgICAgIC4uLnN0YXRlLnVpU3RhdGUsXG4gICAqICAgICAgIG1hcENvbnRyb2xzOiBoaWRkZW5NYXBDb250cm9sXG4gICAqICAgICB9XG4gICAqICAgfSlcbiAgICogfSwge30pKTtcbiAgICovXG4gIHRhcmdldC5wbHVnaW4gPSBmdW5jdGlvbiBwbHVnaW4oY3VzdG9tUmVkdWNlciwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tUmVkdWNlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIGlmIG9ubHkgcHJvdmlkZWQgYSByZWR1Y2VyTWFwLCB3cmFwIGl0IGluIGEgcmVkdWNlclxuICAgICAgY3VzdG9tUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoY3VzdG9tUmVkdWNlciwge30pO1xuICAgIH1cblxuICAgIC8vIHVzZSAnZnVuY3Rpb24nIGtleXdvcmQgdG8gZW5hYmxlICd0aGlzJ1xuICAgIC8vIFRPRE86IHRlbXBvcmFyaWx5IG1ha2luZyBhY3Rpb24gdHlwZSB0byBhbnksIHdpbGwgZml4IHRoYXQgYnkgY3JlYXRpbmcgYSBzaGFyZWQgYWN0aW9uIGludGVyZmFjZVxuICAgIHJldHVybiBkZWNvcmF0ZSgoc3RhdGUgPSB7fSwgYWN0aW9uOiBhbnkgPSB7fSkgPT4ge1xuICAgICAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuICAgICAgaWYgKGFjdGlvbi50eXBlICYmICFvcHRpb25zPy5vdmVycmlkZT8uW2FjdGlvbi50eXBlXSkge1xuICAgICAgICBuZXh0U3RhdGUgPSB0aGlzKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgc3RhdGVuXG4gICAgICBPYmplY3Qua2V5cyhuZXh0U3RhdGUpLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAvLyB1cGRhdGUgY2hpbGQgc3RhdGVzXG4gICAgICAgIG5leHRTdGF0ZSA9IF91cGRhdGVQcm9wZXJ0eShcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY3VzdG9tUmVkdWNlcihuZXh0U3RhdGVbaWRdLCBfYWN0aW9uRm9yKGlkLCBhY3Rpb24pKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByZWR1Y2VyIHRoYXQgaW5pdGlhdGVkIHdpdGggY3VzdG9tIGluaXRpYWwgc3RhdGUuXG4gICAqIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGFuIG9iamVjdCBtYXBwaW5nIGZyb20gYHN1YnJlZHVjZXJgIG5hbWUgdG8gY3VzdG9tIHN1YnJlZHVjZXIgc3RhdGUsXG4gICAqIHdoaWNoIHdpbGwgYmUgc2hhbGxvdyAqKm1lcmdlZCoqIHdpdGggZGVmYXVsdCBpbml0aWFsIHN0YXRlLlxuICAgKlxuICAgKiBEZWZhdWx0IHN1YnJlZHVjZXIgc3RhdGU6XG4gICAqICAtIFtgdmlzU3RhdGVgXSguL3Zpcy1zdGF0ZS5tZCNJTklUSUFMX1ZJU19TVEFURSlcbiAgICogIC0gW2BtYXBTdGF0ZWBdKC4vbWFwLXN0YXRlLm1kI0lOSVRJQUxfTUFQX1NUQVRFKVxuICAgKiAgLSBbYG1hcFN0eWxlYF0oLi9tYXAtc3R5bGUubWQjSU5JVElBTF9NQVBfU1RZTEUpXG4gICAqICAtIFtgdWlTdGF0ZWBdKC4vdWktc3RhdGUubWQjSU5JVElBTF9VSV9TVEFURSlcbiAgICogQG1peGluIGtlcGxlckdsUmVkdWNlci5pbml0aWFsU3RhdGVcbiAgICogQG1lbWJlcm9mIGtlcGxlckdsUmVkdWNlclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5pU3QgLSBjdXN0b20gc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBpbml0aWFsIHN0YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYVJlZHVjZXJzIC0gb3B0aW9uYWwgY3VzdG9tIHJlZHVjZXJzIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGB2aXNTdGF0ZWAsIGBtYXBTdGF0ZWAsIGBtYXBTdHlsZWAsIGFuZCBgdWlTdGF0ZWBcbiAgICogQHB1YmxpY1xuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBteUtlcGxlckdsUmVkdWNlciA9IGtlcGxlckdsUmVkdWNlclxuICAgKiAgLmluaXRpYWxTdGF0ZSh7XG4gICAqICAgIHVpU3RhdGU6IHtyZWFkT25seTogdHJ1ZX1cbiAgICogIH0pO1xuICAgKi9cbiAgdGFyZ2V0LmluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uIGluaXRpYWxTdGF0ZShpbmlTdCwgZXh0cmFSZWR1Y2VycyA9IHt9KSB7XG4gICAgLy8gcGFzc2luZyB0aHJvdWdoIGV4dHJhSW5pdGlhbFN0YXRlS2V5cyBhbmQgZXh0cmFSZWR1Y2VycyBhbGxvd3MgZXh0ZXJuYWwgY3VzdG9taXphdGlvbiBieSBhZGRpbmcgYWRkaXRpb25hbCBzdWJyZWR1Y2VycyBhbmQgc3RhdGUgYmV5b25kIHRoZSBkZWZhdWx0IGB2aXNTdGF0ZWAsIGBtYXBTdGF0ZWAsIGBtYXBTdHlsZWAsIGFuZCBgdWlTdGF0ZWBcbiAgICBjb25zdCBleHRyYUluaXRpYWxTdGF0ZUtleXMgPSBPYmplY3Qua2V5cyhleHRyYVJlZHVjZXJzKTtcbiAgICBjb25zdCBtZXJnZWQgPSBtZXJnZUluaXRpYWxTdGF0ZSh0YXJnZXRJbml0aWFsU3RhdGUsIGluaVN0LCBleHRyYUluaXRpYWxTdGF0ZUtleXMpO1xuICAgIGNvbnN0IHRhcmdldFJlZHVjZXIgPSBwcm92aWRlSW5pdGlhbFN0YXRlKG1lcmdlZCwgZXh0cmFSZWR1Y2Vycyk7XG5cbiAgICByZXR1cm4gZGVjb3JhdGUodGFyZ2V0UmVkdWNlciwgbWVyZ2VkKTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEtlcGxlci5nbCByZWR1Y2VyIHRvIGJlIG1vdW50ZWQgdG8geW91ciBzdG9yZS4gWW91IGNhbiBtb3VudCBga2VwbGVyR2xSZWR1Y2VyYCBhdCBwcm9wZXJ0eSBga2VwbGVyR2xgLCBpZiB5b3UgY2hvb3NlXG4gKiB0byBtb3VudCBpdCBhdCBhbm90aGVyIGFkZHJlc3MgZS5nLiBgZm9vYCB5b3Ugd2lsbCBuZWVkIHRvIHNwZWNpZnkgaXQgd2hlbiB5b3UgbW91bnQgYEtlcGxlckdsYCBjb21wb25lbnQgaW4geW91ciBhcHAgd2l0aCBgZ2V0U3RhdGU6IHN0YXRlID0+IHN0YXRlLmZvb2BcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyIGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogaW1wb3J0IHtjcmVhdGVTdG9yZSwgY29tYmluZVJlZHVjZXJzLCBhcHBseU1pZGRsZXdhcmUsIGNvbXBvc2V9IGZyb20gJ3JlZHV4JztcbiAqIGltcG9ydCB7dGFza01pZGRsZXdhcmV9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuICpcbiAqIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHt9O1xuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogICAvLyA8LS0gbW91bnQga2VwbGVyLmdsIHJlZHVjZXIgaW4geW91ciBhcHBcbiAqICAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqXG4gKiAgIC8vIFlvdXIgb3RoZXIgcmVkdWNlcnMgaGVyZVxuICogICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIC8vIHVzaW5nIGNyZWF0ZVN0b3JlXG4gKiBleHBvcnQgZGVmYXVsdCBjcmVhdGVTdG9yZShyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIGFwcGx5TWlkZGxld2FyZSh0YXNrTWlkZGxld2FyZSkpO1xuICovXG5jb25zdCBrZXBsZXJHbFJlZHVjZXIgPSBkZWNvcmF0ZShfa2VwbGVyR2xSZWR1Y2VyKTtcbmV4cG9ydCBkZWZhdWx0IGtlcGxlckdsUmVkdWNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFRQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFBeUQsU0FBQUcsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFB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
|