fantasy-ngzorro 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/fantasy-ngzorro.umd.js +12 -11
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/hd-form-lines/hd-form-lines.component.js +13 -12
- package/esm5/hd-form-lines/hd-form-lines.component.js +13 -12
- package/fesm2015/fantasy-ngzorro.js +12 -11
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +12 -11
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/package.json +1 -1
|
@@ -129,7 +129,7 @@ export class HdFormLinesComponent {
|
|
|
129
129
|
return;
|
|
130
130
|
}
|
|
131
131
|
// 如果是最后一个可输入元素,新增行
|
|
132
|
-
if (x === this.collectDomList.length - 1 && y === this.collectDomList[0].length - 1) {
|
|
132
|
+
if (!(this.activeDom instanceof NzSelectComponent) && x === this.collectDomList.length - 1 && y === this.collectDomList[0].length - 1) {
|
|
133
133
|
this.addNewLineAndFocus();
|
|
134
134
|
}
|
|
135
135
|
else {
|
|
@@ -409,16 +409,17 @@ export class HdFormLinesComponent {
|
|
|
409
409
|
break;
|
|
410
410
|
case 'Enter':
|
|
411
411
|
console.log('this.activeDom', this.activeDom);
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
412
|
+
if (this.activeDom instanceof NzSelectComponent) {
|
|
413
|
+
this.activeSelectedComponentOpen = this.activeDom.open;
|
|
414
|
+
if (this.activeSelectedComponentOpen === false) {
|
|
415
|
+
console.log('执行过程10');
|
|
416
|
+
this.focusDom(this.activeDomX, this.activeDomY);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
else if (this.activeDomX === this.collectDomList.length - 1) {
|
|
420
|
+
console.log('执行过程qqq');
|
|
421
|
+
this.addNewLineAndFocus();
|
|
422
|
+
}
|
|
422
423
|
break;
|
|
423
424
|
case 'Escape':
|
|
424
425
|
if (this.activeDom instanceof NzSelectComponent) {
|
|
@@ -1375,4 +1376,4 @@ if (false) {
|
|
|
1375
1376
|
*/
|
|
1376
1377
|
HdFormLinesComponent.prototype.cdr;
|
|
1377
1378
|
}
|
|
1378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS1saW5lcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtLWxpbmVzL2hkLWZvcm0tbGluZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEosT0FBTyxFQUFhLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUosT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU1qRSxNQUFNLE9BQU8sb0JBQW9COzs7OztJQTRDL0IsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpDMUMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUk1QyxtQkFBYyxHQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxXQUFNLEdBQStCLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztR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QUVwSywwQ0FBMEI7O0lBQzFCLDBDQUEwQjs7SUFDMUIseUNBQW1KOztJQUNuSiwyREFBNkM7Ozs7O0lBODBCN0MsOENBQXdEOzs7OztJQTUwQjVDLGtDQUF1Qjs7Ozs7SUFBRSxtQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiwgTnpEYXRlUGlja2VyQ29tcG9uZW50LCBOeklucHV0TnVtYmVyQ29tcG9uZW50LCBOelJhbmdlUGlja2VyQ29tcG9uZW50LCBOelNlbGVjdENvbXBvbmVudCwgTnpUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvdGFsT3B0aW9uIH0gZnJvbSAnLi4vaGQtZGV0YWlsLWxpbmVzL2hkLWRldGFpbC1saW5lcy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1MaW5lLCBGb3JtTGluZVR5cGUgfSBmcm9tICcuL2hkLWZvcm0tbGluZXMuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZC1mb3JtLWxpbmVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hkLWZvcm0tbGluZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC1mb3JtLWxpbmVzLmNvbXBvbmVudC5sZXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgSGRGb3JtTGluZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkcmVuKCdmb3JtSW5wdXREb20nKSBmb3JtSW5wdXREb21MaXN0ITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0YWJsZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUxpbmVzOiBBcnJheTxGb3JtTGluZT47XG4gIC8vIOmSiOWvuWZvcm1MaW5lc+mHjOmdouaJgOacieeahG5hbWXvvIxcbiAgQElucHV0KCkgZm9ybUxpbmVzRGF0YTogYW55O1xuICBASW5wdXQoKSBvcGVyYXRlQnV0dG9uczogQXJyYXk8c3RyaW5nPiA9IFsnYWRkJywgJ2RlbGV0ZSddO1xuICBASW5wdXQoKSBzY3JvbGw6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9ID0geyB4OiAnMXB4JyB9O1xuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93RGVsZXRlQ29uZmlybTogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdpbmF0aW9uUGFnZUluZGV4OiBudW1iZXIgPSAxO1xuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDEwO1xuICB2YWxpZGF0ZUhkRm9ybUxpbmVzOiBGb3JtR3JvdXA7XG4gIG5ld0xpbmU6IGFueTtcbiAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuXG4gIC8vIOWQiOiuoeWMuuWfn1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd1RvdGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsT3B0aW9uOiBBcnJheTxUb3RhbE9wdGlvbj4gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uc051bWJlcjogbnVtYmVyIHwgc3RyaW5nID0gMDtcbiAgdG90YWxPcHRpb25MaXN0ID0gW107XG5cbiAgc2hvd0Zvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyU3RyOiBzdHJpbmc7XG4gIHN0b3JlRm9ybUxpbmVzRGF0YTogYW55ID0gW107IC8vIOe8k+WtmOeahOaAu+eahOihqOWNleaVsOaNrlxuICBmaWx0ZXJTdG9yZUZvcm1MaW5lc0RhdGE6IGFueSA9IFtdOyAvLyDnrZvpgInlh7rmnaXnmoTmlbDmja7liJfooahcbiAgZmlsdGVySW5kZXhTdG9yZTogQXJyYXk8bnVtYmVyPiA9IFtdOyAvLyDnrZvpgInlh7rmnaXnmoTmlbDmja7lnKjljp/lp4vliJfooajkuK3nmoTkuIvmoIdcbiAgaXNGaWx0ZXJEYXRhOiBib29sZWFuID0gZmFsc2U7IC8vIOaYr+WQpuaYr+W3sue7j+etm+mAiei/h+eahOaVsOaNrlxuICBmb3JtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8g6KGo5Y2V5b2T5YmN55qE54q25oCBXG4gIHByaXZhdGUgc2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZm46IGFueSwgZXZlbnQ6IGFueSwgbGluZTogYW55OyB9PigpO1xuICBwcml2YXRlIGRlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDsgIC8vIOm7mOiupOmYsuaKluaXtumXtFxuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8g5b2T5YmN6aG155qEZG9t5LqM57u05pWw57uEXG4gIGNvbGxlY3REb21MaXN0OiBBcnJheTxBcnJheTxFbGVtZW50UmVmIHwgTnpTZWxlY3RDb21wb25lbnQgfCBOeklucHV0TnVtYmVyQ29tcG9uZW50IHwgTnpEYXRlUGlja2VyQ29tcG9uZW50IHwgTnpSYW5nZVBpY2tlckNvbXBvbmVudCB8IE56VGltZVBpY2tlckNvbXBvbmVudD4+ID0gW107XG4gIC8vIOW9k+WJjeiBmueEpueahGRvbeWFg+e0oOWdkOagh1xuICBhY3RpdmVEb21YOiBudW1iZXIgPSBudWxsO1xuICBhY3RpdmVEb21ZOiBudW1iZXIgPSBudWxsO1xuICBhY3RpdmVEb206IEVsZW1lbnRSZWYgfCBOelNlbGVjdENvbXBvbmVudCB8IE56SW5wdXROdW1iZXJDb21wb25lbnQgfCBOekRhdGVQaWNrZXJDb21wb25lbnQgfCBOelJhbmdlUGlja2VyQ29tcG9uZW50IHwgTnpUaW1lUGlja2VyQ29tcG9uZW50ID0gbnVsbDtcbiAgYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpXG4gICAgKS5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBsaW5lIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgbGluZSkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8g57yT5a2Y5LiA5LiL5oC755qE6KGo5Y2V5pWw5o2uXG4gICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSB0aGlzLmZvcm1MaW5lc0RhdGE7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICB9XG5cbiAgZ2V0IGZvcm1MaW5lc0xlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGg7XG4gIH1cblxuICBjb2xsZWN0RG9tRGF0YSgpIHtcbiAgICB0aGlzLmNvbGxlY3REb21MaXN0ID0gW107XG4gICAgY29uc3QgcGFnZURvbUxpc3QgPSB0aGlzLmZvcm1JbnB1dERvbUxpc3QudG9BcnJheSgpO1xuICAgIC8vIFN0ZXAgMTog6I635Y+W5b2T5YmN6aG155qE5pWw5o2u6YePXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgY29uc3QgYWRqdXN0ZWRFbmRJbmRleCA9IGVuZEluZGV4ID4gdGhpcy5mb3JtTGluZXNMZW5ndGggPyB0aGlzLmZvcm1MaW5lc0xlbmd0aCA6IGVuZEluZGV4O1xuICAgIGNvbnN0IHBhZ2VMaW5lc0xlbmd0aCA9IGFkanVzdGVkRW5kSW5kZXggLSBzdGFydEluZGV4O1xuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBwYWdlRG9tTGlzdC5sZW5ndGggLyBwYWdlTGluZXNMZW5ndGg7XG4gICAgLy8gU3RlcCAyOiDmi4bliIZmb3JtSW5wdXREb21MaXN0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlTGluZXNMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdC5wdXNoKHBhZ2VEb21MaXN0LnNwbGljZSgwLCBpbnRlcnZhbCkpO1xuICAgIH1cbiAgICAvLyDlhbPpl63miYDmnIlOeklucHV0TnVtYmVyQ29tcG9uZW5055qE6ZSu55uY5LiK5LiL566t5aS06Kem5Y+RKy3nmoTlip/og71cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2xsZWN0RG9tTGlzdFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W2ldW2pdO1xuICAgICAgICBpZiAoZG9tIGluc3RhbmNlb2YgTnpJbnB1dE51bWJlckNvbXBvbmVudCkge1xuICAgICAgICAgIGRvbS5kb3duID0gKCkgPT4geyB9O1xuICAgICAgICAgIGRvbS51cCA9ICgpID0+IHsgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOiBmueEpuS4i+S4gOS4qmRvbVxuICBqdW1wVG9OZXh0SW5wdXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8ICF0aGlzLmNvbGxlY3REb21MaXN0IHx8IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWmguaenOaYr+acgOWQjuS4gOS4quWPr+i+k+WFpeWFg+e0oO+8jOaWsOWinuihjFxuICAgIGlmICh4ID09PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEgJiYgeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsxJyk7XG4gICAgICAgIC8vIOWmguaenOaYr+acgOWQjuS4gOWIl++8jOWImei3s+i9rOWIsOS4i+S4gOihjOesrOS4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHggKyAxLCAwLCAncmlnaHQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsyJyk7XG4gICAgICAgIC8vIOWmguaenOS4jeaYr+acgOWQjuS4gOWIl++8jOWImei3s+i9rOWIsOW9k+WJjeihjOS4i+S4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHgsIHkgKyAxLCAncmlnaHQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5aKe5Yqg5paw6KGM5bm25LiU6IGa54Sm5Yiw56ys5LiA5Liq5YWD57Sg77yMXG4gICAqIOi/memHjOimgeazqOaEj++8jOWmguaenOWtmOWcqOe/u+mhteaDheWGte+8jOmcgOimgeWkhOeQhlxuICAgKi9cbiAgYWRkTmV3TGluZUFuZEZvY3VzKCkge1xuICAgIC8vIOW9k+WJjeihjOS4uuW9k+WJjemhteacgOWQjuS4gOihjOeahOaXtuWAme+8jOWIpOaWreS4i+S4gOmhteaYr+WQpuacieaVsOaNrlxuICAgIC8vIDHjgIHlpoLmnpzmnInvvJrnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgLy8gMuOAgeWmguaenOayoeacie+8muaWsOWinuihjCvnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgaWYgKHRoaXMuYWN0aXZlRG9tWCA9PT0gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgLSAxKSB7XG4gICAgICAvLyDliKTmlq3kuIvkuIDpobXmmK/lkKbmnInmlbDmja5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPCBNYXRoLmNlaWwodGhpcy5mb3JtTGluZXNMZW5ndGggLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSkpIHtcbiAgICAgICAgLy8g57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXgrKztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIszJyk7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSgwLCAwLCAncmlnaHQnKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDmlrDlop7ooYwr57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLmFkZEZvcm1MaW5lKCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCsrO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizQnKTtcbiAgICAgICAgICB0aGlzLmZvY3VzRG9tKDAsIDApO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOiBmueEpuWIsOS4iuS4gOS4qmRvbVxuICBqdW1wVG9QcmV2SW5wdXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8ICF0aGlzLmNvbGxlY3REb21MaXN0IHx8IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgIC8vIOWmguaenOaYr+esrOS4gOS4quWPr+i+k+WFpeWFg+e0oO+8jCDliKTmlq3mmK/lkKbmnInkuIrkuIDpobXvvIwg5aaC5p6c5pyJ77yM5YiZ57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA+IDEpIHtcbiAgICAgICAgLy8g57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXgtLTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIs1Jyk7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEsIHRoaXMuY29sbGVjdERvbUxpc3RbMF0ubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLNicpO1xuICAgICAgICAvLyDlpoLmnpzmmK/nrKzkuIDliJfvvIzliJnot7PovazliLDkuIrkuIDooYzmnIDlkI7kuIDkuKrovpPlhaXmoYZcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh4IC0gMSwgdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxLCAnbGVmdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizcnKTtcbiAgICAgICAgLy8g5aaC5p6c5LiN5piv56ys5LiA5YiX77yM5YiZ6Lez6L2s5Yiw5b2T5YmN6KGM5LiK5LiA5Liq6L6T5YWl5qGGXG4gICAgICAgIHRoaXMuZm9jdXNEb20oeCwgeSAtIDEsICdsZWZ0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiBmueEpuWIsOafkOS4qmRvbVxuICAgKiBAcGFyYW0geCDlnZDmoId4XG4gICAqIEBwYXJhbSB5IOWdkOagh3lcbiAgICogQHBhcmFtIGp1bXBEaXJlY3Rpb24g6Lez6L2s5pa55ZCRXG4gICAqL1xuICBmb2N1c0RvbSh4OiBudW1iZXIsIHk6IG51bWJlciwganVtcERpcmVjdGlvbjogc3RyaW5nID0gJ3JpZ2h0Jykge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgIXRoaXMuY29sbGVjdERvbUxpc3QgfHwgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5YWI5riF6Zmk5LiA5LiL5b2T5YmN55qE54Sm54K5XG4gICAgdGhpcy5jbGVhbkZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICBpZiAodGhpcy5jb2xsZWN0RG9tTGlzdFt4XSAmJiB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldKSB7XG4gICAgICBjb25zdCBkb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldO1xuICAgICAgLy8g6ZyA6KaB5Yik5pat5LiL5LiA5LiqZm9jdXPnmoRkb23mmK/lkKbmmK/npoHnlKjnirbmgIHvvIzlpoLmnpzmmK/npoHnlKjnirbmgIHpnIDopoHot7Pov4dcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoZG9tLm56RGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9tLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInLCBpbmxpbmU6ICdjZW50ZXInIH0pO1xuICAgICAgICAvLyDov5nph4zlpJrpgInmoYbpnIDopoHpop3lpJblpITnkIbkuIvvvIzlm6DkuLrlkJHkuIvnmoTml7blgJnkvJrop6blj5HlhoXpg6hJbnB1dOeahOiBmueEpu+8jOaKiuS4i+S4gOS4qmRvbeeahGZvY3Vz5pS+5Yiw5a6P5Lu75Yqh5Lit77yM5bu26L+f5aSE55CG44CCXG4gICAgICAgIGlmIChkb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGRvbS5uekRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHgsIHkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb20ubnpJZCk7XG4gICAgICAgIGlucHV0RG9tLmZvY3VzKCk7XG4gICAgICAgIGlucHV0RG9tLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicsIGlubGluZTogJ2NlbnRlcicgfSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlucHV0RG9tLnNlbGVjdCgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9tIGluc3RhbmNlb2YgRWxlbWVudFJlZikge1xuICAgICAgICBpZiAoZG9tLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJywgaW5saW5lOiAnY2VudGVyJyB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBOekRhdGVQaWNrZXJDb21wb25lbnQgfHwgZG9tIGluc3RhbmNlb2YgTnpSYW5nZVBpY2tlckNvbXBvbmVudCB8fCBkb20gaW5zdGFuY2VvZiBOelRpbWVQaWNrZXJDb21wb25lbnQpIHtcbiAgICAgICAgLy8gVE9ETzrlnKhuZ3pvcnJvOC41LnjniYjmnKzvvIzml7bpl7Tnm7jlhbPnmoTpgInmi6nlmajmsqHmnInmmrTpnLLlh7pvcGVu5pa55rOV77yM5pqC5pe25YWI5LiN5aSE55CG44CC77yIMTAueOWPiuS7peS4iueJiOacrOaPkOS+m+S6hm9wZW7mlrnms5XvvIlcbiAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh4LCB5KTtcbiAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNldEFjdGl2ZURvbSh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5rKh5pyJZG9t55qE5Zy65pmv5LiL77yM6ZyA6KaB5Yik5pat5piv5bem6L+Y5piv5Y+z77yMXG4gICAgfVxuICB9XG5cbiAgY2xlYW5Gb2N1c0RvbSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgIXRoaXMuY29sbGVjdERvbUxpc3QgfHwgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGVjdERvbUxpc3RbeF0gJiYgdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XSkge1xuICAgICAgY29uc3QgZG9tID0gdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XTtcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBkb20uYmx1cigpO1xuICAgICAgICBkb20ubnpPcGVuID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgZG9tLm56T3BlbiA9IGZhbHNlO1xuICAgICAgICBkb20uYmx1cigpO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGRvbS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH0gZWxzZSB7IH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEb20oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSB4O1xuICAgIHRoaXMuYWN0aXZlRG9tWSA9IHk7XG4gICAgdGhpcy5hY3RpdmVEb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3RoaXMuYWN0aXZlRG9tWF1bdGhpcy5hY3RpdmVEb21ZXTtcbiAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPSB0aGlzLmFjdGl2ZURvbS5vcGVuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7ooYzlj7flkozliJflj7flkI3np7Dojrflj5blvZPliY3ogZrnhKbnmoRkb23kvY3nva5cbiAgICogQHBhcmFtIHJvd051bWJlciDooYzlj7dcbiAgICogQHBhcmFtIGNvbE51bWJlciDliJflj7cgXG4gICAqL1xuICBzZXRBY3RpdmVEb21JbkZvcm1MaW5lcyhyb3dOdW1iZXI6IG51bWJlciwgY29sTnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSByb3dOdW1iZXI7XG4gICAgdGhpcy5hY3RpdmVEb21ZID0gdGhpcy5nZXREb21JbmRleChjb2xOdW1iZXIsIHRoaXMuZm9ybUxpbmVzKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gIH1cblxuICAvKipcbiAgICog6ZSu55uY54K55Ye75LqL5Lu2XG4gICAqIEBwYXJhbSBldmVudCDplK7nm5jkuovku7ZcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVEb21YID09PSBudWxsIHx8IHRoaXMuYWN0aXZlRG9tWSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50ICYmIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbVggIT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLOCcpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YIC0gMSwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIC8vIOWIpOaWreaYr+WQpuWcqOacgOWQjuS4gOihjO+8jOWmguaenOWcqOacgOWQjuS4gOihjO+8jOebtOaOpSvooYznv7vpobVcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQgJiYgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4pIHtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb21YICE9PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLOScpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YICsgMSwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuYWN0aXZlRG9tJywgdGhpcy5hY3RpdmVEb20pO1xuICAgICAgICAvLyBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICAvLyAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gdGhpcy5hY3RpdmVEb20ub3BlbjtcbiAgICAgICAgLy8gICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLMTAnKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURvbVggPT09IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqItxcXEnKTtcbiAgICAgICAgLy8gICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBub3dBY3RpdmVEb20gPSB0aGlzLmFjdGl2ZURvbSBhcyBOelNlbGVjdENvbXBvbmVudDtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gbm93QWN0aXZlRG9tLm9wZW47XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGlmIChub3dBY3RpdmVEb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsxMScpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizEyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIOWmguaenOW9k+WJjeiBmueEpueahOaYr+mAieaLqeahhu+8jOS4lOmUruWFpTAtOWEtekEtWu+8jOWImeW8ueWHulxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCAmJiB0aGlzLmFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbiA9PT0gZmFsc2UgJiYgL15bMC05YS16QS1aXSQvLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuYWN0aXZlRG9tO1xuICAgICAgICAgIGRvbS5uek9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAvLyAvLyBUT0RPOui/memHjOaaguaXtuazqOmHiu+8jOS4jeiDveebtOaOpeW4puWFpemUruWFpeWAvO+8jOi/meagt+S8muWvvOiHtOi+k+WFpeS4reaWh+eahOaXtuWAmeW4puWFpeiLseaWh+Wtl+espu+8jOS4jeespuWQiOmihOacn1xuICAgICAgICAgIC8vIGRvbS5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuaW5wdXRWYWx1ZSA9IGV2ZW50LmtleTtcbiAgICAgICAgICAvLyAvLyDojrflj5YgaW5wdXQg5YWD57SgXG4gICAgICAgICAgLy8gY29uc3QgaW5wdXRFbGVtZW50ID0gZG9tLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyAgIC8vIOinpuWPkei+k+WFpeS6i+S7tu+8jOS7peehruS/nSBBbmd1bGFyIOajgOa1i+WIsOWAvOeahOWPmOWMllxuICAgICAgICAgIC8vICAgY29uc3QgZXZlbnRJbnB1dCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSk7XG4gICAgICAgICAgLy8gICBpbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudElucHV0KTtcbiAgICAgICAgICAvLyB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIOagueaNruWcqOWIneWni2RvbeS4i+agh+WSjOaVsOaNrumbhiDojrflj5blnKhjb2xsZWN0RG9tTGlzdOS4reeahOS4i+agh1xuICAgKiBAcGFyYW0gaW5kZXgg5Yid5aeL5LiL5qCHXG4gICAqIEBwYXJhbSBsaXN0IOaVsOaNrumbhlxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHByaXZhdGUgZ2V0RG9tSW5kZXgoaW5kZXg6IG51bWJlciwgbGlzdDogQXJyYXk8Rm9ybUxpbmU+KTogbnVtYmVyIHtcbiAgICBjb25zdCB0eXBlTGlzdCA9IFsnSW5wdXQnLCAnU2VsZWN0JywgJ0RhdGUnLCAnRGF0ZVJhbmdlJywgJ1RleHRBcmVhJywgJ0lucHV0TnVtYmVyJywgJ011bHRpcGxlU2VsZWN0J107XG4gICAgbGV0IGZpbHRlckxpc3QgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyTGlzdC5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAodHlwZUxpc3QuaW5jbHVkZXMobGlzdFtpXS50eXBlKSkge1xuICAgICAgICBmaWx0ZXJMaXN0LnB1c2gobGlzdFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGxpbmVzRm9ybUFycmF5KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoJ2xpbmVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0IExvZGFzaFJvdW5kKCkge1xuICAgIHJldHVybiByb3VuZDtcbiAgfVxuXG4gIC8vIOaatOmcsueahOaWueazle+8jOeUqOS6juiOt+WPluaJgOacieaVsOaNrueahHZhbGlk54q25oCBXG4gIHB1YmxpYyBnZXRWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWQ7XG4gIH1cblxuICBvblNlYXJjaEV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueSwgb25TZWFyY2hFdmVudERlYm91bmNlVGltZTogYW55KSB7XG4gICAgaWYgKG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUpIHtcbiAgICAgIC8vIOabtOaWsOmYsuaKluaXtumXtFxuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lO1xuXG4gICAgICAvLyDlj5bmtojkuYvliY3nmoTorqLpmIVcbiAgICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyDliJvlu7rmlrDnmoTorqLpmIVcbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIGxpbmUpKTtcblxuICAgICAgLy8g5Y+R6YCB5LqL5Lu2XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgbGluZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGZuIOeItue7hOS7tuWHveaVsFxuICAgKiBAcGFyYW0gZXZlbnQg5LqL5Lu25YC8XG4gICAqIEBwYXJhbSBsaW5lIOinpuWPkeeahOihjFxuICAgKi9cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueSkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQsIGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGlubmVyR2V0VmFsaWQoKSB7XG4gICAgbGV0IHRtcFZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICdsaW5lcyc6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG4gICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZm9yRWFjaCgoZm9ybUxpbmVzRGF0YUl0ZW0pID0+IHtcbiAgICAgIGxldCBmb3JtR3JvdXBPYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyDmlrDlop7ooYwg5Yid5aeL5pWw5o2u6YO95Li6bnVsbFxuICAgICAgICBmb3JtR3JvdXBPYmpbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbCh7IHZhbHVlOiBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdID09PSAwID8gMCA6IChmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdIHx8IGl0ZW0udmFsdWUgfHwgbnVsbCksIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sIGl0ZW0ucmVxdWlyZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKTtcbiAgICAgICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSA9IHRoaXMuZmIuY29udHJvbChmb3JtTGluZXNEYXRhSXRlbVtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gfHwgbnVsbCwgW10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvcm1Hcm91cE9iai5saW5lSW5kZXggPSB0aGlzLmZiLmNvbnRyb2woKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KCdsaW5lcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMubGVuZ3RoLCBbXSk7XG4gICAgICBsZXQgZm9ybUdyb3VwVG1wID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBPYmopO1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwVG1wLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChpdGVtLm9uQ2hhbmdlRXZlbnQsIHZhbHVlLCBmb3JtR3JvdXBUbXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1Hcm91cFRtcC5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAodG1wVmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoJ2xpbmVzJykgYXMgRm9ybUFycmF5KS5pbnNlcnQoKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KCdsaW5lcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMubGVuZ3RoLCBmb3JtR3JvdXBUbXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0bXBWYWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICB9XG5cbiAgLy8g5pq06Zyy55qE5pa55rOV77yM55So5LqO6I635Y+W5omA5pyJ5pWw5o2uXG4gIHB1YmxpYyBnZXRMaW5lcygpIHtcbiAgICBsZXQgYWxsTGluZXMgPSBbXTtcbiAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5mb3JFYWNoKChmb3JtTGluZXNEYXRhSXRlbSkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXTtcbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IGZvcm1MaW5lc0RhdGFJdGVtLmxpbmVJbmRleDtcbiAgICAgIGFsbExpbmVzLnB1c2goZm9ybUdyb3VwT2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxsTGluZXM7XG4gIH1cblxuICAvLyDlhajlsYDmgKfnmoTmkJzntKLvvIjmtrXnm5bpobXpnaLkuIrmiYDmnInnmoTlj6/op4bmloflrZfvvIlcbiAgc2VhcmNoTGluZXMoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xuICAgIC8vIOWmguaenOayoeaciei+k+WFpeaQnOe0ouWtl+espuS4su+8jOWImeaYvuekuue8k+WtmOWGheeahOaJgOacieaVsOaNrlxuICAgIGlmICghdGhpcy5maWx0ZXJTdHIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0b3JlRGF0YSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZmlsdGVyU3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUgPSBbXTtcblxuICAgIC8vIOagueaNruaQnOe0ouWtl+espuS4sui/h+a7pOaVsOaNrlxuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmZpbHRlcigoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5mb3JtTGluZXMpIHtcbiAgICAgICAgaWYgKChpdGVtLmhpZGUgJiYgaXRlbS5jYW5TZWFyY2gpIHx8ICghaXRlbS5oaWRlICYmIGl0ZW0ubmFtZSAhPT0gJ3V1aWQnKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpdGVtLm5hbWVdID8gZGF0YVtpdGVtLm5hbWVdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6ICcnO1xuICAgICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIOe8k+WtmOS4gOS4i+etm+mAieWQjueahOihqOWNleaVsOaNrlxuICAgIHRoaXMuZmlsdGVyU3RvcmVGb3JtTGluZXNEYXRhID0gZmlsdGVyZWREYXRhO1xuICAgIC8vIOWkhOeQhuetm+mAieWlveeahOaVsOaNriDnhLblkI7ph43mlrDmuLLmn5NcbiAgICB0aGlzLmZvcm1MaW5lc0RhdGEgPSBmaWx0ZXJlZERhdGE7XG4gICAgdGhpcy5pbml0KHRydWUpO1xuICB9XG5cbiAgc2V0U3RvcmVEYXRhKCkge1xuICAgIHRoaXMuZm9ybUxpbmVzRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhO1xuICAgIHRoaXMuaW5pdCh0cnVlKTtcbiAgfVxuXG4gIGdldFN0eWxlKGxpbmU6IEZvcm1Hcm91cCwgZm9ybUl0ZW06IGFueSwgd2lkdGg6IHN0cmluZykge1xuICAgIGxldCBzdHlsZU9iaiA9IHtcbiAgICAgICdtaW4td2lkdGgnOiB3aWR0aFxuICAgIH07XG4gICAgaWYgKGZvcm1JdGVtLnN0eWxlKSB7XG4gICAgICBzdHlsZU9iaiA9IHsgLi4uc3R5bGVPYmosIC4uLmZvcm1JdGVtLnN0eWxlIH07XG4gICAgfVxuICAgIGlmIChmb3JtSXRlbS5jb2xvck9wdGlvbiAmJiBmb3JtSXRlbS5jb2xvck9wdGlvbi5uYW1lICYmIGxpbmUuZ2V0KGZvcm1JdGVtLmNvbG9yT3B0aW9uLm5hbWUpLnZhbHVlKSB7XG4gICAgICBzdHlsZU9iaiA9IHsgLi4uc3R5bGVPYmosIC4uLnsgJ2NvbG9yJzogbGluZS5nZXQoZm9ybUl0ZW0uY29sb3JPcHRpb24ubmFtZSkudmFsdWUgfSB9O1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVPYmo7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2Zvcm1MaW5lc0RhdGEnXSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydmb3JtTGluZXNEYXRhJ10uY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snZm9ybUxpbmVzRGF0YSddLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgJiYgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5mb3JtTGluZXNEYXRhO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbE9wdGlvbiddICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3RvdGFsT3B0aW9uJ10uY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sndG90YWxPcHRpb24nXS5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgIC8vIOi/memHjOWkhOeQhuWQiOiuoeaVsOaNrlxuICAgIGlmICh0aGlzLnNob3dUb3RhbCkge1xuICAgICAgdGhpcy50b3RhbE9wdGlvbkxpc3QgPSBuZXcgQXJyYXkoTnVtYmVyKHRoaXMuY29sdW1uc051bWJlcikgLSAxKS5maWxsKCcnKTtcbiAgICAgIHRoaXMudG90YWxPcHRpb24uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaW5zZXJ0SW5kZXggJiYgKGl0ZW0uaW5zZXJ0VmFsdWUgfHwgaXRlbS5pbnNlcnRWYWx1ZSA9PT0gMCkpIHtcbiAgICAgICAgICB0aGlzLnRvdGFsT3B0aW9uTGlzdFtpdGVtLmluc2VydEluZGV4IC0gMV0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS5pbnNlcnRWYWx1ZSxcbiAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgICAgIHNob3dEZWNpbWFsOiBpdGVtLnNob3dEZWNpbWFsIHx8IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgICAvLyDlvILluLjmjZXojrdcbiAgICBpZiAoIXRoaXMuY2hlY2tMaXN0KHRoaXMuZm9ybUxpbmVzKSkge1xuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gICAgLy8g5aaC5p6c5rKh5pyJZm9ybUxpbmVzRGF0Ye+8jOWImeiupOS4uuaYr+aWsOWinlxuICAgIGlmICghaXNFZGl0ICYmICghdGhpcy5mb3JtTGluZXNEYXRhIHx8ICh0aGlzLmZvcm1MaW5lc0RhdGEgJiYgdGhpcy5mb3JtTGluZXNEYXRhLmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgwLCBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dGb3JtID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g57yW6L6R6YC76L6RXG4gICAgICB0aGlzLmFkZEZvcm1MaW5lV2l0aERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGEpKTtcbiAgICB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDliJvlu7rooajljZVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICdsaW5lcyc6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG4gICAgdGhpcy5uZXdMaW5lID0gdGhpcy5uZXdMaW5lSXRlbSgpO1xuICB9XG5cbiAgLyoqXG4gICog5a6a5LmJ56m655qEbmV3TGluZUl0ZW0g57uT5p6EXG4gICovXG4gIHByaXZhdGUgbmV3TGluZUl0ZW0oKTogRm9ybUdyb3VwIHtcbiAgICBsZXQgZm9ybUdyb3VwT2JqOiBhbnkgPSB7fTtcbiAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAvLyDmlrDlop7ooYwg5Yid5aeL5pWw5o2u6YO95Li6bnVsbFxuICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woeyB2YWx1ZTogaXRlbS52YWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSB8fCBudWxsLCBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKTtcbiAgICB9KTtcbiAgICBmb3JtR3JvdXBPYmoubGluZUluZGV4ID0gdGhpcy5mYi5jb250cm9sKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoLCBbXSk7XG4gICAgLy8g55So5p2l5qCH6K+G5piv5ZCm5piv5pCc57Si54q25oCB5LiL5paw5aKe55qE6KGMXG4gICAgZm9ybUdyb3VwT2JqLmlzSGRGb3JtTGluZVNlYXJjaEFkZCA9IHRoaXMuZmIuY29udHJvbCh0aGlzLmlzRmlsdGVyRGF0YSwgW10pO1xuICAgIGxldCBmb3JtR3JvdXBTdWJtaXQgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSwgaW5uZXJJbmRleCkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwU3VibWl0LmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFN1Ym1pdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybUdyb3VwU3VibWl0LmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFN1Ym1pdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybUdyb3VwU3VibWl0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVMaW5lTnVtYmVyKCkge1xuICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uZ2V0KCdsaW5lSW5kZXgnKS5zZXRWYWx1ZShpbmRleCArIDEsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHnmoTml7blgJnmlbDmja7lpITnkIZcbiAgICovXG4gIGFkZEZvcm1MaW5lV2l0aERhdGEoKSB7XG4gICAgdGhpcy5mb3JtTGluZXNEYXRhLmZvckVhY2goKGZvcm1MaW5lc0RhdGFJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKHsgdmFsdWU6IGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV0gPT09IDAgPyAwIDogKGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV0gfHwgaXRlbS52YWx1ZSB8fCBudWxsKSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSwgaXRlbS5yZXF1aXJlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xuICAgICAgICBpZiAoaXRlbS5zZWxlY3RPcHRpb24gJiYgaXRlbS5zZWxlY3RPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgICBmb3JtR3JvdXBPYmpbaXRlbS5zZWxlY3RPcHRpb24ubGFiZWxdID0gdGhpcy5mYi5jb250cm9sKGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSB8fCBudWxsLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IHRoaXMuZmIuY29udHJvbCh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIDEsIFtdKTtcbiAgICAgIGxldCBmb3JtR3JvdXBUbXAgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtLCBpbm5lckluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBUbXAuZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5TZWxlY3QgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBUbXAuZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5TZWxlY3QgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmxpbmVzRm9ybUFycmF5Lmluc2VydCh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCwgZm9ybUdyb3VwVG1wKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICB9XG5cbiAgYWRkRm9ybUxpbmUoaW5kZXg/OiBhbnksIGlzRm9jdXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5pbnNlcnQoaW5kZXggfHwgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGgsIHRoaXMubmV3TGluZUl0ZW0oKSk7XG4gICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRG9tWCA9IGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRG9tWCA9IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURvbVkgPSAwO1xuICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLMTMnKTtcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBkZWxldGVGb3JtTGluZShpbmRleDogYW55KSB7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCAtIDEpO1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckRhdGEgJiYgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scyAmJiB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDliKDpmaTlsL7pobXnmoTmnIDlkI7kuIDkuKrlhYPntKDliqjkvZxcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA9PT0gKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoICsgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUpKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleC0tO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGE/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ZpbHRlckRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMgJiYgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEubGluZXM7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhW2l0ZW1dID0geyAuLi50aGlzLmZpbHRlclN0b3JlRm9ybUxpbmVzRGF0YVtpbmRleF0sIC4uLmxpbmVzW2luZGV4XSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA+IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyDmnInmlrDlop7mlbDmja7nmoTmg4XlhrVcbiAgICAgICAgICAvLyBzdGVwIDE6IOWFiOaJvuaWsOWinueahGluZGV45LiL5qCHXG4gICAgICAgICAgY29uc3QgZ2V0Tm93TGluZXMgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0UmF3VmFsdWUoKS5saW5lcztcbiAgICAgICAgICBsZXQgYWRkSW5kZXggPSAtMTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdldE5vd0xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZ2V0Tm93TGluZXNbaV0uaXNIZEZvcm1MaW5lU2VhcmNoQWRkKSB7XG4gICAgICAgICAgICAgIGFkZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhZGRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLnNwbGljZSh0aGlzLmZpbHRlckluZGV4U3RvcmVbYWRkSW5kZXggLSAxXSArIDEsIDAsIGdldE5vd0xpbmVzW2FkZEluZGV4XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKHRoaXMuZmlsdGVySW5kZXhTdG9yZVthZGRJbmRleCAtIDFdICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5pyJ5Yig6Zmk5pWw5o2u55qE5oOF5Ya1XG4gICAgICAgICAgLy8gc3RlcCAxOuWFiOaJvuWIsOWIoOmZpOeahGluZGV45LiL5qCHXG4gICAgICAgICAgbGV0IGRlbGV0ZWRJbmRleCA9IC0xO1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAobGluZXNbaV0ubGluZUluZGV4IC0gY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVsZXRlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gc3RlcCAyOiDliKDpmaTmgLvmlbDmja7kuK3nmoTlr7nlupTmlbDmja4sIOaKiuS4i+agh+aVsOe7hOWSjGxpbmVz6ZW/5bqm5a+56b2Q77yM5ZCM5pe25oqK5LiL5qCH5pWw57uE5ZyoZGVsZXRlZEluZGV45ZCO6Z2i55qE5YC85YWo6YO9LTFcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZVtkZWxldGVkSW5kZXhdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUuc3BsaWNlKGRlbGV0ZWRJbmRleCwgMSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaSA+PSBkZWxldGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmVbaV0tLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdGVwIDI6IOayoeacieaJvuWIsGRlbGV0ZWRJbmRleOivtOaYjuWIoOmZpOaTjeS9nOWcqOacgOWQjuS4gOihjFxuICAgICAgICAgICAgY29uc3QgZmlsdGVySW5kZXggPSB0aGlzLmZpbHRlckluZGV4U3RvcmVbdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPT0gZmlsdGVySW5kZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5saW5lcykge1xuICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5oC76KGo5Y2VXG4gICAgaWYgKCF0aGlzLmlzRmlsdGVyRGF0YSkge1xuICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMudmFsaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZvcm1WYWxpZCkge1xuICAgICAgICAvLyDlpoLmnpzmlbTkvZPooajljZXmmK90cnVl77yM5LiN566h5a2Q6KGo5Y2V5piv5LuA5LmI77yM6YO95Y+Y5oiQ5a2Q6KGo5Y2V55qE54q25oCBXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkID0gdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5aaC5p6c5pW05L2T6KGo5Y2V5pivZmFsc2XvvJox44CB5a2Q6KGo5Y2V5Li6dHJ1Ze+8jOmcgOimgemHjeeul++8mzLjgIHlrZDooajljZXkuLpmYWxzZe+8jOeUqOWtkOihqOWNleeKtuaAgVxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLmlubmVyR2V0VmFsaWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZCA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZvcm1MaW5lPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5hbWVMaXN0ID0gW107XG4gICAgbGV0IHNlbGVjdE9wdGlvbkNoZWNrTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8g5qCh6aqM5Y2V6aG56YCJ5oup5ZmoXG4gICAgICAvLyBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmICghaXRlbS5zZWxlY3RMaXN0IHx8IChpdGVtLnNlbGVjdExpc3QgJiYgaXRlbS5zZWxlY3RMaXN0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAvLyAgIHRocm93ICdmb3JtTGluZXPnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjljZXpobnpgInmi6nlmajmsqHmnInkvKDlhaXpgInpobkhJ1xuICAgICAgLy8gfVxuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuXG4gICAgICAvLyDmoKHpqozmnIlvblNlYXJjaOeahOWtl+auteeahHNlbGVjdE9wdGlvbueahHZhbHVl44CBbGFiZWzmmK/lkKblnKhmb3JtTGluZemHjOmdoumDveWumuS5ieS6hlxuICAgICAgaWYgKGl0ZW0ub25TZWFyY2hFdmVudCAmJiBpdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgICBzZWxlY3RPcHRpb25DaGVja0xpc3QgPSBbXTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKGlubmVySXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGlubmVySXRlbS5uYW1lID09PSBpdGVtLnNlbGVjdE9wdGlvbi52YWx1ZSB8fCBpbm5lckl0ZW0ubmFtZSA9PT0gaXRlbS5zZWxlY3RPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNoZWNrTGlzdC5wdXNoKGlubmVySXRlbS5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2VsZWN0T3B0aW9uQ2hlY2tMaXN0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBgZm9ybUxpbmVz57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2X5q61JHtpdGVtLm5hbWV955qEc2VsZWN0T3B0aW9u55qEdmFsdWXjgIFsYWJlbOWtl+auteacquiDveWcqGZvcm1MaW5lc+S4reaJvuWIsOWvueW6lOWtl+aute+8gWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDmoKHpqoxuYW1l5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgJ2Zvcm1MaW5lc+e7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhJztcbiAgICB9XG4gICAgLy8gLi4ubW9yZSBjaGVja1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgLy8g5Yig6ZmkXG4gICAgZm9yIChsZXQgaSA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5kZWxldGVGb3JtTGluZShpKTtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZvcm1JdGVtOiBhbnksIGxpbmU6IGFueSk6IHZvaWQge1xuICAgIGxpbmUuZ2V0KGZvcm1JdGVtLm5hbWUpLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFZhbHVlKGlkOiBzdHJpbmcsIHJvd051bWJlcjogbnVtYmVyLCBjb2xOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKTtcbiAgICBpbnB1dERvbS5zZWxlY3QoKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbUluRm9ybUxpbmVzKHJvd051bWJlciwgY29sTnVtYmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdGV4dFdpZHRoQ2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyOyB9ID0ge307XG4gIGlzVGV4dE92ZXJmbG93KHRleHQ6IHN0cmluZywgbWF4V2lkdGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNhY2hlZFdpZHRoID0gdGhpcy50ZXh0V2lkdGhDYWNoZVt0ZXh0XTtcbiAgICBpZiAoY2FjaGVkV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFdpZHRoICsgMTUgPj0gbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBzcGFuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEycHgnO1xuICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAvLyDlsIbmoLflvI/kv67mlLnkuLogaW5saW5lLWJsb2NrXG4gICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgY29uc3QgaXNPdmVyZmxvdyA9IHNwYW4ub2Zmc2V0V2lkdGggKyAxNSA+PSBtYXhXaWR0aDtcbiAgICB0aGlzLnRleHRXaWR0aENhY2hlW3RleHRdID0gc3Bhbi5vZmZzZXRXaWR0aDtcbiAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICByZXR1cm4gaXNPdmVyZmxvdztcbiAgfVxuXG4gIGp1ZGdlQ29sRW1wdHkoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyIHx8IHN0ciA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc856m6Pic7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
1379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS1saW5lcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtLWxpbmVzL2hkLWZvcm0tbGluZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEosT0FBTyxFQUFhLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUosT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU1qRSxNQUFNLE9BQU8sb0JBQW9COzs7OztJQTRDL0IsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpDMUMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUk1QyxtQkFBYyxHQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxXQUFNLEdBQStCLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztR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Qiw4Q0FBMkQ7O0lBQzNELHNDQUEyRDs7SUFDM0QsMkNBQTJDOztJQUMzQyxpREFBNEQ7O0lBQzVELG1EQUFnQzs7SUFDaEMsa0RBQWdDOztJQUNoQyxtREFBK0I7O0lBQy9CLHVDQUFhOztJQUNiLDBDQUFtQjs7SUFHbkIseUNBQW9EOztJQUNwRCwyQ0FBOEM7O0lBQzlDLDZDQUE0Qzs7SUFDNUMsK0NBQXFCOztJQUVyQix3Q0FBMEI7O0lBQzFCLHlDQUFrQjs7SUFDbEIsa0RBQTZCOztJQUM3Qix3REFBbUM7O0lBQ25DLGdEQUFxQzs7SUFDckMsNENBQThCOztJQUM5Qix5Q0FBMkI7Ozs7O0lBQzNCLDZDQUEyRTs7Ozs7SUFDM0UsK0NBQW9DOzs7OztJQUVwQyxrREFBcUQ7O0lBR3JELDhDQUFvSzs7SUFFcEssMENBQTBCOztJQUMxQiwwQ0FBMEI7O0lBQzFCLHlDQUFtSjs7SUFDbkosMkRBQTZDOzs7OztJQTgwQjdDLDhDQUF3RDs7Ozs7SUE1MEI1QyxrQ0FBdUI7Ozs7O0lBQUUsbUNBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIE56RGF0ZVBpY2tlckNvbXBvbmVudCwgTnpJbnB1dE51bWJlckNvbXBvbmVudCwgTnpSYW5nZVBpY2tlckNvbXBvbmVudCwgTnpTZWxlY3RDb21wb25lbnQsIE56VGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUb3RhbE9wdGlvbiB9IGZyb20gJy4uL2hkLWRldGFpbC1saW5lcy9oZC1kZXRhaWwtbGluZXMuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtTGluZSwgRm9ybUxpbmVUeXBlIH0gZnJvbSAnLi9oZC1mb3JtLWxpbmVzLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGQtZm9ybS1saW5lcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZC1mb3JtLWxpbmVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGQtZm9ybS1saW5lcy5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIEhkRm9ybUxpbmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZHJlbignZm9ybUlucHV0RG9tJykgZm9ybUlucHV0RG9tTGlzdCE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGFibGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93U2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1MaW5lczogQXJyYXk8Rm9ybUxpbmU+O1xuICAvLyDpkojlr7lmb3JtTGluZXPph4zpnaLmiYDmnInnmoRuYW1l77yMXG4gIEBJbnB1dCgpIGZvcm1MaW5lc0RhdGE6IGFueTtcbiAgQElucHV0KCkgb3BlcmF0ZUJ1dHRvbnM6IEFycmF5PHN0cmluZz4gPSBbJ2FkZCcsICdkZWxldGUnXTtcbiAgQElucHV0KCkgc2Nyb2xsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSA9IHsgeDogJzFweCcgfTtcbiAgQE91dHB1dCgpIGNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0RlbGV0ZUNvbmZpcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnaW5hdGlvblBhZ2VJbmRleDogbnVtYmVyID0gMTtcbiAgcGFnaW5hdGlvblBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgdmFsaWRhdGVIZEZvcm1MaW5lczogRm9ybUdyb3VwO1xuICBuZXdMaW5lOiBhbnk7XG4gIGlucHV0VmFsdWU6IHN0cmluZztcblxuICAvLyDlkIjorqHljLrln59cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dUb3RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0b3RhbE9wdGlvbjogQXJyYXk8VG90YWxPcHRpb24+ID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnNOdW1iZXI6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gIHRvdGFsT3B0aW9uTGlzdCA9IFtdO1xuXG4gIHNob3dGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIGZpbHRlclN0cjogc3RyaW5nO1xuICBzdG9yZUZvcm1MaW5lc0RhdGE6IGFueSA9IFtdOyAvLyDnvJPlrZjnmoTmgLvnmoTooajljZXmlbDmja5cbiAgZmlsdGVyU3RvcmVGb3JtTGluZXNEYXRhOiBhbnkgPSBbXTsgLy8g562b6YCJ5Ye65p2l55qE5pWw5o2u5YiX6KGoXG4gIGZpbHRlckluZGV4U3RvcmU6IEFycmF5PG51bWJlcj4gPSBbXTsgLy8g562b6YCJ5Ye65p2l55qE5pWw5o2u5Zyo5Y6f5aeL5YiX6KGo5Lit55qE5LiL5qCHXG4gIGlzRmlsdGVyRGF0YTogYm9vbGVhbiA9IGZhbHNlOyAvLyDmmK/lkKbmmK/lt7Lnu4/nrZvpgInov4fnmoTmlbDmja5cbiAgZm9ybVZhbGlkOiBib29sZWFuID0gZmFsc2U7IC8vIOihqOWNleW9k+WJjeeahOeKtuaAgVxuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueTsgfT4oKTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IG51bWJlciA9IDA7ICAvLyDpu5jorqTpmLLmipbml7bpl7RcblxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOW9k+WJjemhteeahGRvbeS6jOe7tOaVsOe7hFxuICBjb2xsZWN0RG9tTGlzdDogQXJyYXk8QXJyYXk8RWxlbWVudFJlZiB8IE56U2VsZWN0Q29tcG9uZW50IHwgTnpJbnB1dE51bWJlckNvbXBvbmVudCB8IE56RGF0ZVBpY2tlckNvbXBvbmVudCB8IE56UmFuZ2VQaWNrZXJDb21wb25lbnQgfCBOelRpbWVQaWNrZXJDb21wb25lbnQ+PiA9IFtdO1xuICAvLyDlvZPliY3ogZrnhKbnmoRkb23lhYPntKDlnZDmoIdcbiAgYWN0aXZlRG9tWDogbnVtYmVyID0gbnVsbDtcbiAgYWN0aXZlRG9tWTogbnVtYmVyID0gbnVsbDtcbiAgYWN0aXZlRG9tOiBFbGVtZW50UmVmIHwgTnpTZWxlY3RDb21wb25lbnQgfCBOeklucHV0TnVtYmVyQ29tcG9uZW50IHwgTnpEYXRlUGlja2VyQ29tcG9uZW50IHwgTnpSYW5nZVBpY2tlckNvbXBvbmVudCB8IE56VGltZVBpY2tlckNvbXBvbmVudCA9IG51bGw7XG4gIGFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIGxpbmUpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIOe8k+WtmOS4gOS4i+aAu+eahOihqOWNleaVsOaNrlxuICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5mb3JtTGluZXNEYXRhO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgfVxuXG4gIGdldCBmb3JtTGluZXNMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoO1xuICB9XG5cbiAgY29sbGVjdERvbURhdGEoKSB7XG4gICAgdGhpcy5jb2xsZWN0RG9tTGlzdCA9IFtdO1xuICAgIGNvbnN0IHBhZ2VEb21MaXN0ID0gdGhpcy5mb3JtSW5wdXREb21MaXN0LnRvQXJyYXkoKTtcbiAgICAvLyBTdGVwIDE6IOiOt+WPluW9k+WJjemhteeahOaVsOaNrumHj1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAodGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4IC0gMSkgKiB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgIGNvbnN0IGFkanVzdGVkRW5kSW5kZXggPSBlbmRJbmRleCA+IHRoaXMuZm9ybUxpbmVzTGVuZ3RoID8gdGhpcy5mb3JtTGluZXNMZW5ndGggOiBlbmRJbmRleDtcbiAgICBjb25zdCBwYWdlTGluZXNMZW5ndGggPSBhZGp1c3RlZEVuZEluZGV4IC0gc3RhcnRJbmRleDtcblxuICAgIGNvbnN0IGludGVydmFsID0gcGFnZURvbUxpc3QubGVuZ3RoIC8gcGFnZUxpbmVzTGVuZ3RoO1xuICAgIC8vIFN0ZXAgMjog5ouG5YiGZm9ybUlucHV0RG9tTGlzdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUxpbmVzTGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QucHVzaChwYWdlRG9tTGlzdC5zcGxpY2UoMCwgaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgLy8g5YWz6Zet5omA5pyJTnpJbnB1dE51bWJlckNvbXBvbmVudOeahOmUruebmOS4iuS4i+eureWktOinpuWPkSst55qE5Yqf6IO9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sbGVjdERvbUxpc3RbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgZG9tID0gdGhpcy5jb2xsZWN0RG9tTGlzdFtpXVtqXTtcbiAgICAgICAgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgICBkb20uZG93biA9ICgpID0+IHsgfTtcbiAgICAgICAgICBkb20udXAgPSAoKSA9PiB7IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDogZrnhKbkuIvkuIDkuKpkb21cbiAganVtcFRvTmV4dElucHV0KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgaWYgKHggPT09IG51bGwgfHwgeSA9PT0gbnVsbCB8fCAhdGhpcy5jb2xsZWN0RG9tTGlzdCB8fCB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyDlpoLmnpzmmK/mnIDlkI7kuIDkuKrlj6/ovpPlhaXlhYPntKDvvIzmlrDlop7ooYxcbiAgICBpZiAoISh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50KSAmJiB4ID09PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEgJiYgeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsxJyk7XG4gICAgICAgIC8vIOWmguaenOaYr+acgOWQjuS4gOWIl++8jOWImei3s+i9rOWIsOS4i+S4gOihjOesrOS4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHggKyAxLCAwLCAncmlnaHQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsyJyk7XG4gICAgICAgIC8vIOWmguaenOS4jeaYr+acgOWQjuS4gOWIl++8jOWImei3s+i9rOWIsOW9k+WJjeihjOS4i+S4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHgsIHkgKyAxLCAncmlnaHQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5aKe5Yqg5paw6KGM5bm25LiU6IGa54Sm5Yiw56ys5LiA5Liq5YWD57Sg77yMXG4gICAqIOi/memHjOimgeazqOaEj++8jOWmguaenOWtmOWcqOe/u+mhteaDheWGte+8jOmcgOimgeWkhOeQhlxuICAgKi9cbiAgYWRkTmV3TGluZUFuZEZvY3VzKCkge1xuICAgIC8vIOW9k+WJjeihjOS4uuW9k+WJjemhteacgOWQjuS4gOihjOeahOaXtuWAme+8jOWIpOaWreS4i+S4gOmhteaYr+WQpuacieaVsOaNrlxuICAgIC8vIDHjgIHlpoLmnpzmnInvvJrnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgLy8gMuOAgeWmguaenOayoeacie+8muaWsOWinuihjCvnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgaWYgKHRoaXMuYWN0aXZlRG9tWCA9PT0gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgLSAxKSB7XG4gICAgICAvLyDliKTmlq3kuIvkuIDpobXmmK/lkKbmnInmlbDmja5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPCBNYXRoLmNlaWwodGhpcy5mb3JtTGluZXNMZW5ndGggLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSkpIHtcbiAgICAgICAgLy8g57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXgrKztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIszJyk7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSgwLCAwLCAncmlnaHQnKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDmlrDlop7ooYwr57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLmFkZEZvcm1MaW5lKCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCsrO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizQnKTtcbiAgICAgICAgICB0aGlzLmZvY3VzRG9tKDAsIDApO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOiBmueEpuWIsOS4iuS4gOS4qmRvbVxuICBqdW1wVG9QcmV2SW5wdXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB5ID09PSBudWxsIHx8ICF0aGlzLmNvbGxlY3REb21MaXN0IHx8IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgIC8vIOWmguaenOaYr+esrOS4gOS4quWPr+i+k+WFpeWFg+e0oO+8jCDliKTmlq3mmK/lkKbmnInkuIrkuIDpobXvvIwg5aaC5p6c5pyJ77yM5YiZ57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA+IDEpIHtcbiAgICAgICAgLy8g57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXgtLTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIs1Jyk7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEsIHRoaXMuY29sbGVjdERvbUxpc3RbMF0ubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLNicpO1xuICAgICAgICAvLyDlpoLmnpzmmK/nrKzkuIDliJfvvIzliJnot7PovazliLDkuIrkuIDooYzmnIDlkI7kuIDkuKrovpPlhaXmoYZcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh4IC0gMSwgdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxLCAnbGVmdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizcnKTtcbiAgICAgICAgLy8g5aaC5p6c5LiN5piv56ys5LiA5YiX77yM5YiZ6Lez6L2s5Yiw5b2T5YmN6KGM5LiK5LiA5Liq6L6T5YWl5qGGXG4gICAgICAgIHRoaXMuZm9jdXNEb20oeCwgeSAtIDEsICdsZWZ0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiBmueEpuWIsOafkOS4qmRvbVxuICAgKiBAcGFyYW0geCDlnZDmoId4XG4gICAqIEBwYXJhbSB5IOWdkOagh3lcbiAgICogQHBhcmFtIGp1bXBEaXJlY3Rpb24g6Lez6L2s5pa55ZCRXG4gICAqL1xuICBmb2N1c0RvbSh4OiBudW1iZXIsIHk6IG51bWJlciwganVtcERpcmVjdGlvbjogc3RyaW5nID0gJ3JpZ2h0Jykge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgIXRoaXMuY29sbGVjdERvbUxpc3QgfHwgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5YWI5riF6Zmk5LiA5LiL5b2T5YmN55qE54Sm54K5XG4gICAgdGhpcy5jbGVhbkZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICBpZiAodGhpcy5jb2xsZWN0RG9tTGlzdFt4XSAmJiB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldKSB7XG4gICAgICBjb25zdCBkb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldO1xuICAgICAgLy8g6ZyA6KaB5Yik5pat5LiL5LiA5LiqZm9jdXPnmoRkb23mmK/lkKbmmK/npoHnlKjnirbmgIHvvIzlpoLmnpzmmK/npoHnlKjnirbmgIHpnIDopoHot7Pov4dcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoZG9tLm56RGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9tLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInLCBpbmxpbmU6ICdjZW50ZXInIH0pO1xuICAgICAgICAvLyDov5nph4zlpJrpgInmoYbpnIDopoHpop3lpJblpITnkIbkuIvvvIzlm6DkuLrlkJHkuIvnmoTml7blgJnkvJrop6blj5HlhoXpg6hJbnB1dOeahOiBmueEpu+8jOaKiuS4i+S4gOS4qmRvbeeahGZvY3Vz5pS+5Yiw5a6P5Lu75Yqh5Lit77yM5bu26L+f5aSE55CG44CCXG4gICAgICAgIGlmIChkb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGRvbS5uekRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHgsIHkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb20ubnpJZCk7XG4gICAgICAgIGlucHV0RG9tLmZvY3VzKCk7XG4gICAgICAgIGlucHV0RG9tLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicsIGlubGluZTogJ2NlbnRlcicgfSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlucHV0RG9tLnNlbGVjdCgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9tIGluc3RhbmNlb2YgRWxlbWVudFJlZikge1xuICAgICAgICBpZiAoZG9tLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJywgaW5saW5lOiAnY2VudGVyJyB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBOekRhdGVQaWNrZXJDb21wb25lbnQgfHwgZG9tIGluc3RhbmNlb2YgTnpSYW5nZVBpY2tlckNvbXBvbmVudCB8fCBkb20gaW5zdGFuY2VvZiBOelRpbWVQaWNrZXJDb21wb25lbnQpIHtcbiAgICAgICAgLy8gVE9ETzrlnKhuZ3pvcnJvOC41LnjniYjmnKzvvIzml7bpl7Tnm7jlhbPnmoTpgInmi6nlmajmsqHmnInmmrTpnLLlh7pvcGVu5pa55rOV77yM5pqC5pe25YWI5LiN5aSE55CG44CC77yIMTAueOWPiuS7peS4iueJiOacrOaPkOS+m+S6hm9wZW7mlrnms5XvvIlcbiAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh4LCB5KTtcbiAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNldEFjdGl2ZURvbSh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5rKh5pyJZG9t55qE5Zy65pmv5LiL77yM6ZyA6KaB5Yik5pat5piv5bem6L+Y5piv5Y+z77yMXG4gICAgfVxuICB9XG5cbiAgY2xlYW5Gb2N1c0RvbSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwgfHwgIXRoaXMuY29sbGVjdERvbUxpc3QgfHwgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGVjdERvbUxpc3RbeF0gJiYgdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XSkge1xuICAgICAgY29uc3QgZG9tID0gdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XTtcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBkb20uYmx1cigpO1xuICAgICAgICBkb20ubnpPcGVuID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgZG9tLm56T3BlbiA9IGZhbHNlO1xuICAgICAgICBkb20uYmx1cigpO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGRvbS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH0gZWxzZSB7IH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEb20oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSB4O1xuICAgIHRoaXMuYWN0aXZlRG9tWSA9IHk7XG4gICAgdGhpcy5hY3RpdmVEb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3RoaXMuYWN0aXZlRG9tWF1bdGhpcy5hY3RpdmVEb21ZXTtcbiAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPSB0aGlzLmFjdGl2ZURvbS5vcGVuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7ooYzlj7flkozliJflj7flkI3np7Dojrflj5blvZPliY3ogZrnhKbnmoRkb23kvY3nva5cbiAgICogQHBhcmFtIHJvd051bWJlciDooYzlj7dcbiAgICogQHBhcmFtIGNvbE51bWJlciDliJflj7cgXG4gICAqL1xuICBzZXRBY3RpdmVEb21JbkZvcm1MaW5lcyhyb3dOdW1iZXI6IG51bWJlciwgY29sTnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSByb3dOdW1iZXI7XG4gICAgdGhpcy5hY3RpdmVEb21ZID0gdGhpcy5nZXREb21JbmRleChjb2xOdW1iZXIsIHRoaXMuZm9ybUxpbmVzKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gIH1cblxuICAvKipcbiAgICog6ZSu55uY54K55Ye75LqL5Lu2XG4gICAqIEBwYXJhbSBldmVudCDplK7nm5jkuovku7ZcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVEb21YID09PSBudWxsIHx8IHRoaXMuYWN0aXZlRG9tWSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50ICYmIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbVggIT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLOCcpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YIC0gMSwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIC8vIOWIpOaWreaYr+WQpuWcqOacgOWQjuS4gOihjO+8jOWmguaenOWcqOacgOWQjuS4gOihjO+8jOebtOaOpSvooYznv7vpobVcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQgJiYgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4pIHtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb21YICE9PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLOScpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YICsgMSwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuYWN0aXZlRG9tJywgdGhpcy5hY3RpdmVEb20pO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gdGhpcy5hY3RpdmVEb20ub3BlbjtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLMTAnKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURvbVggPT09IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqItxcXEnKTtcbiAgICAgICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBub3dBY3RpdmVEb20gPSB0aGlzLmFjdGl2ZURvbSBhcyBOelNlbGVjdENvbXBvbmVudDtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gbm93QWN0aXZlRG9tLm9wZW47XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGlmIChub3dBY3RpdmVEb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmiafooYzov4fnqIsxMScpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+aJp+ihjOi/h+eoizEyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIOWmguaenOW9k+WJjeiBmueEpueahOaYr+mAieaLqeahhu+8jOS4lOmUruWFpTAtOWEtekEtWu+8jOWImeW8ueWHulxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCAmJiB0aGlzLmFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbiA9PT0gZmFsc2UgJiYgL15bMC05YS16QS1aXSQvLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuYWN0aXZlRG9tO1xuICAgICAgICAgIGRvbS5uek9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAvLyAvLyBUT0RPOui/memHjOaaguaXtuazqOmHiu+8jOS4jeiDveebtOaOpeW4puWFpemUruWFpeWAvO+8jOi/meagt+S8muWvvOiHtOi+k+WFpeS4reaWh+eahOaXtuWAmeW4puWFpeiLseaWh+Wtl+espu+8jOS4jeespuWQiOmihOacn1xuICAgICAgICAgIC8vIGRvbS5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuaW5wdXRWYWx1ZSA9IGV2ZW50LmtleTtcbiAgICAgICAgICAvLyAvLyDojrflj5YgaW5wdXQg5YWD57SgXG4gICAgICAgICAgLy8gY29uc3QgaW5wdXRFbGVtZW50ID0gZG9tLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyAgIC8vIOinpuWPkei+k+WFpeS6i+S7tu+8jOS7peehruS/nSBBbmd1bGFyIOajgOa1i+WIsOWAvOeahOWPmOWMllxuICAgICAgICAgIC8vICAgY29uc3QgZXZlbnRJbnB1dCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSk7XG4gICAgICAgICAgLy8gICBpbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudElucHV0KTtcbiAgICAgICAgICAvLyB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIOagueaNruWcqOWIneWni2RvbeS4i+agh+WSjOaVsOaNrumbhiDojrflj5blnKhjb2xsZWN0RG9tTGlzdOS4reeahOS4i+agh1xuICAgKiBAcGFyYW0gaW5kZXgg5Yid5aeL5LiL5qCHXG4gICAqIEBwYXJhbSBsaXN0IOaVsOaNrumbhlxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHByaXZhdGUgZ2V0RG9tSW5kZXgoaW5kZXg6IG51bWJlciwgbGlzdDogQXJyYXk8Rm9ybUxpbmU+KTogbnVtYmVyIHtcbiAgICBjb25zdCB0eXBlTGlzdCA9IFsnSW5wdXQnLCAnU2VsZWN0JywgJ0RhdGUnLCAnRGF0ZVJhbmdlJywgJ1RleHRBcmVhJywgJ0lucHV0TnVtYmVyJywgJ011bHRpcGxlU2VsZWN0J107XG4gICAgbGV0IGZpbHRlckxpc3QgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyTGlzdC5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAodHlwZUxpc3QuaW5jbHVkZXMobGlzdFtpXS50eXBlKSkge1xuICAgICAgICBmaWx0ZXJMaXN0LnB1c2gobGlzdFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGxpbmVzRm9ybUFycmF5KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoJ2xpbmVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgZ2V0IExvZGFzaFJvdW5kKCkge1xuICAgIHJldHVybiByb3VuZDtcbiAgfVxuXG4gIC8vIOaatOmcsueahOaWueazle+8jOeUqOS6juiOt+WPluaJgOacieaVsOaNrueahHZhbGlk54q25oCBXG4gIHB1YmxpYyBnZXRWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWQ7XG4gIH1cblxuICBvblNlYXJjaEV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueSwgb25TZWFyY2hFdmVudERlYm91bmNlVGltZTogYW55KSB7XG4gICAgaWYgKG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUpIHtcbiAgICAgIC8vIOabtOaWsOmYsuaKluaXtumXtFxuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lO1xuXG4gICAgICAvLyDlj5bmtojkuYvliY3nmoTorqLpmIVcbiAgICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyDliJvlu7rmlrDnmoTorqLpmIVcbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIGxpbmUpKTtcblxuICAgICAgLy8g5Y+R6YCB5LqL5Lu2XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgbGluZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGZuIOeItue7hOS7tuWHveaVsFxuICAgKiBAcGFyYW0gZXZlbnQg5LqL5Lu25YC8XG4gICAqIEBwYXJhbSBsaW5lIOinpuWPkeeahOihjFxuICAgKi9cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueSkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQsIGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGlubmVyR2V0VmFsaWQoKSB7XG4gICAgbGV0IHRtcFZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICdsaW5lcyc6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG4gICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZm9yRWFjaCgoZm9ybUxpbmVzRGF0YUl0ZW0pID0+IHtcbiAgICAgIGxldCBmb3JtR3JvdXBPYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyDmlrDlop7ooYwg5Yid5aeL5pWw5o2u6YO95Li6bnVsbFxuICAgICAgICBmb3JtR3JvdXBPYmpbaXRlbS5uYW1lXSA9IHRoaXMuZmIuY29udHJvbCh7IHZhbHVlOiBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdID09PSAwID8gMCA6IChmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdIHx8IGl0ZW0udmFsdWUgfHwgbnVsbCksIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH0sIGl0ZW0ucmVxdWlyZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKTtcbiAgICAgICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSA9IHRoaXMuZmIuY29udHJvbChmb3JtTGluZXNEYXRhSXRlbVtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gfHwgbnVsbCwgW10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvcm1Hcm91cE9iai5saW5lSW5kZXggPSB0aGlzLmZiLmNvbnRyb2woKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KCdsaW5lcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMubGVuZ3RoLCBbXSk7XG4gICAgICBsZXQgZm9ybUdyb3VwVG1wID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBPYmopO1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwVG1wLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChpdGVtLm9uQ2hhbmdlRXZlbnQsIHZhbHVlLCBmb3JtR3JvdXBUbXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1Hcm91cFRtcC5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAodG1wVmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoJ2xpbmVzJykgYXMgRm9ybUFycmF5KS5pbnNlcnQoKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KCdsaW5lcycpIGFzIEZvcm1BcnJheSkuY29udHJvbHMubGVuZ3RoLCBmb3JtR3JvdXBUbXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0bXBWYWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICB9XG5cbiAgLy8g5pq06Zyy55qE5pa55rOV77yM55So5LqO6I635Y+W5omA5pyJ5pWw5o2uXG4gIHB1YmxpYyBnZXRMaW5lcygpIHtcbiAgICBsZXQgYWxsTGluZXMgPSBbXTtcbiAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5mb3JFYWNoKChmb3JtTGluZXNEYXRhSXRlbSkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXTtcbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IGZvcm1MaW5lc0RhdGFJdGVtLmxpbmVJbmRleDtcbiAgICAgIGFsbExpbmVzLnB1c2goZm9ybUdyb3VwT2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxsTGluZXM7XG4gIH1cblxuICAvLyDlhajlsYDmgKfnmoTmkJzntKLvvIjmtrXnm5bpobXpnaLkuIrmiYDmnInnmoTlj6/op4bmloflrZfvvIlcbiAgc2VhcmNoTGluZXMoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xuICAgIC8vIOWmguaenOayoeaciei+k+WFpeaQnOe0ouWtl+espuS4su+8jOWImeaYvuekuue8k+WtmOWGheeahOaJgOacieaVsOaNrlxuICAgIGlmICghdGhpcy5maWx0ZXJTdHIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0b3JlRGF0YSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZmlsdGVyU3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUgPSBbXTtcblxuICAgIC8vIOagueaNruaQnOe0ouWtl+espuS4sui/h+a7pOaVsOaNrlxuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmZpbHRlcigoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5mb3JtTGluZXMpIHtcbiAgICAgICAgaWYgKChpdGVtLmhpZGUgJiYgaXRlbS5jYW5TZWFyY2gpIHx8ICghaXRlbS5oaWRlICYmIGl0ZW0ubmFtZSAhPT0gJ3V1aWQnKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpdGVtLm5hbWVdID8gZGF0YVtpdGVtLm5hbWVdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6ICcnO1xuICAgICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIOe8k+WtmOS4gOS4i+etm+mAieWQjueahOihqOWNleaVsOaNrlxuICAgIHRoaXMuZmlsdGVyU3RvcmVGb3JtTGluZXNEYXRhID0gZmlsdGVyZWREYXRhO1xuICAgIC8vIOWkhOeQhuetm+mAieWlveeahOaVsOaNriDnhLblkI7ph43mlrDmuLLmn5NcbiAgICB0aGlzLmZvcm1MaW5lc0RhdGEgPSBmaWx0ZXJlZERhdGE7XG4gICAgdGhpcy5pbml0KHRydWUpO1xuICB9XG5cbiAgc2V0U3RvcmVEYXRhKCkge1xuICAgIHRoaXMuZm9ybUxpbmVzRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhO1xuICAgIHRoaXMuaW5pdCh0cnVlKTtcbiAgfVxuXG4gIGdldFN0eWxlKGxpbmU6IEZvcm1Hcm91cCwgZm9ybUl0ZW06IGFueSwgd2lkdGg6IHN0cmluZykge1xuICAgIGxldCBzdHlsZU9iaiA9IHtcbiAgICAgICdtaW4td2lkdGgnOiB3aWR0aFxuICAgIH07XG4gICAgaWYgKGZvcm1JdGVtLnN0eWxlKSB7XG4gICAgICBzdHlsZU9iaiA9IHsgLi4uc3R5bGVPYmosIC4uLmZvcm1JdGVtLnN0eWxlIH07XG4gICAgfVxuICAgIGlmIChmb3JtSXRlbS5jb2xvck9wdGlvbiAmJiBmb3JtSXRlbS5jb2xvck9wdGlvbi5uYW1lICYmIGxpbmUuZ2V0KGZvcm1JdGVtLmNvbG9yT3B0aW9uLm5hbWUpLnZhbHVlKSB7XG4gICAgICBzdHlsZU9iaiA9IHsgLi4uc3R5bGVPYmosIC4uLnsgJ2NvbG9yJzogbGluZS5nZXQoZm9ybUl0ZW0uY29sb3JPcHRpb24ubmFtZSkudmFsdWUgfSB9O1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVPYmo7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2Zvcm1MaW5lc0RhdGEnXSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydmb3JtTGluZXNEYXRhJ10uY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snZm9ybUxpbmVzRGF0YSddLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgJiYgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5mb3JtTGluZXNEYXRhO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbE9wdGlvbiddICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3RvdGFsT3B0aW9uJ10uY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sndG90YWxPcHRpb24nXS5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgIC8vIOi/memHjOWkhOeQhuWQiOiuoeaVsOaNrlxuICAgIGlmICh0aGlzLnNob3dUb3RhbCkge1xuICAgICAgdGhpcy50b3RhbE9wdGlvbkxpc3QgPSBuZXcgQXJyYXkoTnVtYmVyKHRoaXMuY29sdW1uc051bWJlcikgLSAxKS5maWxsKCcnKTtcbiAgICAgIHRoaXMudG90YWxPcHRpb24uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaW5zZXJ0SW5kZXggJiYgKGl0ZW0uaW5zZXJ0VmFsdWUgfHwgaXRlbS5pbnNlcnRWYWx1ZSA9PT0gMCkpIHtcbiAgICAgICAgICB0aGlzLnRvdGFsT3B0aW9uTGlzdFtpdGVtLmluc2VydEluZGV4IC0gMV0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS5pbnNlcnRWYWx1ZSxcbiAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgICAgIHNob3dEZWNpbWFsOiBpdGVtLnNob3dEZWNpbWFsIHx8IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgICAvLyDlvILluLjmjZXojrdcbiAgICBpZiAoIXRoaXMuY2hlY2tMaXN0KHRoaXMuZm9ybUxpbmVzKSkge1xuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gICAgLy8g5aaC5p6c5rKh5pyJZm9ybUxpbmVzRGF0Ye+8jOWImeiupOS4uuaYr+aWsOWinlxuICAgIGlmICghaXNFZGl0ICYmICghdGhpcy5mb3JtTGluZXNEYXRhIHx8ICh0aGlzLmZvcm1MaW5lc0RhdGEgJiYgdGhpcy5mb3JtTGluZXNEYXRhLmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgwLCBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dGb3JtID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g57yW6L6R6YC76L6RXG4gICAgICB0aGlzLmFkZEZvcm1MaW5lV2l0aERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGEpKTtcbiAgICB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDliJvlu7rooajljZVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICdsaW5lcyc6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG4gICAgdGhpcy5uZXdMaW5lID0gdGhpcy5uZXdMaW5lSXRlbSgpO1xuICB9XG5cbiAgLyoqXG4gICog5a6a5LmJ56m655qEbmV3TGluZUl0ZW0g57uT5p6EXG4gICovXG4gIHByaXZhdGUgbmV3TGluZUl0ZW0oKTogRm9ybUdyb3VwIHtcbiAgICBsZXQgZm9ybUdyb3VwT2JqOiBhbnkgPSB7fTtcbiAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAvLyDmlrDlop7ooYwg5Yid5aeL5pWw5o2u6YO95Li6bnVsbFxuICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woeyB2YWx1ZTogaXRlbS52YWx1ZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSB8fCBudWxsLCBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZSA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdKTtcbiAgICB9KTtcbiAgICBmb3JtR3JvdXBPYmoubGluZUluZGV4ID0gdGhpcy5mYi5jb250cm9sKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoLCBbXSk7XG4gICAgLy8g55So5p2l5qCH6K+G5piv5ZCm5piv5pCc57Si54q25oCB5LiL5paw5aKe55qE6KGMXG4gICAgZm9ybUdyb3VwT2JqLmlzSGRGb3JtTGluZVNlYXJjaEFkZCA9IHRoaXMuZmIuY29udHJvbCh0aGlzLmlzRmlsdGVyRGF0YSwgW10pO1xuICAgIGxldCBmb3JtR3JvdXBTdWJtaXQgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSwgaW5uZXJJbmRleCkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgICAgZm9ybUdyb3VwU3VibWl0LmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFN1Ym1pdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybUdyb3VwU3VibWl0LmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFN1Ym1pdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybUdyb3VwU3VibWl0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVMaW5lTnVtYmVyKCkge1xuICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uZ2V0KCdsaW5lSW5kZXgnKS5zZXRWYWx1ZShpbmRleCArIDEsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHnmoTml7blgJnmlbDmja7lpITnkIZcbiAgICovXG4gIGFkZEZvcm1MaW5lV2l0aERhdGEoKSB7XG4gICAgdGhpcy5mb3JtTGluZXNEYXRhLmZvckVhY2goKGZvcm1MaW5lc0RhdGFJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKHsgdmFsdWU6IGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV0gPT09IDAgPyAwIDogKGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV0gfHwgaXRlbS52YWx1ZSB8fCBudWxsKSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSwgaXRlbS5yZXF1aXJlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10pO1xuICAgICAgICBpZiAoaXRlbS5zZWxlY3RPcHRpb24gJiYgaXRlbS5zZWxlY3RPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgICBmb3JtR3JvdXBPYmpbaXRlbS5zZWxlY3RPcHRpb24ubGFiZWxdID0gdGhpcy5mYi5jb250cm9sKGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSB8fCBudWxsLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IHRoaXMuZmIuY29udHJvbCh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIDEsIFtdKTtcbiAgICAgIGxldCBmb3JtR3JvdXBUbXAgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtLCBpbm5lckluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBUbXAuZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5TZWxlY3QgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtR3JvdXBUbXAuZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5TZWxlY3QgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwVG1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmxpbmVzRm9ybUFycmF5Lmluc2VydCh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCwgZm9ybUdyb3VwVG1wKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICB9XG5cbiAgYWRkRm9ybUxpbmUoaW5kZXg/OiBhbnksIGlzRm9jdXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5pbnNlcnQoaW5kZXggfHwgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGgsIHRoaXMubmV3TGluZUl0ZW0oKSk7XG4gICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRG9tWCA9IGluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRG9tWCA9IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURvbVkgPSAwO1xuICAgICAgICBjb25zb2xlLmxvZygn5omn6KGM6L+H56iLMTMnKTtcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBkZWxldGVGb3JtTGluZShpbmRleDogYW55KSB7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCAtIDEpO1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckRhdGEgJiYgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scyAmJiB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDliKDpmaTlsL7pobXnmoTmnIDlkI7kuIDkuKrlhYPntKDliqjkvZxcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA9PT0gKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoICsgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUpKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleC0tO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGE/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ZpbHRlckRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMgJiYgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEubGluZXM7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhW2l0ZW1dID0geyAuLi50aGlzLmZpbHRlclN0b3JlRm9ybUxpbmVzRGF0YVtpbmRleF0sIC4uLmxpbmVzW2luZGV4XSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA+IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyDmnInmlrDlop7mlbDmja7nmoTmg4XlhrVcbiAgICAgICAgICAvLyBzdGVwIDE6IOWFiOaJvuaWsOWinueahGluZGV45LiL5qCHXG4gICAgICAgICAgY29uc3QgZ2V0Tm93TGluZXMgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0UmF3VmFsdWUoKS5saW5lcztcbiAgICAgICAgICBsZXQgYWRkSW5kZXggPSAtMTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdldE5vd0xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZ2V0Tm93TGluZXNbaV0uaXNIZEZvcm1MaW5lU2VhcmNoQWRkKSB7XG4gICAgICAgICAgICAgIGFkZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhZGRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLnNwbGljZSh0aGlzLmZpbHRlckluZGV4U3RvcmVbYWRkSW5kZXggLSAxXSArIDEsIDAsIGdldE5vd0xpbmVzW2FkZEluZGV4XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKHRoaXMuZmlsdGVySW5kZXhTdG9yZVthZGRJbmRleCAtIDFdICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5pyJ5Yig6Zmk5pWw5o2u55qE5oOF5Ya1XG4gICAgICAgICAgLy8gc3RlcCAxOuWFiOaJvuWIsOWIoOmZpOeahGluZGV45LiL5qCHXG4gICAgICAgICAgbGV0IGRlbGV0ZWRJbmRleCA9IC0xO1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAobGluZXNbaV0ubGluZUluZGV4IC0gY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVsZXRlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gc3RlcCAyOiDliKDpmaTmgLvmlbDmja7kuK3nmoTlr7nlupTmlbDmja4sIOaKiuS4i+agh+aVsOe7hOWSjGxpbmVz6ZW/5bqm5a+56b2Q77yM5ZCM5pe25oqK5LiL5qCH5pWw57uE5ZyoZGVsZXRlZEluZGV45ZCO6Z2i55qE5YC85YWo6YO9LTFcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZVtkZWxldGVkSW5kZXhdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUuc3BsaWNlKGRlbGV0ZWRJbmRleCwgMSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaSA+PSBkZWxldGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmVbaV0tLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdGVwIDI6IOayoeacieaJvuWIsGRlbGV0ZWRJbmRleOivtOaYjuWIoOmZpOaTjeS9nOWcqOacgOWQjuS4gOihjFxuICAgICAgICAgICAgY29uc3QgZmlsdGVySW5kZXggPSB0aGlzLmZpbHRlckluZGV4U3RvcmVbdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPT0gZmlsdGVySW5kZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5saW5lcykge1xuICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5oC76KGo5Y2VXG4gICAgaWYgKCF0aGlzLmlzRmlsdGVyRGF0YSkge1xuICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMudmFsaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZvcm1WYWxpZCkge1xuICAgICAgICAvLyDlpoLmnpzmlbTkvZPooajljZXmmK90cnVl77yM5LiN566h5a2Q6KGo5Y2V5piv5LuA5LmI77yM6YO95Y+Y5oiQ5a2Q6KGo5Y2V55qE54q25oCBXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkID0gdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5aaC5p6c5pW05L2T6KGo5Y2V5pivZmFsc2XvvJox44CB5a2Q6KGo5Y2V5Li6dHJ1Ze+8jOmcgOimgemHjeeul++8mzLjgIHlrZDooajljZXkuLpmYWxzZe+8jOeUqOWtkOihqOWNleeKtuaAgVxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLmlubmVyR2V0VmFsaWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZCA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZvcm1MaW5lPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5hbWVMaXN0ID0gW107XG4gICAgbGV0IHNlbGVjdE9wdGlvbkNoZWNrTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8g5qCh6aqM5Y2V6aG56YCJ5oup5ZmoXG4gICAgICAvLyBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmICghaXRlbS5zZWxlY3RMaXN0IHx8IChpdGVtLnNlbGVjdExpc3QgJiYgaXRlbS5zZWxlY3RMaXN0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAvLyAgIHRocm93ICdmb3JtTGluZXPnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjljZXpobnpgInmi6nlmajmsqHmnInkvKDlhaXpgInpobkhJ1xuICAgICAgLy8gfVxuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuXG4gICAgICAvLyDmoKHpqozmnIlvblNlYXJjaOeahOWtl+auteeahHNlbGVjdE9wdGlvbueahHZhbHVl44CBbGFiZWzmmK/lkKblnKhmb3JtTGluZemHjOmdoumDveWumuS5ieS6hlxuICAgICAgaWYgKGl0ZW0ub25TZWFyY2hFdmVudCAmJiBpdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgICBzZWxlY3RPcHRpb25DaGVja0xpc3QgPSBbXTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKGlubmVySXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGlubmVySXRlbS5uYW1lID09PSBpdGVtLnNlbGVjdE9wdGlvbi52YWx1ZSB8fCBpbm5lckl0ZW0ubmFtZSA9PT0gaXRlbS5zZWxlY3RPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNoZWNrTGlzdC5wdXNoKGlubmVySXRlbS5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2VsZWN0T3B0aW9uQ2hlY2tMaXN0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBgZm9ybUxpbmVz57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2X5q61JHtpdGVtLm5hbWV955qEc2VsZWN0T3B0aW9u55qEdmFsdWXjgIFsYWJlbOWtl+auteacquiDveWcqGZvcm1MaW5lc+S4reaJvuWIsOWvueW6lOWtl+aute+8gWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDmoKHpqoxuYW1l5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgJ2Zvcm1MaW5lc+e7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhJztcbiAgICB9XG4gICAgLy8gLi4ubW9yZSBjaGVja1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgLy8g5Yig6ZmkXG4gICAgZm9yIChsZXQgaSA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5kZWxldGVGb3JtTGluZShpKTtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZvcm1JdGVtOiBhbnksIGxpbmU6IGFueSk6IHZvaWQge1xuICAgIGxpbmUuZ2V0KGZvcm1JdGVtLm5hbWUpLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFZhbHVlKGlkOiBzdHJpbmcsIHJvd051bWJlcjogbnVtYmVyLCBjb2xOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKTtcbiAgICBpbnB1dERvbS5zZWxlY3QoKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbUluRm9ybUxpbmVzKHJvd051bWJlciwgY29sTnVtYmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdGV4dFdpZHRoQ2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyOyB9ID0ge307XG4gIGlzVGV4dE92ZXJmbG93KHRleHQ6IHN0cmluZywgbWF4V2lkdGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNhY2hlZFdpZHRoID0gdGhpcy50ZXh0V2lkdGhDYWNoZVt0ZXh0XTtcbiAgICBpZiAoY2FjaGVkV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFdpZHRoICsgMTUgPj0gbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBzcGFuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEycHgnO1xuICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAvLyDlsIbmoLflvI/kv67mlLnkuLogaW5saW5lLWJsb2NrXG4gICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgY29uc3QgaXNPdmVyZmxvdyA9IHNwYW4ub2Zmc2V0V2lkdGggKyAxNSA+PSBtYXhXaWR0aDtcbiAgICB0aGlzLnRleHRXaWR0aENhY2hlW3RleHRdID0gc3Bhbi5vZmZzZXRXaWR0aDtcbiAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICByZXR1cm4gaXNPdmVyZmxvdztcbiAgfVxuXG4gIGp1ZGdlQ29sRW1wdHkoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyIHx8IHN0ciA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc856m6Pic7XG4gICAgfVxuICB9XG59XG4iXX0=
|