nsc-react-component 2.0.0 → 2.0.3
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/button/index.d.ts +3 -0
- package/lib/button/index.js +38 -10
- package/lib/constants.d.ts +15 -0
- package/lib/constants.js +16 -0
- package/lib/form/Form.js +3 -3
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/pageComponents/BasePage/Form.d.ts +15 -0
- package/lib/pageComponents/BasePage/Form.js +216 -0
- package/lib/pageComponents/BasePage/index.d.ts +49 -0
- package/lib/pageComponents/BasePage/index.js +530 -0
- package/lib/pageComponents/BasePage/index.less +63 -0
- package/lib/table/index.js +10 -24
- package/lib/table/index.less +8 -2
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +78 -1
- package/package.json +1 -1
- package/lib/pagecomponent/index.d.ts +0 -3
- package/lib/pagecomponent/index.js +0 -36
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { PureComponent } from "react";
|
|
2
|
+
import { StoreProps } from "@bj-nsc/msn";
|
|
3
|
+
interface TableProps {
|
|
4
|
+
actionColumn?: boolean;
|
|
5
|
+
actionButton?: boolean;
|
|
6
|
+
store?: StoreProps;
|
|
7
|
+
filterColumn?: boolean;
|
|
8
|
+
showRowSelection?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface TreeProps {
|
|
11
|
+
store?: StoreProps;
|
|
12
|
+
showSearch?: boolean;
|
|
13
|
+
searchKey?: string;
|
|
14
|
+
searchField?: string;
|
|
15
|
+
}
|
|
16
|
+
interface NSCBaseBageProps {
|
|
17
|
+
showSearch?: boolean;
|
|
18
|
+
tableProps?: TableProps;
|
|
19
|
+
treeProps?: TreeProps;
|
|
20
|
+
submitParams?: Object;
|
|
21
|
+
submitUrl?: string;
|
|
22
|
+
autoSubmit?: boolean;
|
|
23
|
+
columns: Array<Object>;
|
|
24
|
+
showLeft?: boolean;
|
|
25
|
+
showToolButton?: boolean;
|
|
26
|
+
showAddButton?: boolean;
|
|
27
|
+
editorForm?: boolean;
|
|
28
|
+
}
|
|
29
|
+
declare class BasePage extends PureComponent<NSCBaseBageProps, any> {
|
|
30
|
+
tableRef: React.RefObject<any>;
|
|
31
|
+
treeRef: React.RefObject<any>;
|
|
32
|
+
searchRef: React.RefObject<any>;
|
|
33
|
+
editorRef: React.RefObject<any>;
|
|
34
|
+
constructor(props: any);
|
|
35
|
+
onSelect: (checkedTreeKeys: any) => void;
|
|
36
|
+
showForm(value?: any, flag?: boolean): void;
|
|
37
|
+
tableLoad(params: any): void;
|
|
38
|
+
onSearch(): void;
|
|
39
|
+
tableReload(): void;
|
|
40
|
+
getSelectedRowKeys(): any;
|
|
41
|
+
getSearchValues(): any;
|
|
42
|
+
rowSelectionOnSelect(record: any, selected: any): void;
|
|
43
|
+
rowSelectionOnSelectAll(selected: any, selectedRows: any, changeRows: any): void;
|
|
44
|
+
load(params: any): void;
|
|
45
|
+
renderCloumnButton(columnButtons: any, record: any, actionButton?: boolean): any;
|
|
46
|
+
treeSelect(selectedKeys: any, { selected, selectedNodes }: any): void;
|
|
47
|
+
render(): JSX.Element;
|
|
48
|
+
}
|
|
49
|
+
export default BasePage;
|
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
+
|
|
3
|
+
import "antd/es/popover/style/css";
|
|
4
|
+
import _Popover from "antd/es/popover";
|
|
5
|
+
var _excluded = ["children", "pageType", "onClick"],
|
|
6
|
+
_excluded2 = ["children", "pageType", "onClick"];
|
|
7
|
+
|
|
8
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
+
|
|
10
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
11
|
+
|
|
12
|
+
function _extends() { _extends = Object.assign || 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); }
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
19
|
+
|
|
20
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
21
|
+
|
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
+
|
|
24
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
25
|
+
|
|
26
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
27
|
+
|
|
28
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
29
|
+
|
|
30
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
31
|
+
|
|
32
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
33
|
+
|
|
34
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
35
|
+
|
|
36
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
37
|
+
|
|
38
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
39
|
+
|
|
40
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
41
|
+
|
|
42
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
43
|
+
|
|
44
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
45
|
+
|
|
46
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
47
|
+
|
|
48
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
49
|
+
|
|
50
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
51
|
+
|
|
52
|
+
import React, { PureComponent } from "react";
|
|
53
|
+
import Table from "../../table";
|
|
54
|
+
import Tree from "../../tree";
|
|
55
|
+
import Form from "../../form";
|
|
56
|
+
import Button from "../../button";
|
|
57
|
+
import Icon from "../../common/IconFont";
|
|
58
|
+
import { iconType } from "../../constants";
|
|
59
|
+
import EditorForm from "./Form";
|
|
60
|
+
import cls from "classnames";
|
|
61
|
+
import styles from "./index.less";
|
|
62
|
+
import { DownOutlined } from "@ant-design/icons";
|
|
63
|
+
|
|
64
|
+
var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
65
|
+
_inherits(BasePage, _PureComponent);
|
|
66
|
+
|
|
67
|
+
var _super = _createSuper(BasePage);
|
|
68
|
+
|
|
69
|
+
function BasePage(props) {
|
|
70
|
+
var _this;
|
|
71
|
+
|
|
72
|
+
_classCallCheck(this, BasePage);
|
|
73
|
+
|
|
74
|
+
_this = _super.call(this, props);
|
|
75
|
+
|
|
76
|
+
_defineProperty(_assertThisInitialized(_this), "tableRef", /*#__PURE__*/React.createRef());
|
|
77
|
+
|
|
78
|
+
_defineProperty(_assertThisInitialized(_this), "treeRef", /*#__PURE__*/React.createRef());
|
|
79
|
+
|
|
80
|
+
_defineProperty(_assertThisInitialized(_this), "searchRef", /*#__PURE__*/React.createRef());
|
|
81
|
+
|
|
82
|
+
_defineProperty(_assertThisInitialized(_this), "editorRef", /*#__PURE__*/React.createRef());
|
|
83
|
+
|
|
84
|
+
_defineProperty(_assertThisInitialized(_this), "onSelect", function (checkedTreeKeys) {
|
|
85
|
+
var _this$state = _this.state,
|
|
86
|
+
name = _this$state.name,
|
|
87
|
+
userType = _this$state.userType,
|
|
88
|
+
account = _this$state.account;
|
|
89
|
+
var value = {
|
|
90
|
+
name: name,
|
|
91
|
+
userType: userType,
|
|
92
|
+
account: account,
|
|
93
|
+
deptId: checkedTreeKeys[0]
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
_this.tableLoad(value);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
_this.state = {
|
|
100
|
+
type: "add",
|
|
101
|
+
selectedRowKeys: [],
|
|
102
|
+
treeSelectedKey: ""
|
|
103
|
+
};
|
|
104
|
+
return _this;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
_createClass(BasePage, [{
|
|
108
|
+
key: "showForm",
|
|
109
|
+
value: //显示表单
|
|
110
|
+
function showForm(value) {
|
|
111
|
+
var _this$editorRef$curre;
|
|
112
|
+
|
|
113
|
+
var flag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
114
|
+
(_this$editorRef$curre = this.editorRef.current) === null || _this$editorRef$curre === void 0 ? void 0 : _this$editorRef$curre.show(value, flag);
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
key: "tableLoad",
|
|
118
|
+
value: function tableLoad(params) {
|
|
119
|
+
var _this$tableRef$curren;
|
|
120
|
+
|
|
121
|
+
(_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.store.load({
|
|
122
|
+
params: params
|
|
123
|
+
});
|
|
124
|
+
} //查询
|
|
125
|
+
|
|
126
|
+
}, {
|
|
127
|
+
key: "onSearch",
|
|
128
|
+
value: function onSearch() {
|
|
129
|
+
var _this$searchRef$curre;
|
|
130
|
+
|
|
131
|
+
var fromValue = (_this$searchRef$curre = this.searchRef.current) === null || _this$searchRef$curre === void 0 ? void 0 : _this$searchRef$curre.getFieldsValue();
|
|
132
|
+
this.load(fromValue);
|
|
133
|
+
} //表格重新加载
|
|
134
|
+
|
|
135
|
+
}, {
|
|
136
|
+
key: "tableReload",
|
|
137
|
+
value: function tableReload() {
|
|
138
|
+
var _this$tableRef$curren2;
|
|
139
|
+
|
|
140
|
+
(_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 ? void 0 : _this$tableRef$curren2.store.reload();
|
|
141
|
+
}
|
|
142
|
+
}, {
|
|
143
|
+
key: "getSelectedRowKeys",
|
|
144
|
+
value: function getSelectedRowKeys() {
|
|
145
|
+
return this.state.selectedRowKeys;
|
|
146
|
+
}
|
|
147
|
+
}, {
|
|
148
|
+
key: "getSearchValues",
|
|
149
|
+
value: function getSearchValues() {
|
|
150
|
+
var _this$searchRef$curre2;
|
|
151
|
+
|
|
152
|
+
var fromValue = (_this$searchRef$curre2 = this.searchRef.current) === null || _this$searchRef$curre2 === void 0 ? void 0 : _this$searchRef$curre2.getFieldsValue();
|
|
153
|
+
return fromValue;
|
|
154
|
+
}
|
|
155
|
+
}, {
|
|
156
|
+
key: "rowSelectionOnSelect",
|
|
157
|
+
value: function rowSelectionOnSelect(record, selected) {
|
|
158
|
+
var selectedRowKeys = this.state.selectedRowKeys;
|
|
159
|
+
|
|
160
|
+
var newSelectedRowKeys = _toConsumableArray(selectedRowKeys);
|
|
161
|
+
|
|
162
|
+
if (selected) {
|
|
163
|
+
newSelectedRowKeys = [].concat(_toConsumableArray(newSelectedRowKeys), [record.id]);
|
|
164
|
+
} else {
|
|
165
|
+
selectedRowKeys.map(function (item, index) {
|
|
166
|
+
if (item === record.id) {
|
|
167
|
+
newSelectedRowKeys.splice(index, 1);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
this.setState({
|
|
173
|
+
selectedRowKeys: newSelectedRowKeys
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}, {
|
|
177
|
+
key: "rowSelectionOnSelectAll",
|
|
178
|
+
value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
179
|
+
var selectedRowKeys = this.state.selectedRowKeys;
|
|
180
|
+
var newids = [];
|
|
181
|
+
|
|
182
|
+
if (changeRows.length > 0) {
|
|
183
|
+
var changeIds = changeRows.map(function (item) {
|
|
184
|
+
return item.id;
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
if (selected) {
|
|
188
|
+
newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
|
|
189
|
+
} else {
|
|
190
|
+
selectedRowKeys.map(function (item, index) {
|
|
191
|
+
if (changeIds.indexOf(item) == -1) {
|
|
192
|
+
newids.push(item);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
} else {
|
|
197
|
+
newids = _toConsumableArray(selectedRowKeys);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
this.setState({
|
|
201
|
+
selectedRowKeys: _toConsumableArray(newids)
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}, {
|
|
205
|
+
key: "load",
|
|
206
|
+
value: function load(params) {
|
|
207
|
+
var _this$tableRef$curren3;
|
|
208
|
+
|
|
209
|
+
(_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 ? void 0 : _this$tableRef$curren3.store.load({
|
|
210
|
+
params: params
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}, {
|
|
214
|
+
key: "renderCloumnButton",
|
|
215
|
+
value: function renderCloumnButton(columnButtons, record, actionButton) {
|
|
216
|
+
var content = columnButtons.map(function (item, index) {
|
|
217
|
+
var _item$props = item.props,
|
|
218
|
+
children = _item$props.children,
|
|
219
|
+
pageType = _item$props.pageType,
|
|
220
|
+
_onClick = _item$props.onClick,
|
|
221
|
+
params = _objectWithoutProperties(_item$props, _excluded);
|
|
222
|
+
|
|
223
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
224
|
+
className: cls(styles["editor"], styles["content-item"]),
|
|
225
|
+
key: index,
|
|
226
|
+
onClick: function onClick() {
|
|
227
|
+
_onClick && _onClick(record);
|
|
228
|
+
}
|
|
229
|
+
}, params), children);
|
|
230
|
+
});
|
|
231
|
+
var num = 1;
|
|
232
|
+
if (!actionButton) num = 3;
|
|
233
|
+
|
|
234
|
+
if (columnButtons.length > num) {
|
|
235
|
+
return /*#__PURE__*/React.createElement(_Popover, {
|
|
236
|
+
placement: "bottom",
|
|
237
|
+
title: null,
|
|
238
|
+
content: content,
|
|
239
|
+
trigger: "click" // overlayClassName={styles['pop']}
|
|
240
|
+
|
|
241
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
242
|
+
className: styles["editor"]
|
|
243
|
+
}, "\u66F4\u591A ", /*#__PURE__*/React.createElement(DownOutlined, null)));
|
|
244
|
+
} else {
|
|
245
|
+
return columnButtons.map(function (item, index) {
|
|
246
|
+
var _item$props2 = item.props,
|
|
247
|
+
children = _item$props2.children,
|
|
248
|
+
pageType = _item$props2.pageType,
|
|
249
|
+
_onClick2 = _item$props2.onClick,
|
|
250
|
+
params = _objectWithoutProperties(_item$props2, _excluded2);
|
|
251
|
+
|
|
252
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
253
|
+
className: styles["editor"],
|
|
254
|
+
key: index,
|
|
255
|
+
onClick: function onClick() {
|
|
256
|
+
_onClick2 && _onClick2(record);
|
|
257
|
+
}
|
|
258
|
+
}, params), children);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
} //树点击事件
|
|
262
|
+
|
|
263
|
+
}, {
|
|
264
|
+
key: "treeSelect",
|
|
265
|
+
value: function treeSelect(selectedKeys, _ref) {
|
|
266
|
+
var _this$searchRef$curre3;
|
|
267
|
+
|
|
268
|
+
var selected = _ref.selected,
|
|
269
|
+
selectedNodes = _ref.selectedNodes;
|
|
270
|
+
var keyword = "";
|
|
271
|
+
var _this$props$treeProps = this.props.treeProps,
|
|
272
|
+
_this$props$treeProps2 = _this$props$treeProps.searchKey,
|
|
273
|
+
searchKey = _this$props$treeProps2 === void 0 ? "key" : _this$props$treeProps2,
|
|
274
|
+
_this$props$treeProps3 = _this$props$treeProps.searchField,
|
|
275
|
+
searchField = _this$props$treeProps3 === void 0 ? "" : _this$props$treeProps3;
|
|
276
|
+
var treeSelectedKey = this.state.treeSelectedKey;
|
|
277
|
+
|
|
278
|
+
if (selected) {
|
|
279
|
+
if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
|
|
280
|
+
if (selectedKeys[0] !== treeSelectedKey) {
|
|
281
|
+
// let mapData = this.treeRef.current?.store.getFlattenData();
|
|
282
|
+
keyword = selectedNodes[0].dataref.attribute[searchKey];
|
|
283
|
+
this.setState({
|
|
284
|
+
treeSelectedKey: selectedKeys[0]
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
} else {
|
|
289
|
+
this.setState({
|
|
290
|
+
treeSelectedKey: keyword
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
var fromValue = (_this$searchRef$curre3 = this.searchRef.current) === null || _this$searchRef$curre3 === void 0 ? void 0 : _this$searchRef$curre3.getFieldsValue();
|
|
295
|
+
searchField && this.load(_objectSpread(_objectSpread({}, fromValue), {}, _defineProperty({}, searchField, keyword)));
|
|
296
|
+
}
|
|
297
|
+
}, {
|
|
298
|
+
key: "render",
|
|
299
|
+
value: function render() {
|
|
300
|
+
var _this2 = this;
|
|
301
|
+
|
|
302
|
+
var selectedRowKeys = this.state.selectedRowKeys;
|
|
303
|
+
var _this$props = this.props,
|
|
304
|
+
_this$props$columns = _this$props.columns,
|
|
305
|
+
columns = _this$props$columns === void 0 ? [] : _this$props$columns,
|
|
306
|
+
_this$props$showSearc = _this$props.showSearch,
|
|
307
|
+
showSearch = _this$props$showSearc === void 0 ? true : _this$props$showSearc,
|
|
308
|
+
children = _this$props.children,
|
|
309
|
+
_this$props$autoSubmi = _this$props.autoSubmit,
|
|
310
|
+
autoSubmit = _this$props$autoSubmi === void 0 ? true : _this$props$autoSubmi,
|
|
311
|
+
_this$props$submitUrl = _this$props.submitUrl,
|
|
312
|
+
submitUrl = _this$props$submitUrl === void 0 ? "" : _this$props$submitUrl,
|
|
313
|
+
_this$props$tableProp = _this$props.tableProps,
|
|
314
|
+
tableProps = _this$props$tableProp === void 0 ? {} : _this$props$tableProp,
|
|
315
|
+
_this$props$treeProps4 = _this$props.treeProps,
|
|
316
|
+
treeProps = _this$props$treeProps4 === void 0 ? {} : _this$props$treeProps4,
|
|
317
|
+
_this$props$showLeft = _this$props.showLeft,
|
|
318
|
+
showLeft = _this$props$showLeft === void 0 ? false : _this$props$showLeft,
|
|
319
|
+
_this$props$submitPar = _this$props.submitParams,
|
|
320
|
+
submitParams = _this$props$submitPar === void 0 ? {} : _this$props$submitPar,
|
|
321
|
+
_this$props$showToolB = _this$props.showToolButton,
|
|
322
|
+
showToolButton = _this$props$showToolB === void 0 ? true : _this$props$showToolB,
|
|
323
|
+
_this$props$showAddBu = _this$props.showAddButton,
|
|
324
|
+
showAddButton = _this$props$showAddBu === void 0 ? true : _this$props$showAddBu,
|
|
325
|
+
_this$props$editorFor = _this$props.editorForm,
|
|
326
|
+
editorForm = _this$props$editorFor === void 0 ? true : _this$props$editorFor;
|
|
327
|
+
var _tableProps$store = tableProps.store,
|
|
328
|
+
store = _tableProps$store === void 0 ? {} : _tableProps$store,
|
|
329
|
+
_tableProps$filterCol = tableProps.filterColumn,
|
|
330
|
+
filterColumn = _tableProps$filterCol === void 0 ? true : _tableProps$filterCol,
|
|
331
|
+
_tableProps$actionBut = tableProps.actionButton,
|
|
332
|
+
actionButton = _tableProps$actionBut === void 0 ? true : _tableProps$actionBut,
|
|
333
|
+
_tableProps$actionCol = tableProps.actionColumn,
|
|
334
|
+
actionColumn = _tableProps$actionCol === void 0 ? true : _tableProps$actionCol,
|
|
335
|
+
_tableProps$showRowSe = tableProps.showRowSelection,
|
|
336
|
+
showRowSelection = _tableProps$showRowSe === void 0 ? true : _tableProps$showRowSe;
|
|
337
|
+
var _treeProps$store = treeProps.store,
|
|
338
|
+
treeStore = _treeProps$store === void 0 ? {} : _treeProps$store,
|
|
339
|
+
_treeProps$showSearch = treeProps.showSearch,
|
|
340
|
+
treeSearch = _treeProps$showSearch === void 0 ? true : _treeProps$showSearch;
|
|
341
|
+
var tableParams = {
|
|
342
|
+
filterColumn: filterColumn,
|
|
343
|
+
store: store
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
if (showRowSelection) {
|
|
347
|
+
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
348
|
+
rowSelection: {
|
|
349
|
+
selectedRowKeys: selectedRowKeys,
|
|
350
|
+
onSelect: this.rowSelectionOnSelect.bind(this),
|
|
351
|
+
onSelectAll: this.rowSelectionOnSelectAll.bind(this),
|
|
352
|
+
columnWidth: 40
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
var tableColumn = [];
|
|
358
|
+
var searchForms = [];
|
|
359
|
+
var editorForms = [];
|
|
360
|
+
columns.map(function (item) {
|
|
361
|
+
var temp = _objectSpread({}, item);
|
|
362
|
+
|
|
363
|
+
if (temp.search) {
|
|
364
|
+
searchForms.push({
|
|
365
|
+
name: temp.field || temp.dataIndex,
|
|
366
|
+
label: temp.title,
|
|
367
|
+
type: temp.type,
|
|
368
|
+
props: temp.props
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
delete temp.search;
|
|
373
|
+
temp.editor === false && editorForms.push({
|
|
374
|
+
name: temp.field || temp.dataIndex,
|
|
375
|
+
label: temp.title,
|
|
376
|
+
rules: temp.rules,
|
|
377
|
+
type: temp.type,
|
|
378
|
+
props: temp.props,
|
|
379
|
+
span: temp.span
|
|
380
|
+
});
|
|
381
|
+
delete temp.rules;
|
|
382
|
+
delete temp.span;
|
|
383
|
+
|
|
384
|
+
if (temp.columnSearch) {
|
|
385
|
+
temp.filterProps = {
|
|
386
|
+
type: temp.type,
|
|
387
|
+
props: temp.props
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
delete temp.type;
|
|
392
|
+
delete temp.props;
|
|
393
|
+
tableColumn.push(temp);
|
|
394
|
+
});
|
|
395
|
+
var Buttons = [];
|
|
396
|
+
var columnButtons = [];
|
|
397
|
+
|
|
398
|
+
if (Array.isArray(children)) {
|
|
399
|
+
children.map(function (item) {
|
|
400
|
+
if (item.props.pageType == "toolButton") {
|
|
401
|
+
Buttons.push(item);
|
|
402
|
+
} else if (item.props.pageType == "cloumnButton") {
|
|
403
|
+
columnButtons.push(item);
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
} else if (children) {
|
|
407
|
+
var props = children.props;
|
|
408
|
+
|
|
409
|
+
if (props.pageType == "toolButton") {
|
|
410
|
+
Buttons.push(children);
|
|
411
|
+
} else if (props.pageType == "cloumnButton") {
|
|
412
|
+
columnButtons.push(children);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
actionColumn && tableColumn.push({
|
|
417
|
+
title: "操作",
|
|
418
|
+
dataIndex: "action",
|
|
419
|
+
align: "center",
|
|
420
|
+
width: 150,
|
|
421
|
+
render: function render(text, record) {
|
|
422
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
423
|
+
className: styles["action"]
|
|
424
|
+
}, actionButton && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
425
|
+
className: styles["editor"],
|
|
426
|
+
onClick: _this2.showForm.bind(_this2, record, false)
|
|
427
|
+
}, "\u67E5\u770B"), /*#__PURE__*/React.createElement("div", {
|
|
428
|
+
className: styles["editor"],
|
|
429
|
+
onClick: _this2.showForm.bind(_this2, record, true)
|
|
430
|
+
}, "\u7F16\u8F91")), _this2.renderCloumnButton(columnButtons, record, actionButton));
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
434
|
+
className: styles["page"],
|
|
435
|
+
style: {
|
|
436
|
+
display: "flex"
|
|
437
|
+
}
|
|
438
|
+
}, showLeft && /*#__PURE__*/React.createElement("div", {
|
|
439
|
+
className: styles["left"]
|
|
440
|
+
}, /*#__PURE__*/React.createElement(Tree, {
|
|
441
|
+
store: _objectSpread({}, treeStore),
|
|
442
|
+
showIcon: false,
|
|
443
|
+
checkable: false,
|
|
444
|
+
searchable: treeSearch,
|
|
445
|
+
onSelect: this.treeSelect.bind(this),
|
|
446
|
+
selectedKeys: [this.state.treeSelectedKey]
|
|
447
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
448
|
+
className: styles["right"]
|
|
449
|
+
}, showSearch && /*#__PURE__*/React.createElement("div", {
|
|
450
|
+
className: styles["header"]
|
|
451
|
+
}, /*#__PURE__*/React.createElement(Form, {
|
|
452
|
+
ref: this.searchRef,
|
|
453
|
+
labelCol: {},
|
|
454
|
+
wrapperCol: {},
|
|
455
|
+
layout: "inline"
|
|
456
|
+
}, searchForms.map(function (item, index) {
|
|
457
|
+
if (!item.type) {
|
|
458
|
+
return /*#__PURE__*/React.createElement(Form.Input, {
|
|
459
|
+
label: item.label,
|
|
460
|
+
name: item.name,
|
|
461
|
+
key: index
|
|
462
|
+
});
|
|
463
|
+
} else {
|
|
464
|
+
var _props = _objectSpread({}, item.props);
|
|
465
|
+
|
|
466
|
+
return /*#__PURE__*/React.createElement(Form.Select, _extends({
|
|
467
|
+
label: item.label,
|
|
468
|
+
name: item.name
|
|
469
|
+
}, _props, {
|
|
470
|
+
key: index
|
|
471
|
+
}));
|
|
472
|
+
}
|
|
473
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
474
|
+
className: styles["buttons"],
|
|
475
|
+
style: {
|
|
476
|
+
marginTop: 0
|
|
477
|
+
}
|
|
478
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
479
|
+
type: "primary",
|
|
480
|
+
onClick: this.onSearch.bind(this),
|
|
481
|
+
icon: /*#__PURE__*/React.createElement(Icon, {
|
|
482
|
+
type: iconType.search
|
|
483
|
+
})
|
|
484
|
+
}, "\u67E5\u8BE2"), /*#__PURE__*/React.createElement(Button, {
|
|
485
|
+
type: "primary",
|
|
486
|
+
onClick: function onClick() {
|
|
487
|
+
var _this2$searchRef$curr;
|
|
488
|
+
|
|
489
|
+
(_this2$searchRef$curr = _this2.searchRef.current) === null || _this2$searchRef$curr === void 0 ? void 0 : _this2$searchRef$curr.resetFields();
|
|
490
|
+
},
|
|
491
|
+
icon: /*#__PURE__*/React.createElement(Icon, {
|
|
492
|
+
type: iconType.refresh
|
|
493
|
+
})
|
|
494
|
+
}, "\u91CD\u7F6E"))), showToolButton && Buttons.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
495
|
+
className: styles["buttons"],
|
|
496
|
+
style: {
|
|
497
|
+
marginLeft: 0
|
|
498
|
+
}
|
|
499
|
+
}, showAddButton && /*#__PURE__*/React.createElement(Button, {
|
|
500
|
+
type: "primary",
|
|
501
|
+
onClick: this.showForm.bind(this),
|
|
502
|
+
icon: /*#__PURE__*/React.createElement(Icon, {
|
|
503
|
+
type: iconType.add
|
|
504
|
+
})
|
|
505
|
+
}, "\u6DFB\u52A0"), Buttons.map(function (item, index) {
|
|
506
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
507
|
+
key: index
|
|
508
|
+
}, item);
|
|
509
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
510
|
+
className: styles["table"]
|
|
511
|
+
}, /*#__PURE__*/React.createElement(Table, _extends({
|
|
512
|
+
ref: this.tableRef,
|
|
513
|
+
columns: tableColumn
|
|
514
|
+
}, tableParams)))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
515
|
+
ref: this.editorRef,
|
|
516
|
+
onCancel: this.showForm.bind(this),
|
|
517
|
+
callBack: this.tableReload.bind(this),
|
|
518
|
+
formProps: editorForms,
|
|
519
|
+
autoSubmit: autoSubmit,
|
|
520
|
+
submitUrl: submitUrl,
|
|
521
|
+
submitParams: submitParams
|
|
522
|
+
}));
|
|
523
|
+
}
|
|
524
|
+
}]);
|
|
525
|
+
|
|
526
|
+
return BasePage;
|
|
527
|
+
}(PureComponent);
|
|
528
|
+
|
|
529
|
+
export default BasePage;
|
|
530
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2VDb21wb25lbnRzL0Jhc2VQYWdlL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJGb3JtIiwiQnV0dG9uIiwiSWNvbiIsImljb25UeXBlIiwiRWRpdG9yRm9ybSIsImNscyIsInN0eWxlcyIsIkRvd25PdXRsaW5lZCIsIkJhc2VQYWdlIiwicHJvcHMiLCJjcmVhdGVSZWYiLCJjaGVja2VkVHJlZUtleXMiLCJzdGF0ZSIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJ2YWx1ZSIsImRlcHRJZCIsInRhYmxlTG9hZCIsInR5cGUiLCJzZWxlY3RlZFJvd0tleXMiLCJ0cmVlU2VsZWN0ZWRLZXkiLCJmbGFnIiwiZWRpdG9yUmVmIiwiY3VycmVudCIsInNob3ciLCJwYXJhbXMiLCJ0YWJsZVJlZiIsInN0b3JlIiwibG9hZCIsImZyb21WYWx1ZSIsInNlYXJjaFJlZiIsImdldEZpZWxkc1ZhbHVlIiwicmVsb2FkIiwicmVjb3JkIiwic2VsZWN0ZWQiLCJuZXdTZWxlY3RlZFJvd0tleXMiLCJpZCIsIm1hcCIsIml0ZW0iLCJpbmRleCIsInNwbGljZSIsInNldFN0YXRlIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsImxlbmd0aCIsImNoYW5nZUlkcyIsImluZGV4T2YiLCJwdXNoIiwiY29sdW1uQnV0dG9ucyIsImFjdGlvbkJ1dHRvbiIsImNvbnRlbnQiLCJjaGlsZHJlbiIsInBhZ2VUeXBlIiwib25DbGljayIsIm51bSIsInNlbGVjdGVkS2V5cyIsInNlbGVjdGVkTm9kZXMiLCJrZXl3b3JkIiwidHJlZVByb3BzIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJpc0xlYWYiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiY29sdW1ucyIsInNob3dTZWFyY2giLCJhdXRvU3VibWl0Iiwic3VibWl0VXJsIiwidGFibGVQcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJzaG93QWRkQnV0dG9uIiwiZWRpdG9yRm9ybSIsImZpbHRlckNvbHVtbiIsImFjdGlvbkNvbHVtbiIsInNob3dSb3dTZWxlY3Rpb24iLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGFibGVQYXJhbXMiLCJyb3dTZWxlY3Rpb24iLCJvblNlbGVjdCIsInJvd1NlbGVjdGlvbk9uU2VsZWN0IiwiYmluZCIsIm9uU2VsZWN0QWxsIiwicm93U2VsZWN0aW9uT25TZWxlY3RBbGwiLCJjb2x1bW5XaWR0aCIsInRhYmxlQ29sdW1uIiwic2VhcmNoRm9ybXMiLCJlZGl0b3JGb3JtcyIsInRlbXAiLCJzZWFyY2giLCJmaWVsZCIsImRhdGFJbmRleCIsImxhYmVsIiwidGl0bGUiLCJlZGl0b3IiLCJydWxlcyIsInNwYW4iLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsIkJ1dHRvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJhbGlnbiIsIndpZHRoIiwicmVuZGVyIiwidGV4dCIsInNob3dGb3JtIiwicmVuZGVyQ2xvdW1uQnV0dG9uIiwiZGlzcGxheSIsInRyZWVTZWxlY3QiLCJtYXJnaW5Ub3AiLCJvblNlYXJjaCIsInJlc2V0RmllbGRzIiwicmVmcmVzaCIsIm1hcmdpbkxlZnQiLCJhZGQiLCJ0YWJsZVJlbG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBcUMsT0FBckM7QUFFQSxPQUFPQyxLQUFQLE1BQWtCLGFBQWxCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixZQUFqQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsWUFBakI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLGNBQW5CO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQix1QkFBakI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGlCQUF6QjtBQUNBLE9BQU9DLFVB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Q3RDLDRCQUFPO0FBQUssVUFBQSxHQUFHLEVBQUVBO0FBQVYsV0FBa0JELElBQWxCLENBQVA7QUFDRCxPQUZBLENBVkgsQ0FwREosZUFtRUU7QUFBSyxRQUFBLFNBQVMsRUFBRWpDLE1BQU0sQ0FBQyxPQUFEO0FBQXRCLHNCQUNFLG9CQUFDLEtBQUQ7QUFBTyxRQUFBLEdBQUcsRUFBRSxLQUFLcUIsUUFBakI7QUFBMkIsUUFBQSxPQUFPLEVBQUU4RDtBQUFwQyxTQUFxRFIsV0FBckQsRUFERixDQW5FRixDQWJGLEVBb0ZHTixVQUFVLGlCQUNULG9CQUFDLFVBQUQ7QUFDRSxRQUFBLEdBQUcsRUFBRSxLQUFLcEQsU0FEWjtBQUVFLFFBQUEsUUFBUSxFQUFFLEtBQUt1RixRQUFMLENBQWN6QixJQUFkLENBQW1CLElBQW5CLENBRlo7QUFHRSxRQUFBLFFBQVEsRUFBRSxLQUFLbUMsV0FBTCxDQUFpQm5DLElBQWpCLENBQXNCLElBQXRCLENBSFo7QUFJRSxRQUFBLFNBQVMsRUFBRU0sV0FKYjtBQUtFLFFBQUEsVUFBVSxFQUFFdkIsVUFMZDtBQU1FLFFBQUEsU0FBUyxFQUFFQyxTQU5iO0FBT0UsUUFBQSxZQUFZLEVBQUVHO0FBUGhCLFFBckZKLENBREY7QUFrR0Q7Ozs7RUF6WG9CM0UsYTs7QUEyWHZCLGVBQWVXLFFBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBTd2l0Y2gsIFBvcGNvbmZpcm0sIG1lc3NhZ2UsIE1vZGFsLCBSb3csIENvbCwgUG9wb3ZlciB9IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi4vLi4vdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL3RyZWVcIjtcclxuaW1wb3J0IEZvcm0gZnJvbSBcIi4uLy4uL2Zvcm1cIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYnV0dG9uXCI7XHJcbmltcG9ydCBJY29uIGZyb20gXCIuLi8uLi9jb21tb24vSWNvbkZvbnRcIjtcclxuaW1wb3J0IHsgaWNvblR5cGUgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCBFZGl0b3JGb3JtIGZyb20gXCIuL0Zvcm1cIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyBEb3duT3V0bGluZWQgfSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgYWN0aW9uQnV0dG9uPzogYm9vbGVhbjsgLy/mmK/lkKbpu5jorqTmmL7npLrmlrDlop7vvIznvJbovpHpu5jorqTmjInpkq5cclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxufVxyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47XHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nO1xyXG4gIHNlYXJjaEZpZWxkPzogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBOU0NCYXNlQmFnZVByb3BzIHtcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlpLTpg6jmkJzntKLmoI9cclxuICB0YWJsZVByb3BzPzogVGFibGVQcm9wczsgLy/ooajmoLzlj4LmlbBcclxuICB0cmVlUHJvcHM/OiBUcmVlUHJvcHM7IC8v5bem5L6n5qCR5Y+C5pWwXHJcbiAgc3VibWl0UGFyYW1zPzogT2JqZWN0O1xyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBhdXRvU3VibWl0PzogYm9vbGVhbjtcclxuICBjb2x1bW5zOiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgc2hvd0FkZEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65re75Yqg5oyJ6ZKuXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgIH07XHJcbiAgfVxyXG4gIG9uU2VsZWN0ID0gKGNoZWNrZWRUcmVlS2V5czogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgdmFsdWUgPSB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50LCBkZXB0SWQ6IGNoZWNrZWRUcmVlS2V5c1swXSB9O1xyXG4gICAgdGhpcy50YWJsZUxvYWQodmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIC8v5pi+56S66KGo5Y2VXHJcbiAgc2hvd0Zvcm0odmFsdWU/OiBhbnksIGZsYWcgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zaG93KHZhbHVlLCBmbGFnKTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWYuY3VycmVudD8uZ2V0RmllbGRzVmFsdWUoKTtcclxuICAgIHRoaXMubG9hZChmcm9tVmFsdWUpO1xyXG4gIH1cclxuICAvL+ihqOagvOmHjeaWsOWKoOi9vVxyXG4gIHRhYmxlUmVsb2FkKCkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5yZWxvYWQoKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzO1xyXG4gIH1cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5nZXRGaWVsZHNWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGZyb21WYWx1ZTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3QocmVjb3JkOiBhbnksIHNlbGVjdGVkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5uZXdTZWxlY3RlZFJvd0tleXMsIHJlY29yZC5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gcmVjb3JkLmlkKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogbmV3U2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsKHNlbGVjdGVkOiBhbnksIHNlbGVjdGVkUm93czogYW55LCBjaGFuZ2VSb3dzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBpZiAoY2hhbmdlUm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjaGFuZ2VJZHMgPSBjaGFuZ2VSb3dzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBsb2FkKHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJlY29yZDogYW55LCBhY3Rpb25CdXR0b24/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gY29sdW1uQnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKHN0eWxlc1tcImVkaXRvclwiXSwgc3R5bGVzW1wiY29udGVudC1pdGVtXCJdKX1cclxuICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgbnVtID0gMTtcclxuICAgIGlmICghYWN0aW9uQnV0dG9uKSBudW0gPSAzO1xyXG4gICAgaWYgKGNvbHVtbkJ1dHRvbnMubGVuZ3RoID4gbnVtKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxyXG4gICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AnXX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1wiZWRpdG9yXCJdfT5cclxuICAgICAgICAgICAg5pu05aSaIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5CdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1tcImVkaXRvclwiXX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH06IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3QgeyBzZWFyY2hLZXkgPSBcImtleVwiLCBzZWFyY2hGaWVsZCA9IFwiXCIgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkTm9kZXNbMF0uaXNMZWFmIHx8ICFzZWxlY3RlZE5vZGVzWzBdLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAvLyBsZXQgbWFwRGF0YSA9IHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5nZXRGbGF0dGVuRGF0YSgpO1xyXG4gICAgICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLmxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgYXV0b1N1Ym1pdCA9IHRydWUsXHJcbiAgICAgIHN1Ym1pdFVybCA9IFwiXCIsXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgICAgdHJlZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIHNob3dBZGRCdXR0b24gPSB0cnVlLFxyXG4gICAgICBlZGl0b3JGb3JtID0gdHJ1ZSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzdG9yZSA9IHt9LFxyXG4gICAgICBmaWx0ZXJDb2x1bW4gPSB0cnVlLFxyXG4gICAgICBhY3Rpb25CdXR0b24gPSB0cnVlLFxyXG4gICAgICBhY3Rpb25Db2x1bW4gPSB0cnVlLFxyXG4gICAgICBzaG93Um93U2VsZWN0aW9uID0gdHJ1ZSxcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG5cclxuICAgIGNvbnN0IHsgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LCBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSB9ID0gdHJlZVByb3BzO1xyXG5cclxuICAgIGxldCB0YWJsZVBhcmFtcyA9IHsgZmlsdGVyQ29sdW1uLCBzdG9yZSB9IGFzIGFueTtcclxuICAgIGlmIChzaG93Um93U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAgIC4uLnRhYmxlUGFyYW1zLFxyXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBzZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgb25TZWxlY3RBbGw6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3RBbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGNvbHVtbldpZHRoOiA0MCxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGFibGVDb2x1bW46IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWFyY2hGb3JtczogYW55ID0gW107XHJcbiAgICBjb25zdCBlZGl0b3JGb3JtczogYW55ID0gW107XHJcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0geyAuLi5pdGVtIH07XHJcbiAgICAgIGlmICh0ZW1wLnNlYXJjaCkge1xyXG4gICAgICAgIHNlYXJjaEZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAuc2VhcmNoO1xyXG4gICAgICB0ZW1wLmVkaXRvciA9PT0gZmFsc2UgJiZcclxuICAgICAgICBlZGl0b3JGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC50aXRsZSxcclxuICAgICAgICAgIHJ1bGVzOiB0ZW1wLnJ1bGVzLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgICBzcGFuOiB0ZW1wLnNwYW4sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnJ1bGVzO1xyXG4gICAgICBkZWxldGUgdGVtcC5zcGFuO1xyXG4gICAgICBpZiAodGVtcC5jb2x1bW5TZWFyY2gpIHtcclxuICAgICAgICB0ZW1wLmZpbHRlclByb3BzID0ge1xyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC50eXBlO1xyXG4gICAgICBkZWxldGUgdGVtcC5wcm9wcztcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCBjb2x1bW5CdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb3BzLnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnByb3BzLnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHMucGFnZVR5cGUgPT0gXCJ0b29sQnV0dG9uXCIpIHtcclxuICAgICAgICBCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiAxNTAsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcImFjdGlvblwiXX0+XHJcbiAgICAgICAgICAgICAge2FjdGlvbkJ1dHRvbiAmJiAoXHJcbiAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbXCJlZGl0b3JcIl19XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93Rm9ybS5iaW5kKHRoaXMsIHJlY29yZCwgZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg5p+l55yLXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbXCJlZGl0b3JcIl19XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93Rm9ybS5iaW5kKHRoaXMsIHJlY29yZCwgdHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICDnvJbovpFcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zLCByZWNvcmQsIGFjdGlvbkJ1dHRvbil9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1wicGFnZVwiXX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX0+XHJcbiAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJsZWZ0XCJdfT5cclxuICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICBzaG93SWNvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnRyZWVTZWxlY3QuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJyaWdodFwiXX0+XHJcbiAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJoZWFkZXJcIl19PlxyXG4gICAgICAgICAgICAgIDxGb3JtXHJcbiAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgbGFiZWxDb2w9e3t9fVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlckNvbD17e319XHJcbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJpbmxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtzZWFyY2hGb3Jtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5JbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17aXRlbS5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0geyAuLi5pdGVtLnByb3BzIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLlNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17aXRlbS5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgIDwvRm9ybT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1wiYnV0dG9uc1wiXX0gc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBpY29uPXs8SWNvbiB0eXBlPXtpY29uVHlwZS5zZWFyY2h9IC8+fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLnJlZnJlc2h9IC8+fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICDph43nva5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICB7c2hvd1Rvb2xCdXR0b24gJiYgQnV0dG9ucy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcImJ1dHRvbnNcIl19IHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX0+XHJcbiAgICAgICAgICAgICAge3Nob3dBZGRCdXR0b24gJiYgKFxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93Rm9ybS5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBpY29uPXs8SWNvbiB0eXBlPXtpY29uVHlwZS5hZGR9IC8+fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICDmt7vliqBcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAge0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17aW5kZXh9PntpdGVtfTwvZGl2PjtcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcInRhYmxlXCJdfT5cclxuICAgICAgICAgICAgPFRhYmxlIHJlZj17dGhpcy50YWJsZVJlZn0gY29sdW1ucz17dGFibGVDb2x1bW59IHsuLi50YWJsZVBhcmFtc30gLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgIDxFZGl0b3JGb3JtXHJcbiAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgIG9uQ2FuY2VsPXt0aGlzLnNob3dGb3JtLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgIGNhbGxCYWNrPXt0aGlzLnRhYmxlUmVsb2FkLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgIGZvcm1Qcm9wcz17ZWRpdG9yRm9ybXN9XHJcbiAgICAgICAgICAgIGF1dG9TdWJtaXQ9e2F1dG9TdWJtaXR9XHJcbiAgICAgICAgICAgIHN1Ym1pdFVybD17c3VibWl0VXJsfVxyXG4gICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl19
|