igniteui-angular 12.3.12 → 12.3.15
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/igniteui-angular.umd.js +22 -34
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/grids/filtering/excel-style/excel-style-search.component.js +2 -4
- package/esm2015/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.js +2 -2
- package/esm2015/lib/grids/filtering/grid-filtering.service.js +20 -29
- package/esm2015/lib/services/overlay/overlay.js +3 -4
- package/fesm2015/igniteui-angular.js +23 -35
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/lib/grids/filtering/grid-filtering.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -349,8 +349,8 @@ export class IgxOverlayService {
|
|
|
349
349
|
}
|
|
350
350
|
this.updateSize(info);
|
|
351
351
|
info.settings.positionStrategy.position(info.elementRef.nativeElement.parentElement, { width: info.initialSize.width, height: info.initialSize.height }, document, true, info.settings.target);
|
|
352
|
+
this.addModalClasses(info);
|
|
352
353
|
if (info.settings.positionStrategy.settings.openAnimation) {
|
|
353
|
-
this.buildAnimationPlayers(info);
|
|
354
354
|
this.playOpenAnimation(info);
|
|
355
355
|
}
|
|
356
356
|
else {
|
|
@@ -447,6 +447,7 @@ export class IgxOverlayService {
|
|
|
447
447
|
if (eventArgs.cancel) {
|
|
448
448
|
return;
|
|
449
449
|
}
|
|
450
|
+
this.removeModalClasses(info);
|
|
450
451
|
if (info.settings.positionStrategy.settings.closeAnimation) {
|
|
451
452
|
this.playCloseAnimation(info, event);
|
|
452
453
|
}
|
|
@@ -620,7 +621,6 @@ export class IgxOverlayService {
|
|
|
620
621
|
// to eliminate flickering show the element just before animation start
|
|
621
622
|
info.wrapperElement.style.visibility = '';
|
|
622
623
|
info.visible = true;
|
|
623
|
-
this.addModalClasses(info);
|
|
624
624
|
info.openAnimationPlayer.play();
|
|
625
625
|
}
|
|
626
626
|
playCloseAnimation(info, event) {
|
|
@@ -646,7 +646,6 @@ export class IgxOverlayService {
|
|
|
646
646
|
}
|
|
647
647
|
this.animationStarting.emit({ id: info.id, animationPlayer: info.closeAnimationPlayer, animationType: 'close' });
|
|
648
648
|
info.event = event;
|
|
649
|
-
this.removeModalClasses(info);
|
|
650
649
|
info.closeAnimationPlayer.play();
|
|
651
650
|
}
|
|
652
651
|
// TODO: check if applyAnimationParams will work with complex animations
|
|
@@ -845,4 +844,4 @@ IgxOverlayService.ctorParameters = () => [
|
|
|
845
844
|
{ type: NgZone },
|
|
846
845
|
{ type: PlatformUtil }
|
|
847
846
|
];
|
|
848
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixnQkFBZ0IsRUFBcUQsTUFBTSxxQkFBcUIsQ0FBQztBQUN2SSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGNBQWMsRUFFZCx3QkFBd0IsRUFFeEIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFFUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNILE1BQU0sRUFDTixPQUFPLEVBRVAsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGNBQWMsRUFDZCxXQUFXLEVBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFz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QUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyx5R0FBeUc7WUFDeEcsSUFBSSxDQUFDLG1CQUEyQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLHlHQUF5RztZQUN4RyxJQUFJLENBQUMsb0JBQTRCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2RDtJQUNMLENBQUM7Ozs7WUE5NUJKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQTFEOUIsd0JBQXdCO1lBRnhCLGNBQWM7WUFRZCxRQUFRO1lBWDBCLGdCQUFnQjs0Q0FvSjdDLE1BQU0sU0FBQyxRQUFRO1lBdklwQixNQUFNO1lBcUJELFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25BbmltYXRlUmVmTWV0YWRhdGEsIEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvbk1ldGFkYXRhVHlwZSwgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50RmFjdG9yeSxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE5nTW9kdWxlUmVmLFxuICAgIE5nWm9uZSwgT25EZXN0cm95LCBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBmYWRlSW4sXG4gICAgZmFkZU91dCxcbiAgICBJQW5pbWF0aW9uUGFyYW1zLFxuICAgIHNjYWxlSW5Ib3JMZWZ0LFxuICAgIHNjYWxlSW5Ib3JSaWdodCxcbiAgICBzY2FsZUluVmVyQm90dG9tLFxuICAgIHNjYWxlSW5WZXJUb3AsXG4gICAgc2NhbGVPdXRIb3JMZWZ0LFxuICAgIHNjYWxlT3V0SG9yUmlnaHQsXG4gICAgc2NhbGVPdXRWZXJCb3R0b20sXG4gICAgc2NhbGVPdXRWZXJUb3AsXG4gICAgc2xpZGVJbkJvdHRvbSxcbiAgICBzbGlkZUluVG9wLFxuICAgIHNsaWRlT3V0Qm90dG9tLFxuICAgIHNsaWRlT3V0VG9wXG59IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvbWFpbic7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEF1dG9Qb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9hdXRvLXBvc2l0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2Nvbm5lY3RlZC1wb3NpdGlvbmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBDb250YWluZXJQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9jb250YWluZXItcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgRWxhc3RpY1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2VsYXN0aWMtcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgR2xvYmFsUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vZ2xvYmFsLXBvc2l0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IElQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9JUG9zaXRpb25TdHJhdGVneSc7XG5pbXBvcnQgeyBOb09wU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuL3Njcm9sbC9Ob09wU2Nyb2xsU3RyYXRlZ3knO1xuaW1wb3J0IHtcbiAgICBBYnNvbHV0ZVBvc2l0aW9uLFxuICAgIEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgT3ZlcmxheUFuaW1hdGlvbkV2ZW50QXJncyxcbiAgICBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyxcbiAgICBPdmVybGF5Q2xvc2luZ0V2ZW50QXJncyxcbiAgICBPdmVybGF5RXZlbnRBcmdzLFxuICAgIE92ZXJsYXlJbmZvLFxuICAgIE92ZXJsYXlTZXR0aW5ncyxcbiAgICBQb2ludCxcbiAgICBQb3NpdGlvblNldHRpbmdzLFxuICAgIFJlbGF0aXZlUG9zaXRpb24sXG4gICAgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LFxuICAgIFZlcnRpY2FsQWxpZ25tZW50XG59IGZyb20gJy4vdXRpbGl0aWVzJztcblxuLyoqXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvb3ZlcmxheS1tYWluKVxuICogVGhlIG92ZXJsYXkgc2VydmljZSBhbGxvd3MgdXNlcnMgdG8gc2hvdyBjb21wb25lbnRzIG9uIG92ZXJsYXkgZGl2IGFib3ZlIGFsbCBvdGhlciBlbGVtZW50cyBpbiB0aGUgcGFnZS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJZ3hPdmVybGF5U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBjb250ZW50IHN0YXJ0cyB0byBvcGVuLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBvcGVuaW5nKGV2ZW50OiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IG9wZW5pbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgb3ZlcmxheSBjb250ZW50IGlzIG9wZW5lZCBhbmQgYWxsIGFuaW1hdGlvbnMgYXJlIGZpbmlzaGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBvcGVuZWQoZXZlbnQ6IE92ZXJsYXlFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBvcGVuZWQgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQganVzdCBiZWZvcmUgdGhlIG92ZXJsYXkgY29udGVudCBzdGFydHMgdG8gY2xvc2UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNsb3NpbmcoZXZlbnQ6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY2xvc2luZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUNsb3NpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBvdmVybGF5IGNvbnRlbnQgaXMgY2xvc2VkIGFuZCBhbGwgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNsb3NlZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNsb3NlZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgY29udGVudCBpcyBhcHBlbmRlZCB0byB0aGUgb3ZlcmxheSwgYW5kIGJlZm9yZSBhbmltYXRpb25zIGFyZSBzdGFydGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb250ZW50QXBwZW5kZWQoZXZlbnQ6IE92ZXJsYXlFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjb250ZW50QXBwZW5kZWQgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnRlbnRBcHBlbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQganVzdCBiZWZvcmUgdGhlIG92ZXJsYXkgYW5pbWF0aW9uIHN0YXJ0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBhbmltYXRpb25TdGFydGluZyhldmVudDogT3ZlcmxheUFuaW1hdGlvbkV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGFuaW1hdGlvblN0YXJ0aW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhbmltYXRpb25TdGFydGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUFuaW1hdGlvbkV2ZW50QXJncz4oKTtcblxuICAgIHByaXZhdGUgX2NvbXBvbmVudElkID0gMDtcbiAgICBwcml2YXRlIF9vdmVybGF5SW5mb3M6IE92ZXJsYXlJbmZvW10gPSBbXTtcbiAgICBwcml2YXRlIF9vdmVybGF5RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50O1xuICAgIHByaXZhdGUgX2tleVByZXNzRXZlbnRMaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgX2N1cnNvclN0eWxlSXNTZXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jdXJzb3JPcmlnaW5hbFZhbHVlOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9kZWZhdWx0U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2s6IFtdLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgR2xvYmFsUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vT3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2ZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvdmVybGF5IHNldHRpbmdzIHdpdGggZ2xvYmFsIG9yIGNvbnRhaW5lciBwb3NpdGlvbiBzdHJhdGVneSBhbmQgcHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gUHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzLiBEZWZhdWx0IHBvc2l0aW9uIGlzICdjZW50ZXInXG4gICAgICogQHBhcmFtIG91dGxldCBUaGUgb3V0bGV0IGNvbnRhaW5lciB0byBhdHRhY2ggdGhlIG92ZXJsYXkgdG9cbiAgICAgKiBAcmV0dXJucyBOb24tbW9kYWwgb3ZlcmxheSBzZXR0aW5ncyBiYXNlZCBvbiBHbG9iYWwgb3IgQ29udGFpbmVyIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCB0aGUgcHJvdmlkZWQgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVBYnNvbHV0ZU92ZXJsYXlTZXR0aW5ncyhcbiAgICAgICAgcG9zaXRpb24/OiBBYnNvbHV0ZVBvc2l0aW9uLCBvdXRsZXQ/OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZik6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLmNyZWF0ZUFic29sdXRlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gb3V0bGV0ID8gbmV3IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncykgOiBuZXcgR2xvYmFsUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgb3V0bGV0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvdmVybGF5U2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvdmVybGF5IHNldHRpbmdzIHdpdGggYXV0bywgY29ubmVjdGVkIG9yIGVsYXN0aWMgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHByZXNldCBwb3NpdGlvbiBzZXR0aW5nc1xuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCBBdHRhY2hpbmcgdGFyZ2V0IGZvciB0aGUgY29tcG9uZW50IHRvIHNob3dcbiAgICAgKiBAcGFyYW0gc3RyYXRlZ3kgVGhlIHJlbGF0aXZlIHBvc2l0aW9uIHN0cmF0ZWd5IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG92ZXJsYXkgc2V0dGluZ3MuIERlZmF1bHQgaXMgQXV0byBwb3NpdGlvbmluZyBzdHJhdGVneS5cbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gUHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzLiBCeSBkZWZhdWx0IHRoZSBlbGVtZW50IGlzIHBvc2l0aW9uZWQgYmVsb3cgdGhlIHRhcmdldCwgbGVmdCBhbGlnbmVkLlxuICAgICAqIEByZXR1cm5zIE5vbi1tb2RhbCBvdmVybGF5IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0YXJnZXQsIHN0cmF0ZWd5IGFuZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlbGF0aXZlT3ZlcmxheVNldHRpbmdzKFxuICAgICAgICB0YXJnZXQ6IFBvaW50IHwgSFRNTEVsZW1lbnQsXG4gICAgICAgIHBvc2l0aW9uPzogUmVsYXRpdmVQb3NpdGlvbixcbiAgICAgICAgc3RyYXRlZ3k/OiBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kpOlxuICAgICAgICBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBwb3NpdGlvblNldHRpbmdzID0gdGhpcy5jcmVhdGVSZWxhdGl2ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb24pO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSwgcG9zaXRpb25TZXR0aW5ncyksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vT3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb3ZlcmxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZUFic29sdXRlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbjogQWJzb2x1dGVQb3NpdGlvbik6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICBsZXQgcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLkJvdHRvbTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJbkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0Qm90dG9tXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5Ub3A6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dFRvcFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uQ2VudGVyOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogZmFkZU91dFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUmVsYXRpdmVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uOiBSZWxhdGl2ZVBvc2l0aW9uKTogUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgICAgIGxldCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQWJvdmU6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJCb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlckJvdHRvbSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkJlbG93OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJUb3BcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkFmdGVyOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJbkhvckxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dEhvckxlZnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkJlZm9yZTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluSG9yUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dEhvclJpZ2h0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5EZWZhdWx0OlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlclRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyVG9wLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneTogUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzKTogSVBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5Db25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuRWxhc3RpYzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsYXN0aWNQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3kuQXV0bzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbCBgc2hvdyhpZClgIG1ldGhvZFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBFbGVtZW50UmVmIHRvIHNob3cgaW4gb3ZlcmxheVxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqIEByZXR1cm5zIElkIG9mIHRoZSBjcmVhdGVkIG92ZXJsYXkuIFZhbGlkIHVudGlsIGBkZXRhY2hgIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXR0YWNoKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBJZC4gUHJvdmlkZSB0aGlzIElkIHdoZW4gY2FsbCBgc2hvdyhpZClgIG1ldGhvZFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgVHlwZSB0byBzaG93IGluIG92ZXJsYXlcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0gbW9kdWxlUmVmIE9wdGlvbmFsIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgY29udGFpbmluZyBJbmplY3RvciBhbmQgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICogdGhhdCBjYW4gcmVzb2x2ZSB0aGUgY29tcG9uZW50J3MgZmFjdG9yeVxuICAgICAqIEByZXR1cm5zIElkIG9mIHRoZSBjcmVhdGVkIG92ZXJsYXkuIFZhbGlkIHVudGlsIGBkZXRhY2hgIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXR0YWNoKGNvbXBvbmVudDogVHlwZTxhbnk+LCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyxcbiAgICAgICAgbW9kdWxlUmVmPzogUGljazxOZ01vZHVsZVJlZjxhbnk+LCAnaW5qZWN0b3InIHwgJ2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcic+KTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBFbGVtZW50UmVmIHwgVHlwZTxhbnk+LCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyxcbiAgICAgICAgbW9kdWxlUmVmPzogUGljazxOZ01vZHVsZVJlZjxhbnk+LCAnaW5qZWN0b3InIHwgJ2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcic+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlJbmZvKGNvbXBvbmVudCwgbW9kdWxlUmVmKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignT3ZlcmxheSB3YXMgbm90IGFibGUgdG8gYXR0YWNoIHByb3ZpZGVkIGNvbXBvbmVudCEnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mby5pZCA9ICh0aGlzLl9jb21wb25lbnRJZCsrKS50b1N0cmluZygpO1xuICAgICAgICBpbmZvLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZhdWx0U2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MucHVzaChpbmZvKTtcbiAgICAgICAgaW5mby5ob29rID0gdGhpcy5wbGFjZUVsZW1lbnRIb29rKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IHsgd2lkdGg6IGVsZW1lbnRSZWN0LndpZHRoLCBoZWlnaHQ6IGVsZW1lbnRSZWN0LmhlaWdodCB9O1xuICAgICAgICB0aGlzLm1vdmVFbGVtZW50VG9PdmVybGF5KGluZm8pO1xuICAgICAgICB0aGlzLmNvbnRlbnRBcHBlbmRlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYgfSk7XG4gICAgICAgIC8vIFRPRE86IHdoeSB3ZSBoYWQgdGhpcyBjaGVjaz9cbiAgICAgICAgLy8gaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5pbmRleE9mKGluZm8pID09PSAtMSkge1xuICAgICAgICAvLyAgICAgdGhpcy5fb3ZlcmxheUluZm9zLnB1c2goaW5mbyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5pbml0aWFsaXplKHRoaXMuX2RvY3VtZW50LCB0aGlzLCBpbmZvLmlkKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5hdHRhY2goKTtcbiAgICAgICAgdGhpcy5hZGRPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5hZGRSZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuYWRkQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKGluZm8pO1xuICAgICAgICB0aGlzLmJ1aWxkQW5pbWF0aW9uUGxheWVycyhpbmZvKTtcbiAgICAgICAgcmV0dXJuIGluZm8uaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIG92ZXJsYXkgd2l0aCB0aGUgcHJvdmlkZWQgaWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgb2YgdGhlIG92ZXJsYXkgdG8gcmVtb3ZlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5kZXRhY2goaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRhY2goaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdpZ3hPdmVybGF5LmRldGFjaCB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFuaW1hdGlvbnMoaW5mbyk7XG4gICAgICAgIGluZm8uc2V0dGluZ3Muc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplSGFuZGxlcigpO1xuICAgICAgICB0aGlzLmNsZWFuVXAoaW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aGUgb3ZlcmxheXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5kZXRhY2hBbGwoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0YWNoQWxsKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2godGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBvdmVybGF5IGZvciBwcm92aWRlZCBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byBzaG93IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICovXG4gICAgcHVibGljIHNob3coaWQ6IHN0cmluZywgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuc2hvdyB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmIChldmVudEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYXR0YWNoXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaXplKGluZm8pO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgICAgICAgeyB3aWR0aDogaW5mby5pbml0aWFsU2l6ZS53aWR0aCwgaGVpZ2h0OiBpbmZvLmluaXRpYWxTaXplLmhlaWdodCB9LFxuICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgaW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm8pO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihpbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIG9wZW5lZCBmaXJlc1xuICAgICAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgICAgICAgICBpbmZvLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIGNvbXBvbmVudCB3aXRoIHRoZSBJRCBwcm92aWRlZCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmhpZGUoaWQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKGlkOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5faGlkZShpZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIGFsbCB0aGUgY29tcG9uZW50cyBhbmQgdGhlIG92ZXJsYXkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5oaWRlQWxsKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGVBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUodGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRpb25zIHRoZSBjb21wb25lbnQgd2l0aCBJRCBwcm92aWRlZCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byByZXBvc2l0aW9uIG92ZXJsYXkgZm9yXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5yZXBvc2l0aW9uKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVwb3NpdGlvbihpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG4gICAgICAgIGlmICghb3ZlcmxheUluZm8gfHwgIW92ZXJsYXlJbmZvLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdXcm9uZyBpZCBwcm92aWRlZCBpbiBvdmVybGF5LnJlcG9zaXRpb24gbWV0aG9kLiBJZDogJyArIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IG92ZXJsYXlJbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudFJlY3QgPSBjb250ZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgb3ZlcmxheUluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbihcbiAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb250ZW50RWxlbWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb250ZW50RWxlbWVudFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2Zmc2V0cyB0aGUgY29udGVudCBhbG9uZyB0aGUgY29ycmVzcG9uZGluZyBheGlzIGJ5IHRoZSBwcm92aWRlZCBhbW91bnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCB0byBvZmZzZXQgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gZGVsdGFYIEFtb3VudCBvZiBvZmZzZXQgaW4gaG9yaXpvbnRhbCBkaXJlY3Rpb25cbiAgICAgKiBAcGFyYW0gZGVsdGFZIEFtb3VudCBvZiBvZmZzZXQgaW4gdmVydGljYWwgZGlyZWN0aW9uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5zZXRPZmZzZXQoaWQsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0T2Zmc2V0KGlkOiBzdHJpbmcsIGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5mby50cmFuc2Zvcm1YICs9IGRlbHRhWDtcbiAgICAgICAgaW5mby50cmFuc2Zvcm1ZICs9IGRlbHRhWTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1YID0gaW5mby50cmFuc2Zvcm1YO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1ZID0gaW5mby50cmFuc2Zvcm1ZO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGUoJHt0cmFuc2Zvcm1YfXB4LCAke3RyYW5zZm9ybVl9cHgpYDtcbiAgICAgICAgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVwb3NpdGlvbkFsbCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdGlvbih0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0T3ZlcmxheUJ5SWQoaWQ6IHN0cmluZyk6IE92ZXJsYXlJbmZvIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zLmZpbmQoZSA9PiBlLmlkID09PSBpZCk7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZGUoaWQ6IHN0cmluZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5oaWRlIHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogT3ZlcmxheUNsb3NpbmdFdmVudEFyZ3MgPSB7IGlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBjYW5jZWw6IGZhbHNlLCBldmVudCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICBpZiAoZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuY2xvc2VBbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGxheUNsb3NlQW5pbWF0aW9uKGluZm8sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEb25lKGluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5SW5mbyhjb21wb25lbnQ6IGFueSwgbW9kdWxlUmVmPzogUGljazxOZ01vZHVsZVJlZjxhbnk+LCAnaW5qZWN0b3InIHwgJ2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcic+KTogT3ZlcmxheUluZm8ge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHsgbmdab25lOiB0aGlzLl96b25lLCB0cmFuc2Zvcm1YOiAwLCB0cmFuc2Zvcm1ZOiAwIH07XG4gICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBpbmZvLmVsZW1lbnRSZWYgPSBjb21wb25lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZHluYW1pY0ZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PjtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnlSZXNvbHZlciA9IG1vZHVsZVJlZiA/IG1vZHVsZVJlZi5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgOiB0aGlzLl9mYWN0b3J5UmVzb2x2ZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGR5bmFtaWNGYWN0b3J5ID0gZmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IG1vZHVsZVJlZiA/IG1vZHVsZVJlZi5pbmplY3RvciA6IHRoaXMuX2luamVjdG9yO1xuICAgICAgICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudDogQ29tcG9uZW50UmVmPGFueT4gPSBkeW5hbWljRmFjdG9yeS5jcmVhdGUoaW5qZWN0b3IpO1xuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoZHluYW1pY0NvbXBvbmVudC5ob3N0Vmlldyk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5ld2x5IGNyZWF0ZWQgZnJvbSBhIENvbXBvbmVudCwgaXQgaXMgd3JhcHBlZCBpbiAnbmctY29tcG9uZW50JyB0YWcgLSB3ZSBkbyBub3Qgd2FudCB0aGF0LlxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGR5bmFtaWNDb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZiA9IHsgbmF0aXZlRWxlbWVudDogZWxlbWVudCB9O1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYgPSBkeW5hbWljQ29tcG9uZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUVsZW1lbnRIb29rKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBob29rID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaG9vaywgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBob29rO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZUVsZW1lbnRUb092ZXJsYXkoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudCA9IHRoaXMuZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSB0aGlzLmdldENvbnRlbnRFbGVtZW50KGluZm8ud3JhcHBlckVsZW1lbnQsIGluZm8uc2V0dGluZ3MubW9kYWwpO1xuICAgICAgICB0aGlzLmdldE92ZXJsYXlFbGVtZW50KGluZm8pLmFwcGVuZENoaWxkKGluZm8ud3JhcHBlckVsZW1lbnQpO1xuICAgICAgICBjb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXcmFwcGVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXI6IEhUTUxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250ZW50RWxlbWVudCh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIG1vZGFsOiBib29sZWFuKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjb250ZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX2NvbnRlbnQtLW1vZGFsJyk7XG4gICAgICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5X19jb250ZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIChldjogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAgaGlkZSBlbGVtZW50IHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nLiBTaG93IHRoZSBlbGVtZW50IGV4YWN0bHkgYmVmb3JlIGFuaW1hdGlvbiBzdGFydHNcbiAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuXG4gICAgICAgIHdyYXBwZXJFbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE92ZXJsYXlFbGVtZW50KGluZm86IE92ZXJsYXlJbmZvKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5vdXRsZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLnNldHRpbmdzLm91dGxldC5uYXRpdmVFbGVtZW50IHx8IGluZm8uc2V0dGluZ3Mub3V0bGV0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheScpO1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9vdmVybGF5RWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTaXplKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgLy8gIGlmIHdlIGFyZSBwb3NpdGlvbmluZyBjb21wb25lbnQgdGhpcyBpcyBmaXJzdCB0aW1lIGl0IGdldHMgdmlzaWJsZVxuICAgICAgICAgICAgLy8gIGFuZCB3ZSBjYW4gZmluYWxseSBnZXQgaXRzIHNpemVcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGluZm8uaW5pdGlhbFNpemUgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBjb250ZW50IGRpdiB3aWR0aCBvbmx5IGlmIGVsZW1lbnQgdG8gc2hvdyBoYXMgd2lkdGhcbiAgICAgICAgaWYgKGluZm8uaW5pdGlhbFNpemUud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBpbmZvLmluaXRpYWxTaXplLndpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VEb25lKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaW5mby53cmFwcGVyRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcgc2hvdyB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZSBhbmltYXRpb24gc3RhcnRcbiAgICAgICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5mby5jbG9zZUFuaW1hdGlvbkRldGFjaGluZykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmLCBldmVudDogaW5mby5ldmVudCB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgaW5mby5ldmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFuVXAoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IEhUTUxFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG91dGxldCA9IHRoaXMuZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbyk7XG4gICAgICAgIGlmICghb3V0bGV0LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb21wb25lbnQgd2l0aCBpZDogJHtpbmZvLmlkfSBpcyBhbHJlYWR5IGRldGFjaGVkIWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG91dGxldC5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnROb2RlLnBhcmVudE5vZGUpO1xuICAgICAgICBpZiAoaW5mby5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KGluZm8uY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIGluZm8uY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSBpbmZvLmNvbXBvbmVudFJlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5ob29rKSB7XG4gICAgICAgICAgICBpbmZvLmhvb2sucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGluZm8uaG9vayk7XG4gICAgICAgICAgICBpbmZvLmhvb2sucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChpbmZvLmhvb2spO1xuICAgICAgICAgICAgZGVsZXRlIGluZm8uaG9vaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3ZlcmxheUluZm9zLmluZGV4T2YoaW5mbyk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQgY2hlY2sganVzdCBmb3IgdGVzdHMgdGhhdCBtYW51YWxseSBkZWxldGUgdGhlIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJbmZvcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGF5RWxlbWVudCAmJiB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9vdmVybGF5RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbG9zZU9uRXNjYXBlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFuIGFsbCB0aGUgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGluZm9cbiAgICAgICAgZGVsZXRlIGluZm8uZWxlbWVudFJlZjtcbiAgICAgICAgZGVsZXRlIGluZm8uc2V0dGluZ3M7XG4gICAgICAgIGRlbGV0ZSBpbmZvLmluaXRpYWxTaXplO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25EZXRhY2hpbmcgPSB0cnVlO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgZGVsZXRlIGluZm8ub3BlbkFuaW1hdGlvblBsYXllcjtcbiAgICAgICAgZGVsZXRlIGluZm8ub3BlbkFuaW1hdGlvbklubmVyUGxheWVyO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nID0gdHJ1ZTtcbiAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcjtcbiAgICAgICAgZGVsZXRlIGluZm8uY2xvc2VBbmltYXRpb25Jbm5lclBsYXllcjtcbiAgICAgICAgZGVsZXRlIGluZm8ubmdab25lO1xuICAgICAgICBkZWxldGUgaW5mby53cmFwcGVyRWxlbWVudDtcbiAgICAgICAgaW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5T3BlbkFuaW1hdGlvbihpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgb3BlbmluZyBhbmltYXRpb24gYWxyZWFkeSBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllciA9PSBudWxsIHx8IGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBjbG9zaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgc3RhcnQgb3BlbiBhbmltYXRpb24gZnJvbSB3aGVyZSBjbG9zZSBvbmUgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gIGFuZCByZXNldCBjbG9zZSBhbmltYXRpb25cbiAgICAgICAgaWYgKGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgLy8gIGdldFBvc2l0aW9uKCkgcmV0dXJucyB3aGF0IHBhcnQgb2YgdGhlIGFuaW1hdGlvbiBpcyBwYXNzZWQsIGUuZy4gMC41IGlmIGhhbGYgdGhlIGFuaW1hdGlvblxuICAgICAgICAgICAgLy8gIGlzIGRvbmUsIDAuNzUgaWYgMy80IG9mIHRoZSBhbmltYXRpb24gaXMgZG9uZS4gQXMgd2UgbmVlZCB0byBzdGFydCBuZXh0IGFuaW1hdGlvbiBmcm9tIHdoZXJlXG4gICAgICAgICAgICAvLyAgdGhlIHByZXZpb3VzIGhhcyBmaW5pc2hlZCB3ZSBuZWVkIHRoZSBhbW91bnQgdXAgdG8gMSwgdGhlcmVmb3JlIHdlIGFyZSBzdWJ0cmFjdGluZyB3aGF0XG4gICAgICAgICAgICAvLyAgZ2V0UG9zaXRpb24oKSByZXR1cm5zIGZyb20gb25lXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IDEgLSBpbmZvLmNsb3NlQW5pbWF0aW9uSW5uZXJQbGF5ZXIuZ2V0UG9zaXRpb24oKTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgcmVzZXQgZG9lcyBub3QgY2hhbmdlIGhhc1N0YXJ0ZWQgdG8gZmFsc2UuIFRoaXMgaXMgd2h5IHdlIGFyZSBkb2luZyBpdCBoZXIgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuaW5pdCgpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhcnRpbmcuZW1pdCh7IGlkOiBpbmZvLmlkLCBhbmltYXRpb25QbGF5ZXI6IGluZm8ub3BlbkFuaW1hdGlvblBsYXllciwgYW5pbWF0aW9uVHlwZTogJ29wZW4nIH0pO1xuXG4gICAgICAgIC8vICB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIGFuaW1hdGlvbiBzdGFydFxuICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcbiAgICAgICAgaW5mby52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZGRNb2RhbENsYXNzZXMoaW5mbyk7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oaW5mbzogT3ZlcmxheUluZm8sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGNsb3NpbmcgYW5pbWF0aW9uIGFscmVhZHkgc3RhcnRlZCBkbyBub3RoaW5nXG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyID09IG51bGwgfHwgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5oYXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBvcGVuaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgc3RhcnQgY2xvc2UgYW5pbWF0aW9uIGZyb20gd2hlcmUgb3BlbiBvbmUgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gIGFuZCByZW1vdmUgb3BlbiBhbmltYXRpb25cbiAgICAgICAgaWYgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICAvLyAgZ2V0UG9zaXRpb24oKSByZXR1cm5zIHdoYXQgcGFydCBvZiB0aGUgYW5pbWF0aW9uIGlzIHBhc3NlZCwgZS5nLiAwLjUgaWYgaGFsZiB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAgICAvLyAgaXMgZG9uZSwgMC43NSBpZiAzLzQgb2YgdGhlIGFuaW1hdGlvbiBpcyBkb25lLiBBcyB3ZSBuZWVkIHRvIHN0YXJ0IG5leHQgYW5pbWF0aW9uIGZyb20gd2hlcmVcbiAgICAgICAgICAgIC8vICB0aGUgcHJldmlvdXMgaGFzIGZpbmlzaGVkIHdlIG5lZWQgdGhlIGFtb3VudCB1cCB0byAxLCB0aGVyZWZvcmUgd2UgYXJlIHN1YnRyYWN0aW5nIHdoYXRcbiAgICAgICAgICAgIC8vICBnZXRQb3NpdGlvbigpIHJldHVybnMgZnJvbSBvbmVcbiAgICAgICAgICAgIC8vICBUT0RPOiBUaGlzIGFzc3VtZXMgb3BlbmluZyBhbmQgY2xvc2luZyBhbmltYXRpb25zIGFyZSBtaXJyb3JlZC5cbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gMSAtIGluZm8ub3BlbkFuaW1hdGlvbklubmVyUGxheWVyLmdldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgcmVzZXQgZG9lcyBub3QgY2hhbmdlIGhhc1N0YXJ0ZWQgdG8gZmFsc2UuIFRoaXMgaXMgd2h5IHdlIGFyZSBkb2luZyBpdCBoZXIgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuaW5pdCgpO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0aW5nLmVtaXQoeyBpZDogaW5mby5pZCwgYW5pbWF0aW9uUGxheWVyOiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLCBhbmltYXRpb25UeXBlOiAnY2xvc2UnIH0pO1xuICAgICAgICBpbmZvLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kYWxDbGFzc2VzKGluZm8pO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyAgVE9ETzogY2hlY2sgaWYgYXBwbHlBbmltYXRpb25QYXJhbXMgd2lsbCB3b3JrIHdpdGggY29tcGxleCBhbmltYXRpb25zXG4gICAgcHJpdmF0ZSBhcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbk9wdGlvbnM6IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKSB7XG4gICAgICAgIGlmICghYW5pbWF0aW9uT3B0aW9ucykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbmltYXRpb25PcHRpb25zLm9wdGlvbnMgfHwgIWFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBhbmltYXRpb25PcHRpb25zLm9wdGlvbnMucGFyYW1zIGFzIElBbmltYXRpb25QYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMuZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtcy5kdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmVhc2luZykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uID0gcGFyYW1zLmVhc2luZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja2VkID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vICBpZiB3ZSBnZXQgdG8gbW9kYWwgb3ZlcmxheSBqdXN0IHJldHVybiAtIHdlIHNob3VsZCBub3QgY2xvc2UgYW55dGhpbmcgdW5kZXIgaXRcbiAgICAgICAgLy8gIGlmIHdlIGdldCB0byBub24tbW9kYWwgb3ZlcmxheSBkbyB0aGUgbmV4dDpcbiAgICAgICAgLy8gICAxLiBDaGVjayBpdCBoYXMgY2xvc2Ugb24gb3V0c2lkZSBjbGljay4gSWYgbm90IGdvIG9uIHRvIG5leHQgb3ZlcmxheTtcbiAgICAgICAgLy8gICAyLiBJZiB0cnVlIGNoZWNrIGlmIGNsaWNrIGlzIG9uIHRoZSBlbGVtZW50LiBJZiBpdCBpcyBvbiB0aGUgZWxlbWVudCB3ZSBoYXZlIGNsb3NlZFxuICAgICAgICAvLyAgYWxyZWFkeSBhbGwgcHJldmlvdXMgbm9uLW1vZGFsIHdpdGggY2xvc2Ugb24gb3V0c2lkZSBjbGljayBlbGVtZW50cywgc28gd2UgcmV0dXJuLiBJZlxuICAgICAgICAvLyAgbm90IGNsb3NlIHRoZSBvdmVybGF5IGFuZCBjaGVjayBuZXh0XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zW2ldO1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXYuY29tcG9zZWQgPyBldi5jb21wb3NlZFBhdGgoKVswXSA6IGV2LnRhcmdldDtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBpcyBvbiB0aGUgb3ZlcmxheSBlbGVtZW50IG9yIG9uIGFuIGVsZW1lbnQgZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QsIGFuZCBpZiBzbyBkbyBub3QgY2xvc2UgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRWxlbWVudHMgPSBpbmZvLnNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID9cbiAgICAgICAgICAgICAgICAgICAgWy4uLmluZm8uc2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2ssIG92ZXJsYXlFbGVtZW50XSA6IFtvdmVybGF5RWxlbWVudF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnNpZGVDbGljazogYm9vbGVhbiA9IGV4Y2x1ZGVFbGVtZW50cy5zb21lKGUgPT4gZS5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luc2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjbGljayBpcyBvdXRzaWRlIGNsaWNrLCBidXQgY2xvc2UgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZShpbmZvLmlkLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljaykge1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLl9oaWRlKGluZm8uaWQsIGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gIGlmIGFsbCBvdmVybGF5cyBtaW51cyBjbG9zaW5nIG92ZXJsYXlzIGVxdWFscyBvbmUgYWRkIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcih4ID0+IHguc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljayAmJiAheC5zZXR0aW5ncy5tb2RhbCkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKHggPT4geC5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmICF4LnNldHRpbmdzLm1vZGFsICYmXG4gICAgICAgICAgICAgICAgICAgIHguY2xvc2VBbmltYXRpb25QbGF5ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgeC5jbG9zZUFuaW1hdGlvblBsYXllci5oYXNTdGFydGVkKCkpLmxlbmd0aCA9PT0gMSkge1xuXG4gICAgICAgICAgICAgICAgLy8gY2xpY2sgZXZlbnQgaXMgbm90IGZpcmVkIG9uIGlPUy4gVG8gbWFrZSBlbGVtZW50IFwiY2xpY2thYmxlXCIgd2UgYXJlXG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB0aGUgY3Vyc29yIHRvIHBvaW50ZXJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MgJiYgIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9IHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVJc1NldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU91dHNpZGVDbGlja0xpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbGV0IHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoby5zZXR0aW5ncy5tb2RhbCA9PT0gZmFsc2UgJiYgby5pZCAhPT0gaW5mby5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW1vdmVDbGlja0V2ZW50TGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUlzU2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDbG9zZU9uRXNjYXBlTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSAmJiAhdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZG9jdW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiBldi5rZXkgPT09ICdFc2NhcGUnIHx8IGV2LmtleSA9PT0gJ0VzYycpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlT3ZlcmxheXMgPSB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKG8gPT4gby52aXNpYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZU92ZXJsYXlzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRPdmVybGF5SW5mbyA9IHZpc2libGVPdmVybGF5c1t2aXNpYmxlT3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldE92ZXJsYXlJbmZvLnZpc2libGUgJiYgdGFyZ2V0T3ZlcmxheUluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUodGFyZ2V0T3ZlcmxheUluZm8uaWQsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1vZGFsQ2xhc3NlcyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlci0tbW9kYWwnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RhbENsYXNzZXMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lneC1vdmVybGF5X193cmFwcGVyLS1tb2RhbCcpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbik7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgPSBhbmltYXRpb25CdWlsZGVyLmNyZWF0ZShpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIC8vICBBbmltYXRpb25QbGF5ZXIuZ2V0UG9zaXRpb24gcmV0dXJucyBhbHdheXMgMC4gVG8gd29ya2Fyb3VuZCB0aGlzIHdlIGFyZSBnZXR0aW5nIGlubmVyIFdlYkFuaW1hdGlvblBsYXllclxuICAgICAgICAgICAgLy8gIGFuZCB0aGVuIGdldHRpbmcgdGhlIHBvc2l0aW9ucyBmcm9tIGl0LlxuICAgICAgICAgICAgLy8gIFRoaXMgaXMgbG9nZ2VkIGluIEFuZ3VsYXIgaGVyZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE4ODkxXG4gICAgICAgICAgICAvLyAgQXMgc29vbiBhcyB0aGlzIGlzIHJlc29sdmVkIHdlIGNhbiByZW1vdmUgdGhpcyBoYWNrXG4gICAgICAgICAgICBjb25zdCBpbm5lclJlbmRlcmVyID0gKGluZm8ub3BlbkFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9yZW5kZXJlcjtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvbklubmVyUGxheWVyID0gaW5uZXJSZW5kZXJlci5lbmdpbmUucGxheWVyc1tpbm5lclJlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLm9uRG9uZSgoKSA9PiB0aGlzLm9wZW5BbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhbmltYXRpb25CdWlsZGVyID0gdGhpcy5idWlsZGVyLmJ1aWxkKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbik7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyID0gYW5pbWF0aW9uQnVpbGRlci5jcmVhdGUoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAvLyAgQW5pbWF0aW9uUGxheWVyLmdldFBvc2l0aW9uIHJldHVybnMgYWx3YXlzIDAuIFRvIHdvcmthcm91bmQgdGhpcyB3ZSBhcmUgZ2V0dGluZyBpbm5lciBXZWJBbmltYXRpb25QbGF5ZXJcbiAgICAgICAgICAgIC8vICBhbmQgdGhlbiBnZXR0aW5nIHRoZSBwb3NpdGlvbnMgZnJvbSBpdC5cbiAgICAgICAgICAgIC8vICBUaGlzIGlzIGxvZ2dlZCBpbiBBbmd1bGFyIGhlcmUgLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xODg5MVxuICAgICAgICAgICAgLy8gIEFzIHNvb24gYXMgdGhpcyBpcyByZXNvbHZlZCB3ZSBjYW4gcmVtb3ZlIHRoaXMgaGFja1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZW5kZXJlciA9IChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3JlbmRlcmVyO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvbklubmVyUGxheWVyID0gaW5uZXJSZW5kZXJlci5lbmdpbmUucGxheWVyc1tpbm5lclJlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4gdGhpcy5jbG9zZUFuaW1hdGlvbkRvbmUoaW5mbykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoIWluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZykge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHdoZW4gYW5pbWF0aW9uIGZpbmlzaCBhbmd1bGFyIGRlbGV0ZXMgYWxsIG9uRG9uZSBoYW5kbGVycyBzbyB3ZSBuZWVkIHRvIGFkZCBpdCBhZ2FpbiA6KFxuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLm9uRG9uZSgoKSA9PiB0aGlzLm9wZW5BbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB3aGVuIGFuaW1hdGlvbiBmaW5pc2ggYW5ndWxhciBkZWxldGVzIGFsbCBvbkRvbmUgaGFuZGxlcnMgc28gd2UgbmVlZCB0byBhZGQgaXQgYWdhaW4gOihcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIub25Eb25lKCgpID0+IHRoaXMuY2xvc2VBbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgJiYgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgYXMgYW55KS5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEb25lKGluZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoQW5pbWF0aW9ucyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgZW1pdCBoZXJlIG9wZW5lZCBvciBjbG9zZWQgZXZlbnRzXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgJiYgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgYXMgYW55KS5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyICYmIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixnQkFBZ0IsRUFBcUQsTUFBTSxxQkFBcUIsQ0FBQztBQUN2SSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGNBQWMsRUFFZCx3QkFBd0IsRUFFeEIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFFUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNILE1BQU0sRUFDTixPQUFPLEVBRVAsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGNBQWMsRUFDZCxXQUFXLEVBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFz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VUFBVSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLHlHQUF5RztZQUN4RyxJQUFJLENBQUMsbUJBQTJCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN0RDtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNyRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMseUdBQXlHO1lBQ3hHLElBQUksQ0FBQyxvQkFBNEIsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZEO0lBQ0wsQ0FBQzs7OztZQTc1QkosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBMUQ5Qix3QkFBd0I7WUFGeEIsY0FBYztZQVFkLFFBQVE7WUFYMEIsZ0JBQWdCOzRDQW9KN0MsTUFBTSxTQUFDLFFBQVE7WUF2SXBCLE1BQU07WUFxQkQsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkFuaW1hdGVSZWZNZXRhZGF0YSwgQW5pbWF0aW9uQnVpbGRlciwgQW5pbWF0aW9uTWV0YWRhdGFUeXBlLCBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdNb2R1bGVSZWYsXG4gICAgTmdab25lLCBPbkRlc3Ryb3ksIFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIGZhZGVJbixcbiAgICBmYWRlT3V0LFxuICAgIElBbmltYXRpb25QYXJhbXMsXG4gICAgc2NhbGVJbkhvckxlZnQsXG4gICAgc2NhbGVJbkhvclJpZ2h0LFxuICAgIHNjYWxlSW5WZXJCb3R0b20sXG4gICAgc2NhbGVJblZlclRvcCxcbiAgICBzY2FsZU91dEhvckxlZnQsXG4gICAgc2NhbGVPdXRIb3JSaWdodCxcbiAgICBzY2FsZU91dFZlckJvdHRvbSxcbiAgICBzY2FsZU91dFZlclRvcCxcbiAgICBzbGlkZUluQm90dG9tLFxuICAgIHNsaWRlSW5Ub3AsXG4gICAgc2xpZGVPdXRCb3R0b20sXG4gICAgc2xpZGVPdXRUb3Bcbn0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb25pbmdTdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbnRhaW5lclBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL2NvbnRhaW5lci1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGFzdGljUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vcG9zaXRpb24vZWxhc3RpYy1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9wb3NpdGlvbi9nbG9iYWwtcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgSVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3Bvc2l0aW9uL0lQb3NpdGlvblN0cmF0ZWd5JztcbmltcG9ydCB7IE5vT3BTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4vc2Nyb2xsL05vT3BTY3JvbGxTdHJhdGVneSc7XG5pbXBvcnQge1xuICAgIEFic29sdXRlUG9zaXRpb24sXG4gICAgSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzLFxuICAgIE92ZXJsYXlFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUluZm8sXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvaW50LFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgUmVsYXRpdmVQb3NpdGlvbixcbiAgICBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSAnLi91dGlsaXRpZXMnO1xuXG4vKipcbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9vdmVybGF5LW1haW4pXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIGFsbG93cyB1c2VycyB0byBzaG93IGNvbXBvbmVudHMgb24gb3ZlcmxheSBkaXYgYWJvdmUgYWxsIG90aGVyIGVsZW1lbnRzIGluIHRoZSBwYWdlLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIElneE92ZXJsYXlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGp1c3QgYmVmb3JlIHRoZSBvdmVybGF5IGNvbnRlbnQgc3RhcnRzIHRvIG9wZW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5pbmcoZXZlbnQ6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3Qgb3BlbmluZyA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8T3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBvdmVybGF5IGNvbnRlbnQgaXMgb3BlbmVkIGFuZCBhbGwgYW5pbWF0aW9ucyBhcmUgZmluaXNoZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9wZW5lZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IG9wZW5lZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBjb250ZW50IHN0YXJ0cyB0byBjbG9zZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2luZyhldmVudDogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3Mpe1xuICAgICAqICAgICBjb25zdCBjbG9zaW5nID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5Q2xvc2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgY29udGVudCBpcyBjbG9zZWQgYW5kIGFsbCBhbmltYXRpb25zIGFyZSBmaW5pc2hlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY2xvc2VkKGV2ZW50OiBPdmVybGF5RXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgY2xvc2VkID0gZXZlbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE92ZXJsYXlFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBjb250ZW50IGlzIGFwcGVuZGVkIHRvIHRoZSBvdmVybGF5LCBhbmQgYmVmb3JlIGFuaW1hdGlvbnMgYXJlIHN0YXJ0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnRlbnRBcHBlbmRlZChldmVudDogT3ZlcmxheUV2ZW50QXJncyl7XG4gICAgICogICAgIGNvbnN0IGNvbnRlbnRBcHBlbmRlZCA9IGV2ZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udGVudEFwcGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBqdXN0IGJlZm9yZSB0aGUgb3ZlcmxheSBhbmltYXRpb24gc3RhcnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGFuaW1hdGlvblN0YXJ0aW5nKGV2ZW50OiBPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzKXtcbiAgICAgKiAgICAgY29uc3QgYW5pbWF0aW9uU3RhcnRpbmcgPSBldmVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFuaW1hdGlvblN0YXJ0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxPdmVybGF5QW5pbWF0aW9uRXZlbnRBcmdzPigpO1xuXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50SWQgPSAwO1xuICAgIHByaXZhdGUgX292ZXJsYXlJbmZvczogT3ZlcmxheUluZm9bXSA9IFtdO1xuICAgIHByaXZhdGUgX292ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG4gICAgcHJpdmF0ZSBfa2V5UHJlc3NFdmVudExpc3RlbmVyOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfY3Vyc29yU3R5bGVJc1NldCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2N1cnNvck9yaWdpbmFsVmFsdWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgX2RlZmF1bHRTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW10sXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50ID0gdGhpcy5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG92ZXJsYXkgc2V0dGluZ3Mgd2l0aCBnbG9iYWwgb3IgY29udGFpbmVyIHBvc2l0aW9uIHN0cmF0ZWd5IGFuZCBwcmVzZXQgcG9zaXRpb24gc2V0dGluZ3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBQcmVzZXQgcG9zaXRpb24gc2V0dGluZ3MuIERlZmF1bHQgcG9zaXRpb24gaXMgJ2NlbnRlcidcbiAgICAgKiBAcGFyYW0gb3V0bGV0IFRoZSBvdXRsZXQgY29udGFpbmVyIHRvIGF0dGFjaCB0aGUgb3ZlcmxheSB0b1xuICAgICAqIEByZXR1cm5zIE5vbi1tb2RhbCBvdmVybGF5IHNldHRpbmdzIGJhc2VkIG9uIEdsb2JhbCBvciBDb250YWluZXIgcG9zaXRpb24gc3RyYXRlZ3kgYW5kIHRoZSBwcm92aWRlZCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUFic29sdXRlT3ZlcmxheVNldHRpbmdzKFxuICAgICAgICBwb3NpdGlvbj86IEFic29sdXRlUG9zaXRpb24sIG91dGxldD86IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuY3JlYXRlQWJzb2x1dGVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBvdXRsZXQgPyBuZXcgQ29udGFpbmVyUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblNldHRpbmdzKSA6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgICAgICBvdXRsZXRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlTZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG92ZXJsYXkgc2V0dGluZ3Mgd2l0aCBhdXRvLCBjb25uZWN0ZWQgb3IgZWxhc3RpYyBwb3NpdGlvbiBzdHJhdGVneSBhbmQgcHJlc2V0IHBvc2l0aW9uIHNldHRpbmdzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IEF0dGFjaGluZyB0YXJnZXQgZm9yIHRoZSBjb21wb25lbnQgdG8gc2hvd1xuICAgICAqIEBwYXJhbSBzdHJhdGVneSBUaGUgcmVsYXRpdmUgcG9zaXRpb24gc3RyYXRlZ3kgdG8gYmUgYXBwbGllZCB0byB0aGUgb3ZlcmxheSBzZXR0aW5ncy4gRGVmYXVsdCBpcyBBdXRvIHBvc2l0aW9uaW5nIHN0cmF0ZWd5LlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBQcmVzZXQgcG9zaXRpb24gc2V0dGluZ3MuIEJ5IGRlZmF1bHQgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25lZCBiZWxvdyB0aGUgdGFyZ2V0LCBsZWZ0IGFsaWduZWQuXG4gICAgICogQHJldHVybnMgTm9uLW1vZGFsIG92ZXJsYXkgc2V0dGluZ3MgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRhcmdldCwgc3RyYXRlZ3kgYW5kIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlUmVsYXRpdmVPdmVybGF5U2V0dGluZ3MoXG4gICAgICAgIHRhcmdldDogUG9pbnQgfCBIVE1MRWxlbWVudCxcbiAgICAgICAgcG9zaXRpb24/OiBSZWxhdGl2ZVBvc2l0aW9uLFxuICAgICAgICBzdHJhdGVneT86IFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneSk6XG4gICAgICAgIE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLmNyZWF0ZVJlbGF0aXZlUG9zaXRpb25TZXR0aW5ncyhwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5LCBwb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvdmVybGF5U2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQWJzb2x1dGVQb3NpdGlvblNldHRpbmdzKHBvc2l0aW9uOiBBYnNvbHV0ZVBvc2l0aW9uKTogUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgICAgIGxldCBwb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEFic29sdXRlUG9zaXRpb24uQm90dG9tOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRCb3R0b21cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBYnNvbHV0ZVBvc2l0aW9uLlRvcDpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJblRvcCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0VG9wXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWJzb2x1dGVQb3NpdGlvbi5DZW50ZXI6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBmYWRlSW4sXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBmYWRlT3V0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVSZWxhdGl2ZVBvc2l0aW9uU2V0dGluZ3MocG9zaXRpb246IFJlbGF0aXZlUG9zaXRpb24pOiBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvbi5BYm92ZTpcbiAgICAgICAgICAgICAgICBwb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuVG9wLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogc2NhbGVJblZlckJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyQm90dG9tLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQmVsb3c6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbERpcmVjdGlvbjogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJUb3AsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBzY2FsZU91dFZlclRvcFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQWZ0ZXI6XG4gICAgICAgICAgICAgICAgcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluSG9yTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0SG9yTGVmdFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb24uQmVmb3JlOlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5Ib3JSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0SG9yUmlnaHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZVBvc2l0aW9uLkRlZmF1bHQ6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBzY2FsZUluVmVyVG9wLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogc2NhbGVPdXRWZXJUb3AsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5OiBSZWxhdGl2ZVBvc2l0aW9uU3RyYXRlZ3ksIHBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MpOiBJUG9zaXRpb25TdHJhdGVneSB7XG4gICAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmVQb3NpdGlvblN0cmF0ZWd5LkNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5FbGFzdGljOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxhc3RpY1Bvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgICAgICBjYXNlIFJlbGF0aXZlUG9zaXRpb25TdHJhdGVneS5BdXRvOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIElkLiBQcm92aWRlIHRoaXMgSWQgd2hlbiBjYWxsIGBzaG93KGlkKWAgbWV0aG9kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IEVsZW1lbnRSZWYgdG8gc2hvdyBpbiBvdmVybGF5XG4gICAgICogQHBhcmFtIHNldHRpbmdzIERpc3BsYXkgc2V0dGluZ3MgZm9yIHRoZSBvdmVybGF5LCBzdWNoIGFzIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwvY2xvc2UgYmVoYXZpb3IuXG4gICAgICogQHJldHVybnMgSWQgb2YgdGhlIGNyZWF0ZWQgb3ZlcmxheS4gVmFsaWQgdW50aWwgYGRldGFjaGAgaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goZWxlbWVudDogRWxlbWVudFJlZiwgc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIElkLiBQcm92aWRlIHRoaXMgSWQgd2hlbiBjYWxsIGBzaG93KGlkKWAgbWV0aG9kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IENvbXBvbmVudCBUeXBlIHRvIHNob3cgaW4gb3ZlcmxheVxuICAgICAqIEBwYXJhbSBzZXR0aW5ncyBEaXNwbGF5IHNldHRpbmdzIGZvciB0aGUgb3ZlcmxheSwgc3VjaCBhcyBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsL2Nsb3NlIGJlaGF2aW9yLlxuICAgICAqIEBwYXJhbSBtb2R1bGVSZWYgT3B0aW9uYWwgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCBjb250YWluaW5nIEluamVjdG9yIGFuZCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgKiB0aGF0IGNhbiByZXNvbHZlIHRoZSBjb21wb25lbnQncyBmYWN0b3J5XG4gICAgICogQHJldHVybnMgSWQgb2YgdGhlIGNyZWF0ZWQgb3ZlcmxheS4gVmFsaWQgdW50aWwgYGRldGFjaGAgaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdHRhY2goY29tcG9uZW50OiBUeXBlPGFueT4sIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzLFxuICAgICAgICBtb2R1bGVSZWY/OiBQaWNrPE5nTW9kdWxlUmVmPGFueT4sICdpbmplY3RvcicgfCAnY29tcG9uZW50RmFjdG9yeVJlc29sdmVyJz4pOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dGFjaChjb21wb25lbnQ6IEVsZW1lbnRSZWYgfCBUeXBlPGFueT4sIHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzLFxuICAgICAgICBtb2R1bGVSZWY/OiBQaWNrPE5nTW9kdWxlUmVmPGFueT4sICdpbmplY3RvcicgfCAnY29tcG9uZW50RmFjdG9yeVJlc29sdmVyJz4pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUluZm8oY29tcG9uZW50LCBtb2R1bGVSZWYpO1xuXG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPdmVybGF5IHdhcyBub3QgYWJsZSB0byBhdHRhY2ggcHJvdmlkZWQgY29tcG9uZW50IScpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpbmZvLmlkID0gKHRoaXMuX2NvbXBvbmVudElkKyspLnRvU3RyaW5nKCk7XG4gICAgICAgIGluZm8udmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZmF1bHRTZXR0aW5ncywgc2V0dGluZ3MpO1xuICAgICAgICBpbmZvLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbmZvcy5wdXNoKGluZm8pO1xuICAgICAgICBpbmZvLmhvb2sgPSB0aGlzLnBsYWNlRWxlbWVudEhvb2soaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpbmZvLmluaXRpYWxTaXplID0geyB3aWR0aDogZWxlbWVudFJlY3Qud2lkdGgsIGhlaWdodDogZWxlbWVudFJlY3QuaGVpZ2h0IH07XG4gICAgICAgIHRoaXMubW92ZUVsZW1lbnRUb092ZXJsYXkoaW5mbyk7XG4gICAgICAgIHRoaXMuY29udGVudEFwcGVuZGVkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiB9KTtcbiAgICAgICAgLy8gVE9ETzogd2h5IHdlIGhhZCB0aGlzIGNoZWNrP1xuICAgICAgICAvLyBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmluZGV4T2YoaW5mbykgPT09IC0xKSB7XG4gICAgICAgIC8vICAgICB0aGlzLl9vdmVybGF5SW5mb3MucHVzaChpbmZvKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBpbmZvLnNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5LmluaXRpYWxpemUodGhpcy5fZG9jdW1lbnQsIHRoaXMsIGluZm8uaWQpO1xuICAgICAgICBpbmZvLnNldHRpbmdzLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCgpO1xuICAgICAgICB0aGlzLmFkZE91dHNpZGVDbGlja0xpc3RlbmVyKGluZm8pO1xuICAgICAgICB0aGlzLmFkZFJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5hZGRDbG9zZU9uRXNjYXBlTGlzdGVuZXIoaW5mbyk7XG4gICAgICAgIHRoaXMuYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm8pO1xuICAgICAgICByZXR1cm4gaW5mby5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgb3ZlcmxheSB3aXRoIHRoZSBwcm92aWRlZCBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgb3ZlcmxheSB0byByZW1vdmVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaChpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRldGFjaChpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0gdGhpcy5nZXRPdmVybGF5QnlJZChpZCk7XG5cbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuZGV0YWNoIHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQW5pbWF0aW9ucyhpbmZvKTtcbiAgICAgICAgaW5mby5zZXR0aW5ncy5zY3JvbGxTdHJhdGVneS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5yZW1vdmVPdXRzaWRlQ2xpY2tMaXN0ZW5lcihpbmZvKTtcbiAgICAgICAgdGhpcy5yZW1vdmVSZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuY2xlYW5VcChpbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIHRoZSBvdmVybGF5cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5vdmVybGF5LmRldGFjaEFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXRhY2hBbGwoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaCh0aGlzLl9vdmVybGF5SW5mb3NbaV0uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIG92ZXJsYXkgZm9yIHByb3ZpZGVkIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIElkIHRvIHNob3cgb3ZlcmxheSBmb3JcbiAgICAgKiBAcGFyYW0gc2V0dGluZ3MgRGlzcGxheSBzZXR0aW5ncyBmb3IgdGhlIG92ZXJsYXksIHN1Y2ggYXMgcG9zaXRpb25pbmcgYW5kIHNjcm9sbC9jbG9zZSBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhpZDogc3RyaW5nLCBzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmZvOiBPdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignaWd4T3ZlcmxheS5zaG93IHdhcyBjYWxsZWQgd2l0aCB3cm9uZyBpZDogJywgaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyA9IHsgaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBhdHRhY2hcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoaW5mbyk7XG4gICAgICAgIGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbihcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsXG4gICAgICAgICAgICB7IHdpZHRoOiBpbmZvLmluaXRpYWxTaXplLndpZHRoLCBoZWlnaHQ6IGluZm8uaW5pdGlhbFNpemUuaGVpZ2h0IH0sXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBpbmZvLnNldHRpbmdzLnRhcmdldCk7XG4gICAgICAgIHRoaXMuYWRkTW9kYWxDbGFzc2VzKGluZm8pO1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGxheU9wZW5BbmltYXRpb24oaW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcgc2hvdyB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZSBvcGVuZWQgZmlyZXNcbiAgICAgICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgICAgICAgICAgaW5mby52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBpZDogaW5mby5pZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgSUQgcHJvdmlkZWQgYXMgYSBwYXJhbWV0ZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMub3ZlcmxheS5oaWRlKGlkKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZShpZDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2hpZGUoaWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyBhbGwgdGhlIGNvbXBvbmVudHMgYW5kIHRoZSBvdmVybGF5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuaGlkZUFsbCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlQWxsKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdGhpcy5oaWRlKHRoaXMuX292ZXJsYXlJbmZvc1tpXS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvc2l0aW9ucyB0aGUgY29tcG9uZW50IHdpdGggSUQgcHJvdmlkZWQgYXMgYSBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgdG8gcmVwb3NpdGlvbiBvdmVybGF5IGZvclxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkucmVwb3NpdGlvbihpZCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHJlcG9zaXRpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBvdmVybGF5SW5mbyA9IHRoaXMuZ2V0T3ZlcmxheUJ5SWQoaWQpO1xuICAgICAgICBpZiAoIW92ZXJsYXlJbmZvIHx8ICFvdmVybGF5SW5mby5zZXR0aW5ncykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignV3JvbmcgaWQgcHJvdmlkZWQgaW4gb3ZlcmxheS5yZXBvc2l0aW9uIG1ldGhvZC4gSWQ6ICcgKyBpZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSBvdmVybGF5SW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnRSZWN0ID0gY29udGVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIG92ZXJsYXlJbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb24oXG4gICAgICAgICAgICBjb250ZW50RWxlbWVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogY29udGVudEVsZW1lbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogY29udGVudEVsZW1lbnRSZWN0LmhlaWdodFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBvdmVybGF5SW5mby5zZXR0aW5ncy50YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9mZnNldHMgdGhlIGNvbnRlbnQgYWxvbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXhpcyBieSB0aGUgcHJvdmlkZWQgYW1vdW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgSWQgdG8gb2Zmc2V0IG92ZXJsYXkgZm9yXG4gICAgICogQHBhcmFtIGRlbHRhWCBBbW91bnQgb2Ygb2Zmc2V0IGluIGhvcml6b250YWwgZGlyZWN0aW9uXG4gICAgICogQHBhcmFtIGRlbHRhWSBBbW91bnQgb2Ygb2Zmc2V0IGluIHZlcnRpY2FsIGRpcmVjdGlvblxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLm92ZXJsYXkuc2V0T2Zmc2V0KGlkLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldE9mZnNldChpZDogc3RyaW5nLCBkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcblxuICAgICAgICBpZiAoIWluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZm8udHJhbnNmb3JtWCArPSBkZWx0YVg7XG4gICAgICAgIGluZm8udHJhbnNmb3JtWSArPSBkZWx0YVk7XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtWCA9IGluZm8udHJhbnNmb3JtWDtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtWSA9IGluZm8udHJhbnNmb3JtWTtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSBgdHJhbnNsYXRlKCR7dHJhbnNmb3JtWH1weCwgJHt0cmFuc2Zvcm1ZfXB4KWA7XG4gICAgICAgIGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHJlcG9zaXRpb25BbGwgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9zaXRpb24odGhpcy5fb3ZlcmxheUluZm9zW2ldLmlkKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldE92ZXJsYXlCeUlkKGlkOiBzdHJpbmcpOiBPdmVybGF5SW5mbyB7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX292ZXJsYXlJbmZvcy5maW5kKGUgPT4gZS5pZCA9PT0gaWQpO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oaWRlKGlkOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW5mbzogT3ZlcmxheUluZm8gPSB0aGlzLmdldE92ZXJsYXlCeUlkKGlkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2lneE92ZXJsYXkuaGlkZSB3YXMgY2FsbGVkIHdpdGggd3JvbmcgaWQ6ICcsIGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEFyZ3M6IE92ZXJsYXlDbG9zaW5nRXZlbnRBcmdzID0geyBpZCwgY29tcG9uZW50UmVmOiBpbmZvLmNvbXBvbmVudFJlZiwgY2FuY2VsOiBmYWxzZSwgZXZlbnQgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgaWYgKGV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZU1vZGFsQ2xhc3NlcyhpbmZvKTtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oaW5mbywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZURvbmUoaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE92ZXJsYXlJbmZvKGNvbXBvbmVudDogYW55LCBtb2R1bGVSZWY/OiBQaWNrPE5nTW9kdWxlUmVmPGFueT4sICdpbmplY3RvcicgfCAnY29tcG9uZW50RmFjdG9yeVJlc29sdmVyJz4pOiBPdmVybGF5SW5mbyB7XG4gICAgICAgIGNvbnN0IGluZm86IE92ZXJsYXlJbmZvID0geyBuZ1pvbmU6IHRoaXMuX3pvbmUsIHRyYW5zZm9ybVg6IDAsIHRyYW5zZm9ybVk6IDAgfTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIGluZm8uZWxlbWVudFJlZiA9IGNvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkeW5hbWljRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+O1xuICAgICAgICAgICAgY29uc3QgZmFjdG9yeVJlc29sdmVyID0gbW9kdWxlUmVmID8gbW9kdWxlUmVmLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA6IHRoaXMuX2ZhY3RvcnlSZXNvbHZlcjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY0ZhY3RvcnkgPSBmYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gbW9kdWxlUmVmID8gbW9kdWxlUmVmLmluamVjdG9yIDogdGhpcy5faW5qZWN0b3I7XG4gICAgICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55PiA9IGR5bmFtaWNGYWN0b3J5LmNyZWF0ZShpbmplY3Rvcik7XG4gICAgICAgICAgICB0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhkeW5hbWljQ29tcG9uZW50Lmhvc3RWaWV3KTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbmV3bHkgY3JlYXRlZCBmcm9tIGEgQ29tcG9uZW50LCBpdCBpcyB3cmFwcGVkIGluICduZy1jb21wb25lbnQnIHRhZyAtIHdlIGRvIG5vdCB3YW50IHRoYXQuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZHluYW1pY0NvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmID0geyBuYXRpdmVFbGVtZW50OiBlbGVtZW50IH07XG4gICAgICAgICAgICBpbmZvLmNvbXBvbmVudFJlZiA9IGR5bmFtaWNDb21wb25lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYWNlRWxlbWVudEhvb2soZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhvb2sgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShob29rLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGhvb2s7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlRWxlbWVudFRvT3ZlcmxheShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpbmZvLndyYXBwZXJFbGVtZW50ID0gdGhpcy5nZXRXcmFwcGVyRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuZ2V0Q29udGVudEVsZW1lbnQoaW5mby53cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5tb2RhbCk7XG4gICAgICAgIHRoaXMuZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbykuYXBwZW5kQ2hpbGQoaW5mby53cmFwcGVyRWxlbWVudCk7XG4gICAgICAgIGNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdyYXBwZXJFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlcjogSFRNTEVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRlbnRFbGVtZW50KHdyYXBwZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgbW9kYWw6IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlmIChtb2RhbCkge1xuICAgICAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fY29udGVudC0tbW9kYWwnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXY6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX2NvbnRlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBoaWRlIGVsZW1lbnQgdG8gZWxpbWluYXRlIGZsaWNrZXJpbmcuIFNob3cgdGhlIGVsZW1lbnQgZXhhY3RseSBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0c1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgd3JhcHBlckVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUVsZW1lbnQoaW5mbzogT3ZlcmxheUluZm8pOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm91dGxldCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZm8uc2V0dGluZ3Mub3V0bGV0Lm5hdGl2ZUVsZW1lbnQgfHwgaW5mby5zZXR0aW5ncy5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lneC1vdmVybGF5Jyk7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX292ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNpemUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAvLyAgaWYgd2UgYXJlIHBvc2l0aW9uaW5nIGNvbXBvbmVudCB0aGlzIGlzIGZpcnN0IHRpbWUgaXQgZ2V0cyB2aXNpYmxlXG4gICAgICAgICAgICAvLyAgYW5kIHdlIGNhbiBmaW5hbGx5IGdldCBpdHMgc2l6ZVxuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaW5mby5pbml0aWFsU2l6ZSA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IGNvbnRlbnQgZGl2IHdpZHRoIG9ubHkgaWYgZWxlbWVudCB0byBzaG93IGhhcyB3aWR0aFxuICAgICAgICBpZiAoaW5mby5pbml0aWFsU2l6ZS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IGluZm8uaW5pdGlhbFNpemUud2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURvbmUoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaW5mby52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGlmIChpbmZvLndyYXBwZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyB0byBlbGltaW5hdGUgZmxpY2tlcmluZyBzaG93IHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlIGFuaW1hdGlvbiBzdGFydFxuICAgICAgICAgICAgaW5mby53cmFwcGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbmZvLmNsb3NlQW5pbWF0aW9uRGV0YWNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgaWQ6IGluZm8uaWQsIGNvbXBvbmVudFJlZjogaW5mby5jb21wb25lbnRSZWYsIGV2ZW50OiBpbmZvLmV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbmZvLmV2ZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5VcChpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBjb25zdCBjaGlsZDogSFRNTEVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gdGhpcy5nZXRPdmVybGF5RWxlbWVudChpbmZvKTtcbiAgICAgICAgaWYgKCFvdXRsZXQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENvbXBvbmVudCB3aXRoIGlkOiAke2luZm8uaWR9IGlzIGFscmVhZHkgZGV0YWNoZWQhYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3V0bGV0LnJlbW92ZUNoaWxkKGNoaWxkLnBhcmVudE5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIGlmIChpbmZvLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoaW5mby5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgaW5mby5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIGluZm8uY29tcG9uZW50UmVmO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmhvb2spIHtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgaW5mby5ob29rKTtcbiAgICAgICAgICAgIGluZm8uaG9vay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGluZm8uaG9vayk7XG4gICAgICAgICAgICBkZWxldGUgaW5mby5ob29rO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vdmVybGF5SW5mb3MuaW5kZXhPZihpbmZvKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gdGhpcy5fb3ZlcmxheUVsZW1lbnQucGFyZW50RWxlbWVudCBjaGVjayBqdXN0IGZvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGRlbGV0ZSB0aGUgZWxlbWVudFxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlFbGVtZW50ICYmIHRoaXMuX292ZXJsYXlFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX292ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5RWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsb3NlT25Fc2NhcGVMaXN0ZW5lcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYW4gYWxsIHRoZSByZXNvdXJjZXMgYXR0YWNoZWQgdG8gaW5mb1xuICAgICAgICBkZWxldGUgaW5mby5lbGVtZW50UmVmO1xuICAgICAgICBkZWxldGUgaW5mby5zZXR0aW5ncztcbiAgICAgICAgZGVsZXRlIGluZm8uaW5pdGlhbFNpemU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZyA9IHRydWU7XG4gICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllcj8uZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyO1xuICAgICAgICBkZWxldGUgaW5mby5vcGVuQW5pbWF0aW9uSW5uZXJQbGF5ZXI7XG4gICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25EZXRhY2hpbmcgPSB0cnVlO1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyPy5kZXN0cm95KCk7XG4gICAgICAgIGRlbGV0ZSBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyO1xuICAgICAgICBkZWxldGUgaW5mby5jbG9zZUFuaW1hdGlvbklubmVyUGxheWVyO1xuICAgICAgICBkZWxldGUgaW5mby5uZ1pvbmU7XG4gICAgICAgIGRlbGV0ZSBpbmZvLndyYXBwZXJFbGVtZW50O1xuICAgICAgICBpbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYXlPcGVuQW5pbWF0aW9uKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBvcGVuaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgZG8gbm90aGluZ1xuICAgICAgICBpZiAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyID09IG51bGwgfHwgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGNsb3NpbmcgYW5pbWF0aW9uIGFscmVhZHkgc3RhcnRlZCBzdGFydCBvcGVuIGFuaW1hdGlvbiBmcm9tIHdoZXJlIGNsb3NlIG9uZSBoYXMgcmVhY2hlZFxuICAgICAgICAvLyAgYW5kIHJlc2V0IGNsb3NlIGFuaW1hdGlvblxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcj8uaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICAvLyAgZ2V0UG9zaXRpb24oKSByZXR1cm5zIHdoYXQgcGFydCBvZiB0aGUgYW5pbWF0aW9uIGlzIHBhc3NlZCwgZS5nLiAwLjUgaWYgaGFsZiB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAgICAvLyAgaXMgZG9uZSwgMC43NSBpZiAzLzQgb2YgdGhlIGFuaW1hdGlvbiBpcyBkb25lLiBBcyB3ZSBuZWVkIHRvIHN0YXJ0IG5leHQgYW5pbWF0aW9uIGZyb20gd2hlcmVcbiAgICAgICAgICAgIC8vICB0aGUgcHJldmlvdXMgaGFzIGZpbmlzaGVkIHdlIG5lZWQgdGhlIGFtb3VudCB1cCB0byAxLCB0aGVyZWZvcmUgd2UgYXJlIHN1YnRyYWN0aW5nIHdoYXRcbiAgICAgICAgICAgIC8vICBnZXRQb3NpdGlvbigpIHJldHVybnMgZnJvbSBvbmVcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gMSAtIGluZm8uY2xvc2VBbmltYXRpb25Jbm5lclBsYXllci5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlciB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5pbml0KCk7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIuc2V0UG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGFydGluZy5lbWl0KHsgaWQ6IGluZm8uaWQsIGFuaW1hdGlvblBsYXllcjogaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLCBhbmltYXRpb25UeXBlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgLy8gIHRvIGVsaW1pbmF0ZSBmbGlja2VyaW5nIHNob3cgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgYW5pbWF0aW9uIHN0YXJ0XG4gICAgICAgIGluZm8ud3JhcHBlckVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgICAgICBpbmZvLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIucGxheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxheUNsb3NlQW5pbWF0aW9uKGluZm86IE92ZXJsYXlJbmZvLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBjbG9zaW5nIGFuaW1hdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgZG8gbm90aGluZ1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciA9PSBudWxsIHx8IGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgb3BlbmluZyBhbmltYXRpb24gYWxyZWFkeSBzdGFydGVkIHN0YXJ0IGNsb3NlIGFuaW1hdGlvbiBmcm9tIHdoZXJlIG9wZW4gb25lIGhhcyByZWFjaGVkXG4gICAgICAgIC8vICBhbmQgcmVtb3ZlIG9wZW4gYW5pbWF0aW9uXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXI/Lmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgLy8gIGdldFBvc2l0aW9uKCkgcmV0dXJucyB3aGF0IHBhcnQgb2YgdGhlIGFuaW1hdGlvbiBpcyBwYXNzZWQsIGUuZy4gMC41IGlmIGhhbGYgdGhlIGFuaW1hdGlvblxuICAgICAgICAgICAgLy8gIGlzIGRvbmUsIDAuNzUgaWYgMy80IG9mIHRoZSBhbmltYXRpb24gaXMgZG9uZS4gQXMgd2UgbmVlZCB0byBzdGFydCBuZXh0IGFuaW1hdGlvbiBmcm9tIHdoZXJlXG4gICAgICAgICAgICAvLyAgdGhlIHByZXZpb3VzIGhhcyBmaW5pc2hlZCB3ZSBuZWVkIHRoZSBhbW91bnQgdXAgdG8gMSwgdGhlcmVmb3JlIHdlIGFyZSBzdWJ0cmFjdGluZyB3aGF0XG4gICAgICAgICAgICAvLyAgZ2V0UG9zaXRpb24oKSByZXR1cm5zIGZyb20gb25lXG4gICAgICAgICAgICAvLyAgVE9ETzogVGhpcyBhc3N1bWVzIG9wZW5pbmcgYW5kIGNsb3NpbmcgYW5pbWF0aW9ucyBhcmUgbWlycm9yZWQuXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IDEgLSBpbmZvLm9wZW5BbmltYXRpb25Jbm5lclBsYXllci5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyIHZpYSBpbnRlcm5hbCBmaWVsZFxuICAgICAgICAgICAgKGluZm8ub3BlbkFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmluaXQoKTtcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuc2V0UG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGFydGluZy5lbWl0KHsgaWQ6IGluZm8uaWQsIGFuaW1hdGlvblBsYXllcjogaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciwgYW5pbWF0aW9uVHlwZTogJ2Nsb3NlJyB9KTtcbiAgICAgICAgaW5mby5ldmVudCA9IGV2ZW50O1xuICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyAgVE9ETzogY2hlY2sgaWYgYXBwbHlBbmltYXRpb25QYXJhbXMgd2lsbCB3b3JrIHdpdGggY29tcGxleCBhbmltYXRpb25zXG4gICAgcHJpdmF0ZSBhcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbk9wdGlvbnM6IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhKSB7XG4gICAgICAgIGlmICghYW5pbWF0aW9uT3B0aW9ucykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbmltYXRpb25PcHRpb25zLm9wdGlvbnMgfHwgIWFuaW1hdGlvbk9wdGlvbnMub3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBhbmltYXRpb25PcHRpb25zLm9wdGlvbnMucGFyYW1zIGFzIElBbmltYXRpb25QYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMuZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtcy5kdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmVhc2luZykge1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uID0gcGFyYW1zLmVhc2luZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja2VkID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vICBpZiB3ZSBnZXQgdG8gbW9kYWwgb3ZlcmxheSBqdXN0IHJldHVybiAtIHdlIHNob3VsZCBub3QgY2xvc2UgYW55dGhpbmcgdW5kZXIgaXRcbiAgICAgICAgLy8gIGlmIHdlIGdldCB0byBub24tbW9kYWwgb3ZlcmxheSBkbyB0aGUgbmV4dDpcbiAgICAgICAgLy8gICAxLiBDaGVjayBpdCBoYXMgY2xvc2Ugb24gb3V0c2lkZSBjbGljay4gSWYgbm90IGdvIG9uIHRvIG5leHQgb3ZlcmxheTtcbiAgICAgICAgLy8gICAyLiBJZiB0cnVlIGNoZWNrIGlmIGNsaWNrIGlzIG9uIHRoZSBlbGVtZW50LiBJZiBpdCBpcyBvbiB0aGUgZWxlbWVudCB3ZSBoYXZlIGNsb3NlZFxuICAgICAgICAvLyAgYWxyZWFkeSBhbGwgcHJldmlvdXMgbm9uLW1vZGFsIHdpdGggY2xvc2Ugb24gb3V0c2lkZSBjbGljayBlbGVtZW50cywgc28gd2UgcmV0dXJuLiBJZlxuICAgICAgICAvLyAgbm90IGNsb3NlIHRoZSBvdmVybGF5IGFuZCBjaGVjayBuZXh0XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9vdmVybGF5SW5mb3MubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fb3ZlcmxheUluZm9zW2ldO1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXYuY29tcG9zZWQgPyBldi5jb21wb3NlZFBhdGgoKVswXSA6IGV2LnRhcmdldDtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5RWxlbWVudCA9IGluZm8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBpcyBvbiB0aGUgb3ZlcmxheSBlbGVtZW50IG9yIG9uIGFuIGVsZW1lbnQgZnJvbSB0aGUgZXhjbHVzaW9uIGxpc3QsIGFuZCBpZiBzbyBkbyBub3QgY2xvc2UgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRWxlbWVudHMgPSBpbmZvLnNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID9cbiAgICAgICAgICAgICAgICAgICAgWy4uLmluZm8uc2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2ssIG92ZXJsYXlFbGVtZW50XSA6IFtvdmVybGF5RWxlbWVudF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnNpZGVDbGljazogYm9vbGVhbiA9IGV4Y2x1ZGVFbGVtZW50cy5zb21lKGUgPT4gZS5jb250YWlucyh0YXJnZXQgYXMgTm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luc2lkZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjbGljayBpcyBvdXRzaWRlIGNsaWNrLCBidXQgY2xvc2UgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZShpbmZvLmlkLCBldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljaykge1xuICAgICAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLl9oaWRlKGluZm8uaWQsIGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gIGlmIGFsbCBvdmVybGF5cyBtaW51cyBjbG9zaW5nIG92ZXJsYXlzIGVxdWFscyBvbmUgYWRkIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUluZm9zLmZpbHRlcih4ID0+IHguc2V0dGluZ3MuY2xvc2VPbk91dHNpZGVDbGljayAmJiAheC5zZXR0aW5ncy5tb2RhbCkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKHggPT4geC5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmICF4LnNldHRpbmdzLm1vZGFsICYmXG4gICAgICAgICAgICAgICAgICAgIHguY2xvc2VBbmltYXRpb25QbGF5ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgeC5jbG9zZUFuaW1hdGlvblBsYXllci5oYXNTdGFydGVkKCkpLmxlbmd0aCA9PT0gMSkge1xuXG4gICAgICAgICAgICAgICAgLy8gY2xpY2sgZXZlbnQgaXMgbm90IGZpcmVkIG9uIGlPUy4gVG8gbWFrZSBlbGVtZW50IFwiY2xpY2thYmxlXCIgd2UgYXJlXG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB0aGUgY3Vyc29yIHRvIHBvaW50ZXJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MgJiYgIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9IHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yU3R5bGVJc1NldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZU91dHNpZGVDbGlja0xpc3RlbmVyKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLm1vZGFsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbGV0IHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3MuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoby5zZXR0aW5ncy5tb2RhbCA9PT0gZmFsc2UgJiYgby5pZCAhPT0gaW5mby5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW1vdmVDbGlja0V2ZW50TGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNsaWNrRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJzb3JTdHlsZUlzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJzb3JTdHlsZUlzU2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVSZXNpemVIYW5kbGVyKCkge1xuICAgICAgICBjb25zdCBjbG9zaW5nT3ZlcmxheXNDb3VudCA9XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SW5mb3NcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG8gPT4gby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSlcbiAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUluZm9zLmxlbmd0aCAtIGNsb3NpbmdPdmVybGF5c0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcG9zaXRpb25BbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDbG9zZU9uRXNjYXBlTGlzdGVuZXIoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSAmJiAhdGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZG9jdW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiBldi5rZXkgPT09ICdFc2NhcGUnIHx8IGV2LmtleSA9PT0gJ0VzYycpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlT3ZlcmxheXMgPSB0aGlzLl9vdmVybGF5SW5mb3MuZmlsdGVyKG8gPT4gby52aXNpYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZU92ZXJsYXlzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRPdmVybGF5SW5mbyA9IHZpc2libGVPdmVybGF5c1t2aXNpYmxlT3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldE92ZXJsYXlJbmZvLnZpc2libGUgJiYgdGFyZ2V0T3ZlcmxheUluZm8uc2V0dGluZ3MuY2xvc2VPbkVzY2FwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUodGFyZ2V0T3ZlcmxheUluZm8uaWQsIGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQ2xvc2VPbkVzY2FwZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5fa2V5UHJlc3NFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlQcmVzc0V2ZW50TGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1vZGFsQ2xhc3NlcyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5tb2RhbCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSBpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtb3ZlcmxheV9fd3JhcHBlcicpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLm9wZW5BbmltYXRpb24pO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtb3ZlcmxheV9fd3JhcHBlci0tbW9kYWwnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RhbENsYXNzZXMoaW5mbzogT3ZlcmxheUluZm8pIHtcbiAgICAgICAgaWYgKGluZm8uc2V0dGluZ3MubW9kYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvblBhcmFtcyh3cmFwcGVyRWxlbWVudCwgaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lneC1vdmVybGF5X193cmFwcGVyLS1tb2RhbCcpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LW92ZXJsYXlfX3dyYXBwZXInKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRBbmltYXRpb25QbGF5ZXJzKGluZm86IE92ZXJsYXlJbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChpbmZvLnNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3Mub3BlbkFuaW1hdGlvbik7XG4gICAgICAgICAgICBpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgPSBhbmltYXRpb25CdWlsZGVyLmNyZWF0ZShpbmZvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIC8vICBBbmltYXRpb25QbGF5ZXIuZ2V0UG9zaXRpb24gcmV0dXJucyBhbHdheXMgMC4gVG8gd29ya2Fyb3VuZCB0aGlzIHdlIGFyZSBnZXR0aW5nIGlubmVyIFdlYkFuaW1hdGlvblBsYXllclxuICAgICAgICAgICAgLy8gIGFuZCB0aGVuIGdldHRpbmcgdGhlIHBvc2l0aW9ucyBmcm9tIGl0LlxuICAgICAgICAgICAgLy8gIFRoaXMgaXMgbG9nZ2VkIGluIEFuZ3VsYXIgaGVyZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE4ODkxXG4gICAgICAgICAgICAvLyAgQXMgc29vbiBhcyB0aGlzIGlzIHJlc29sdmVkIHdlIGNhbiByZW1vdmUgdGhpcyBoYWNrXG4gICAgICAgICAgICBjb25zdCBpbm5lclJlbmRlcmVyID0gKGluZm8ub3BlbkFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9yZW5kZXJlcjtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvbklubmVyUGxheWVyID0gaW5uZXJSZW5kZXJlci5lbmdpbmUucGxheWVyc1tpbm5lclJlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLm9uRG9uZSgoKSA9PiB0aGlzLm9wZW5BbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5zZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhbmltYXRpb25CdWlsZGVyID0gdGhpcy5idWlsZGVyLmJ1aWxkKGluZm8uc2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5jbG9zZUFuaW1hdGlvbik7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyID0gYW5pbWF0aW9uQnVpbGRlci5jcmVhdGUoaW5mby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAvLyAgQW5pbWF0aW9uUGxheWVyLmdldFBvc2l0aW9uIHJldHVybnMgYWx3YXlzIDAuIFRvIHdvcmthcm91bmQgdGhpcyB3ZSBhcmUgZ2V0dGluZyBpbm5lciBXZWJBbmltYXRpb25QbGF5ZXJcbiAgICAgICAgICAgIC8vICBhbmQgdGhlbiBnZXR0aW5nIHRoZSBwb3NpdGlvbnMgZnJvbSBpdC5cbiAgICAgICAgICAgIC8vICBUaGlzIGlzIGxvZ2dlZCBpbiBBbmd1bGFyIGhlcmUgLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xODg5MVxuICAgICAgICAgICAgLy8gIEFzIHNvb24gYXMgdGhpcyBpcyByZXNvbHZlZCB3ZSBjYW4gcmVtb3ZlIHRoaXMgaGFja1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZW5kZXJlciA9IChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3JlbmRlcmVyO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvbklubmVyUGxheWVyID0gaW5uZXJSZW5kZXJlci5lbmdpbmUucGxheWVyc1tpbm5lclJlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4gdGhpcy5jbG9zZUFuaW1hdGlvbkRvbmUoaW5mbykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoIWluZm8ub3BlbkFuaW1hdGlvbkRldGFjaGluZykge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IGlkOiBpbmZvLmlkLCBjb21wb25lbnRSZWY6IGluZm8uY29tcG9uZW50UmVmIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIpIHtcbiAgICAgICAgICAgIGluZm8ub3BlbkFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHdoZW4gYW5pbWF0aW9uIGZpbmlzaCBhbmd1bGFyIGRlbGV0ZXMgYWxsIG9uRG9uZSBoYW5kbGVycyBzbyB3ZSBuZWVkIHRvIGFkZCBpdCBhZ2FpbiA6KFxuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLm9uRG9uZSgoKSA9PiB0aGlzLm9wZW5BbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciAmJiBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQW5pbWF0aW9uRG9uZShpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICBpZiAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllcikge1xuICAgICAgICAgICAgaW5mby5jbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICAgICAgLy8gY2FsbGluZyByZXNldCBkb2VzIG5vdCBjaGFuZ2UgaGFzU3RhcnRlZCB0byBmYWxzZS4gVGhpcyBpcyB3aHkgd2UgYXJlIGRvaW5nIGl0IGhlcmUgdmlhIGludGVybmFsIGZpZWxkXG4gICAgICAgICAgICAoaW5mby5jbG9zZUFuaW1hdGlvblBsYXllciBhcyBhbnkpLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB3aGVuIGFuaW1hdGlvbiBmaW5pc2ggYW5ndWxhciBkZWxldGVzIGFsbCBvbkRvbmUgaGFuZGxlcnMgc28gd2UgbmVlZCB0byBhZGQgaXQgYWdhaW4gOihcbiAgICAgICAgICAgIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIub25Eb25lKCgpID0+IHRoaXMuY2xvc2VBbmltYXRpb25Eb25lKGluZm8pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgJiYgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgYXMgYW55KS5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEb25lKGluZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoQW5pbWF0aW9ucyhpbmZvOiBPdmVybGF5SW5mbykge1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgZW1pdCBoZXJlIG9wZW5lZCBvciBjbG9zZWQgZXZlbnRzXG4gICAgICAgIGlmIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgJiYgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLmhhc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgaW5mby5vcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLm9wZW5BbmltYXRpb25QbGF5ZXIgYXMgYW55KS5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyICYmIGluZm8uY2xvc2VBbmltYXRpb25QbGF5ZXIuaGFzU3RhcnRlZCgpKSB7XG4gICAgICAgICAgICBpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIHJlc2V0IGRvZXMgbm90IGNoYW5nZSBoYXNTdGFydGVkIHRvIGZhbHNlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgZG9pbmcgaXQgaGVyZSB2aWEgaW50ZXJuYWwgZmllbGRcbiAgICAgICAgICAgIChpbmZvLmNsb3NlQW5pbWF0aW9uUGxheWVyIGFzIGFueSkuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -14487,8 +14487,8 @@ class IgxOverlayService {
|
|
|
14487
14487
|
}
|
|
14488
14488
|
this.updateSize(info);
|
|
14489
14489
|
info.settings.positionStrategy.position(info.elementRef.nativeElement.parentElement, { width: info.initialSize.width, height: info.initialSize.height }, document, true, info.settings.target);
|
|
14490
|
+
this.addModalClasses(info);
|
|
14490
14491
|
if (info.settings.positionStrategy.settings.openAnimation) {
|
|
14491
|
-
this.buildAnimationPlayers(info);
|
|
14492
14492
|
this.playOpenAnimation(info);
|
|
14493
14493
|
}
|
|
14494
14494
|
else {
|
|
@@ -14585,6 +14585,7 @@ class IgxOverlayService {
|
|
|
14585
14585
|
if (eventArgs.cancel) {
|
|
14586
14586
|
return;
|
|
14587
14587
|
}
|
|
14588
|
+
this.removeModalClasses(info);
|
|
14588
14589
|
if (info.settings.positionStrategy.settings.closeAnimation) {
|
|
14589
14590
|
this.playCloseAnimation(info, event);
|
|
14590
14591
|
}
|
|
@@ -14758,7 +14759,6 @@ class IgxOverlayService {
|
|
|
14758
14759
|
// to eliminate flickering show the element just before animation start
|
|
14759
14760
|
info.wrapperElement.style.visibility = '';
|
|
14760
14761
|
info.visible = true;
|
|
14761
|
-
this.addModalClasses(info);
|
|
14762
14762
|
info.openAnimationPlayer.play();
|
|
14763
14763
|
}
|
|
14764
14764
|
playCloseAnimation(info, event) {
|
|
@@ -14784,7 +14784,6 @@ class IgxOverlayService {
|
|
|
14784
14784
|
}
|
|
14785
14785
|
this.animationStarting.emit({ id: info.id, animationPlayer: info.closeAnimationPlayer, animationType: 'close' });
|
|
14786
14786
|
info.event = event;
|
|
14787
|
-
this.removeModalClasses(info);
|
|
14788
14787
|
info.closeAnimationPlayer.play();
|
|
14789
14788
|
}
|
|
14790
14789
|
// TODO: check if applyAnimationParams will work with complex animations
|
|
@@ -39446,7 +39445,7 @@ class IgxGridExcelStyleFilteringComponent {
|
|
|
39446
39445
|
if (operand instanceof FilteringExpressionsTree) {
|
|
39447
39446
|
const columnExprTree = operand;
|
|
39448
39447
|
if (columnExprTree.fieldName === this.column.field) {
|
|
39449
|
-
|
|
39448
|
+
continue;
|
|
39450
39449
|
}
|
|
39451
39450
|
}
|
|
39452
39451
|
expressionsTree.filteringOperands.push(operand);
|
|
@@ -39857,12 +39856,9 @@ class IgxFilteringService {
|
|
|
39857
39856
|
const col = grid.getColumnByName(field);
|
|
39858
39857
|
const filteringIgnoreCase = ignoreCase || (col ? col.filteringIgnoreCase : false);
|
|
39859
39858
|
const filteringTree = grid.filteringExpressionsTree;
|
|
39860
|
-
const columnFilteringExpressionsTree =
|
|
39859
|
+
const columnFilteringExpressionsTree = filteringTree.find(field);
|
|
39861
39860
|
conditionOrExpressionTree = conditionOrExpressionTree !== null && conditionOrExpressionTree !== void 0 ? conditionOrExpressionTree : columnFilteringExpressionsTree;
|
|
39862
39861
|
const fieldFilterIndex = filteringTree.findIndex(field);
|
|
39863
|
-
if (fieldFilterIndex > -1) {
|
|
39864
|
-
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
|
|
39865
|
-
}
|
|
39866
39862
|
const newFilteringTree = this.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree, filteringIgnoreCase, fieldFilterIndex, true);
|
|
39867
39863
|
const eventArgs = { owner: grid,
|
|
39868
39864
|
filteringExpressions: newFilteringTree.find(field), cancel: false };
|
|
@@ -40167,40 +40163,34 @@ class IgxFilteringService {
|
|
|
40167
40163
|
grid.paginator.page = 0;
|
|
40168
40164
|
}
|
|
40169
40165
|
const fieldFilterIndex = filteringTree.findIndex(fieldName);
|
|
40170
|
-
if (fieldFilterIndex > -1) {
|
|
40171
|
-
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
|
|
40172
|
-
}
|
|
40173
40166
|
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
|
|
40174
40167
|
grid.filteringExpressionsTree = filteringTree;
|
|
40175
40168
|
}
|
|
40176
|
-
/** Modifies the filteringState object to contain the newly added
|
|
40169
|
+
/** Modifies the filteringState object to contain the newly added filtering conditions/expressions.
|
|
40177
40170
|
* If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),
|
|
40178
40171
|
* but a new object is created and returned.
|
|
40179
40172
|
*/
|
|
40180
40173
|
prepare_filtering_expression(filteringState, fieldName, searchVal, conditionOrExpressionsTree, ignoreCase, insertAtIndex = -1, createNewTree = false) {
|
|
40181
|
-
|
|
40182
|
-
const expressionsTree = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
|
|
40174
|
+
let expressionsTree = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
|
|
40183
40175
|
conditionOrExpressionsTree : null;
|
|
40184
40176
|
const condition = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
|
|
40185
40177
|
null : conditionOrExpressionsTree;
|
|
40186
|
-
|
|
40187
|
-
|
|
40188
|
-
new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName)
|
|
40189
|
-
|
|
40190
|
-
|
|
40191
|
-
|
|
40192
|
-
|
|
40193
|
-
|
|
40194
|
-
|
|
40195
|
-
|
|
40196
|
-
|
|
40197
|
-
|
|
40178
|
+
let newExpressionsTree = filteringState;
|
|
40179
|
+
if (createNewTree) {
|
|
40180
|
+
newExpressionsTree = new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName);
|
|
40181
|
+
newExpressionsTree.filteringOperands = [...filteringState.filteringOperands];
|
|
40182
|
+
}
|
|
40183
|
+
if (condition) {
|
|
40184
|
+
const newExpression = { fieldName, searchVal, condition, ignoreCase };
|
|
40185
|
+
expressionsTree = new FilteringExpressionsTree(filteringState.operator, fieldName);
|
|
40186
|
+
expressionsTree.filteringOperands.push(newExpression);
|
|
40187
|
+
}
|
|
40188
|
+
if (expressionsTree) {
|
|
40189
|
+
if (insertAtIndex > -1) {
|
|
40190
|
+
newExpressionsTree.filteringOperands[insertAtIndex] = expressionsTree;
|
|
40198
40191
|
}
|
|
40199
|
-
else
|
|
40200
|
-
|
|
40201
|
-
const newExprTree = new FilteringExpressionsTree(filteringState.operator, fieldName);
|
|
40202
|
-
newExprTree.filteringOperands.push(newExpression);
|
|
40203
|
-
newExpressionsTree.filteringOperands.push(newExprTree);
|
|
40192
|
+
else {
|
|
40193
|
+
newExpressionsTree.filteringOperands.push(expressionsTree);
|
|
40204
40194
|
}
|
|
40205
40195
|
}
|
|
40206
40196
|
return newExpressionsTree;
|
|
@@ -40213,7 +40203,7 @@ class IgxFilteringService {
|
|
|
40213
40203
|
const expressionsTree = expressions;
|
|
40214
40204
|
if (expressionsTree.operator === FilteringLogic.Or) {
|
|
40215
40205
|
const andOperatorsCount = this.getChildAndOperatorsCount(expressionsTree);
|
|
40216
|
-
// having more
|
|
40206
|
+
// having more than one 'And' operator in the sub-tree means that the filter could not be represented without parentheses.
|
|
40217
40207
|
return andOperatorsCount > 1;
|
|
40218
40208
|
}
|
|
40219
40209
|
let isComplex = false;
|
|
@@ -43009,9 +42999,7 @@ class IgxExcelStyleSearchComponent {
|
|
|
43009
42999
|
if (!this.searchValue) {
|
|
43010
43000
|
const anyFiltered = this.esf.listData.some(i => i.isFiltered);
|
|
43011
43001
|
const anyUnfiltered = this.esf.listData.some(i => !i.isFiltered);
|
|
43012
|
-
|
|
43013
|
-
searchAllBtn.indeterminate = true;
|
|
43014
|
-
}
|
|
43002
|
+
searchAllBtn.indeterminate = anyFiltered && anyUnfiltered;
|
|
43015
43003
|
this.esf.listData.forEach(i => i.isSelected = i.isFiltered);
|
|
43016
43004
|
this.displayedListData = this.esf.listData;
|
|
43017
43005
|
searchAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all;
|