@bizdoc/core 1.8.19 → 1.8.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/bizdoc-core.umd.js +180 -152
- package/bundles/bizdoc-core.umd.js.map +1 -1
- package/esm2015/lib/compose/trace/flow.component.js +5 -3
- package/esm2015/lib/compose/trace/trace.component.js +37 -30
- package/esm2015/lib/compose/trace/trace.pane.component.js +5 -1
- package/esm2015/lib/core/slots/slots.component.js +2 -1
- package/esm2015/lib/core/translate.service.js +5 -5
- package/esm2015/lib/dashboard/recents/recents.widget.js +20 -11
- package/fesm2015/bizdoc-core.js +79 -58
- package/fesm2015/bizdoc-core.js.map +1 -1
- package/lib/dashboard/recents/recents.widget.d.ts +1 -0
- package/package.json +1 -1
@@ -845,6 +845,7 @@ export class SlotsComponent {
|
|
845
845
|
const pane = this.panes[position];
|
846
846
|
yield this._dismiss(pane);
|
847
847
|
this._discardPane(pane);
|
848
|
+
this.collapse();
|
848
849
|
if (position >= this.selectedIndex)
|
849
850
|
this.select(-1);
|
850
851
|
this._replaceUrl();
|
@@ -1055,4 +1056,4 @@ function prepareRoutes(routes, treePath) {
|
|
1055
1056
|
}
|
1056
1057
|
return routes;
|
1057
1058
|
}
|
1058
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUd6SixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFlLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHek8sT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFnRCxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7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RUFBRSxRQUFpQjtJQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUVsRixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNuQixRQUFRO1lBQ1IsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRO2dCQUM5QixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDbkIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7aUJBQ2QsQ0FBQyxDQUFDO1NBQ047S0FDRjtJQUNELE9BQU8sTUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJpcHBsZUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUvcmlwcGxlJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNQcm9taXNlLCBpc1N0cmluZyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFBBTkVTX0RBVEEsIFBhbmVSZWYsIFBhbmVPcHRpb25zLCBRdWVyeVBhcmFtTmF2aWdhdGlvbiwgUGFyYW1OYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TZWxlY3RlZCwgUEFUSF9DSEFSLCBRVUVSWV9DSEFSLCBBUkdfQ0hBUiwgUEFORV9DSEFSLCBDb2xsYXBzZU5hdmlnYXRpb24sIEJhY2tOYXZpZ2F0aW9uIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi9wcm9tcHQuc2VydmljZSc7XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhuYW1lPzogc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfUk9VVEUgPSBbJ2Rhc2hib2FyZCddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wYW5lcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Nsb3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbG90cy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtwYW5lc0FuaW1hdGlvbixcclxuICAgIHBhbmVzVGl0bGVBbmltYXRpb24sXHJcbiAgICBwYW5lQW5pbWF0aW9uLFxyXG4gICAgcGFyYW1BbmltYXRpb24sXHJcbiAgICBxdWVyeUFuaW1hdGlvbixcclxuICAgIHRhYnNBbmltYXRpb24sXHJcbiAgICB0YWJBbmltYXRpb25cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbG90c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdwYW5pbmcnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBfcGFuZXNDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgLy9AVmlld0NoaWxkKCd0YWJzJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgX3RhYnNDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFiaW5nJykgX3RhYnNFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoQ2RrU2Nyb2xsYWJsZSwgeyBzdGF0aWM6IHRydWUgfSkgX3Njcm9sbGFibGU6IENka1Njcm9sbGFibGU7XHJcbiAgdGl0bGVBbmltYXRpb24gPSAwO1xyXG4gIGdyb3VwOiBzdHJpbmc7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuXHJcbiAgcmVhZG9ubHkgcGFuZXM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcmVhZG9ubHkgdGFiczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICBwcml2YXRlIF9zZWxlY3RlZFRhYkluZGV4ID0gLTE7XHJcbiAgcHVibGljIGdldCBzZWxlY3RlZFRhYkluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRUYWJJbmRleCh2YWx1ZSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJJbmRleCA9IHZhbHVlO1xyXG4gICAgdGhpcy5fc2V0VGFiQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldFRhYkFuaW1hdGlvbigpIHtcclxuICAgIHRoaXMudGFic0FuaW1hdGlvbiA9IHtcclxuICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgc3RhcnRXaWR0aDogdGhpcy5fdGFic0VsZW1lbnQgPyB0aGlzLl90YWJzRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDogMFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgbmV4dDogYm9vbGVhbjtcclxuICBwcmV2OiBib29sZWFuO1xyXG4gIGRyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlhbG9nOiBib29sZWFuO1xyXG4gIHRhYnNBbmltYXRpb246IHtcclxuICAgIHZhbHVlOiBudW1iZXIsXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgc3RhcnRXaWR0aDogbnVtYmVyXHJcbiAgICB9XHJcbiAgfTtcclxuICByZWFkb25seSByaXBwbGU6IFJpcHBsZUNvbmZpZyA9IHtcclxuICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICByYWRpdXM6IDI1XHJcbiAgfVxyXG4gIGFjY2VudDogc3RyaW5nID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICBwcml2YXRlIF9uYXZpZ2F0aW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3JlcG9zaXRvcnk6IEV4dGVuZGVkUm91dGVbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nID0gW10gYXMgc3RyaW5nW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRsID0gdGhpcy5fc2Vzc2lvbi5pbnZlcnNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQQU5FU19EQVRBKSBkYXRhOiBFeHRlbmRlZFJvdXRlW10sXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3RpdGxlOiBXaW5kb3dUaXRsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ndWlkZTogR3VpZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLmFjY2VudCA9IF9zZXNzaW9uLmdldEFjY2VudCgpKTtcclxuICAgIF9yb3V0ZXIuX2NvbW0kLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlKSB7XHJcbiAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcHJlcGFyZVJvdXRlcyhkYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQuXHJcbiAgICAgIHN1YnNjcmliZShhc3luYyBuID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbW1hbmRzLCBjb21wb25lbnQsIHRvZ2dsZSwgcGF0aE1vZGUsIHJlbGF0aXZlVG8gfSA9IG47XHJcbiAgICAgICAgbGV0IHtcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgaGVscCxcclxuICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICB9ID0gbjtcclxuICAgICAgICBsZXRcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsXHJcbiAgICAgICAgICBwYXJhbXM6IFBhcmFtTWFwLFxyXG4gICAgICAgICAgcGFyZW50OiBQYW5lUmVmLFxyXG4gICAgICAgICAgcGF0aDogc3RyaW5nLFxyXG4gICAgICAgICAgcm91dGU6IEV4dGVuZGVkUm91dGU7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcyAmJiBjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHBhdGggPSBuLmNvbW1hbmRzLmpvaW4oJy8nKTtcclxuICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YoUVVFUllfQ0hBUikgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBzZWdzWzFdO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcgfHwgJycpO1xyXG4gICAgICAgICAgICBwYXRoID0gc2Vnc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IG4ucXVlcnlQYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBhdGhNb2RlID09PSAncmVsYXRpdmUnIHx8IHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gcmVsYXRpdmVUbyB8fCB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRwYXRoID0gcGFyZW50LnBhdGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50cGF0aCA9IHBhcmVudHBhdGguc3Vic3RyKDAsIHBhcmVudHBhdGgubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXJlbnRwYXRoICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgICAgICAgaWYgKCFyb3V0ZSlcclxuICAgICAgICAgICAgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG4gICAgICAgICAgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSByb3V0ZS5wb2xpY3kgfHwgREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBpZiAoIWljb24pIGljb24gPSByb3V0ZS5pY29uO1xyXG4gICAgICAgICAgaWYgKCFoZWxwKSBoZWxwID0gcm91dGUuaGVscDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zKSBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LkNsZWFyKSA9PSBPcGVuUG9saWN5LkNsZWFyKVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbW1hbmRzKSB7XHJcbiAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gdGFiLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0b2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHRhYi5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgdGFiLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0b2dnbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdChpKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCB8fCByb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvdXRlICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSAocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiID9cclxuICAgICAgICAgICAgICB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA6IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSAhPSBPcGVuUG9saWN5LlRhYikgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZEluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgaWNvbiwgdGl0bGUsIGhlbHAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3ksIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgJiYgZS5zdGF0ZS5iaXpkb2MgPyBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBzdGF0ZS5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZS5sZW5ndGggPiAxKVxyXG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZShsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSksXHJcbiAgICAgICAgaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IGhpc3Rvcnkuc3RhdGUgOiB1bmRlZmluZWQpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5uZXh0KHtcclxuICAgICAgICBjb21tYW5kczogREVGQVVMVF9ST1VURSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2Rlc2VyaWFsaXplKHVybDogc3RyaW5nLCBzdGF0ZT86IEhpc3RvcnlTdGF0ZSkge1xyXG5cclxuICAgIGNvbnN0IHNlY3Rpb25zID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCkuc3BsaXQoUEFORV9DSEFSKSwgcGFuZXMgPSBkZXNlcmlhbGl6ZShzZWN0aW9uc1swXSksIHRhYnMgPSBzZWN0aW9ucy5sZW5ndGggPiAxID8gZGVzZXJpYWxpemUoc2VjdGlvbnNbMV0pIDogW107XHJcblxyXG4gICAgZnVuY3Rpb24gZGVzZXJpYWxpemUocGF0aDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLlxyXG4gICAgICAgIHNwbGl0KFBBVEhfQ0hBUikubWFwKHMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgW3BhdGgsIHF1ZXJ5U3RyaW5nXSA9IHMuc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICByZXR1cm4geyBwYXRoLCBxdWVyeVN0cmluZyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSBwYW5lc1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVQYW5lKGksIHBhbmUucGF0aCwgcGFuZS5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS5wYW5lc1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gcGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICBpZiAocGFuZXMubGVuZ3RoIC0gMSA8IGkgfHwgcGFuZS5wYXRoICE9PSBwYW5lc1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA8IDApXHJcbiAgICAgIHRoaXMuc2VsZWN0KDApO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0YWJzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVRhYihpLCB0YWIucGF0aCwgdGFiLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnRhYnNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gdGFicy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCAtIDEgPCBpIHx8IHRhYi5wYXRoICE9PSB0YWJzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgIHBhbmUuZnVsbHNjcmVlbiAhPT0gKG4gPT09IDEpICYmXHJcbiAgICAgICAgcGFuZS5fZnVsbHNjcmVlbiQubmV4dChuID09PSAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcXVlcnlTdHJpbmdcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZVBhbmUoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBhbmUucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgcGFuZSwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZEFuY2VzdG9yKHJvdXRlLCBwYXRoKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFBhbmUocm91dGUuY29tcG9uZW50LCB7XHJcbiAgICAgIHBhdGgsIHBhcmVudCwgcm91dGUsIGRhdGE6IHN0YXRlLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSxcclxuICAgICAgZm9jdXM6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVUYWIoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyh0YWIucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgdGhpcy5faW5zZXJ0VGFiKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSB8IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLFxyXG4gICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgZm9jdXM6IGZhbHNlLFxyXG4gICAgICBzd2FwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbmRBbmNlc3Rvcihyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBpZiAoKHJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudClcclxuICAgICAgcmV0dXJuIHRoaXMucGFuZXMuZmluZChwID0+IChwLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpID09PVxyXG4gICAgICAgIChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgJiZcclxuICAgICAgICBwYXRoLnN0YXJ0c1dpdGgocC5wYXRoKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9uYXZRdWVyeVBhcmFtcyhwYW5lOiBQYW5lUmVmPGFueT4sIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgcGFuZS5fZGF0YSQubmV4dCh7IC4uLnBhbmUuZGF0YSwgLi4uZGF0YSB9KTtcclxuICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBRdWVyeVBhcmFtTmF2aWdhdGlvbihxdWVyeVBhcmFtcywgcGFuZSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdlBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8YW55PiwgcGFyYW1zOiBQYXJhbU1hcCwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIGlmIChwYW5lLnJvdXRlLmNhbkRpc21pc3MpXHJcbiAgICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3BhdGggPSBwYXRoO1xyXG4gICAgcGFuZS5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMpIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dCh7fSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgUGFyYW1OYXZpZ2F0aW9uKHBhcmFtcywgcGFuZSkpO1xyXG5cclxuICAgIHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgIGlmIChjaGlsZC5yb3V0ZSAmJiAoY2hpbGQucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ID09PSBwYW5lLnJvdXRlKSB7XHJcbiAgICAgICAgY2hpbGQuX2RhdGEkLm5leHQoT2JqZWN0LmFzc2lnbihjaGlsZC5kYXRhLCBzdGF0ZSkpO1xyXG4gICAgICAgIGNoaWxkLl9wYXJhbXMkLm5leHQocGFyYW1zKTtcclxuICAgICAgICBjaGlsZC5fcGF0aCA9IHBhbmUucGF0aCArICcvJyArIGNoaWxkLnJvdXRlLnBhdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA+IC0xICYmIGNoaWxkID09PSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICAgICAgdGhpcy5ncm91cCA9IGNoaWxkLmdyb3VwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAocGFuZS5tb2RlID09PSAncGFuZScpIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfcmVwbGFjZVVybCgpIHtcclxuICAgIGxldCBwYXRoID0gdGhpcy5wYW5lcy5maWx0ZXIocCA9PiBwLnJvdXRlKS5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aClcclxuICAgICAgcGF0aCArPSBQQU5FX0NIQVIgKyB0aGlzLnRhYnMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgY29uc3Qgc3RlcCA9IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMTtcclxuICAgIHRoaXMuX25hdmlnYXRpbmcgPSB0cnVlO1xyXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoe1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXAsXHJcbiAgICAgIHNlbGVjdGVkVGFiSW5kZXg6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFuZXM6IHRoaXMucGFuZXMubWFwKHAgPT4gcC5kYXRhKSxcclxuICAgICAgdGFiczogdGhpcy50YWJzLm1hcCh0ID0+IHQuZGF0YSksXHJcbiAgICAgIHN3YXA6IHRoaXMuc3dhcCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZSwgJycsICcvJyArIHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9uYXZpZ2F0aW5nID0gZmFsc2UsIDIwMCk7XHJcbiAgfVxyXG4gIGRyb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW2V2dC5wcmV2aW91c0luZGV4XTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5wcmV2aW91c0luZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5jdXJyZW50SW5kZXgsIDAsIHBhbmUpO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGlubmVkKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgcGFuZS5waW5uZWQgPSAhcGFuZS5waW5uZWQ7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIGlmIChzLmRlY2VuZGVudE9mKHBhbmUpKSBzLnBpbm5lZCA9IHBhbmUucGlubmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9xdWVyeVN0cmluZyhxdWVyeVBhcmFtczogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpO1xyXG4gICAgbGV0IHF1ZXJ5U3RyaW5nOiBzdHJpbmc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB2YWwgPSBxdWVyeVBhcmFtc1tuYW1lc1tpXV07XHJcblxyXG4gICAgICBpZiAodmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCFxdWVyeVN0cmluZykgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBlbHNlIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKyBBUkdfQ0hBUjtcclxuXHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsKX1gO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHZhbC5tYXAodiA9PiBgJHtuYW1lc1tpXX09JHt2fWApLmpvaW4oQVJHX0NIQVIpO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzRGF0ZSh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7dmFsLnRvSlNPTigpfWA7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7dmFsfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeVN0cmluZztcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZzogc3RyaW5nKTogUGFyYW1NYXAge1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgIHF1ZXJ5U3RyaW5nICYmIHF1ZXJ5U3RyaW5nLlxyXG4gICAgICBzcGxpdChBUkdfQ0hBUikuZm9yRWFjaChwID0+IHtcclxuICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gcC5zcGxpdCgnPScpO1xyXG4gICAgICAgIGlmICghcXVlcnlQYXJhbXNbbmFtZV0pXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgdmFscyA9IHF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSBpc0FycmF5KHZhbHMpID8gWy4uLnZhbHMsIHZhbHVlXSA6IFt2YWxzLCB2YWx1ZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKi9cclxuICBwcml2YXRlIF9wYXJhbXMocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgY29uc3QgZXggPSByb3V0ZS5yZWdFeC5leGVjKHBhdGgpLFxyXG4gICAgICBwYXJhbXMgPSBleC5ncm91cHM7XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcyB8fCB7fTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX21hdGNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcm91dGUgPSB0aGlzLl9yZXBvc2l0b3J5LmZpbmQociA9PiByLnJlZ0V4LnRlc3QodXJsKSk7XHJcbiAgICBpZiAocm91dGUpXHJcbiAgICAgIHdoaWxlIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICAgIGxldCBjaGlsZCA9IHJvdXRlLmNoaWxkcmVuLmZpbmQociA9PiByLnJlZ0V4LnRlc3QodXJsKSk7XHJcbiAgICAgICAgaWYgKGNoaWxkKVxyXG4gICAgICAgICAgcm91dGUgPSBjaGlsZDtcclxuICAgICAgICBlbHNlIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICByZXR1cm4gcm91dGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhdGUocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGlmICh0aGlzLl9wZW5kaW5nLmluZGV4T2YocGF0aCkgPiAtMSkge1xyXG4gICAgICAvL3RoaXMuX3BzLnRvYXN0KCdXb3JraW5nJyk7XHJcbiAgICAgIHRocm93ICdhbHJlYWR5IHByb2Nlc3NpbmcnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5wdXNoKHBhdGgpO1xyXG5cclxuICAgIGNvbnN0IHsgcGFyZW50LCByZXNvbHZlIH0gPSByb3V0ZTtcclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuICAgIGlmIChyZXNvbHZlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucmVtb3ZlKHBhdGgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3BhcmVudHN0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgICAgYXdhaXQgdGhpcy5fcGFyZW50c3RhdGUocGFyZW50LCBwYXRoLCBwYXJhbXMsIGRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzLmZpbmQocyA9PiBzLnJvdXRlICYmIHMucm91dGUgPT09IHJvdXRlXHJcbiAgICAgICYmIHBhdGguc3RhcnRzV2l0aChzLnBhdGgpKTtcclxuXHJcbiAgICBwYW5lICYmIE9iamVjdC5hc3NpZ24oZGF0YSwgcGFuZS5kYXRhKTtcclxuXHJcbiAgICBpZiAocmVzb2x2ZSlcclxuICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZShyZXNvbHZlLCBwYXJhbXMsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVzb2x2ZShyZXNvbHZlOiB7IFtrZXk6IHN0cmluZ106IENvbXBvbmVudFR5cGU8UGFuZVJlc29sdmU8YW55Pj4gfSwgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXNvbHZlKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQga2V5ID0ga2V5c1tpXTtcclxuICAgICAgaWYgKCFkYXRhW2tleV0pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuX2luamVjdG9yLmdldChyZXNvbHZlW2tleV0pIGFzIFBhbmVSZXNvbHZlPGFueT47XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnN0YW5jZS5vblJlc29sdmUocGFyYW1zKTtcclxuICAgICAgICBpZiAoaXNQcm9taXNlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnRoZW4ociA9PiBkYXRhW2tleV0gPSByKTtcclxuICAgICAgICBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKVxyXG4gICAgICAgICAgYXdhaXQgdmFsdWUucGlwZSh0YXAociA9PiBkYXRhW2tleV0gPSByKSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZDxUPihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0KHRoaXMucGFuZXMubGVuZ3RoLCBjb21wb25lbnQsIG9wdGlvbnMpO1xyXG4gIH1cclxuICBpbnNlcnQ8VD4ocG9zaXRpb246IG51bWJlciwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9pbnNlcnRQYW5lPFQ+KGNvbXBvbmVudCwgb3B0aW9ucyB8fCB7fSwgcG9zaXRpb24pO1xyXG4gICAgcGFuZS5fZnVsbHNjcmVlbiQubmV4dCh0aGlzLnBhbmVzLmxlbmd0aCA9PT0gMSk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGZvY3VzPzogYm9vbGVhblxyXG4gIH0sIHBvc2l0aW9uPzogbnVtYmVyKSB7XHJcbiAgICAvL3RoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW10pLmNyZWF0ZShlbGVtZW50LCB7IHBhcmFtczoge30gfSkucGxheSgpO1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2NvbnN0cmFjdDxUPihjb21wb25lbnQsICdwYW5lJywgb3B0aW9ucyk7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZClcclxuICAgICAgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIHRoaXMucGFuZXMucHVzaChwYW5lKTtcclxuICAgIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uU3RhcnQocGFuZSkpO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgICB0aGlzLl9yb3V0ZXIuX2FjdGl2ZSA9IHBhbmU7XHJcbiAgICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSkgdGhpcy5zY3JvbGxUbyhwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLm5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9jb25zdHJhY3Q8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LFxyXG4gICAgbW9kZTogJ3RhYicgfCAncGFuZScsXHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIGRpYWxvZz86IGJvb2xlYW47XHJcbiAgICAgIHBhdGg/OiBzdHJpbmc7IHJvdXRlPzogUGFuZVJvdXRlOyBpY29uPzogc3RyaW5nOyB0aXRsZT86IHN0cmluZztcclxuICAgICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICB9KSB7XHJcbiAgICBjb25zdCBwYW5lID0gbmV3IFBhbmVSZWY8VD4oY29tcG9uZW50LCBtb2RlLCBvcHRpb25zKTtcclxuICAgIHBhbmUuX2luamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFtcclxuICAgICAgeyBwcm92aWRlOiBQYW5lUmVmLCB1c2VWYWx1ZTogcGFuZSB9XHJcbiAgICBdLCB0aGlzLl9pbmplY3Rvcik7XHJcbiAgICBwYW5lLl9jb21tJC5zdWJzY3JpYmUoZSA9PiB0aGlzLl9hY3Rpb248VD4oZSwgcGFuZSkpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBzd2FwPzogYm9vbGVhbjtcclxuICAgIGZvY3VzPzogYm9vbGVhbjtcclxuICB9KSB7XHJcbiAgICBjb25zdCB7IHBvbGljeSB9ID0gb3B0aW9ucyxcclxuICAgICAgZGlhbG9nID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlhbG9nKSA9PSBPcGVuUG9saWN5LkRpYWxvZztcclxuXHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LFxyXG4gICAgICAndGFiJywge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBkaWFsb2dcclxuICAgIH0pO1xyXG4gICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIHRoaXMuZGlhbG9nID0gZGlhbG9nO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydCh0YWIpKTtcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0YWIuZ3JvdXAgJiYgb3B0aW9ucy5zd2FwICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgaSA9IDAsIHN3YXAgPSBmYWxzZTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYnNbaV0uZ3JvdXAgIT09IHRhYi5ncm91cCkge1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy50YWJzW2ldKTtcclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBzd2FwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrXHJcbiAgICAgIH0gd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gdGhpcy5ncm91cDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIHRhYjtcclxuICB9XHJcblxyXG4gIGd1aWRlKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZ3VpZGUuc3RhcnQobmFtZSk7XHJcbiAgfVxyXG4gIGJhY2soKSB7XHJcbiAgICB0aGlzLl9iYWNrKHRoaXMuc3dhcCk7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9iYWNrKHN0ZXBzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBCYWNrTmF2aWdhdGlvbigpKTtcclxuICAgIGhpc3RvcnkuZ28oc3RlcHMgLSAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXApO1xyXG4gIH1cclxuICB0YWJCYWNrKCkge1xyXG4gICAgdGhpcy5fYmFjayh0aGlzLnN3YXBUYWIpO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uPFQgPSBhbnk+KGU6IHN0cmluZywgcGFuZTogUGFuZVJlZjxUPikge1xyXG4gICAgc3dpdGNoIChlKSB7XHJcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cyhpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBhbmQnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRUYWIoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFBhbmUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVmcmVzaCc6IHtcclxuICAgICAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IHBhbiA9IHBhbmVzW2ldO1xyXG4gICAgICAgICAgaWYgKHBhbi5kZWNlbmRlbnRPZihwYW5lKSlcclxuICAgICAgICAgICAgcGFuLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24ocGFuLmRhdGEsIHBhbmUuZGF0YSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZXNjYXBlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIGNvbGxhcHNlKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCh0ID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHQpKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICB0aGlzLmRpYWxvZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IENvbGxhcHNlTmF2aWdhdGlvbigpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVzaXplKCkge1xyXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XHJcbiAgfVxyXG4gIGNsb3NlVGFiKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1twb3NpdGlvbl07XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gcG9zaXRpb24gPiAwID8gcG9zaXRpb24gLSAxIDogMCA6IC0xO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gIH1cclxuICBleHBhbmRQYW5lKCkge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBkbyB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzW2ldICE9PSBwYW5lKSB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy5wYW5lc1tpXSk7XHJcbiAgICAgICAgdGhpcy5wYW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2dldEhpc3RvcnlTdGVwKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IChoaXN0b3J5LnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSkuc3RlcCA6IDA7XHJcbiAgfVxyXG5cclxuICBleHBhbmRUYWIoKSB7XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+XHJcbiAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHApXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF07XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCwgdGFiKTtcclxuICAgIHRhYi5fbW9kZSQubmV4dCgncGFuZScpO1xyXG4gICAgdGFiLl9mdWxsc2NyZWVuJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IDAgOiAtMTtcclxuICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBwb3NpdGlvbikgcmV0dXJuO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICBlbHNlIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TZWxlY3RlZChwYW5lKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2FjdGl2ZSA9IHBhbmU7XHJcbiAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHJlbW92ZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIHRoaXMuX2Rpc2NhcmRQYW5lKHBhbmUpO1xyXG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgdGhpcy5zZWxlY3QoLTEpO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLmZvckVhY2gocyA9PiB0aGlzLl9kaXNjYXJkUGFuZShzKSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXIoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKCk7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2gocCA9PlxyXG4gICAgICB0aGlzLl9kZXN0cm95UGFuZShwKVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3BlbmRpbmcuc3BsaWNlKDAsIHRoaXMuX3BlbmRpbmcubGVuZ3RoKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3NBbGwoKSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaylcclxuICAgICAgICB0aHJvdyAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzbWlzc2FibGUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCB7IGluc3RhbmNlLCByb3V0ZTogeyBjYW5EaXNtaXNzIH0gfSA9IHBhbmU7XHJcbiAgICBjb25zdCBkaXNtaXNzYWJsZSA9IHRoaXMuX2luamVjdG9yLmdldChjYW5EaXNtaXNzKSBhcyBDYW5EaXNtaXNzPGFueT47XHJcbiAgICBjb25zdCBvayA9IGRpc21pc3NhYmxlLm9uRGlzbWlzcyhpbnN0YW5jZSk7XHJcbiAgICBpZiAoaXNCb29sZWFuKG9rKSlcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvayk7XHJcbiAgICBlbHNlIGlmIChpc1Byb21pc2Uob2spKVxyXG4gICAgICByZXR1cm4gb2s7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBvay50b1Byb21pc2UoKTtcclxuICB9XHJcbiAgc2Nyb2xsVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaXRlbSAmJiBpdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBpbmxpbmU6ICdlbmQnLCBibG9jazogJ2VuZCcgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBfY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYW5lLWNvbnRlbnQnKTtcclxuICB9XHJcbiAgZG9uZSgpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgfVxyXG4gIG5hdmlnYXRpb25BcnJvd3MoZXZ0PzogRXZlbnQpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMubmV4dCA9IHRoaXMuX3J0bCA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIGNvbnRhaW5lci5zY3JvbGxMZWZ0IDwgY29udGFpbmVyLnNjcm9sbFdpZHRoIDpcclxuICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKyBjb250YWluZXIuY2xpZW50V2lkdGggPCBjb250YWluZXIuc2Nyb2xsV2lkdGg7XHJcbiAgICB0aGlzLnByZXYgPSB0aGlzLl9ydGwgPyBjb250YWluZXIuc2Nyb2xsTGVmdCA8IDAgOiBjb250YWluZXIuc2Nyb2xsTGVmdCA+IDA7XHJcbiAgfVxyXG4gIHNjcm9sbEJ5KG46IG51bWJlcikge1xyXG4gICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50O1xyXG4gICAgbmF0aXZlRWxlbWVudC5zY3JvbGxCeSh7IGJlaGF2aW9yOiAnc21vb3RoJywgbGVmdDogbiAqICh0aGlzLl9ydGwgPyAtMSA6IDEpIH0pO1xyXG4gIH1cclxuICBmb2N1cyhpbmRleCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGVsLmZvY3VzKCk7XHJcbiAgfVxyXG4gIG9uUmVzaXplKHBhbmU6IFBhbmVSZWY8YW55PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3QgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAtMSA6IDE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZDtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aFxyXG4gICAgICAgID0gTWF0aC5tYXgod2lkdGggKyBkZWx0YSwgMzUwKSArICdweCc7XHJcbiAgICAgIHBhbmUgJiYgcGFuZS5fcmVzaXplJC5uZXh0KHt9IGFzIGFueSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uVGFiUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3RcclxuICAgICAgbWUgPSB0aGlzLFxyXG4gICAgICAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IDEgOiAtMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1lLm5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgICAgLy90aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIC8vIHByZXZlbnQgbmVnYXRpdmUtc2l6ZWQgZWxlbWVudHNcclxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLm1heCgoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkLCAtd2lkdGgpO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoID0gKHdpZHRoICsgZGVsdGEpICsgJ3B4JztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RhYnMnLCBlbC5zdHlsZS53aWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lQYW5lKHBhbmU6IFBhbmVSZWYpIHtcclxuICAgIHBhbmUuX2Rlc3Ryb3koKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uRW5kKHBhbmUpKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBTkVfUEFSQU1TX1JFR0VYID0gLyg6W1xcd1xcLV0rKS9nO1xyXG5cclxuZnVuY3Rpb24gcHJlcGFyZVJvdXRlcyhyb3V0ZXM6IFBhbmVSb3V0ZVtdLCB0cmVlUGF0aD86IHN0cmluZyk6IEV4dGVuZGVkUm91dGVbXSB7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxldCByb3V0ZSA9IHJvdXRlc1tpXSwgZnVsbFBhdGggPSAodHJlZVBhdGggPyAodHJlZVBhdGggKyAnLycpIDogJycpICsgcm91dGUucGF0aDtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHJvdXRlLCB7XHJcbiAgICAgIGZ1bGxQYXRoLFxyXG4gICAgICByZWdFeDogbmV3IFJlZ0V4cCgnXicgKyBmdWxsUGF0aC5cclxuICAgICAgICByZXBsYWNlKCcvJywgJ1xcXFwvJykuXHJcbiAgICAgICAgcmVwbGFjZShQQU5FX1BBUkFNU19SRUdFWCwgZSA9PiBgKD88JHtlLnN1YnN0cigxKX0+W1xcXFx3XFxcXC1dKilgKSlcclxuICAgIH0pO1xyXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZHJlbiA9IHByZXBhcmVSb3V0ZXMocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKylcclxuICAgICAgICBPYmplY3QuYXNzaWduKGNoaWxkcmVuW2pdLCB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3V0ZXMgYXMgRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXh0ZW5kZWRSb3V0ZSBleHRlbmRzIFBhbmVSb3V0ZSB7XHJcbiAgZnVsbFBhdGg6IHN0cmluZztcclxuICByZWdFeDogUmVnRXhwO1xyXG4gIHBhcmVudD86IEV4dGVuZGVkUm91dGU7XHJcbiAgY2hpbGRyZW4/OiBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XHJcbiAgYml6ZG9jOiB0cnVlO1xyXG4gIHN0ZXA6IG51bWJlcjtcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG4gIHBhbmVzOiBhbnlbXTtcclxuICB0YWJzOiBhbnlbXTtcclxuICBzZWxlY3RlZFRhYkluZGV4PzogbnVtYmVyO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYW5lc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiIFtzdHlsZS5kaXNwbGF5XT1cImRpYWxvZyA/ICcnIDogJ25vbmUnXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxCeSgtNDAwKVwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDb2xvcl09XCJhY2NlbnRcIlxyXG4gICAgICAgKm5nSWY9XCJwcmV2XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIj5cclxuICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgIDwvaT5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZXMtdGl0bGVcIiBbQHRpdGxlXT1cInRpdGxlQW5pbWF0aW9uXCI+XHJcbiAgICA8aDE+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJiYWNrKClcIiAqbmdJZj1cInN3YXBcIiBbYml6ZG9jVG9vbHRpcF09XCInQmFjayd8dHJhbnNsYXRlXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2NpcmNsZV9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCIgKm5nSWY9XCIhZmlyc3RcIj5hcnJvd19mb3J3YXJkX2lvczwvbWF0LWljb24+XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZShwYW5lc1swXS5ndWlkZSlcIiAqbmdJZj1cInBhbmVzWzBdPy5ndWlkZVwiIFtiaXpkb2NUb29sdGlwXT1cIidIZWxwJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+aGVscDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8Yml6ZG9jLXF1aWNrdG9vbHM+PC9iaXpkb2MtcXVpY2t0b29scz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNwYW5pbmcgY2xhc3M9XCJwYW5lcy1jb250YWluZXJcIlxyXG4gICAgICAgY2RrU2Nyb2xsYWJsZVxyXG4gICAgICAgQHBhbmVzXHJcbiAgICAgICAoc2Nyb2xsKT1cIm5hdmlnYXRpb25BcnJvd3MoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8ZGl2IChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXggIT09IGkgJiYgIWRyYWdnaW5nICYmIHNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEluZGV4ID09PSBpXCIgY2xhc3M9XCJwYW5lLWNvbnRlbnRcIiBAcGFuZT5cclxuICAgICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwicC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwicC5pbmplY3RvclwiIChjcmVhdGUpPVwicC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmUtc2VwYXJhdG9yXCIgKm5nSWY9XCJpIDwgcGFuZXMubGVuZ3RoIC0gMVwiIChtb3VzZWRvd24pPVwib25SZXNpemUocCwgJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1hcnJvdyBmb3J3YXJkXCJcclxuICAgICAgICpuZ0lmPVwibmV4dFwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCIgbWF0UmlwcGxlIFttYXRSaXBwbGVVbmJvdW5kZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCIgW21hdFJpcHBsZVJhZGl1c109XCIzMFwiIFttYXRSaXBwbGVDb2xvcl09XCJhY2NlbnRcIlxyXG4gICAgICAgKGNsaWNrKT1cInNjcm9sbEJ5KDQwMClcIj5cclxuICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgIDwvaT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJzLmxlbmd0aFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJzLXNlcGFyYXRvclwiIChtb3VzZWRvd24pPVwib25UYWJSZXNpemUoJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoxOCB0YWJzXCIgW0B0YWJzXT1cInRhYnNBbmltYXRpb25cIiAoQHRhYnMuZG9uZSk9XCJkb25lKClcIiAjdGFiaW5nPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyB0YWJzLXRpdGxlXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0YWJCYWNrKClcIiAqbmdJZj1cInN3YXBUYWJcIiBbYml6ZG9jVG9vbHRpcF09XCJwcmV2R3JvdXAgfHwgKCdCYWNrJ3x0cmFuc2xhdGUpXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2JhY2s8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8aDI+e3tncm91cH19PC9oMj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImV4cGFuZFRhYigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0V4cGFuZCd8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBpbmxpbmU9XCJ0cnVlXCIgY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+b3Blbl9pbl9mdWxsPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIGJpemRvY1Rvb2x0aXA9XCJFc2NcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmF2IG1hdC10YWItbmF2LWJhciBjb2xvcj1cImFjY2VudFwiIFtkaXNhYmxlUGFnaW5hdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDxhIG1hdC10YWItbGluayAqbmdGb3I9XCJsZXQgcCBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJtYXQtdGFiLWxpbmtcIlxyXG4gICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRUYWJJbmRleCA9IGlcIlxyXG4gICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGlcIj5cclxuICAgICAgICA8bWF0LWljb24gW21hdEJhZGdlXT1cInAuYmFkZ2VcIiBbbWF0QmFkZ2VIaWRkZW5dPVwiIXAuYmFkZ2VcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj57e3AuaWNvbn19PC9tYXQtaWNvbj4mbmJzcDtcclxuICAgICAgICB7e3AudGl0bGV9fVxyXG4gICAgICA8L2E+XHJcbiAgICA8L25hdj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIFtzdHlsZS5kaXNwbGF5XT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGkgPyAnJzogJ25vbmUnXCIgY2xhc3M9XCJ0YWJcIiBbQHRhYl09XCJzZWxlY3RlZFRhYkluZGV4XCI+XHJcbiAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJ0LmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJ0LmluamVjdG9yXCIgKGNyZWF0ZSk9XCJ0Ll9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|
1059
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUd6SixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFlLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHek8sT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFnRCxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7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QUFDO0FBRXhDLFNBQVMsYUFBYSxDQUFDLE1BQW1CLEVBQUUsUUFBaUI7SUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbkIsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUTtnQkFDOUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUMsQ0FBQztTQUNOO0tBQ0Y7SUFDRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSaXBwbGVDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlL3JpcHBsZSc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzUHJvbWlzZSwgaXNTdHJpbmcgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBQQU5FU19EQVRBLCBQYW5lUmVmLCBQYW5lT3B0aW9ucywgUXVlcnlQYXJhbU5hdmlnYXRpb24sIFBhcmFtTmF2aWdhdGlvbiwgTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU2VsZWN0ZWQsIFBBVEhfQ0hBUiwgUVVFUllfQ0hBUiwgQVJHX0NIQVIsIFBBTkVfQ0hBUiwgQ29sbGFwc2VOYXZpZ2F0aW9uLCBCYWNrTmF2aWdhdGlvbiB9IGZyb20gJy4vcGFuZS1yZWYnO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gJy4vcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENka1Njcm9sbGFibGUsIENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFdpbmRvd1RpdGxlU2VydmljZSB9IGZyb20gJy4uL3dpbmRvdy10aXRsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgcGFuZXNBbmltYXRpb24sIHBhbmVBbmltYXRpb24sIHBhbmVzVGl0bGVBbmltYXRpb24sIHBhcmFtQW5pbWF0aW9uLCBxdWVyeUFuaW1hdGlvbiwgdGFiQW5pbWF0aW9uLCB0YWJzQW5pbWF0aW9uIH0gZnJvbSAnLi4vYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFBhbmVSZXNvbHZlLCBQYW5lUm91dGUsIFBhcmFtTWFwLCBDYW5EaXNtaXNzLCBERUZBVUxUX1BPTElDWSwgT3BlblBvbGljeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBHdWlkZVNlcnZpY2UgfSBmcm9tICcuLi9ndWlkZS9ndWlkZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvbXB0LnNlcnZpY2UnO1xyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMobmFtZT86IHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1JPVVRFID0gWydkYXNoYm9hcmQnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtcGFuZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgncGFuaW5nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgX3BhbmVzQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIC8vQFZpZXdDaGlsZCgndGFicycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF90YWJzQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmluZycpIF90YWJzRWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKENka1Njcm9sbGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIF9zY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlO1xyXG4gIHRpdGxlQW5pbWF0aW9uID0gMDtcclxuICBncm91cDogc3RyaW5nO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcblxyXG4gIHJlYWRvbmx5IHBhbmVzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IHRhYnM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWUpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcclxuICAgIHRoaXMuX3NldFRhYkFuaW1hdGlvbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRUYWJBbmltYXRpb24oKSB7XHJcbiAgICB0aGlzLnRhYnNBbmltYXRpb24gPSB7XHJcbiAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuX3RhYnNFbGVtZW50ID8gdGhpcy5fdGFic0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA6IDBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gIG5leHQ6IGJvb2xlYW47XHJcbiAgcHJldjogYm9vbGVhbjtcclxuICBkcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxvZzogYm9vbGVhbjtcclxuICB0YWJzQW5pbWF0aW9uOiB7XHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgIHN0YXJ0V2lkdGg6IG51bWJlclxyXG4gICAgfVxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcmlwcGxlOiBSaXBwbGVDb25maWcgPSB7XHJcbiAgICBjb2xvcjogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKSxcclxuICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgcmFkaXVzOiAyNVxyXG4gIH1cclxuICBhY2NlbnQ6IHN0cmluZyA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgcHJpdmF0ZSBfbmF2aWdhdGluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXBvc2l0b3J5OiBFeHRlbmRlZFJvdXRlW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUEFORVNfREFUQSkgZGF0YTogRXh0ZW5kZWRSb3V0ZVtdLFxyXG4gICAgcHJpdmF0ZSBfcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF90aXRsZTogV2luZG93VGl0bGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ3VpZGU6IEd1aWRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4gdGhpcy5hY2NlbnQgPSBfc2Vzc2lvbi5nZXRBY2NlbnQoKSk7XHJcbiAgICBfcm91dGVyLl9jb21tJC5cclxuICAgICAgc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoZSkge1xyXG4gICAgICAgICAgY2FzZSAnY29sbGFwc2UnOlxyXG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5fcmVwb3NpdG9yeSA9IHByZXBhcmVSb3V0ZXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JvdXRlci5fbmF2aWdhdGUkLlxyXG4gICAgICBzdWJzY3JpYmUoYXN5bmMgbiA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBjb21tYW5kcywgY29tcG9uZW50LCB0b2dnbGUsIHBhdGhNb2RlLCByZWxhdGl2ZVRvIH0gPSBuO1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgfSA9IG47XHJcbiAgICAgICAgbGV0XHJcbiAgICAgICAgICBxdWVyeVN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgcGFyYW1zOiBQYXJhbU1hcCxcclxuICAgICAgICAgIHBhcmVudDogUGFuZVJlZixcclxuICAgICAgICAgIHBhdGg6IHN0cmluZyxcclxuICAgICAgICAgIHJvdXRlOiBFeHRlbmRlZFJvdXRlO1xyXG5cclxuICAgICAgICBpZiAoY29tbWFuZHMgJiYgY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBwYXRoID0gbi5jb21tYW5kcy5qb2luKCcvJyk7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFFVRVJZX0NIQVIpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gc2Vnc1sxXTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcclxuICAgICAgICAgICAgcGF0aCA9IHNlZ3NbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBuLnF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXRoTW9kZSA9PT0gJ3JlbGF0aXZlJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHJlbGF0aXZlVG8gfHwgdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50cGF0aCA9IHBhcmVudC5wYXRoO1xyXG4gICAgICAgICAgICB3aGlsZSAocGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICAgIHBhcmVudHBhdGggPSBwYXJlbnRwYXRoLnN1YnN0cigwLCBwYXJlbnRwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXRoID0gcGFyZW50cGF0aCArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmICghcm91dGUpXHJcbiAgICAgICAgICAgIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gcm91dGUucG9saWN5IHx8IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFpY29uKSBpY29uID0gcm91dGUuaWNvbjtcclxuICAgICAgICAgIGlmICghaGVscCkgaGVscCA9IHJvdXRlLmhlbHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFxdWVyeVBhcmFtcykgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5DbGVhcikgPT0gT3BlblBvbGljeS5DbGVhcilcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcykge1xyXG4gICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSAmJiB0YWIuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHRhYiwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodGFiLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSBwYW5lLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBwYW5lLl9mdWxsc2NyZWVuJC5uZXh0KHRoaXMucGFuZXMubGVuZ3RoID09PSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3V0ZSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYiA/XHJcbiAgICAgICAgICAgICAgdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gOiB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcG9saWN5LCBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYW5lLl9mdWxsc2NyZWVuJC5uZXh0KHRoaXMucGFuZXMubGVuZ3RoID09PSAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgd2luZG93LnJlbW92ZUFsbExpc3RlbmVycygncG9wc3RhdGUnKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGUgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fbmF2aWdhdGluZykge1xyXG4gICAgICAgIHRoaXMuX25hdmlnYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc3RhdGUgPSBlLnN0YXRlICYmIGUuc3RhdGUuYml6ZG9jID8gZS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSwgc3RhdGUpO1xyXG4gICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICB0aGlzLnN3YXAgPSBzdGF0ZS5zd2FwO1xyXG4gICAgICAgIHRoaXMuc3dhcFRhYiA9IHN0YXRlLnN3YXBUYWI7XHJcbiAgICAgICAgdGhpcy5wcmV2R3JvdXAgPSBzdGF0ZS5wcmV2R3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kZXNlcmlhbGl6ZSh1cmw6IHN0cmluZywgc3RhdGU/OiBIaXN0b3J5U3RhdGUpIHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLnNwbGl0KFBBTkVfQ0hBUiksIHBhbmVzID0gZGVzZXJpYWxpemUoc2VjdGlvbnNbMF0pLCB0YWJzID0gc2VjdGlvbnMubGVuZ3RoID4gMSA/IGRlc2VyaWFsaXplKHNlY3Rpb25zWzFdKSA6IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKHBhdGg6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gcGF0aC5cclxuICAgICAgICBzcGxpdChQQVRIX0NIQVIpLm1hcChzID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeVN0cmluZ10gPSBzLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aCwgcXVlcnlTdHJpbmcgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gcGFuZXNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlUGFuZShpLCBwYW5lLnBhdGgsIHBhbmUucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUucGFuZXNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IHBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgaWYgKHBhbmVzLmxlbmd0aCAtIDEgPCBpIHx8IHBhbmUucGF0aCAhPT0gcGFuZXNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCAwKVxyXG4gICAgICB0aGlzLnNlbGVjdCgwKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdGFiID0gdGFic1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVUYWIoaSwgdGFiLnBhdGgsIHRhYi5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS50YWJzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IHRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICBpZiAodGFicy5sZW5ndGggLSAxIDwgaSB8fCB0YWIucGF0aCAhPT0gdGFic1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICBwYW5lLmZ1bGxzY3JlZW4gIT09IChuID09PSAxKSAmJlxyXG4gICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQobiA9PT0gMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmF2UXVlcnlQYXJhbXMocGFuZTogUGFuZVJlZjxhbnk+LCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBwYW5lLl9xdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgIHBhbmUuX2RhdGEkLm5leHQoeyAuLi5wYW5lLmRhdGEsIC4uLmRhdGEgfSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZQYXJhbXMocGF0aDogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPGFueT4sIHBhcmFtczogUGFyYW1NYXAsIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgc3RhdGU6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAocGFuZS5yb3V0ZS5jYW5EaXNtaXNzKVxyXG4gICAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShwYW5lLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9wYXRoID0gcGF0aDtcclxuICAgIHBhbmUuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQoe30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IFBhcmFtTmF2aWdhdGlvbihwYXJhbXMsIHBhbmUpKTtcclxuXHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQucm91dGUgJiYgKGNoaWxkLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCA9PT0gcGFuZS5yb3V0ZSkge1xyXG4gICAgICAgIGNoaWxkLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24oY2hpbGQuZGF0YSwgc3RhdGUpKTtcclxuICAgICAgICBjaGlsZC5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgY2hpbGQuX3BhdGggPSBwYW5lLnBhdGggKyAnLycgKyBjaGlsZC5yb3V0ZS5wYXRoO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiBjaGlsZCA9PT0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBjaGlsZC5ncm91cDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHBhbmUubW9kZSA9PT0gJ3BhbmUnKSB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3JlcGxhY2VVcmwoKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpXHJcbiAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIGNvbnN0IHN0ZXAgPSBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwICsgMSA6IDE7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW5nID0gdHJ1ZTtcclxuICAgIGhpc3RvcnkucHVzaFN0YXRlKHtcclxuICAgICAgYml6ZG9jOiB0cnVlLFxyXG4gICAgICBzdGVwLFxyXG4gICAgICBzZWxlY3RlZFRhYkluZGV4OiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhbmVzOiB0aGlzLnBhbmVzLm1hcChwID0+IHAuZGF0YSksXHJcbiAgICAgIHRhYnM6IHRoaXMudGFicy5tYXAodCA9PiB0LmRhdGEpLFxyXG4gICAgICBzd2FwOiB0aGlzLnN3YXAsXHJcbiAgICAgIHN3YXBUYWI6IHRoaXMuc3dhcFRhYixcclxuICAgICAgcHJldkdyb3VwOiB0aGlzLnByZXZHcm91cFxyXG4gICAgfSBhcyBIaXN0b3J5U3RhdGUsICcnLCAnLycgKyBwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlLCAyMDApO1xyXG4gIH1cclxuICBkcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1tldnQucHJldmlvdXNJbmRleF07XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQucHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQuY3VycmVudEluZGV4LCAwLCBwYW5lKTtcclxuICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGQ8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmluc2VydCh0aGlzLnBhbmVzLmxlbmd0aCwgY29tcG9uZW50LCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5zZXJ0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZTxUPihjb21wb25lbnQsIG9wdGlvbnMgfHwge30sIHBvc2l0aW9uKTtcclxuICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luc2VydFBhbmU8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG4gICAgLy90aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtdKS5jcmVhdGUoZWxlbWVudCwgeyBwYXJhbXM6IHt9IH0pLnBsYXkoKTtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LCAncGFuZScsIG9wdGlvbnMpO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICB0aGlzLnBhbmVzLnB1c2gocGFuZSk7XHJcbiAgICB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHBhbmUpKTtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgICAgdGhpcy5fcm91dGVyLl9hY3RpdmUgPSBwYW5lO1xyXG4gICAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEpIHRoaXMuc2Nyb2xsVG8ocG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29uc3RyYWN0PFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcclxuICAgIG1vZGU6ICd0YWInIHwgJ3BhbmUnLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBkaWFsb2c/OiBib29sZWFuO1xyXG4gICAgICBwYXRoPzogc3RyaW5nOyByb3V0ZT86IFBhbmVSb3V0ZTsgaWNvbj86IHN0cmluZzsgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgfSkge1xyXG4gICAgY29uc3QgcGFuZSA9IG5ldyBQYW5lUmVmPFQ+KGNvbXBvbmVudCwgbW9kZSwgb3B0aW9ucyk7XHJcbiAgICBwYW5lLl9pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbXHJcbiAgICAgIHsgcHJvdmlkZTogUGFuZVJlZiwgdXNlVmFsdWU6IHBhbmUgfVxyXG4gICAgXSwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgcGFuZS5fY29tbSQuc3Vic2NyaWJlKGUgPT4gdGhpcy5fYWN0aW9uPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5zZXJ0VGFiPFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczoge1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgcGF0aD86IHN0cmluZztcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2c7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAgJ3RhYicsIHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgZGlhbG9nXHJcbiAgICB9KTtcclxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XHJcbiAgICB0aGlzLmRpYWxvZyA9IGRpYWxvZztcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uU3RhcnQodGFiKSk7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGFiLmdyb3VwICYmIG9wdGlvbnMuc3dhcCAhPT0gZmFsc2UpIHtcclxuICAgICAgbGV0IGkgPSAwLCBzd2FwID0gZmFsc2U7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzW2ldLmdyb3VwICE9PSB0YWIuZ3JvdXApIHtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMudGFic1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgc3dhcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrK1xyXG4gICAgICB9IHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICAgIGlmIChzd2FwKSB7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fYmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfYmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgQmFja05hdmlnYXRpb24oKSk7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX2JhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FjdGlvbjxUID0gYW55PihlOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8VD4pIHtcclxuICAgIHN3aXRjaCAoZSkge1xyXG4gICAgICBjYXNlICdmb2N1cyc6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoaW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlVGFiKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRhYigpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuZXhwYW5kUGFuZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZWZyZXNoJzoge1xyXG4gICAgICAgIGNvbnN0IHBhbmVzID0gdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgcGFuID0gcGFuZXNbaV07XHJcbiAgICAgICAgICBpZiAocGFuLmRlY2VuZGVudE9mKHBhbmUpKVxyXG4gICAgICAgICAgICBwYW4uX2RhdGEkLm5leHQoT2JqZWN0LmFzc2lnbihwYW4uZGF0YSwgcGFuZS5kYXRhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBlc2NhcGVcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXHJcbiAgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFicy5sZW5ndGgpIHJldHVybjtcclxuICAgIHRoaXMudGFicy5mb3JFYWNoKHQgPT4gdGhpcy5fZGVzdHJveVBhbmUodCkpO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSgwLCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIHRoaXMuZGlhbG9nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgQ29sbGFwc2VOYXZpZ2F0aW9uKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZXNpemUoKSB7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcclxuICB9XHJcbiAgY2xvc2VUYWIocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3Bvc2l0aW9uXTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9yZXBsYWNlVXJsKCk7XHJcbiAgfVxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXNbaV0gIT09IHBhbmUpIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0aGlzLnBhbmVzW2ldKTtcclxuICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gICAgcGFuZS5fZnVsbHNjcmVlbiQubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlzdG9yeVN0ZXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwIDogMDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRhYigpIHtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UodGhpcy5zZWxlY3RlZFRhYkluZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoLCB0YWIpO1xyXG4gICAgdGFiLl9tb2RlJC5uZXh0KCdwYW5lJyk7XHJcbiAgICB0YWIuX2Z1bGxzY3JlZW4kLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fcmVwbGFjZVVybCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IHBvc2l0aW9uKSByZXR1cm47XHJcbiAgICBpZiAocG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGVsc2UgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1twb3NpdGlvbl07XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblNlbGVjdGVkKHBhbmUpKTtcclxuICAgIHRoaXMuX3JvdXRlci5fYWN0aXZlID0gcGFuZTtcclxuICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgdGhpcy5fZGlzY2FyZFBhbmUocGFuZSk7XHJcblxyXG4gICAgdGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA+PSB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgIHRoaXMuc2VsZWN0KC0xKTtcclxuICAgIHRoaXMuX3JlcGxhY2VVcmwoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgcGFuZXMgPSB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpICYmIHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKS5cclxuICAgICAgcmV2ZXJzZSgpO1xyXG5cclxuICAgIHBhbmUucm91dGUgJiYgcGFuZS5yb3V0ZS5jYW5EaXNtaXNzICYmXHJcbiAgICAgIHBhbmVzLnB1c2gocGFuZSk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lc1tpXSk7XHJcbiAgICAgIGlmICghb2spIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc2NhcmRQYW5lKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5kZWNlbmRlbnRPZihwYW5lKSkuXHJcbiAgICAgIHJldmVyc2UoKS5mb3JFYWNoKHMgPT4gdGhpcy5fZGlzY2FyZFBhbmUocykpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCgpO1xyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICB0aGlzLl9wZW5kaW5nLnNwbGljZSgwLCB0aGlzLl9wZW5kaW5nLmxlbmd0aCk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKDAsIHRoaXMudGFicy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcCA9IG51bGw7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzQWxsKCkge1xyXG4gICAgY29uc3QgcGFuZXMgPSB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lc1tpXSk7XHJcbiAgICAgIGlmICghb2spXHJcbiAgICAgICAgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc21pc3NhYmxlKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSwgcm91dGU6IHsgY2FuRGlzbWlzcyB9IH0gPSBwYW5lO1xyXG4gICAgY29uc3QgZGlzbWlzc2FibGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoY2FuRGlzbWlzcykgYXMgQ2FuRGlzbWlzczxhbnk+O1xyXG4gICAgY29uc3Qgb2sgPSBkaXNtaXNzYWJsZS5vbkRpc21pc3MoaW5zdGFuY2UpO1xyXG4gICAgaWYgKGlzQm9vbGVhbihvaykpXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob2spO1xyXG4gICAgZWxzZSBpZiAoaXNQcm9taXNlKG9rKSlcclxuICAgICAgcmV0dXJuIG9rO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gb2sudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIHNjcm9sbFRvKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGl0ZW0gJiYgaXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgaW5saW5lOiAnZW5kJywgYmxvY2s6ICdlbmQnIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgX2NoaWxkcmVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFuZS1jb250ZW50Jyk7XHJcbiAgfVxyXG4gIGRvbmUoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gIH1cclxuICBuYXZpZ2F0aW9uQXJyb3dzKGV2dD86IEV2ZW50KSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLm5leHQgPSB0aGlzLl9ydGwgPyBjb250YWluZXIuY2xpZW50V2lkdGggLSBjb250YWluZXIuc2Nyb2xsTGVmdCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aCA6XHJcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ICsgY29udGFpbmVyLmNsaWVudFdpZHRoIDwgY29udGFpbmVyLnNjcm9sbFdpZHRoO1xyXG4gICAgdGhpcy5wcmV2ID0gdGhpcy5fcnRsID8gY29udGFpbmVyLnNjcm9sbExlZnQgPCAwIDogY29udGFpbmVyLnNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuICBzY3JvbGxCeShuOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudDtcclxuICAgIG5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGxlZnQ6IG4gKiAodGhpcy5fcnRsID8gLTEgOiAxKSB9KTtcclxuICB9XHJcbiAgZm9jdXMoaW5kZXgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBlbC5mb2N1cygpO1xyXG4gIH1cclxuICBvblJlc2l6ZShwYW5lOiBQYW5lUmVmPGFueT4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gLTEgOiAxO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQ7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGhcclxuICAgICAgICA9IE1hdGgubWF4KHdpZHRoICsgZGVsdGEsIDM1MCkgKyAncHgnO1xyXG4gICAgICBwYW5lICYmIHBhbmUuX3Jlc2l6ZSQubmV4dCh7fSBhcyBhbnkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblRhYlJlc2l6ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkubmV4dEVsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0XHJcbiAgICAgIG1lID0gdGhpcyxcclxuICAgICAgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAxIDogLTE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICBtZS5uYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICAgIC8vdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLl9yZXNpemUoKTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IG5lZ2F0aXZlLXNpemVkIGVsZW1lbnRzXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5tYXgoKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZCwgLXdpZHRoKTtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aCA9ICh3aWR0aCArIGRlbHRhKSArICdweCc7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0YWJzJywgZWwuc3R5bGUud2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9kZXN0cm95UGFuZShwYW5lOiBQYW5lUmVmKSB7XHJcbiAgICBwYW5lLl9kZXN0cm95KCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvbkVuZChwYW5lKSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBQQU5FX1BBUkFNU19SRUdFWCA9IC8oOltcXHdcXC1dKykvZztcclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVSb3V0ZXMocm91dGVzOiBQYW5lUm91dGVbXSwgdHJlZVBhdGg/OiBzdHJpbmcpOiBFeHRlbmRlZFJvdXRlW10ge1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgcm91dGUgPSByb3V0ZXNbaV0sIGZ1bGxQYXRoID0gKHRyZWVQYXRoID8gKHRyZWVQYXRoICsgJy8nKSA6ICcnKSArIHJvdXRlLnBhdGg7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihyb3V0ZSwge1xyXG4gICAgICBmdWxsUGF0aCxcclxuICAgICAgcmVnRXg6IG5ldyBSZWdFeHAoJ14nICsgZnVsbFBhdGguXHJcbiAgICAgICAgcmVwbGFjZSgnLycsICdcXFxcLycpLlxyXG4gICAgICAgIHJlcGxhY2UoUEFORV9QQVJBTVNfUkVHRVgsIGUgPT4gYCg/PCR7ZS5zdWJzdHIoMSl9PltcXFxcd1xcXFwtXSopYCkpXHJcbiAgICB9KTtcclxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgY2hpbGRyZW4gPSBwcmVwYXJlUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBmdWxsUGF0aCk7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjaGlsZHJlbltqXSwge1xyXG4gICAgICAgICAgcGFyZW50OiByb3V0ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcm91dGVzIGFzIEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEV4dGVuZGVkUm91dGUgZXh0ZW5kcyBQYW5lUm91dGUge1xyXG4gIGZ1bGxQYXRoOiBzdHJpbmc7XHJcbiAgcmVnRXg6IFJlZ0V4cDtcclxuICBwYXJlbnQ/OiBFeHRlbmRlZFJvdXRlO1xyXG4gIGNoaWxkcmVuPzogRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcbmludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xyXG4gIGJpemRvYzogdHJ1ZTtcclxuICBzdGVwOiBudW1iZXI7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuICBwYW5lczogYW55W107XHJcbiAgdGFiczogYW55W107XHJcbiAgc2VsZWN0ZWRUYWJJbmRleD86IG51bWJlcjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFuZXNcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiBbc3R5bGUuZGlzcGxheV09XCJkaWFsb2cgPyAnJyA6ICdub25lJ1wiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsQnkoLTQwMClcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgICpuZ0lmPVwicHJldlwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgIGFycm93X2JhY2tfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVzLXRpdGxlXCIgW0B0aXRsZV09XCJ0aXRsZUFuaW1hdGlvblwiPlxyXG4gICAgPGgxPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgKm5nSWY9XCJzd2FwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19jaXJjbGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiICpuZ0lmPVwiIWZpcnN0XCI+YXJyb3dfZm9yd2FyZF9pb3M8L21hdC1pY29uPlxyXG4gICAgICAgIHt7cC50aXRsZX19XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ3VpZGUocGFuZXNbMF0uZ3VpZGUpXCIgKm5nSWY9XCJwYW5lc1swXT8uZ3VpZGVcIiBbYml6ZG9jVG9vbHRpcF09XCInSGVscCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmhlbHA8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMT5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGJpemRvYy1xdWlja3Rvb2xzPjwvYml6ZG9jLXF1aWNrdG9vbHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjcGFuaW5nIGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCJcclxuICAgICAgIGNka1Njcm9sbGFibGVcclxuICAgICAgIEBwYW5lc1xyXG4gICAgICAgKHNjcm9sbCk9XCJuYXZpZ2F0aW9uQXJyb3dzKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPGRpdiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ICE9PSBpICYmICFkcmFnZ2luZyAmJiBzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUmVzaXplKHAsICRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCIgI3RhYmluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gaW5saW5lPVwidHJ1ZVwiIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHAgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJwLmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiFwLmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3twLmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwidC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwidC5pbmplY3RvclwiIChjcmVhdGUpPVwidC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|