@worktile/theia 14.3.19 → 14.3.20

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.
@@ -90,7 +90,7 @@ export class TableStore {
90
90
  }
91
91
  }
92
92
  setSelectedCells(cells, pos) {
93
- const uniqueCells = this.uniqueCellPosition(cells);
93
+ const uniqueCells = this.pointerSelection ? this.uniqueCellPosition(cells) : cells;
94
94
  const cellElements = uniqueCells.map(cell => {
95
95
  return pos.findCellByPath(cell);
96
96
  });
@@ -105,14 +105,11 @@ export class TableStore {
105
105
  * @returns
106
106
  */
107
107
  uniqueCellPosition(cells) {
108
- let result = [];
109
- if (this.pointerSelection) {
110
- const modCells = new Set();
111
- cells.concat(this.selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));
112
- modCells.forEach((cell) => result.push(JSON.parse(cell)));
113
- return result;
114
- }
115
- return cells;
108
+ const result = [];
109
+ const modCells = new Set();
110
+ cells.concat(this.selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));
111
+ modCells.forEach((cell) => result.push(JSON.parse(cell)));
112
+ return result;
116
113
  }
117
114
  /**
118
115
  * 获取一定范围内所有的单元格
@@ -505,4 +502,4 @@ TableStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
505
502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableStore, decorators: [{
506
503
  type: Injectable
507
504
  }], ctorParameters: function () { return []; } });
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS90YWJsZS5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWMsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsT0FBTyxFQUFnQixZQUFZLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRzdDLE1BQU0sT0FBTyxVQUFVO0lBbURuQjtRQWxEUSxtQkFBYyxHQUF3QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5RSxvQkFBZSxHQUFvQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUzRSx1QkFBa0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVwRCxpQkFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXRELHlCQUFvQixHQUFh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WUFDUCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuRSxZQUFZO1lBQ1osSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBQ0Qsb0JBQW9CO2lCQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDYixXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFDUCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDOzt1R0Fwa0JRLFVBQVU7MkdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zZm9ybXMsIE5vZGUsIEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IsIEVMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBncm91cEJ5LCB1bmlxLCBtYXAgfSBmcm9tICcuLi8uLi91dGlscy9sb2Rhc2gnO1xuaW1wb3J0IHsgbWVyZ2VDZWxsIH0gZnJvbSAnLi91dGlscy9tZXJnZS1jZWxsJztcbmltcG9ydCB7IENvbG9yVHlwZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1zZWxlY3QnO1xuaW1wb3J0IHsgQ2VsbFBvc2l0aW9uLCBUYWJsZU9wdGlvbnMsIFRoZVRhYmxlT3B0aW9ucyB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlRWRpdG9yIH0gZnJvbSAnLi90YWJsZS5lZGl0b3InO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJsZVN0b3JlIHtcbiAgICBwcml2YXRlIHNlbGVjdGVkQ2VsbHMkOiBCZWhhdmlvclN1YmplY3Q8VGFibGVDZWxsRWxlbWVudFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gICAgcHJpdmF0ZSBkYW5nZXJvdXNDZWxscyQ6IEJlaGF2aW9yU3ViamVjdDxDZWxsUG9zaXRpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICAgIHByaXZhdGUgY2VsbHNDaGFuZ2VPYmplY3QkOiBTdWJqZWN0PG9iamVjdD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSB0YWJsZUNoYW5nZSQ6IFN1YmplY3Q8b2JqZWN0PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBzZWxlY3RlZENvbHVtbnNJbmRleDogbnVtYmVyW10gPSBbXTtcblxuICAgIHNlbGVjdGVkUm93c0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZGFuZ2Vyb3VzQ29sdW1uc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZGFuZ2Vyb3VzUm93c0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaXNTZWxlY3RlZFRhYmxlOiBib29sZWFuO1xuXG4gICAgZWRpdG9yOiBFZGl0b3I7XG5cbiAgICBwdWJsaWMgaXNGdWxsc2NyZWVuOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFuY2hvckNlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBmb2N1c0NlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBwcmVGb2N1c0NlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBsYXN0Rm9jdXNDZWxsUGF0aDogbnVtYmVyW107XG5cbiAgICBwdWJsaWMgZm9jdXNDZWxsRWxlbWVudDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgaXNQcmVwYXJlU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaXNDZWxsU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaXNSaWdodENsaWNraW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgcG9pbnRlclNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1heENvbDogbnVtYmVyO1xuXG4gICAgZ2V0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpOiBDZWxsUG9zaXRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIGdldCBkYW5nZXJvdXNDZWxscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgaXNTZWxlY3RlZEFsbENlbGwgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggJiYgcG9zLmdldEhlaWdodCgpICogcG9zLmdldFdpZHRoKCkgPT09IHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aDtcbiAgICB9O1xuXG4gICAgZ2V0VGFibGVFbnRyeSgpIHtcbiAgICAgICAgY29uc3QgeyB0YWJsZUVudHJ5IH0gPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnk7XG4gICAgfVxuXG4gICAgZ2V0VGFibGVQYXRoKCkge1xuICAgICAgICBjb25zdCB0YWJsZUVudHJ5ID0gdGhpcy5nZXRUYWJsZUVudHJ5KCk7XG4gICAgICAgIHJldHVybiB0YWJsZUVudHJ5WzFdO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDZWxscyQuZ2V0VmFsdWUoKS5tYXAoKGNlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgICAgIGNvbnN0IFtyb3csIGNvbF0gPSBwYXRoLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIHJldHVybiB7IHJvdywgY29sIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVNlbGVjdGVkQ29sdW1uc0FuZFJvd0luZGV4KCkge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgaWYgKCFwb3M/LnRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VCZWZvcmVDZWxscyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5mb3JFYWNoKCh7IHJvdywgY29sIH0pID0+IHtcbiAgICAgICAgICAgIC8vIOiuoeeul+WQiOW5tuWNleWFg+agvOaVsOaNruaXtu+8jOimgeaMieWQiOW5tuWJjeeahOaVsOaNruWkhOeQhlxuICAgICAgICAgICAgbWVyZ2VCZWZvcmVDZWxscy5wdXNoKC4uLnRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0JlZm9yZU1lcmdlKHsgcm93LCBjb2wgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnVuaXF1ZUNlbGxQb3NpdGlvbihtZXJnZUJlZm9yZUNlbGxzKTtcbiAgICAgICAgY29uc3Qgcm93R3JvdXAgPSBncm91cEJ5KGNlbGxzLCAoeyByb3cgfSkgPT4gcm93KTtcbiAgICAgICAgY29uc3QgY29sR3JvdXAgPSBncm91cEJ5KGNlbGxzLCAoeyBjb2wgfSkgPT4gY29sKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4ID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgcm93IGluIHJvd0dyb3VwKSB7XG4gICAgICAgICAgICBpZiAocm93R3JvdXBbcm93XS5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleC5wdXNoKHBhcnNlSW50KHJvdywgMTApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBpbiBjb2xHcm91cCkge1xuICAgICAgICAgICAgaWYgKGNvbEdyb3VwW2NvbF0ubGVuZ3RoID09PSBwb3MuZ2V0SGVpZ2h0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4LnB1c2gocGFyc2VJbnQoY29sLCAxMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXggPSB1bmlxKHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4ID0gdW5pcSh0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXgubGVuZ3RoID09PSBwb3MuZ2V0SGVpZ2h0KCkgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnNJbmRleC5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWRDZWxscyhjZWxsczogQ2VsbFBvc2l0aW9uW10sIHBvczogVGFibGVQb3NpdGlvbikge1xuICAgICAgICBjb25zdCB1bmlxdWVDZWxscyA9IHRoaXMudW5pcXVlQ2VsbFBvc2l0aW9uKGNlbGxzKTtcbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnRzID0gdW5pcXVlQ2VsbHMubWFwKGNlbGwgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBvcy5maW5kQ2VsbEJ5UGF0aChjZWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyQubmV4dChjZWxsRWxlbWVudHMpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkQ29sdW1uc0FuZFJvd0luZGV4KCk7XG4gICAgfVxuXG4gICAgaW5pdEVkaXRvcihlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDljrvph43ph43lpI3nmoTljZXlhYPmoLzkvY3nva5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgdW5pcXVlQ2VsbFBvc2l0aW9uKGNlbGxzOiBDZWxsUG9zaXRpb25bXSk6IENlbGxQb3NpdGlvbltdIHtcbiAgICAgICAgbGV0IHJlc3VsdDogQ2VsbFBvc2l0aW9uW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgbW9kQ2VsbHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBjZWxscy5jb25jYXQodGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMpLmZvckVhY2goY2VsbCA9PiBtb2RDZWxscy5hZGQoSlNPTi5zdHJpbmdpZnkoY2VsbCkpKTtcbiAgICAgICAgICAgIG1vZENlbGxzLmZvckVhY2goKGNlbGw6IHN0cmluZykgPT4gcmVzdWx0LnB1c2goSlNPTi5wYXJzZShjZWxsKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2VsbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5LiA5a6a6IyD5Zu05YaF5omA5pyJ55qE5Y2V5YWD5qC8XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2Uoc3RhcnRSb3c6IG51bWJlciwgc3RhcnRDb2w6IG51bWJlciwgZW5kUm93OiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogQ2VsbFBvc2l0aW9uW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IENlbGxQb3NpdGlvbltdID0gW107XG4gICAgICAgIGZvciAobGV0IHJvdyA9IHN0YXJ0Um93OyByb3cgPCBlbmRSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDwgZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgcm93LCBjb2wgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzZWxlY3RSb3coZWRpdG9yOiBFZGl0b3IsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jbGVhckxhc3RGb2N1c1BhdGgoKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5nZXRDZWxsUG9zaXRpb25zRnJvbVJhbmdlKGluZGV4LCAwLCBpbmRleCArIDEsIHBvcy5nZXRXaWR0aCgpKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxzKGNlbGxzLCBwb3MpO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbChlZGl0b3IsIHBvcy50YWJsZUVudHJ5WzFdLmNvbmNhdChbaW5kZXgsIDBdKSk7XG4gICAgfVxuXG4gICAgc2VsZWN0Q29sdW1uKGVkaXRvcjogRWRpdG9yLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY2xlYXJMYXN0Rm9jdXNQYXRoKCk7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZSgwLCBpbmRleCwgcG9zLmdldEhlaWdodCgpLCBpbmRleCArIDEpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMoY2VsbHMsIHBvcyk7XG4gICAgICAgIHRoaXMuZm9jdXNDZWxsKGVkaXRvciwgcG9zLnRhYmxlRW50cnlbMV0uY29uY2F0KFswLCBpbmRleF0pKTtcbiAgICB9XG5cbiAgICBzZWxlY3RUYWJsZShlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZSgwLCAwLCBwb3MuZ2V0SGVpZ2h0KCksIHBvcy5nZXRXaWR0aCgpKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxzKGNlbGxzLCBwb3MpO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbChlZGl0b3IsIHBvcy50YWJsZUVudHJ5WzFdLmNvbmNhdChbMCwgMF0pKTtcbiAgICB9XG5cbiAgICAvLyDmi5bpgIlcbiAgICBzZWxlY3RDZWxscyhlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgYW5jaG9yUGF0aCA9IHRoaXMuYW5jaG9yQ2VsbFBhdGguc2xpY2UoLTIpO1xuICAgICAgICBjb25zdCBmb2N1c1BhdGggPSB0aGlzLmZvY3VzQ2VsbFBhdGguc2xpY2UoLTIpO1xuXG4gICAgICAgIGNvbnN0IHJvd3MgPSBbYW5jaG9yUGF0aFswXSwgZm9jdXNQYXRoWzBdXS5zb3J0KChtLCBuKSA9PiBtIC0gbik7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbYW5jaG9yUGF0aFsxXSwgZm9jdXNQYXRoWzFdXS5zb3J0KChtLCBuKSA9PiBtIC0gbik7XG5cbiAgICAgICAgY29uc3QgeyBjb2xzcGFuOiBhbmNob3JDb2xzcGFuQ291bnQsIHJvd3NwYW46IGFuY2hvclJvd3NwYW5Db3VudCB9ID0gRWRpdG9yLm5vZGUoXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmFuY2hvckNlbGxQYXRoXG4gICAgICAgIClbMF0gYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3QgeyBjb2xzcGFuOiBmb2N1c0NvbHNwYW5Db3VudCwgcm93c3BhbjogZm9jdXNSb3dzcGFuQ291bnQgfSA9IEVkaXRvci5ub2RlKGVkaXRvciwgdGhpcy5mb2N1c0NlbGxQYXRoKVswXSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IGFuY2hvclJvdyA9IGFuY2hvclBhdGhbMF0gKyAoYW5jaG9yUm93c3BhbkNvdW50IHx8IDEpIC0gMTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBmb2N1c1BhdGhbMF0gKyAoZm9jdXNSb3dzcGFuQ291bnQgfHwgMSkgLSAxO1xuICAgICAgICBjb25zdCBhbmNob3JDb2wgPSBhbmNob3JQYXRoWzFdICsgKGFuY2hvckNvbHNwYW5Db3VudCB8fCAxKSAtIDE7XG4gICAgICAgIGNvbnN0IGZvY3VzQ29sID0gZm9jdXNQYXRoWzFdICsgKGZvY3VzQ29sc3BhbkNvdW50IHx8IDEpIC0gMTtcblxuICAgICAgICBsZXQgaW5pdE1heENvbCA9IE1hdGgubWF4KGFuY2hvckNvbCwgZm9jdXNDb2wpO1xuICAgICAgICBsZXQgaW5pdE1heFJvdyA9IE1hdGgubWF4KGFuY2hvclJvdywgZm9jdXNSb3cpO1xuICAgICAgICBjb25zdCB7IG1pblJvdywgbWF4Um93LCBtaW5Db2wsIG1heENvbCB9ID0gdGhpcy5nZXRNaW5BbmRNYXhDZWxsSW5kZXgoaW5pdE1heFJvdywgaW5pdE1heENvbCwgcm93c1swXSwgY29sdW1uc1swXSwgcG9zLnRhYmxlKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLmdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2UobWluUm93LCBtaW5Db2wsIG1heFJvdyArIDEsIG1heENvbCArIDEpO1xuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxscyhjZWxscywgcG9zKTtcbiAgICB9XG5cbiAgICBnZXRNaW5BbmRNYXhDZWxsSW5kZXgobWF4Um93OiBudW1iZXIsIG1heENvbDogbnVtYmVyLCBtaW5Sb3c6IG51bWJlciwgbWluQ29sOiBudW1iZXIsIHRhYmxlOiBUYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgYmVmb3JlQ29scyA9IFtdO1xuICAgICAgICBjb25zdCBiZWZvcmVSb3dzID0gW107XG4gICAgICAgIGxldCBzcGFuU2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGFuU2VsZWN0ZWRDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByb3csIGNvbCB9ID0gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRhYmxlLmNoaWxkcmVuW3Jvd10uY2hpbGRyZW5bY29sXSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sc3Bhbjogbm9kZS5jb2xzcGFuIHx8IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c3Bhbjogbm9kZS5yb3dzcGFuIHx8IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZS5jaGlsZHJlbi5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8PSBtYXhSb3cpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4ubWFwKChjZWxsOiBUYWJsZUNlbGxFbGVtZW50LCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sSW5kZXggPD0gbWF4Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUm93SW5kZXggPSByb3dJbmRleCArIChjZWxsLnJvd3NwYW4gfHwgMSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbENvbEluZGV4ID0gY29sSW5kZXggKyAoY2VsbC5jb2xzcGFuIHx8IDEpIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5TZWxlY3RlZENlbGxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93OiBzZWxlY3RSb3csIGNvbDogc2VsZWN0Q29sLCByb3dzcGFuOiBzZWxlY3RSb3dzcGFuLCBjb2xzcGFuOiBzZWxlY3RDb2xzcGFuIH0gPSBzcGFuU2VsZWN0ZWRDZWxsc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0Um93ICsgc2VsZWN0Um93c3BhbiAtIDEgPj0gbWluUm93ICYmIHNlbGVjdENvbCArIHNlbGVjdENvbHNwYW4gLSAxID49IG1pbkNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Sb3cgPSBNYXRoLm1pbihzcGFuU2VsZWN0ZWRDZWxsc1swXS5yb3csIG1pblJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNvbCA9IE1hdGgubWluKHNwYW5TZWxlY3RlZENlbGxzWzBdLmNvbCwgbWluQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLmNvbHNwYW4gJiYgY2VsbC5jb2xzcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUNvbHMucHVzaCh7IHJvd0luZGV4LCBjb2xJbmRleCwgY2VsbENvbEluZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsQ29sSW5kZXggPj0gbWluQ29sICYmIGNlbGxSb3dJbmRleCA+PSBtaW5Sb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29sID0gTWF0aC5tYXgobWF4Q29sLCBjZWxsQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Db2wgPSBNYXRoLm1pbihtaW5Db2wsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnJvd3NwYW4gJiYgY2VsbC5yb3dzcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVJvd3MucHVzaCh7IHJvd0luZGV4LCBjb2xJbmRleCwgY2VsbFJvd0luZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsQ29sSW5kZXggPj0gbWluQ29sICYmIGNlbGxSb3dJbmRleCA+PSBtaW5Sb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluUm93ID0gTWF0aC5taW4obWluUm93LCByb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFJvdyA9IE1hdGgubWF4KG1heFJvdywgY2VsbFJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g5Yik5pat6YCJ5Yy66IyD5Zu05YaF5LmL5YmN55qE5Y2V5YWD5qC8IOWmguaenOWtmOWcqGNlbGxDb2xJbmRleCA9PT0gbWluQ29s77yM6KGo56S65b2T5YmN6I635Y+W55qEbWluQ29s5bm25LiN5piv5pyA5bCP55qE77yM6YeN5paw6I635Y+WbWluQ29sXG4gICAgICAgIGNvbnN0IGNvbE5vZGUgPSBiZWZvcmVDb2xzLmZpbHRlcihcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb3dJbmRleCA8PSBtYXhSb3cgJiYgaXRlbS5jb2xJbmRleCA8PSBtYXhDb2wgJiYgaXRlbS5yb3dJbmRleCA+PSBtaW5Sb3cgJiYgaXRlbS5jZWxsQ29sSW5kZXggPT09IG1pbkNvbFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByb3dOb2RlID0gYmVmb3JlUm93cy5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ucm93SW5kZXggPD0gbWF4Um93ICYmIGl0ZW0uY29sSW5kZXggPD0gbWF4Q29sICYmIGl0ZW0uY29sSW5kZXggPj0gbWluQ29sICYmIGl0ZW0uY2VsbFJvd0luZGV4ID09PSBtaW5Sb3dcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNvbE5vZGUubGVuZ3RoIHx8IHJvd05vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNaW5BbmRNYXhDZWxsSW5kZXgobWF4Um93LCBtYXhDb2wsIG1pblJvdywgbWluQ29sLCB0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pblJvdyxcbiAgICAgICAgICAgIG1heFJvdyxcbiAgICAgICAgICAgIG1pbkNvbCxcbiAgICAgICAgICAgIG1heENvbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIOmAieaLqeWNleWFg+agvFxuICAgIHNlbGVjdENlbGwoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQsIGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgY2VsbCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgdGhpcy5hbmNob3JDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuZm9jdXNDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuZm9jdXNDZWxsRWxlbWVudCA9IGNlbGw7XG4gICAgICAgIGNvbnN0IFtyb3csIGNvbF0gPSBwYXRoLnNsaWNlKC0yKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ2VsbFBvc2l0aW9uW10gPSBbeyByb3csIGNvbCB9XTtcbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMpO1xuICAgICAgICAgICAgLy8g5aSE55CG5Y2V5YWD5qC86YCJ5Lit5pe277yM5aSE55CG5Li66YCJ5Lit5aSa5Y2V5YWD5qC8XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gdGhpcy5nZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UoeyByb3csIGNvbCB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICAgICAgLy8g5bey6IGa54Sm55qE5Y2V5YWD5qC85Zyo5aSa6YCJ5qih5byP5LiL6YCJ5Lit77yI5pqC5a2Y5LiK5qyh6IGa54Sm55qE5Y2V5YWD5qC85pWw5o2u77yJXG4gICAgICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSB0aGlzLmxhc3RGb2N1c0NlbGxQYXRoPy5zbGljZSgtMik7XG4gICAgICAgICAgICBpZiAoZm9jdXNDZWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9jdXNDZWxscyA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0JlZm9yZU1lcmdlKHsgcm93OiBmb2N1c0NlbGxbMF0sIGNvbDogZm9jdXNDZWxsWzFdIH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmZvY3VzQ2VsbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxscyhyZXN1bHQsIHBvcyk7XG4gICAgfVxuXG4gICAgLy8g6K6h566X5ZCI5bm25YmN55qE5Y2V5YWD5qC8XG4gICAgZ2V0Q2VsbFBvc2l0aW9uc0JlZm9yZU1lcmdlKHsgcm93LCBjb2wgfTogQ2VsbFBvc2l0aW9uKTogQ2VsbFBvc2l0aW9uW10ge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgeyByb3dzcGFuLCBjb2xzcGFuIH0gPSBwb3MuZmluZENlbGxCeVBhdGgoeyByb3csIGNvbCB9KTtcbiAgICAgICAgaWYgKHJvd3NwYW4gfHwgY29sc3Bhbikge1xuICAgICAgICAgICAgY29uc3QgY29sU3BhbiA9IGNvbHNwYW4gPz8gMTtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSByb3dzcGFuID8/IDE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDZWxsUG9zaXRpb25zRnJvbVJhbmdlKHJvdywgY29sLCByb3cgKyByb3dTcGFuLCBjb2wgKyBjb2xTcGFuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3sgcm93LCBjb2wgfV07XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRDZWxsc0NoYW5nZSgpOiBPYnNlcnZhYmxlPFRhYmxlQ2VsbEVsZW1lbnRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENlbGxzJC5hc09ic2VydmFibGUoKS5waXBlKHNraXAoMSkpO1xuICAgIH1cblxuICAgIGNlbGxzUG9zaXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbGxzQ2hhbmdlT2JqZWN0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDZWxscygpIHtcbiAgICAgICAgdGhpcy5jZWxsc0NoYW5nZU9iamVjdCQubmV4dCgpO1xuICAgIH1cblxuICAgIGVtaXRUYWJsZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZUNoYW5nZSQubmV4dCgpO1xuICAgIH1cblxuICAgIHRhYmxlQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3RlZENlbGxzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4ID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0NlbGxTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1JpZ2h0Q2xpY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxzJC5uZXh0KFtdKTtcbiAgICB9XG5cbiAgICBjbGVhckxhc3RGb2N1c1BhdGgoKSB7XG4gICAgICAgIHRoaXMubGFzdEZvY3VzQ2VsbFBhdGggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIOaLlumAieW8gOWniyB8fCDorrDlvZXogZrnhKbngrlcbiAgICBzZWxlY3RDZWxsU3RhcnQoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQsIGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIHRoaXMuaXNQcmVwYXJlU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgdGhpcy5hbmNob3JDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMubGFzdEZvY3VzQ2VsbFBhdGggPSBwYXRoO1xuICAgICAgICBpZiAoIXRoaXMucHJlRm9jdXNDZWxsUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5wcmVGb2N1c0NlbGxQYXRoID0gdGhpcy5hbmNob3JDZWxsUGF0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdENlbGxPbmdvaW5nKGNlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50LCBlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBpZiAoQW5ndWxhckVkaXRvci5pc1JlYWRvbmx5KGVkaXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXNDaGFuZ2VkOiBib29sZWFuO1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgICBpc0NoYW5nZWQgPSAhdGhpcy5mb2N1c0NlbGxQYXRoIHx8IHRoaXMuZm9jdXNDZWxsUGF0aC50b1N0cmluZygpICE9PSBwYXRoLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ2VsbFBhdGggPSBwYXRoO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NlbGxFbGVtZW50ID0gY2VsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzQ2hhbmdlZCA9XG4gICAgICAgICAgICAgICAgIXRoaXMuZm9jdXNDZWxsUGF0aCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmZvY3VzQ2VsbFBhdGgudG9TdHJpbmcoKSA9PT0gdGhpcy5hbmNob3JDZWxsUGF0aC50b1N0cmluZygpICYmIHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNQcmVwYXJlU2VsZWN0aW5nICYmIGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucHJlRm9jdXNDZWxsUGF0aCkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9jdXNDZWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2VsbFNlbGVjdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDZWxscyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlRm9jdXNDZWxsUGF0aCA9IHRoaXMuZm9jdXNDZWxsUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdENlbGxFbmQoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDZWxsU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ2VsbChlZGl0b3IsIHRoaXMuZm9jdXNDZWxsUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcmVGb2N1c0NlbGxQYXRoID0gbnVsbDtcbiAgICB9XG5cbiAgICBmb2N1c0NlbGwoZWRpdG9yOiBFZGl0b3IsIHBhdGg6IG51bWJlcltdKSB7XG4gICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgcGF0aCk7XG4gICAgICAgIFRoZUVkaXRvci5mb2N1cyh0aGlzLmVkaXRvcik7XG4gICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgIH1cblxuICAgIGRhbmdlcm91c0NlbGxzQ2hhbmdlKCk6IE9ic2VydmFibGU8Q2VsbFBvc2l0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSk7XG4gICAgfVxuXG4gICAgc2V0RGFuZ2Vyb3VzQ2VsbHMoKSB7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gdGhpcy5zZWxlY3RlZFJvd3NJbmRleDtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDb2x1bW5zSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4O1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBjbGVhckRhbmdlcm91c0NlbGxzKCkge1xuICAgICAgICB0aGlzLmRhbmdlcm91c1Jvd3NJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KFtdKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGlmIChwb3MudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gdGhpcy5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPT09IHBvcy5nZXRIZWlnaHQoKSAmJiB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4Lmxlbmd0aCA9PT0gcG9zLmdldFdpZHRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkYW5nZXJvdXNPclNlbGVjdGVkQ2VsbHNDaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLmRhbmdlcm91c0NlbGxzJC5hc09ic2VydmFibGUoKS5waXBlKHNraXAoMSkpLCB0aGlzLnNlbGVjdGVkQ2VsbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSkpO1xuICAgIH1cblxuICAgIHNldERhbmdlcm91c1Jvd3MoKSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnM7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB1bmlxKG1hcChjZWxscywgJ3JvdycpKS52YWx1ZU9mKCkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICB0aGlzLmRhbmdlcm91c1Jvd3NJbmRleCA9IHJvd3M7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gcm93cy5sZW5ndGggPT09IHBvcy5nZXRIZWlnaHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZFRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IFsuLi5BcnJheShwb3MuZ2V0V2lkdGgoKSldLm1hcCgodiwgaSkgPT4gaSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJvd0luZGV4IG9mIHJvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zLmdldFdpZHRoKCk7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sOiBpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDZWxscyQubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHNldERhbmdlcm91c0NvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnM7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB1bmlxKG1hcChjZWxscywgJ2NvbCcpKS52YWx1ZU9mKCkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IGNvbHM7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gY29scy5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRIZWlnaHQoKSldLm1hcCgoXywgaSkgPT4gaSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNvbEluZGV4IG9mIGNvbHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zLmdldEhlaWdodCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHJvdzogaSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiBjb2xJbmRleFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBzZXREYW5nZXJvdXNUYWJsZSgpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLmdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2UoMCwgMCwgcG9zLmdldEhlaWdodCgpLCBwb3MuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRIZWlnaHQoKSldLm1hcCgoXywgaSkgPT4gaSk7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ29sdW1uc0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRXaWR0aCgpKV0ubWFwKChfLCBpKSA9PiBpKTtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDZWxscyQubmV4dChjZWxscyk7XG4gICAgfVxuXG4gICAgc2VsZWN0Rmlyc3RDZWxsKCkge1xuICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9uc1swXTtcbiAgICAgICAgY29uc3QgdGFibGVQYXRoID0gdGhpcy5nZXRUYWJsZVBhdGgoKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IEVkaXRvci5zdGFydCh0aGlzLmVkaXRvciwgWy4uLnRhYmxlUGF0aCwgcm93LCBjb2xdKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHBhdGgpO1xuICAgIH1cblxuICAgIHNldFNlbGVjdGVkQ2VsbHNCYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9yOiBDb2xvclR5cGUpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgY29uc3QgdGFibGVQYXRoID0gdGhpcy5nZXRUYWJsZVBhdGgoKTtcbiAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyh0aGlzLmVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHJvdywgY29sIH0gb2YgY2VsbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUGF0aCA9IFsuLi50YWJsZVBhdGgsIHJvdywgY29sXTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKHRoaXMuZWRpdG9yLCB7IGJhY2tncm91bmRDb2xvciB9LCB7IGF0OiBjZWxsUGF0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsQmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2VsbCB9ID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCAmJiBjZWxsLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3RlZENlbGxzQ29udGVudCgpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBpZiAodGFibGVQb3NpdGlvbi5pc0luVGFibGUoKSkge1xuICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyh0aGlzLmVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyByb3csIGNvbCB9IG9mIGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gTm9kZS5nZXQodGhpcy5lZGl0b3IsIGNlbGxQYXRoKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5jbGVhckNlbGwodGhpcy5lZGl0b3IsIFtub2RlLCBjZWxsUGF0aF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIEVkaXRvci5zdGFydCh0aGlzLmVkaXRvciwgdGFibGVQb3NpdGlvbi5jZWxsRW50cnlbMV0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1lcmdlQ2VsbChlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBtZXJnZUNlbGwoZWRpdG9yLCB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgc2V0VGFibGVPcHRpb25zKGVkaXRvcjogRWRpdG9yLCBuZXdPcHRpb25zOiBUaGVUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB0YWJsZVBhdGggPSB0aGlzLmdldFRhYmxlUGF0aCgpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRhYmxlUG9zaXRpb24udGFibGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRhYmxlLm9wdGlvbnMsIC4uLm5ld09wdGlvbnMgfTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgb3B0aW9ucyB9LCB7IGF0OiB0YWJsZVBhdGggfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRGFuZ2Vyb3VzQ29sdW1uc09yUm93cygpIHtcbiAgICAgICAgY29uc3QgeyBkYW5nZXJvdXNSb3dzSW5kZXgsIGRhbmdlcm91c0NvbHVtbnNJbmRleCB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW5PclJvd3MoZGFuZ2Vyb3VzUm93c0luZGV4LCBkYW5nZXJvdXNDb2x1bW5zSW5kZXgpO1xuICAgIH1cblxuICAgIGNyZWF0ZVRhYmxlUG9zaXRpb24gPSAoKTogVGFibGVQb3NpdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHsgcGF0aCB9ID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcjtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgcmVtb3ZlQ29sdW1uT3JSb3dzKHNlbGVjdGVkUm93SW5kZXhzID0gdGhpcy5zZWxlY3RlZFJvd3NJbmRleCwgc2VsZWN0ZWRDb2x1bW5JbmRleHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgaXNTZWxlY3RlZFRhYmxlIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgIFRhYmxlRWRpdG9yLnJlbW92ZVRhYmxlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YWJsZVBvc2l0aW9uLnRhYmxlKSBhcyBhbnk7XG4gICAgICAgIGlmIChzZWxlY3RlZFJvd0luZGV4cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkQ29sdW1uSW5kZXhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8g5Yig6Zmk6KGM5pe25Y+W5raI5qCH6aKY6KGMXG4gICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi50YWJsZSAmJiB0YWJsZUNvbXBvbmVudC5oZWFkZXJSb3cgJiYgc2VsZWN0ZWRSb3dJbmRleHMuaW5jbHVkZXMoMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlT3B0aW9ucyh0aGlzLmVkaXRvciwgeyBoZWFkZXJSb3c6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIC8vIGhlYWRlclJvdyDlhbzlrrnku6PnoIEsIOWPlua2iOagh+mimOihjOeahOaXtuWAmeWQjOaXtuiuvue9riByb3cg5Lit55qEIGhlYWRlciDlsZ7mgKdcbiAgICAgICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlblswXS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93UGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgdGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXModGhpcy5lZGl0b3IsIHsgaGVhZGVyOiBudWxsIH0sIHsgYXQ6IHJvd1BhdGggfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dJbmRleHNcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5yZW1vdmVSb3codGhpcy5lZGl0b3IsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2VsbHMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0ZWRDb2x1bW5JbmRleHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFJvd0luZGV4cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIOWIoOmZpOWIl+aXtuWPlua2iOagh+mimOWIl1xuICAgICAgICAgICAgaWYgKHRhYmxlUG9zaXRpb24udGFibGUgJiYgdGFibGVQb3NpdGlvbi50YWJsZS5vcHRpb25zPy5oZWFkZXJDb2x1bW4gJiYgc2VsZWN0ZWRDb2x1bW5JbmRleHMuaW5jbHVkZXMoMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlT3B0aW9ucyh0aGlzLmVkaXRvciwgeyBoZWFkZXJDb2x1bW46IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JbmRleHNcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5yZW1vdmVDb2x1bW4odGhpcy5lZGl0b3IsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2VsbHMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
505
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS90YWJsZS5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWMsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsT0FBTyxFQUFnQixZQUFZLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRzdDLE1BQU0sT0FBTyxVQUFVO0lBbURuQjtRQWxEUSxtQkFBYyxHQUF3QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5RSxvQkFBZSxHQUFvQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUzRSx1QkFBa0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVwRCxpQkFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXRELHlCQUFvQixHQUFh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QUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25FLFlBQVk7WUFDWixJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxvQkFBb0I7aUJBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtJQUNMLENBQUM7O3VHQWprQlEsVUFBVTsyR0FBVixVQUFVOzJGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNmb3JtcywgTm9kZSwgRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IFRhYmxlUG9zaXRpb24gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdyb3VwQnksIHVuaXEsIG1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZGFzaCc7XG5pbXBvcnQgeyBtZXJnZUNlbGwgfSBmcm9tICcuL3V0aWxzL21lcmdlLWNlbGwnO1xuaW1wb3J0IHsgQ29sb3JUeXBlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbG9yLXNlbGVjdCc7XG5pbXBvcnQgeyBDZWxsUG9zaXRpb24sIFRhYmxlT3B0aW9ucywgVGhlVGFibGVPcHRpb25zIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVFZGl0b3IgfSBmcm9tICcuL3RhYmxlLmVkaXRvcic7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlU3RvcmUge1xuICAgIHByaXZhdGUgc2VsZWN0ZWRDZWxscyQ6IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNlbGxFbGVtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cbiAgICBwcml2YXRlIGRhbmdlcm91c0NlbGxzJDogQmVoYXZpb3JTdWJqZWN0PENlbGxQb3NpdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gICAgcHJpdmF0ZSBjZWxsc0NoYW5nZU9iamVjdCQ6IFN1YmplY3Q8b2JqZWN0PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIHRhYmxlQ2hhbmdlJDogU3ViamVjdDxvYmplY3Q+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHNlbGVjdGVkQ29sdW1uc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgc2VsZWN0ZWRSb3dzSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgICBkYW5nZXJvdXNDb2x1bW5zSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgICBkYW5nZXJvdXNSb3dzSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgICBpc1NlbGVjdGVkVGFibGU6IGJvb2xlYW47XG5cbiAgICBlZGl0b3I6IEVkaXRvcjtcblxuICAgIHB1YmxpYyBpc0Z1bGxzY3JlZW46IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYW5jaG9yQ2VsbFBhdGg6IG51bWJlcltdO1xuXG4gICAgcHVibGljIGZvY3VzQ2VsbFBhdGg6IG51bWJlcltdO1xuXG4gICAgcHVibGljIHByZUZvY3VzQ2VsbFBhdGg6IG51bWJlcltdO1xuXG4gICAgcHVibGljIGxhc3RGb2N1c0NlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBmb2N1c0NlbGxFbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudDtcblxuICAgIHB1YmxpYyBpc1ByZXBhcmVTZWxlY3RpbmcgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc0NlbGxTZWxlY3RpbmcgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc1JpZ2h0Q2xpY2tpbmcgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBwb2ludGVyU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbWF4Q29sOiBudW1iZXI7XG5cbiAgICBnZXQgc2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk6IENlbGxQb3NpdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgZ2V0IGRhbmdlcm91c0NlbGxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYW5nZXJvdXNDZWxscyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBpc1NlbGVjdGVkQWxsQ2VsbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCAmJiBwb3MuZ2V0SGVpZ2h0KCkgKiBwb3MuZ2V0V2lkdGgoKSA9PT0gdGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoO1xuICAgIH07XG5cbiAgICBnZXRUYWJsZUVudHJ5KCkge1xuICAgICAgICBjb25zdCB7IHRhYmxlRW50cnkgfSA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICByZXR1cm4gdGFibGVFbnRyeTtcbiAgICB9XG5cbiAgICBnZXRUYWJsZVBhdGgoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlRW50cnkgPSB0aGlzLmdldFRhYmxlRW50cnkoKTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnlbMV07XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENlbGxzJC5nZXRWYWx1ZSgpLm1hcCgoY2VsbDogVGFibGVDZWxsRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIGNlbGwpO1xuICAgICAgICAgICAgY29uc3QgW3JvdywgY29sXSA9IHBhdGguc2xpY2UoLTIpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2VsZWN0ZWRDb2x1bW5zQW5kUm93SW5kZXgoKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBpZiAoIXBvcz8udGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZUJlZm9yZUNlbGxzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmZvckVhY2goKHsgcm93LCBjb2wgfSkgPT4ge1xuICAgICAgICAgICAgLy8g6K6h566X5ZCI5bm25Y2V5YWD5qC85pWw5o2u5pe277yM6KaB5oyJ5ZCI5bm25YmN55qE5pWw5o2u5aSE55CGXG4gICAgICAgICAgICBtZXJnZUJlZm9yZUNlbGxzLnB1c2goLi4udGhpcy5nZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UoeyByb3csIGNvbCB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMudW5pcXVlQ2VsbFBvc2l0aW9uKG1lcmdlQmVmb3JlQ2VsbHMpO1xuICAgICAgICBjb25zdCByb3dHcm91cCA9IGdyb3VwQnkoY2VsbHMsICh7IHJvdyB9KSA9PiByb3cpO1xuICAgICAgICBjb25zdCBjb2xHcm91cCA9IGdyb3VwQnkoY2VsbHMsICh7IGNvbCB9KSA9PiBjb2wpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0luZGV4ID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXggPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3cgaW4gcm93R3JvdXApIHtcbiAgICAgICAgICAgIGlmIChyb3dHcm91cFtyb3ddLmxlbmd0aCA9PT0gcG9zLmdldFdpZHRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0luZGV4LnB1c2gocGFyc2VJbnQocm93LCAxMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY29sIGluIGNvbEdyb3VwKSB7XG4gICAgICAgICAgICBpZiAoY29sR3JvdXBbY29sXS5sZW5ndGggPT09IHBvcy5nZXRIZWlnaHQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXgucHVzaChwYXJzZUludChjb2wsIDEwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleCA9IHVuaXEodGhpcy5zZWxlY3RlZFJvd3NJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXggPSB1bmlxKHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPT09IHBvcy5nZXRIZWlnaHQoKSAmJiB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4Lmxlbmd0aCA9PT0gcG9zLmdldFdpZHRoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTZWxlY3RlZENlbGxzKGNlbGxzOiBDZWxsUG9zaXRpb25bXSwgcG9zOiBUYWJsZVBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUNlbGxzID0gdGhpcy5wb2ludGVyU2VsZWN0aW9uID8gdGhpcy51bmlxdWVDZWxsUG9zaXRpb24oY2VsbHMpIDogY2VsbHM7XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50cyA9IHVuaXF1ZUNlbGxzLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwb3MuZmluZENlbGxCeVBhdGgoY2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMkLm5leHQoY2VsbEVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVTZWxlY3RlZENvbHVtbnNBbmRSb3dJbmRleCgpO1xuICAgIH1cblxuICAgIGluaXRFZGl0b3IoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Y676YeN6YeN5aSN55qE5Y2V5YWD5qC85L2N572uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuaXF1ZUNlbGxQb3NpdGlvbihjZWxsczogQ2VsbFBvc2l0aW9uW10pOiBDZWxsUG9zaXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ2VsbFBvc2l0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3QgbW9kQ2VsbHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNlbGxzLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucykuZm9yRWFjaChjZWxsID0+IG1vZENlbGxzLmFkZChKU09OLnN0cmluZ2lmeShjZWxsKSkpO1xuICAgICAgICBtb2RDZWxscy5mb3JFYWNoKChjZWxsOiBzdHJpbmcpID0+IHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoY2VsbCkpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIDlrprojIPlm7TlhoXmiYDmnInnmoTljZXlhYPmoLxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZShzdGFydFJvdzogbnVtYmVyLCBzdGFydENvbDogbnVtYmVyLCBlbmRSb3c6IG51bWJlciwgZW5kQ29sOiBudW1iZXIpOiBDZWxsUG9zaXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ2VsbFBvc2l0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcm93ID0gc3RhcnRSb3c7IHJvdyA8IGVuZFJvdzsgcm93KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPCBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyByb3csIGNvbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHNlbGVjdFJvdyhlZGl0b3I6IEVkaXRvciwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmNsZWFyTGFzdEZvY3VzUGF0aCgpO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLmdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2UoaW5kZXgsIDAsIGluZGV4ICsgMSwgcG9zLmdldFdpZHRoKCkpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMoY2VsbHMsIHBvcyk7XG4gICAgICAgIHRoaXMuZm9jdXNDZWxsKGVkaXRvciwgcG9zLnRhYmxlRW50cnlbMV0uY29uY2F0KFtpbmRleCwgMF0pKTtcbiAgICB9XG5cbiAgICBzZWxlY3RDb2x1bW4oZWRpdG9yOiBFZGl0b3IsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jbGVhckxhc3RGb2N1c1BhdGgoKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5nZXRDZWxsUG9zaXRpb25zRnJvbVJhbmdlKDAsIGluZGV4LCBwb3MuZ2V0SGVpZ2h0KCksIGluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxscyhjZWxscywgcG9zKTtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGwoZWRpdG9yLCBwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoWzAsIGluZGV4XSkpO1xuICAgIH1cblxuICAgIHNlbGVjdFRhYmxlKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5nZXRDZWxsUG9zaXRpb25zRnJvbVJhbmdlKDAsIDAsIHBvcy5nZXRIZWlnaHQoKSwgcG9zLmdldFdpZHRoKCkpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMoY2VsbHMsIHBvcyk7XG4gICAgICAgIHRoaXMuZm9jdXNDZWxsKGVkaXRvciwgcG9zLnRhYmxlRW50cnlbMV0uY29uY2F0KFswLCAwXSkpO1xuICAgIH1cblxuICAgIC8vIOaLlumAiVxuICAgIHNlbGVjdENlbGxzKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCBhbmNob3JQYXRoID0gdGhpcy5hbmNob3JDZWxsUGF0aC5zbGljZSgtMik7XG4gICAgICAgIGNvbnN0IGZvY3VzUGF0aCA9IHRoaXMuZm9jdXNDZWxsUGF0aC5zbGljZSgtMik7XG5cbiAgICAgICAgY29uc3Qgcm93cyA9IFthbmNob3JQYXRoWzBdLCBmb2N1c1BhdGhbMF1dLnNvcnQoKG0sIG4pID0+IG0gLSBuKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFthbmNob3JQYXRoWzFdLCBmb2N1c1BhdGhbMV1dLnNvcnQoKG0sIG4pID0+IG0gLSBuKTtcblxuICAgICAgICBjb25zdCB7IGNvbHNwYW46IGFuY2hvckNvbHNwYW5Db3VudCwgcm93c3BhbjogYW5jaG9yUm93c3BhbkNvdW50IH0gPSBFZGl0b3Iubm9kZShcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yQ2VsbFBhdGhcbiAgICAgICAgKVswXSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCB7IGNvbHNwYW46IGZvY3VzQ29sc3BhbkNvdW50LCByb3dzcGFuOiBmb2N1c1Jvd3NwYW5Db3VudCB9ID0gRWRpdG9yLm5vZGUoZWRpdG9yLCB0aGlzLmZvY3VzQ2VsbFBhdGgpWzBdIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yUm93ID0gYW5jaG9yUGF0aFswXSArIChhbmNob3JSb3dzcGFuQ291bnQgfHwgMSkgLSAxO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IGZvY3VzUGF0aFswXSArIChmb2N1c1Jvd3NwYW5Db3VudCB8fCAxKSAtIDE7XG4gICAgICAgIGNvbnN0IGFuY2hvckNvbCA9IGFuY2hvclBhdGhbMV0gKyAoYW5jaG9yQ29sc3BhbkNvdW50IHx8IDEpIC0gMTtcbiAgICAgICAgY29uc3QgZm9jdXNDb2wgPSBmb2N1c1BhdGhbMV0gKyAoZm9jdXNDb2xzcGFuQ291bnQgfHwgMSkgLSAxO1xuXG4gICAgICAgIGxldCBpbml0TWF4Q29sID0gTWF0aC5tYXgoYW5jaG9yQ29sLCBmb2N1c0NvbCk7XG4gICAgICAgIGxldCBpbml0TWF4Um93ID0gTWF0aC5tYXgoYW5jaG9yUm93LCBmb2N1c1Jvdyk7XG4gICAgICAgIGNvbnN0IHsgbWluUm93LCBtYXhSb3csIG1pbkNvbCwgbWF4Q29sIH0gPSB0aGlzLmdldE1pbkFuZE1heENlbGxJbmRleChpbml0TWF4Um93LCBpbml0TWF4Q29sLCByb3dzWzBdLCBjb2x1bW5zWzBdLCBwb3MudGFibGUpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZShtaW5Sb3csIG1pbkNvbCwgbWF4Um93ICsgMSwgbWF4Q29sICsgMSk7XG5cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxzKGNlbGxzLCBwb3MpO1xuICAgIH1cblxuICAgIGdldE1pbkFuZE1heENlbGxJbmRleChtYXhSb3c6IG51bWJlciwgbWF4Q29sOiBudW1iZXIsIG1pblJvdzogbnVtYmVyLCBtaW5Db2w6IG51bWJlciwgdGFibGU6IFRhYmxlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBiZWZvcmVDb2xzID0gW107XG4gICAgICAgIGNvbnN0IGJlZm9yZVJvd3MgPSBbXTtcbiAgICAgICAgbGV0IHNwYW5TZWxlY3RlZENlbGxzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwYW5TZWxlY3RlZENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnNcbiAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSBpdGVtO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGFibGUuY2hpbGRyZW5bcm93XS5jaGlsZHJlbltjb2xdIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBub2RlLmNvbHNwYW4gfHwgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzcGFuOiBub2RlLnJvd3NwYW4gfHwgMVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlLmNoaWxkcmVuLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4IDw9IG1heFJvdykge1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5tYXAoKGNlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xJbmRleCA8PSBtYXhDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSb3dJbmRleCA9IHJvd0luZGV4ICsgKGNlbGwucm93c3BhbiB8fCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsQ29sSW5kZXggPSBjb2xJbmRleCArIChjZWxsLmNvbHNwYW4gfHwgMSkgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BhblNlbGVjdGVkQ2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByb3c6IHNlbGVjdFJvdywgY29sOiBzZWxlY3RDb2wsIHJvd3NwYW46IHNlbGVjdFJvd3NwYW4sIGNvbHNwYW46IHNlbGVjdENvbHNwYW4gfSA9IHNwYW5TZWxlY3RlZENlbGxzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSb3cgKyBzZWxlY3RSb3dzcGFuIC0gMSA+PSBtaW5Sb3cgJiYgc2VsZWN0Q29sICsgc2VsZWN0Q29sc3BhbiAtIDEgPj0gbWluQ29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblJvdyA9IE1hdGgubWluKHNwYW5TZWxlY3RlZENlbGxzWzBdLnJvdywgbWluUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sID0gTWF0aC5taW4oc3BhblNlbGVjdGVkQ2VsbHNbMF0uY29sLCBtaW5Db2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwuY29sc3BhbiAmJiBjZWxsLmNvbHNwYW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ29scy5wdXNoKHsgcm93SW5kZXgsIGNvbEluZGV4LCBjZWxsQ29sSW5kZXggfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxDb2xJbmRleCA+PSBtaW5Db2wgJiYgY2VsbFJvd0luZGV4ID49IG1pblJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBNYXRoLm1heChtYXhDb2wsIGNlbGxDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkNvbCA9IE1hdGgubWluKG1pbkNvbCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwucm93c3BhbiAmJiBjZWxsLnJvd3NwYW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUm93cy5wdXNoKHsgcm93SW5kZXgsIGNvbEluZGV4LCBjZWxsUm93SW5kZXggfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxDb2xJbmRleCA+PSBtaW5Db2wgJiYgY2VsbFJvd0luZGV4ID49IG1pblJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5Sb3cgPSBNYXRoLm1pbihtaW5Sb3csIHJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um93ID0gTWF0aC5tYXgobWF4Um93LCBjZWxsUm93SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDliKTmlq3pgInljLrojIPlm7TlhoXkuYvliY3nmoTljZXlhYPmoLwg5aaC5p6c5a2Y5ZyoY2VsbENvbEluZGV4ID09PSBtaW5Db2zvvIzooajnpLrlvZPliY3ojrflj5bnmoRtaW5Db2zlubbkuI3mmK/mnIDlsI/nmoTvvIzph43mlrDojrflj5ZtaW5Db2xcbiAgICAgICAgY29uc3QgY29sTm9kZSA9IGJlZm9yZUNvbHMuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnJvd0luZGV4IDw9IG1heFJvdyAmJiBpdGVtLmNvbEluZGV4IDw9IG1heENvbCAmJiBpdGVtLnJvd0luZGV4ID49IG1pblJvdyAmJiBpdGVtLmNlbGxDb2xJbmRleCA9PT0gbWluQ29sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJvd05vZGUgPSBiZWZvcmVSb3dzLmZpbHRlcihcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5yb3dJbmRleCA8PSBtYXhSb3cgJiYgaXRlbS5jb2xJbmRleCA8PSBtYXhDb2wgJiYgaXRlbS5jb2xJbmRleCA+PSBtaW5Db2wgJiYgaXRlbS5jZWxsUm93SW5kZXggPT09IG1pblJvd1xuICAgICAgICApO1xuICAgICAgICBpZiAoY29sTm9kZS5sZW5ndGggfHwgcm93Tm9kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1pbkFuZE1heENlbGxJbmRleChtYXhSb3csIG1heENvbCwgbWluUm93LCBtaW5Db2wsIHRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWluUm93LFxuICAgICAgICAgICAgbWF4Um93LFxuICAgICAgICAgICAgbWluQ29sLFxuICAgICAgICAgICAgbWF4Q29sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8g6YCJ5oup5Y2V5YWD5qC8XG4gICAgc2VsZWN0Q2VsbChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCwgZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIG5vZGUpO1xuICAgICAgICB0aGlzLmFuY2hvckNlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGxFbGVtZW50ID0gY2VsbDtcbiAgICAgICAgY29uc3QgW3JvdywgY29sXSA9IHBhdGguc2xpY2UoLTIpO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBDZWxsUG9zaXRpb25bXSA9IFt7IHJvdywgY29sIH1dO1xuICAgICAgICBpZiAodGhpcy5wb2ludGVyU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucyk7XG4gICAgICAgICAgICAvLyDlpITnkIbljZXlhYPmoLzpgInkuK3ml7bvvIzlpITnkIbkuLrpgInkuK3lpJrljZXlhYPmoLxcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0aGlzLmdldENlbGxQb3NpdGlvbnNCZWZvcmVNZXJnZSh7IHJvdywgY29sIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgICAgICAvLyDlt7LogZrnhKbnmoTljZXlhYPmoLzlnKjlpJrpgInmqKHlvI/kuIvpgInkuK3vvIjmmoLlrZjkuIrmrKHogZrnhKbnmoTljZXlhYPmoLzmlbDmja7vvIlcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IHRoaXMubGFzdEZvY3VzQ2VsbFBhdGg/LnNsaWNlKC0yKTtcbiAgICAgICAgICAgIGlmIChmb2N1c0NlbGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2N1c0NlbGxzID0gdGhpcy5nZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UoeyByb3c6IGZvY3VzQ2VsbFswXSwgY29sOiBmb2N1c0NlbGxbMV0gfSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZm9jdXNDZWxscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxzKHJlc3VsdCwgcG9zKTtcbiAgICB9XG5cbiAgICAvLyDorqHnrpflkIjlubbliY3nmoTljZXlhYPmoLxcbiAgICBnZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UoeyByb3csIGNvbCB9OiBDZWxsUG9zaXRpb24pOiBDZWxsUG9zaXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB7IHJvd3NwYW4sIGNvbHNwYW4gfSA9IHBvcy5maW5kQ2VsbEJ5UGF0aCh7IHJvdywgY29sIH0pO1xuICAgICAgICBpZiAocm93c3BhbiB8fCBjb2xzcGFuKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xTcGFuID0gY29sc3BhbiA/PyAxO1xuICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IHJvd3NwYW4gPz8gMTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2Uocm93LCBjb2wsIHJvdyArIHJvd1NwYW4sIGNvbCArIGNvbFNwYW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbeyByb3csIGNvbCB9XTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZENlbGxzQ2hhbmdlKCk6IE9ic2VydmFibGU8VGFibGVDZWxsRWxlbWVudFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2VsbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSk7XG4gICAgfVxuXG4gICAgY2VsbHNQb3NpdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHNDaGFuZ2VPYmplY3QkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGNoYW5nZUNlbGxzKCkge1xuICAgICAgICB0aGlzLmNlbGxzQ2hhbmdlT2JqZWN0JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgZW1pdFRhYmxlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRhYmxlQ2hhbmdlJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgdGFibGVDaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGVkQ2VsbHMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ2VsbFNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmlnaHRDbGlja2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMkLm5leHQoW10pO1xuICAgIH1cblxuICAgIGNsZWFyTGFzdEZvY3VzUGF0aCgpIHtcbiAgICAgICAgdGhpcy5sYXN0Rm9jdXNDZWxsUGF0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8g5ouW6YCJ5byA5aeLIHx8IOiusOW9leiBmueEpueCuVxuICAgIHNlbGVjdENlbGxTdGFydChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCwgZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgdGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIGNlbGwpO1xuICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIG5vZGUpO1xuICAgICAgICB0aGlzLmFuY2hvckNlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5sYXN0Rm9jdXNDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIGlmICghdGhpcy5wcmVGb2N1c0NlbGxQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLnByZUZvY3VzQ2VsbFBhdGggPSB0aGlzLmFuY2hvckNlbGxQYXRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Q2VsbE9uZ29pbmcoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQsIGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGlmIChBbmd1bGFyRWRpdG9yLmlzUmVhZG9ubHkoZWRpdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0NoYW5nZWQ6IGJvb2xlYW47XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIGNlbGwpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgICAgIGlzQ2hhbmdlZCA9ICF0aGlzLmZvY3VzQ2VsbFBhdGggfHwgdGhpcy5mb2N1c0NlbGxQYXRoLnRvU3RyaW5nKCkgIT09IHBhdGgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ2VsbEVsZW1lbnQgPSBjZWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNDaGFuZ2VkID1cbiAgICAgICAgICAgICAgICAhdGhpcy5mb2N1c0NlbGxQYXRoIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuZm9jdXNDZWxsUGF0aC50b1N0cmluZygpID09PSB0aGlzLmFuY2hvckNlbGxQYXRoLnRvU3RyaW5nKCkgJiYgdGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgJiYgaXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmVGb2N1c0NlbGxQYXRoKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb2N1c0NlbGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDZWxsU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENlbGxzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVGb2N1c0NlbGxQYXRoID0gdGhpcy5mb2N1c0NlbGxQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Q2VsbEVuZChlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBpZiAodGhpcy5pc0NlbGxTZWxlY3RpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDZWxsKGVkaXRvciwgdGhpcy5mb2N1c0NlbGxQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUHJlcGFyZVNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZUZvY3VzQ2VsbFBhdGggPSBudWxsO1xuICAgIH1cblxuICAgIGZvY3VzQ2VsbChlZGl0b3I6IEVkaXRvciwgcGF0aDogbnVtYmVyW10pIHtcbiAgICAgICAgY29uc3QgYXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBwYXRoKTtcbiAgICAgICAgVGhlRWRpdG9yLmZvY3VzKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgfVxuXG4gICAgZGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKTogT2JzZXJ2YWJsZTxDZWxsUG9zaXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYW5nZXJvdXNDZWxscyQuYXNPYnNlcnZhYmxlKCkucGlwZShza2lwKDEpKTtcbiAgICB9XG5cbiAgICBzZXREYW5nZXJvdXNDZWxscygpIHtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNSb3dzSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93c0luZGV4O1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXg7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLm5leHQodGhpcy5zZWxlY3RlZENlbGxQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGNsZWFyRGFuZ2Vyb3VzQ2VsbHMoKSB7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gW107XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ29sdW1uc0luZGV4ID0gW107XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLm5leHQoW10pO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgaWYgKHBvcy50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSB0aGlzLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCA9PT0gcG9zLmdldEhlaWdodCgpICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXgubGVuZ3RoID09PSBwb3MuZ2V0V2lkdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRhbmdlcm91c09yU2VsZWN0ZWRDZWxsc0NoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSksIHRoaXMuc2VsZWN0ZWRDZWxscyQuYXNPYnNlcnZhYmxlKCkucGlwZShza2lwKDEpKSk7XG4gICAgfVxuXG4gICAgc2V0RGFuZ2Vyb3VzUm93cygpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgY29uc3Qgcm93cyA9IHVuaXEobWFwKGNlbGxzLCAncm93JykpLnZhbHVlT2YoKSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gcm93cztcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSByb3dzLmxlbmd0aCA9PT0gcG9zLmdldEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ29sdW1uc0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRXaWR0aCgpKV0ubWFwKCh2LCBpKSA9PiBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgcm93SW5kZXggb2Ygcm93cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3MuZ2V0V2lkdGgoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICBjb2w6IGlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgc2V0RGFuZ2Vyb3VzQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgY29uc3QgY29scyA9IHVuaXEobWFwKGNlbGxzLCAnY29sJykpLnZhbHVlT2YoKSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ29sdW1uc0luZGV4ID0gY29scztcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSBjb2xzLmxlbmd0aCA9PT0gcG9zLmdldFdpZHRoKCk7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kYW5nZXJvdXNSb3dzSW5kZXggPSBbLi4uQXJyYXkocG9zLmdldEhlaWdodCgpKV0ubWFwKChfLCBpKSA9PiBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29sSW5kZXggb2YgY29scykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3MuZ2V0SGVpZ2h0KCk7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcm93OiBpLFxuICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbEluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDZWxscyQubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHNldERhbmdlcm91c1RhYmxlKCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY3JlYXRlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZSgwLCAwLCBwb3MuZ2V0SGVpZ2h0KCksIHBvcy5nZXRXaWR0aCgpKTtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNSb3dzSW5kZXggPSBbLi4uQXJyYXkocG9zLmdldEhlaWdodCgpKV0ubWFwKChfLCBpKSA9PiBpKTtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDb2x1bW5zSW5kZXggPSBbLi4uQXJyYXkocG9zLmdldFdpZHRoKCkpXS5tYXAoKF8sIGkpID0+IGkpO1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KGNlbGxzKTtcbiAgICB9XG5cbiAgICBzZWxlY3RGaXJzdENlbGwoKSB7XG4gICAgICAgIGNvbnN0IHsgcm93LCBjb2wgfSA9IHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zWzBdO1xuICAgICAgICBjb25zdCB0YWJsZVBhdGggPSB0aGlzLmdldFRhYmxlUGF0aCgpO1xuICAgICAgICBjb25zdCBwYXRoID0gRWRpdG9yLnN0YXJ0KHRoaXMuZWRpdG9yLCBbLi4udGFibGVQYXRoLCByb3csIGNvbF0pO1xuICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcGF0aCk7XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWRDZWxsc0JhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3I6IENvbG9yVHlwZSkge1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zO1xuICAgICAgICBjb25zdCB0YWJsZVBhdGggPSB0aGlzLmdldFRhYmxlUGF0aCgpO1xuICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKHRoaXMuZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgcm93LCBjb2wgfSBvZiBjZWxscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlUGF0aCwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXModGhpcy5lZGl0b3IsIHsgYmFja2dyb3VuZENvbG9yIH0sIHsgYXQ6IGNlbGxQYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZENlbGxCYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgeyBjZWxsIH0gPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybiBjZWxsICYmIGNlbGwuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGVkQ2VsbHNDb250ZW50KCkge1xuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zO1xuICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGlmICh0YWJsZVBvc2l0aW9uLmlzSW5UYWJsZSgpKSB7XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKHRoaXMuZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IHJvdywgY29sIH0gb2YgY2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCByb3csIGNvbF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBOb2RlLmdldCh0aGlzLmVkaXRvciwgY2VsbFBhdGgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLmNsZWFyQ2VsbCh0aGlzLmVkaXRvciwgW25vZGUsIGNlbGxQYXRoXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgRWRpdG9yLnN0YXJ0KHRoaXMuZWRpdG9yLCB0YWJsZVBvc2l0aW9uLmNlbGxFbnRyeVsxXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWVyZ2VDZWxsKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIG1lcmdlQ2VsbChlZGl0b3IsIHRoaXMuc2VsZWN0ZWRDZWxsUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRUYWJsZU9wdGlvbnMoZWRpdG9yOiBFZGl0b3IsIG5ld09wdGlvbnM6IFRoZVRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gdGhpcy5jcmVhdGVUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9IHRoaXMuZ2V0VGFibGVQYXRoKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVQb3NpdGlvbi50YWJsZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4udGFibGUub3B0aW9ucywgLi4ubmV3T3B0aW9ucyB9O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKGVkaXRvciwgeyBvcHRpb25zIH0sIHsgYXQ6IHRhYmxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVEYW5nZXJvdXNDb2x1bW5zT3JSb3dzKCkge1xuICAgICAgICBjb25zdCB7IGRhbmdlcm91c1Jvd3NJbmRleCwgZGFuZ2Vyb3VzQ29sdW1uc0luZGV4IH0gPSB0aGlzO1xuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbk9yUm93cyhkYW5nZXJvdXNSb3dzSW5kZXgsIGRhbmdlcm91c0NvbHVtbnNJbmRleCk7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGVQb3NpdGlvbiA9ICgpOiBUYWJsZVBvc2l0aW9uID0+IHtcbiAgICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24uYW5jaG9yO1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICByZXR1cm4gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgdGhpcy5lZGl0b3IsIHBhdGgpO1xuICAgIH07XG5cbiAgICByZW1vdmVDb2x1bW5PclJvd3Moc2VsZWN0ZWRSb3dJbmRleHMgPSB0aGlzLnNlbGVjdGVkUm93c0luZGV4LCBzZWxlY3RlZENvbHVtbkluZGV4cyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zSW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyBpc1NlbGVjdGVkVGFibGUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSB0aGlzLmNyZWF0ZVRhYmxlUG9zaXRpb24oKTtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgVGFibGVFZGl0b3IucmVtb3ZlVGFibGUodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlUG9zaXRpb24udGFibGUpIGFzIGFueTtcbiAgICAgICAgaWYgKHNlbGVjdGVkUm93SW5kZXhzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRDb2x1bW5JbmRleHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyDliKDpmaTooYzml7blj5bmtojmoIfpopjooYxcbiAgICAgICAgICAgIGlmICh0YWJsZVBvc2l0aW9uLnRhYmxlICYmIHRhYmxlQ29tcG9uZW50LmhlYWRlclJvdyAmJiBzZWxlY3RlZFJvd0luZGV4cy5pbmNsdWRlcygwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVPcHRpb25zKHRoaXMuZWRpdG9yLCB7IGhlYWRlclJvdzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgLy8gaGVhZGVyUm93IOWFvOWuueS7o+eggSwg5Y+W5raI5qCH6aKY6KGM55qE5pe25YCZ5ZCM5pe26K6+572uIHJvdyDkuK3nmoQgaGVhZGVyIOWxnuaAp1xuICAgICAgICAgICAgICAgIGlmICh0YWJsZVBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuWzBdLmhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dQYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCB0YWJsZVBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2Rlcyh0aGlzLmVkaXRvciwgeyBoZWFkZXI6IG51bGwgfSwgeyBhdDogcm93UGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RlZFJvd0luZGV4c1xuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnJlbW92ZVJvdyh0aGlzLmVkaXRvciwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDZWxscygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZENvbHVtbkluZGV4cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkUm93SW5kZXhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8g5Yig6Zmk5YiX5pe25Y+W5raI5qCH6aKY5YiXXG4gICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi50YWJsZSAmJiB0YWJsZVBvc2l0aW9uLnRhYmxlLm9wdGlvbnM/LmhlYWRlckNvbHVtbiAmJiBzZWxlY3RlZENvbHVtbkluZGV4cy5pbmNsdWRlcygwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVPcHRpb25zKHRoaXMuZWRpdG9yLCB7IGhlYWRlckNvbHVtbjogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RlZENvbHVtbkluZGV4c1xuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnJlbW92ZUNvbHVtbih0aGlzLmVkaXRvciwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDZWxscygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -11378,7 +11378,7 @@ class TableStore {
11378
11378
  }
11379
11379
  }
11380
11380
  setSelectedCells(cells, pos) {
11381
- const uniqueCells = this.uniqueCellPosition(cells);
11381
+ const uniqueCells = this.pointerSelection ? this.uniqueCellPosition(cells) : cells;
11382
11382
  const cellElements = uniqueCells.map(cell => {
11383
11383
  return pos.findCellByPath(cell);
11384
11384
  });
@@ -11393,14 +11393,11 @@ class TableStore {
11393
11393
  * @returns
11394
11394
  */
11395
11395
  uniqueCellPosition(cells) {
11396
- let result = [];
11397
- if (this.pointerSelection) {
11398
- const modCells = new Set();
11399
- cells.concat(this.selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));
11400
- modCells.forEach((cell) => result.push(JSON.parse(cell)));
11401
- return result;
11402
- }
11403
- return cells;
11396
+ const result = [];
11397
+ const modCells = new Set();
11398
+ cells.concat(this.selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));
11399
+ modCells.forEach((cell) => result.push(JSON.parse(cell)));
11400
+ return result;
11404
11401
  }
11405
11402
  /**
11406
11403
  * 获取一定范围内所有的单元格