nsc-react-component 4.4.6 → 4.4.7
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/table/index.js
CHANGED
|
@@ -314,10 +314,15 @@ class NSCTable extends React.Component {
|
|
|
314
314
|
const {
|
|
315
315
|
resizeColumn
|
|
316
316
|
} = this.props;
|
|
317
|
+
const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);
|
|
318
|
+
const defaultCheckedColumns = this.getInitCheckedColumns(newColumns);
|
|
317
319
|
if (!resizeColumn) {
|
|
318
320
|
if (this.props.columns !== prevProps.columns) {
|
|
319
321
|
this.setState({
|
|
320
|
-
columns:
|
|
322
|
+
columns: newColumns,
|
|
323
|
+
storeColumns: [...this.props.columns],
|
|
324
|
+
checkColumn: defaultCheckedColumns,
|
|
325
|
+
keyColumns: newColumns
|
|
321
326
|
});
|
|
322
327
|
}
|
|
323
328
|
} else {
|
|
@@ -326,8 +331,15 @@ class NSCTable extends React.Component {
|
|
|
326
331
|
}
|
|
327
332
|
if (this.props.columns !== prevProps.columns) {
|
|
328
333
|
this.setState({
|
|
329
|
-
cols:
|
|
330
|
-
|
|
334
|
+
cols: newColumns,
|
|
335
|
+
//修改列宽
|
|
336
|
+
columns: newColumns,
|
|
337
|
+
//table组件使用
|
|
338
|
+
storeColumns: [...this.props.columns],
|
|
339
|
+
//原始列,用于判断是有列有更新
|
|
340
|
+
checkColumn: defaultCheckedColumns,
|
|
341
|
+
//默认选中的列
|
|
342
|
+
keyColumns: newColumns //提供带标识的完整列结构,用于构建列选择界面
|
|
331
343
|
});
|
|
332
344
|
}
|
|
333
345
|
if (prevProps.size !== this.props.size) {
|
|
@@ -1203,4 +1215,4 @@ _defineProperty(NSCTable, "defaultProps", {
|
|
|
1203
1215
|
}
|
|
1204
1216
|
});
|
|
1205
1217
|
export default withZhLocale(NSCTable);
|
|
1206
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImd1aWQiLCJnZXRGbGF0dGVuRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJnZXRJbml0Q2hlY2tlZENvbHVtbnMiLCJjaGVja2VkS2V5cyIsInRyYXZlcnNlIiwiZm9yRWFjaCIsImNvbCIsImluaXRTaG93IiwicHVzaCIsInVuaXF1ZUtleSIsImNoaWxkcmVuIiwibGVuZ3RoIiwiZ2VuZXJhdGVVbmlxdWVLZXlzQW5kUGF0aHMiLCJwYXJlbnRQYXRoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibGV2ZWwiLCJtYXAiLCJjdXJyZW50UGF0aCIsImNvbmNhdCIsIm5ld0NvbCIsInBhdGgiLCJsZWFmIiwiY2hpbGRyZW5LZXlzIiwiY2hpbGQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsIm5ld0NvbHVtbnMiLCJkZWZhdWx0Q2hlY2tlZENvbHVtbnMiLCJzdG9yZUNvbHVtbnMiLCJrZXlDb2x1bW5zIiwic2V0RGF0YSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5NZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJlU3RhdGUiLCJyZXNldENvbHVtbiIsIm5ld0NvbHMiLCJjb2xzcyIsInRlbXAiLCJvbkhlYWRlckNlbGwiLCJjb2x1bW4iLCJoYW5kbGVSZXNpemUiLCJjbGVhclNlbGVjdENvbG9yIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJvbkNoYW5nZSIsImZpbHRlcnMiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwiaXNNdWx0aXBsZSIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZVBhZ2luYXRpb24iLCJwIiwiY3VycmVudEtleSIsInBhZ2VTaXplS2V5IiwicGFnZVNpemUiLCJhc2NQYXJhbXMiLCJnZXRTb3J0UGFyYW0iLCJvbkNoYW5nZUZuIiwiZ2V0U3RvcmUiLCJnZXRNb2RlbCIsImhhbmRsZVNlYXJjaCIsInZhbCIsImZpbHRlckNvbHVtbiIsImNoZWNrZWRWYWx1ZSIsImlzQ2hlY2tlZCIsIm1hcERhdGEiLCJjdXJyZW50Q2hlY2tlZEtleXMiLCJnZXRBbGxDaGlsZHJlbktleXMiLCJrZXlzIiwiYWxsQ2hpbGRyZW5LZXlzIiwiaW5jbHVkZXMiLCJrZXkiLCJwYXRoUGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImpvaW4iLCJwYXJlbnRDb2wiLCJ2YWx1ZXMiLCJmaW5kIiwiYyIsImFsbFNpYmxpbmdzIiwiaGFzQ2hlY2tlZFNpYmxpbmciLCJzb21lIiwiX21lc3NhZ2UiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsImZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzIiwicmVzdWx0IiwiaXNDb2x1bW5DaGVja2VkIiwiZmlsdGVyZWRDaGlsZHJlbiIsInNvcnRTdGF0ZSIsInNvcnRTZWFyY2giLCJvcmRlckl0ZW1zIiwiZmllbGQiLCJkYXRhSW5kZXgiLCJhc2MiLCJvcmRlciIsInYiLCJzdHJpbmdpZnkiLCJpc0JleW9uZCIsImV2ZW50IiwidGV4dFJhbmdlIiwiZWwiLCJ0ZXh0Q29udGVudCIsInRhcmdldFciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyYW5nZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsImNoaWxkTm9kZXMiLCJyYW5nZVdpZHRoIiwic2V0U2VsZWN0ZWRSb3dLZXlzIiwic2V0U2VsZWN0ZWRSb3dEYXRhcyIsInNvcnRGaWVsZHMiLCJkZWZhdWx0U2hvd0NvbHMiLCJlbGxpcHNpcyIsInJlbmRlciIsInNob3dUaXRsZSIsInRleHQiLCJfdGhpcyRzdGF0ZSRjb2xzIiwiY3VycmVudENvbCIsImFjdHVhbFdpZHRoIiwiY29sV2lkdGgiLCJjb2xXaWR0aE9iaiIsInNtYWxsIiwibWlkZGxlIiwiZGVmYXVsdCIsImxhcmdlIiwicGFkZGluZ1dpZHRoIiwic3R5bGUiLCJkaXNwbGF5IiwicmVmIiwicmVtb3ZlQXR0cmlidXRlIiwic2Nyb2xsV2lkdGgiLCJjbGllbnRXaWR0aCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIm92ZXJmbG93IiwidGV4dE92ZXJmbG93Iiwid2hpdGVTcGFjZSIsImluZGV4T2YiLCJzb3J0T3JkZXIiLCJtdWx0aXBsZSIsIml0ZW0iLCJmaWx0ZXJQcm9wcyIsIm9iaiIsInNlYXJjaEtleSIsIkRpdiIsInRpdGxlIiwicGxhY2Vob2xkZXIiLCJ0YWJsZVNlYXJjaFJlZiIsImZpbHRlckRyb3Bkb3duIiwiX3JlZjMiLCJzZXRTZWxlY3RlZEtleXMiLCJzZWxlY3RlZEtleXMiLCJjb25maXJtIiwiY2xlYXJGaWx0ZXJzIiwiX1NwYWNlIiwiX0J1dHRvbiIsIm9uQ2xpY2siLCJfdGhpcyR0YWJsZVNlYXJjaFJlZiQiLCJuZXdGaWx0ZXJQYXJhbXMiLCJnZXRWYWx1ZSIsInNvcnRQYXJhbSIsImZpbHRlckljb24iLCJyZW5kZXJUb29sQmFyIiwiY29sTGlzdHMiLCJ0b29sYmFyIiwidGFibGVUb29sIiwic3RvcmVSZXF1ZXN0Q29uZmlnIiwidG9vbHMiLCJ0b29sc0NsaWNrIiwib25Ub29sQ2xpY2siLCJzaXplSXRlbSIsInNvcnRJdGVtIiwic29ydENvbnRlbnQiLCJGcmFnbWVudCIsImN1cnNvciIsImNvbG9yIiwic2l6ZUNvbnRlbnQiLCJuZXdNYXBEYXRhIiwia2V5RmllbGQiLCJjaGlsZEZpZWxkIiwiX0NoZWNrYm94IiwiY2hlY2tlZCIsImZvbnRTaXplIiwiX1BvcG92ZXIiLCJwbGFjZW1lbnQiLCJ0cmlnZ2VyIiwib3ZlcmxheVN0eWxlIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsIm1hcmdpblJpZ2h0Iiwib25SZWZyZXNoIiwiZ2V0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwicm93U2VsZWN0aW9uT25TZWxlY3QiLCJzZWxlY3RlZCIsInJvd0tleSIsIm5ld1NlbGVjdGVkUm93S2V5cyIsIm5ld1NlbGVjdGVkUm93RGF0YXMiLCJzcGxpY2UiLCJyb3dTZWxlY3Rpb25PblNlbGVjdEFsbCIsInNlbGVjdGVkUm93cyIsImNoYW5nZVJvd3MiLCJuZXdpZHMiLCJuZXdkYXRhcyIsImNoYW5nZUlkcyIsIm9taXQiLCJjbGlja0NoYW5nZUNvbG9yIiwicG9zaXRpb24iLCJzaG93U2l6ZUNoYW5nZXIiLCJzaG93UXVpY2tKdW1wZXIiLCJzaG93VG90YWwiLCJ0b3RhbCIsIl9yZWY0IiwiZnJvbSIsInRvIiwib25Sb3dGbiIsIm9uUm93IiwiY3VzdG9tIiwib25DbGlja0ZuIiwicm93Q2xhc3NOYW1lIiwibmV3RGF0YVNvdXJjZSIsImdldFNlYXJjaE1lbnVEYXRhcyIsInRyZWVEYXRhcyIsImV4cGFuZGVkUm93S2V5cyIsIm9wZW5LZXlzIiwiZHJhZ2FibGUiLCJkcmFnYWJsZVByb3BzIiwiY29tcG9uZW50cyIsInJlc2l6ZVByb3BzIiwidG9vbEZsYWciLCJzaG93Iiwic2hvd1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbiIsIm9uU2VsZWN0IiwiYmluZCIsIm9uU2VsZWN0QWxsIiwiY29sdW1uV2lkdGgiLCJ0YWJsZVByb3BzIiwiY29uZmlnVGFibGVQcm9wcyIsIkRlZmF1bHRUYWJsZSIsIl9UYWJsZSIsIl9leHRlbmRzIiwiY2hpbGRyZW5Db2x1bW5OYW1lIiwic2hlaXRlbSIsImxvY2FsZSIsImVtcHR5VGV4dCIsInNjcm9sbCIsIngiLCJfUGFnaW5hdGlvbiIsInBhZ2UiLCJhY3Rpb24iLCJfcmVmNSIsImJhY2tlbmQiLCJkcmFnVXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYmFzZS90YWJsZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQERlc2NyaXB0dGlvbjpcclxuICogQHZlcnNpb246XHJcbiAqIEBBdXRob3I6IHJ4emh1XHJcbiAqIEBEYXRlOiAyMDIxLTAzLTIzIDA4OjQ2OjIwXHJcbiAqIEBMYXN0RWRpdG9yczogcnh6aHVcclxuICogQExhc3RFZGl0VGltZTogMjAyMS0wMy0yMyAxMDozMDo0MlxyXG4gKi9cclxuaW1wb3J0IHtcclxuICBBcHBzdG9yZU91dGxpbmVkLFxyXG4gIENoZWNrT3V0bGluZWQsXHJcbiAgQ29sdW1uSGVpZ2h0T3V0bGluZWQsXHJcbiAgU2VhcmNoT3V0bGluZWQsXHJcbiAgU29ydEFzY2VuZGluZ091dGxpbmVkLFxyXG4gIFNvcnREZXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgUmVkb091dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBpc0VtcHR5T2JqIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIENoZWNrYm94LFxyXG4gIENoZWNrYm94T3B0aW9uVHlwZSxcclxuICBNZW51LFxyXG4gIG1lc3NhZ2UsXHJcbiAgUGFnaW5hdGlvbixcclxuICBQb3BvdmVyLFxyXG4gIFNwYWNlLFxyXG4gIFRhYmxlLFxyXG4gIFRhYmxlUHJvcHMsXHJcbiAgVG9vbHRpcCxcclxufSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBUYWJsZVBhZ2luYXRpb25Db25maWcgfSBmcm9tIFwiYW50ZC9saWIvdGFibGVcIjtcclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IERuZFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LWRuZFwiO1xyXG5pbXBvcnQgQm9keVJvdywgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9IGZyb20gXCIuLi9jb21tb24vQm9keVJvd1wiO1xyXG5pbXBvcnQgdHJlZVV0aWxzIGZyb20gXCIuLi8uLi90cmVlVXRpbHNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5jb25zdCB7IEJvZHlSb3dDb21wb25lbnQsIEhUTUw1QmFja2VuZCB9ID0gQm9keVJvdztcclxuaW1wb3J0IHdpdGhaaExvY2FsZSBmcm9tIFwiLi4vY29tbW9uL3dpdGhaaExvY2FsZVwiO1xyXG5pbXBvcnQgeyBSZXNpemFibGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlXCI7XHJcbmltcG9ydCBcIi4vcmVzaXplLm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgTm9EYXRhIGZyb20gXCIuLi9jb21tb24vTm9EYXRhXCI7XHJcbmltcG9ydCB7IGd1aWQsIGdldEZsYXR0ZW5EYXRhLCBnZXRTdG9yYWdlIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgRWxsaXBzZUNlbGwgZnJvbSBcIi4uL2NvbW1vbi9FbGxpcHNlQ2VsbFwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJsb2Rhc2gvaXNFcXVhbFwiO1xyXG5jb25zdCBzdHlsZXMgPSBudWxsO1xyXG5pbnRlcmZhY2UgSURyYWdQYXJhbXMge1xyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgaWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xyXG4gIHBhcmVudElkOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuLy8gaW50ZXJmYWNlIFN0b3JlUHJvcHMge31cclxuXHJcbmV4cG9ydCB0eXBlIFN0b3JlVHlwZSA9IFwiUGFnZVN0b3JlXCIgfCBcIlRyZWVTdG9yZVwiIHwgXCJCYXNlU3RvcmVcIjtcclxuXHJcbmludGVyZmFjZSBOU0NUYWJsZVBhZ2luYXRpb24gZXh0ZW5kcyBUYWJsZVBhZ2luYXRpb25Db25maWcge1xyXG4gIHRvdGFsS2V5Pzogc3RyaW5nO1xyXG4gIHBhZ2VTaXplS2V5Pzogc3RyaW5nO1xyXG4gIGN1cnJlbnRLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBUb29sQmFyUHJvcHMge1xyXG4gIHNob3c6IGJvb2xlYW47XHJcbiAgdG9vbHM/OiBBcnJheTxzdHJpbmc+O1xyXG4gIG9uVG9vbENsaWNrPzogeyBvblJlZnJlc2g/OiBhbnk7IG9uU29ydD86IGFueSB9O1xyXG59XHJcbmludGVyZmFjZSBOU0NUYWJsZVByb3BzIGV4dGVuZHMgVGFibGVQcm9wczxhbnk+IHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjsgLy8g5piv5ZCm5pi+56S65oC75p2h5pWw5L+h5oGv77yM6buY6K6kdHJ1ZVxyXG4gIGRyYWdhYmxlPzogYm9vbGVhbjsgLy8g5piv5ZCm5Y+v5ouW5YqoLCDpu5jorqRmYWxzZVxyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8vIOaYr+WQpuaUr+aMgei/h+a7pOaYvuekuuihqOagvOWIlywg6buY6K6kdHJ1ZVxyXG4gIG1vdmVSb3c/OiAocGFyYW1zOiBJRHJhZ1BhcmFtcykgPT4gdm9pZDsgLy8g5ouW5ou95a6M5oiQ5ZCO55qE5Zue6LCDXHJcbiAgZHJhZ1VybD86IHN0cmluZzsgLy8g5L+d5a2Y5ouW5ou95o6S5bqP55qE5o6l5Y+jXHJcbiAgcGFnaW5hdGlvbj86IGZhbHNlIHwgTlNDVGFibGVQYWdpbmF0aW9uO1xyXG4gIGF1dG9QYWdpbmF0aW9uPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5YiG6aG1XHJcbiAgYXV0b1NvcnQ/OiBib29sZWFuOyAvL+e7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuaOkuW6j1xyXG4gIGF1dG9PbkNoYW5nZT86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqG9uQ2hhbmdlLCBmYWxzZeWImeS4jeWBmuS7u+S9leWkhOeQhuWFqOmDqOS6pOe7meiwg+eUqOaWuVxyXG4gIHJlc2l6ZUNvbHVtbj86IGJvb2xlYW47XHJcbiAgc29ydEZpZWxkcz86IEFycmF5PHN0cmluZz47IC8v6ZyA6KaB5o6S5bqP55qE5a2X5q61SW5kZXhcclxuICB0b29sYmFyPzogVG9vbEJhclByb3BzIHwgYm9vbGVhbjtcclxuICBhdXRvU2l6ZT86IGJvb2xlYW47XHJcbiAgc29ydFNlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5re75Yqg5o6S5bqP5p+l6K+iLOm7mOiupHRydWVcclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjtcclxuICByb3dLZXk/OiBzdHJpbmc7XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcywgYW55PiB7XHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGRyYWdhYmxlOiBmYWxzZSxcclxuICAgIHNob3dUb3RhbDogdHJ1ZSxcclxuICAgIGZpbHRlckNvbHVtbjogdHJ1ZSxcclxuICAgIGRyYWdVcmw6IFwiXCIsXHJcbiAgICBhdXRvUGFnaW5hdGlvbjogdHJ1ZSxcclxuICAgIGF1dG9Tb3J0OiB0cnVlLFxyXG4gICAgYXV0b09uQ2hhbmdlOiB0cnVlLFxyXG4gICAgcmVzaXplQ29sdW1uOiB0cnVlLFxyXG4gICAgdG9vbGJhcjoge1xyXG4gICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgb25Ub29sQ2xpY2s6IHt9IGFzIGFueSxcclxuICAgICAgdG9vbHM6IFtdIGFzIGFueSxcclxuICAgIH0gYXMgYW55LFxyXG4gIH07XHJcblxyXG4gIHN0b3JlID0ge30gYXMgU3RvcmVQcm9wcztcclxuICB0aEljb25SZWYgPSBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XHJcbiAgdGFibGVTZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG5cclxuICBsaXN0ZW5lcnMgPSB7XHJcbiAgICBvbkJlZm9yZUxvYWQ6IG51bGwsXHJcbiAgICBsb2FkOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGNvbXBvbmVudHMgPSB7XHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgY2VsbDogUmVzaXplYWJsZVRpdGxlLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IG1vZGFsID0gcHJvcHMudHlwZSB8fCBcImF1dG9cIjtcclxuICAgIGxldCBzdG9yZVByZWZpeCA9IGdldFN0b3JhZ2UoXCJzdG9yZS1wcmUta2V5XCIpO1xyXG4gICAgbGV0IGF1dG9UeXBlID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwidGFibGVTaXplXCIgOiBcInRhYmxlU2l6ZVwiXHJcbiAgICApO1xyXG4gICAgYXV0b1R5cGUgPSBhdXRvVHlwZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGRhdGFTb3VyY2U6IFtdLFxyXG4gICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIHBhZ2luYXRpb246IHt9LFxyXG4gICAgICBhY3RpdmVJbmRleDogLTEsXHJcbiAgICAgIC8v5pCc57Si5paH5pysXHJcbiAgICAgIHNlYXJjaFRleHQ6IG51bGwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBudWxsLFxyXG4gICAgICBzZWFyY2hDb2xvcjogbnVsbCxcclxuICAgICAgY29sczogW10sXHJcbiAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgZmlsdGVyUGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfHwgYXV0b1R5cGUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHNvcnRUeXBlOiBcInNpbmdsZVwiLFxyXG4gICAgICBzb3J0ZXI6IFtdLCAvL+iusOW9leW9k+WJjeaOkuW6j+Wtl+autVxyXG4gICAgICBzb3J0SW5mbzoge30sXHJcbiAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICBjaGVja0NvbHVtbjogW10sXHJcbiAgICAgIGRlZmF1bHRDaGVjazogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIGZpbHRlcjogW10sXHJcbiAgICAgIGV4dHJhOiB7fSxcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlID0gcHJvcHMuc3RvcmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGxpc3RlbmVyczogbGlzdGVuZXJzUHJvcHMgPSB7fSwgLi4ucmVzdFN0b3JlIH0gPVxyXG4gICAgICAgIHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgICBjb25zdCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiAoc3RvcmUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uQmVmb3JlTG9hZCwgdGhpcywgW3N0b3JlLCBvcHRpb25zXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YUNoYW5nZWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYWdpbmcgPSAhKHRoaXMucHJvcHMucGFnaW5hdGlvbiA9PT0gZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocGFnaW5nICYmICF0aGlzLnByb3BzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHN0b3JlLmdldFBhZ2luYXRpb24oKSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBtb2RlbERhdGEsIGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmRhdGFDaGFuZ2VkLCB0aGlzLCBbXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgc3RvcmUsXHJcbiAgICAgICAgICAgICAgcGFnaW5nLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsb2FkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5sb2FkLCB0aGlzLCBbZGF0YSwgbW9kZWxEYXRhLCBzdG9yZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9uRXJyb3JMb2FkOiAoZXJyLCByZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uRXJyb3JMb2FkLCB0aGlzLCBbZXJyLCByZXNwb25zZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA/IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA6IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgID8gcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIC4uLnJlc3RTdG9yZSxcclxuICAgICAgICBhdXRvTG9hZDogcmVzdFN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBQYWdlU3RvcmUoXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RvcmVQcm9wcywge1xyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBjdXJyZW50OiAxLCAuLi50aGlzLnByb3BzLnBhZ2luYXRpb24gfSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzaXplID1cclxuICAgIChpbmRleDogYW55KSA9PlxyXG4gICAgKGU6IGFueSwgeyBzaXplIH06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGNvbnN0IG5leHRDb2x1bW5zID0gWy4uLmNvbHNdO1xyXG4gICAgICBuZXh0Q29sdW1uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgLi4ubmV4dENvbHVtbnNbaW5kZXhdLFxyXG4gICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldFN0YXRlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHM6IG5leHRDb2x1bW5zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgLy8g5Zyo54q25oCB5pu05paw5ZCO6YeN5paw6I635Y+W5YiX6YWN572uXHJcbiAgICAgICAgICB0aGlzLmdldENvbHVtbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gIGdldEluaXRDaGVja2VkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChjb2xzOiBhbnlbXSkgPT4ge1xyXG4gICAgICBjb2xzLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgIC8vIOWmguaenOWIl+ayoeacieaYjuehruiuvue9riBpbml0U2hvdyDkuLogZmFsc2XvvIzliJnorqTkuLrmmK/pu5jorqTpgInkuK3nmoRcclxuICAgICAgICBpZiAoY29sLmluaXRTaG93ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOmAkuW9kuWkhOeQhuWtkOWIl1xyXG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRyYXZlcnNlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdHJhdmVyc2UoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gY2hlY2tlZEtleXM7XHJcbiAgfVxyXG4gIGdlbmVyYXRlVW5pcXVlS2V5c0FuZFBhdGhzKFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBwYXJlbnRQYXRoOiBzdHJpbmcgPSBcIlwiLFxyXG4gICAgbGV2ZWw6IG51bWJlciA9IDBcclxuICApOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8g55Sf5oiQ5ZSv5LiAa2V5XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGNvbC51bmlxdWVLZXkgfHwgZ3VpZCgpO1xyXG5cclxuICAgICAgLy8g5p6E5bu65b2T5YmN6IqC54K555qEcGF0aO+8jOagvOW8j+S4ujogcGFyZW50UGF0aC9pZGVudGlmaWVyX2tleVxyXG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudFBhdGhcclxuICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7dW5pcXVlS2V5fWBcclxuICAgICAgICA6IGAke3VuaXF1ZUtleX1gO1xyXG5cclxuICAgICAgLy8g5Yib5bu65paw55qE5YiX5a+56LGhXHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgdW5pcXVlS2V5OiB1bmlxdWVLZXksXHJcbiAgICAgICAgcGF0aDogY3VycmVudFBhdGgsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyDliKTmlq3mmK/lkKbkuLrlj7blrZDoioLngrlcclxuICAgICAgaWYgKCFuZXdDb2wuY2hpbGRyZW4gfHwgbmV3Q29sLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vIOacgOWQjuS4gOWxguWtkOmhuVxyXG4gICAgICAgIG5ld0NvbC5sZWFmID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDmnInlrZDpobnnmoToioLngrlcclxuICAgICAgICBuZXdDb2wubGVhZiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyDpgJLlvZLlpITnkIblrZDpoblcclxuICAgICAgICBuZXdDb2wuY2hpbGRyZW4gPSB0aGlzLmdlbmVyYXRlVW5pcXVlS2V5c0FuZFBhdGhzKFxyXG4gICAgICAgICAgbmV3Q29sLmNoaWxkcmVuLFxyXG4gICAgICAgICAgY3VycmVudFBhdGgsXHJcbiAgICAgICAgICBsZXZlbCArIDFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDkuLrniLboioLngrnmt7vliqDmiYDmnInlrZDpobnnmoR1bmlxdWVLZXnmlbDnu4RcclxuICAgICAgICBuZXdDb2wuY2hpbGRyZW5LZXlzID0gbmV3Q29sLmNoaWxkcmVuLm1hcChcclxuICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC51bmlxdWVLZXlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV3Q29sO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyh0aGlzLnByb3BzLmNvbHVtbnMpO1xyXG4gICAgY29uc3QgZGVmYXVsdENoZWNrZWRDb2x1bW5zID0gdGhpcy5nZXRJbml0Q2hlY2tlZENvbHVtbnMobmV3Q29sdW1ucyk7XHJcbiAgICAvLyBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgLy8gICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBuZXdDb2x1bW5zLCAvL+S/ruaUueWIl+WuvVxyXG4gICAgICAgIGNvbHVtbnM6IG5ld0NvbHVtbnMsIC8vdGFibGXnu4Tku7bkvb/nlKhcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLCAvL+WOn+Wni+WIl++8jOeUqOS6juWIpOaWreaYr+acieWIl+acieabtOaWsFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsIC8v6buY6K6k6YCJ5Lit55qE5YiXXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucywgLy/mj5DkvpvluKbmoIfor4bnmoTlrozmlbTliJfnu5PmnoTvvIznlKjkuo7mnoTlu7rliJfpgInmi6nnlYzpnaJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnByb3BzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmRhdGEpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKHN0b3JlLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGxpc3Rlbk1lc3NhZ2UgPSAoZXYpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZXYuZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UoZXYuZGF0YSkgOiBldi5kYXRhO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGlmIChkYXRhLmV2ZW50VHlwZSA9PSBcImNoYW5nZVRhYmxlU2l6ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGF0YTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcImRlZmF1bHRcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcInNtYWxsXCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJtaWRkbGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRhYmxlU2l6ZTogcGF5bG9hZC5zaXplIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBjb2xzOiB0aGlzLnByb3BzLmNvbHVtbnMsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgc3RvcmUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlIHx8ICFzdG9yZSkge1xyXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB8fCB7fTtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhc2NQYXJhbXMgPSB0aGlzLmdldFNvcnRQYXJhbShzb3J0ZXIsIHRydWUpO1xyXG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIHNvcnRlci5jb2x1bW4gJiZcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtzb3J0ZXJdLCBkZWZhdWx0U29ydDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10gfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZmlsdGVycyxcclxuICAgICAgICBleHRyYSxcclxuICAgICAgfSk7XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSwgaXNDaGVja2VkLCBtYXBEYXRhKSB7XHJcbiAgICBjb25zdCBjb2wgPSBtYXBEYXRhW2NoZWNrZWRWYWx1ZV07XHJcbiAgICBsZXQgY3VycmVudENoZWNrZWRLZXlzID0gWy4uLnRoaXMuc3RhdGUuY2hlY2tDb2x1bW5dO1xyXG4gICAgLy8g6I635Y+W5omA5pyJ5a2Q6IqC54K555qEIGtleXPvvIjljIXmi6zmt7HlsYLltYzlpZfnmoToioLngrnvvIlcclxuICAgIGNvbnN0IGdldEFsbENoaWxkcmVuS2V5cyA9IChjb2x1bW4pID0+IHtcclxuICAgICAgbGV0IGtleXMgPSBbXTtcclxuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAga2V5cy5wdXNoKGNoaWxkLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0QWxsQ2hpbGRyZW5LZXlzKGNoaWxkKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgLy8g5aSE55CG54i26IqC54K5XHJcbiAgICAgIGNvbnN0IGFsbENoaWxkcmVuS2V5cyA9IGdldEFsbENoaWxkcmVuS2V5cyhjb2wpO1xyXG5cclxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIC8vIOmAieS4reeItuiKgueCue+8mua3u+WKoOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGlmICghY3VycmVudENoZWNrZWRLZXlzLmluY2x1ZGVzKGNvbC51bmlxdWVLZXkpKSB7XHJcbiAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsQ2hpbGRyZW5LZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWPlua2iOmAieS4reeItuiKgueCue+8muenu+mZpOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXkgJiYgIWFsbENoaWxkcmVuS2V5cy5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5aSE55CG5Y+25a2Q6IqC54K5XHJcbiAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDaGVja2VkS2V5cy5pbmNsdWRlcyhjb2wudW5pcXVlS2V5KSkge1xyXG4gICAgICAgICAgY3VycmVudENoZWNrZWRLZXlzLnB1c2goY29sLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbpnIDopoHlj5bmtojpgInkuK1cclxuICAgICAgICBpZiAoY29sLnBhdGgpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGNvbC5wYXRoLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIC8vIOS7juW9k+WJjeiKgueCueWQkeS4iumBjeWOhuaJgOacieeItuiKgueCuVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhQYXJ0cy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiL1wiKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29sOiBhbnkgPSBPYmplY3QudmFsdWVzKG1hcERhdGEpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXRoID09PSBwYXJlbnRQYXRoXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb2wpIHtcclxuICAgICAgICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbov5jmnInlhbbku5blrZDoioLngrnooqvpgInkuK1cclxuICAgICAgICAgICAgICBjb25zdCBhbGxTaWJsaW5ncyA9IGdldEFsbENoaWxkcmVuS2V5cyhwYXJlbnRDb2wpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGhhc0NoZWNrZWRTaWJsaW5nID0gYWxsU2libGluZ3Muc29tZShcclxuICAgICAgICAgICAgICAgIChrZXkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gY29sLnVuaXF1ZUtleSAmJiBjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghaGFzQ2hlY2tlZFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gcGFyZW50Q29sLnVuaXF1ZUtleVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudENoZWNrZWRLZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGtleUNvbHVtbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhcclxuICAgICAga2V5Q29sdW1ucyxcclxuICAgICAgY3VycmVudENoZWNrZWRLZXlzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOabtOaWsOeKtuaAgVxyXG4gICAgdGhpcy5zZXRTdGF0ZShcclxuICAgICAge1xyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjdXJyZW50Q2hlY2tlZEtleXMsXHJcbiAgICAgICAgY29sdW1uczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjb2xzOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICB9LFxyXG4gICAgICAvLyAoKSA9PiB7XHJcbiAgICAgIC8vICAgLy8g5re75Yqg5Zue6LCD56Gu5L+d5Zyo54q25oCB5pu05paw5ZCO6YeN5paw6K6+572u5YiX5a696LCD5pW055u45YWz5bGe5oCnXHJcbiAgICAgIC8vICAgaWYgKHRoaXMucHJvcHMucmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICApO1xyXG4gIH1cclxuICAgZmlsdGVyQ29sdW1uc0J5Q2hlY2tlZEtleXMoY29sdW1uczogYW55W10sIGNoZWNrZWRLZXlzOiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIGlmICghY29sdW1ucyB8fCAhQXJyYXkuaXNBcnJheShjb2x1bW5zKSB8fCBjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgIC8vIOajgOafpeW9k+WJjeWIl+aYr+WQpuWcqOmAieS4reWIl+ihqOS4rVxyXG4gICAgICBjb25zdCBpc0NvbHVtbkNoZWNrZWQgPSBjaGVja2VkS2V5cy5pbmNsdWRlcyhjb2wudW5pcXVlS2V5KTtcclxuICAgICAgaWYgKGlzQ29sdW1uQ2hlY2tlZCkge1xyXG4gICAgICAgIC8vIOWmguaenOW9k+WJjeWIl+iiq+mAieS4re+8jOebtOaOpea3u+WKoFxyXG4gICAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH07XHJcbiAgICAgICAgLy8g5aaC5p6c5pyJ5a2Q5YiX77yM6YCS5b2S5aSE55CGXHJcbiAgICAgICAgaWYgKG5ld0NvbC5jaGlsZHJlbiAmJiBuZXdDb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbmV3Q29sLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhcclxuICAgICAgICAgICAgbmV3Q29sLmNoaWxkcmVuLFxyXG4gICAgICAgICAgICBjaGVja2VkS2V5c1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2gobmV3Q29sKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDlpoLmnpzlvZPliY3liJfmnKrooqvpgInkuK3vvIzmo4Dmn6XmmK/lkKbmnInlrZDliJfooqvpgInkuK1cclxuICAgICAgICBpZiAoY29sLmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhcclxuICAgICAgICAgICAgY29sLmNoaWxkcmVuLFxyXG4gICAgICAgICAgICBjaGVja2VkS2V5c1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8g5aaC5p6c5pyJ5a2Q5YiX6KKr6YCJ5Lit77yM5YiZ5re75Yqg6K+l5YiX77yI5L2c5Li65a655Zmo77yJXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH07XHJcbiAgICAgICAgICAgIG5ld0NvbC5jaGlsZHJlbiA9IGZpbHRlcmVkQ2hpbGRyZW47XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld0NvbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRTb3J0UGFyYW0oc29ydGVyLCBzb3J0U3RhdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGNvbnN0IHsgc29ydFNlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXNvcnRTZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IHNvcnRJbmZvID0ge307XHJcbiAgICBsZXQgb3JkZXJJdGVtcyA9IFtdO1xyXG4gICAgaWYgKCFpc0VtcHR5T2JqKHNvcnRlcikgJiYgIWlzTXVsdGlwbGUgJiYgc29ydGVyLmNvbHVtbikge1xyXG4gICAgICBvcmRlckl0ZW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHVtbjogc29ydGVyLmNvbHVtbi5maWVsZCB8fCBzb3J0ZXIuY29sdW1uLmRhdGFJbmRleCxcclxuICAgICAgICAgIGFzYzogc29ydGVyLm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKHNvcnRlci5jb2x1bW4pIHNvcnRJbmZvW3NvcnRlci5jb2x1bW4uZGF0YUluZGV4XSA9IHNvcnRlci5vcmRlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICBzb3J0ZXIuZm9yRWFjaCgodikgPT4ge1xyXG4gICAgICAgIHNvcnRJbmZvW3YuY29sdW1uLmRhdGFJbmRleF0gPSB2Lm9yZGVyO1xyXG4gICAgICAgIGxldCBmaWVsZCA9IHYuY29sdW1uLmZpZWxkIHx8IHYuY29sdW1uLmRhdGFJbmRleDtcclxuICAgICAgICBvcmRlckl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgY29sdW1uOiBmaWVsZCxcclxuICAgICAgICAgIGFzYzogdi5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzb3J0U3RhdGUpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgc29ydEluZm86IHNvcnRJbmZvLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG9yZGVySXRlbXM6IEpTT04uc3RyaW5naWZ5KG9yZGVySXRlbXMpIH07XHJcbiAgfVxyXG4gIGlzQmV5b25kKGUpIHtcclxuICAgIGNvbnN0IGV2ID0gd2luZG93LmV2ZW50IHx8IGU7IC8vIOa1j+iniOWZqOWFvOWuue+8jOacgOWlveWGmeS4gOS4i1xyXG4gICAgY29uc3QgdGV4dFJhbmdlID0gKGVsKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gZWw7XHJcbiAgICAgIGNvbnN0IHRhcmdldFcgPSB0ZXh0Q29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Q29udGVudCwgMCk7XHJcbiAgICAgIHJhbmdlLnNldEVuZCh0ZXh0Q29udGVudCwgdGV4dENvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgICBjb25zdCByYW5nZVdpZHRoID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgIHJldHVybiByYW5nZVdpZHRoID4gdGFyZ2V0VztcclxuICAgIH07XHJcbiAgICByZXR1cm4gIXRleHRSYW5nZShldi50YXJnZXQpOyAvLyB0YXJnZXTlj6/ku6Xkv53or4HlvZPliY3liJLov4fnmoRkb23oioLngrnkuIDnm7Tkv53mjIHmmK86ZWwtdG9vbHRpcF9fdHJpZ2dlclxyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YTogQXJyYXk8U3RyaW5nIHwgTnVtYmVyPikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogZGF0YSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGE6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldENvbHVtbnMoKSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIHNvcnRUeXBlLCBzb3J0SW5mbyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc29ydEZpZWxkcyA9IFtdLCBzaXplID0gXCJsYXJnZVwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vIOabv+aNoiBnZXRDb2x1bW5zIOaWueazleS4reWOn+adpeeahCBlbGxpcHNpcyDlpITnkIbpg6jliIZcclxuICAgICAgaWYgKGNvbC5lbGxpcHNpcyAmJiAhY29sLnJlbmRlcikge1xyXG4gICAgICAgIGNvbC5lbGxpcHNpcyA9IHtcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2wucmVuZGVyID0gKHRleHQsIHJlY29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeWIl+eahOWunuaXtuWuveW6plxyXG4gICAgICAgICAgY29uc3QgY3VycmVudENvbCA9IHRoaXMuc3RhdGUuY29scz8uZmluZCgoYykgPT4ge1xyXG4gICAgICAgICAgICAvLyDlpITnkIYgZGF0YUluZGV4IOWPr+iDveaYr+Wtl+espuS4suaIluaVsOe7hOeahOaDheWGtVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLmRhdGFJbmRleCkgJiYgQXJyYXkuaXNBcnJheShjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShjLmRhdGFJbmRleCkgPT09IEpTT04uc3RyaW5naWZ5KGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYy5kYXRhSW5kZXggPT09IGNvbC5kYXRhSW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IGN1cnJlbnRDb2w/LndpZHRoIHx8IGNvbC53aWR0aDtcclxuICAgICAgICAgIGxldCBjb2xXaWR0aDogYW55ID0gXCIxMDAlXCI7XHJcblxyXG4gICAgICAgICAgaWYgKGFjdHVhbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnN0YXRlLnRhYmxlU2l6ZSB8fCB0aGlzLnByb3BzLnNpemUgfHwgXCJkZWZhdWx0XCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFdpZHRoT2JqID0ge1xyXG4gICAgICAgICAgICAgIHNtYWxsOiAxNixcclxuICAgICAgICAgICAgICBtaWRkbGU6IDE2LFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IDE2LFxyXG4gICAgICAgICAgICAgIGxhcmdlOiAzMixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZ1dpZHRoID0gY29sV2lkdGhPYmpbc2l6ZV0gfHwgMTY7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWN0dWFsV2lkdGggPiBwYWRkaW5nV2lkdGgpIHtcclxuICAgICAgICAgICAgICBjb2xXaWR0aCA9IGFjdHVhbFdpZHRoIC0gcGFkZGluZ1dpZHRoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbFdpZHRoID0gYWN0dWFsV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLXRhYmxlXCIsIHdpZHRoOiBcIjEwMCVcIiB9fT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICByZWY9eyhlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmuIXpmaTkuYvliY3nmoR0aXRsZVxyXG4gICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcInRpdGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmlofmnKzmmK/lkKbmuqLlh7pcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2Nyb2xsV2lkdGggPiBlbC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdGV4dFwiKX1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2xXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxyXG4gICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7dGV4dH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvcnRGaWVsZHMuaW5kZXhPZihjb2wuZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHNvcnRUeXBlID09IFwic2luZ2xlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc29ydFR5cGUgPT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0geyBtdWx0aXBsZTogaW5kZXggfTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gICAgY29scy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihpdGVtLmZpbHRlclByb3BzKSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzZWFyY2hLZXkgfSA9IGl0ZW0uZmlsdGVyUHJvcHM7XHJcbiAgICAgICAgbGV0IERpdiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRleHQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgIERpdiA9IGdldE5vZGUodHlwZSwge1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGDmkJzntKIke3RleHR9YCxcclxuICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgcmVmOiB0aGlzLnRhYmxlU2VhcmNoUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIGZpbHRlckRyb3Bkb3duOiAoe1xyXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgY29uZmlybSxcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXJzLFxyXG4gICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLXNwYWNlXCIpfT5cclxuICAgICAgICAgICAgICAgICAge0Rpdn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFNwYWNlPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0ZpbHRlclBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaXRlbS5maWVsZCB8fCBpdGVtLmRhdGFJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbHRlclBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlYXJjaFJlZi5jdXJyZW50Py5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydFBhcmFtID0gdGhpcy5nZXRTb3J0UGFyYW0odGhpcy5zdGF0ZS5zb3J0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcywgLi4uc29ydFBhcmFtIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLWJ1dHRvblwiKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeivolxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvU3BhY2U+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmlsdGVySWNvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPFNlYXJjaE91dGxpbmVkIC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iaixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHNbaW5kZXhdID0gb2JqO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuICByZW5kZXJUb29sQmFyKCkge1xyXG4gICAgbGV0IHsgdGFibGVTaXplLCBrZXlDb2x1bW5zLCBzb3J0VHlwZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IGZpbHRlckNvbHVtbiwgY29sdW1uczogY29sTGlzdHMsIHRvb2xiYXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCwgc3RvcmVSZXF1ZXN0Q29uZmlnID0ge30gfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgbGV0IHRvb2xzQ2xpY2sgPSB7fSBhcyBhbnk7XHJcbiAgICBpZiAodG9vbGJhciA9PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9vbHMgPSB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgPyB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgOiB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA/IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgIDogdG9vbHM7XHJcbiAgICAgIHRvb2xzQ2xpY2sgPSB0b29sYmFyLm9uVG9vbENsaWNrID8gdG9vbGJhci5vblRvb2xDbGljayA6IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2l6ZUl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5a695p2+XCIsIGtleTogXCJkZWZhdWx0XCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLkuK3nrYlcIiwga2V5OiBcIm1pZGRsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi57Sn5YeRXCIsIGtleTogXCJzbWFsbFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydEl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5Y2V5a2X5q615o6S5bqPXCIsIGtleTogXCJzaW5nbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuWkmuWtl+auteaOkuW6j1wiLCBrZXk6IFwibXVsdGlwbGVcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfT5cclxuICAgICAgICAgIOihqOagvOWvhuW6plxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gICAgY29uc3QgbmV3TWFwRGF0YSA9IGdldEZsYXR0ZW5EYXRhKGtleUNvbHVtbnMsIHtcclxuICAgICAga2V5RmllbGQ6IFwidW5pcXVlS2V5XCIsXHJcbiAgICAgIGNoaWxkRmllbGQ6IFwiY2hpbGRyZW5cIixcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29udGVudCA9IE9iamVjdC5rZXlzKG5ld01hcERhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPENoZWNrYm94XHJcbiAgICAgICAgICBrZXk9e2tleX1cclxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckNvbHVtbihrZXksIGUudGFyZ2V0LmNoZWNrZWQsIG5ld01hcERhdGEpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tDb2x1bW4uaW5jbHVkZXMobmV3TWFwRGF0YVtrZXldLnVuaXF1ZUtleSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge25ld01hcERhdGFba2V5XS50aXRsZX1cclxuICAgICAgICA8L0NoZWNrYm94PlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRvb2wtYmFyXCIpfT5cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcImNvbHVtblwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHRpdGxlPVwi6YCJ5oup5pi+56S655qE5YiXXCJcclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcclxuICAgICAgICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxyXG4gICAgICAgICAgICAgIG92ZXJsYXlTdHlsZT17eyBtaW5XaWR0aDogNDEwLCBtYXhXaWR0aDogNDUwIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8QXBwc3RvcmVPdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdGgtYXBwLXN0b3JlLWljb25cIil9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInNvcnRcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRlbnQ9e3NvcnRDb250ZW50fSB0cmlnZ2VyPVwiY2xpY2tcIj5cclxuICAgICAgICAgICAgICA8U29ydEFzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzaXplXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzaXplQ29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPENvbHVtbkhlaWdodE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJyZWZyZXNoXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0LCBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgaWYgKHRvb2xzQ2xpY2sub25SZWZyZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB0b29sc0NsaWNrLm9uUmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8UmVkb091dGxpbmVkIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cztcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93RGF0YXM7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0KHJlY29yZDogYW55LCBzZWxlY3RlZDogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5uZXdTZWxlY3RlZFJvd0tleXMsIHJlY29yZFtyb3dLZXldXTtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5uZXdTZWxlY3RlZFJvd0RhdGFzLCByZWNvcmRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW1bcm93S2V5XSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogbmV3U2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBuZXdTZWxlY3RlZFJvd0RhdGFzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsKHNlbGVjdGVkOiBhbnksIHNlbGVjdGVkUm93czogYW55LCBjaGFuZ2VSb3dzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd0RhdGFzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3aWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBuZXdkYXRhczogYW55ID0gW107XHJcbiAgICBpZiAoY2hhbmdlUm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjaGFuZ2VJZHMgPSBjaGFuZ2VSb3dzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3Jvd0tleV0pO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzLCAuLi5jaGFuZ2VJZHNdO1xyXG4gICAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXMsIC4uLmNoYW5nZVJvd3NdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2lkcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtW3Jvd0tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2RhdGFzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFsuLi5uZXdpZHNdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbLi4ubmV3ZGF0YXNdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXMsXHJcbiAgICAgIHtcclxuICAgICAgICBsb2FkaW5nLFxyXG4gICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgcGFnaW5hdGlvbiA9IHt9LFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3IsXHJcbiAgICAgICAgdGFibGVTaXplLFxyXG4gICAgICB9ID0gdGhpcy5zdGF0ZSxcclxuICAgICAgcHJvcHMgPSB1dGlscy5vbWl0KFxyXG4gICAgICAgIHRoaXMucHJvcHMsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgXCJzdG9yZVwiLFxyXG4gICAgICAgICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgICAgICAgXCJjb2x1bW5zXCIsXHJcbiAgICAgICAgICBcInJlc2V0Q29sdW1uXCIsXHJcbiAgICAgICAgICBcInRvb2xiYXJcIixcclxuICAgICAgICAgIFwic29ydEZpZWxkc1wiLFxyXG4gICAgICAgICAgXCJmaWx0ZXJDb2x1bW5cIixcclxuICAgICAgICAgIFwic29ydFNlYXJjaFwiLFxyXG4gICAgICAgICAgXCJzaG93Um93U2VsZWN0aW9uXCIsXHJcbiAgICAgICAgICBcInBhZ2VUeXBlXCIsXHJcbiAgICAgICAgXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dLZXk6IFwiaWRcIixcclxuICAgICAgICAgIGNsaWNrQ2hhbmdlQ29sb3I6IGZhbHNlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBwcm9wcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBbXCJib3R0b21SaWdodFwiXSxcclxuICAgICAgICBzaG93U2l6ZUNoYW5nZXI6IHRydWUsXHJcbiAgICAgICAgc2hvd1F1aWNrSnVtcGVyOiB0cnVlLFxyXG4gICAgICAgIC4uLnBhZ2luYXRpb24sXHJcbiAgICAgICAgLi4ucHJvcHMucGFnaW5hdGlvbixcclxuICAgICAgfTtcclxuICAgICAgaWYgKHByb3BzLnNob3dUb3RhbCA9PSB0cnVlKSB7XHJcbiAgICAgICAgcHJvcHMucGFnaW5hdGlvbi5zaG93VG90YWwgPSBmdW5jdGlvbiAodG90YWwsIFtmcm9tLCB0b10pIHtcclxuICAgICAgICAgIC8vIHJldHVybiBcIuaYvuekuiBcIiArIGZyb20gKyBcIiAtIFwiICsgdG8gKyBcIuadoe+8jOWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgICByZXR1cm4gXCLlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3BzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgICAgX3RoaXMub25DaGFuZ2UoX3RoaXMuc3RhdGUucGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLmNsaWNrQ2hhbmdlQ29sb3IpIHtcclxuICAgICAgY29uc3Qgb25Sb3dGbiA9IHByb3BzLm9uUm93O1xyXG4gICAgICBwcm9wcy5vblJvdyA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIGN1c3RvbSA9IG9uUm93Rm4gPyBvblJvd0ZuKHJlY29yZCwgaW5kZXgpIDoge307XHJcbiAgICAgICAgY29uc3Qgb25DbGlja0ZuID0gY3VzdG9tLm9uQ2xpY2s7XHJcbiAgICAgICAgY3VzdG9tLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlSW5kZXg6IGluZGV4LCAvL+iOt+WPlueCueWHu+ihjOeahOe0ouW8lVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB1dGlscy5jYWxsYmFjayhvbkNsaWNrRm4sIF90aGlzLCBbZXZlbnRdKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjdXN0b207XHJcbiAgICAgIH07XHJcbiAgICAgIHByb3BzLnJvd0NsYXNzTmFtZSA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSBfdGhpcy5zdGF0ZS5hY3RpdmVJbmRleFxyXG4gICAgICAgICAgPyBcIm5zYy10YWJsZS1jbGlja1Jvd1N0eWxlXCJcclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdEYXRhU291cmNlID0gW107XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdHJlZVV0aWxzLmdldFNlYXJjaE1lbnVEYXRhcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3JcclxuICAgICAgKTtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGEudHJlZURhdGFzO1xyXG4gICAgICBwcm9wcy5leHBhbmRlZFJvd0tleXMgPSBkYXRhLm9wZW5LZXlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcbiAgICBwcm9wcy5zdG9yZSA9IHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgcHJvcHMuc3RvcmUuYXV0b0xvYWQgPSBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBjb25zdCB7IGRyYWdhYmxlIH0gPSBfdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRyYWdhYmxlUHJvcHMgPVxyXG4gICAgICBkcmFnYWJsZSA9PT0gdHJ1ZVxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzOiBCb2R5Um93Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBvblJvdzogKHJlY29yZCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgIG1vdmVSb3c6IHRoaXMubW92ZVJvdyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7fTtcclxuICAgIGxldCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBjb25zdCByZXNpemVQcm9wcyA9XHJcbiAgICAgIHJlc2l6ZUNvbHVtbiA9PT0gdHJ1ZSA/IHsgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzIH0gOiBudWxsO1xyXG4gICAgY29uc3QgeyB0YWJsZVRvb2wgfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xGbGFnID0gZmFsc2U7XHJcbiAgICAvLyBjb25zb2xlLmxvZygndGFibGVUb29sJyx0YWJsZVRvb2wpXHJcblxyXG4gICAgaWYgKHRhYmxlVG9vbC5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLnRvb2xiYXIgJiYgdGhpcy5wcm9wcy50b29sYmFyLnNob3cgPT09IHRydWUpIHtcclxuICAgICAgdG9vbEZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCB7IHJvd1NlbGVjdGlvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBwcm9wcyA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgb25TZWxlY3RBbGw6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3RBbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGNvbHVtbldpZHRoOiA0MCxcclxuICAgICAgICAgIC4uLnJvd1NlbGVjdGlvbixcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzOiBjb25maWdUYWJsZVByb3BzIH0gPSBjb25maWcoKTtcclxuICAgIGNvbnN0IERlZmF1bHRUYWJsZSA9IChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZVwiKX0+XHJcbiAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJhcigpfVxyXG4gICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgICBzaGVpdGVtXHJcbiAgICAgICAgICBkYXRhU291cmNlPXtuZXdEYXRhU291cmNlfVxyXG4gICAgICAgICAgY29sdW1ucz17dGhpcy5nZXRDb2x1bW5zKCl9XHJcbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnRcIiksIHByb3BzLmNsYXNzTmFtZSl9XHJcbiAgICAgICAgICBsb2NhbGU9e3tcclxuICAgICAgICAgICAgZW1wdHlUZXh0OiAoXHJcbiAgICAgICAgICAgICAgPE5vRGF0YSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1ub2RhdGFcIil9IC8+XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgc2Nyb2xsPXt7IHg6IFwibWF4LWNvbnRlbnRcIiB9fVxyXG4gICAgICAgICAgey4uLmNvbmZpZ1RhYmxlUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucmVzaXplUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICB7Li4uZHJhZ2FibGVQcm9wc31cclxuICAgICAgICAgIHNpemU9e3RhYmxlU2l6ZX1cclxuICAgICAgICAgIHBhZ2luYXRpb249e2ZhbHNlfVxyXG4gICAgICAgICAgLy8gc3R5bGU9e3sgaGVpZ2h0OiA2MDAgfX1cclxuICAgICAgICAvPlxyXG4gICAgICAgIHtwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXBhZ2luYXRpb25cIil9PlxyXG4gICAgICAgICAgICA8UGFnaW5hdGlvblxyXG4gICAgICAgICAgICAgIHsuLi5wcm9wcy5wYWdpbmF0aW9ufVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGFnZSwgcGFnZVNpemUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gdGhpcy5zdGF0ZS5leHRyYTtcclxuICAgICAgICAgICAgICAgIGV4dHJhLmFjdGlvbiA9IFwicGFnaW5hdGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHsgcGFnaW5hdGlvbiA9IHt9IH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7IC4uLnBhZ2luYXRpb24sIGN1cnJlbnQ6IHBhZ2UsIHBhZ2VTaXplIH0sXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXHJcbiAgICAgICAgICAgICAgICAgIHsgY3VycmVudDogcGFnZSwgcGFnZVNpemUgfSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc29ydGVyLFxyXG4gICAgICAgICAgICAgICAgICBleHRyYVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkcmFnYWJsZSA9PT0gdHJ1ZSA/IChcclxuICAgICAgPERuZFByb3ZpZGVyIGJhY2tlbmQ9e0hUTUw1QmFja2VuZH0+e0RlZmF1bHRUYWJsZX08L0RuZFByb3ZpZGVyPlxyXG4gICAgKSA6IChcclxuICAgICAgRGVmYXVsdFRhYmxlXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFpoTG9jYWxlKE5TQ1RhYmxlKTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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
|
|
1218
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImd1aWQiLCJnZXRGbGF0dGVuRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJnZXRJbml0Q2hlY2tlZENvbHVtbnMiLCJjaGVja2VkS2V5cyIsInRyYXZlcnNlIiwiZm9yRWFjaCIsImNvbCIsImluaXRTaG93IiwicHVzaCIsInVuaXF1ZUtleSIsImNoaWxkcmVuIiwibGVuZ3RoIiwiZ2VuZXJhdGVVbmlxdWVLZXlzQW5kUGF0aHMiLCJwYXJlbnRQYXRoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibGV2ZWwiLCJtYXAiLCJjdXJyZW50UGF0aCIsImNvbmNhdCIsIm5ld0NvbCIsInBhdGgiLCJsZWFmIiwiY2hpbGRyZW5LZXlzIiwiY2hpbGQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsIm5ld0NvbHVtbnMiLCJkZWZhdWx0Q2hlY2tlZENvbHVtbnMiLCJzdG9yZUNvbHVtbnMiLCJrZXlDb2x1bW5zIiwic2V0RGF0YSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5NZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJlU3RhdGUiLCJyZXNldENvbHVtbiIsIm5ld0NvbHMiLCJjb2xzcyIsInRlbXAiLCJvbkhlYWRlckNlbGwiLCJjb2x1bW4iLCJoYW5kbGVSZXNpemUiLCJjbGVhclNlbGVjdENvbG9yIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJvbkNoYW5nZSIsImZpbHRlcnMiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwiaXNNdWx0aXBsZSIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZVBhZ2luYXRpb24iLCJwIiwiY3VycmVudEtleSIsInBhZ2VTaXplS2V5IiwicGFnZVNpemUiLCJhc2NQYXJhbXMiLCJnZXRTb3J0UGFyYW0iLCJvbkNoYW5nZUZuIiwiZ2V0U3RvcmUiLCJnZXRNb2RlbCIsImhhbmRsZVNlYXJjaCIsInZhbCIsImZpbHRlckNvbHVtbiIsImNoZWNrZWRWYWx1ZSIsImlzQ2hlY2tlZCIsIm1hcERhdGEiLCJjdXJyZW50Q2hlY2tlZEtleXMiLCJnZXRBbGxDaGlsZHJlbktleXMiLCJrZXlzIiwiYWxsQ2hpbGRyZW5LZXlzIiwiaW5jbHVkZXMiLCJrZXkiLCJwYXRoUGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImpvaW4iLCJwYXJlbnRDb2wiLCJ2YWx1ZXMiLCJmaW5kIiwiYyIsImFsbFNpYmxpbmdzIiwiaGFzQ2hlY2tlZFNpYmxpbmciLCJzb21lIiwiX21lc3NhZ2UiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsImZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzIiwicmVzdWx0IiwiaXNDb2x1bW5DaGVja2VkIiwiZmlsdGVyZWRDaGlsZHJlbiIsInNvcnRTdGF0ZSIsInNvcnRTZWFyY2giLCJvcmRlckl0ZW1zIiwiZmllbGQiLCJkYXRhSW5kZXgiLCJhc2MiLCJvcmRlciIsInYiLCJzdHJpbmdpZnkiLCJpc0JleW9uZCIsImV2ZW50IiwidGV4dFJhbmdlIiwiZWwiLCJ0ZXh0Q29udGVudCIsInRhcmdldFciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyYW5nZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsImNoaWxkTm9kZXMiLCJyYW5nZVdpZHRoIiwic2V0U2VsZWN0ZWRSb3dLZXlzIiwic2V0U2VsZWN0ZWRSb3dEYXRhcyIsInNvcnRGaWVsZHMiLCJkZWZhdWx0U2hvd0NvbHMiLCJlbGxpcHNpcyIsInJlbmRlciIsInNob3dUaXRsZSIsInRleHQiLCJfdGhpcyRzdGF0ZSRjb2xzIiwiY3VycmVudENvbCIsImFjdHVhbFdpZHRoIiwiY29sV2lkdGgiLCJjb2xXaWR0aE9iaiIsInNtYWxsIiwibWlkZGxlIiwiZGVmYXVsdCIsImxhcmdlIiwicGFkZGluZ1dpZHRoIiwic3R5bGUiLCJkaXNwbGF5IiwicmVmIiwicmVtb3ZlQXR0cmlidXRlIiwic2Nyb2xsV2lkdGgiLCJjbGllbnRXaWR0aCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIm92ZXJmbG93IiwidGV4dE92ZXJmbG93Iiwid2hpdGVTcGFjZSIsImluZGV4T2YiLCJzb3J0T3JkZXIiLCJtdWx0aXBsZSIsIml0ZW0iLCJmaWx0ZXJQcm9wcyIsIm9iaiIsInNlYXJjaEtleSIsIkRpdiIsInRpdGxlIiwicGxhY2Vob2xkZXIiLCJ0YWJsZVNlYXJjaFJlZiIsImZpbHRlckRyb3Bkb3duIiwiX3JlZjMiLCJzZXRTZWxlY3RlZEtleXMiLCJzZWxlY3RlZEtleXMiLCJjb25maXJtIiwiY2xlYXJGaWx0ZXJzIiwiX1NwYWNlIiwiX0J1dHRvbiIsIm9uQ2xpY2siLCJfdGhpcyR0YWJsZVNlYXJjaFJlZiQiLCJuZXdGaWx0ZXJQYXJhbXMiLCJnZXRWYWx1ZSIsInNvcnRQYXJhbSIsImZpbHRlckljb24iLCJyZW5kZXJUb29sQmFyIiwiY29sTGlzdHMiLCJ0b29sYmFyIiwidGFibGVUb29sIiwic3RvcmVSZXF1ZXN0Q29uZmlnIiwidG9vbHMiLCJ0b29sc0NsaWNrIiwib25Ub29sQ2xpY2siLCJzaXplSXRlbSIsInNvcnRJdGVtIiwic29ydENvbnRlbnQiLCJGcmFnbWVudCIsImN1cnNvciIsImNvbG9yIiwic2l6ZUNvbnRlbnQiLCJuZXdNYXBEYXRhIiwia2V5RmllbGQiLCJjaGlsZEZpZWxkIiwiX0NoZWNrYm94IiwiY2hlY2tlZCIsImZvbnRTaXplIiwiX1BvcG92ZXIiLCJwbGFjZW1lbnQiLCJ0cmlnZ2VyIiwib3ZlcmxheVN0eWxlIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsIm1hcmdpblJpZ2h0Iiwib25SZWZyZXNoIiwiZ2V0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwicm93U2VsZWN0aW9uT25TZWxlY3QiLCJzZWxlY3RlZCIsInJvd0tleSIsIm5ld1NlbGVjdGVkUm93S2V5cyIsIm5ld1NlbGVjdGVkUm93RGF0YXMiLCJzcGxpY2UiLCJyb3dTZWxlY3Rpb25PblNlbGVjdEFsbCIsInNlbGVjdGVkUm93cyIsImNoYW5nZVJvd3MiLCJuZXdpZHMiLCJuZXdkYXRhcyIsImNoYW5nZUlkcyIsIm9taXQiLCJjbGlja0NoYW5nZUNvbG9yIiwicG9zaXRpb24iLCJzaG93U2l6ZUNoYW5nZXIiLCJzaG93UXVpY2tKdW1wZXIiLCJzaG93VG90YWwiLCJ0b3RhbCIsIl9yZWY0IiwiZnJvbSIsInRvIiwib25Sb3dGbiIsIm9uUm93IiwiY3VzdG9tIiwib25DbGlja0ZuIiwicm93Q2xhc3NOYW1lIiwibmV3RGF0YVNvdXJjZSIsImdldFNlYXJjaE1lbnVEYXRhcyIsInRyZWVEYXRhcyIsImV4cGFuZGVkUm93S2V5cyIsIm9wZW5LZXlzIiwiZHJhZ2FibGUiLCJkcmFnYWJsZVByb3BzIiwiY29tcG9uZW50cyIsInJlc2l6ZVByb3BzIiwidG9vbEZsYWciLCJzaG93Iiwic2hvd1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbiIsIm9uU2VsZWN0IiwiYmluZCIsIm9uU2VsZWN0QWxsIiwiY29sdW1uV2lkdGgiLCJ0YWJsZVByb3BzIiwiY29uZmlnVGFibGVQcm9wcyIsIkRlZmF1bHRUYWJsZSIsIl9UYWJsZSIsIl9leHRlbmRzIiwiY2hpbGRyZW5Db2x1bW5OYW1lIiwic2hlaXRlbSIsImxvY2FsZSIsImVtcHR5VGV4dCIsInNjcm9sbCIsIngiLCJfUGFnaW5hdGlvbiIsInBhZ2UiLCJhY3Rpb24iLCJfcmVmNSIsImJhY2tlbmQiLCJkcmFnVXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYmFzZS90YWJsZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQERlc2NyaXB0dGlvbjpcclxuICogQHZlcnNpb246XHJcbiAqIEBBdXRob3I6IHJ4emh1XHJcbiAqIEBEYXRlOiAyMDIxLTAzLTIzIDA4OjQ2OjIwXHJcbiAqIEBMYXN0RWRpdG9yczogcnh6aHVcclxuICogQExhc3RFZGl0VGltZTogMjAyMS0wMy0yMyAxMDozMDo0MlxyXG4gKi9cclxuaW1wb3J0IHtcclxuICBBcHBzdG9yZU91dGxpbmVkLFxyXG4gIENoZWNrT3V0bGluZWQsXHJcbiAgQ29sdW1uSGVpZ2h0T3V0bGluZWQsXHJcbiAgU2VhcmNoT3V0bGluZWQsXHJcbiAgU29ydEFzY2VuZGluZ091dGxpbmVkLFxyXG4gIFNvcnREZXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgUmVkb091dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBpc0VtcHR5T2JqIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIENoZWNrYm94LFxyXG4gIENoZWNrYm94T3B0aW9uVHlwZSxcclxuICBNZW51LFxyXG4gIG1lc3NhZ2UsXHJcbiAgUGFnaW5hdGlvbixcclxuICBQb3BvdmVyLFxyXG4gIFNwYWNlLFxyXG4gIFRhYmxlLFxyXG4gIFRhYmxlUHJvcHMsXHJcbiAgVG9vbHRpcCxcclxufSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBUYWJsZVBhZ2luYXRpb25Db25maWcgfSBmcm9tIFwiYW50ZC9saWIvdGFibGVcIjtcclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IERuZFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LWRuZFwiO1xyXG5pbXBvcnQgQm9keVJvdywgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9IGZyb20gXCIuLi9jb21tb24vQm9keVJvd1wiO1xyXG5pbXBvcnQgdHJlZVV0aWxzIGZyb20gXCIuLi8uLi90cmVlVXRpbHNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5jb25zdCB7IEJvZHlSb3dDb21wb25lbnQsIEhUTUw1QmFja2VuZCB9ID0gQm9keVJvdztcclxuaW1wb3J0IHdpdGhaaExvY2FsZSBmcm9tIFwiLi4vY29tbW9uL3dpdGhaaExvY2FsZVwiO1xyXG5pbXBvcnQgeyBSZXNpemFibGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlXCI7XHJcbmltcG9ydCBcIi4vcmVzaXplLm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgTm9EYXRhIGZyb20gXCIuLi9jb21tb24vTm9EYXRhXCI7XHJcbmltcG9ydCB7IGd1aWQsIGdldEZsYXR0ZW5EYXRhLCBnZXRTdG9yYWdlIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgRWxsaXBzZUNlbGwgZnJvbSBcIi4uL2NvbW1vbi9FbGxpcHNlQ2VsbFwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBpc0VxdWFsIGZyb20gXCJsb2Rhc2gvaXNFcXVhbFwiO1xyXG5jb25zdCBzdHlsZXMgPSBudWxsO1xyXG5pbnRlcmZhY2UgSURyYWdQYXJhbXMge1xyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgaWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xyXG4gIHBhcmVudElkOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuLy8gaW50ZXJmYWNlIFN0b3JlUHJvcHMge31cclxuXHJcbmV4cG9ydCB0eXBlIFN0b3JlVHlwZSA9IFwiUGFnZVN0b3JlXCIgfCBcIlRyZWVTdG9yZVwiIHwgXCJCYXNlU3RvcmVcIjtcclxuXHJcbmludGVyZmFjZSBOU0NUYWJsZVBhZ2luYXRpb24gZXh0ZW5kcyBUYWJsZVBhZ2luYXRpb25Db25maWcge1xyXG4gIHRvdGFsS2V5Pzogc3RyaW5nO1xyXG4gIHBhZ2VTaXplS2V5Pzogc3RyaW5nO1xyXG4gIGN1cnJlbnRLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBUb29sQmFyUHJvcHMge1xyXG4gIHNob3c6IGJvb2xlYW47XHJcbiAgdG9vbHM/OiBBcnJheTxzdHJpbmc+O1xyXG4gIG9uVG9vbENsaWNrPzogeyBvblJlZnJlc2g/OiBhbnk7IG9uU29ydD86IGFueSB9O1xyXG59XHJcbmludGVyZmFjZSBOU0NUYWJsZVByb3BzIGV4dGVuZHMgVGFibGVQcm9wczxhbnk+IHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjsgLy8g5piv5ZCm5pi+56S65oC75p2h5pWw5L+h5oGv77yM6buY6K6kdHJ1ZVxyXG4gIGRyYWdhYmxlPzogYm9vbGVhbjsgLy8g5piv5ZCm5Y+v5ouW5YqoLCDpu5jorqRmYWxzZVxyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8vIOaYr+WQpuaUr+aMgei/h+a7pOaYvuekuuihqOagvOWIlywg6buY6K6kdHJ1ZVxyXG4gIG1vdmVSb3c/OiAocGFyYW1zOiBJRHJhZ1BhcmFtcykgPT4gdm9pZDsgLy8g5ouW5ou95a6M5oiQ5ZCO55qE5Zue6LCDXHJcbiAgZHJhZ1VybD86IHN0cmluZzsgLy8g5L+d5a2Y5ouW5ou95o6S5bqP55qE5o6l5Y+jXHJcbiAgcGFnaW5hdGlvbj86IGZhbHNlIHwgTlNDVGFibGVQYWdpbmF0aW9uO1xyXG4gIGF1dG9QYWdpbmF0aW9uPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5YiG6aG1XHJcbiAgYXV0b1NvcnQ/OiBib29sZWFuOyAvL+e7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuaOkuW6j1xyXG4gIGF1dG9PbkNoYW5nZT86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqG9uQ2hhbmdlLCBmYWxzZeWImeS4jeWBmuS7u+S9leWkhOeQhuWFqOmDqOS6pOe7meiwg+eUqOaWuVxyXG4gIHJlc2l6ZUNvbHVtbj86IGJvb2xlYW47XHJcbiAgc29ydEZpZWxkcz86IEFycmF5PHN0cmluZz47IC8v6ZyA6KaB5o6S5bqP55qE5a2X5q61SW5kZXhcclxuICB0b29sYmFyPzogVG9vbEJhclByb3BzIHwgYm9vbGVhbjtcclxuICBhdXRvU2l6ZT86IGJvb2xlYW47XHJcbiAgc29ydFNlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5re75Yqg5o6S5bqP5p+l6K+iLOm7mOiupHRydWVcclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjtcclxuICByb3dLZXk/OiBzdHJpbmc7XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcywgYW55PiB7XHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGRyYWdhYmxlOiBmYWxzZSxcclxuICAgIHNob3dUb3RhbDogdHJ1ZSxcclxuICAgIGZpbHRlckNvbHVtbjogdHJ1ZSxcclxuICAgIGRyYWdVcmw6IFwiXCIsXHJcbiAgICBhdXRvUGFnaW5hdGlvbjogdHJ1ZSxcclxuICAgIGF1dG9Tb3J0OiB0cnVlLFxyXG4gICAgYXV0b09uQ2hhbmdlOiB0cnVlLFxyXG4gICAgcmVzaXplQ29sdW1uOiB0cnVlLFxyXG4gICAgdG9vbGJhcjoge1xyXG4gICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgb25Ub29sQ2xpY2s6IHt9IGFzIGFueSxcclxuICAgICAgdG9vbHM6IFtdIGFzIGFueSxcclxuICAgIH0gYXMgYW55LFxyXG4gIH07XHJcblxyXG4gIHN0b3JlID0ge30gYXMgU3RvcmVQcm9wcztcclxuICB0aEljb25SZWYgPSBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XHJcbiAgdGFibGVTZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG5cclxuICBsaXN0ZW5lcnMgPSB7XHJcbiAgICBvbkJlZm9yZUxvYWQ6IG51bGwsXHJcbiAgICBsb2FkOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGNvbXBvbmVudHMgPSB7XHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgY2VsbDogUmVzaXplYWJsZVRpdGxlLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IG1vZGFsID0gcHJvcHMudHlwZSB8fCBcImF1dG9cIjtcclxuICAgIGxldCBzdG9yZVByZWZpeCA9IGdldFN0b3JhZ2UoXCJzdG9yZS1wcmUta2V5XCIpO1xyXG4gICAgbGV0IGF1dG9UeXBlID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwidGFibGVTaXplXCIgOiBcInRhYmxlU2l6ZVwiXHJcbiAgICApO1xyXG4gICAgYXV0b1R5cGUgPSBhdXRvVHlwZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGRhdGFTb3VyY2U6IFtdLFxyXG4gICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIHBhZ2luYXRpb246IHt9LFxyXG4gICAgICBhY3RpdmVJbmRleDogLTEsXHJcbiAgICAgIC8v5pCc57Si5paH5pysXHJcbiAgICAgIHNlYXJjaFRleHQ6IG51bGwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBudWxsLFxyXG4gICAgICBzZWFyY2hDb2xvcjogbnVsbCxcclxuICAgICAgY29sczogW10sXHJcbiAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgZmlsdGVyUGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfHwgYXV0b1R5cGUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHNvcnRUeXBlOiBcInNpbmdsZVwiLFxyXG4gICAgICBzb3J0ZXI6IFtdLCAvL+iusOW9leW9k+WJjeaOkuW6j+Wtl+autVxyXG4gICAgICBzb3J0SW5mbzoge30sXHJcbiAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICBjaGVja0NvbHVtbjogW10sXHJcbiAgICAgIGRlZmF1bHRDaGVjazogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIGZpbHRlcjogW10sXHJcbiAgICAgIGV4dHJhOiB7fSxcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlID0gcHJvcHMuc3RvcmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGxpc3RlbmVyczogbGlzdGVuZXJzUHJvcHMgPSB7fSwgLi4ucmVzdFN0b3JlIH0gPVxyXG4gICAgICAgIHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgICBjb25zdCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiAoc3RvcmUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uQmVmb3JlTG9hZCwgdGhpcywgW3N0b3JlLCBvcHRpb25zXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YUNoYW5nZWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYWdpbmcgPSAhKHRoaXMucHJvcHMucGFnaW5hdGlvbiA9PT0gZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocGFnaW5nICYmICF0aGlzLnByb3BzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHN0b3JlLmdldFBhZ2luYXRpb24oKSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBtb2RlbERhdGEsIGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmRhdGFDaGFuZ2VkLCB0aGlzLCBbXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgc3RvcmUsXHJcbiAgICAgICAgICAgICAgcGFnaW5nLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsb2FkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5sb2FkLCB0aGlzLCBbZGF0YSwgbW9kZWxEYXRhLCBzdG9yZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9uRXJyb3JMb2FkOiAoZXJyLCByZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uRXJyb3JMb2FkLCB0aGlzLCBbZXJyLCByZXNwb25zZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA/IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA6IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgID8gcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIC4uLnJlc3RTdG9yZSxcclxuICAgICAgICBhdXRvTG9hZDogcmVzdFN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBQYWdlU3RvcmUoXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RvcmVQcm9wcywge1xyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBjdXJyZW50OiAxLCAuLi50aGlzLnByb3BzLnBhZ2luYXRpb24gfSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzaXplID1cclxuICAgIChpbmRleDogYW55KSA9PlxyXG4gICAgKGU6IGFueSwgeyBzaXplIH06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGNvbnN0IG5leHRDb2x1bW5zID0gWy4uLmNvbHNdO1xyXG4gICAgICBuZXh0Q29sdW1uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgLi4ubmV4dENvbHVtbnNbaW5kZXhdLFxyXG4gICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldFN0YXRlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHM6IG5leHRDb2x1bW5zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgLy8g5Zyo54q25oCB5pu05paw5ZCO6YeN5paw6I635Y+W5YiX6YWN572uXHJcbiAgICAgICAgICB0aGlzLmdldENvbHVtbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gIGdldEluaXRDaGVja2VkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChjb2xzOiBhbnlbXSkgPT4ge1xyXG4gICAgICBjb2xzLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgIC8vIOWmguaenOWIl+ayoeacieaYjuehruiuvue9riBpbml0U2hvdyDkuLogZmFsc2XvvIzliJnorqTkuLrmmK/pu5jorqTpgInkuK3nmoRcclxuICAgICAgICBpZiAoY29sLmluaXRTaG93ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOmAkuW9kuWkhOeQhuWtkOWIl1xyXG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRyYXZlcnNlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdHJhdmVyc2UoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gY2hlY2tlZEtleXM7XHJcbiAgfVxyXG4gIGdlbmVyYXRlVW5pcXVlS2V5c0FuZFBhdGhzKFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBwYXJlbnRQYXRoOiBzdHJpbmcgPSBcIlwiLFxyXG4gICAgbGV2ZWw6IG51bWJlciA9IDBcclxuICApOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgLy8g55Sf5oiQ5ZSv5LiAa2V5XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGNvbC51bmlxdWVLZXkgfHwgZ3VpZCgpO1xyXG5cclxuICAgICAgLy8g5p6E5bu65b2T5YmN6IqC54K555qEcGF0aO+8jOagvOW8j+S4ujogcGFyZW50UGF0aC9pZGVudGlmaWVyX2tleVxyXG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudFBhdGhcclxuICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7dW5pcXVlS2V5fWBcclxuICAgICAgICA6IGAke3VuaXF1ZUtleX1gO1xyXG5cclxuICAgICAgLy8g5Yib5bu65paw55qE5YiX5a+56LGhXHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgdW5pcXVlS2V5OiB1bmlxdWVLZXksXHJcbiAgICAgICAgcGF0aDogY3VycmVudFBhdGgsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyDliKTmlq3mmK/lkKbkuLrlj7blrZDoioLngrlcclxuICAgICAgaWYgKCFuZXdDb2wuY2hpbGRyZW4gfHwgbmV3Q29sLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vIOacgOWQjuS4gOWxguWtkOmhuVxyXG4gICAgICAgIG5ld0NvbC5sZWFmID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDmnInlrZDpobnnmoToioLngrlcclxuICAgICAgICBuZXdDb2wubGVhZiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyDpgJLlvZLlpITnkIblrZDpoblcclxuICAgICAgICBuZXdDb2wuY2hpbGRyZW4gPSB0aGlzLmdlbmVyYXRlVW5pcXVlS2V5c0FuZFBhdGhzKFxyXG4gICAgICAgICAgbmV3Q29sLmNoaWxkcmVuLFxyXG4gICAgICAgICAgY3VycmVudFBhdGgsXHJcbiAgICAgICAgICBsZXZlbCArIDFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDkuLrniLboioLngrnmt7vliqDmiYDmnInlrZDpobnnmoR1bmlxdWVLZXnmlbDnu4RcclxuICAgICAgICBuZXdDb2wuY2hpbGRyZW5LZXlzID0gbmV3Q29sLmNoaWxkcmVuLm1hcChcclxuICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC51bmlxdWVLZXlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV3Q29sO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyh0aGlzLnByb3BzLmNvbHVtbnMpO1xyXG4gICAgY29uc3QgZGVmYXVsdENoZWNrZWRDb2x1bW5zID0gdGhpcy5nZXRJbml0Q2hlY2tlZENvbHVtbnMobmV3Q29sdW1ucyk7XHJcbiAgICAvLyBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgLy8gICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBuZXdDb2x1bW5zLCAvL+S/ruaUueWIl+WuvVxyXG4gICAgICAgIGNvbHVtbnM6IG5ld0NvbHVtbnMsIC8vdGFibGXnu4Tku7bkvb/nlKhcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLCAvL+WOn+Wni+WIl++8jOeUqOS6juWIpOaWreaYr+acieWIl+acieabtOaWsFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsIC8v6buY6K6k6YCJ5Lit55qE5YiXXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucywgLy/mj5DkvpvluKbmoIfor4bnmoTlrozmlbTliJfnu5PmnoTvvIznlKjkuo7mnoTlu7rliJfpgInmi6nnlYzpnaJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnByb3BzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmRhdGEpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKHN0b3JlLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGxpc3Rlbk1lc3NhZ2UgPSAoZXYpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZXYuZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UoZXYuZGF0YSkgOiBldi5kYXRhO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGlmIChkYXRhLmV2ZW50VHlwZSA9PSBcImNoYW5nZVRhYmxlU2l6ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGF0YTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcImRlZmF1bHRcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcInNtYWxsXCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJtaWRkbGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRhYmxlU2l6ZTogcGF5bG9hZC5zaXplIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVVbmlxdWVLZXlzQW5kUGF0aHModGhpcy5wcm9wcy5jb2x1bW5zKTtcclxuICAgIGNvbnN0IGRlZmF1bHRDaGVja2VkQ29sdW1ucyA9IHRoaXMuZ2V0SW5pdENoZWNrZWRDb2x1bW5zKG5ld0NvbHVtbnMpO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGNvbHVtbnM6IG5ld0NvbHVtbnMsXHJcbiAgICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLFxyXG4gICAgICAgICAgY2hlY2tDb2x1bW46IGRlZmF1bHRDaGVja2VkQ29sdW1ucyxcclxuICAgICAgICAgIGtleUNvbHVtbnM6IG5ld0NvbHVtbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmVTdGF0ZS5jb2xzICE9PSB0aGlzLnN0YXRlLmNvbHMpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGNvbHM6IG5ld0NvbHVtbnMsIC8v5L+u5pS55YiX5a69XHJcbiAgICAgICAgICBjb2x1bW5zOiBuZXdDb2x1bW5zLCAvL3RhYmxl57uE5Lu25L2/55SoXHJcbiAgICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLCAvL+WOn+Wni+WIl++8jOeUqOS6juWIpOaWreaYr+acieWIl+acieabtOaWsFxyXG4gICAgICAgICAgY2hlY2tDb2x1bW46IGRlZmF1bHRDaGVja2VkQ29sdW1ucywgLy/pu5jorqTpgInkuK3nmoTliJdcclxuICAgICAgICAgIGtleUNvbHVtbnM6IG5ld0NvbHVtbnMsIC8v5o+Q5L6b5bim5qCH6K+G55qE5a6M5pW05YiX57uT5p6E77yM55So5LqO5p6E5bu65YiX6YCJ5oup55WM6Z2iXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgc3RvcmUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlIHx8ICFzdG9yZSkge1xyXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB8fCB7fTtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhc2NQYXJhbXMgPSB0aGlzLmdldFNvcnRQYXJhbShzb3J0ZXIsIHRydWUpO1xyXG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIHNvcnRlci5jb2x1bW4gJiZcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtzb3J0ZXJdLCBkZWZhdWx0U29ydDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10gfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZmlsdGVycyxcclxuICAgICAgICBleHRyYSxcclxuICAgICAgfSk7XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSwgaXNDaGVja2VkLCBtYXBEYXRhKSB7XHJcbiAgICBjb25zdCBjb2wgPSBtYXBEYXRhW2NoZWNrZWRWYWx1ZV07XHJcbiAgICBsZXQgY3VycmVudENoZWNrZWRLZXlzID0gWy4uLnRoaXMuc3RhdGUuY2hlY2tDb2x1bW5dO1xyXG4gICAgLy8g6I635Y+W5omA5pyJ5a2Q6IqC54K555qEIGtleXPvvIjljIXmi6zmt7HlsYLltYzlpZfnmoToioLngrnvvIlcclxuICAgIGNvbnN0IGdldEFsbENoaWxkcmVuS2V5cyA9IChjb2x1bW4pID0+IHtcclxuICAgICAgbGV0IGtleXMgPSBbXTtcclxuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAga2V5cy5wdXNoKGNoaWxkLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0QWxsQ2hpbGRyZW5LZXlzKGNoaWxkKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgLy8g5aSE55CG54i26IqC54K5XHJcbiAgICAgIGNvbnN0IGFsbENoaWxkcmVuS2V5cyA9IGdldEFsbENoaWxkcmVuS2V5cyhjb2wpO1xyXG5cclxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIC8vIOmAieS4reeItuiKgueCue+8mua3u+WKoOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGlmICghY3VycmVudENoZWNrZWRLZXlzLmluY2x1ZGVzKGNvbC51bmlxdWVLZXkpKSB7XHJcbiAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsQ2hpbGRyZW5LZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWPlua2iOmAieS4reeItuiKgueCue+8muenu+mZpOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXkgJiYgIWFsbENoaWxkcmVuS2V5cy5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5aSE55CG5Y+25a2Q6IqC54K5XHJcbiAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDaGVja2VkS2V5cy5pbmNsdWRlcyhjb2wudW5pcXVlS2V5KSkge1xyXG4gICAgICAgICAgY3VycmVudENoZWNrZWRLZXlzLnB1c2goY29sLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbpnIDopoHlj5bmtojpgInkuK1cclxuICAgICAgICBpZiAoY29sLnBhdGgpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGNvbC5wYXRoLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIC8vIOS7juW9k+WJjeiKgueCueWQkeS4iumBjeWOhuaJgOacieeItuiKgueCuVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhQYXJ0cy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiL1wiKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29sOiBhbnkgPSBPYmplY3QudmFsdWVzKG1hcERhdGEpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXRoID09PSBwYXJlbnRQYXRoXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb2wpIHtcclxuICAgICAgICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbov5jmnInlhbbku5blrZDoioLngrnooqvpgInkuK1cclxuICAgICAgICAgICAgICBjb25zdCBhbGxTaWJsaW5ncyA9IGdldEFsbENoaWxkcmVuS2V5cyhwYXJlbnRDb2wpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGhhc0NoZWNrZWRTaWJsaW5nID0gYWxsU2libGluZ3Muc29tZShcclxuICAgICAgICAgICAgICAgIChrZXkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gY29sLnVuaXF1ZUtleSAmJiBjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghaGFzQ2hlY2tlZFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gcGFyZW50Q29sLnVuaXF1ZUtleVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudENoZWNrZWRLZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGtleUNvbHVtbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhcclxuICAgICAga2V5Q29sdW1ucyxcclxuICAgICAgY3VycmVudENoZWNrZWRLZXlzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOabtOaWsOeKtuaAgVxyXG4gICAgdGhpcy5zZXRTdGF0ZShcclxuICAgICAge1xyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjdXJyZW50Q2hlY2tlZEtleXMsXHJcbiAgICAgICAgY29sdW1uczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjb2xzOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICB9XHJcbiAgICAgIC8vICgpID0+IHtcclxuICAgICAgLy8gICAvLyDmt7vliqDlm57osIPnoa7kv53lnKjnirbmgIHmm7TmlrDlkI7ph43mlrDorr7nva7liJflrr3osIPmlbTnm7jlhbPlsZ7mgKdcclxuICAgICAgLy8gICBpZiAodGhpcy5wcm9wcy5yZXNpemVDb2x1bW4pIHtcclxuICAgICAgLy8gICAgIHRoaXMucmVzZXRDb2x1bW4oKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzKGNvbHVtbnM6IGFueVtdLCBjaGVja2VkS2V5czogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgICBpZiAoIWNvbHVtbnMgfHwgIUFycmF5LmlzQXJyYXkoY29sdW1ucykgfHwgY29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAvLyDmo4Dmn6XlvZPliY3liJfmmK/lkKblnKjpgInkuK3liJfooajkuK1cclxuICAgICAgY29uc3QgaXNDb2x1bW5DaGVja2VkID0gY2hlY2tlZEtleXMuaW5jbHVkZXMoY29sLnVuaXF1ZUtleSk7XHJcbiAgICAgIGlmIChpc0NvbHVtbkNoZWNrZWQpIHtcclxuICAgICAgICAvLyDlpoLmnpzlvZPliY3liJfooqvpgInkuK3vvIznm7TmjqXmt7vliqBcclxuICAgICAgICBjb25zdCBuZXdDb2wgPSB7IC4uLmNvbCB9O1xyXG4gICAgICAgIC8vIOWmguaenOacieWtkOWIl++8jOmAkuW9kuWkhOeQhlxyXG4gICAgICAgIGlmIChuZXdDb2wuY2hpbGRyZW4gJiYgbmV3Q29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG5ld0NvbC5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyQ29sdW1uc0J5Q2hlY2tlZEtleXMoXHJcbiAgICAgICAgICAgIG5ld0NvbC5jaGlsZHJlbixcclxuICAgICAgICAgICAgY2hlY2tlZEtleXNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKG5ld0NvbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5b2T5YmN5YiX5pyq6KKr6YCJ5Lit77yM5qOA5p+l5piv5ZCm5pyJ5a2Q5YiX6KKr6YCJ5LitXHJcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IHRoaXMuZmlsdGVyQ29sdW1uc0J5Q2hlY2tlZEtleXMoXHJcbiAgICAgICAgICAgIGNvbC5jaGlsZHJlbixcclxuICAgICAgICAgICAgY2hlY2tlZEtleXNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIOWmguaenOacieWtkOWIl+iiq+mAieS4re+8jOWImea3u+WKoOivpeWIl++8iOS9nOS4uuWuueWZqO+8iVxyXG4gICAgICAgICAgICBjb25zdCBuZXdDb2wgPSB7IC4uLmNvbCB9O1xyXG4gICAgICAgICAgICBuZXdDb2wuY2hpbGRyZW4gPSBmaWx0ZXJlZENoaWxkcmVuO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXdDb2wpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0U29ydFBhcmFtKHNvcnRlciwgc29ydFN0YXRlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KHNvcnRlcik7XHJcbiAgICBjb25zdCB7IHNvcnRTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFzb3J0U2VhcmNoKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBzb3J0SW5mbyA9IHt9O1xyXG4gICAgbGV0IG9yZGVySXRlbXMgPSBbXTtcclxuICAgIGlmICghaXNFbXB0eU9iaihzb3J0ZXIpICYmICFpc011bHRpcGxlICYmIHNvcnRlci5jb2x1bW4pIHtcclxuICAgICAgb3JkZXJJdGVtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2x1bW46IHNvcnRlci5jb2x1bW4uZmllbGQgfHwgc29ydGVyLmNvbHVtbi5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBhc2M6IHNvcnRlci5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmIChzb3J0ZXIuY29sdW1uKSBzb3J0SW5mb1tzb3J0ZXIuY29sdW1uLmRhdGFJbmRleF0gPSBzb3J0ZXIub3JkZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgc29ydGVyLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICBzb3J0SW5mb1t2LmNvbHVtbi5kYXRhSW5kZXhdID0gdi5vcmRlcjtcclxuICAgICAgICBsZXQgZmllbGQgPSB2LmNvbHVtbi5maWVsZCB8fCB2LmNvbHVtbi5kYXRhSW5kZXg7XHJcbiAgICAgICAgb3JkZXJJdGVtcy5wdXNoKHtcclxuICAgICAgICAgIGNvbHVtbjogZmllbGQsXHJcbiAgICAgICAgICBhc2M6IHYub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc29ydFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHNvcnRJbmZvOiBzb3J0SW5mbyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBvcmRlckl0ZW1zOiBKU09OLnN0cmluZ2lmeShvcmRlckl0ZW1zKSB9O1xyXG4gIH1cclxuICBpc0JleW9uZChlKSB7XHJcbiAgICBjb25zdCBldiA9IHdpbmRvdy5ldmVudCB8fCBlOyAvLyDmtY/op4jlmajlhbzlrrnvvIzmnIDlpb3lhpnkuIDkuItcclxuICAgIGNvbnN0IHRleHRSYW5nZSA9IChlbCkgPT4ge1xyXG4gICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGVsO1xyXG4gICAgICBjb25zdCB0YXJnZXRXID0gdGV4dENvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dENvbnRlbnQsIDApO1xyXG4gICAgICByYW5nZS5zZXRFbmQodGV4dENvbnRlbnQsIHRleHRDb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoKTtcclxuICAgICAgY29uc3QgcmFuZ2VXaWR0aCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICByZXR1cm4gcmFuZ2VXaWR0aCA+IHRhcmdldFc7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuICF0ZXh0UmFuZ2UoZXYudGFyZ2V0KTsgLy8gdGFyZ2V05Y+v5Lul5L+d6K+B5b2T5YmN5YiS6L+H55qEZG9t6IqC54K55LiA55u05L+d5oyB5pivOmVsLXRvb2x0aXBfX3RyaWdnZXJcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGE6IEFycmF5PFN0cmluZyB8IE51bWJlcj4pIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IGRhdGEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dEYXRhcyhkYXRhOiBBcnJheTxPYmplY3Q+KSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogZGF0YSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBzb3J0VHlwZSwgc29ydEluZm8gfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNvcnRGaWVsZHMgPSBbXSwgc2l6ZSA9IFwibGFyZ2VcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRlZmF1bHRTaG93Q29scyA9IGNvbHVtbnMuZmlsdGVyKChjb2xzKSA9PiBjb2xzLmluaXRTaG93ICE9PSBmYWxzZSk7XHJcbiAgICBjb25zdCBjb2xzID0gZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xyXG4gICAgICAvLyDmm7/mjaIgZ2V0Q29sdW1ucyDmlrnms5XkuK3ljp/mnaXnmoQgZWxsaXBzaXMg5aSE55CG6YOo5YiGXHJcbiAgICAgIGlmIChjb2wuZWxsaXBzaXMgJiYgIWNvbC5yZW5kZXIpIHtcclxuICAgICAgICBjb2wuZWxsaXBzaXMgPSB7XHJcbiAgICAgICAgICBzaG93VGl0bGU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sLnJlbmRlciA9ICh0ZXh0LCByZWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAvLyDojrflj5blvZPliY3liJfnmoTlrp7ml7blrr3luqZcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2wgPSB0aGlzLnN0YXRlLmNvbHM/LmZpbmQoKGMpID0+IHtcclxuICAgICAgICAgICAgLy8g5aSE55CGIGRhdGFJbmRleCDlj6/og73mmK/lrZfnrKbkuLLmiJbmlbDnu4TnmoTmg4XlhrVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYy5kYXRhSW5kZXgpICYmIEFycmF5LmlzQXJyYXkoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYy5kYXRhSW5kZXgpID09PSBKU09OLnN0cmluZ2lmeShjb2wuZGF0YUluZGV4KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGMuZGF0YUluZGV4ID09PSBjb2wuZGF0YUluZGV4O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYWN0dWFsV2lkdGggPSBjdXJyZW50Q29sPy53aWR0aCB8fCBjb2wud2lkdGg7XHJcbiAgICAgICAgICBsZXQgY29sV2lkdGg6IGFueSA9IFwiMTAwJVwiO1xyXG5cclxuICAgICAgICAgIGlmIChhY3R1YWxXaWR0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zdGF0ZS50YWJsZVNpemUgfHwgdGhpcy5wcm9wcy5zaXplIHx8IFwiZGVmYXVsdFwiO1xyXG4gICAgICAgICAgICBjb25zdCBjb2xXaWR0aE9iaiA9IHtcclxuICAgICAgICAgICAgICBzbWFsbDogMTYsXHJcbiAgICAgICAgICAgICAgbWlkZGxlOiAxNixcclxuICAgICAgICAgICAgICBkZWZhdWx0OiAxNixcclxuICAgICAgICAgICAgICBsYXJnZTogMzIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdXaWR0aCA9IGNvbFdpZHRoT2JqW3NpemVdIHx8IDE2O1xyXG5cclxuICAgICAgICAgICAgaWYgKGFjdHVhbFdpZHRoID4gcGFkZGluZ1dpZHRoKSB7XHJcbiAgICAgICAgICAgICAgY29sV2lkdGggPSBhY3R1YWxXaWR0aCAtIHBhZGRpbmdXaWR0aDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb2xXaWR0aCA9IGFjdHVhbFdpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImlubGluZS10YWJsZVwiLCB3aWR0aDogXCIxMDAlXCIgfX0+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgcmVmPXsoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5riF6Zmk5LmL5YmN55qEdGl0bGVcclxuICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJ0aXRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5paH5pys5piv5ZCm5rqi5Ye6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRleHRcIil9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogY29sV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxyXG4gICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6IFwiZWxsaXBzaXNcIixcclxuICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJub3dyYXBcIixcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3RleHR9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzb3J0RmllbGRzLmluZGV4T2YoY29sLmRhdGFJbmRleCkgPiAtMSkge1xyXG4gICAgICAgIGlmIChzb3J0VHlwZSA9PSBcInNpbmdsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKHNvcnRUeXBlID09IFwibXVsdGlwbGVcIikge1xyXG4gICAgICAgICAgY29sLnNvcnRlciA9IHsgbXVsdGlwbGU6IGluZGV4IH07XHJcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgPyBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb2w7XHJcbiAgICB9KTtcclxuICAgIGNvbHMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmooaXRlbS5maWx0ZXJQcm9wcykpIHtcclxuICAgICAgICBsZXQgb2JqID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCBwcm9wcywgc2VhcmNoS2V5IH0gPSBpdGVtLmZpbHRlclByb3BzO1xyXG4gICAgICAgIGxldCBEaXYgPSBudWxsO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gaXRlbS50aXRsZTtcclxuICAgICAgICBEaXYgPSBnZXROb2RlKHR5cGUsIHtcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBg5pCc57SiJHt0ZXh0fWAsXHJcbiAgICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICAgIHJlZjogdGhpcy50YWJsZVNlYXJjaFJlZixcclxuICAgICAgICB9KTtcclxuICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICBmaWx0ZXJEcm9wZG93bjogKHtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIGNvbmZpcm0sXHJcbiAgICAgICAgICAgIGNsZWFyRmlsdGVycyxcclxuICAgICAgICAgIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXNlYXJjaFwiKX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXNlYXJjaC1zcGFjZVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIHtEaXZ9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxTcGFjZT5cclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdGaWx0ZXJQYXJhbXMgPSB7IC4uLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGl0ZW0uZmllbGQgfHwgaXRlbS5kYXRhSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXdGaWx0ZXJQYXJhbXNba2V5XSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZWFyY2hSZWYuY3VycmVudD8uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRQYXJhbSA9IHRoaXMuZ2V0U29ydFBhcmFtKHRoaXMuc3RhdGUuc29ydGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMsIC4uLnNvcnRQYXJhbSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXNlYXJjaC1idXR0b25cIil9XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1NwYWNlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZpbHRlckljb246ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDxTZWFyY2hPdXRsaW5lZCAvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5vYmosXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xzW2luZGV4XSA9IG9iajtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29scztcclxuICB9XHJcbiAgcmVuZGVyVG9vbEJhcigpIHtcclxuICAgIGxldCB7IHRhYmxlU2l6ZSwga2V5Q29sdW1ucywgc29ydFR5cGUgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyBmaWx0ZXJDb2x1bW4sIGNvbHVtbnM6IGNvbExpc3RzLCB0b29sYmFyIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyB0YWJsZVRvb2wsIHN0b3JlUmVxdWVzdENvbmZpZyA9IHt9IH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29scyA9IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIGxldCB0b29sc0NsaWNrID0ge30gYXMgYW55O1xyXG4gICAgaWYgKHRvb2xiYXIgPT0gdHJ1ZSkge1xyXG4gICAgICB0b29scyA9IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRvb2xzID0gdG9vbGJhci50b29sc1xyXG4gICAgICAgID8gdG9vbGJhci50b29sc1xyXG4gICAgICAgIDogdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgPyB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA6IHRvb2xzO1xyXG4gICAgICB0b29sc0NsaWNrID0gdG9vbGJhci5vblRvb2xDbGljayA/IHRvb2xiYXIub25Ub29sQ2xpY2sgOiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNpemVJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWuveadvlwiLCBrZXk6IFwiZGVmYXVsdFwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5Lit562JXCIsIGtleTogXCJtaWRkbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIue0p+WHkVwiLCBrZXk6IFwic21hbGxcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWNleWtl+auteaOkuW6j1wiLCBrZXk6IFwic2luZ2xlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLlpJrlrZfmrrXmjpLluo9cIiwga2V5OiBcIm11bHRpcGxlXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0Q29udGVudCA9IChcclxuICAgICAgPD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb3RlbnQtdGl0bGVcIil9XHJcbiAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICBjdXJzb3I6IHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQgPyBcIm5vdC1hbGxvd2VkXCIgOiBcInBvaW50ZXJcIixcclxuICAgICAgICAgICAgY29sb3I6IHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQgJiYgXCJyZ2JhKDAsMCwwLC40NSlcIixcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLmRlZmF1bHRTb3J0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtdLCBzb3J0SW5mbzoge30sIGRlZmF1bHRTb3J0OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICDmgaLlpI3pu5jorqTmjpLluo9cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7c29ydEl0ZW0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHNvcnRlcjogW10sXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRJbmZvOiB7fSxcclxuICAgICAgICAgICAgICAgICAgc29ydFR5cGU6IGl0ZW0ua2V5LFxyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0U29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgPyAoXHJcbiAgICAgICAgICAgICAgICA8YT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAge3NvcnRUeXBlID09IGl0ZW0ua2V5ICYmIDxDaGVja091dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAge3RoaXMuc3RhdGUuc29ydGVyLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgPD5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogXCJyZ2JhKDAsMCwwLC40NSlcIiB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg5b2T5YmN5o6S5bqPXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX1cclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2l0ZW0ub3JkZXIgPT0gXCJhc2NlbmRcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgIDxTb3J0QXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnREZXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0uY29sdW1uLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICA8Lz5cclxuICAgICAgICApfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgICBjb25zdCBzaXplQ29udGVudCA9IChcclxuICAgICAgPD5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX0+XHJcbiAgICAgICAgICDooajmoLzlr4bluqZcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7c2l6ZUl0ZW0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlU2l6ZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ICYmIDxDaGVja091dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+IHtpdGVtLnRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IG5ld01hcERhdGEgPSBnZXRGbGF0dGVuRGF0YShrZXlDb2x1bW5zLCB7XHJcbiAgICAgIGtleUZpZWxkOiBcInVuaXF1ZUtleVwiLFxyXG4gICAgICBjaGlsZEZpZWxkOiBcImNoaWxkcmVuXCIsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBPYmplY3Qua2V5cyhuZXdNYXBEYXRhKS5tYXAoKGtleSkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxDaGVja2JveFxyXG4gICAgICAgICAga2V5PXtrZXl9XHJcbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW4oa2V5LCBlLnRhcmdldC5jaGVja2VkLCBuZXdNYXBEYXRhKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLmNoZWNrQ29sdW1uLmluY2x1ZGVzKG5ld01hcERhdGFba2V5XS51bmlxdWVLZXkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtuZXdNYXBEYXRhW2tleV0udGl0bGV9XHJcbiAgICAgICAgPC9DaGVja2JveD5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10b29sLWJhclwiKX0+XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJjb2x1bW5cIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICB0aXRsZT1cIumAieaLqeaYvuekuueahOWIl1wiXHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcclxuICAgICAgICAgICAgICBvdmVybGF5U3R5bGU9e3sgbWluV2lkdGg6IDQxMCwgbWF4V2lkdGg6IDQ1MCB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEFwcHN0b3JlT3V0bGluZWRcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRoLWFwcC1zdG9yZS1pY29uXCIpfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzb3J0XCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzb3J0Q29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic2l6ZVwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c2l6ZUNvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxDb2x1bW5IZWlnaHRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwicmVmcmVzaFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgIGlmICh0b29sc0NsaWNrLm9uUmVmcmVzaCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHNDbGljay5vblJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFJlZG9PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dLZXlzLCByZWNvcmRbcm93S2V5XV07XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dEYXRhcywgcmVjb3JkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtW3Jvd0tleV0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IG5ld1NlbGVjdGVkUm93S2V5cyxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogbmV3U2VsZWN0ZWRSb3dEYXRhcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdEFsbChzZWxlY3RlZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueSwgY2hhbmdlUm93czogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBsZXQgbmV3ZGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKGNoYW5nZVJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hhbmdlSWRzID0gY2hhbmdlUm93cy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtyb3dLZXldKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzLCAuLi5jaGFuZ2VSb3dzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbVtyb3dLZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdkYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogWy4uLm5ld2RhdGFzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICAgIHRhYmxlU2l6ZSxcclxuICAgICAgfSA9IHRoaXMuc3RhdGUsXHJcbiAgICAgIHByb3BzID0gdXRpbHMub21pdChcclxuICAgICAgICB0aGlzLnByb3BzLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwic3RvcmVcIixcclxuICAgICAgICAgIFwib25DaGFuZ2VcIixcclxuICAgICAgICAgIFwiY29sdW1uc1wiLFxyXG4gICAgICAgICAgXCJyZXNldENvbHVtblwiLFxyXG4gICAgICAgICAgXCJ0b29sYmFyXCIsXHJcbiAgICAgICAgICBcInNvcnRGaWVsZHNcIixcclxuICAgICAgICAgIFwiZmlsdGVyQ29sdW1uXCIsXHJcbiAgICAgICAgICBcInNvcnRTZWFyY2hcIixcclxuICAgICAgICAgIFwic2hvd1Jvd1NlbGVjdGlvblwiLFxyXG4gICAgICAgICAgXCJwYWdlVHlwZVwiLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93S2V5OiBcImlkXCIsXHJcbiAgICAgICAgICBjbGlja0NoYW5nZUNvbG9yOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKF90aGlzLnN0YXRlLnBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gXCJuc2MtdGFibGUtY2xpY2tSb3dTdHlsZVwiXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3RGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRyZWVVdGlscy5nZXRTZWFyY2hNZW51RGF0YXMoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yXHJcbiAgICAgICk7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhLnRyZWVEYXRhcztcclxuICAgICAgcHJvcHMuZXhwYW5kZWRSb3dLZXlzID0gZGF0YS5vcGVuS2V5cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgfVxyXG4gICAgcHJvcHMuc3RvcmUgPSBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgIHByb3BzLnN0b3JlLmF1dG9Mb2FkID0gcHJvcHMuc3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgY29uc3QgeyBkcmFnYWJsZSB9ID0gX3RoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkcmFnYWJsZVByb3BzID1cclxuICAgICAgZHJhZ2FibGUgPT09IHRydWVcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgY29tcG9uZW50czogQm9keVJvd0NvbXBvbmVudCxcclxuICAgICAgICAgICAgb25Sb3c6IChyZWNvcmQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICBtb3ZlUm93OiB0aGlzLm1vdmVSb3csXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge307XHJcbiAgICBsZXQgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3QgcmVzaXplUHJvcHMgPVxyXG4gICAgICByZXNpemVDb2x1bW4gPT09IHRydWUgPyB7IGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50cyB9IDogbnVsbDtcclxuICAgIGNvbnN0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IGZhbHNlO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3RhYmxlVG9vbCcsdGFibGVUb29sKVxyXG5cclxuICAgIGlmICh0YWJsZVRvb2wuc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0b29sRmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy50b29sYmFyICYmIHRoaXMucHJvcHMudG9vbGJhci5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLnNob3dSb3dTZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgeyByb3dTZWxlY3Rpb24gPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgICAuLi5yb3dTZWxlY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFibGVQcm9wczogY29uZmlnVGFibGVQcm9wcyB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBEZWZhdWx0VGFibGUgPSAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGVcIil9PlxyXG4gICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCYXIoKX1cclxuICAgICAgICA8VGFibGVcclxuICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZT1cImNoaWxkTm9kZXNcIlxyXG4gICAgICAgICAgc2hlaXRlbVxyXG4gICAgICAgICAgZGF0YVNvdXJjZT17bmV3RGF0YVNvdXJjZX1cclxuICAgICAgICAgIGNvbHVtbnM9e3RoaXMuZ2V0Q29sdW1ucygpfVxyXG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1jb250ZW50XCIpLCBwcm9wcy5jbGFzc05hbWUpfVxyXG4gICAgICAgICAgbG9jYWxlPXt7XHJcbiAgICAgICAgICAgIGVtcHR5VGV4dDogKFxyXG4gICAgICAgICAgICAgIDxOb0RhdGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtbm9kYXRhXCIpfSAvPlxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHNjcm9sbD17eyB4OiBcIm1heC1jb250ZW50XCIgfX1cclxuICAgICAgICAgIHsuLi5jb25maWdUYWJsZVByb3BzfVxyXG4gICAgICAgICAgey4uLnJlc2l6ZVByb3BzfVxyXG4gICAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAgICAgey4uLmRyYWdhYmxlUHJvcHN9XHJcbiAgICAgICAgICBzaXplPXt0YWJsZVNpemV9XHJcbiAgICAgICAgICBwYWdpbmF0aW9uPXtmYWxzZX1cclxuICAgICAgICAgIC8vIHN0eWxlPXt7IGhlaWdodDogNjAwIH19XHJcbiAgICAgICAgLz5cclxuICAgICAgICB7cHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1wYWdpbmF0aW9uXCIpfT5cclxuICAgICAgICAgICAgPFBhZ2luYXRpb25cclxuICAgICAgICAgICAgICB7Li4ucHJvcHMucGFnaW5hdGlvbn1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17KHBhZ2UsIHBhZ2VTaXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IHRoaXMuc3RhdGUuZXh0cmE7XHJcbiAgICAgICAgICAgICAgICBleHRyYS5hY3Rpb24gPSBcInBhZ2luYXRlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCh7IHBhZ2luYXRpb24gPSB7fSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogeyAuLi5wYWdpbmF0aW9uLCBjdXJyZW50OiBwYWdlLCBwYWdlU2l6ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKFxyXG4gICAgICAgICAgICAgICAgICB7IGN1cnJlbnQ6IHBhZ2UsIHBhZ2VTaXplIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNvcnRlcixcclxuICAgICAgICAgICAgICAgICAgZXh0cmFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZHJhZ2FibGUgPT09IHRydWUgPyAoXHJcbiAgICAgIDxEbmRQcm92aWRlciBiYWNrZW5kPXtIVE1MNUJhY2tlbmR9PntEZWZhdWx0VGFibGV9PC9EbmRQcm92aWRlcj5cclxuICAgICkgOiAoXHJcbiAgICAgIERlZmF1bHRUYWJsZVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOU0NUYWJsZSk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDRUEsZ0JBQWdCLEVBQ2hCQyxhQUFhLEVBQ2JDLG9CQUFvQixFQUNwQkMsY0FBYyxFQUNkQyxxQkFBcUIsRUFDckJDLHNCQUFzQixFQUN0QkMsWUFBWSxRQUNQLG1CQUFtQjtBQUMxQixTQUFTQyxVQUFVLFFBQVEsbUJBQW1CO0FBQzlDLE9BQU9DLEtBQUssSUFBSUMsU0FBUyxRQUFvQixhQUFhO0FBQzFELFNBQVNDLEtBQUssUUFBUSx1QkFBdUI7QUFlN0MsT0FBTyxLQUFLQyxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxXQUFXLFFBQVEsV0FBVztBQUN2QyxPQUFPQyxPQUFPLElBQUlDLGNBQWMsRUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["AppstoreOutlined","CheckOutlined","ColumnHeightOutlined","SearchOutlined","SortAscendingOutlined","SortDescendingOutlined","RedoOutlined","isEmptyObj","Store","PageStore","utils","React","DndProvider","BodyRow","DndContextType","IBodyRowProps","treeUtils","BodyRowComponent","HTML5Backend","withZhLocale","Resizable","getLess","getNode","NoData","guid","getFlattenData","getStorage","config","cls","styles","ResizeableTitle","props","onResize","width","restProps","_objectWithoutProperties","_excluded","createElement","height","draggableOpts","enableUserSelectHack","NSCTable","Component","constructor","_autoType","_defineProperty","createRef","onBeforeLoad","load","header","cell","index","e","_ref","size","cols","state","nextColumns","_objectSpread","setState","getColumns","ev","data","JSON","parse","_this","eventType","payload","tableSize","dragIndex","hoverIndex","drag","target","dragNode","record","targetNode","moveArray","ids","parentNode","getChildNodeIds","params","id","parentId","attribute","moveRow","store","reload","modal","type","storePrefix","autoType","content","dataSource","columns","loading","pagination","activeIndex","searchText","fieldOption","searchColor","sorts","filterParams","sortType","sorter","sortInfo","defaultSort","checkColumn","defaultCheck","selectedRowKeys","selectedRowDatas","filter","extra","_ref2","listeners","listenersProps","restStore","_excluded2","storeProps","model","component","options","callback","dataChanged","modelData","paging","getPagination","onErrorLoad","err","response","autoLoad","Object","assign","current","getInitCheckedColumns","checkedKeys","traverse","forEach","col","initShow","push","uniqueKey","children","length","generateUniqueKeysAndPaths","parentPath","arguments","undefined","level","map","currentPath","concat","newCol","path","leaf","childrenKeys","child","componentDidMount","resizeColumn","newColumns","defaultCheckedColumns","storeColumns","keyColumns","setData","window","addEventListener","listenMessage","componentWillUnmount","removeEventListener","componentDidUpdate","prevProps","preState","resetColumn","newCols","colss","temp","onHeaderCell","column","handleResize","clearSelectColor","getPaginationByStore","onChange","filters","autoOnChange","autoSort","autoPagination","isMultiple","Array","isArray","handlePagination","p","currentKey","pageSizeKey","pageSize","ascParams","getSortParam","onChangeFn","getStore","getModel","handleSearch","val","filterColumn","checkedValue","isChecked","mapData","currentCheckedKeys","getAllChildrenKeys","keys","allChildrenKeys","includes","key","pathParts","split","i","slice","join","parentCol","values","find","c","allSiblings","hasCheckedSibling","some","_message","warning","filterColumns","filterColumnsByCheckedKeys","result","isColumnChecked","filteredChildren","sortState","sortSearch","orderItems","field","dataIndex","asc","order","v","stringify","isBeyond","event","textRange","el","textContent","targetW","getBoundingClientRect","range","document","createRange","setStart","setEnd","childNodes","rangeWidth","setSelectedRowKeys","setSelectedRowDatas","sortFields","defaultShowCols","ellipsis","render","showTitle","text","_this$state$cols","currentCol","actualWidth","colWidth","colWidthObj","small","middle","default","large","paddingWidth","style","display","ref","removeAttribute","scrollWidth","clientWidth","setAttribute","className","overflow","textOverflow","whiteSpace","indexOf","sortOrder","multiple","item","filterProps","obj","searchKey","Div","title","placeholder","tableSearchRef","filterDropdown","_ref3","setSelectedKeys","selectedKeys","confirm","clearFilters","_Space","_Button","onClick","_this$tableSearchRef$","newFilterParams","getValue","sortParam","filterIcon","renderToolBar","colLists","toolbar","tableTool","storeRequestConfig","tools","toolsClick","onToolClick","sizeItem","sortItem","sortContent","Fragment","cursor","color","sizeContent","newMapData","keyField","childField","_Checkbox","checked","fontSize","_Popover","placement","trigger","overlayStyle","minWidth","maxWidth","marginRight","onRefresh","getSelectedRowKeys","getSelectedRowDatas","resetSelectedRowKeys","rowSelectionOnSelect","selected","rowKey","newSelectedRowKeys","newSelectedRowDatas","splice","rowSelectionOnSelectAll","selectedRows","changeRows","newids","newdatas","changeIds","omit","clickChangeColor","position","showSizeChanger","showQuickJumper","showTotal","total","_ref4","from","to","onRowFn","onRow","custom","onClickFn","rowClassName","newDataSource","getSearchMenuDatas","treeDatas","expandedRowKeys","openKeys","dragable","dragableProps","components","resizeProps","toolFlag","show","showRowSelection","rowSelection","onSelect","bind","onSelectAll","columnWidth","tableProps","configTableProps","DefaultTable","_Table","_extends","childrenColumnName","sheitem","locale","emptyText","scroll","x","_Pagination","page","action","_ref5","backend","dragUrl"],"sources":["../../../src/components/base/table/index.tsx"],"sourcesContent":["/*\r\n * @Descripttion:\r\n * @version:\r\n * @Author: rxzhu\r\n * @Date: 2021-03-23 08:46:20\r\n * @LastEditors: rxzhu\r\n * @LastEditTime: 2021-03-23 10:30:42\r\n */\r\nimport {\r\n AppstoreOutlined,\r\n CheckOutlined,\r\n ColumnHeightOutlined,\r\n SearchOutlined,\r\n SortAscendingOutlined,\r\n SortDescendingOutlined,\r\n RedoOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { isEmptyObj } from \"@bj-nsc/functions\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n CheckboxOptionType,\r\n Menu,\r\n message,\r\n Pagination,\r\n Popover,\r\n Space,\r\n Table,\r\n TableProps,\r\n Tooltip,\r\n} from \"antd\";\r\nimport { ColumnType, TablePaginationConfig } from \"antd/lib/table\";\r\nimport * as React from \"react\";\r\nimport { DndProvider } from \"react-dnd\";\r\nimport BodyRow, { DndContextType, IBodyRowProps } from \"../common/BodyRow\";\r\nimport treeUtils from \"../../treeUtils\";\r\nimport \"./index.module.less\";\r\nconst { BodyRowComponent, HTML5Backend } = BodyRow;\r\nimport withZhLocale from \"../common/withZhLocale\";\r\nimport { Resizable } from \"react-resizable\";\r\nimport \"./resize.module.less\";\r\nimport { getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport NoData from \"../common/NoData\";\r\nimport { guid, getFlattenData, getStorage } from \"@bj-nsc/functions\";\r\nimport config from \"../../config\";\r\nimport EllipseCell from \"../common/EllipseCell\";\r\nimport cls from \"classnames\";\r\nimport isEqual from \"lodash/isEqual\";\r\nconst styles = null;\r\ninterface IDragParams {\r\n id: string | number;\r\n ids: Array<string | number>;\r\n parentId: string | number;\r\n}\r\n// interface StoreProps {}\r\n\r\nexport type StoreType = \"PageStore\" | \"TreeStore\" | \"BaseStore\";\r\n\r\ninterface NSCTablePagination extends TablePaginationConfig {\r\n totalKey?: string;\r\n pageSizeKey?: string;\r\n currentKey?: string;\r\n}\r\n\r\ninterface ToolBarProps {\r\n show: boolean;\r\n tools?: Array<string>;\r\n onToolClick?: { onRefresh?: any; onSort?: any };\r\n}\r\ninterface NSCTableProps extends TableProps<any> {\r\n store?: StoreProps;\r\n showTotal?: boolean; // 是否显示总条数信息,默认true\r\n dragable?: boolean; // 是否可拖动, 默认false\r\n filterColumn?: boolean; // 是否支持过滤显示表格列, 默认true\r\n moveRow?: (params: IDragParams) => void; // 拖拽完成后的回调\r\n dragUrl?: string; // 保存拖拽排序的接口\r\n pagination?: false | NSCTablePagination;\r\n autoPagination?: boolean; // 组件是否自动处理分页\r\n autoSort?: boolean; //组件是否自动处理排序\r\n autoOnChange?: boolean; // 组件是否自动onChange, false则不做任何处理全部交给调用方\r\n resizeColumn?: boolean;\r\n sortFields?: Array<string>; //需要排序的字段Index\r\n toolbar?: ToolBarProps | boolean;\r\n autoSize?: boolean;\r\n sortSearch?: boolean; //是否添加排序查询,默认true\r\n showRowSelection?: boolean;\r\n rowKey?: string;\r\n [propsName: string]: any;\r\n}\r\n\r\nexport type INSCTableProps = typeof NSCTable.defaultProps & NSCTableProps;\r\nexport { DndContextType, IBodyRowProps };\r\n\r\nconst ResizeableTitle = (props: any) => {\r\n const { onResize, width, ...restProps } = props;\r\n return (\r\n <Resizable\r\n width={width || 150}\r\n height={0}\r\n onResize={onResize}\r\n draggableOpts={{ enableUserSelectHack: false }}\r\n >\r\n <th {...restProps} />\r\n </Resizable>\r\n );\r\n};\r\nclass NSCTable extends React.Component<INSCTableProps, any> {\r\n static defaultProps = {\r\n dragable: false,\r\n showTotal: true,\r\n filterColumn: true,\r\n dragUrl: \"\",\r\n autoPagination: true,\r\n autoSort: true,\r\n autoOnChange: true,\r\n resizeColumn: true,\r\n toolbar: {\r\n show: false,\r\n onToolClick: {} as any,\r\n tools: [] as any,\r\n } as any,\r\n };\r\n\r\n store = {} as StoreProps;\r\n thIconRef = React.createRef<HTMLDivElement>();\r\n tableSearchRef = React.createRef<any>();\r\n\r\n listeners = {\r\n onBeforeLoad: null,\r\n load: null,\r\n };\r\n\r\n components = {\r\n header: {\r\n cell: ResizeableTitle,\r\n },\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n let modal = props.type || \"auto\";\r\n let storePrefix = getStorage(\"store-pre-key\");\r\n let autoType = getStorage(\r\n storePrefix ? storePrefix + \"tableSize\" : \"tableSize\"\r\n );\r\n autoType = autoType?.content;\r\n this.state = {\r\n dataSource: [],\r\n columns: [],\r\n loading: false,\r\n pagination: {},\r\n activeIndex: -1,\r\n //搜索文本\r\n searchText: null,\r\n fieldOption: null,\r\n searchColor: null,\r\n cols: [],\r\n sorts: [],\r\n filterParams: {},\r\n tableSize: this.props.size || autoType || \"default\",\r\n sortType: \"single\",\r\n sorter: [], //记录当前排序字段\r\n sortInfo: {},\r\n defaultSort: true,\r\n checkColumn: [],\r\n defaultCheck: true,\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n filter: [],\r\n extra: {},\r\n };\r\n if (props.store instanceof Store) {\r\n this.store = props.store;\r\n } else {\r\n const { listeners: listenersProps = {}, ...restStore } =\r\n props.store || {};\r\n const storeProps = {\r\n model: \"model\",\r\n component: this,\r\n listeners: {\r\n onBeforeLoad: (store, options) => {\r\n this.setState({ loading: true });\r\n utils.callback(listenersProps.onBeforeLoad, this, [store, options]);\r\n },\r\n dataChanged: (data, modelData, store) => {\r\n let paging = !(this.props.pagination === false);\r\n if (paging && !this.props.dataSource) {\r\n this.setState({\r\n dataSource: modelData,\r\n pagination: store.getPagination(),\r\n loading: false,\r\n activeIndex: -1,\r\n });\r\n } else {\r\n this.setState({ dataSource: modelData, loading: false });\r\n }\r\n utils.callback(listenersProps.dataChanged, this, [\r\n data,\r\n modelData,\r\n store,\r\n paging,\r\n ]);\r\n },\r\n load: (data, modelData, store) => {\r\n utils.callback(listenersProps.load, this, [data, modelData, store]);\r\n },\r\n onErrorLoad: (err, response) => {\r\n this.setState({ loading: false });\r\n utils.callback(listenersProps.onErrorLoad, this, [err, response]);\r\n },\r\n },\r\n data: restStore.data\r\n ? restStore.data\r\n : props.dataSource\r\n ? props.dataSource\r\n : null,\r\n ...restStore,\r\n autoLoad: restStore.autoLoad === false ? false : true,\r\n };\r\n this.store = new PageStore(\r\n Object.assign({}, storeProps, {\r\n pagination: { current: 1, ...this.props.pagination },\r\n })\r\n );\r\n }\r\n }\r\n\r\n handleResize =\r\n (index: any) =>\r\n (e: any, { size }: any) => {\r\n const { cols } = this.state;\r\n const nextColumns = [...cols];\r\n nextColumns[index] = {\r\n ...nextColumns[index],\r\n width: size.width,\r\n };\r\n this.setState(\r\n {\r\n cols: nextColumns,\r\n },\r\n () => {\r\n // 在状态更新后重新获取列配置\r\n this.getColumns();\r\n }\r\n );\r\n };\r\n getInitCheckedColumns(columns: any[]): string[] {\r\n let checkedKeys: string[] = [];\r\n\r\n const traverse = (cols: any[]) => {\r\n cols.forEach((col) => {\r\n // 如果列没有明确设置 initShow 为 false,则认为是默认选中的\r\n if (col.initShow !== false) {\r\n checkedKeys.push(col.uniqueKey);\r\n }\r\n\r\n // 递归处理子列\r\n if (col.children && col.children.length > 0) {\r\n traverse(col.children);\r\n }\r\n });\r\n };\r\n\r\n traverse(columns);\r\n return checkedKeys;\r\n }\r\n generateUniqueKeysAndPaths(\r\n columns: any[],\r\n parentPath: string = \"\",\r\n level: number = 0\r\n ): any[] {\r\n return columns.map((col, index) => {\r\n // 生成唯一key\r\n const uniqueKey = col.uniqueKey || guid();\r\n\r\n // 构建当前节点的path,格式为: parentPath/identifier_key\r\n const currentPath = parentPath\r\n ? `${parentPath}/${uniqueKey}`\r\n : `${uniqueKey}`;\r\n\r\n // 创建新的列对象\r\n const newCol = {\r\n ...col,\r\n uniqueKey: uniqueKey,\r\n path: currentPath,\r\n };\r\n\r\n // 判断是否为叶子节点\r\n if (!newCol.children || newCol.children.length === 0) {\r\n // 最后一层子项\r\n newCol.leaf = true;\r\n } else {\r\n // 有子项的节点\r\n newCol.leaf = false;\r\n\r\n // 递归处理子项\r\n newCol.children = this.generateUniqueKeysAndPaths(\r\n newCol.children,\r\n currentPath,\r\n level + 1\r\n );\r\n\r\n // 为父节点添加所有子项的uniqueKey数组\r\n newCol.childrenKeys = newCol.children.map(\r\n (child: any) => child.uniqueKey\r\n );\r\n }\r\n\r\n return newCol;\r\n });\r\n }\r\n componentDidMount() {\r\n const { resizeColumn } = this.props;\r\n const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);\r\n const defaultCheckedColumns = this.getInitCheckedColumns(newColumns);\r\n // if (!resizeColumn) {\r\n // this.setState({ columns: [...this.props.columns] });\r\n // } else {\r\n // this.setState({ cols: [...this.props.columns] });\r\n // }\r\n\r\n if (!resizeColumn) {\r\n this.setState({\r\n columns: newColumns,\r\n storeColumns: [...this.props.columns],\r\n checkColumn: defaultCheckedColumns,\r\n keyColumns: newColumns,\r\n });\r\n } else {\r\n this.setState({\r\n cols: newColumns, //修改列宽\r\n columns: newColumns, //table组件使用\r\n storeColumns: [...this.props.columns], //原始列,用于判断是有列有更新\r\n checkColumn: defaultCheckedColumns, //默认选中的列\r\n keyColumns: newColumns, //提供带标识的完整列结构,用于构建列选择界面\r\n });\r\n }\r\n\r\n const store = this.props.store;\r\n if (store && store.data) {\r\n this.store.setData(store.data);\r\n }\r\n window.addEventListener(\"message\", this.listenMessage);\r\n }\r\n componentWillUnmount() {\r\n window.removeEventListener(\"message\", this.listenMessage);\r\n }\r\n listenMessage = (ev) => {\r\n const data = typeof ev.data === \"string\" ? JSON.parse(ev.data) : ev.data;\r\n let _this = this;\r\n if (data.eventType == \"changeTableSize\") {\r\n const { payload } = data;\r\n if (\r\n payload.size == \"default\" ||\r\n payload.size == \"small\" ||\r\n payload.size == \"middle\"\r\n ) {\r\n _this.setState({ tableSize: payload.size });\r\n }\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps, preState) {\r\n const { resizeColumn } = this.props;\r\n if (!resizeColumn) {\r\n if (this.props.columns !== prevProps.columns) {\r\n this.setState({ columns: this.props.columns });\r\n }\r\n } else {\r\n if (preState.cols !== this.state.cols) {\r\n this.resetColumn();\r\n }\r\n if (this.props.columns !== prevProps.columns) {\r\n this.setState({\r\n cols: this.props.columns,\r\n columns: this.props.columns,\r\n });\r\n }\r\n if (prevProps.size !== this.props.size) {\r\n this.setState({ tableSize: this.props.size });\r\n }\r\n }\r\n }\r\n resetColumn() {\r\n const { cols } = this.state;\r\n const newCols: any = [];\r\n let colss = cols || [];\r\n colss.map((col: any, index: any) => {\r\n let temp = {\r\n ...col,\r\n onHeaderCell: (column: { width: any }) => ({\r\n width: column.width,\r\n onResize: this.handleResize(index),\r\n }),\r\n };\r\n newCols.push(temp);\r\n });\r\n this.setState({\r\n columns: newCols,\r\n });\r\n }\r\n\r\n /**\r\n * 清除选中颜色\r\n */\r\n clearSelectColor() {\r\n this.setState({ activeIndex: -1 });\r\n return this;\r\n }\r\n\r\n getPaginationByStore() {\r\n return this.store.getPagination();\r\n }\r\n\r\n onChange(pagination, filters, sorter, extra) {\r\n const {\r\n autoOnChange = true,\r\n autoSort,\r\n autoPagination,\r\n onChange,\r\n store,\r\n } = this.props;\r\n const { filterParams } = this.state;\r\n const isMultiple = Array.isArray(sorter);\r\n if (autoOnChange === false || !store) {\r\n onChange && onChange(pagination, filters, sorter, extra);\r\n return;\r\n }\r\n const handlePagination = () => {\r\n let params = {} as {\r\n size?: string;\r\n pageSize?: string;\r\n ascs?: string;\r\n descs?: string;\r\n [propName: string]: string;\r\n };\r\n const paging = this.getPaginationByStore() || {};\r\n if (!isEmptyObj(pagination)) {\r\n const p = {\r\n [paging.currentKey || \"current\"]: pagination.current,\r\n [paging.pageSizeKey || \"size\"]: pagination.pageSize,\r\n };\r\n Object.assign(params, p);\r\n }\r\n let ascParams = this.getSortParam(sorter, true);\r\n if (isMultiple) {\r\n this.setState({ sorter });\r\n } else if (!isMultiple && !isEmptyObj(sorter)) {\r\n sorter.column &&\r\n this.setState({ sorter: [sorter], defaultSort: false });\r\n } else {\r\n this.setState({ sorter: [] });\r\n }\r\n this.setState({\r\n filters,\r\n extra,\r\n });\r\n params = { ...filterParams, ...params, ...ascParams };\r\n autoSort && this.store.reload({ params });\r\n };\r\n\r\n const onChangeFn = this.props.onChange;\r\n\r\n autoPagination && handlePagination();\r\n // 用户传了onChange保留用户自主处理表格变化的权力\r\n if (onChangeFn) {\r\n utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);\r\n }\r\n }\r\n\r\n getStore() {\r\n return this.store;\r\n }\r\n\r\n /**\r\n * 获取数据模型对象\r\n */\r\n getModel() {\r\n return this.store.getModel();\r\n }\r\n\r\n /**\r\n * 菜单搜索过滤显示\r\n * @param {String} val\r\n */\r\n handleSearch(val, fieldOption, searchColor) {\r\n this.setState({\r\n searchText: val,\r\n fieldOption: fieldOption,\r\n searchColor: searchColor,\r\n });\r\n }\r\n\r\n /**\r\n * 模块列表移动排序\r\n */\r\n moveRow = (dragIndex, hoverIndex, drag, target) => {\r\n const _this = this;\r\n let dragNode = drag.record;\r\n let targetNode = target.record;\r\n dragNode.moveArray(dragNode, targetNode);\r\n let ids = dragNode.parentNode.getChildNodeIds();\r\n let params = {\r\n id: dragNode.id,\r\n parentId: dragNode.attribute.parentId,\r\n ids: ids,\r\n };\r\n\r\n if (this.props.moveRow) {\r\n this.props.moveRow(params);\r\n } else {\r\n this.store.reload();\r\n }\r\n };\r\n\r\n filterColumn(checkedValue, isChecked, mapData) {\r\n const col = mapData[checkedValue];\r\n let currentCheckedKeys = [...this.state.checkColumn];\r\n // 获取所有子节点的 keys(包括深层嵌套的节点)\r\n const getAllChildrenKeys = (column) => {\r\n let keys = [];\r\n if (column.children && column.children.length > 0) {\r\n column.children.forEach((child) => {\r\n keys.push(child.uniqueKey);\r\n keys = keys.concat(getAllChildrenKeys(child));\r\n });\r\n }\r\n return keys;\r\n };\r\n\r\n if (col.children) {\r\n // 处理父节点\r\n const allChildrenKeys = getAllChildrenKeys(col);\r\n\r\n if (isChecked) {\r\n // 选中父节点:添加父节点和所有子孙节点\r\n if (!currentCheckedKeys.includes(col.uniqueKey)) {\r\n currentCheckedKeys.push(col.uniqueKey);\r\n }\r\n allChildrenKeys.forEach((key) => {\r\n if (!currentCheckedKeys.includes(key)) {\r\n currentCheckedKeys.push(key);\r\n }\r\n });\r\n } else {\r\n // 取消选中父节点:移除父节点和所有子孙节点\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== col.uniqueKey && !allChildrenKeys.includes(key)\r\n );\r\n }\r\n } else {\r\n // 处理叶子节点\r\n if (isChecked) {\r\n if (!currentCheckedKeys.includes(col.uniqueKey)) {\r\n currentCheckedKeys.push(col.uniqueKey);\r\n }\r\n } else {\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== col.uniqueKey\r\n );\r\n\r\n // 检查父节点是否需要取消选中\r\n if (col.path) {\r\n const pathParts = col.path.split(\"/\");\r\n // 从当前节点向上遍历所有父节点\r\n for (let i = pathParts.length - 2; i >= 0; i--) {\r\n const parentPath = pathParts.slice(0, i + 1).join(\"/\");\r\n const parentCol: any = Object.values(mapData).find(\r\n (c: any) => c.path === parentPath\r\n );\r\n if (parentCol) {\r\n // 检查父节点是否还有其他子节点被选中\r\n const allSiblings = getAllChildrenKeys(parentCol);\r\n const hasCheckedSibling = allSiblings.some(\r\n (key) =>\r\n key !== col.uniqueKey && currentCheckedKeys.includes(key)\r\n );\r\n\r\n if (!hasCheckedSibling) {\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== parentCol.uniqueKey\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (currentCheckedKeys.length === 0) {\r\n message.warning(\"至少显示一列!\");\r\n return;\r\n }\r\n\r\n const { keyColumns } = this.state;\r\n const filterColumns = this.filterColumnsByCheckedKeys(\r\n keyColumns,\r\n currentCheckedKeys\r\n );\r\n\r\n // 更新状态\r\n this.setState(\r\n {\r\n checkColumn: currentCheckedKeys,\r\n columns: filterColumns,\r\n cols: filterColumns,\r\n },\r\n // () => {\r\n // // 添加回调确保在状态更新后重新设置列宽调整相关属性\r\n // if (this.props.resizeColumn) {\r\n // this.resetColumn();\r\n // }\r\n // }\r\n );\r\n }\r\n filterColumnsByCheckedKeys(columns: any[], checkedKeys: string[]): any[] {\r\n if (!columns || !Array.isArray(columns) || columns.length === 0) {\r\n return [];\r\n }\r\n\r\n const result: any[] = [];\r\n\r\n columns.forEach((col) => {\r\n // 检查当前列是否在选中列表中\r\n const isColumnChecked = checkedKeys.includes(col.uniqueKey);\r\n if (isColumnChecked) {\r\n // 如果当前列被选中,直接添加\r\n const newCol = { ...col };\r\n // 如果有子列,递归处理\r\n if (newCol.children && newCol.children.length > 0) {\r\n newCol.children = this.filterColumnsByCheckedKeys(\r\n newCol.children,\r\n checkedKeys\r\n );\r\n }\r\n result.push(newCol);\r\n } else {\r\n // 如果当前列未被选中,检查是否有子列被选中\r\n if (col.children && col.children.length > 0) {\r\n const filteredChildren = this.filterColumnsByCheckedKeys(\r\n col.children,\r\n checkedKeys\r\n );\r\n if (filteredChildren.length > 0) {\r\n // 如果有子列被选中,则添加该列(作为容器)\r\n const newCol = { ...col };\r\n newCol.children = filteredChildren;\r\n result.push(newCol);\r\n }\r\n }\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n getSortParam(sorter, sortState = false) {\r\n const isMultiple = Array.isArray(sorter);\r\n const { sortSearch = true } = this.props;\r\n if (!sortSearch) {\r\n return {};\r\n }\r\n let sortInfo = {};\r\n let orderItems = [];\r\n if (!isEmptyObj(sorter) && !isMultiple && sorter.column) {\r\n orderItems = [\r\n {\r\n column: sorter.column.field || sorter.column.dataIndex,\r\n asc: sorter.order == \"ascend\",\r\n },\r\n ];\r\n if (sorter.column) sortInfo[sorter.column.dataIndex] = sorter.order;\r\n } else if (isMultiple) {\r\n sorter.forEach((v) => {\r\n sortInfo[v.column.dataIndex] = v.order;\r\n let field = v.column.field || v.column.dataIndex;\r\n orderItems.push({\r\n column: field,\r\n asc: v.order == \"ascend\",\r\n });\r\n });\r\n }\r\n if (sortState) {\r\n this.setState({\r\n sortInfo: sortInfo,\r\n });\r\n }\r\n return { orderItems: JSON.stringify(orderItems) };\r\n }\r\n isBeyond(e) {\r\n const ev = window.event || e; // 浏览器兼容,最好写一下\r\n const textRange = (el) => {\r\n const textContent = el;\r\n const targetW = textContent.getBoundingClientRect().width;\r\n const range = document.createRange();\r\n range.setStart(textContent, 0);\r\n range.setEnd(textContent, textContent.childNodes.length);\r\n const rangeWidth = range.getBoundingClientRect().width;\r\n return rangeWidth > targetW;\r\n };\r\n return !textRange(ev.target); // target可以保证当前划过的dom节点一直保持是:el-tooltip__trigger\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n this.setState({\r\n selectedRowKeys: data,\r\n });\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n this.setState({\r\n selectedRowDatas: data,\r\n });\r\n }\r\n getColumns() {\r\n const { columns, sortType, sortInfo } = this.state;\r\n const { sortFields = [], size = \"large\" } = this.props;\r\n const defaultShowCols = columns.filter((cols) => cols.initShow !== false);\r\n const cols = defaultShowCols.map((col, index) => {\r\n // 替换 getColumns 方法中原来的 ellipsis 处理部分\r\n if (col.ellipsis && !col.render) {\r\n col.ellipsis = {\r\n showTitle: false,\r\n };\r\n col.render = (text, record, index) => {\r\n // 获取当前列的实时宽度\r\n const currentCol = this.state.cols?.find((c) => {\r\n // 处理 dataIndex 可能是字符串或数组的情况\r\n if (Array.isArray(c.dataIndex) && Array.isArray(col.dataIndex)) {\r\n return (\r\n JSON.stringify(c.dataIndex) === JSON.stringify(col.dataIndex)\r\n );\r\n }\r\n return c.dataIndex === col.dataIndex;\r\n });\r\n\r\n const actualWidth = currentCol?.width || col.width;\r\n let colWidth: any = \"100%\";\r\n\r\n if (actualWidth) {\r\n const size = this.state.tableSize || this.props.size || \"default\";\r\n const colWidthObj = {\r\n small: 16,\r\n middle: 16,\r\n default: 16,\r\n large: 32,\r\n };\r\n const paddingWidth = colWidthObj[size] || 16;\r\n\r\n if (actualWidth > paddingWidth) {\r\n colWidth = actualWidth - paddingWidth;\r\n } else {\r\n colWidth = actualWidth;\r\n }\r\n }\r\n\r\n return (\r\n <div style={{ display: \"inline-table\", width: \"100%\" }}>\r\n <div\r\n ref={(el) => {\r\n if (el) {\r\n // 清除之前的title\r\n el.removeAttribute(\"title\");\r\n\r\n // 检查文本是否溢出\r\n if (el.scrollWidth > el.clientWidth) {\r\n el.setAttribute(\"title\", text);\r\n }\r\n }\r\n }}\r\n className={getLess(styles, \"nsc-table-text\")}\r\n style={{\r\n width: colWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {text}\r\n </div>\r\n </div>\r\n );\r\n };\r\n }\r\n if (sortFields.indexOf(col.dataIndex) > -1) {\r\n if (sortType == \"single\") {\r\n col.sorter = true;\r\n col.sortOrder = sortInfo[col.dataIndex]\r\n ? sortInfo[col.dataIndex]\r\n : null;\r\n } else if (sortType == \"multiple\") {\r\n col.sorter = { multiple: index };\r\n col.sortOrder = sortInfo[col.dataIndex]\r\n ? sortInfo[col.dataIndex]\r\n : null;\r\n }\r\n }\r\n return col;\r\n });\r\n cols.map((item, index) => {\r\n if (!isEmptyObj(item.filterProps)) {\r\n let obj = { ...item };\r\n const { type, props, searchKey } = item.filterProps;\r\n let Div = null;\r\n let text = item.title;\r\n Div = getNode(type, {\r\n placeholder: `搜索${text}`,\r\n ...props,\r\n ref: this.tableSearchRef,\r\n });\r\n obj = {\r\n filterDropdown: ({\r\n setSelectedKeys,\r\n selectedKeys,\r\n confirm,\r\n clearFilters,\r\n }) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-table-search\")}>\r\n <div className={getLess(styles, \"nsc-table-search-space\")}>\r\n {Div}\r\n </div>\r\n <Space>\r\n <Button\r\n type=\"primary\"\r\n onClick={() => {\r\n confirm();\r\n const { filterParams } = this.state;\r\n let newFilterParams = { ...filterParams };\r\n let key = item.field || item.dataIndex;\r\n newFilterParams[key] =\r\n this.tableSearchRef.current?.getValue();\r\n this.setState({\r\n filterParams: { ...newFilterParams },\r\n });\r\n const sortParam = this.getSortParam(this.state.sorter);\r\n this.store.load({\r\n params: { ...newFilterParams, ...sortParam },\r\n });\r\n }}\r\n size=\"small\"\r\n className={getLess(styles, \"nsc-table-search-button\")}\r\n >\r\n 查询\r\n </Button>\r\n </Space>\r\n </div>\r\n );\r\n },\r\n filterIcon: () => {\r\n return <SearchOutlined />;\r\n },\r\n ...obj,\r\n };\r\n cols[index] = obj;\r\n }\r\n });\r\n return cols;\r\n }\r\n renderToolBar() {\r\n let { tableSize, keyColumns, sortType } = this.state;\r\n let { filterColumn, columns: colLists, toolbar } = this.props;\r\n const { tableTool, storeRequestConfig = {} } = config();\r\n let tools = [\"refresh\", \"size\", \"sort\", \"column\"];\r\n let toolsClick = {} as any;\r\n if (toolbar == true) {\r\n tools = [\"refresh\", \"size\", \"sort\", \"column\"];\r\n } else {\r\n tools = toolbar.tools\r\n ? toolbar.tools\r\n : tableTool.tools\r\n ? tableTool.tools\r\n : tools;\r\n toolsClick = toolbar.onToolClick ? toolbar.onToolClick : {};\r\n }\r\n const sizeItem = [\r\n { title: \"宽松\", key: \"default\" },\r\n { title: \"中等\", key: \"middle\" },\r\n { title: \"紧凑\", key: \"small\" },\r\n ];\r\n const sortItem = [\r\n { title: \"单字段排序\", key: \"single\" },\r\n { title: \"多字段排序\", key: \"multiple\" },\r\n ];\r\n const sortContent = (\r\n <>\r\n <div\r\n className={getLess(styles, \"nsc-table-cotent-title\")}\r\n style={{\r\n cursor: this.state.defaultSort ? \"not-allowed\" : \"pointer\",\r\n color: this.state.defaultSort && \"rgba(0,0,0,.45)\",\r\n }}\r\n onClick={() => {\r\n if (this.state.defaultSort) {\r\n return;\r\n }\r\n this.setState({ sorter: [], sortInfo: {}, defaultSort: true });\r\n const params = { ...this.state.filterParams };\r\n this.store.reload({ params });\r\n }}\r\n >\r\n 恢复默认排序\r\n </div>\r\n {sortItem.map((item, index) => {\r\n return (\r\n <div\r\n key={item.key}\r\n onClick={() => {\r\n this.setState({\r\n sorter: [],\r\n sortInfo: {},\r\n sortType: item.key,\r\n defaultSort: false,\r\n });\r\n const params = { ...this.state.filterParams };\r\n this.store.reload({ params });\r\n }}\r\n >\r\n {sortType == item.key ? (\r\n <a>\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}>\r\n {sortType == item.key && <CheckOutlined />}\r\n </div>\r\n <div> {item.title}</div>\r\n </div>\r\n </a>\r\n ) : (\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}></div>\r\n <div> {item.title}</div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n {this.state.sorter.length > 0 && (\r\n <>\r\n <div\r\n className={getLess(styles, \"nsc-table-cotent-title\")}\r\n style={{ color: \"rgba(0,0,0,.45)\" }}\r\n >\r\n 当前排序\r\n </div>\r\n {this.state.sorter.map((item, index) => {\r\n return (\r\n <div\r\n className={getLess(styles, \"nsc-table-content-tiem\")}\r\n key={index}\r\n >\r\n <div style={{ width: 20 }}>\r\n {item.order == \"ascend\" ? (\r\n <SortAscendingOutlined />\r\n ) : (\r\n <SortDescendingOutlined />\r\n )}\r\n </div>\r\n <div> {item.column.title}</div>\r\n </div>\r\n );\r\n })}\r\n </>\r\n )}\r\n </>\r\n );\r\n const sizeContent = (\r\n <>\r\n <div className={getLess(styles, \"nsc-table-cotent-title\")}>\r\n 表格密度\r\n </div>\r\n {sizeItem.map((item, index) => {\r\n return (\r\n <div\r\n key={item.key}\r\n onClick={() => {\r\n this.setState({\r\n tableSize: item.key,\r\n });\r\n }}\r\n >\r\n {tableSize == item.key ? (\r\n <a>\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}>\r\n {tableSize == item.key && <CheckOutlined />}\r\n </div>\r\n <div> {item.title}</div>\r\n </div>\r\n </a>\r\n ) : (\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}></div>\r\n <div> {item.title}</div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </>\r\n );\r\n const newMapData = getFlattenData(keyColumns, {\r\n keyField: \"uniqueKey\",\r\n childField: \"children\",\r\n });\r\n const content = Object.keys(newMapData).map((key) => {\r\n return (\r\n <Checkbox\r\n key={key}\r\n onChange={(e) => {\r\n this.filterColumn(key, e.target.checked, newMapData);\r\n }}\r\n checked={this.state.checkColumn.includes(newMapData[key].uniqueKey)}\r\n >\r\n {newMapData[key].title}\r\n </Checkbox>\r\n );\r\n });\r\n return (\r\n <div className={getLess(styles, \"nsc-table-tool-bar\")}>\r\n {tools.indexOf(\"column\") > -1 && (\r\n <div style={{ fontSize: 14 }}>\r\n <Popover\r\n title=\"选择显示的列\"\r\n content={content}\r\n placement=\"bottomRight\"\r\n trigger=\"click\"\r\n overlayStyle={{ minWidth: 410, maxWidth: 450 }}\r\n >\r\n <AppstoreOutlined\r\n className={getLess(styles, \"nsc-table-th-app-store-icon\")}\r\n />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"sort\") > -1 && (\r\n <div style={{ marginRight: 8, fontSize: 14 }}>\r\n <Popover placement=\"bottom\" content={sortContent} trigger=\"click\">\r\n <SortAscendingOutlined />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"size\") > -1 && (\r\n <div style={{ marginRight: 8, fontSize: 14 }}>\r\n <Popover placement=\"bottom\" content={sizeContent} trigger=\"click\">\r\n <ColumnHeightOutlined />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"refresh\") > -1 && (\r\n <div\r\n style={{ marginRight: 8, fontSize: 14, cursor: \"pointer\" }}\r\n onClick={() => {\r\n const params = { ...this.state.filterParams };\r\n if (toolsClick.onRefresh) {\r\n toolsClick.onRefresh();\r\n } else {\r\n this.store.load({ params });\r\n }\r\n }}\r\n >\r\n <RedoOutlined />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n getSelectedRowKeys() {\r\n return this.state.selectedRowKeys;\r\n }\r\n getSelectedRowDatas() {\r\n return this.state.selectedRowDatas;\r\n }\r\n resetSelectedRowKeys() {\r\n this.setState({\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n });\r\n }\r\n rowSelectionOnSelect(record: any, selected: any) {\r\n const { selectedRowKeys, selectedRowDatas } = this.state;\r\n let { rowKey = \"id\" } = this.props;\r\n let newSelectedRowKeys = [...selectedRowKeys];\r\n let newSelectedRowDatas = [...selectedRowDatas];\r\n if (selected) {\r\n newSelectedRowKeys = [...newSelectedRowKeys, record[rowKey]];\r\n newSelectedRowDatas = [...newSelectedRowDatas, record];\r\n } else {\r\n selectedRowKeys.map((item: any, index: any) => {\r\n if (item === record[rowKey]) {\r\n newSelectedRowKeys.splice(index, 1);\r\n }\r\n });\r\n selectedRowDatas.map((item: any, index: any) => {\r\n if (item[rowKey] === record[rowKey]) {\r\n newSelectedRowDatas.splice(index, 1);\r\n }\r\n });\r\n }\r\n this.setState({\r\n selectedRowKeys: newSelectedRowKeys,\r\n selectedRowDatas: newSelectedRowDatas,\r\n });\r\n }\r\n rowSelectionOnSelectAll(selected: any, selectedRows: any, changeRows: any) {\r\n const { selectedRowKeys, selectedRowDatas } = this.state;\r\n const { rowKey = \"id\" } = this.props;\r\n let newids: any = [];\r\n let newdatas: any = [];\r\n if (changeRows.length > 0) {\r\n let changeIds = changeRows.map((item: any) => item[rowKey]);\r\n if (selected) {\r\n newids = [...selectedRowKeys, ...changeIds];\r\n newdatas = [...selectedRowDatas, ...changeRows];\r\n } else {\r\n selectedRowKeys.map((item: any, index: any) => {\r\n if (changeIds.indexOf(item) == -1) {\r\n newids.push(item);\r\n }\r\n });\r\n selectedRowDatas.map((item: any, index: any) => {\r\n if (changeIds.indexOf(item[rowKey]) == -1) {\r\n newdatas.push(item);\r\n }\r\n });\r\n }\r\n } else {\r\n newids = [...selectedRowKeys];\r\n newdatas = [...selectedRowDatas];\r\n }\r\n this.setState({\r\n selectedRowKeys: [...newids],\r\n selectedRowDatas: [...newdatas],\r\n });\r\n }\r\n render() {\r\n let _this = this,\r\n {\r\n loading,\r\n dataSource,\r\n pagination = {},\r\n searchText,\r\n fieldOption,\r\n searchColor,\r\n tableSize,\r\n } = this.state,\r\n props = utils.omit(\r\n this.props,\r\n [\r\n \"store\",\r\n \"onChange\",\r\n \"columns\",\r\n \"resetColumn\",\r\n \"toolbar\",\r\n \"sortFields\",\r\n \"filterColumn\",\r\n \"sortSearch\",\r\n \"showRowSelection\",\r\n \"pageType\",\r\n ],\r\n {\r\n rowKey: \"id\",\r\n clickChangeColor: false,\r\n }\r\n );\r\n if (props.pagination !== false) {\r\n props.pagination = {\r\n position: [\"bottomRight\"],\r\n showSizeChanger: true,\r\n showQuickJumper: true,\r\n ...pagination,\r\n ...props.pagination,\r\n };\r\n if (props.showTotal == true) {\r\n props.pagination.showTotal = function (total, [from, to]) {\r\n // return \"显示 \" + from + \" - \" + to + \"条,共 \" + total + \" 条\";\r\n return \"共 \" + total + \" 条\";\r\n };\r\n }\r\n }\r\n props.onChange = function (pagination, filters, sorter, extra) {\r\n _this.onChange(_this.state.pagination, filters, sorter, extra);\r\n };\r\n if (props.clickChangeColor) {\r\n const onRowFn = props.onRow;\r\n props.onRow = function (record, index) {\r\n var custom = onRowFn ? onRowFn(record, index) : {};\r\n const onClickFn = custom.onClick;\r\n custom.onClick = (event) => {\r\n _this.setState({\r\n activeIndex: index, //获取点击行的索引\r\n });\r\n utils.callback(onClickFn, _this, [event]);\r\n };\r\n return custom;\r\n };\r\n props.rowClassName = function (record, index) {\r\n return index === _this.state.activeIndex\r\n ? \"nsc-table-clickRowStyle\"\r\n : \"\";\r\n };\r\n }\r\n let newDataSource = [];\r\n if (searchText) {\r\n const data = treeUtils.getSearchMenuDatas(\r\n this,\r\n searchText,\r\n fieldOption,\r\n searchColor\r\n );\r\n newDataSource = data.treeDatas;\r\n props.expandedRowKeys = data.openKeys;\r\n } else {\r\n newDataSource = dataSource;\r\n }\r\n props.store = props.store || {};\r\n props.store.autoLoad = props.store.autoLoad === false ? false : true;\r\n const { dragable } = _this.props;\r\n const dragableProps =\r\n dragable === true\r\n ? {\r\n components: BodyRowComponent,\r\n onRow: (record, index) => ({\r\n index,\r\n record,\r\n moveRow: this.moveRow,\r\n }),\r\n }\r\n : {};\r\n let { resizeColumn } = this.props;\r\n\r\n const resizeProps =\r\n resizeColumn === true ? { components: this.components } : null;\r\n const { tableTool } = config();\r\n let toolFlag = false;\r\n // console.log('tableTool',tableTool)\r\n\r\n if (tableTool.show === true) {\r\n toolFlag = true;\r\n }\r\n if (this.props.toolbar && this.props.toolbar.show === true) {\r\n toolFlag = true;\r\n }\r\n if (this.props.showRowSelection) {\r\n const { rowSelection = {} } = this.props;\r\n props = {\r\n ...props,\r\n rowSelection: {\r\n selectedRowKeys: this.state.selectedRowKeys,\r\n onSelect: this.rowSelectionOnSelect.bind(this),\r\n onSelectAll: this.rowSelectionOnSelectAll.bind(this),\r\n columnWidth: 40,\r\n ...rowSelection,\r\n },\r\n };\r\n }\r\n const { tableProps: configTableProps } = config();\r\n const DefaultTable = (\r\n <div className={getLess(styles, \"nsc-table\")}>\r\n {toolFlag && this.renderToolBar()}\r\n <Table\r\n childrenColumnName=\"childNodes\"\r\n sheitem\r\n dataSource={newDataSource}\r\n columns={this.getColumns()}\r\n loading={loading}\r\n className={cls(getLess(styles, \"nsc-table-content\"), props.className)}\r\n locale={{\r\n emptyText: (\r\n <NoData className={getLess(styles, \"nsc-table-nodata\")} />\r\n ),\r\n }}\r\n scroll={{ x: \"max-content\" }}\r\n {...configTableProps}\r\n {...resizeProps}\r\n {...props}\r\n {...dragableProps}\r\n size={tableSize}\r\n pagination={false}\r\n // style={{ height: 600 }}\r\n />\r\n {props.pagination !== false && (\r\n <div className={getLess(styles, \"nsc-table-pagination\")}>\r\n <Pagination\r\n {...props.pagination}\r\n onChange={(page, pageSize) => {\r\n const extra = this.state.extra;\r\n extra.action = \"paginate\";\r\n this.setState(({ pagination = {} }) => {\r\n return {\r\n pagination: { ...pagination, current: page, pageSize },\r\n };\r\n });\r\n this.onChange(\r\n { current: page, pageSize },\r\n this.state.filter,\r\n this.state.sorter,\r\n extra\r\n );\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n return dragable === true ? (\r\n <DndProvider backend={HTML5Backend}>{DefaultTable}</DndProvider>\r\n ) : (\r\n DefaultTable\r\n );\r\n }\r\n}\r\n\r\nexport default withZhLocale(NSCTable);\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["AppstoreOutlined","CheckOutlined","ColumnHeightOutlined","SearchOutlined","SortAscendingOutlined","SortDescendingOutlined","RedoOutlined","isEmptyObj","Store","PageStore","utils","React","DndProvider","BodyRow","DndContextType","IBodyRowProps","treeUtils","BodyRowComponent","HTML5Backend","withZhLocale","Resizable","getLess","getNode","NoData","guid","getFlattenData","getStorage","config","cls","styles","ResizeableTitle","props","onResize","width","restProps","_objectWithoutProperties","_excluded","createElement","height","draggableOpts","enableUserSelectHack","NSCTable","Component","constructor","_autoType","_defineProperty","createRef","onBeforeLoad","load","header","cell","index","e","_ref","size","cols","state","nextColumns","_objectSpread","setState","getColumns","ev","data","JSON","parse","_this","eventType","payload","tableSize","dragIndex","hoverIndex","drag","target","dragNode","record","targetNode","moveArray","ids","parentNode","getChildNodeIds","params","id","parentId","attribute","moveRow","store","reload","modal","type","storePrefix","autoType","content","dataSource","columns","loading","pagination","activeIndex","searchText","fieldOption","searchColor","sorts","filterParams","sortType","sorter","sortInfo","defaultSort","checkColumn","defaultCheck","selectedRowKeys","selectedRowDatas","filter","extra","_ref2","listeners","listenersProps","restStore","_excluded2","storeProps","model","component","options","callback","dataChanged","modelData","paging","getPagination","onErrorLoad","err","response","autoLoad","Object","assign","current","getInitCheckedColumns","checkedKeys","traverse","forEach","col","initShow","push","uniqueKey","children","length","generateUniqueKeysAndPaths","parentPath","arguments","undefined","level","map","currentPath","concat","newCol","path","leaf","childrenKeys","child","componentDidMount","resizeColumn","newColumns","defaultCheckedColumns","storeColumns","keyColumns","setData","window","addEventListener","listenMessage","componentWillUnmount","removeEventListener","componentDidUpdate","prevProps","preState","resetColumn","newCols","colss","temp","onHeaderCell","column","handleResize","clearSelectColor","getPaginationByStore","onChange","filters","autoOnChange","autoSort","autoPagination","isMultiple","Array","isArray","handlePagination","p","currentKey","pageSizeKey","pageSize","ascParams","getSortParam","onChangeFn","getStore","getModel","handleSearch","val","filterColumn","checkedValue","isChecked","mapData","currentCheckedKeys","getAllChildrenKeys","keys","allChildrenKeys","includes","key","pathParts","split","i","slice","join","parentCol","values","find","c","allSiblings","hasCheckedSibling","some","_message","warning","filterColumns","filterColumnsByCheckedKeys","result","isColumnChecked","filteredChildren","sortState","sortSearch","orderItems","field","dataIndex","asc","order","v","stringify","isBeyond","event","textRange","el","textContent","targetW","getBoundingClientRect","range","document","createRange","setStart","setEnd","childNodes","rangeWidth","setSelectedRowKeys","setSelectedRowDatas","sortFields","defaultShowCols","ellipsis","render","showTitle","text","_this$state$cols","currentCol","actualWidth","colWidth","colWidthObj","small","middle","default","large","paddingWidth","style","display","ref","removeAttribute","scrollWidth","clientWidth","setAttribute","className","overflow","textOverflow","whiteSpace","indexOf","sortOrder","multiple","item","filterProps","obj","searchKey","Div","title","placeholder","tableSearchRef","filterDropdown","_ref3","setSelectedKeys","selectedKeys","confirm","clearFilters","_Space","_Button","onClick","_this$tableSearchRef$","newFilterParams","getValue","sortParam","filterIcon","renderToolBar","colLists","toolbar","tableTool","storeRequestConfig","tools","toolsClick","onToolClick","sizeItem","sortItem","sortContent","Fragment","cursor","color","sizeContent","newMapData","keyField","childField","_Checkbox","checked","fontSize","_Popover","placement","trigger","overlayStyle","minWidth","maxWidth","marginRight","onRefresh","getSelectedRowKeys","getSelectedRowDatas","resetSelectedRowKeys","rowSelectionOnSelect","selected","rowKey","newSelectedRowKeys","newSelectedRowDatas","splice","rowSelectionOnSelectAll","selectedRows","changeRows","newids","newdatas","changeIds","omit","clickChangeColor","position","showSizeChanger","showQuickJumper","showTotal","total","_ref4","from","to","onRowFn","onRow","custom","onClickFn","rowClassName","newDataSource","getSearchMenuDatas","treeDatas","expandedRowKeys","openKeys","dragable","dragableProps","components","resizeProps","toolFlag","show","showRowSelection","rowSelection","onSelect","bind","onSelectAll","columnWidth","tableProps","configTableProps","DefaultTable","_Table","_extends","childrenColumnName","sheitem","locale","emptyText","scroll","x","_Pagination","page","action","_ref5","backend","dragUrl"],"sources":["../../../src/components/base/table/index.tsx"],"sourcesContent":["/*\r\n * @Descripttion:\r\n * @version:\r\n * @Author: rxzhu\r\n * @Date: 2021-03-23 08:46:20\r\n * @LastEditors: rxzhu\r\n * @LastEditTime: 2021-03-23 10:30:42\r\n */\r\nimport {\r\n AppstoreOutlined,\r\n CheckOutlined,\r\n ColumnHeightOutlined,\r\n SearchOutlined,\r\n SortAscendingOutlined,\r\n SortDescendingOutlined,\r\n RedoOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { isEmptyObj } from \"@bj-nsc/functions\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n CheckboxOptionType,\r\n Menu,\r\n message,\r\n Pagination,\r\n Popover,\r\n Space,\r\n Table,\r\n TableProps,\r\n Tooltip,\r\n} from \"antd\";\r\nimport { ColumnType, TablePaginationConfig } from \"antd/lib/table\";\r\nimport * as React from \"react\";\r\nimport { DndProvider } from \"react-dnd\";\r\nimport BodyRow, { DndContextType, IBodyRowProps } from \"../common/BodyRow\";\r\nimport treeUtils from \"../../treeUtils\";\r\nimport \"./index.module.less\";\r\nconst { BodyRowComponent, HTML5Backend } = BodyRow;\r\nimport withZhLocale from \"../common/withZhLocale\";\r\nimport { Resizable } from \"react-resizable\";\r\nimport \"./resize.module.less\";\r\nimport { getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport NoData from \"../common/NoData\";\r\nimport { guid, getFlattenData, getStorage } from \"@bj-nsc/functions\";\r\nimport config from \"../../config\";\r\nimport EllipseCell from \"../common/EllipseCell\";\r\nimport cls from \"classnames\";\r\nimport isEqual from \"lodash/isEqual\";\r\nconst styles = null;\r\ninterface IDragParams {\r\n id: string | number;\r\n ids: Array<string | number>;\r\n parentId: string | number;\r\n}\r\n// interface StoreProps {}\r\n\r\nexport type StoreType = \"PageStore\" | \"TreeStore\" | \"BaseStore\";\r\n\r\ninterface NSCTablePagination extends TablePaginationConfig {\r\n totalKey?: string;\r\n pageSizeKey?: string;\r\n currentKey?: string;\r\n}\r\n\r\ninterface ToolBarProps {\r\n show: boolean;\r\n tools?: Array<string>;\r\n onToolClick?: { onRefresh?: any; onSort?: any };\r\n}\r\ninterface NSCTableProps extends TableProps<any> {\r\n store?: StoreProps;\r\n showTotal?: boolean; // 是否显示总条数信息,默认true\r\n dragable?: boolean; // 是否可拖动, 默认false\r\n filterColumn?: boolean; // 是否支持过滤显示表格列, 默认true\r\n moveRow?: (params: IDragParams) => void; // 拖拽完成后的回调\r\n dragUrl?: string; // 保存拖拽排序的接口\r\n pagination?: false | NSCTablePagination;\r\n autoPagination?: boolean; // 组件是否自动处理分页\r\n autoSort?: boolean; //组件是否自动处理排序\r\n autoOnChange?: boolean; // 组件是否自动onChange, false则不做任何处理全部交给调用方\r\n resizeColumn?: boolean;\r\n sortFields?: Array<string>; //需要排序的字段Index\r\n toolbar?: ToolBarProps | boolean;\r\n autoSize?: boolean;\r\n sortSearch?: boolean; //是否添加排序查询,默认true\r\n showRowSelection?: boolean;\r\n rowKey?: string;\r\n [propsName: string]: any;\r\n}\r\n\r\nexport type INSCTableProps = typeof NSCTable.defaultProps & NSCTableProps;\r\nexport { DndContextType, IBodyRowProps };\r\n\r\nconst ResizeableTitle = (props: any) => {\r\n const { onResize, width, ...restProps } = props;\r\n return (\r\n <Resizable\r\n width={width || 150}\r\n height={0}\r\n onResize={onResize}\r\n draggableOpts={{ enableUserSelectHack: false }}\r\n >\r\n <th {...restProps} />\r\n </Resizable>\r\n );\r\n};\r\nclass NSCTable extends React.Component<INSCTableProps, any> {\r\n static defaultProps = {\r\n dragable: false,\r\n showTotal: true,\r\n filterColumn: true,\r\n dragUrl: \"\",\r\n autoPagination: true,\r\n autoSort: true,\r\n autoOnChange: true,\r\n resizeColumn: true,\r\n toolbar: {\r\n show: false,\r\n onToolClick: {} as any,\r\n tools: [] as any,\r\n } as any,\r\n };\r\n\r\n store = {} as StoreProps;\r\n thIconRef = React.createRef<HTMLDivElement>();\r\n tableSearchRef = React.createRef<any>();\r\n\r\n listeners = {\r\n onBeforeLoad: null,\r\n load: null,\r\n };\r\n\r\n components = {\r\n header: {\r\n cell: ResizeableTitle,\r\n },\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n let modal = props.type || \"auto\";\r\n let storePrefix = getStorage(\"store-pre-key\");\r\n let autoType = getStorage(\r\n storePrefix ? storePrefix + \"tableSize\" : \"tableSize\"\r\n );\r\n autoType = autoType?.content;\r\n this.state = {\r\n dataSource: [],\r\n columns: [],\r\n loading: false,\r\n pagination: {},\r\n activeIndex: -1,\r\n //搜索文本\r\n searchText: null,\r\n fieldOption: null,\r\n searchColor: null,\r\n cols: [],\r\n sorts: [],\r\n filterParams: {},\r\n tableSize: this.props.size || autoType || \"default\",\r\n sortType: \"single\",\r\n sorter: [], //记录当前排序字段\r\n sortInfo: {},\r\n defaultSort: true,\r\n checkColumn: [],\r\n defaultCheck: true,\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n filter: [],\r\n extra: {},\r\n };\r\n if (props.store instanceof Store) {\r\n this.store = props.store;\r\n } else {\r\n const { listeners: listenersProps = {}, ...restStore } =\r\n props.store || {};\r\n const storeProps = {\r\n model: \"model\",\r\n component: this,\r\n listeners: {\r\n onBeforeLoad: (store, options) => {\r\n this.setState({ loading: true });\r\n utils.callback(listenersProps.onBeforeLoad, this, [store, options]);\r\n },\r\n dataChanged: (data, modelData, store) => {\r\n let paging = !(this.props.pagination === false);\r\n if (paging && !this.props.dataSource) {\r\n this.setState({\r\n dataSource: modelData,\r\n pagination: store.getPagination(),\r\n loading: false,\r\n activeIndex: -1,\r\n });\r\n } else {\r\n this.setState({ dataSource: modelData, loading: false });\r\n }\r\n utils.callback(listenersProps.dataChanged, this, [\r\n data,\r\n modelData,\r\n store,\r\n paging,\r\n ]);\r\n },\r\n load: (data, modelData, store) => {\r\n utils.callback(listenersProps.load, this, [data, modelData, store]);\r\n },\r\n onErrorLoad: (err, response) => {\r\n this.setState({ loading: false });\r\n utils.callback(listenersProps.onErrorLoad, this, [err, response]);\r\n },\r\n },\r\n data: restStore.data\r\n ? restStore.data\r\n : props.dataSource\r\n ? props.dataSource\r\n : null,\r\n ...restStore,\r\n autoLoad: restStore.autoLoad === false ? false : true,\r\n };\r\n this.store = new PageStore(\r\n Object.assign({}, storeProps, {\r\n pagination: { current: 1, ...this.props.pagination },\r\n })\r\n );\r\n }\r\n }\r\n\r\n handleResize =\r\n (index: any) =>\r\n (e: any, { size }: any) => {\r\n const { cols } = this.state;\r\n const nextColumns = [...cols];\r\n nextColumns[index] = {\r\n ...nextColumns[index],\r\n width: size.width,\r\n };\r\n this.setState(\r\n {\r\n cols: nextColumns,\r\n },\r\n () => {\r\n // 在状态更新后重新获取列配置\r\n this.getColumns();\r\n }\r\n );\r\n };\r\n getInitCheckedColumns(columns: any[]): string[] {\r\n let checkedKeys: string[] = [];\r\n\r\n const traverse = (cols: any[]) => {\r\n cols.forEach((col) => {\r\n // 如果列没有明确设置 initShow 为 false,则认为是默认选中的\r\n if (col.initShow !== false) {\r\n checkedKeys.push(col.uniqueKey);\r\n }\r\n\r\n // 递归处理子列\r\n if (col.children && col.children.length > 0) {\r\n traverse(col.children);\r\n }\r\n });\r\n };\r\n\r\n traverse(columns);\r\n return checkedKeys;\r\n }\r\n generateUniqueKeysAndPaths(\r\n columns: any[],\r\n parentPath: string = \"\",\r\n level: number = 0\r\n ): any[] {\r\n return columns.map((col, index) => {\r\n // 生成唯一key\r\n const uniqueKey = col.uniqueKey || guid();\r\n\r\n // 构建当前节点的path,格式为: parentPath/identifier_key\r\n const currentPath = parentPath\r\n ? `${parentPath}/${uniqueKey}`\r\n : `${uniqueKey}`;\r\n\r\n // 创建新的列对象\r\n const newCol = {\r\n ...col,\r\n uniqueKey: uniqueKey,\r\n path: currentPath,\r\n };\r\n\r\n // 判断是否为叶子节点\r\n if (!newCol.children || newCol.children.length === 0) {\r\n // 最后一层子项\r\n newCol.leaf = true;\r\n } else {\r\n // 有子项的节点\r\n newCol.leaf = false;\r\n\r\n // 递归处理子项\r\n newCol.children = this.generateUniqueKeysAndPaths(\r\n newCol.children,\r\n currentPath,\r\n level + 1\r\n );\r\n\r\n // 为父节点添加所有子项的uniqueKey数组\r\n newCol.childrenKeys = newCol.children.map(\r\n (child: any) => child.uniqueKey\r\n );\r\n }\r\n\r\n return newCol;\r\n });\r\n }\r\n componentDidMount() {\r\n const { resizeColumn } = this.props;\r\n const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);\r\n const defaultCheckedColumns = this.getInitCheckedColumns(newColumns);\r\n // if (!resizeColumn) {\r\n // this.setState({ columns: [...this.props.columns] });\r\n // } else {\r\n // this.setState({ cols: [...this.props.columns] });\r\n // }\r\n\r\n if (!resizeColumn) {\r\n this.setState({\r\n columns: newColumns,\r\n storeColumns: [...this.props.columns],\r\n checkColumn: defaultCheckedColumns,\r\n keyColumns: newColumns,\r\n });\r\n } else {\r\n this.setState({\r\n cols: newColumns, //修改列宽\r\n columns: newColumns, //table组件使用\r\n storeColumns: [...this.props.columns], //原始列,用于判断是有列有更新\r\n checkColumn: defaultCheckedColumns, //默认选中的列\r\n keyColumns: newColumns, //提供带标识的完整列结构,用于构建列选择界面\r\n });\r\n }\r\n\r\n const store = this.props.store;\r\n if (store && store.data) {\r\n this.store.setData(store.data);\r\n }\r\n window.addEventListener(\"message\", this.listenMessage);\r\n }\r\n componentWillUnmount() {\r\n window.removeEventListener(\"message\", this.listenMessage);\r\n }\r\n listenMessage = (ev) => {\r\n const data = typeof ev.data === \"string\" ? JSON.parse(ev.data) : ev.data;\r\n let _this = this;\r\n if (data.eventType == \"changeTableSize\") {\r\n const { payload } = data;\r\n if (\r\n payload.size == \"default\" ||\r\n payload.size == \"small\" ||\r\n payload.size == \"middle\"\r\n ) {\r\n _this.setState({ tableSize: payload.size });\r\n }\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps, preState) {\r\n const { resizeColumn } = this.props;\r\n const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);\r\n const defaultCheckedColumns = this.getInitCheckedColumns(newColumns);\r\n if (!resizeColumn) {\r\n if (this.props.columns !== prevProps.columns) {\r\n this.setState({\r\n columns: newColumns,\r\n storeColumns: [...this.props.columns],\r\n checkColumn: defaultCheckedColumns,\r\n keyColumns: newColumns,\r\n });\r\n }\r\n } else {\r\n if (preState.cols !== this.state.cols) {\r\n this.resetColumn();\r\n }\r\n if (this.props.columns !== prevProps.columns) {\r\n this.setState({\r\n cols: newColumns, //修改列宽\r\n columns: newColumns, //table组件使用\r\n storeColumns: [...this.props.columns], //原始列,用于判断是有列有更新\r\n checkColumn: defaultCheckedColumns, //默认选中的列\r\n keyColumns: newColumns, //提供带标识的完整列结构,用于构建列选择界面\r\n });\r\n }\r\n if (prevProps.size !== this.props.size) {\r\n this.setState({ tableSize: this.props.size });\r\n }\r\n }\r\n }\r\n resetColumn() {\r\n const { cols } = this.state;\r\n const newCols: any = [];\r\n let colss = cols || [];\r\n colss.map((col: any, index: any) => {\r\n let temp = {\r\n ...col,\r\n onHeaderCell: (column: { width: any }) => ({\r\n width: column.width,\r\n onResize: this.handleResize(index),\r\n }),\r\n };\r\n newCols.push(temp);\r\n });\r\n this.setState({\r\n columns: newCols,\r\n });\r\n }\r\n\r\n /**\r\n * 清除选中颜色\r\n */\r\n clearSelectColor() {\r\n this.setState({ activeIndex: -1 });\r\n return this;\r\n }\r\n\r\n getPaginationByStore() {\r\n return this.store.getPagination();\r\n }\r\n\r\n onChange(pagination, filters, sorter, extra) {\r\n const {\r\n autoOnChange = true,\r\n autoSort,\r\n autoPagination,\r\n onChange,\r\n store,\r\n } = this.props;\r\n const { filterParams } = this.state;\r\n const isMultiple = Array.isArray(sorter);\r\n if (autoOnChange === false || !store) {\r\n onChange && onChange(pagination, filters, sorter, extra);\r\n return;\r\n }\r\n const handlePagination = () => {\r\n let params = {} as {\r\n size?: string;\r\n pageSize?: string;\r\n ascs?: string;\r\n descs?: string;\r\n [propName: string]: string;\r\n };\r\n const paging = this.getPaginationByStore() || {};\r\n if (!isEmptyObj(pagination)) {\r\n const p = {\r\n [paging.currentKey || \"current\"]: pagination.current,\r\n [paging.pageSizeKey || \"size\"]: pagination.pageSize,\r\n };\r\n Object.assign(params, p);\r\n }\r\n let ascParams = this.getSortParam(sorter, true);\r\n if (isMultiple) {\r\n this.setState({ sorter });\r\n } else if (!isMultiple && !isEmptyObj(sorter)) {\r\n sorter.column &&\r\n this.setState({ sorter: [sorter], defaultSort: false });\r\n } else {\r\n this.setState({ sorter: [] });\r\n }\r\n this.setState({\r\n filters,\r\n extra,\r\n });\r\n params = { ...filterParams, ...params, ...ascParams };\r\n autoSort && this.store.reload({ params });\r\n };\r\n\r\n const onChangeFn = this.props.onChange;\r\n\r\n autoPagination && handlePagination();\r\n // 用户传了onChange保留用户自主处理表格变化的权力\r\n if (onChangeFn) {\r\n utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);\r\n }\r\n }\r\n\r\n getStore() {\r\n return this.store;\r\n }\r\n\r\n /**\r\n * 获取数据模型对象\r\n */\r\n getModel() {\r\n return this.store.getModel();\r\n }\r\n\r\n /**\r\n * 菜单搜索过滤显示\r\n * @param {String} val\r\n */\r\n handleSearch(val, fieldOption, searchColor) {\r\n this.setState({\r\n searchText: val,\r\n fieldOption: fieldOption,\r\n searchColor: searchColor,\r\n });\r\n }\r\n\r\n /**\r\n * 模块列表移动排序\r\n */\r\n moveRow = (dragIndex, hoverIndex, drag, target) => {\r\n const _this = this;\r\n let dragNode = drag.record;\r\n let targetNode = target.record;\r\n dragNode.moveArray(dragNode, targetNode);\r\n let ids = dragNode.parentNode.getChildNodeIds();\r\n let params = {\r\n id: dragNode.id,\r\n parentId: dragNode.attribute.parentId,\r\n ids: ids,\r\n };\r\n\r\n if (this.props.moveRow) {\r\n this.props.moveRow(params);\r\n } else {\r\n this.store.reload();\r\n }\r\n };\r\n\r\n filterColumn(checkedValue, isChecked, mapData) {\r\n const col = mapData[checkedValue];\r\n let currentCheckedKeys = [...this.state.checkColumn];\r\n // 获取所有子节点的 keys(包括深层嵌套的节点)\r\n const getAllChildrenKeys = (column) => {\r\n let keys = [];\r\n if (column.children && column.children.length > 0) {\r\n column.children.forEach((child) => {\r\n keys.push(child.uniqueKey);\r\n keys = keys.concat(getAllChildrenKeys(child));\r\n });\r\n }\r\n return keys;\r\n };\r\n\r\n if (col.children) {\r\n // 处理父节点\r\n const allChildrenKeys = getAllChildrenKeys(col);\r\n\r\n if (isChecked) {\r\n // 选中父节点:添加父节点和所有子孙节点\r\n if (!currentCheckedKeys.includes(col.uniqueKey)) {\r\n currentCheckedKeys.push(col.uniqueKey);\r\n }\r\n allChildrenKeys.forEach((key) => {\r\n if (!currentCheckedKeys.includes(key)) {\r\n currentCheckedKeys.push(key);\r\n }\r\n });\r\n } else {\r\n // 取消选中父节点:移除父节点和所有子孙节点\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== col.uniqueKey && !allChildrenKeys.includes(key)\r\n );\r\n }\r\n } else {\r\n // 处理叶子节点\r\n if (isChecked) {\r\n if (!currentCheckedKeys.includes(col.uniqueKey)) {\r\n currentCheckedKeys.push(col.uniqueKey);\r\n }\r\n } else {\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== col.uniqueKey\r\n );\r\n\r\n // 检查父节点是否需要取消选中\r\n if (col.path) {\r\n const pathParts = col.path.split(\"/\");\r\n // 从当前节点向上遍历所有父节点\r\n for (let i = pathParts.length - 2; i >= 0; i--) {\r\n const parentPath = pathParts.slice(0, i + 1).join(\"/\");\r\n const parentCol: any = Object.values(mapData).find(\r\n (c: any) => c.path === parentPath\r\n );\r\n if (parentCol) {\r\n // 检查父节点是否还有其他子节点被选中\r\n const allSiblings = getAllChildrenKeys(parentCol);\r\n const hasCheckedSibling = allSiblings.some(\r\n (key) =>\r\n key !== col.uniqueKey && currentCheckedKeys.includes(key)\r\n );\r\n\r\n if (!hasCheckedSibling) {\r\n currentCheckedKeys = currentCheckedKeys.filter(\r\n (key) => key !== parentCol.uniqueKey\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (currentCheckedKeys.length === 0) {\r\n message.warning(\"至少显示一列!\");\r\n return;\r\n }\r\n\r\n const { keyColumns } = this.state;\r\n const filterColumns = this.filterColumnsByCheckedKeys(\r\n keyColumns,\r\n currentCheckedKeys\r\n );\r\n\r\n // 更新状态\r\n this.setState(\r\n {\r\n checkColumn: currentCheckedKeys,\r\n columns: filterColumns,\r\n cols: filterColumns,\r\n }\r\n // () => {\r\n // // 添加回调确保在状态更新后重新设置列宽调整相关属性\r\n // if (this.props.resizeColumn) {\r\n // this.resetColumn();\r\n // }\r\n // }\r\n );\r\n }\r\n filterColumnsByCheckedKeys(columns: any[], checkedKeys: string[]): any[] {\r\n if (!columns || !Array.isArray(columns) || columns.length === 0) {\r\n return [];\r\n }\r\n\r\n const result: any[] = [];\r\n\r\n columns.forEach((col) => {\r\n // 检查当前列是否在选中列表中\r\n const isColumnChecked = checkedKeys.includes(col.uniqueKey);\r\n if (isColumnChecked) {\r\n // 如果当前列被选中,直接添加\r\n const newCol = { ...col };\r\n // 如果有子列,递归处理\r\n if (newCol.children && newCol.children.length > 0) {\r\n newCol.children = this.filterColumnsByCheckedKeys(\r\n newCol.children,\r\n checkedKeys\r\n );\r\n }\r\n result.push(newCol);\r\n } else {\r\n // 如果当前列未被选中,检查是否有子列被选中\r\n if (col.children && col.children.length > 0) {\r\n const filteredChildren = this.filterColumnsByCheckedKeys(\r\n col.children,\r\n checkedKeys\r\n );\r\n if (filteredChildren.length > 0) {\r\n // 如果有子列被选中,则添加该列(作为容器)\r\n const newCol = { ...col };\r\n newCol.children = filteredChildren;\r\n result.push(newCol);\r\n }\r\n }\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n getSortParam(sorter, sortState = false) {\r\n const isMultiple = Array.isArray(sorter);\r\n const { sortSearch = true } = this.props;\r\n if (!sortSearch) {\r\n return {};\r\n }\r\n let sortInfo = {};\r\n let orderItems = [];\r\n if (!isEmptyObj(sorter) && !isMultiple && sorter.column) {\r\n orderItems = [\r\n {\r\n column: sorter.column.field || sorter.column.dataIndex,\r\n asc: sorter.order == \"ascend\",\r\n },\r\n ];\r\n if (sorter.column) sortInfo[sorter.column.dataIndex] = sorter.order;\r\n } else if (isMultiple) {\r\n sorter.forEach((v) => {\r\n sortInfo[v.column.dataIndex] = v.order;\r\n let field = v.column.field || v.column.dataIndex;\r\n orderItems.push({\r\n column: field,\r\n asc: v.order == \"ascend\",\r\n });\r\n });\r\n }\r\n if (sortState) {\r\n this.setState({\r\n sortInfo: sortInfo,\r\n });\r\n }\r\n return { orderItems: JSON.stringify(orderItems) };\r\n }\r\n isBeyond(e) {\r\n const ev = window.event || e; // 浏览器兼容,最好写一下\r\n const textRange = (el) => {\r\n const textContent = el;\r\n const targetW = textContent.getBoundingClientRect().width;\r\n const range = document.createRange();\r\n range.setStart(textContent, 0);\r\n range.setEnd(textContent, textContent.childNodes.length);\r\n const rangeWidth = range.getBoundingClientRect().width;\r\n return rangeWidth > targetW;\r\n };\r\n return !textRange(ev.target); // target可以保证当前划过的dom节点一直保持是:el-tooltip__trigger\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n this.setState({\r\n selectedRowKeys: data,\r\n });\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n this.setState({\r\n selectedRowDatas: data,\r\n });\r\n }\r\n getColumns() {\r\n const { columns, sortType, sortInfo } = this.state;\r\n const { sortFields = [], size = \"large\" } = this.props;\r\n const defaultShowCols = columns.filter((cols) => cols.initShow !== false);\r\n const cols = defaultShowCols.map((col, index) => {\r\n // 替换 getColumns 方法中原来的 ellipsis 处理部分\r\n if (col.ellipsis && !col.render) {\r\n col.ellipsis = {\r\n showTitle: false,\r\n };\r\n col.render = (text, record, index) => {\r\n // 获取当前列的实时宽度\r\n const currentCol = this.state.cols?.find((c) => {\r\n // 处理 dataIndex 可能是字符串或数组的情况\r\n if (Array.isArray(c.dataIndex) && Array.isArray(col.dataIndex)) {\r\n return (\r\n JSON.stringify(c.dataIndex) === JSON.stringify(col.dataIndex)\r\n );\r\n }\r\n return c.dataIndex === col.dataIndex;\r\n });\r\n\r\n const actualWidth = currentCol?.width || col.width;\r\n let colWidth: any = \"100%\";\r\n\r\n if (actualWidth) {\r\n const size = this.state.tableSize || this.props.size || \"default\";\r\n const colWidthObj = {\r\n small: 16,\r\n middle: 16,\r\n default: 16,\r\n large: 32,\r\n };\r\n const paddingWidth = colWidthObj[size] || 16;\r\n\r\n if (actualWidth > paddingWidth) {\r\n colWidth = actualWidth - paddingWidth;\r\n } else {\r\n colWidth = actualWidth;\r\n }\r\n }\r\n\r\n return (\r\n <div style={{ display: \"inline-table\", width: \"100%\" }}>\r\n <div\r\n ref={(el) => {\r\n if (el) {\r\n // 清除之前的title\r\n el.removeAttribute(\"title\");\r\n\r\n // 检查文本是否溢出\r\n if (el.scrollWidth > el.clientWidth) {\r\n el.setAttribute(\"title\", text);\r\n }\r\n }\r\n }}\r\n className={getLess(styles, \"nsc-table-text\")}\r\n style={{\r\n width: colWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {text}\r\n </div>\r\n </div>\r\n );\r\n };\r\n }\r\n if (sortFields.indexOf(col.dataIndex) > -1) {\r\n if (sortType == \"single\") {\r\n col.sorter = true;\r\n col.sortOrder = sortInfo[col.dataIndex]\r\n ? sortInfo[col.dataIndex]\r\n : null;\r\n } else if (sortType == \"multiple\") {\r\n col.sorter = { multiple: index };\r\n col.sortOrder = sortInfo[col.dataIndex]\r\n ? sortInfo[col.dataIndex]\r\n : null;\r\n }\r\n }\r\n return col;\r\n });\r\n cols.map((item, index) => {\r\n if (!isEmptyObj(item.filterProps)) {\r\n let obj = { ...item };\r\n const { type, props, searchKey } = item.filterProps;\r\n let Div = null;\r\n let text = item.title;\r\n Div = getNode(type, {\r\n placeholder: `搜索${text}`,\r\n ...props,\r\n ref: this.tableSearchRef,\r\n });\r\n obj = {\r\n filterDropdown: ({\r\n setSelectedKeys,\r\n selectedKeys,\r\n confirm,\r\n clearFilters,\r\n }) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-table-search\")}>\r\n <div className={getLess(styles, \"nsc-table-search-space\")}>\r\n {Div}\r\n </div>\r\n <Space>\r\n <Button\r\n type=\"primary\"\r\n onClick={() => {\r\n confirm();\r\n const { filterParams } = this.state;\r\n let newFilterParams = { ...filterParams };\r\n let key = item.field || item.dataIndex;\r\n newFilterParams[key] =\r\n this.tableSearchRef.current?.getValue();\r\n this.setState({\r\n filterParams: { ...newFilterParams },\r\n });\r\n const sortParam = this.getSortParam(this.state.sorter);\r\n this.store.load({\r\n params: { ...newFilterParams, ...sortParam },\r\n });\r\n }}\r\n size=\"small\"\r\n className={getLess(styles, \"nsc-table-search-button\")}\r\n >\r\n 查询\r\n </Button>\r\n </Space>\r\n </div>\r\n );\r\n },\r\n filterIcon: () => {\r\n return <SearchOutlined />;\r\n },\r\n ...obj,\r\n };\r\n cols[index] = obj;\r\n }\r\n });\r\n return cols;\r\n }\r\n renderToolBar() {\r\n let { tableSize, keyColumns, sortType } = this.state;\r\n let { filterColumn, columns: colLists, toolbar } = this.props;\r\n const { tableTool, storeRequestConfig = {} } = config();\r\n let tools = [\"refresh\", \"size\", \"sort\", \"column\"];\r\n let toolsClick = {} as any;\r\n if (toolbar == true) {\r\n tools = [\"refresh\", \"size\", \"sort\", \"column\"];\r\n } else {\r\n tools = toolbar.tools\r\n ? toolbar.tools\r\n : tableTool.tools\r\n ? tableTool.tools\r\n : tools;\r\n toolsClick = toolbar.onToolClick ? toolbar.onToolClick : {};\r\n }\r\n const sizeItem = [\r\n { title: \"宽松\", key: \"default\" },\r\n { title: \"中等\", key: \"middle\" },\r\n { title: \"紧凑\", key: \"small\" },\r\n ];\r\n const sortItem = [\r\n { title: \"单字段排序\", key: \"single\" },\r\n { title: \"多字段排序\", key: \"multiple\" },\r\n ];\r\n const sortContent = (\r\n <>\r\n <div\r\n className={getLess(styles, \"nsc-table-cotent-title\")}\r\n style={{\r\n cursor: this.state.defaultSort ? \"not-allowed\" : \"pointer\",\r\n color: this.state.defaultSort && \"rgba(0,0,0,.45)\",\r\n }}\r\n onClick={() => {\r\n if (this.state.defaultSort) {\r\n return;\r\n }\r\n this.setState({ sorter: [], sortInfo: {}, defaultSort: true });\r\n const params = { ...this.state.filterParams };\r\n this.store.reload({ params });\r\n }}\r\n >\r\n 恢复默认排序\r\n </div>\r\n {sortItem.map((item, index) => {\r\n return (\r\n <div\r\n key={item.key}\r\n onClick={() => {\r\n this.setState({\r\n sorter: [],\r\n sortInfo: {},\r\n sortType: item.key,\r\n defaultSort: false,\r\n });\r\n const params = { ...this.state.filterParams };\r\n this.store.reload({ params });\r\n }}\r\n >\r\n {sortType == item.key ? (\r\n <a>\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}>\r\n {sortType == item.key && <CheckOutlined />}\r\n </div>\r\n <div> {item.title}</div>\r\n </div>\r\n </a>\r\n ) : (\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}></div>\r\n <div> {item.title}</div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n {this.state.sorter.length > 0 && (\r\n <>\r\n <div\r\n className={getLess(styles, \"nsc-table-cotent-title\")}\r\n style={{ color: \"rgba(0,0,0,.45)\" }}\r\n >\r\n 当前排序\r\n </div>\r\n {this.state.sorter.map((item, index) => {\r\n return (\r\n <div\r\n className={getLess(styles, \"nsc-table-content-tiem\")}\r\n key={index}\r\n >\r\n <div style={{ width: 20 }}>\r\n {item.order == \"ascend\" ? (\r\n <SortAscendingOutlined />\r\n ) : (\r\n <SortDescendingOutlined />\r\n )}\r\n </div>\r\n <div> {item.column.title}</div>\r\n </div>\r\n );\r\n })}\r\n </>\r\n )}\r\n </>\r\n );\r\n const sizeContent = (\r\n <>\r\n <div className={getLess(styles, \"nsc-table-cotent-title\")}>\r\n 表格密度\r\n </div>\r\n {sizeItem.map((item, index) => {\r\n return (\r\n <div\r\n key={item.key}\r\n onClick={() => {\r\n this.setState({\r\n tableSize: item.key,\r\n });\r\n }}\r\n >\r\n {tableSize == item.key ? (\r\n <a>\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}>\r\n {tableSize == item.key && <CheckOutlined />}\r\n </div>\r\n <div> {item.title}</div>\r\n </div>\r\n </a>\r\n ) : (\r\n <div className={getLess(styles, \"nsc-table-content-tiem\")}>\r\n <div style={{ width: 20 }}></div>\r\n <div> {item.title}</div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </>\r\n );\r\n const newMapData = getFlattenData(keyColumns, {\r\n keyField: \"uniqueKey\",\r\n childField: \"children\",\r\n });\r\n const content = Object.keys(newMapData).map((key) => {\r\n return (\r\n <Checkbox\r\n key={key}\r\n onChange={(e) => {\r\n this.filterColumn(key, e.target.checked, newMapData);\r\n }}\r\n checked={this.state.checkColumn.includes(newMapData[key].uniqueKey)}\r\n >\r\n {newMapData[key].title}\r\n </Checkbox>\r\n );\r\n });\r\n return (\r\n <div className={getLess(styles, \"nsc-table-tool-bar\")}>\r\n {tools.indexOf(\"column\") > -1 && (\r\n <div style={{ fontSize: 14 }}>\r\n <Popover\r\n title=\"选择显示的列\"\r\n content={content}\r\n placement=\"bottomRight\"\r\n trigger=\"click\"\r\n overlayStyle={{ minWidth: 410, maxWidth: 450 }}\r\n >\r\n <AppstoreOutlined\r\n className={getLess(styles, \"nsc-table-th-app-store-icon\")}\r\n />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"sort\") > -1 && (\r\n <div style={{ marginRight: 8, fontSize: 14 }}>\r\n <Popover placement=\"bottom\" content={sortContent} trigger=\"click\">\r\n <SortAscendingOutlined />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"size\") > -1 && (\r\n <div style={{ marginRight: 8, fontSize: 14 }}>\r\n <Popover placement=\"bottom\" content={sizeContent} trigger=\"click\">\r\n <ColumnHeightOutlined />\r\n </Popover>\r\n </div>\r\n )}\r\n {tools.indexOf(\"refresh\") > -1 && (\r\n <div\r\n style={{ marginRight: 8, fontSize: 14, cursor: \"pointer\" }}\r\n onClick={() => {\r\n const params = { ...this.state.filterParams };\r\n if (toolsClick.onRefresh) {\r\n toolsClick.onRefresh();\r\n } else {\r\n this.store.load({ params });\r\n }\r\n }}\r\n >\r\n <RedoOutlined />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n getSelectedRowKeys() {\r\n return this.state.selectedRowKeys;\r\n }\r\n getSelectedRowDatas() {\r\n return this.state.selectedRowDatas;\r\n }\r\n resetSelectedRowKeys() {\r\n this.setState({\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n });\r\n }\r\n rowSelectionOnSelect(record: any, selected: any) {\r\n const { selectedRowKeys, selectedRowDatas } = this.state;\r\n let { rowKey = \"id\" } = this.props;\r\n let newSelectedRowKeys = [...selectedRowKeys];\r\n let newSelectedRowDatas = [...selectedRowDatas];\r\n if (selected) {\r\n newSelectedRowKeys = [...newSelectedRowKeys, record[rowKey]];\r\n newSelectedRowDatas = [...newSelectedRowDatas, record];\r\n } else {\r\n selectedRowKeys.map((item: any, index: any) => {\r\n if (item === record[rowKey]) {\r\n newSelectedRowKeys.splice(index, 1);\r\n }\r\n });\r\n selectedRowDatas.map((item: any, index: any) => {\r\n if (item[rowKey] === record[rowKey]) {\r\n newSelectedRowDatas.splice(index, 1);\r\n }\r\n });\r\n }\r\n this.setState({\r\n selectedRowKeys: newSelectedRowKeys,\r\n selectedRowDatas: newSelectedRowDatas,\r\n });\r\n }\r\n rowSelectionOnSelectAll(selected: any, selectedRows: any, changeRows: any) {\r\n const { selectedRowKeys, selectedRowDatas } = this.state;\r\n const { rowKey = \"id\" } = this.props;\r\n let newids: any = [];\r\n let newdatas: any = [];\r\n if (changeRows.length > 0) {\r\n let changeIds = changeRows.map((item: any) => item[rowKey]);\r\n if (selected) {\r\n newids = [...selectedRowKeys, ...changeIds];\r\n newdatas = [...selectedRowDatas, ...changeRows];\r\n } else {\r\n selectedRowKeys.map((item: any, index: any) => {\r\n if (changeIds.indexOf(item) == -1) {\r\n newids.push(item);\r\n }\r\n });\r\n selectedRowDatas.map((item: any, index: any) => {\r\n if (changeIds.indexOf(item[rowKey]) == -1) {\r\n newdatas.push(item);\r\n }\r\n });\r\n }\r\n } else {\r\n newids = [...selectedRowKeys];\r\n newdatas = [...selectedRowDatas];\r\n }\r\n this.setState({\r\n selectedRowKeys: [...newids],\r\n selectedRowDatas: [...newdatas],\r\n });\r\n }\r\n render() {\r\n let _this = this,\r\n {\r\n loading,\r\n dataSource,\r\n pagination = {},\r\n searchText,\r\n fieldOption,\r\n searchColor,\r\n tableSize,\r\n } = this.state,\r\n props = utils.omit(\r\n this.props,\r\n [\r\n \"store\",\r\n \"onChange\",\r\n \"columns\",\r\n \"resetColumn\",\r\n \"toolbar\",\r\n \"sortFields\",\r\n \"filterColumn\",\r\n \"sortSearch\",\r\n \"showRowSelection\",\r\n \"pageType\",\r\n ],\r\n {\r\n rowKey: \"id\",\r\n clickChangeColor: false,\r\n }\r\n );\r\n if (props.pagination !== false) {\r\n props.pagination = {\r\n position: [\"bottomRight\"],\r\n showSizeChanger: true,\r\n showQuickJumper: true,\r\n ...pagination,\r\n ...props.pagination,\r\n };\r\n if (props.showTotal == true) {\r\n props.pagination.showTotal = function (total, [from, to]) {\r\n // return \"显示 \" + from + \" - \" + to + \"条,共 \" + total + \" 条\";\r\n return \"共 \" + total + \" 条\";\r\n };\r\n }\r\n }\r\n props.onChange = function (pagination, filters, sorter, extra) {\r\n _this.onChange(_this.state.pagination, filters, sorter, extra);\r\n };\r\n if (props.clickChangeColor) {\r\n const onRowFn = props.onRow;\r\n props.onRow = function (record, index) {\r\n var custom = onRowFn ? onRowFn(record, index) : {};\r\n const onClickFn = custom.onClick;\r\n custom.onClick = (event) => {\r\n _this.setState({\r\n activeIndex: index, //获取点击行的索引\r\n });\r\n utils.callback(onClickFn, _this, [event]);\r\n };\r\n return custom;\r\n };\r\n props.rowClassName = function (record, index) {\r\n return index === _this.state.activeIndex\r\n ? \"nsc-table-clickRowStyle\"\r\n : \"\";\r\n };\r\n }\r\n let newDataSource = [];\r\n if (searchText) {\r\n const data = treeUtils.getSearchMenuDatas(\r\n this,\r\n searchText,\r\n fieldOption,\r\n searchColor\r\n );\r\n newDataSource = data.treeDatas;\r\n props.expandedRowKeys = data.openKeys;\r\n } else {\r\n newDataSource = dataSource;\r\n }\r\n props.store = props.store || {};\r\n props.store.autoLoad = props.store.autoLoad === false ? false : true;\r\n const { dragable } = _this.props;\r\n const dragableProps =\r\n dragable === true\r\n ? {\r\n components: BodyRowComponent,\r\n onRow: (record, index) => ({\r\n index,\r\n record,\r\n moveRow: this.moveRow,\r\n }),\r\n }\r\n : {};\r\n let { resizeColumn } = this.props;\r\n\r\n const resizeProps =\r\n resizeColumn === true ? { components: this.components } : null;\r\n const { tableTool } = config();\r\n let toolFlag = false;\r\n // console.log('tableTool',tableTool)\r\n\r\n if (tableTool.show === true) {\r\n toolFlag = true;\r\n }\r\n if (this.props.toolbar && this.props.toolbar.show === true) {\r\n toolFlag = true;\r\n }\r\n if (this.props.showRowSelection) {\r\n const { rowSelection = {} } = this.props;\r\n props = {\r\n ...props,\r\n rowSelection: {\r\n selectedRowKeys: this.state.selectedRowKeys,\r\n onSelect: this.rowSelectionOnSelect.bind(this),\r\n onSelectAll: this.rowSelectionOnSelectAll.bind(this),\r\n columnWidth: 40,\r\n ...rowSelection,\r\n },\r\n };\r\n }\r\n const { tableProps: configTableProps } = config();\r\n const DefaultTable = (\r\n <div className={getLess(styles, \"nsc-table\")}>\r\n {toolFlag && this.renderToolBar()}\r\n <Table\r\n childrenColumnName=\"childNodes\"\r\n sheitem\r\n dataSource={newDataSource}\r\n columns={this.getColumns()}\r\n loading={loading}\r\n className={cls(getLess(styles, \"nsc-table-content\"), props.className)}\r\n locale={{\r\n emptyText: (\r\n <NoData className={getLess(styles, \"nsc-table-nodata\")} />\r\n ),\r\n }}\r\n scroll={{ x: \"max-content\" }}\r\n {...configTableProps}\r\n {...resizeProps}\r\n {...props}\r\n {...dragableProps}\r\n size={tableSize}\r\n pagination={false}\r\n // style={{ height: 600 }}\r\n />\r\n {props.pagination !== false && (\r\n <div className={getLess(styles, \"nsc-table-pagination\")}>\r\n <Pagination\r\n {...props.pagination}\r\n onChange={(page, pageSize) => {\r\n const extra = this.state.extra;\r\n extra.action = \"paginate\";\r\n this.setState(({ pagination = {} }) => {\r\n return {\r\n pagination: { ...pagination, current: page, pageSize },\r\n };\r\n });\r\n this.onChange(\r\n { current: page, pageSize },\r\n this.state.filter,\r\n this.state.sorter,\r\n extra\r\n );\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n return dragable === true ? (\r\n <DndProvider backend={HTML5Backend}>{DefaultTable}</DndProvider>\r\n ) : (\r\n DefaultTable\r\n );\r\n }\r\n}\r\n\r\nexport default withZhLocale(NSCTable);\r\n"],"mappings":"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"}
|