nsc-react-component 3.3.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base/ImageView/index.d.ts +23 -0
- package/lib/base/ImageView/index.js +90 -0
- package/lib/base/ImageView/index.js.map +1 -0
- package/lib/base/ImageView/index.less +44 -0
- package/lib/base/form/Form.js +3 -2
- package/lib/base/form/Form.js.map +1 -1
- package/lib/base/form/filed/FormItem.js +19 -1
- package/lib/base/form/filed/FormItem.js.map +1 -1
- package/lib/base/form/filed/Item.js +6 -5
- package/lib/base/form/filed/Item.js.map +1 -1
- package/lib/base/input/index.js +40 -41
- package/lib/base/input/index.js.map +1 -1
- package/lib/base/menu/index.d.ts +2 -0
- package/lib/base/menu/index.js +21 -5
- package/lib/base/menu/index.js.map +1 -1
- package/lib/base/menu/index.less +9 -0
- package/lib/base/modal/index.js +1 -1
- package/lib/base/modal/index.js.map +1 -1
- package/lib/base/pdfviwer/index.d.ts +6 -11
- package/lib/base/pdfviwer/index.js +74 -68
- package/lib/base/pdfviwer/index.js.map +1 -1
- package/lib/config.d.ts +6 -0
- package/lib/config.js +3 -2
- package/lib/config.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/page/BasePage/index.d.ts +35 -4
- package/lib/page/BasePage/index.js +412 -150
- package/lib/page/BasePage/index.js.map +1 -1
- package/lib/page/BasePage/index.module.less +9 -1
- package/lib/page/FormPage/index.d.ts +13 -1
- package/lib/page/FormPage/index.js +84 -18
- package/lib/page/FormPage/index.js.map +1 -1
- package/lib/page/SettingTable/com.d.ts +81 -0
- package/lib/page/SettingTable/com.js +81 -0
- package/lib/page/SettingTable/com.js.map +1 -0
- package/lib/page/SettingTable/index.d.ts +9 -0
- package/lib/page/SettingTable/index.js +245 -0
- package/lib/page/SettingTable/index.js.map +1 -0
- package/lib/page/SettingTable/index.less +13 -0
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +9 -1
- package/lib/utils.js.map +1 -1
- package/package.json +100 -101
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
const _excluded = ["
|
|
2
|
-
_excluded2 = ["
|
|
3
|
-
_excluded3 = ["children", "pageType", "onClick", "
|
|
4
|
-
_excluded4 = ["children", "pageType", "onClick", "
|
|
5
|
-
_excluded5 = ["
|
|
6
|
-
_excluded6 = ["
|
|
1
|
+
const _excluded = ["data"],
|
|
2
|
+
_excluded2 = ["params"],
|
|
3
|
+
_excluded3 = ["children", "pageType", "onClick", "icon", "show"],
|
|
4
|
+
_excluded4 = ["children", "pageType", "onClick", "icon", "recordShow"],
|
|
5
|
+
_excluded5 = ["children", "pageType", "onClick", "recordShow", "icon", "show"],
|
|
6
|
+
_excluded6 = ["children", "pageType", "onClick", "recordShow", "icon"],
|
|
7
|
+
_excluded7 = ["store", "filterColumn", "actionColumn", "showRowSelection", "columnOrder", "expandable", "parantSelect", "title"],
|
|
8
|
+
_excluded8 = ["store", "showSearch", "titleAlias", "title"];
|
|
7
9
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
8
10
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
11
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
@@ -22,13 +24,13 @@ import message from "../../base/message";
|
|
|
22
24
|
import EditorForm from "../FormPage/index";
|
|
23
25
|
import cls from "classnames";
|
|
24
26
|
import "./index.module.less";
|
|
25
|
-
import { utils } from "@bj-nsc/msn/lib/utils";
|
|
26
27
|
import { DownOutlined, EyeOutlined, EditOutlined, RightOutlined, PlusOutlined, EllipsisOutlined, DeleteOutlined } from "@ant-design/icons";
|
|
27
|
-
import { getLess } from "../../utils";
|
|
28
|
+
import { converFunction, getLess } from "../../utils";
|
|
28
29
|
import request from "nsc-request";
|
|
29
30
|
import config from "../../config";
|
|
30
|
-
import { getStorage } from "@bj-nsc/functions";
|
|
31
|
+
import { getStorage, getButtonPermissons } from "@bj-nsc/functions";
|
|
31
32
|
import HeaderSearch from "../HeaderSearch";
|
|
33
|
+
import nscfile from "nsc-file";
|
|
32
34
|
const styles = null;
|
|
33
35
|
class BasePage extends PureComponent {
|
|
34
36
|
constructor(props) {
|
|
@@ -85,13 +87,16 @@ class BasePage extends PureComponent {
|
|
|
85
87
|
treeSearchPrams: {},
|
|
86
88
|
popopens: {},
|
|
87
89
|
moreOpen: false,
|
|
88
|
-
elementHeight: 0
|
|
90
|
+
elementHeight: 0,
|
|
91
|
+
permissionButtons: [],
|
|
92
|
+
queryParams: {}
|
|
89
93
|
};
|
|
90
94
|
}
|
|
91
95
|
componentDidMount() {
|
|
92
96
|
var _this$pageRef$current;
|
|
93
97
|
const {
|
|
94
|
-
initData
|
|
98
|
+
initData,
|
|
99
|
+
permisson = {}
|
|
95
100
|
} = this.props;
|
|
96
101
|
const elementHeight = (_this$pageRef$current = this.pageRef.current) === null || _this$pageRef$current === void 0 ? void 0 : _this$pageRef$current.clientHeight;
|
|
97
102
|
this.setState({
|
|
@@ -137,7 +142,7 @@ class BasePage extends PureComponent {
|
|
|
137
142
|
}
|
|
138
143
|
setEditFormValues(value) {
|
|
139
144
|
var _this$editorRef$curre4;
|
|
140
|
-
let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
145
|
+
let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "编辑";
|
|
141
146
|
(_this$editorRef$curre4 = this.editorRef.current) === null || _this$editorRef$curre4 === void 0 || _this$editorRef$curre4.setFormValue(value, type);
|
|
142
147
|
}
|
|
143
148
|
getEditFormValues() {
|
|
@@ -147,15 +152,22 @@ class BasePage extends PureComponent {
|
|
|
147
152
|
|
|
148
153
|
//批量删除
|
|
149
154
|
onDelete(data) {
|
|
150
|
-
var _this$tableRef$curren;
|
|
155
|
+
var _this$tableRef$curren, _this$tableRef$curren2;
|
|
151
156
|
const {
|
|
152
157
|
deleteUrl,
|
|
153
158
|
onDelete,
|
|
154
|
-
deleteParams,
|
|
155
|
-
deletePosition = "toolbar"
|
|
159
|
+
deleteParams = {},
|
|
160
|
+
deletePosition = "toolbar",
|
|
161
|
+
buttonClick = {},
|
|
162
|
+
requestParams = {},
|
|
163
|
+
requestUrls = {},
|
|
164
|
+
requestConfig = {}
|
|
156
165
|
} = this.props;
|
|
157
166
|
let _this = this;
|
|
158
167
|
const selectedRowKeys = (_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.getSelectedRowKeys();
|
|
168
|
+
const selectedRowDatas = (_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 ? void 0 : _this$tableRef$curren2.getSelectedRowDatas();
|
|
169
|
+
let url = requestUrls.deleteUrl ? requestUrls.deleteUrl : deleteUrl;
|
|
170
|
+
let params = requestParams.deleteParams ? requestParams.deleteParams : deleteParams;
|
|
159
171
|
if (deletePosition == "toolbar") {
|
|
160
172
|
if (selectedRowKeys.length == 0) {
|
|
161
173
|
message.warning("请选择要删除的数据!");
|
|
@@ -166,26 +178,37 @@ class BasePage extends PureComponent {
|
|
|
166
178
|
content: "是否确认删除所选项?",
|
|
167
179
|
// centered:true,
|
|
168
180
|
onOk: () => {
|
|
181
|
+
if (buttonClick.onDelete) {
|
|
182
|
+
var _this$props$formProps;
|
|
183
|
+
converFunction(buttonClick.onDelete, {
|
|
184
|
+
pageRef: this.props.pageRef,
|
|
185
|
+
record: deletePosition == "toolbar" ? selectedRowDatas : data,
|
|
186
|
+
ids: deletePosition == "toolbar" ? selectedRowKeys : data === null || data === void 0 ? void 0 : data.id,
|
|
187
|
+
funcs: (_this$props$formProps = this.props.formProps) === null || _this$props$formProps === void 0 ? void 0 : _this$props$formProps.funcs
|
|
188
|
+
}, this.props.Utils);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
169
191
|
if (onDelete) {
|
|
170
192
|
onDelete && onDelete(deletePosition == "toolbar" ? selectedRowKeys : data);
|
|
171
193
|
return;
|
|
172
194
|
}
|
|
173
|
-
if (!
|
|
195
|
+
if (!url) {
|
|
174
196
|
throw new Error("url不能为空!");
|
|
175
197
|
}
|
|
176
|
-
const
|
|
198
|
+
const {
|
|
199
|
+
data: dataParams = {}
|
|
200
|
+
} = params,
|
|
201
|
+
otherParams = _objectWithoutProperties(params, _excluded);
|
|
202
|
+
const defaultParams = _objectSpread({
|
|
177
203
|
method: "post",
|
|
178
204
|
autoPrefix: true,
|
|
179
|
-
params: {
|
|
205
|
+
params: _objectSpread({
|
|
180
206
|
ids: deletePosition == "toolbar" ? selectedRowKeys.join() : data.id
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
requestParams = _objectSpread({}, defaultParams);
|
|
188
|
-
request(deleteUrl, _objectSpread({}, requestParams)).then(function (res) {
|
|
207
|
+
}, dataParams)
|
|
208
|
+
}, requestConfig);
|
|
209
|
+
let finalParams = {};
|
|
210
|
+
finalParams = _objectSpread(_objectSpread({}, defaultParams), otherParams);
|
|
211
|
+
request(url, _objectSpread({}, finalParams)).then(function (res) {
|
|
189
212
|
const {
|
|
190
213
|
code
|
|
191
214
|
} = res;
|
|
@@ -193,7 +216,9 @@ class BasePage extends PureComponent {
|
|
|
193
216
|
var _this$searchRef, _this$props$onCallBac, _this$props$onCallBac2;
|
|
194
217
|
message.success("删除成功!");
|
|
195
218
|
let value = (_this$searchRef = _this.searchRef) === null || _this$searchRef === void 0 || (_this$searchRef = _this$searchRef.current) === null || _this$searchRef === void 0 ? void 0 : _this$searchRef.getSearchValues();
|
|
196
|
-
((_this$props$onCallBac = _this.props.onCallBacks) === null || _this$props$onCallBac === void 0 ? void 0 : _this$props$onCallBac.onDeleteCallBack) && ((_this$props$onCallBac2 = _this.props.onCallBacks) === null || _this$props$onCallBac2 === void 0 ? void 0 : _this$props$onCallBac2.onDeleteCallBack
|
|
219
|
+
((_this$props$onCallBac = _this.props.onCallBacks) === null || _this$props$onCallBac === void 0 ? void 0 : _this$props$onCallBac.onDeleteCallBack) && converFunction((_this$props$onCallBac2 = _this.props.onCallBacks) === null || _this$props$onCallBac2 === void 0 ? void 0 : _this$props$onCallBac2.onDeleteCallBack, {
|
|
220
|
+
pageRef: this.props.pageRef
|
|
221
|
+
}, this.props.Utils);
|
|
197
222
|
_this.tableLoad(value);
|
|
198
223
|
} else {
|
|
199
224
|
message.error("删除失败!");
|
|
@@ -205,36 +230,86 @@ class BasePage extends PureComponent {
|
|
|
205
230
|
});
|
|
206
231
|
}
|
|
207
232
|
tableLoad(params) {
|
|
208
|
-
var _this$tableRef$
|
|
233
|
+
var _tableStore$requestCo, _this$tableRef$curren3;
|
|
209
234
|
let requestConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
210
|
-
|
|
211
|
-
|
|
235
|
+
const {
|
|
236
|
+
requestConfig: defaultRequestConfig = {},
|
|
237
|
+
requestParams = {},
|
|
238
|
+
tableProps = {}
|
|
239
|
+
} = this.props;
|
|
240
|
+
const {
|
|
241
|
+
store: tableStore
|
|
242
|
+
} = tableProps;
|
|
243
|
+
let queryParams = requestParams.queryParams;
|
|
244
|
+
if (queryParams && typeof queryParams == 'string') {
|
|
245
|
+
const Utils = this.props.Utils || {};
|
|
246
|
+
let func = new Function('Utils', queryParams);
|
|
247
|
+
let converParams = func(Utils);
|
|
248
|
+
queryParams = converParams;
|
|
249
|
+
} else {
|
|
250
|
+
queryParams = queryParams || {};
|
|
251
|
+
}
|
|
252
|
+
let data = queryParams.data || queryParams.params || {};
|
|
253
|
+
let finalParams = _objectSpread(_objectSpread(_objectSpread({}, data), (_tableStore$requestCo = tableStore.requestConfig) === null || _tableStore$requestCo === void 0 ? void 0 : _tableStore$requestCo.params), params);
|
|
254
|
+
const {
|
|
255
|
+
requestConig: storeConfig = {}
|
|
256
|
+
} = tableStore;
|
|
257
|
+
const {
|
|
258
|
+
params: storeParams = {}
|
|
259
|
+
} = storeConfig,
|
|
260
|
+
otherStoreConfig = _objectWithoutProperties(storeConfig, _excluded2);
|
|
261
|
+
(_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 || _this$tableRef$curren3.store.load(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultRequestConfig), otherStoreConfig), requestConfig), {}, {
|
|
262
|
+
params: _objectSpread(_objectSpread({}, storeParams), finalParams)
|
|
212
263
|
}));
|
|
213
264
|
}
|
|
214
265
|
//查询
|
|
215
266
|
onSearch(params) {
|
|
267
|
+
var _tableStore$requestCo2, _this$props$onCallBac3;
|
|
216
268
|
const {
|
|
217
269
|
onSearch,
|
|
218
|
-
onCallBacks
|
|
270
|
+
onCallBacks,
|
|
271
|
+
requestParams = {},
|
|
272
|
+
tableProps = {}
|
|
219
273
|
} = this.props;
|
|
274
|
+
const {
|
|
275
|
+
store: tableStore
|
|
276
|
+
} = tableProps;
|
|
277
|
+
let queryParams = requestParams.queryParams;
|
|
278
|
+
if (queryParams && typeof queryParams == 'string') {
|
|
279
|
+
const Utils = this.props.Utils || {};
|
|
280
|
+
let func = new Function('Utils', queryParams);
|
|
281
|
+
let converParams = func(Utils);
|
|
282
|
+
queryParams = converParams;
|
|
283
|
+
} else {
|
|
284
|
+
queryParams = queryParams || {};
|
|
285
|
+
}
|
|
286
|
+
let data = queryParams.data || queryParams.params || {};
|
|
287
|
+
let finalParams = _objectSpread(_objectSpread(_objectSpread({}, data), (_tableStore$requestCo2 = tableStore.requestConfig) === null || _tableStore$requestCo2 === void 0 ? void 0 : _tableStore$requestCo2.params), params);
|
|
288
|
+
if (onSearch) {
|
|
289
|
+
onSearch(finalParams);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
220
292
|
if (onSearch) {
|
|
221
|
-
onSearch(_objectSpread(_objectSpread({},
|
|
293
|
+
onSearch(_objectSpread(_objectSpread({}, finalParams), this.state.treeSearchPrams));
|
|
222
294
|
return;
|
|
223
295
|
}
|
|
224
|
-
this.tableLoad(_objectSpread(_objectSpread({},
|
|
225
|
-
(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.
|
|
296
|
+
this.tableLoad(_objectSpread(_objectSpread({}, finalParams), this.state.treeSearchPrams));
|
|
297
|
+
(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onQueryCallBack) && converFunction((_this$props$onCallBac3 = this.props.onCallBacks) === null || _this$props$onCallBac3 === void 0 ? void 0 : _this$props$onCallBac3.onQueryCallBack, {
|
|
298
|
+
pageRef: this.props.pageRef,
|
|
299
|
+
params: params
|
|
300
|
+
}, this.props.Utils);
|
|
226
301
|
}
|
|
227
302
|
//表格重新加载
|
|
228
303
|
tableReload() {
|
|
229
|
-
var _this$tableRef$
|
|
304
|
+
var _this$tableRef$curren4;
|
|
230
305
|
let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
231
306
|
let autoLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
232
|
-
(_this$tableRef$
|
|
307
|
+
(_this$tableRef$curren4 = this.tableRef.current) === null || _this$tableRef$curren4 === void 0 || (_this$tableRef$curren4 = _this$tableRef$curren4.store) === null || _this$tableRef$curren4 === void 0 || _this$tableRef$curren4.reload({
|
|
233
308
|
callback: res => {
|
|
234
309
|
var _res$data;
|
|
235
310
|
if (autoLoad && (res === null || res === void 0 || (_res$data = res.data) === null || _res$data === void 0 || (_res$data = _res$data.records) === null || _res$data === void 0 ? void 0 : _res$data.length) == 0 && this.state.currentPage !== 1) {
|
|
236
|
-
var _this$tableRef$
|
|
237
|
-
(_this$tableRef$
|
|
311
|
+
var _this$tableRef$curren5;
|
|
312
|
+
(_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 || (_this$tableRef$curren5 = _this$tableRef$curren5.store) === null || _this$tableRef$curren5 === void 0 || _this$tableRef$curren5.reload({
|
|
238
313
|
params: _objectSpread({
|
|
239
314
|
current: 1
|
|
240
315
|
}, params)
|
|
@@ -246,29 +321,32 @@ class BasePage extends PureComponent {
|
|
|
246
321
|
treeLoad(params) {
|
|
247
322
|
var _this$treeRef$current;
|
|
248
323
|
let requestConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
249
|
-
|
|
324
|
+
const {
|
|
325
|
+
requestConfig: defaultRequestConfig = {}
|
|
326
|
+
} = this.props;
|
|
327
|
+
(_this$treeRef$current = this.treeRef.current) === null || _this$treeRef$current === void 0 || _this$treeRef$current.store.load(_objectSpread(_objectSpread(_objectSpread({}, defaultRequestConfig), requestConfig), {}, {
|
|
250
328
|
params: params
|
|
251
329
|
}));
|
|
252
330
|
}
|
|
253
331
|
getSelectedRowKeys() {
|
|
254
|
-
var _this$tableRef$
|
|
255
|
-
return (_this$tableRef$
|
|
332
|
+
var _this$tableRef$curren6;
|
|
333
|
+
return (_this$tableRef$curren6 = this.tableRef.current) === null || _this$tableRef$curren6 === void 0 ? void 0 : _this$tableRef$curren6.getSelectedRowKeys();
|
|
256
334
|
}
|
|
257
335
|
getSelectedRowDatas() {
|
|
258
|
-
var _this$tableRef$
|
|
259
|
-
return (_this$tableRef$
|
|
336
|
+
var _this$tableRef$curren7;
|
|
337
|
+
return (_this$tableRef$curren7 = this.tableRef.current) === null || _this$tableRef$curren7 === void 0 ? void 0 : _this$tableRef$curren7.getSelectedRowDatas();
|
|
260
338
|
}
|
|
261
339
|
setSelectedRowKeys(data) {
|
|
262
|
-
var _this$tableRef$
|
|
263
|
-
return (_this$tableRef$
|
|
340
|
+
var _this$tableRef$curren8;
|
|
341
|
+
return (_this$tableRef$curren8 = this.tableRef.current) === null || _this$tableRef$curren8 === void 0 ? void 0 : _this$tableRef$curren8.setSelectedRowKeys(data);
|
|
264
342
|
}
|
|
265
343
|
setSelectedRowDatas(data) {
|
|
266
|
-
var _this$tableRef$
|
|
267
|
-
return (_this$tableRef$
|
|
344
|
+
var _this$tableRef$curren9;
|
|
345
|
+
return (_this$tableRef$curren9 = this.tableRef.current) === null || _this$tableRef$curren9 === void 0 ? void 0 : _this$tableRef$curren9.setSelectedRowDatas(data);
|
|
268
346
|
}
|
|
269
347
|
resetSelectedRowKeys() {
|
|
270
|
-
var _this$tableRef$
|
|
271
|
-
return (_this$tableRef$
|
|
348
|
+
var _this$tableRef$curren10;
|
|
349
|
+
return (_this$tableRef$curren10 = this.tableRef.current) === null || _this$tableRef$curren10 === void 0 ? void 0 : _this$tableRef$curren10.resetSelectedRowKeys();
|
|
272
350
|
}
|
|
273
351
|
getSearchValues() {
|
|
274
352
|
var _this$searchRef2;
|
|
@@ -284,7 +362,7 @@ class BasePage extends PureComponent {
|
|
|
284
362
|
rowKey = "id"
|
|
285
363
|
} = tableProps;
|
|
286
364
|
let resKey = [];
|
|
287
|
-
let key =
|
|
365
|
+
let key = "";
|
|
288
366
|
if (data.childNodes) {
|
|
289
367
|
const children = data.childNodes;
|
|
290
368
|
children.map((item, index) => {
|
|
@@ -306,7 +384,6 @@ class BasePage extends PureComponent {
|
|
|
306
384
|
}
|
|
307
385
|
renderToolButtons(toolbuttons, toolbarFlag) {
|
|
308
386
|
const flag = toolbuttons.length > 5;
|
|
309
|
-
// toolbuttons = [...toolbuttons].reverse();
|
|
310
387
|
const {
|
|
311
388
|
showSearch = true
|
|
312
389
|
} = this.props;
|
|
@@ -319,7 +396,7 @@ class BasePage extends PureComponent {
|
|
|
319
396
|
icon,
|
|
320
397
|
show
|
|
321
398
|
} = _item$props,
|
|
322
|
-
params = _objectWithoutProperties(_item$props,
|
|
399
|
+
params = _objectWithoutProperties(_item$props, _excluded3);
|
|
323
400
|
if (index > 3) {
|
|
324
401
|
return /*#__PURE__*/React.createElement("div", {
|
|
325
402
|
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item"))
|
|
@@ -400,9 +477,9 @@ class BasePage extends PureComponent {
|
|
|
400
477
|
} = config();
|
|
401
478
|
const newButtons = [];
|
|
402
479
|
const {
|
|
403
|
-
rowKey =
|
|
480
|
+
rowKey = "id"
|
|
404
481
|
} = tableProps;
|
|
405
|
-
let key =
|
|
482
|
+
let key = "";
|
|
406
483
|
if (typeof rowKey == "function") {
|
|
407
484
|
key = rowKey(record);
|
|
408
485
|
} else {
|
|
@@ -419,7 +496,7 @@ class BasePage extends PureComponent {
|
|
|
419
496
|
icon,
|
|
420
497
|
recordShow
|
|
421
498
|
} = _item$props2,
|
|
422
|
-
params = _objectWithoutProperties(_item$props2,
|
|
499
|
+
params = _objectWithoutProperties(_item$props2, _excluded4);
|
|
423
500
|
if (recordShow) {
|
|
424
501
|
if (typeof recordShow == "string") {
|
|
425
502
|
if (eval(recordShow)) {
|
|
@@ -450,7 +527,7 @@ class BasePage extends PureComponent {
|
|
|
450
527
|
icon,
|
|
451
528
|
show
|
|
452
529
|
} = _item$props3,
|
|
453
|
-
params = _objectWithoutProperties(_item$props3,
|
|
530
|
+
params = _objectWithoutProperties(_item$props3, _excluded5);
|
|
454
531
|
if (index > Number(number) - 1) {
|
|
455
532
|
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
456
533
|
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item")),
|
|
@@ -481,7 +558,7 @@ class BasePage extends PureComponent {
|
|
|
481
558
|
recordShow,
|
|
482
559
|
icon
|
|
483
560
|
} = _item$props4,
|
|
484
|
-
params = _objectWithoutProperties(_item$props4,
|
|
561
|
+
params = _objectWithoutProperties(_item$props4, _excluded6);
|
|
485
562
|
if (flag) {
|
|
486
563
|
if (index < number) {
|
|
487
564
|
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
@@ -550,7 +627,7 @@ class BasePage extends PureComponent {
|
|
|
550
627
|
}
|
|
551
628
|
//树点击事件
|
|
552
629
|
treeSelect(selectedKeys, obj) {
|
|
553
|
-
var _this$searchRef3, _this$props$
|
|
630
|
+
var _this$searchRef3, _this$props$onCallBac4, _this$props$onCallBac5;
|
|
554
631
|
let keyword = "";
|
|
555
632
|
const {
|
|
556
633
|
searchKey = "key",
|
|
@@ -599,7 +676,15 @@ class BasePage extends PureComponent {
|
|
|
599
676
|
searchField && this.tableLoad(_objectSpread(_objectSpread({}, fromValue), {}, {
|
|
600
677
|
[searchField]: keyword
|
|
601
678
|
}));
|
|
602
|
-
((_this$props$
|
|
679
|
+
((_this$props$onCallBac4 = this.props.onCallBacks) === null || _this$props$onCallBac4 === void 0 ? void 0 : _this$props$onCallBac4.treeSelectCallBack) && converFunction((_this$props$onCallBac5 = this.props.onCallBacks) === null || _this$props$onCallBac5 === void 0 ? void 0 : _this$props$onCallBac5.onEditorCallBack, {
|
|
680
|
+
pageRef: this.props.pageRef,
|
|
681
|
+
selectedKeys: selectedKeys,
|
|
682
|
+
obj: obj
|
|
683
|
+
}, this.props.Utils);
|
|
684
|
+
// utils.callback(this.props.onCallBacks?.treeSelectCallBack, this, [
|
|
685
|
+
// selectedKeys,
|
|
686
|
+
// obj,
|
|
687
|
+
// ]);
|
|
603
688
|
}
|
|
604
689
|
resetSearch() {
|
|
605
690
|
var _this$searchRef$curre2;
|
|
@@ -619,15 +704,32 @@ class BasePage extends PureComponent {
|
|
|
619
704
|
return newText;
|
|
620
705
|
}
|
|
621
706
|
setTableData(data) {
|
|
622
|
-
var _this$tableRef$
|
|
623
|
-
(_this$tableRef$
|
|
707
|
+
var _this$tableRef$curren11;
|
|
708
|
+
(_this$tableRef$curren11 = this.tableRef.current) === null || _this$tableRef$curren11 === void 0 || (_this$tableRef$curren11 = _this$tableRef$curren11.store) === null || _this$tableRef$curren11 === void 0 || _this$tableRef$curren11.setData(data);
|
|
624
709
|
}
|
|
625
710
|
setTreeData(data) {
|
|
626
711
|
var _this$treeRef$current2;
|
|
627
712
|
(_this$treeRef$current2 = this.treeRef.current) === null || _this$treeRef$current2 === void 0 || (_this$treeRef$current2 = _this$treeRef$current2.store) === null || _this$treeRef$current2 === void 0 || _this$treeRef$current2.setData(data);
|
|
628
713
|
}
|
|
714
|
+
convertQueryParams() {
|
|
715
|
+
const {
|
|
716
|
+
requestParams = {}
|
|
717
|
+
} = this.props;
|
|
718
|
+
let queryParams = requestParams.queryParams;
|
|
719
|
+
if (queryParams && typeof queryParams == 'string') {
|
|
720
|
+
const Utils = this.props.Utils || {};
|
|
721
|
+
let func = new Function('Utils', queryParams);
|
|
722
|
+
let converParams = func(Utils);
|
|
723
|
+
queryParams = converParams;
|
|
724
|
+
} else {
|
|
725
|
+
queryParams = queryParams || {};
|
|
726
|
+
}
|
|
727
|
+
return queryParams;
|
|
728
|
+
}
|
|
629
729
|
render() {
|
|
630
|
-
var
|
|
730
|
+
var _this2 = this,
|
|
731
|
+
_tableProps$toolbar,
|
|
732
|
+
_tableProps$toolbar2;
|
|
631
733
|
const {
|
|
632
734
|
columns = [],
|
|
633
735
|
showSearch = true,
|
|
@@ -636,6 +738,7 @@ class BasePage extends PureComponent {
|
|
|
636
738
|
tableProps = {},
|
|
637
739
|
treeProps = {},
|
|
638
740
|
formProps = {},
|
|
741
|
+
formPageProps = {},
|
|
639
742
|
showLeft = false,
|
|
640
743
|
submitParams = {},
|
|
641
744
|
showToolButton = true,
|
|
@@ -646,10 +749,16 @@ class BasePage extends PureComponent {
|
|
|
646
749
|
className,
|
|
647
750
|
toolButtonPosition = "buttom",
|
|
648
751
|
actionProps,
|
|
649
|
-
deletePosition = "toolbar"
|
|
752
|
+
deletePosition = "toolbar",
|
|
753
|
+
buttonClick = {},
|
|
754
|
+
permission = {
|
|
755
|
+
has: false
|
|
756
|
+
},
|
|
757
|
+
requestParams = {},
|
|
758
|
+
requestUrls = {}
|
|
650
759
|
} = this.props;
|
|
651
760
|
const {
|
|
652
|
-
store,
|
|
761
|
+
store: tableStore = {},
|
|
653
762
|
filterColumn = true,
|
|
654
763
|
actionColumn = true,
|
|
655
764
|
showRowSelection = true,
|
|
@@ -658,17 +767,25 @@ class BasePage extends PureComponent {
|
|
|
658
767
|
parantSelect = true,
|
|
659
768
|
title: tableTitle
|
|
660
769
|
} = tableProps,
|
|
661
|
-
othertableParams = _objectWithoutProperties(tableProps,
|
|
770
|
+
othertableParams = _objectWithoutProperties(tableProps, _excluded7);
|
|
771
|
+
if (requestParams.queryParams) {
|
|
772
|
+
var _tableStore$requestCo3;
|
|
773
|
+
let queryParams = this.convertQueryParams();
|
|
774
|
+
let data = (queryParams === null || queryParams === void 0 ? void 0 : queryParams.data) || (queryParams === null || queryParams === void 0 ? void 0 : queryParams.params) || {};
|
|
775
|
+
tableStore.requestConfig = {
|
|
776
|
+
params: _objectSpread(_objectSpread({}, data), (_tableStore$requestCo3 = tableStore.requestConfig) === null || _tableStore$requestCo3 === void 0 ? void 0 : _tableStore$requestCo3.params)
|
|
777
|
+
};
|
|
778
|
+
}
|
|
662
779
|
const {
|
|
663
780
|
store: treeStore = {},
|
|
664
781
|
showSearch: treeSearch = true,
|
|
665
782
|
titleAlias = "title",
|
|
666
783
|
title: treeTitle
|
|
667
784
|
} = treeProps,
|
|
668
|
-
othertreeParams = _objectWithoutProperties(treeProps,
|
|
785
|
+
othertreeParams = _objectWithoutProperties(treeProps, _excluded8);
|
|
669
786
|
let tableParams = _objectSpread({
|
|
670
787
|
filterColumn,
|
|
671
|
-
store
|
|
788
|
+
store: _objectSpread({}, tableStore)
|
|
672
789
|
}, othertableParams);
|
|
673
790
|
let tableColumn = [];
|
|
674
791
|
const searchForms = [];
|
|
@@ -678,18 +795,24 @@ class BasePage extends PureComponent {
|
|
|
678
795
|
const {
|
|
679
796
|
elementHeight
|
|
680
797
|
} = this.state;
|
|
798
|
+
let permissionButtons = [];
|
|
799
|
+
if (permission.has && permission.menuCode) {
|
|
800
|
+
permissionButtons = getButtonPermissons(permission.menuCode).permissons || [];
|
|
801
|
+
}
|
|
681
802
|
columns.map(item => {
|
|
682
|
-
var _temp$search, _temp$props, _temp$props2, _tempProp$data, _temp;
|
|
803
|
+
var _temp$search, _temp$props, _temp$props2, _tempProp$data, _temp, _temp2, _temp3;
|
|
683
804
|
let temp = _objectSpread({
|
|
684
805
|
width: 100
|
|
685
806
|
}, item);
|
|
686
807
|
if (temp.search === true || ((_temp$search = temp.search) === null || _temp$search === void 0 ? void 0 : _temp$search.show) === true) {
|
|
687
808
|
var _temp$search2, _temp$search3, _temp$search4;
|
|
809
|
+
let props = temp.props ? _objectSpread({}, temp.props) : {};
|
|
810
|
+
delete props.onChange;
|
|
688
811
|
searchForms.push({
|
|
689
812
|
name: temp.field || temp.dataIndex,
|
|
690
813
|
label: ((_temp$search2 = temp.search) === null || _temp$search2 === void 0 ? void 0 : _temp$search2.label) || temp.title,
|
|
691
814
|
type: temp.type,
|
|
692
|
-
props:
|
|
815
|
+
props: props,
|
|
693
816
|
labelCol: (_temp$search3 = temp.search) === null || _temp$search3 === void 0 ? void 0 : _temp$search3.labelCol,
|
|
694
817
|
wrapperCol: (_temp$search4 = temp.search) === null || _temp$search4 === void 0 ? void 0 : _temp$search4.wrapperCol,
|
|
695
818
|
rules: temp.searchRules ? temp.searchRules : []
|
|
@@ -703,6 +826,7 @@ class BasePage extends PureComponent {
|
|
|
703
826
|
type: temp.type,
|
|
704
827
|
span: temp.span,
|
|
705
828
|
dictName: temp.dictName,
|
|
829
|
+
required: temp.required,
|
|
706
830
|
props: _objectSpread({}, temp.props)
|
|
707
831
|
});
|
|
708
832
|
if (((_temp$props = temp.props) === null || _temp$props === void 0 ? void 0 : _temp$props.defaultValue) !== undefined && ((_temp$props2 = temp.props) === null || _temp$props2 === void 0 ? void 0 : _temp$props2.defaultValue) !== null) {
|
|
@@ -718,7 +842,6 @@ class BasePage extends PureComponent {
|
|
|
718
842
|
props: temp.props
|
|
719
843
|
};
|
|
720
844
|
}
|
|
721
|
-
delete temp.type;
|
|
722
845
|
let tempProp = _objectSpread({}, temp.props);
|
|
723
846
|
if (tempProp !== null && tempProp !== void 0 && tempProp.data && (tempProp === null || tempProp === void 0 || (_tempProp$data = tempProp.data) === null || _tempProp$data === void 0 ? void 0 : _tempProp$data.length) > 0) {
|
|
724
847
|
temp = _objectSpread({
|
|
@@ -732,94 +855,217 @@ class BasePage extends PureComponent {
|
|
|
732
855
|
}
|
|
733
856
|
delete temp.props;
|
|
734
857
|
|
|
735
|
-
// temp.
|
|
736
|
-
|
|
858
|
+
// if (temp.render && typeof temp.render == 'string') {
|
|
859
|
+
// let rendetStr = temp.render
|
|
860
|
+
// temp = {
|
|
861
|
+
// ...temp,
|
|
862
|
+
// render: (text, record, index) => {
|
|
863
|
+
// const func = new Function(rendetStr)
|
|
864
|
+
// return func()
|
|
865
|
+
// }
|
|
866
|
+
// }
|
|
867
|
+
// }
|
|
868
|
+
if (temp.type == "Upload" && ((_temp = temp) === null || _temp === void 0 ? void 0 : _temp.columnShow) !== false) {
|
|
869
|
+
temp = _objectSpread({
|
|
870
|
+
render: (_text, record) => {
|
|
871
|
+
if (Array.isArray(record[temp.dataIndex])) {
|
|
872
|
+
const files = record[temp.dataIndex];
|
|
873
|
+
if (files.length == 1) {
|
|
874
|
+
var _files$;
|
|
875
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
876
|
+
type: "link",
|
|
877
|
+
onClick: () => {
|
|
878
|
+
nscfile.download(files[0].fileId);
|
|
879
|
+
}
|
|
880
|
+
}, (_files$ = files[0]) === null || _files$ === void 0 ? void 0 : _files$.fileName);
|
|
881
|
+
} else if (files.length > 1) {
|
|
882
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
883
|
+
type: "link",
|
|
884
|
+
onClick: () => {
|
|
885
|
+
let fileIds = [];
|
|
886
|
+
files.map(item => {
|
|
887
|
+
fileIds.push(item.fileId);
|
|
888
|
+
});
|
|
889
|
+
nscfile.downloadZip(fileIds.join(","));
|
|
890
|
+
}
|
|
891
|
+
}, "文件下载");
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
}, temp);
|
|
896
|
+
}
|
|
897
|
+
if (temp.type == "Image" && ((_temp2 = temp) === null || _temp2 === void 0 ? void 0 : _temp2.columnShow) !== false) {
|
|
898
|
+
temp = _objectSpread({
|
|
899
|
+
render: (_text, record) => {
|
|
900
|
+
if (Array.isArray(record[temp.dataIndex])) {
|
|
901
|
+
const files = record[temp.dataIndex];
|
|
902
|
+
if (files.length == 1) {
|
|
903
|
+
var _files$2;
|
|
904
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
905
|
+
className: "nsc-basepage-table-img"
|
|
906
|
+
}, (_files$2 = files[0]) === null || _files$2 === void 0 ? void 0 : _files$2.fileName);
|
|
907
|
+
} else if (files.length > 1) {
|
|
908
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
909
|
+
type: "link",
|
|
910
|
+
onClick: () => {}
|
|
911
|
+
}, "\u56FE\u7247\u67E5\u770B");
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
}, temp);
|
|
916
|
+
}
|
|
917
|
+
delete temp.type;
|
|
918
|
+
if (((_temp3 = temp) === null || _temp3 === void 0 ? void 0 : _temp3.columnShow) !== false) tableColumn.push(temp);
|
|
737
919
|
});
|
|
738
|
-
const
|
|
920
|
+
const toolButtons = [];
|
|
739
921
|
const {
|
|
740
922
|
baseActionColumn
|
|
741
923
|
} = config();
|
|
742
924
|
let showIcon = true;
|
|
743
925
|
if ((actionProps === null || actionProps === void 0 ? void 0 : actionProps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
744
|
-
|
|
745
|
-
|
|
926
|
+
const buttonMap = {
|
|
927
|
+
// add: { name: "新增", code: "add", icon: <PlusOutlined /> },
|
|
928
|
+
editor: {
|
|
929
|
+
name: "编辑",
|
|
930
|
+
code: "editor",
|
|
931
|
+
icon: /*#__PURE__*/React.createElement(EditOutlined, null)
|
|
932
|
+
},
|
|
933
|
+
delete: {
|
|
934
|
+
name: "删除",
|
|
935
|
+
code: "delete",
|
|
936
|
+
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null)
|
|
937
|
+
},
|
|
938
|
+
search: {
|
|
939
|
+
name: "查看",
|
|
940
|
+
code: "search",
|
|
941
|
+
icon: /*#__PURE__*/React.createElement(EyeOutlined, null)
|
|
942
|
+
}
|
|
943
|
+
};
|
|
944
|
+
const returnButton = function (code) {
|
|
945
|
+
var _buttonMap$code;
|
|
946
|
+
let show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
947
|
+
let props = {};
|
|
948
|
+
if (show) {
|
|
949
|
+
props = {
|
|
950
|
+
recordShow: show
|
|
951
|
+
};
|
|
952
|
+
}
|
|
953
|
+
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
746
954
|
onClick: record => {
|
|
747
|
-
if (
|
|
748
|
-
|
|
749
|
-
|
|
955
|
+
if (code == "delete") {
|
|
956
|
+
_this2.onDelete(record);
|
|
957
|
+
} else {
|
|
958
|
+
var _this2$props$onCallBa, _this2$props$onCallBa3;
|
|
959
|
+
if (code == "editor" && buttonClick.onEditor) {
|
|
960
|
+
var _this2$props$formProp;
|
|
961
|
+
converFunction(buttonClick.onEditor, {
|
|
962
|
+
pageRef: _this2.props.pageRef,
|
|
963
|
+
record: record.attribute || record,
|
|
964
|
+
funcs: (_this2$props$formProp = _this2.props.formProps) === null || _this2$props$formProp === void 0 ? void 0 : _this2$props$formProp.funcs
|
|
965
|
+
}, _this2.props.Utils);
|
|
966
|
+
return;
|
|
967
|
+
} else if (code == "search" && buttonClick.onSearch) {
|
|
968
|
+
var _this2$props$formProp2;
|
|
969
|
+
converFunction(buttonClick.onSearch, {
|
|
970
|
+
pageRef: _this2.props.pageRef,
|
|
971
|
+
record: record.attribute || record,
|
|
972
|
+
funcs: (_this2$props$formProp2 = _this2.props.formProps) === null || _this2$props$formProp2 === void 0 ? void 0 : _this2$props$formProp2.funcs
|
|
973
|
+
}, _this2.props.Utils);
|
|
974
|
+
return;
|
|
975
|
+
}
|
|
976
|
+
if (onShowForm) {
|
|
977
|
+
onShowForm(record.attribute || record, code);
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
_this2.showForm(record.attribute || record, code);
|
|
981
|
+
if (code == "editor" && (_this2$props$onCallBa = _this2.props.onCallBacks) !== null && _this2$props$onCallBa !== void 0 && _this2$props$onCallBa.onEditorCallBack) {
|
|
982
|
+
var _this2$props$onCallBa2, _this2$props$formProp3;
|
|
983
|
+
converFunction((_this2$props$onCallBa2 = _this2.props.onCallBacks) === null || _this2$props$onCallBa2 === void 0 ? void 0 : _this2$props$onCallBa2.onEditorCallBack, {
|
|
984
|
+
pageRef: _this2.props.pageRef,
|
|
985
|
+
record: record.attribute || record,
|
|
986
|
+
funcs: (_this2$props$formProp3 = _this2.props.formProps) === null || _this2$props$formProp3 === void 0 ? void 0 : _this2$props$formProp3.funcs
|
|
987
|
+
}, _this2.props.Utils);
|
|
988
|
+
}
|
|
989
|
+
if (code == "search" && (_this2$props$onCallBa3 = _this2.props.onCallBacks) !== null && _this2$props$onCallBa3 !== void 0 && _this2$props$onCallBa3.onSearchCallBack) {
|
|
990
|
+
var _this2$props$onCallBa4;
|
|
991
|
+
converFunction((_this2$props$onCallBa4 = _this2.props.onCallBacks) === null || _this2$props$onCallBa4 === void 0 ? void 0 : _this2$props$onCallBa4.onSearchCallBack, {
|
|
992
|
+
pageRef: _this2.props.pageRef,
|
|
993
|
+
record: record.attribute || record
|
|
994
|
+
}, _this2.props.Utils);
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
750
997
|
}
|
|
751
|
-
this.showForm(record.attribute || record, "detail");
|
|
752
998
|
},
|
|
753
|
-
icon: showIcon ?
|
|
999
|
+
icon: showIcon ? buttonMap[code].icon : null,
|
|
754
1000
|
type: "link"
|
|
755
|
-
},
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
if (deletePosition == "toolbar") {
|
|
787
|
-
selfButtons.push( /*#__PURE__*/React.createElement(Button
|
|
788
|
-
// type={"primary"}
|
|
789
|
-
, {
|
|
790
|
-
onClick: this.onDelete.bind(this),
|
|
791
|
-
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
792
|
-
danger: true
|
|
793
|
-
}, "\u5220\u9664"));
|
|
794
|
-
} else if (deletePosition == "row") {
|
|
795
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button
|
|
796
|
-
// type={"primary"}
|
|
797
|
-
, {
|
|
798
|
-
onClick: record => {
|
|
799
|
-
this.onDelete(record);
|
|
1001
|
+
}, props), (_buttonMap$code = buttonMap[code]) === null || _buttonMap$code === void 0 ? void 0 : _buttonMap$code.name);
|
|
1002
|
+
};
|
|
1003
|
+
const checkPerssion = code => {
|
|
1004
|
+
if (!permission.has) {
|
|
1005
|
+
return true;
|
|
1006
|
+
} else {
|
|
1007
|
+
return permissionButtons.indexOf(code) > -1;
|
|
1008
|
+
}
|
|
1009
|
+
};
|
|
1010
|
+
buttons.map(item => {
|
|
1011
|
+
if ((item == "add" || item.code == "add") && checkPerssion("add")) {
|
|
1012
|
+
toolButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
1013
|
+
type: "primary",
|
|
1014
|
+
onClick: () => {
|
|
1015
|
+
const {
|
|
1016
|
+
onShowForm,
|
|
1017
|
+
buttonClick = {}
|
|
1018
|
+
} = this.props;
|
|
1019
|
+
if (buttonClick !== null && buttonClick !== void 0 && buttonClick.onAdd) {
|
|
1020
|
+
var _this$props$formProps2;
|
|
1021
|
+
converFunction(buttonClick.onAdd, {
|
|
1022
|
+
pageRef: this.props.pageRef,
|
|
1023
|
+
funcs: (_this$props$formProps2 = this.props.formProps) === null || _this$props$formProps2 === void 0 ? void 0 : _this$props$formProps2.funcs
|
|
1024
|
+
}, this.props.Utils);
|
|
1025
|
+
return;
|
|
1026
|
+
}
|
|
1027
|
+
if (onShowForm) {
|
|
1028
|
+
onShowForm(null, "add");
|
|
1029
|
+
return;
|
|
1030
|
+
}
|
|
1031
|
+
this.showForm();
|
|
800
1032
|
},
|
|
801
|
-
icon: /*#__PURE__*/React.createElement(
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
1033
|
+
icon: /*#__PURE__*/React.createElement(PlusOutlined, null)
|
|
1034
|
+
}, "\u6DFB\u52A0"));
|
|
1035
|
+
} else if ((item == "delete" || item.code == "delete") && checkPerssion("delete")) {
|
|
1036
|
+
if (deletePosition == "toolbar") {
|
|
1037
|
+
toolButtons.push( /*#__PURE__*/React.createElement(Button
|
|
1038
|
+
// type={"primary"}
|
|
1039
|
+
, {
|
|
1040
|
+
onClick: this.onDelete.bind(this),
|
|
1041
|
+
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
1042
|
+
danger: true
|
|
1043
|
+
}, "\u5220\u9664"));
|
|
1044
|
+
} else {
|
|
1045
|
+
columnButtons.push(returnButton(item.code || item, item.recordShow));
|
|
1046
|
+
}
|
|
1047
|
+
} else {
|
|
1048
|
+
if (checkPerssion(item.code)) {
|
|
1049
|
+
columnButtons.push(returnButton(item.code || item, item.recordShow));
|
|
1050
|
+
}
|
|
805
1051
|
}
|
|
806
|
-
}
|
|
1052
|
+
});
|
|
807
1053
|
if (Array.isArray(children)) {
|
|
808
1054
|
children.map(item => {
|
|
809
1055
|
if (Array.isArray(item)) {
|
|
810
1056
|
item.map(child => {
|
|
811
|
-
var _child$props, _child$props2, _child$props3;
|
|
812
|
-
if ((child === null || child === void 0 || (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.pageType) == "toolButton") {
|
|
813
|
-
|
|
814
|
-
} else if ((child === null || child === void 0 || (_child$
|
|
1057
|
+
var _child$props, _child$props2, _child$props3, _child$props4;
|
|
1058
|
+
if ((child === null || child === void 0 || (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.pageType) == "toolButton" && checkPerssion(child === null || child === void 0 || (_child$props2 = child.props) === null || _child$props2 === void 0 ? void 0 : _child$props2.code)) {
|
|
1059
|
+
toolButtons.push(child);
|
|
1060
|
+
} else if ((child === null || child === void 0 || (_child$props3 = child.props) === null || _child$props3 === void 0 ? void 0 : _child$props3.pageType) == "columnButton" && checkPerssion(child === null || child === void 0 || (_child$props4 = child.props) === null || _child$props4 === void 0 ? void 0 : _child$props4.code)) {
|
|
815
1061
|
columnButtons.push(child);
|
|
816
1062
|
}
|
|
817
1063
|
});
|
|
818
1064
|
} else {
|
|
819
|
-
var _item$props5, _item$props6, _item$props7;
|
|
820
|
-
if ((item === null || item === void 0 || (_item$props5 = item.props) === null || _item$props5 === void 0 ? void 0 : _item$props5.pageType) == "toolButton") {
|
|
821
|
-
|
|
822
|
-
} else if ((item === null || item === void 0 || (_item$
|
|
1065
|
+
var _item$props5, _item$props6, _item$props7, _item$props8;
|
|
1066
|
+
if ((item === null || item === void 0 || (_item$props5 = item.props) === null || _item$props5 === void 0 ? void 0 : _item$props5.pageType) == "toolButton" && checkPerssion(item === null || item === void 0 || (_item$props6 = item.props) === null || _item$props6 === void 0 ? void 0 : _item$props6.code)) {
|
|
1067
|
+
toolButtons.push(item);
|
|
1068
|
+
} else if ((item === null || item === void 0 || (_item$props7 = item.props) === null || _item$props7 === void 0 ? void 0 : _item$props7.pageType) == "columnButton" && checkPerssion(item === null || item === void 0 || (_item$props8 = item.props) === null || _item$props8 === void 0 ? void 0 : _item$props8.code)) {
|
|
823
1069
|
columnButtons.push(item);
|
|
824
1070
|
}
|
|
825
1071
|
}
|
|
@@ -828,9 +1074,9 @@ class BasePage extends PureComponent {
|
|
|
828
1074
|
const {
|
|
829
1075
|
props
|
|
830
1076
|
} = children;
|
|
831
|
-
if ((props === null || props === void 0 ? void 0 : props.pageType) == "toolButton") {
|
|
832
|
-
|
|
833
|
-
} else if ((props === null || props === void 0 ? void 0 : props.pageType) == "
|
|
1077
|
+
if ((props === null || props === void 0 ? void 0 : props.pageType) == "toolButton" && checkPerssion(props === null || props === void 0 ? void 0 : props.code)) {
|
|
1078
|
+
toolButtons.push(children);
|
|
1079
|
+
} else if ((props === null || props === void 0 ? void 0 : props.pageType) == "columnButton" && checkPerssion(props === null || props === void 0 ? void 0 : props.code)) {
|
|
834
1080
|
columnButtons.push(children);
|
|
835
1081
|
}
|
|
836
1082
|
}
|
|
@@ -858,7 +1104,7 @@ class BasePage extends PureComponent {
|
|
|
858
1104
|
let {
|
|
859
1105
|
tableTool
|
|
860
1106
|
} = config();
|
|
861
|
-
let toolFlag = showToolButton &&
|
|
1107
|
+
let toolFlag = showToolButton && toolButtons.length > 0 && toolButtonPosition == "buttom";
|
|
862
1108
|
let toolbarFlag = !(tableProps.toolbar == false || ((_tableProps$toolbar = tableProps.toolbar) === null || _tableProps$toolbar === void 0 ? void 0 : _tableProps$toolbar.show) == false || ((_tableProps$toolbar2 = tableProps.toolbar) === null || _tableProps$toolbar2 === void 0 || (_tableProps$toolbar2 = _tableProps$toolbar2.tools) === null || _tableProps$toolbar2 === void 0 ? void 0 : _tableProps$toolbar2.length) == 0 || (tableTool === null || tableTool === void 0 ? void 0 : tableTool.show) == false);
|
|
863
1109
|
let pageHeight = this.props.pageType == "tabspage" ? 63 : 0;
|
|
864
1110
|
let tableHeaderHeight = 55;
|
|
@@ -914,7 +1160,15 @@ class BasePage extends PureComponent {
|
|
|
914
1160
|
searchForms: searchForms,
|
|
915
1161
|
toolButtonPosition: toolButtonPosition,
|
|
916
1162
|
onSearch: this.onSearch.bind(this),
|
|
917
|
-
onReset:
|
|
1163
|
+
onReset: () => {
|
|
1164
|
+
var _this$searchRef$curre3;
|
|
1165
|
+
if (this.props.onReset) {
|
|
1166
|
+
this.props.onReset();
|
|
1167
|
+
return;
|
|
1168
|
+
}
|
|
1169
|
+
(_this$searchRef$curre3 = this.searchRef.current) === null || _this$searchRef$curre3 === void 0 || _this$searchRef$curre3.resetFields();
|
|
1170
|
+
this.tableLoad({});
|
|
1171
|
+
},
|
|
918
1172
|
ref: this.searchRef,
|
|
919
1173
|
searchFormProps: this.props.searchFormProps
|
|
920
1174
|
})), /*#__PURE__*/React.createElement("div", {
|
|
@@ -925,7 +1179,7 @@ class BasePage extends PureComponent {
|
|
|
925
1179
|
className: cls(getLess(styles, "nsc-basepage-table-title"), {
|
|
926
1180
|
[getLess(styles, "nsc-basepage-title-width")]: !toolbarFlag
|
|
927
1181
|
})
|
|
928
|
-
}, /*#__PURE__*/React.createElement("div", null, tableTitle), toolFlag && this.renderToolButtons(
|
|
1182
|
+
}, /*#__PURE__*/React.createElement("div", null, tableTitle), toolFlag && this.renderToolButtons(toolButtons, toolbarFlag)), /*#__PURE__*/React.createElement("div", {
|
|
929
1183
|
className: cls(getLess(styles, "nsc-basepage-table"), {
|
|
930
1184
|
[getLess(styles, "nsc-basepage-table-top")]: !toolbarFlag
|
|
931
1185
|
}, {
|
|
@@ -977,11 +1231,13 @@ class BasePage extends PureComponent {
|
|
|
977
1231
|
style: {
|
|
978
1232
|
height: tableHeight
|
|
979
1233
|
}
|
|
980
|
-
}, tableParams))))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
1234
|
+
}, tableParams))))), editorForm && /*#__PURE__*/React.createElement(EditorForm, _extends({
|
|
981
1235
|
ref: this.editorRef,
|
|
982
1236
|
callBack: () => {
|
|
983
|
-
var _this$props$
|
|
984
|
-
((_this$props$
|
|
1237
|
+
var _this$props$onCallBac6, _this$props$onCallBac7;
|
|
1238
|
+
((_this$props$onCallBac6 = this.props.onCallBacks) === null || _this$props$onCallBac6 === void 0 ? void 0 : _this$props$onCallBac6.onSumbitCallBack) && converFunction((_this$props$onCallBac7 = this.props.onCallBacks) === null || _this$props$onCallBac7 === void 0 ? void 0 : _this$props$onCallBac7.onSumbitCallBack, {
|
|
1239
|
+
pageRef: this.props.pageRef
|
|
1240
|
+
}, this.props.Utils);
|
|
985
1241
|
this.tableReload();
|
|
986
1242
|
},
|
|
987
1243
|
forms: editorForms,
|
|
@@ -993,9 +1249,15 @@ class BasePage extends PureComponent {
|
|
|
993
1249
|
onFormChange: this.props.onFormChange,
|
|
994
1250
|
formType: this.props.formType || "auto",
|
|
995
1251
|
changeValid: formChangeValid,
|
|
996
|
-
|
|
997
|
-
|
|
1252
|
+
Utils: this.props.Utils,
|
|
1253
|
+
requestObject: {
|
|
1254
|
+
addUrl: requestUrls.addUrl,
|
|
1255
|
+
editorUrl: requestUrls.editorUrl,
|
|
1256
|
+
addParams: requestParams.addParams,
|
|
1257
|
+
editorParams: requestParams.editorParams
|
|
1258
|
+
}
|
|
1259
|
+
}, formProps))));
|
|
998
1260
|
}
|
|
999
1261
|
}
|
|
1000
1262
|
export default BasePage;
|
|
1001
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsInV0aWxzIiwiRG93bk91dGxpbmVkIiwiRXllT3V0bGluZWQiLCJFZGl0T3V0bGluZWQiLCJSaWdodE91dGxpbmVkIiwiUGx1c091dGxpbmVkIiwiRWxsaXBzaXNPdXRsaW5lZCIsIkRlbGV0ZU91dGxpbmVkIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiSGVhZGVyU2VhcmNoIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJzdG9yZVByZWZpeCIsInR5cGUiLCJjb250ZW50Iiwic2l6ZSIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdGVkUm93RGF0YXMiLCJ0cmVlU2VsZWN0ZWRLZXkiLCJleHBhbmQiLCJmb3JtVHlwZSIsInRhYmxlU2l6ZSIsInRyZWVTZWFyY2hQcmFtcyIsInBvcG9wZW5zIiwibW9yZU9wZW4iLCJlbGVtZW50SGVpZ2h0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQiLCJpbml0RGF0YSIsInBhZ2VSZWYiLCJjdXJyZW50IiwiY2xpZW50SGVpZ2h0Iiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQyIiwic2V0U2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiY2FsbEJhY2siLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUiLCJzZWFyY2hSZWYiLCJkb1N1Ym1pdCIsImRhdGEiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUiLCJsYWJlbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImVkaXRvclJlZiIsInNob3dGb3JtIiwiX3RoaXMkZWRpdG9yUmVmIiwiZWRpdG9yZmxhZyIsIm5ld1ZhbHVlIiwiX29iamVjdFNwcmVhZCIsInNob3ciLCJoaWRlRm9ybSIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTIiLCJzZXRMb2FkaW5nIiwibG9hZGluZyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTMiLCJzZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTQiLCJzZXRGb3JtVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTUiLCJnZXRGb3JtVmFsdWUiLCJvbkRlbGV0ZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsImRlbGV0ZVVybCIsImRlbGV0ZVBhcmFtcyIsImRlbGV0ZVBvc2l0aW9uIiwiX3RoaXMiLCJ0YWJsZVJlZiIsImdldFNlbGVjdGVkUm93S2V5cyIsIndhcm5pbmciLCJjb25maXJtIiwib25PayIsIkVycm9yIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsImF1dG9QcmVmaXgiLCJpZHMiLCJqb2luIiwiaWQiLCJyZXF1ZXN0UGFyYW1zIiwidGhlbiIsImNvZGUiLCJfdGhpcyRzZWFyY2hSZWYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMyIiwic3VjY2VzcyIsImdldFNlYXJjaFZhbHVlcyIsIm9uQ2FsbEJhY2tzIiwib25EZWxldGVDYWxsQmFjayIsInRhYmxlTG9hZCIsImVycm9yIiwiY2F0Y2giLCJjb25zb2xlIiwibG9nIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMiIsInJlcXVlc3RDb25maWciLCJzdG9yZSIsImxvYWQiLCJvblNlYXJjaENhbGxCYWNrIiwiY2FsbGJhY2siLCJ0YWJsZVJlbG9hZCIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjMiLCJhdXRvTG9hZCIsInJlbG9hZCIsIl9yZXMkZGF0YSIsInJlY29yZHMiLCJjdXJyZW50UGFnZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjQiLCJ0cmVlTG9hZCIsIl90aGlzJHRyZWVSZWYkY3VycmVudCIsInRyZWVSZWYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW41IiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjYiLCJzZXRTZWxlY3RlZFJvd0tleXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW43Iiwic2V0U2VsZWN0ZWRSb3dEYXRhcyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjgiLCJyZXNldFNlbGVjdGVkUm93S2V5cyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjkiLCJfdGhpcyRzZWFyY2hSZWYyIiwiZnJvbVZhbHVlIiwiZ2V0Q2hpbGRyZW5EYXRhIiwidGFibGVQcm9wcyIsInJvd0tleSIsInJlc0tleSIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsIm1hcCIsIml0ZW0iLCJpbmRleCIsInJlbmRlclRvb2xCdXR0b25zIiwidG9vbGJ1dHRvbnMiLCJ0b29sYmFyRmxhZyIsImZsYWciLCJzaG93U2VhcmNoIiwiX2l0ZW0kcHJvcHMiLCJwYWdlVHlwZSIsIm9uQ2xpY2siLCJpY29uIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIl9leHRlbmRzIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJ0aXRsZSIsInBsYWNlbWVudCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJjb2x1bW5CdXR0b25zIiwicmVjb3JkIiwiYWN0aW9uUHJvcHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwiX2l0ZW0kcHJvcHMyIiwicmVjb3JkU2hvdyIsIl9leGNsdWRlZDIiLCJldmFsIiwicHVzaCIsIm51bWJlciIsImJ1dHRvbk51bWJlciIsIl9pdGVtJHByb3BzMyIsIl9leGNsdWRlZDMiLCJOdW1iZXIiLCJfaXRlbSRwcm9wczQiLCJfZXhjbHVkZWQ0IiwidHJpZ2dlciIsInRyZWVTZWxlY3QiLCJzZWxlY3RlZEtleXMiLCJvYmoiLCJfdGhpcyRzZWFyY2hSZWYzIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzQiLCJrZXl3b3JkIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJwYXJhbnRTZWxlY3QiLCJ0cmVlUHJvcHMiLCJzZWxlY3RlZE5vZGVzIiwiZGF0YXJlZiIsImF0dHJpYnV0ZSIsImlzTGVhZiIsIm9uVHJlZVNlbGVjdCIsInRyZWVTZWxlY3RDYWxsQmFjayIsInJlc2V0U2VhcmNoIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlMiIsInJlc2V0RmllbGRzIiwiZ2V0VGV4dCIsInRleHQiLCJfcHJvcHMkZGF0YSIsIm5ld1RleHQiLCJpIiwic2V0VGFibGVEYXRhIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMTAiLCJzZXREYXRhIiwic2V0VHJlZURhdGEiLCJfdGhpcyR0cmVlUmVmJGN1cnJlbnQyIiwicmVuZGVyIiwiX3RhYmxlUHJvcHMkdG9vbGJhciIsIl90YWJsZVByb3BzJHRvb2xiYXIyIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1Qcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJmaWx0ZXJDb2x1bW4iLCJhY3Rpb25Db2x1bW4iLCJzaG93Um93U2VsZWN0aW9uIiwiY29sdW1uT3JkZXIiLCJleHBhbmRhYmxlIiwidGFibGVUaXRsZSIsIm90aGVydGFibGVQYXJhbXMiLCJfZXhjbHVkZWQ1IiwidHJlZVN0b3JlIiwidHJlZVNlYXJjaCIsInRpdGxlQWxpYXMiLCJ0cmVlVGl0bGUiLCJvdGhlcnRyZWVQYXJhbXMiLCJfZXhjbHVkZWQ2IiwidGFibGVQYXJhbXMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJkZWZhdWx0VmFsdWUiLCJfdGVtcCRzZWFyY2giLCJfdGVtcCRwcm9wcyIsIl90ZW1wJHByb3BzMiIsIl90ZW1wUHJvcCRkYXRhIiwiX3RlbXAiLCJ0ZW1wIiwid2lkdGgiLCJzZWFyY2giLCJfdGVtcCRzZWFyY2gyIiwiX3RlbXAkc2VhcmNoMyIsIl90ZW1wJHNlYXJjaDQiLCJmaWVsZCIsImRhdGFJbmRleCIsImxhYmVsQ29sIiwid3JhcHBlckNvbCIsInJ1bGVzIiwic2VhcmNoUnVsZXMiLCJlZGl0b3IiLCJzcGFuIiwiZGljdE5hbWUiLCJfdGVtcCRwcm9wczMiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsInRlbXBQcm9wIiwiZWxsaXBzaXMiLCJzaG93VGl0bGUiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJpbmRleE9mIiwiYmluZCIsImRhbmdlciIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkIiwiX2NoaWxkJHByb3BzIiwiX2NoaWxkJHByb3BzMiIsIl9jaGlsZCRwcm9wczMiLCJfaXRlbSRwcm9wczUiLCJfaXRlbSRwcm9wczYiLCJfaXRlbSRwcm9wczciLCJhbGlnbiIsInRleHRBbGlnbiIsImZpeGVkIiwicmVhY29yZCIsIkZyYWdtZW50Iiwic2VhcmNoRmxhZyIsInRhYmxlVG9vbCIsInRvb2xGbGFnIiwidG9vbGJhciIsInRvb2xzIiwicGFnZUhlaWdodCIsInRhYmxlSGVhZGVySGVpZ2h0IiwiaGVhZGVySGVpZ2h0IiwidG9vbEhlaWdodCIsInBhZGRpbmdIZWlnaHQiLCJ0YWJsZUNvbnRlbnRIZWlnaHQiLCJ0YWJsZUhlaWdodCIsInRhYmxlU3JvbGxIZWlnaHQiLCJwYWdpbmF0aW9uIiwic2Nyb2xsIiwieCIsInkiLCJyZWYiLCJwYWdlVGl0bGUiLCJkaXNwbGF5IiwiY2hlY2thYmxlIiwic2VhcmNoYWJsZSIsIm9uU2VsZWN0Iiwib25SZXNldCIsInNlYXJjaEZvcm1Qcm9wcyIsImhlaWdodCIsImV4cGFuZEljb24iLCJfcmVmIiwiX3JlY29yZCRjaGlsZE5vZGVzIiwiX3JlY29yZCRjaGlsZE5vZGVzMiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJlIiwib25DaGFuZ2UiLCJvblRvb2xDbGljayIsIm9uUmVmcmVzaCIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzUiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM2Iiwib25TdW1iaXRDYWxsQmFjayIsImZvcm1zIiwib25TdWJtaXQiLCJvbkhpZGVGb3JtIiwib25Gb3JtQ2hhbmdlIiwiY2hhbmdlVmFsaWQiLCJvdGhlclByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGFnZS9CYXNlUGFnZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi8uLi9iYXNlL2J1dHRvblwiO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uL2Jhc2UvbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL2Jhc2UvcG9wb3ZlclwiO1xyXG5pbXBvcnQgbWVzc2FnZSBmcm9tIFwiLi4vLi4vYmFzZS9tZXNzYWdlXCI7XHJcbmltcG9ydCBFZGl0b3JGb3JtIGZyb20gXCIuLi9Gb3JtUGFnZS9pbmRleFwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBEb3duT3V0bGluZWQsXHJcbiAgRXllT3V0bGluZWQsXHJcbiAgRWRpdE91dGxpbmVkLFxyXG4gIFJpZ2h0T3V0bGluZWQsXHJcbiAgUGx1c091dGxpbmVkLFxyXG4gIEVsbGlwc2lzT3V0bGluZWQsXHJcbiAgRGVsZXRlT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSBcIm5zYy1yZXF1ZXN0XCI7XHJcbmltcG9ydCBvbWl0IGZyb20gXCJvbWl0LmpzXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgeyBnZXRTdG9yYWdlLCBweDJ2dyB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBJRm9ybVByb3BzIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZm9ybS9Gb3JtXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBudW1iZXIgfSBmcm9tIFwiZWNoYXJ0c1wiO1xyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbiB8IFBhZ2luYXRpb25Qcm9wczsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmNvbnN0IHN0eWxlcyA9IG51bGw7XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIHBhcmFudFNlbGVjdD86IGJvb2xlYW47XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBGb3JtUHJvcHMgZXh0ZW5kcyBJRm9ybVByb3BzIHsgfVxyXG5pbnRlcmZhY2UgTlNDQmFzZUJhZ2VQcm9wcyB7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65aS06YOo5pCc57Si5qCPXHJcbiAgdGFibGVQcm9wcz86IFRhYmxlUHJvcHM7IC8v6KGo5qC85Y+C5pWwXHJcbiAgdHJlZVByb3BzPzogVHJlZVByb3BzOyAvL+W3puS+p+agkeWPguaVsFxyXG4gIHN1Ym1pdFBhcmFtcz86IE9iamVjdDsgLy/mt7vliqDlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dkYXRh5Lyg6YCSXHJcbiAgc3VibWl0VXJsPzogc3RyaW5nO1xyXG4gIG9uU3VibWl0PzogKHZhbHVlPzogYW55LCBsYWJlbD86IGFueSkgPT4gdm9pZDtcclxuICBjb2x1bW5zOiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9ICwg5Li6ZmFsc2Ug57yW6L6R77yM5p+l55yL77yM5paw5aKe5Yqf6IO95Z2H5LiN5Y+v55SoXHJcbiAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIG9uRGVsZXRlPzogKHNlbGVjdGVkS2V5cz86IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7IC8v5Yig6Zmk5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HaWRz5ou85o6l5Lyg6YCS57uZ5ZCO5Y+wXHJcbiAgZGVsZXRlUG9zaXRpb24/OiBcInRvb2xiYXJcIiB8IFwicm93XCI7XHJcbiAgZGVsZXRlUGFyYW1zPzogT2JqZWN0O1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xyXG4gIGluaXREYXRhPzogYW55OyAvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbiAgYnV0dG9ucz86IEFycmF5PHN0cmluZz47IC8v5oyJ6ZKu6ZuG5ZCIICBbJ2FkZCcsJ2RlbGV0ZScsJ3NlYXJjaCcsJ2VkaXRvciddXHJcbiAgb25TaG93Rm9ybT86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkhpZGVGb3JtPzogKCkgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkZvcm1DaGFuZ2U/OiAoY2hhbmdlZFZhbHVlcz86IGFueSwgYWxsVmFsdWVzPzogYW55KSA9PiB2b2lkOyAvL+ihqOWNlW9uQ2hhbmdl5Zue6LCDXHJcbiAgZm9ybVR5cGU/OiBcIm1vZGFsXCIgfCBcImRyYXdlclwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGZvcm1Qcm9wcz86IEZvcm1Qcm9wcztcclxuICBhY3Rpb25Qcm9wcz86IHtcclxuICAgIHRleHRBbGlnbj86IHN0cmluZztcclxuICAgIHNob3dJY29uPzogYm9vbGVhbjtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgYnV0dG9uTnVtYmVyPzogbnVtYmVyIHwgXCJhbGxcIjtcclxuICB9O1xyXG4gIHNlYXJjaEZvcm1Qcm9wcz86IHsgd3JhcHBlckNvbD86IGFueTsgbGFiZWxDb2w/OiBhbnkgfTtcclxuICBvblRyZWVTZWxlY3Q/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25DYWxsQmFja3M/OiB7XHJcbiAgICB0cmVlU2VsZWN0Q2FsbEJhY2s/OiBhbnk7XHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55O1xyXG4gICAgb25TdW1iaXRDYWxsQmFjaz86IGFueTtcclxuICAgIG9uRGVsZXRlQ2FsbEJhY2s/OiBhbnk7XHJcbiAgfTtcclxuICBwYWdlVHlwZT86IFwibm9ybWFsXCIgfCBcInRhYnNwYWdlXCI7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IHsgc3RvcmVQcmVmaXggfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHR5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcImZvcm1UeXBlXCIgOiBcImZvcm1UeXBlXCJcclxuICAgICk7XHJcbiAgICB0eXBlID0gdHlwZT8uY29udGVudDtcclxuICAgIGxldCBzaXplID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBzaXplID0gc2l6ZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICAgIGZvcm1UeXBlOiB0eXBlIHx8IFwibW9kYWxcIixcclxuICAgICAgdGFibGVTaXplOiBzaXplIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICBwb3BvcGVuczoge30sXHJcbiAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgZWxlbWVudEhlaWdodDogMCxcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBpbml0RGF0YSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgaWYgKGVsZW1lbnRIZWlnaHQgPiB0aGlzLnN0YXRlLmVsZW1lbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZWxlbWVudEhlaWdodCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG4gIGRvU3VibWl0KGRhdGEsIGxhYmVsID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZG9TdWJtaXQoZGF0YSwgbGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlYXJjaCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIikge1xyXG4gICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUgPyB7IC4uLnZhbHVlIH0gOiBudWxsO1xyXG4gICAgdGhpcy5lZGl0b3JSZWY/LmN1cnJlbnQ/LnNob3cobmV3VmFsdWUsIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSwgdHlwZSA9ICfnvJbovpEnKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zZXRGb3JtVmFsdWUodmFsdWUsIHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdEZvcm1WYWx1ZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZ2V0Rm9ybVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvL+aJuemHj+WIoOmZpFxyXG4gIG9uRGVsZXRlKGRhdGE/OiBhbnkpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgZGVsZXRlVXJsLFxyXG4gICAgICBvbkRlbGV0ZSxcclxuICAgICAgZGVsZXRlUGFyYW1zLFxyXG4gICAgICBkZWxldGVQb3NpdGlvbiA9IFwidG9vbGJhclwiLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgICAgIG9uRGVsZXRlICYmXHJcbiAgICAgICAgICAgIG9uRGVsZXRlKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzIDogZGF0YSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVsZXRlVXJsKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBpZHM6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSA6IGRhdGEuaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IHJlcXVlc3RQYXJhbXMgPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQYXJhbXMpIHtcclxuICAgICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlbGV0ZVBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWZhdWx0UGFyYW1zIH07XHJcbiAgICAgICAgcmVxdWVzdChkZWxldGVVcmwsIHtcclxuICAgICAgICAgIC4uLnJlcXVlc3RQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25EZWxldGVDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxyXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3QgeyBvblNlYXJjaCwgb25DYWxsQmFja3MgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAob25TZWFyY2gpIHtcclxuICAgICAgb25TZWFyY2goeyAuLi5wYXJhbXMsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYmxlTG9hZCh7IC4uLnBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICBvbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjayAmJlxyXG4gICAgICB1dGlscy5jYWxsYmFjayhvbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjaywgdGhpcywgW3BhcmFtc10pO1xyXG4gIH1cclxuICAvL+ihqOagvOmHjeaWsOWKoOi9vVxyXG4gIHRhYmxlUmVsb2FkKHBhcmFtcyA9IHt9LCBhdXRvTG9hZCA9IHRydWUpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgIGNhbGxiYWNrOiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYXV0b0xvYWQgJiZcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucmVjb3Jkcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgIT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgICAgICAgIHBhcmFtczogeyBjdXJyZW50OiAxLCAuLi5wYXJhbXMgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICB0cmVlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YTogQXJyYXk8U3RyaW5nIHwgTnVtYmVyPikge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGEpO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGE6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkUm93RGF0YXMoZGF0YSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8ucmVzZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFZhbHVlcygpIHtcclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgIHJldHVybiB7IC4uLmZyb21WYWx1ZSwgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuRGF0YShkYXRhLCBrZXlzID0gW10pIHtcclxuICAgIGNvbnN0IHsgdGFibGVQcm9wcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHJlc0tleSA9IFtdO1xyXG4gICAgbGV0IGtleSA9ICcnXHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZE5vZGVzO1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByb3dLZXkgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBrZXkgPSByb3dLZXkoaXRlbSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAga2V5ID0gaXRlbVtyb3dLZXldXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5EYXRhKGl0ZW0uY2hpbGROb2Rlcywga2V5cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNLZXkgPSBbLi4ua2V5cywga2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNLZXk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJUb29sQnV0dG9ucyh0b29sYnV0dG9uczogYW55LCB0b29sYmFyRmxhZykge1xyXG4gICAgY29uc3QgZmxhZyA9IHRvb2xidXR0b25zLmxlbmd0aCA+IDU7XHJcbiAgICAvLyB0b29sYnV0dG9ucyA9IFsuLi50b29sYnV0dG9uc10ucmV2ZXJzZSgpO1xyXG4gICAgY29uc3QgeyBzaG93U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiAzKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRvb2wtYnV0dG9uc1wiKSl9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMTIsXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLm1vcmVPcGVufVxyXG4gICAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlT3BlbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgLy8gb3Blbj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wLWJveCddfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAg5pu05aSaIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IGluZGV4ID09IHRvb2xidXR0b25zLmxlbmd0aCAtIDEgPyAwIDogMTIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJlY29yZDogYW55KSB7XHJcbiAgICBjb25zdCB7IGFjdGlvblByb3BzLCB0YWJsZVByb3BzID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSAnaWQnIH0gPSB0YWJsZVByb3BzXHJcblxyXG4gICAgbGV0IGtleSA9ICcnXHJcbiAgICBpZiAodHlwZW9mIHJvd0tleSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAga2V5ID0gcm93S2V5KHJlY29yZClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9IHJlY29yZFtyb3dLZXldXHJcbiAgICB9XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHJlY29yZFNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAocmVjb3JkU2hvdykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICBpZiAoZXZhbChyZWNvcmRTaG93KSkge1xyXG4gICAgICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHNob3cgPSByZWNvcmRTaG93KHJlY29yZCk7XHJcbiAgICAgICAgICBzaG93ICYmIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBudW1iZXIgPSBhY3Rpb25Qcm9wcz8uYnV0dG9uTnVtYmVyXHJcbiAgICAgID8gYWN0aW9uUHJvcHM/LmJ1dHRvbk51bWJlclxyXG4gICAgICA6IGJhc2VBY3Rpb25Db2x1bW4/LmJ1dHRvbk51bWJlclxyXG4gICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbj8uYnV0dG9uTnVtYmVyXHJcbiAgICAgICAgOiAzO1xyXG4gICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgIGlmIChudW1iZXIgPT0gXCJhbGxcIikge1xyXG4gICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiBOdW1iZXIobnVtYmVyKSAtIDEpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgZGF0YVtyZWNvcmQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBwb3BvcGVuczogZGF0YSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIGlmIChpbmRleCA8IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGljb249e2ljb259XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBudW1iZXIpIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5wb3BvcGVuc1trZXldIHx8IGZhbHNlfVxyXG4gICAgICAgICAgICAgIG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AnXX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKX0+XHJcbiAgICAgICAgICAgICAgICA8RWxsaXBzaXNPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvci1maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICB0eXBlPVwibGlua1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICAvL+agkeeCueWHu+S6i+S7tlxyXG4gIHRyZWVTZWxlY3Qoc2VsZWN0ZWRLZXlzOiBhbnksIG9iajogYW55KSB7XHJcbiAgICBsZXQga2V5d29yZCA9IFwiXCI7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHNlYXJjaEtleSA9IFwia2V5XCIsXHJcbiAgICAgIHNlYXJjaEZpZWxkID0gXCJcIixcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgIH0gPSB0aGlzLnByb3BzLnRyZWVQcm9wcztcclxuICAgIGNvbnN0IHsgdHJlZVNlbGVjdGVkS2V5IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZCwgc2VsZWN0ZWROb2RlcyB9ID0gb2JqO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBrZXl3b3JkID0gc2VsZWN0ZWROb2Rlc1swXS5kYXRhcmVmLmF0dHJpYnV0ZVtzZWFyY2hLZXldO1xyXG4gICAgICBpZiAocGFyYW50U2VsZWN0KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkTm9kZXNbMF0uaXNMZWFmIHx8ICFzZWxlY3RlZE5vZGVzWzBdLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRLZXlzWzBdICE9PSB0cmVlU2VsZWN0ZWRLZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IGtleXdvcmQsXHJcbiAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7fSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblRyZWVTZWxlY3QpIHtcclxuICAgICAgdGhpcy5wcm9wcy5vblRyZWVTZWxlY3Qoc2VsZWN0ZWRLZXlzLCBvYmopO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCkgfHwge307XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLnRhYmxlTG9hZCh7IC4uLmZyb21WYWx1ZSwgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9KTtcclxuICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjayAmJlxyXG4gICAgICB1dGlscy5jYWxsYmFjayh0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2ssIHRoaXMsIFtcclxuICAgICAgICBzZWxlY3RlZEtleXMsXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICBdKTtcclxuICB9XHJcbiAgcmVzZXRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gIH1cclxuICBnZXRUZXh0KHByb3BzLCB0ZXh0KSB7XHJcbiAgICBsZXQgbmV3VGV4dCA9IHRleHQ7XHJcbiAgICBpZiAocHJvcHM/LmRhdGEgJiYgcHJvcHM/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGRhdGEgPSBwcm9wcy5kYXRhO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGFbaV0udmFsdWUgPT0gdGV4dCkge1xyXG4gICAgICAgICAgbmV3VGV4dCA9IGRhdGFbaV0ubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VGV4dDtcclxuICB9XHJcbiAgc2V0VGFibGVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFRyZWVEYXRhKGRhdGEpIHtcclxuICAgIHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRLZXkgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBpbiBzZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBrZXlzID0gc2VsZWN0ZWRba2V5XTtcclxuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlcyA9IFsuLi5yZXMsIC4uLmtleXNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY29sdW1ucyA9IFtdLFxyXG4gICAgICBzaG93U2VhcmNoID0gdHJ1ZSxcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN1Ym1pdFVybCA9IFwiXCIsXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgICAgdHJlZVByb3BzID0ge30sXHJcbiAgICAgIGZvcm1Qcm9wcyA9IHt9LFxyXG4gICAgICBzaG93TGVmdCA9IGZhbHNlLFxyXG4gICAgICBzdWJtaXRQYXJhbXMgPSB7fSxcclxuICAgICAgc2hvd1Rvb2xCdXR0b24gPSB0cnVlLFxyXG4gICAgICBidXR0b25zID0gW10sXHJcbiAgICAgIGVkaXRvckZvcm0gPSB0cnVlLFxyXG4gICAgICBvblNob3dGb3JtLFxyXG4gICAgICBmb3JtQ2hhbmdlVmFsaWQgPSB0cnVlLFxyXG4gICAgICBjbGFzc05hbWUsXHJcbiAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9IFwiYnV0dG9tXCIsXHJcbiAgICAgIGFjdGlvblByb3BzLFxyXG4gICAgICBkZWxldGVQb3NpdGlvbiA9IFwidG9vbGJhclwiLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlLFxyXG4gICAgICBmaWx0ZXJDb2x1bW4gPSB0cnVlLFxyXG4gICAgICBhY3Rpb25Db2x1bW4gPSB0cnVlLFxyXG4gICAgICBzaG93Um93U2VsZWN0aW9uID0gdHJ1ZSxcclxuICAgICAgY29sdW1uT3JkZXIgPSB0cnVlLFxyXG4gICAgICBleHBhbmRhYmxlID0ge30sXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICAgIHRpdGxlOiB0YWJsZVRpdGxlLFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zXHJcbiAgICB9ID0gdGFibGVQcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LFxyXG4gICAgICBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSxcclxuICAgICAgdGl0bGVBbGlhcyA9IFwidGl0bGVcIixcclxuICAgICAgdGl0bGU6IHRyZWVUaXRsZSxcclxuICAgICAgLi4ub3RoZXJ0cmVlUGFyYW1zXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG4gICAgbGV0IHRhYmxlUGFyYW1zID0geyBmaWx0ZXJDb2x1bW4sIHN0b3JlLCAuLi5vdGhlcnRhYmxlUGFyYW1zIH0gYXMgYW55O1xyXG4gICAgbGV0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGNvbHVtbkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBlbGVtZW50SGVpZ2h0IH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7IHdpZHRoOiAxMDAsIC4uLml0ZW0gfTtcclxuICAgICAgaWYgKHRlbXAuc2VhcmNoID09PSB0cnVlIHx8IHRlbXAuc2VhcmNoPy5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgICAgc2VhcmNoRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAuc2VhcmNoPy5sYWJlbCB8fCB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgICBsYWJlbENvbDogdGVtcC5zZWFyY2g/LmxhYmVsQ29sLFxyXG4gICAgICAgICAgd3JhcHBlckNvbDogdGVtcC5zZWFyY2g/LndyYXBwZXJDb2wsXHJcbiAgICAgICAgICBydWxlczogdGVtcC5zZWFyY2hSdWxlcyA/IHRlbXAuc2VhcmNoUnVsZXMgOiBbXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVsZXRlIHRlbXAuc2VhcmNoO1xyXG4gICAgICB0ZW1wLmVkaXRvciAhPT0gZmFsc2UgJiZcclxuICAgICAgICBlZGl0b3JGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC50aXRsZSxcclxuICAgICAgICAgIHJ1bGVzOiB0ZW1wLnJ1bGVzID8gdGVtcC5ydWxlcyA6IFtdLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgc3BhbjogdGVtcC5zcGFuLFxyXG4gICAgICAgICAgZGljdE5hbWU6IHRlbXAuZGljdE5hbWUsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi50ZW1wLnByb3BzIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IG51bGxcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXg7XHJcbiAgICAgICAgZGVmYXVsdFZhbHVlW25hbWVdID0gdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnJ1bGVzO1xyXG4gICAgICBkZWxldGUgdGVtcC5zcGFuO1xyXG4gICAgICBpZiAodGVtcC5jb2x1bW5TZWFyY2gpIHtcclxuICAgICAgICB0ZW1wLmZpbHRlclByb3BzID0ge1xyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC50eXBlO1xyXG4gICAgICBsZXQgdGVtcFByb3AgPSB7IC4uLnRlbXAucHJvcHMgfTtcclxuXHJcbiAgICAgIGlmICh0ZW1wUHJvcD8uZGF0YSAmJiB0ZW1wUHJvcD8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICBlbGxpcHNpczogeyBzaG93VGl0bGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dCh0ZW1wUHJvcCwgdGV4dCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4udGVtcCxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnByb3BzO1xyXG5cclxuICAgICAgLy8gdGVtcC5lbGxpcHNpcyA9IHRydWU7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUHJvcHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+IC0xKSB7XHJcbiAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgaWNvbj17c2hvd0ljb24gPyA8RXllT3V0bGluZWQgLz4gOiBudWxsfVxyXG4gICAgICAgICAgdHlwZT1cImxpbmtcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIOafpeeci1xyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImVkaXRvclwiKSA+IC0xKSB7XHJcbiAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJlZGl0b3JcIik7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgaWNvbj17c2hvd0ljb24gPyA8RWRpdE91dGxpbmVkIC8+IDogbnVsbH1cclxuICAgICAgICA+XHJcbiAgICAgICAgICDnvJbovpFcclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJhZGRcIikgPiAtMSkge1xyXG4gICAgICBzZWxmQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IG9uU2hvd0Zvcm0gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgb25TaG93Rm9ybShudWxsLCBcImFkZFwiKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgLy8gdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwicm93XCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIC8vIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgICAgaXRlbS5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNsb3VtbkJ1dHRvblwiIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICAgIHNlbGZCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICBwcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIikge1xyXG4gICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGFjdGlvbkNvbHVtbiAmJlxyXG4gICAgICB0YWJsZUNvbHVtbi5wdXNoKHtcclxuICAgICAgICB0aXRsZTogXCLmk43kvZxcIixcclxuICAgICAgICBkYXRhSW5kZXg6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgYWxpZ246IGFjdGlvblByb3BzPy50ZXh0QWxpZ25cclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uLnRleHRBbGlnblxyXG4gICAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICAgIDogXCJsZWZ0XCIsXHJcbiAgICAgICAgd2lkdGg6IGFjdGlvblByb3BzPy53aWR0aFxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgICAgOiAyMDAsXHJcbiAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcclxuICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnksIHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9XHJcbiAgICAgIHNob3dUb29sQnV0dG9uICYmXHJcbiAgICAgIHNlbGZCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCI7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgcGFnZUhlaWdodCA9IHRoaXMucHJvcHMucGFnZVR5cGUgPT0gXCJ0YWJzcGFnZVwiID8gNjMgOiAwO1xyXG4gICAgbGV0IHRhYmxlSGVhZGVySGVpZ2h0ID0gNTU7XHJcblxyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHNob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCA/IDEwNCA6IDA7XHJcbiAgICBsZXQgdG9vbEhlaWdodCA9IHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcgPyA0OCA6IDA7XHJcbiAgICBsZXQgcGFkZGluZ0hlaWdodCA9IDI1O1xyXG4gICAgbGV0IHRhYmxlQ29udGVudEhlaWdodCA9XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQgLSBoZWFkZXJIZWlnaHQgLSB0b29sSGVpZ2h0IC0gcGFkZGluZ0hlaWdodCAtIHBhZ2VIZWlnaHQ7XHJcbiAgICBsZXQgdGFibGVIZWlnaHQgPSB0YWJsZUNvbnRlbnRIZWlnaHQgLSAzMiAtIDMyO1xyXG4gICAgbGV0IHRhYmxlU3JvbGxIZWlnaHQgPSB0YWJsZUNvbnRlbnRIZWlnaHQgLSB0YWJsZUhlYWRlckhlaWdodCAtIDMyIC0gMzI7XHJcbiAgICBpZiAodGFibGVQcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCBzY3JvbGwgPSB0YWJsZVBhcmFtcy5zY3JvbGw7XHJcbiAgICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAgIC4uLnRhYmxlUGFyYW1zLFxyXG4gICAgICAgIHNjcm9sbDogeyB4OiBcIm1heC1jb250ZW50XCIsIHk6IHRhYmxlU3JvbGxIZWlnaHQsIC4uLnNjcm9sbCB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICByZWY9e3RoaXMucGFnZVJlZn1cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZVwiKSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1sZWZ0XCIpfT5cclxuICAgICAgICAgICAgICB7dHJlZVRpdGxlICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLXRpdGxlXCIpfT57dHJlZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLWNvbnRlbnQtbm90aXRsZVwiKV06ICF0cmVlVGl0bGUsXHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8VHJlZVxyXG4gICAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBjaGVja2FibGU9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5cz17W3RoaXMuc3RhdGUudHJlZVNlbGVjdGVkS2V5XX1cclxuICAgICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRyZWVSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIHsuLi5vdGhlcnRyZWVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1yaWdodFwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2Utbm8tbGVmdC1yaWdodFwiKV06ICFzaG93TGVmdCxcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaGVhZGVyc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxIZWFkZXJTZWFyY2hcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoRm9ybXM9e3NlYXJjaEZvcm1zfVxyXG4gICAgICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb249e3Rvb2xCdXR0b25Qb3NpdGlvbn1cclxuICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e3RoaXMub25TZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgb25SZXNldD17dGhpcy5wcm9wcy5vblJlc2V0fVxyXG4gICAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hGb3JtUHJvcHM9e3RoaXMucHJvcHMuc2VhcmNoRm9ybVByb3BzfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtZ2FwXCIpXTogIXNlYXJjaEZsYWcsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7KHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcpICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRpdGxlXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZS13aWR0aFwiKV06ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3RhYmxlVGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCdXR0b25zKHNlbGZCdXR0b25zLCB0b29sYmFyRmxhZyl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlXCIpLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3BcIildOiAhdG9vbGJhckZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRvcDJcIildOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbGJhckZsYWcgJiYgIXRvb2xGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUNvbnRlbnRIZWlnaHQgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVcclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zPXt0YWJsZUNvbHVtbn1cclxuICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2RlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDAgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogcmVjb3JkLmNoaWxkTm9kZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzPy5sZW5ndGggPiAwID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpZ2h0T3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uRXhwYW5kKHJlY29yZCwgZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5PcmRlcj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHBhZ2luYXRpb24uY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXI9e3tcclxuICAgICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBzaG93Um93U2VsZWN0aW9uPXtzaG93Um93U2VsZWN0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAgIC8vIHBhZ2luYXRpb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIHsvKiA8ZGl2PjwvZGl2PiAqL31cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMuZWRpdG9yUmVmfVxyXG4gICAgICAgICAgICAgIGNhbGxCYWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblN1bWJpdENhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2soKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVSZWxvYWQoKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZvcm1zPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIG90aGVyUHJvcHM9e3sgLi4uZm9ybVByb3BzIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxhQUFhLFFBQW1CLE9BQU87QUFDdkQsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxJQUFJLE1BQU0s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
|
|
1263
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsIkRvd25PdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiRWRpdE91dGxpbmVkIiwiUmlnaHRPdXRsaW5lZCIsIlBsdXNPdXRsaW5lZCIsIkVsbGlwc2lzT3V0bGluZWQiLCJEZWxldGVPdXRsaW5lZCIsImNvbnZlckZ1bmN0aW9uIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiZ2V0QnV0dG9uUGVybWlzc29ucyIsIkhlYWRlclNlYXJjaCIsIm5zY2ZpbGUiLCJzdHlsZXMiLCJCYXNlUGFnZSIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfdHlwZSIsIl9zaXplIiwiX2RlZmluZVByb3BlcnR5IiwiY3JlYXRlUmVmIiwiY2hlY2tlZFRyZWVLZXlzIiwibmFtZSIsInVzZXJUeXBlIiwiYWNjb3VudCIsInN0YXRlIiwidmFsdWUiLCJkZXB0SWQiLCJvblNlYXJjaCIsInNlbGVjdGVkIiwicmVzIiwia2V5Iiwia2V5cyIsImxlbmd0aCIsInN0b3JlUHJlZml4IiwidHlwZSIsImNvbnRlbnQiLCJzaXplIiwic2VsZWN0ZWRSb3dLZXlzIiwic2VsZWN0ZWRSb3dEYXRhcyIsInRyZWVTZWxlY3RlZEtleSIsImV4cGFuZCIsImZvcm1UeXBlIiwidGFibGVTaXplIiwidHJlZVNlYXJjaFByYW1zIiwicG9wb3BlbnMiLCJtb3JlT3BlbiIsImVsZW1lbnRIZWlnaHQiLCJwZXJtaXNzaW9uQnV0dG9ucyIsInF1ZXJ5UGFyYW1zIiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQiLCJpbml0RGF0YSIsInBlcm1pc3NvbiIsInBhZ2VSZWYiLCJjdXJyZW50IiwiY2xpZW50SGVpZ2h0Iiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQyIiwic2V0U2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiY2FsbEJhY2siLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUiLCJzZWFyY2hSZWYiLCJkb1N1Ym1pdCIsImRhdGEiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUiLCJsYWJlbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImVkaXRvclJlZiIsInNob3dGb3JtIiwiX3RoaXMkZWRpdG9yUmVmIiwiZWRpdG9yZmxhZyIsIm5ld1ZhbHVlIiwiX29iamVjdFNwcmVhZCIsInNob3ciLCJoaWRlRm9ybSIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTIiLCJzZXRMb2FkaW5nIiwibG9hZGluZyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTMiLCJzZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTQiLCJzZXRGb3JtVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTUiLCJnZXRGb3JtVmFsdWUiLCJvbkRlbGV0ZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjIiLCJkZWxldGVVcmwiLCJkZWxldGVQYXJhbXMiLCJkZWxldGVQb3NpdGlvbiIsImJ1dHRvbkNsaWNrIiwicmVxdWVzdFBhcmFtcyIsInJlcXVlc3RVcmxzIiwicmVxdWVzdENvbmZpZyIsIl90aGlzIiwidGFibGVSZWYiLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwidXJsIiwid2FybmluZyIsImNvbmZpcm0iLCJvbk9rIiwiX3RoaXMkcHJvcHMkZm9ybVByb3BzIiwicmVjb3JkIiwiaWRzIiwiaWQiLCJmdW5jcyIsImZvcm1Qcm9wcyIsIlV0aWxzIiwiRXJyb3IiLCJkYXRhUGFyYW1zIiwib3RoZXJQYXJhbXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJkZWZhdWx0UGFyYW1zIiwibWV0aG9kIiwiYXV0b1ByZWZpeCIsImpvaW4iLCJmaW5hbFBhcmFtcyIsInRoZW4iLCJjb2RlIiwiX3RoaXMkc2VhcmNoUmVmIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMiIsInN1Y2Nlc3MiLCJnZXRTZWFyY2hWYWx1ZXMiLCJvbkNhbGxCYWNrcyIsIm9uRGVsZXRlQ2FsbEJhY2siLCJ0YWJsZUxvYWQiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsIl90YWJsZVN0b3JlJHJlcXVlc3RDbyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjMiLCJkZWZhdWx0UmVxdWVzdENvbmZpZyIsInRhYmxlUHJvcHMiLCJzdG9yZSIsInRhYmxlU3RvcmUiLCJmdW5jIiwiRnVuY3Rpb24iLCJjb252ZXJQYXJhbXMiLCJyZXF1ZXN0Q29uaWciLCJzdG9yZUNvbmZpZyIsInN0b3JlUGFyYW1zIiwib3RoZXJTdG9yZUNvbmZpZyIsIl9leGNsdWRlZDIiLCJsb2FkIiwiX3RhYmxlU3RvcmUkcmVxdWVzdENvMiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzMiLCJvblF1ZXJ5Q2FsbEJhY2siLCJ0YWJsZVJlbG9hZCIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjQiLCJhdXRvTG9hZCIsInJlbG9hZCIsImNhbGxiYWNrIiwiX3JlcyRkYXRhIiwicmVjb3JkcyIsImN1cnJlbnRQYWdlIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNSIsInRyZWVMb2FkIiwiX3RoaXMkdHJlZVJlZiRjdXJyZW50IiwidHJlZVJlZiIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW43Iiwic2V0U2VsZWN0ZWRSb3dLZXlzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOCIsInNldFNlbGVjdGVkUm93RGF0YXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW45IiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMCIsIl90aGlzJHNlYXJjaFJlZjIiLCJmcm9tVmFsdWUiLCJnZXRDaGlsZHJlbkRhdGEiLCJyb3dLZXkiLCJyZXNLZXkiLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJyZW5kZXJUb29sQnV0dG9ucyIsInRvb2xidXR0b25zIiwidG9vbGJhckZsYWciLCJmbGFnIiwic2hvd1NlYXJjaCIsIl9pdGVtJHByb3BzIiwicGFnZVR5cGUiLCJvbkNsaWNrIiwiaWNvbiIsIl9leGNsdWRlZDMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX2V4dGVuZHMiLCJzdHlsZSIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInRpdGxlIiwicGxhY2VtZW50Iiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsInJlbmRlckNsb3VtbkJ1dHRvbiIsImNvbHVtbkJ1dHRvbnMiLCJhY3Rpb25Qcm9wcyIsImJhc2VBY3Rpb25Db2x1bW4iLCJuZXdCdXR0b25zIiwic2hvd0ljb24iLCJfaXRlbSRwcm9wczIiLCJyZWNvcmRTaG93IiwiX2V4Y2x1ZGVkNCIsImV2YWwiLCJwdXNoIiwibnVtYmVyIiwiYnV0dG9uTnVtYmVyIiwiX2l0ZW0kcHJvcHMzIiwiX2V4Y2x1ZGVkNSIsIk51bWJlciIsIl9pdGVtJHByb3BzNCIsIl9leGNsdWRlZDYiLCJ0cmlnZ2VyIiwidHJlZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsIl90aGlzJHNlYXJjaFJlZjMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsImtleXdvcmQiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInRyZWVQcm9wcyIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwib25FZGl0b3JDYWxsQmFjayIsInJlc2V0U2VhcmNoIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlMiIsInJlc2V0RmllbGRzIiwiZ2V0VGV4dCIsInRleHQiLCJfcHJvcHMkZGF0YSIsIm5ld1RleHQiLCJpIiwic2V0VGFibGVEYXRhIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMTEiLCJzZXREYXRhIiwic2V0VHJlZURhdGEiLCJfdGhpcyR0cmVlUmVmJGN1cnJlbnQyIiwiY29udmVydFF1ZXJ5UGFyYW1zIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RhYmxlUHJvcHMkdG9vbGJhciIsIl90YWJsZVByb3BzJHRvb2xiYXIyIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1QYWdlUHJvcHMiLCJzaG93TGVmdCIsInN1Ym1pdFBhcmFtcyIsInNob3dUb29sQnV0dG9uIiwiYnV0dG9ucyIsImVkaXRvckZvcm0iLCJvblNob3dGb3JtIiwiZm9ybUNoYW5nZVZhbGlkIiwidG9vbEJ1dHRvblBvc2l0aW9uIiwicGVybWlzc2lvbiIsImhhcyIsImZpbHRlckNvbHVtbiIsImFjdGlvbkNvbHVtbiIsInNob3dSb3dTZWxlY3Rpb24iLCJjb2x1bW5PcmRlciIsImV4cGFuZGFibGUiLCJ0YWJsZVRpdGxlIiwib3RoZXJ0YWJsZVBhcmFtcyIsIl9leGNsdWRlZDciLCJfdGFibGVTdG9yZSRyZXF1ZXN0Q28zIiwidHJlZVN0b3JlIiwidHJlZVNlYXJjaCIsInRpdGxlQWxpYXMiLCJ0cmVlVGl0bGUiLCJvdGhlcnRyZWVQYXJhbXMiLCJfZXhjbHVkZWQ4IiwidGFibGVQYXJhbXMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJkZWZhdWx0VmFsdWUiLCJtZW51Q29kZSIsInBlcm1pc3NvbnMiLCJfdGVtcCRzZWFyY2giLCJfdGVtcCRwcm9wcyIsIl90ZW1wJHByb3BzMiIsIl90ZW1wUHJvcCRkYXRhIiwiX3RlbXAiLCJfdGVtcDIiLCJfdGVtcDMiLCJ0ZW1wIiwid2lkdGgiLCJzZWFyY2giLCJfdGVtcCRzZWFyY2gyIiwiX3RlbXAkc2VhcmNoMyIsIl90ZW1wJHNlYXJjaDQiLCJvbkNoYW5nZSIsImZpZWxkIiwiZGF0YUluZGV4IiwibGFiZWxDb2wiLCJ3cmFwcGVyQ29sIiwicnVsZXMiLCJzZWFyY2hSdWxlcyIsImVkaXRvciIsInNwYW4iLCJkaWN0TmFtZSIsInJlcXVpcmVkIiwiX3RlbXAkcHJvcHMzIiwiY29sdW1uU2VhcmNoIiwiZmlsdGVyUHJvcHMiLCJ0ZW1wUHJvcCIsImVsbGlwc2lzIiwic2hvd1RpdGxlIiwiY29sdW1uU2hvdyIsIl90ZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsZXMiLCJfZmlsZXMkIiwiZG93bmxvYWQiLCJmaWxlSWQiLCJmaWxlTmFtZSIsImZpbGVJZHMiLCJkb3dubG9hZFppcCIsIl9maWxlcyQyIiwidG9vbEJ1dHRvbnMiLCJidXR0b25NYXAiLCJkZWxldGUiLCJyZXR1cm5CdXR0b24iLCJfYnV0dG9uTWFwJGNvZGUiLCJfdGhpczIkcHJvcHMkb25DYWxsQmEiLCJfdGhpczIkcHJvcHMkb25DYWxsQmEzIiwib25FZGl0b3IiLCJfdGhpczIkcHJvcHMkZm9ybVByb3AiLCJfdGhpczIkcHJvcHMkZm9ybVByb3AyIiwiX3RoaXMyJHByb3BzJG9uQ2FsbEJhMiIsIl90aGlzMiRwcm9wcyRmb3JtUHJvcDMiLCJvblNlYXJjaENhbGxCYWNrIiwiX3RoaXMyJHByb3BzJG9uQ2FsbEJhNCIsImNoZWNrUGVyc3Npb24iLCJpbmRleE9mIiwib25BZGQiLCJfdGhpcyRwcm9wcyRmb3JtUHJvcHMyIiwiYmluZCIsImRhbmdlciIsImNoaWxkIiwiX2NoaWxkJHByb3BzIiwiX2NoaWxkJHByb3BzMiIsIl9jaGlsZCRwcm9wczMiLCJfY2hpbGQkcHJvcHM0IiwiX2l0ZW0kcHJvcHM1IiwiX2l0ZW0kcHJvcHM2IiwiX2l0ZW0kcHJvcHM3IiwiX2l0ZW0kcHJvcHM4IiwiYWxpZ24iLCJ0ZXh0QWxpZ24iLCJmaXhlZCIsInJlYWNvcmQiLCJGcmFnbWVudCIsInNlYXJjaEZsYWciLCJ0YWJsZVRvb2wiLCJ0b29sRmxhZyIsInRvb2xiYXIiLCJ0b29scyIsInBhZ2VIZWlnaHQiLCJ0YWJsZUhlYWRlckhlaWdodCIsImhlYWRlckhlaWdodCIsInRvb2xIZWlnaHQiLCJwYWRkaW5nSGVpZ2h0IiwidGFibGVDb250ZW50SGVpZ2h0IiwidGFibGVIZWlnaHQiLCJ0YWJsZVNyb2xsSGVpZ2h0IiwicGFnaW5hdGlvbiIsInNjcm9sbCIsIngiLCJ5IiwicmVmIiwicGFnZVRpdGxlIiwiZGlzcGxheSIsImNoZWNrYWJsZSIsInNlYXJjaGFibGUiLCJvblNlbGVjdCIsIm9uUmVzZXQiLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUzIiwic2VhcmNoRm9ybVByb3BzIiwiaGVpZ2h0IiwiZXhwYW5kSWNvbiIsIl9yZWYiLCJfcmVjb3JkJGNoaWxkTm9kZXMiLCJfcmVjb3JkJGNoaWxkTm9kZXMyIiwiZXhwYW5kZWQiLCJvbkV4cGFuZCIsImUiLCJvblRvb2xDbGljayIsIm9uUmVmcmVzaCIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM3Iiwib25TdW1iaXRDYWxsQmFjayIsImZvcm1zIiwib25TdWJtaXQiLCJvbkhpZGVGb3JtIiwib25Gb3JtQ2hhbmdlIiwiY2hhbmdlVmFsaWQiLCJyZXF1ZXN0T2JqZWN0IiwiYWRkVXJsIiwiZWRpdG9yVXJsIiwiYWRkUGFyYW1zIiwiZWRpdG9yUGFyYW1zIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGFnZS9CYXNlUGFnZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi8uLi9iYXNlL2J1dHRvblwiO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uL2Jhc2UvbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL2Jhc2UvcG9wb3ZlclwiO1xyXG5pbXBvcnQgbWVzc2FnZSBmcm9tIFwiLi4vLi4vYmFzZS9tZXNzYWdlXCI7XHJcbmltcG9ydCBFZGl0b3JGb3JtLCB7IEZvcm1QYWdlUHJvcHMgfSBmcm9tIFwiLi4vRm9ybVBhZ2UvaW5kZXhcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgRG93bk91dGxpbmVkLFxyXG4gIEV5ZU91dGxpbmVkLFxyXG4gIEVkaXRPdXRsaW5lZCxcclxuICBSaWdodE91dGxpbmVkLFxyXG4gIFBsdXNPdXRsaW5lZCxcclxuICBFbGxpcHNpc091dGxpbmVkLFxyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBjb252ZXJGdW5jdGlvbiwgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHB4MnZ3LCBnZXRCdXR0b25QZXJtaXNzb25zIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgbnNjZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW4gfCBQYWdpbmF0aW9uUHJvcHM7IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5jb25zdCBzdHlsZXMgPSBudWxsO1xyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pCc57Si5qGGXHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nOyAvL+aQnOe0onZhbHVl5a+55bqU55qEa2V5XHJcbiAgc2VhcmNoRmllbGQ/OiBzdHJpbmc7IC8v5p+l6K+i5a+55bqU55qEa2V5XHJcbiAgdGl0bGVBbGlhcz86IHN0cmluZzsgLy/moJF0aXRsZeWvueW6lOeahGtleSzpu5jorqR0aXRsZVxyXG4gIG5vZGVQb3Jwcz86IG9iamVjdDtcclxuICBwYXJhbnRTZWxlY3Q/OiBib29sZWFuO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgRm9ybVByb3BzIGV4dGVuZHMgRm9ybVBhZ2VQcm9wcyB7IH1cclxuaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1uczogQXJyYXk8T2JqZWN0PjtcclxuICBzaG93TGVmdD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65bem5L6n55uu5b2V5qCRXHJcbiAgc2hvd1Rvb2xCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaMiemSruagj1xyXG4gIGVkaXRvckZvcm0/OiBib29sZWFuOyAvL+aYr+WQpumcgOimgeihqOWNleWKn+iDvSAsIOS4umZhbHNlIOe8lui+ke+8jOafpeeci++8jOaWsOWinuWKn+iDveWdh+S4jeWPr+eUqFxyXG4gIGRlbGV0ZVVybD86IHN0cmluZzsgLy/liKDpmaR1cmxcclxuICBvbkRlbGV0ZT86IChzZWxlY3RlZEtleXM/OiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkOyAvL+WIoOmZpOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2lkc+aLvOaOpeS8oOmAkue7meWQjuWPsFxyXG4gIGRlbGV0ZVBvc2l0aW9uPzogXCJ0b29sYmFyXCIgfCBcInJvd1wiO1xyXG4gIGRlbGV0ZVBhcmFtcz86IE9iamVjdDtcclxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBvblNlYXJjaD86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcclxuICBpbml0RGF0YT86IGFueTsgLy/liJ3lp4vljJblm57osIPlh73mlbDvvIzlnKhjb21wb25lbnREaWRNb3VudOS4reiwg+eUqFxyXG4gIGJ1dHRvbnM/OlxyXG4gIHwgQXJyYXk8c3RyaW5nPlxyXG4gIHwgQXJyYXk8eyBjb2RlOiBzdHJpbmc7IHJlY29yZFNob3c/OiBzdHJpbmcgfCBGdW5jdGlvbiB9PjsgLy/mjInpkq7pm4blkIggIFsnYWRkJywnZGVsZXRlJywnc2VhcmNoJywnZWRpdG9yJ11cclxuICBvblNob3dGb3JtPzogKHZhbHVlPzogYW55LCBlZGl0b3JGbGFnPzogc3RyaW5nKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uSGlkZUZvcm0/OiAoKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uRm9ybUNoYW5nZT86IChjaGFuZ2VkVmFsdWVzPzogYW55LCBhbGxWYWx1ZXM/OiBhbnkpID0+IHZvaWQ7IC8v6KGo5Y2Vb25DaGFuZ2Xlm57osINcclxuICBmb3JtVHlwZT86IFwibW9kYWxcIiB8IFwiZHJhd2VyXCI7XHJcbiAgZm9ybUNoYW5nZVZhbGlkPzogYm9vbGVhbjsgLy/ooajljZXmoKHpqoxcclxuICBjbGFzc05hbWU/OiBhbnk7XHJcbiAgdG9vbEJ1dHRvblBvc2l0aW9uPzogXCJyaWdodFwiIHwgXCJidXR0b21cIjtcclxuICBwYWdlVGl0bGU/OiBzdHJpbmcgfCBSZWFjdE5vZGU7XHJcbiAgZm9ybVByb3BzPzogRm9ybVByb3BzO1xyXG4gIGFjdGlvblByb3BzPzoge1xyXG4gICAgdGV4dEFsaWduPzogc3RyaW5nO1xyXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBidXR0b25OdW1iZXI/OiBudW1iZXIgfCBcImFsbFwiO1xyXG4gIH07XHJcbiAgc2VhcmNoRm9ybVByb3BzPzogeyB3cmFwcGVyQ29sPzogYW55OyBsYWJlbENvbD86IGFueSB9O1xyXG4gIG9uVHJlZVNlbGVjdD86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkNhbGxCYWNrcz86IHtcclxuICAgIHRyZWVTZWxlY3RDYWxsQmFjaz86IGFueTsgLy/moJHngrnlh7vmn6Xor6LlkI7lm57osINcclxuICAgIG9uUXVlcnlDYWxsQmFjaz86IGFueTsgLy/mn6Xor6Llm57osIPvvIzmn6Xor6LmlbDmja7lkI7lm57osINcclxuICAgIG9uU3VtYml0Q2FsbEJhY2s/OiBhbnk7IC8v5L+d5a2Y5Zue6LCD77yM5L+d5a2Y5pWw5o2u5oiQ5Yqf5ZCO5Zue6LCDXHJcbiAgICBvbkRlbGV0ZUNhbGxCYWNrPzogYW55OyAvL+WIoOmZpOaMiemSruWbnuiwg++8jOWIoOmZpOaVsOaNruWQjuaJp+ihjFxyXG4gICAgb25FZGl0b3JDYWxsQmFjaz86IGFueTsgLy/nvJbovpHmjInpkq7lm57osIPvvIzmiZPlvIDlvLnmoYblkI7miafooYxcclxuICAgIG9uQWRkQ2FsbEJhY2s/OiBhbnk7IC8v5re75Yqg5oyJ6ZKu5Zue6LCD77yM5omT5byA5by55qGG5ZCO5omn6KGMXHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55OyAvL+WIl+ihqOafpeivouaMiemSruWbnuiwg++8jOaJk+W8gOW8ueahhuWQjuaJp+ihjFxyXG4gIH07XHJcbiAgcGFnZVR5cGU/OiBcIm5vcm1hbFwiIHwgXCJ0YWJzcGFnZVwiO1xyXG4gIGZvcm1QYWdlUHJvcHM/OiB7fTtcclxuICBidXR0b25DbGljaz86IHtcclxuICAgIG9uQWRkPzogKCkgPT4gdm9pZDtcclxuICAgIG9uRWRpdG9yPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gICAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgICBvbkRlbGV0ZT86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICB9O1xyXG4gIHBlcm1pc3Npb24/OiB7XHJcbiAgICBoYXM/OiBib29sZWFuO1xyXG4gICAgbWVudUNvZGU/OiBzdHJpbmc7XHJcbiAgfTtcclxuICByZXF1ZXN0UGFyYW1zPzogey8v6ZyA6KaB6aKd5aSW5Lyg55qE5Zu65a6a6K+35rGC5Y+C5pWwXHJcbiAgICBhZGRQYXJhbXM/OiBPYmplY3Q7IC8v5paw5aKe5Zu65a6a5Y+C5pWwXHJcbiAgICBlZGl0b3JQYXJhbXM/OiBPYmplY3Q7Ly/nvJbovpHlm7rlrprlj4LmlbBcclxuICAgIHF1ZXJ5UGFyYW1zPzogT2JqZWN0Oy8v5p+l6K+i5Zu65a6a5Y+C5pWwXHJcbiAgICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7Ly/liKDpmaTlm7rlrprlj4LmlbBcclxuICB9LFxyXG4gIHJlcXVlc3RVcmxzPzoge1xyXG4gICAgYWRkVXJsPzogc3RyaW5nOy8v5paw5aKedXJsXHJcbiAgICBlZGl0b3JVcmw/OiBzdHJpbmc7Ly/nvJbovpF1cmxcclxuICAgIGRlbGV0ZVVybD86IHN0cmluZzsvL+WIoOmZpHVybFxyXG4gIH1cclxuICByZXF1ZXN0Q29uZmlnPzogYW55XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5jbGFzcyBCYXNlUGFnZSBleHRlbmRzIFB1cmVDb21wb25lbnQ8TlNDQmFzZUJhZ2VQcm9wcywgYW55PiB7XHJcbiAgdGFibGVSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHRyZWVSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHNlYXJjaFJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgZWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBwYWdlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBkYXRlRm9ybWF0ID0ge30gYXMgYW55O1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCB7IHN0b3JlUHJlZml4IH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0eXBlID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJmb3JtVHlwZVwiIDogXCJmb3JtVHlwZVwiXHJcbiAgICApO1xyXG4gICAgdHlwZSA9IHR5cGU/LmNvbnRlbnQ7XHJcbiAgICBsZXQgc2l6ZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwidGFibGVTaXplXCIgOiBcInRhYmxlU2l6ZVwiXHJcbiAgICApO1xyXG4gICAgc2l6ZSA9IHNpemU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICB0eXBlOiBcImFkZFwiLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgICAgdHJlZVNlbGVjdGVkS2V5OiBcIlwiLFxyXG4gICAgICBleHBhbmQ6IGZhbHNlLFxyXG4gICAgICBmb3JtVHlwZTogdHlwZSB8fCBcIm1vZGFsXCIsXHJcbiAgICAgIHRhYmxlU2l6ZTogc2l6ZSB8fCBcImRlZmF1bHRcIixcclxuICAgICAgdHJlZVNlYXJjaFByYW1zOiB7fSxcclxuICAgICAgcG9wb3BlbnM6IHt9LFxyXG4gICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgIGVsZW1lbnRIZWlnaHQ6IDAsXHJcbiAgICAgIHBlcm1pc3Npb25CdXR0b25zOiBbXSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IGluaXREYXRhLCBwZXJtaXNzb24gPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgaWYgKGVsZW1lbnRIZWlnaHQgPiB0aGlzLnN0YXRlLmVsZW1lbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZWxlbWVudEhlaWdodCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG4gIGRvU3VibWl0KGRhdGEsIGxhYmVsID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZG9TdWJtaXQoZGF0YSwgbGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlYXJjaCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIikge1xyXG4gICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUgPyB7IC4uLnZhbHVlIH0gOiBudWxsO1xyXG4gICAgdGhpcy5lZGl0b3JSZWY/LmN1cnJlbnQ/LnNob3cobmV3VmFsdWUsIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSwgdHlwZSA9IFwi57yW6L6RXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldEZvcm1WYWx1ZSh2YWx1ZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0Rm9ybVZhbHVlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5nZXRGb3JtVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBkZWxldGVVcmwsXHJcbiAgICAgIG9uRGVsZXRlLFxyXG4gICAgICBkZWxldGVQYXJhbXMgPSB7fSxcclxuICAgICAgZGVsZXRlUG9zaXRpb24gPSBcInRvb2xiYXJcIixcclxuICAgICAgYnV0dG9uQ2xpY2sgPSB7fSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9LFxyXG4gICAgICByZXF1ZXN0Q29uZmlnID0ge31cclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGNvbnN0IHNlbGVjdGVkUm93S2V5cyA9IHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0RhdGFzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgICBsZXQgdXJsID0gcmVxdWVzdFVybHMuZGVsZXRlVXJsID8gcmVxdWVzdFVybHMuZGVsZXRlVXJsIDogZGVsZXRlVXJsO1xyXG4gICAgbGV0IHBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5kZWxldGVQYXJhbXMgPyByZXF1ZXN0UGFyYW1zLmRlbGV0ZVBhcmFtcyA6IGRlbGV0ZVBhcmFtcztcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAoYnV0dG9uQ2xpY2sub25EZWxldGUpIHtcclxuICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICBidXR0b25DbGljay5vbkRlbGV0ZSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICByZWNvcmQ6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dEYXRhcyA6IGRhdGEsXHJcbiAgICAgICAgICAgICAgaWRzOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cyA6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZvcm1Qcm9wcz8uZnVuY3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbkRlbGV0ZSkge1xyXG4gICAgICAgICAgb25EZWxldGUgJiZcclxuICAgICAgICAgICAgb25EZWxldGUoZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMgOiBkYXRhKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybOS4jeiDveS4uuepuu+8gVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyBkYXRhOiBkYXRhUGFyYW1zID0ge30sIC4uLm90aGVyUGFyYW1zIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHtcclxuICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXHJcbiAgICAgICAgICBhdXRvUHJlZml4OiB0cnVlLFxyXG4gICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGlkczogZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMuam9pbigpIDogZGF0YS5pZCxcclxuICAgICAgICAgICAgLi4uZGF0YVBhcmFtcyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZmluYWxQYXJhbXMgPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgZmluYWxQYXJhbXMgPSB7IC4uLmRlZmF1bHRQYXJhbXMsIC4uLm90aGVyUGFyYW1zIH07XHJcbiAgICAgICAgcmVxdWVzdCh1cmwsIHtcclxuICAgICAgICAgIC4uLmZpbmFsUGFyYW1zLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip/vvIFcIik7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gX3RoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25EZWxldGVDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIF90aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICBjb25zdCB7IHJlcXVlc3RDb25maWc6IGRlZmF1bHRSZXF1ZXN0Q29uZmlnID0ge30sIHJlcXVlc3RQYXJhbXMgPSB7fSwgdGFibGVQcm9wcyA9IHt9IH0gPSB0aGlzLnByb3BzXHJcbiAgICBjb25zdCB7IHN0b3JlOiB0YWJsZVN0b3JlIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSByZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zXHJcbiAgICBpZiAocXVlcnlQYXJhbXMgJiYgdHlwZW9mIHF1ZXJ5UGFyYW1zID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IFV0aWxzID0gdGhpcy5wcm9wcy5VdGlscyB8fCB7fVxyXG4gICAgICBsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbignVXRpbHMnLCBxdWVyeVBhcmFtcyk7XHJcbiAgICAgIGxldCBjb252ZXJQYXJhbXMgPSBmdW5jKFV0aWxzKVxyXG4gICAgICBxdWVyeVBhcmFtcyA9IGNvbnZlclBhcmFtc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcyB8fCB7fVxyXG4gICAgfVxyXG4gICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcy5kYXRhIHx8IHF1ZXJ5UGFyYW1zLnBhcmFtcyB8fCB7fVxyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLCAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcywgLi4ucGFyYW1zXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyByZXF1ZXN0Q29uaWc6IHN0b3JlQ29uZmlnID0ge30gfSA9IHRhYmxlU3RvcmVcclxuICAgIGNvbnN0IHsgcGFyYW1zOiBzdG9yZVBhcmFtcyA9IHt9LCAuLi5vdGhlclN0b3JlQ29uZmlnIH0gPSBzdG9yZUNvbmZpZ1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLm90aGVyU3RvcmVDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogeyAuLi5zdG9yZVBhcmFtcywgLi4uZmluYWxQYXJhbXMgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3QgeyBvblNlYXJjaCwgb25DYWxsQmFja3MsIHJlcXVlc3RQYXJhbXMgPSB7fSwgdGFibGVQcm9wcyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBzdG9yZTogdGFibGVTdG9yZSB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5xdWVyeVBhcmFtc1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIHR5cGVvZiBxdWVyeVBhcmFtcyA9PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBVdGlscyA9IHRoaXMucHJvcHMuVXRpbHMgfHwge31cclxuICAgICAgbGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oJ1V0aWxzJywgcXVlcnlQYXJhbXMpO1xyXG4gICAgICBsZXQgY29udmVyUGFyYW1zID0gZnVuYyhVdGlscylcclxuICAgICAgcXVlcnlQYXJhbXMgPSBjb252ZXJQYXJhbXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMgfHwge31cclxuICAgIH1cclxuICAgIGxldCBkYXRhID0gcXVlcnlQYXJhbXMuZGF0YSB8fCBxdWVyeVBhcmFtcy5wYXJhbXMgfHwge31cclxuICAgIGxldCBmaW5hbFBhcmFtcyA9IHtcclxuICAgICAgLi4uZGF0YSwgLi4udGFibGVTdG9yZS5yZXF1ZXN0Q29uZmlnPy5wYXJhbXMsIC4uLnBhcmFtc1xyXG4gICAgfTtcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaChmaW5hbFBhcmFtcyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLmZpbmFsUGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUxvYWQoeyAuLi5maW5hbFBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICBvbkNhbGxCYWNrcz8ub25RdWVyeUNhbGxCYWNrICYmXHJcbiAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uUXVlcnlDYWxsQmFjayxcclxuICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiwgcGFyYW1zOiBwYXJhbXMgfSxcclxuICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgY2FsbGJhY2s6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhdXRvTG9hZCAmJlxyXG4gICAgICAgICAgcmVzPy5kYXRhPy5yZWNvcmRzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSAhPT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRyZWVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSB9ID0gdGhpcy5wcm9wc1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICAuLi5kZWZhdWx0UmVxdWVzdENvbmZpZyxcclxuICAgICAgLi4ucmVxdWVzdENvbmZpZyxcclxuICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhOiBBcnJheTxTdHJpbmcgfCBOdW1iZXI+KSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zZXRTZWxlY3RlZFJvd0tleXMoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YTogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWRSb3dEYXRhcyhkYXRhKTtcclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5yZXNldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoVmFsdWVzKCkge1xyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgcmV0dXJuIHsgLi4uZnJvbVZhbHVlLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5EYXRhKGRhdGEsIGtleXMgPSBbXSkge1xyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcmVzS2V5ID0gW107XHJcbiAgICBsZXQga2V5ID0gXCJcIjtcclxuICAgIGlmIChkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkTm9kZXM7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHJvd0tleSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGtleSA9IHJvd0tleShpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAga2V5ID0gaXRlbVtyb3dLZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuRGF0YShpdGVtLmNoaWxkTm9kZXMsIGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNLZXkgPSBbLi4ua2V5cywga2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzS2V5O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSwgdG9vbGJhckZsYWcpIHtcclxuICAgIGNvbnN0IGZsYWcgPSB0b29sYnV0dG9ucy5sZW5ndGggPiA1O1xyXG4gICAgY29uc3QgeyBzaG93U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiAzKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRvb2wtYnV0dG9uc1wiKSl9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMTIsXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLm1vcmVPcGVufVxyXG4gICAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlT3BlbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgLy8gb3Blbj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wLWJveCddfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAg5pu05aSaIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IGluZGV4ID09IHRvb2xidXR0b25zLmxlbmd0aCAtIDEgPyAwIDogMTIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJlY29yZDogYW55KSB7XHJcbiAgICBjb25zdCB7IGFjdGlvblByb3BzLCB0YWJsZVByb3BzID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcblxyXG4gICAgbGV0IGtleSA9IFwiXCI7XHJcbiAgICBpZiAodHlwZW9mIHJvd0tleSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAga2V5ID0gcm93S2V5KHJlY29yZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBrZXkgPSByZWNvcmRbcm93S2V5XTtcclxuICAgIH1cclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUHJvcHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgcmVjb3JkU2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChyZWNvcmRTaG93KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgIGlmIChldmFsKHJlY29yZFNob3cpKSB7XHJcbiAgICAgICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgY29uc3Qgc2hvdyA9IHJlY29yZFNob3cocmVjb3JkKTtcclxuICAgICAgICAgIHNob3cgJiYgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IG51bWJlciA9IGFjdGlvblByb3BzPy5idXR0b25OdW1iZXJcclxuICAgICAgPyBhY3Rpb25Qcm9wcz8uYnV0dG9uTnVtYmVyXHJcbiAgICAgIDogYmFzZUFjdGlvbkNvbHVtbj8uYnV0dG9uTnVtYmVyXHJcbiAgICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uPy5idXR0b25OdW1iZXJcclxuICAgICAgICA6IDM7XHJcbiAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgaWYgKG51bWJlciA9PSBcImFsbFwiKSB7XHJcbiAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsYWcgPSBuZXdCdXR0b25zLmxlbmd0aCA+IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IE51bWJlcihudW1iZXIpIC0gMSkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICBkYXRhW3JlY29yZC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgcmVjb3JkU2hvdywgaWNvbiwgLi4ucGFyYW1zIH0gPVxyXG4gICAgICAgIGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICAgIHR5cGU9e1wibGlua1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLnBvcG9wZW5zW2tleV0gfHwgZmFsc2V9XHJcbiAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7IC4uLnRoaXMuc3RhdGUucG9wb3BlbnMgfTtcclxuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wb3BlbnM6IHt9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgIDxFbGxpcHNpc091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIC8v5qCR54K55Ye75LqL5Lu2XHJcbiAgdHJlZVNlbGVjdChzZWxlY3RlZEtleXM6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIGxldCBrZXl3b3JkID0gXCJcIjtcclxuICAgIGNvbnN0IHtcclxuICAgICAgc2VhcmNoS2V5ID0gXCJrZXlcIixcclxuICAgICAgc2VhcmNoRmllbGQgPSBcIlwiLFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH0gPSBvYmo7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGtleXdvcmQgPSBzZWxlY3RlZE5vZGVzWzBdLmRhdGFyZWYuYXR0cmlidXRlW3NlYXJjaEtleV07XHJcbiAgICAgIGlmIChwYXJhbnRTZWxlY3QpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2Rlc1swXS5pc0xlYWYgfHwgIXNlbGVjdGVkTm9kZXNbMF0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEtleXNbMF0gIT09IHRyZWVTZWxlY3RlZEtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHRyZWVTZWxlY3RlZEtleToga2V5d29yZCxcclxuICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLm9uVHJlZVNlbGVjdCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uVHJlZVNlbGVjdChzZWxlY3RlZEtleXMsIG9iaik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKSB8fCB7fTtcclxuICAgIHNlYXJjaEZpZWxkICYmIHRoaXMudGFibGVMb2FkKHsgLi4uZnJvbVZhbHVlLCBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0pO1xyXG4gICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrICYmXHJcbiAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRWRpdG9yQ2FsbEJhY2ssXHJcbiAgICAgICAgeyBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsIHNlbGVjdGVkS2V5czogc2VsZWN0ZWRLZXlzLCBvYmo6IG9iaiB9LFxyXG4gICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgKTtcclxuICAgIC8vIHV0aWxzLmNhbGxiYWNrKHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjaywgdGhpcywgW1xyXG4gICAgLy8gICBzZWxlY3RlZEtleXMsXHJcbiAgICAvLyAgIG9iaixcclxuICAgIC8vIF0pO1xyXG4gIH1cclxuICByZXNldFNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgfVxyXG4gIGdldFRleHQocHJvcHMsIHRleHQpIHtcclxuICAgIGxldCBuZXdUZXh0ID0gdGV4dDtcclxuICAgIGlmIChwcm9wcz8uZGF0YSAmJiBwcm9wcz8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZGF0YSA9IHByb3BzLmRhdGE7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZGF0YVtpXS52YWx1ZSA9PSB0ZXh0KSB7XHJcbiAgICAgICAgICBuZXdUZXh0ID0gZGF0YVtpXS5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdUZXh0O1xyXG4gIH1cclxuICBzZXRUYWJsZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgc2V0VHJlZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZEtleSA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgbGV0IHJlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIHNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBzZWxlY3RlZFtrZXldO1xyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzID0gWy4uLnJlcywgLi4ua2V5c107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgY29udmVydFF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgY29uc3QgeyByZXF1ZXN0UGFyYW1zID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHJlcXVlc3RQYXJhbXMucXVlcnlQYXJhbXNcclxuICAgIGlmIChxdWVyeVBhcmFtcyAmJiB0eXBlb2YgcXVlcnlQYXJhbXMgPT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3QgVXRpbHMgPSB0aGlzLnByb3BzLlV0aWxzIHx8IHt9XHJcbiAgICAgIGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uKCdVdGlscycsIHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgbGV0IGNvbnZlclBhcmFtcyA9IGZ1bmMoVXRpbHMpXHJcbiAgICAgIHF1ZXJ5UGFyYW1zID0gY29udmVyUGFyYW1zXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXNcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY29sdW1ucyA9IFtdLFxyXG4gICAgICBzaG93U2VhcmNoID0gdHJ1ZSxcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN1Ym1pdFVybCA9IFwiXCIsXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgICAgdHJlZVByb3BzID0ge30sXHJcbiAgICAgIGZvcm1Qcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUGFnZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUHJvcHMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICAgIGJ1dHRvbkNsaWNrID0ge30sXHJcbiAgICAgIHBlcm1pc3Npb24gPSB7IGhhczogZmFsc2UgfSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9XHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRhYmxlU3RvcmUgPSB7fSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICAgIGNvbHVtbk9yZGVyID0gdHJ1ZSxcclxuICAgICAgZXhwYW5kYWJsZSA9IHt9LFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgICB0aXRsZTogdGFibGVUaXRsZSxcclxuICAgICAgLi4ub3RoZXJ0YWJsZVBhcmFtc1xyXG4gICAgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBpZiAocmVxdWVzdFBhcmFtcy5xdWVyeVBhcmFtcykge1xyXG4gICAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHRoaXMuY29udmVydFF1ZXJ5UGFyYW1zKClcclxuICAgICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcz8uZGF0YSB8fCBxdWVyeVBhcmFtcz8ucGFyYW1zIHx8IHt9XHJcbiAgICAgIHRhYmxlU3RvcmUucmVxdWVzdENvbmZpZyA9IHtcclxuICAgICAgICBwYXJhbXM6IHsgLi4uZGF0YSwgLi4udGFibGVTdG9yZS5yZXF1ZXN0Q29uZmlnPy5wYXJhbXMgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIHRpdGxlOiB0cmVlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuXHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7IGZpbHRlckNvbHVtbiwgc3RvcmU6IHsgLi4udGFibGVTdG9yZSB9LCAuLi5vdGhlcnRhYmxlUGFyYW1zIH0gYXMgYW55O1xyXG4gICAgbGV0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGNvbHVtbkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBlbGVtZW50SGVpZ2h0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHBlcm1pc3Npb25CdXR0b25zID0gW107XHJcbiAgICBpZiAocGVybWlzc2lvbi5oYXMgJiYgcGVybWlzc2lvbi5tZW51Q29kZSkge1xyXG4gICAgICBwZXJtaXNzaW9uQnV0dG9ucyA9XHJcbiAgICAgICAgZ2V0QnV0dG9uUGVybWlzc29ucyhwZXJtaXNzaW9uLm1lbnVDb2RlKS5wZXJtaXNzb25zIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHsgd2lkdGg6IDEwMCwgLi4uaXRlbSB9O1xyXG4gICAgICBpZiAodGVtcC5zZWFyY2ggPT09IHRydWUgfHwgdGVtcC5zZWFyY2g/LnNob3cgPT09IHRydWUpIHtcclxuICAgICAgICBsZXQgcHJvcHMgPSB0ZW1wLnByb3BzID8geyAuLi50ZW1wLnByb3BzIH0gOiB7fTtcclxuICAgICAgICBkZWxldGUgcHJvcHMub25DaGFuZ2U7XHJcbiAgICAgICAgc2VhcmNoRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAuc2VhcmNoPy5sYWJlbCB8fCB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHByb3BzLFxyXG4gICAgICAgICAgbGFiZWxDb2w6IHRlbXAuc2VhcmNoPy5sYWJlbENvbCxcclxuICAgICAgICAgIHdyYXBwZXJDb2w6IHRlbXAuc2VhcmNoPy53cmFwcGVyQ29sLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAuc2VhcmNoUnVsZXMgPyB0ZW1wLnNlYXJjaFJ1bGVzIDogW10sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAuc2VhcmNoO1xyXG4gICAgICB0ZW1wLmVkaXRvciAhPT0gZmFsc2UgJiZcclxuICAgICAgICBlZGl0b3JGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC50aXRsZSxcclxuICAgICAgICAgIHJ1bGVzOiB0ZW1wLnJ1bGVzID8gdGVtcC5ydWxlcyA6IFtdLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgc3BhbjogdGVtcC5zcGFuLFxyXG4gICAgICAgICAgZGljdE5hbWU6IHRlbXAuZGljdE5hbWUsXHJcbiAgICAgICAgICByZXF1aXJlZDogdGVtcC5yZXF1aXJlZCxcclxuICAgICAgICAgIHByb3BzOiB7IC4uLnRlbXAucHJvcHMgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gbnVsbFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleDtcclxuICAgICAgICBkZWZhdWx0VmFsdWVbbmFtZV0gPSB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucnVsZXM7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNwYW47XHJcbiAgICAgIGlmICh0ZW1wLmNvbHVtblNlYXJjaCkge1xyXG4gICAgICAgIHRlbXAuZmlsdGVyUHJvcHMgPSB7XHJcbiAgICAgICAgICB0eXBlOiB0ZW1wLnR5cGUsXHJcbiAgICAgICAgICBwcm9wczogdGVtcC5wcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdGVtcFByb3AgPSB7IC4uLnRlbXAucHJvcHMgfTtcclxuXHJcbiAgICAgIGlmICh0ZW1wUHJvcD8uZGF0YSAmJiB0ZW1wUHJvcD8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICBlbGxpcHNpczogeyBzaG93VGl0bGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dCh0ZW1wUHJvcCwgdGV4dCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4udGVtcCxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnByb3BzO1xyXG5cclxuICAgICAgLy8gaWYgKHRlbXAucmVuZGVyICYmIHR5cGVvZiB0ZW1wLnJlbmRlciA9PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyAgIGxldCByZW5kZXRTdHIgPSB0ZW1wLnJlbmRlclxyXG4gICAgICAvLyAgIHRlbXAgPSB7XHJcbiAgICAgIC8vICAgICAuLi50ZW1wLFxyXG4gICAgICAvLyAgICAgcmVuZGVyOiAodGV4dCwgcmVjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAvLyAgICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKHJlbmRldFN0cilcclxuICAgICAgLy8gICAgICAgcmV0dXJuIGZ1bmMoKVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgICBpZiAodGVtcC50eXBlID09IFwiVXBsb2FkXCIgJiYgdGVtcD8uY29sdW1uU2hvdyAhPT0gZmFsc2UpIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAoX3RleHQsIHJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWNvcmRbdGVtcC5kYXRhSW5kZXhdKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gcmVjb3JkW3RlbXAuZGF0YUluZGV4XTtcclxuICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuc2NmaWxlLmRvd25sb2FkKGZpbGVzWzBdLmZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHtmaWxlc1swXT8uZmlsZU5hbWV9XHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZUlkcyA9IFtdIGFzIGFueTtcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWRzLnB1c2goaXRlbS5maWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuc2NmaWxlLmRvd25sb2FkWmlwKGZpbGVJZHMuam9pbihcIixcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7XCLmlofku7bkuIvovb1cIn1cclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGVtcC50eXBlID09IFwiSW1hZ2VcIiAmJiB0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6IChfdGV4dCwgcmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY29yZFt0ZW1wLmRhdGFJbmRleF0pKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSByZWNvcmRbdGVtcC5kYXRhSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJuc2MtYmFzZXBhZ2UtdGFibGUtaW1nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2ZpbGVzWzBdPy5maWxlTmFtZX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPXtcImxpbmtcIn0gb25DbGljaz17KCkgPT4geyB9fT5cclxuICAgICAgICAgICAgICAgICAgICDlm77niYfmn6XnnItcclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC50eXBlO1xyXG4gICAgICBpZiAodGVtcD8uY29sdW1uU2hvdyAhPT0gZmFsc2UpIHRhYmxlQ29sdW1uLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRvb2xCdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbnN0IGJ1dHRvbk1hcCA9IHtcclxuICAgICAgLy8gYWRkOiB7IG5hbWU6IFwi5paw5aKeXCIsIGNvZGU6IFwiYWRkXCIsIGljb246IDxQbHVzT3V0bGluZWQgLz4gfSxcclxuICAgICAgZWRpdG9yOiB7IG5hbWU6IFwi57yW6L6RXCIsIGNvZGU6IFwiZWRpdG9yXCIsIGljb246IDxFZGl0T3V0bGluZWQgLz4gfSxcclxuICAgICAgZGVsZXRlOiB7IG5hbWU6IFwi5Yig6ZmkXCIsIGNvZGU6IFwiZGVsZXRlXCIsIGljb246IDxEZWxldGVPdXRsaW5lZCAvPiB9LFxyXG4gICAgICBzZWFyY2g6IHsgbmFtZTogXCLmn6XnnItcIiwgY29kZTogXCJzZWFyY2hcIiwgaWNvbjogPEV5ZU91dGxpbmVkIC8+IH0sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmV0dXJuQnV0dG9uID0gKGNvZGUsIHNob3cgPSBcIlwiKSA9PiB7XHJcbiAgICAgIGxldCBwcm9wcyA9IHt9O1xyXG4gICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgIHByb3BzID0geyByZWNvcmRTaG93OiBzaG93IH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT0gXCJkZWxldGVcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMub25EZWxldGUocmVjb3JkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29kZSA9PSBcImVkaXRvclwiICYmIGJ1dHRvbkNsaWNrLm9uRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25FZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mb3JtUHJvcHM/LmZ1bmNzLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBcInNlYXJjaFwiICYmIGJ1dHRvbkNsaWNrLm9uU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25TZWFyY2gsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mb3JtUHJvcHM/LmZ1bmNzLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb25TaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIGNvZGUpO1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGNvZGUgPT0gXCJlZGl0b3JcIiAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25FZGl0b3JDYWxsQmFja1xyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRWRpdG9yQ2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mb3JtUHJvcHM/LmZ1bmNzLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBjb2RlID09IFwic2VhcmNoXCIgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU2VhcmNoQ2FsbEJhY2tcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgaWNvbj17c2hvd0ljb24gPyBidXR0b25NYXBbY29kZV0uaWNvbiA6IG51bGx9XHJcbiAgICAgICAgICB0eXBlPVwibGlua1wiXHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2J1dHRvbk1hcFtjb2RlXT8ubmFtZX1cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBjaGVja1BlcnNzaW9uID0gKGNvZGUpID0+IHtcclxuICAgICAgaWYgKCFwZXJtaXNzaW9uLmhhcykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uQnV0dG9ucy5pbmRleE9mKGNvZGUpID4gLTE7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBidXR0b25zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGlmICgoaXRlbSA9PSBcImFkZFwiIHx8IGl0ZW0uY29kZSA9PSBcImFkZFwiKSAmJiBjaGVja1BlcnNzaW9uKFwiYWRkXCIpKSB7XHJcbiAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB7IG9uU2hvd0Zvcm0sIGJ1dHRvbkNsaWNrID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgICAgICAgaWYgKGJ1dHRvbkNsaWNrPy5vbkFkZCkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uQWRkLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZvcm1Qcm9wcz8uZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKG51bGwsIFwiYWRkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOa3u+WKoFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAoaXRlbSA9PSBcImRlbGV0ZVwiIHx8IGl0ZW0uY29kZSA9PSBcImRlbGV0ZVwiKSAmJlxyXG4gICAgICAgIGNoZWNrUGVyc3Npb24oXCJkZWxldGVcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgLy8gdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChyZXR1cm5CdXR0b24oaXRlbS5jb2RlIHx8IGl0ZW0sIGl0ZW0ucmVjb3JkU2hvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY2hlY2tQZXJzc2lvbihpdGVtLmNvZGUpKSB7XHJcbiAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2gocmV0dXJuQnV0dG9uKGl0ZW0uY29kZSB8fCBpdGVtLCBpdGVtLnJlY29yZFNob3cpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XHJcbiAgICAgICAgICBpdGVtLm1hcCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJ0b29sQnV0dG9uXCIgJiZcclxuICAgICAgICAgICAgICBjaGVja1BlcnNzaW9uKGNoaWxkPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIiAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmIGNoZWNrUGVyc3Npb24ocHJvcHM/LmNvZGUpKSB7XHJcbiAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCIgJiZcclxuICAgICAgICBjaGVja1BlcnNzaW9uKHByb3BzPy5jb2RlKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGFjdGlvblByb3BzPy50ZXh0QWxpZ25cclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uLnRleHRBbGlnblxyXG4gICAgICAgICAgICA6IFwibGVmdFwiLFxyXG4gICAgICAgIHdpZHRoOiBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LndpZHRoXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICAgIDogMjAwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1hY3Rpb25cIil9PlxyXG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zLCByZWNvcmQpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKGNvbHVtbk9yZGVyKVxyXG4gICAgICB0YWJsZUNvbHVtbiA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogXCLluo/lj7dcIixcclxuICAgICAgICAgIHdpZHRoOiA4MCxcclxuICAgICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dCwgcmVhY29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDw+e2luZGV4ICsgMX08Lz47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGFibGVDb2x1bW4sXHJcbiAgICAgIF07XHJcbiAgICBsZXQgc2VhcmNoRmxhZyA9IHNob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMDtcclxuICAgIGxldCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbEZsYWcgPVxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiAmJlxyXG4gICAgICB0b29sQnV0dG9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbiA9PSBcImJ1dHRvbVwiO1xyXG4gICAgbGV0IHRvb2xiYXJGbGFnID0gIShcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8uc2hvdyA9PSBmYWxzZSB8fFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXI/LnRvb2xzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICB0YWJsZVRvb2w/LnNob3cgPT0gZmFsc2VcclxuICAgICk7XHJcblxyXG4gICAgbGV0IHBhZ2VIZWlnaHQgPSB0aGlzLnByb3BzLnBhZ2VUeXBlID09IFwidGFic3BhZ2VcIiA/IDYzIDogMDtcclxuICAgIGxldCB0YWJsZUhlYWRlckhlaWdodCA9IDU1O1xyXG5cclxuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgPyAxMDQgOiAwO1xyXG4gICAgbGV0IHRvb2xIZWlnaHQgPSB0YWJsZVRpdGxlIHx8IHRvb2xGbGFnID8gNDggOiAwO1xyXG4gICAgbGV0IHBhZGRpbmdIZWlnaHQgPSAyNTtcclxuICAgIGxldCB0YWJsZUNvbnRlbnRIZWlnaHQgPVxyXG4gICAgICBlbGVtZW50SGVpZ2h0IC0gaGVhZGVySGVpZ2h0IC0gdG9vbEhlaWdodCAtIHBhZGRpbmdIZWlnaHQgLSBwYWdlSGVpZ2h0O1xyXG4gICAgbGV0IHRhYmxlSGVpZ2h0ID0gdGFibGVDb250ZW50SGVpZ2h0IC0gMzIgLSAzMjtcclxuICAgIGxldCB0YWJsZVNyb2xsSGVpZ2h0ID0gdGFibGVDb250ZW50SGVpZ2h0IC0gdGFibGVIZWFkZXJIZWlnaHQgLSAzMiAtIDMyO1xyXG4gICAgaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsID0gdGFibGVQYXJhbXMuc2Nyb2xsO1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICBzY3JvbGw6IHsgeDogXCJtYXgtY29udGVudFwiLCB5OiB0YWJsZVNyb2xsSGVpZ2h0LCAuLi5zY3JvbGwgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2VcIiksIGNsYXNzTmFtZSl9XHJcbiAgICAgICAgcmVmPXt0aGlzLnBhZ2VSZWZ9XHJcbiAgICAgID5cclxuICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGUgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGl0bGVcIikpfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMucGFnZVRpdGxlfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtcGFuZVwiKSl9XHJcbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtzaG93TGVmdCAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtbGVmdFwiKX0+XHJcbiAgICAgICAgICAgICAge3RyZWVUaXRsZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidHJlZS10aXRsZVwiKX0+e3RyZWVUaXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInRyZWUtY29udGVudFwiKSwge1xyXG4gICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50LW5vdGl0bGVcIildOiAhdHJlZVRpdGxlLFxyXG4gICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICAgICAgc3RvcmU9e3sgLi4udHJlZVN0b3JlIH19XHJcbiAgICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZT17dHJlZVNlYXJjaH1cclxuICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlQWxpYXM9e3RpdGxlQWxpYXN9XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50cmVlUmVmfVxyXG4gICAgICAgICAgICAgICAgICB7Li4ub3RoZXJ0cmVlUGFyYW1zfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtcmlnaHRcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLW5vLWxlZnQtcmlnaHRcIildOiAhc2hvd0xlZnQsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWhlYWRlcnNlYXJjaFwiKX0+XHJcbiAgICAgICAgICAgICAgICA8SGVhZGVyU2VhcmNoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1zPXtzZWFyY2hGb3Jtc31cclxuICAgICAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uPXt0b29sQnV0dG9uUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIG9uUmVzZXQ9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZCh7fSlcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNlYXJjaFJlZn1cclxuICAgICAgICAgICAgICAgICAgc2VhcmNoRm9ybVByb3BzPXt0aGlzLnByb3BzLnNlYXJjaEZvcm1Qcm9wc31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudFwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWdhcFwiKV06ICFzZWFyY2hGbGFnLFxyXG4gICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgeyh0YWJsZVRpdGxlIHx8IHRvb2xGbGFnKSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10aXRsZVwiKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGl0bGUtd2lkdGhcIildOiAhdG9vbGJhckZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2Pnt0YWJsZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB7dG9vbEZsYWcgJiYgdGhpcy5yZW5kZXJUb29sQnV0dG9ucyh0b29sQnV0dG9ucywgdG9vbGJhckZsYWcpfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZVwiKSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdG9wXCIpXTogIXRvb2xiYXJGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3AyXCIpXTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRvb2xiYXJGbGFnICYmICF0b29sRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVDb250ZW50SGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50YWJsZVJlZn1cclxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRJY29uOiAoeyBleHBhbmRlZCwgb25FeHBhbmQsIHJlY29yZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBhbmRlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzPy5sZW5ndGggPiAwID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvd25PdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHJlY29yZC5jaGlsZE5vZGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2Rlcz8ubGVuZ3RoID4gMCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZXhwYW5kYWJsZSxcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgY29sdW1uT3JkZXI9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGFnaW5hdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSBwYWdpbmF0aW9uLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICB0b29sYmFyPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgb25Ub29sQ2xpY2s6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZChwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRhYmxlUHJvcHMudG9vbGJhcixcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgc2hvd1Jvd1NlbGVjdGlvbj17c2hvd1Jvd1NlbGVjdGlvbn1cclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxyXG4gICAgICAgICAgICAgICAgICB7Li4udGFibGVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgICAvLyBwYWdpbmF0aW9uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICB7LyogPGRpdj48L2Rpdj4gKi99XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB7ZWRpdG9yRm9ybSAmJiAoXHJcbiAgICAgICAgICAgIDxFZGl0b3JGb3JtXHJcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLmVkaXRvclJlZn1cclxuICAgICAgICAgICAgICBjYWxsQmFjaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblN1bWJpdENhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgZm9ybXM9e2VkaXRvckZvcm1zfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFVybD17c3VibWl0VXJsfVxyXG4gICAgICAgICAgICAgIHN1Ym1pdFBhcmFtcz17c3VibWl0UGFyYW1zfVxyXG4gICAgICAgICAgICAgIG9uU3VibWl0PXt0aGlzLnByb3BzLm9uU3VibWl0fVxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxyXG4gICAgICAgICAgICAgIG9uSGlkZUZvcm09e3RoaXMucHJvcHMub25IaWRlRm9ybX1cclxuICAgICAgICAgICAgICBvbkZvcm1DaGFuZ2U9e3RoaXMucHJvcHMub25Gb3JtQ2hhbmdlfVxyXG4gICAgICAgICAgICAgIGZvcm1UeXBlPXt0aGlzLnByb3BzLmZvcm1UeXBlIHx8IFwiYXV0b1wifVxyXG4gICAgICAgICAgICAgIGNoYW5nZVZhbGlkPXtmb3JtQ2hhbmdlVmFsaWR9XHJcbiAgICAgICAgICAgICAgVXRpbHM9e3RoaXMucHJvcHMuVXRpbHN9XHJcbiAgICAgICAgICAgICAgcmVxdWVzdE9iamVjdD17eyBhZGRVcmw6IHJlcXVlc3RVcmxzLmFkZFVybCwgZWRpdG9yVXJsOiByZXF1ZXN0VXJscy5lZGl0b3JVcmwsIGFkZFBhcmFtczogcmVxdWVzdFBhcmFtcy5hZGRQYXJhbXMsIGVkaXRvclBhcmFtczogcmVxdWVzdFBhcmFtcy5lZGl0b3JQYXJhbXMgfX1cclxuICAgICAgICAgICAgICB7Li4uZm9ybVByb3BzfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxh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
|