info-library 2.16.0-beta → 3.0.0-beta
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/controls/autocomplete/autocomplete.component.d.ts +2 -1
- package/controls/date/date.component.d.ts +2 -1
- package/controls/date-month/date-month.component.d.ts +2 -1
- package/controls/grid/grid.component.d.ts +5 -5
- package/controls/input/input.component.d.ts +13 -3
- package/controls/multi-select/multi-select.component.d.ts +3 -1
- package/controls/select/select.component.d.ts +2 -1
- package/directives/unmask.directive.d.ts +2 -1
- package/esm2022/controls/alert/alert.component.mjs +8 -10
- package/esm2022/controls/autocomplete/autocomplete.component.mjs +33 -26
- package/esm2022/controls/big-checkbox/big-checkbox.component.mjs +27 -25
- package/esm2022/controls/card/card.component.mjs +12 -6
- package/esm2022/controls/card-menu/card-menu.component.mjs +14 -16
- package/esm2022/controls/checkbox/checkbox.component.mjs +13 -13
- package/esm2022/controls/chips/chips.component.mjs +12 -11
- package/esm2022/controls/date/date.component.mjs +64 -32
- package/esm2022/controls/date-month/date-month.component.mjs +64 -31
- package/esm2022/controls/editor/editor.component.mjs +35 -31
- package/esm2022/controls/grid/grid.component.mjs +529 -511
- package/esm2022/controls/input/input.component.mjs +146 -71
- package/esm2022/controls/input-list/input-list.component.mjs +16 -15
- package/esm2022/controls/list-checkbox/list-checkbox.component.mjs +16 -12
- package/esm2022/controls/message/message.component.mjs +9 -11
- package/esm2022/controls/multi-select/multi-select.component.mjs +35 -22
- package/esm2022/controls/paginator/paginator.component.mjs +15 -16
- package/esm2022/controls/select/select.component.mjs +32 -23
- package/esm2022/controls/timeline/timeline.component.mjs +15 -16
- package/esm2022/directives/mask.directive.mjs +17 -8
- package/esm2022/directives/unmask.directive.mjs +14 -7
- package/esm2022/info-library.module.mjs +10 -5
- package/esm2022/layouts/dialog/dialog.component.mjs +10 -6
- package/esm2022/layouts/filter/filter.component.mjs +179 -0
- package/esm2022/layouts/loading/loading.component.mjs +7 -9
- package/esm2022/layouts/main/main.component.mjs +101 -54
- package/esm2022/layouts/modal/modal.component.mjs +37 -22
- package/esm2022/layouts/pagebar/pagebar.component.mjs +125 -97
- package/esm2022/layouts/sidebar/sidebar.component.mjs +152 -100
- package/esm2022/layouts/topbar/topbar.component.mjs +417 -253
- package/esm2022/layouts/topmenu/topmenu.component.mjs +20 -12
- package/esm2022/model/app-config.model.mjs +12 -12
- package/esm2022/model/data-access.model.mjs +10 -8
- package/esm2022/model/dialog-result.model.mjs +3 -2
- package/esm2022/model/dialog.model.mjs +13 -14
- package/esm2022/model/form-prop.model.mjs +8 -6
- package/esm2022/model/grid-button.model.mjs +12 -7
- package/esm2022/model/last-search.model.mjs +5 -7
- package/esm2022/model/login.model.mjs +4 -2
- package/esm2022/model/method-grid-button.model.mjs +4 -2
- package/esm2022/model/notification.model.mjs +9 -5
- package/esm2022/model/pagebar-buttons.model.mjs +6 -6
- package/esm2022/model/permission.model.mjs +4 -1
- package/esm2022/model/platform.model.mjs +13 -14
- package/esm2022/model/session.model.mjs +25 -6
- package/esm2022/pipe/mask.pipe.mjs +10 -6
- package/esm2022/pipe/translate.pipe.mjs +4 -3
- package/esm2022/public_api.mjs +2 -1
- package/esm2022/service/authentication.service.mjs +89 -36
- package/esm2022/service/configuration.service.mjs +41 -10
- package/esm2022/service/data.service.mjs +38 -21
- package/esm2022/service/theme.service.mjs +16 -6
- package/esm2022/service/translate.service.mjs +9 -5
- package/esm2022/utils/utilities.mjs +52 -5
- package/fesm2022/info-library.mjs +2551 -1649
- package/fesm2022/info-library.mjs.map +1 -1
- package/info-library-3.0.0-beta.tgz +0 -0
- package/info-library.module.d.ts +32 -31
- package/layouts/filter/filter.component.d.ts +24 -0
- package/layouts/main/main.component.d.ts +4 -0
- package/layouts/modal/modal.component.d.ts +1 -0
- package/layouts/sidebar/sidebar.component.d.ts +1 -1
- package/layouts/topbar/topbar.component.d.ts +4 -1
- package/model/app-config.model.d.ts +2 -0
- package/model/session.model.d.ts +5 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/service/authentication.service.d.ts +4 -2
- package/service/configuration.service.d.ts +4 -1
- package/service/data.service.d.ts +2 -0
- package/utils/utilities.d.ts +11 -0
|
@@ -3,6 +3,7 @@ import { InfoTranslateService } from '../service/translate.service';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "../service/translate.service";
|
|
5
5
|
export class InfoTranslatePipe {
|
|
6
|
+
_translate;
|
|
6
7
|
constructor(_translate) {
|
|
7
8
|
this._translate = _translate;
|
|
8
9
|
}
|
|
@@ -13,8 +14,8 @@ export class InfoTranslatePipe {
|
|
|
13
14
|
return value;
|
|
14
15
|
return this._translate.instant(value);
|
|
15
16
|
}
|
|
16
|
-
/** @nocollapse */ static
|
|
17
|
-
/** @nocollapse */ static
|
|
17
|
+
/** @nocollapse */ static ɵfac = function InfoTranslatePipe_Factory(t) { return new (t || InfoTranslatePipe)(i0.ɵɵdirectiveInject(i1.InfoTranslateService, 16)); };
|
|
18
|
+
/** @nocollapse */ static ɵpipe = /** @pureOrBreakMyCode */ i0.ɵɵdefinePipe({ name: "translate", type: InfoTranslatePipe, pure: false });
|
|
18
19
|
}
|
|
19
20
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoTranslatePipe, [{
|
|
20
21
|
type: Pipe,
|
|
@@ -23,4 +24,4 @@ export class InfoTranslatePipe {
|
|
|
23
24
|
pure: false
|
|
24
25
|
}]
|
|
25
26
|
}], function () { return [{ type: i1.InfoTranslateService }]; }, null); })();
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL3BpcGUvdHJhbnNsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQU1wRSxNQUFNLE9BQU8saUJBQWlCO0lBRU47SUFBcEIsWUFBb0IsVUFBZ0M7UUFBaEMsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7SUFBSSxDQUFDO0lBRXpELFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBVTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUNOLE9BQU87UUFFWCxJQUFJLElBQUksS0FBSyxLQUFLO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFFakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhGQVpRLGlCQUFpQjsyR0FBakIsaUJBQWlCOzt1RkFBakIsaUJBQWlCO2NBSjdCLElBQUk7ZUFBQztnQkFDRixJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLEtBQUs7YUFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5mb1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICd0cmFuc2xhdGUnLFxyXG4gICAgcHVyZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZm9UcmFuc2xhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdHJhbnNsYXRlOiBJbmZvVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIFxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChhcmdzID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodmFsdWUpO1xyXG4gICAgfVxyXG59Il19
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -29,8 +29,9 @@ export { InfoSidebarComponent } from './layouts/sidebar/sidebar.component';
|
|
|
29
29
|
export { InfoTopbarComponent } from './layouts/topbar/topbar.component';
|
|
30
30
|
export { InfoTopMenuComponent } from './layouts/topmenu/topmenu.component';
|
|
31
31
|
export { InfoDialogComponent, InfoDialogModal } from './layouts/dialog/dialog.component';
|
|
32
|
+
export { InfoFilterComponent } from './layouts/filter/filter.component';
|
|
32
33
|
export { InfoLoadingComponent } from './layouts/loading/loading.component';
|
|
33
34
|
export { InfoModalComponent } from './layouts/modal/modal.component';
|
|
34
35
|
export { InfoPagebarComponent } from './layouts/pagebar/pagebar.component';
|
|
35
36
|
export { InfoLibraryModule } from './info-library.module';
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUUxQixXQUFXO0FBQ1gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsVUFBVTtBQUNWLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFQSUNPTlRST0xMRVJfQ09ORklHLCBESUNUSU9OQVJJRVNfQ09ORklHIH0gZnJvbSAnLi9nbG9iYWwtY29uZmlnJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2VudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3BpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UnO1xyXG5cclxuLy8gQ29udHJvbHNcclxuZXhwb3J0IHsgSW5mb0FsZXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9hbGVydC9hbGVydC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9CaWdDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvYmlnLWNoZWNrYm94L2JpZy1jaGVja2JveC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvQ2FyZENvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvY2FyZC9jYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9NZW51Q2FyZENvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvY2FyZC1tZW51L2NhcmQtbWVudS5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9EYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9kYXRlL2RhdGUuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0RhdGVNb250aENvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvZGF0ZS1tb250aC9kYXRlLW1vbnRoLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9HcmlkQ29tcG9uZW50LCBJbmZvR3JpZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9ncmlkL2dyaWQuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvSW5wdXRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9pbnB1dC1saXN0L2lucHV0LWxpc3QuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0xpc3RDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvbGlzdC1jaGVja2JveC9saXN0LWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9UaW1lbGluZUNvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29udHJvbHMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvTXVsdGlTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbnRyb2xzL211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0NoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9scy9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xyXG5cclxuLy8gTGF5b3V0c1xyXG5leHBvcnQgeyBJbmZvTWFpbkNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0cy9tYWluL21haW4uY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb1NpZGViYXJDb21wb25lbnQgfSBmcm9tICcuL2xheW91dHMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9Ub3BiYXJDb21wb25lbnQgfSBmcm9tICcuL2xheW91dHMvdG9wYmFyL3RvcGJhci5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvVG9wTWVudUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0cy90b3BtZW51L3RvcG1lbnUuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0RpYWxvZ0NvbXBvbmVudCwgSW5mb0RpYWxvZ01vZGFsIH0gZnJvbSAnLi9sYXlvdXRzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IEluZm9Mb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBJbmZvTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2xheW91dHMvbW9kYWwvbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSW5mb1BhZ2ViYXJDb21wb25lbnQgfSBmcm9tICcuL2xheW91dHMvcGFnZWJhci9wYWdlYmFyLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgeyBJbmZvTGlicmFyeU1vZHVsZSB9IGZyb20gJy4vaW5mby1saWJyYXJ5Lm1vZHVsZSc7Il19
|
|
@@ -25,6 +25,17 @@ import * as i9 from "@angular/platform-browser";
|
|
|
25
25
|
import * as i10 from "../layouts/modal/modal.component";
|
|
26
26
|
import * as i11 from "../pipe/translate.pipe";
|
|
27
27
|
export class InfoAuthenticationService {
|
|
28
|
+
_router;
|
|
29
|
+
_http;
|
|
30
|
+
_sessao;
|
|
31
|
+
_plataforma;
|
|
32
|
+
_dataService;
|
|
33
|
+
_modal;
|
|
34
|
+
_utilities;
|
|
35
|
+
_translate;
|
|
36
|
+
_title;
|
|
37
|
+
_sessionTimeInterval;
|
|
38
|
+
_sessionActive = true;
|
|
28
39
|
constructor(_router, _http, _sessao, _plataforma, _dataService, _modal, _utilities, _translate, _title) {
|
|
29
40
|
this._router = _router;
|
|
30
41
|
this._http = _http;
|
|
@@ -35,7 +46,6 @@ export class InfoAuthenticationService {
|
|
|
35
46
|
this._utilities = _utilities;
|
|
36
47
|
this._translate = _translate;
|
|
37
48
|
this._title = _title;
|
|
38
|
-
this._sessionActive = true;
|
|
39
49
|
}
|
|
40
50
|
getSessao() {
|
|
41
51
|
return this._sessao;
|
|
@@ -89,13 +99,13 @@ export class InfoAuthenticationService {
|
|
|
89
99
|
if (this._sessao.TempoInatividade == null || this._sessao.TempoInatividade <= 0)
|
|
90
100
|
return;
|
|
91
101
|
let tempoSessao = this._sessao.TempoInatividade;
|
|
92
|
-
|
|
102
|
+
this._utilities.setLocalStorage('ms', new Date().valueOf().toString());
|
|
93
103
|
this._sessionTimeInterval = setInterval(() => {
|
|
94
104
|
if (tempoSessao > 0) {
|
|
95
105
|
tempoSessao--;
|
|
96
106
|
return;
|
|
97
107
|
}
|
|
98
|
-
let tempoRestante = Math.round(this._sessao.TempoInatividade - ((new Date().valueOf() - parseInt(
|
|
108
|
+
let tempoRestante = Math.round(this._sessao.TempoInatividade - ((new Date().valueOf() - parseInt(this._utilities.getLocalStorage('ms'))) / 1000));
|
|
99
109
|
if (!isNaN(tempoRestante) && tempoRestante > 0) {
|
|
100
110
|
tempoSessao = tempoRestante;
|
|
101
111
|
return;
|
|
@@ -115,7 +125,7 @@ export class InfoAuthenticationService {
|
|
|
115
125
|
width: '500px'
|
|
116
126
|
});
|
|
117
127
|
ref.afterClosed().subscribe((r) => {
|
|
118
|
-
if (r != null && (r.modalAction == InfoModalAction.Yes || (this._sessao.TempoInatividade - ((new Date().valueOf() - parseInt(
|
|
128
|
+
if (r != null && (r.modalAction == InfoModalAction.Yes || (this._sessao.TempoInatividade - ((new Date().valueOf() - parseInt(this._utilities.getLocalStorage('ms'))) / 1000)) > 0)) {
|
|
119
129
|
this._sessionActive = true;
|
|
120
130
|
this.refreshSessionTime();
|
|
121
131
|
}
|
|
@@ -126,8 +136,9 @@ export class InfoAuthenticationService {
|
|
|
126
136
|
login(usuario, senha, reCaptchaToken = null, codigo2FA = null) {
|
|
127
137
|
this.removeSessao();
|
|
128
138
|
return this._http
|
|
129
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/autenticar', { Usuario: usuario, Senha: senha, ReCaptchaToken: reCaptchaToken, Codigo2FA: codigo2FA })
|
|
130
|
-
.pipe(map((
|
|
139
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/autenticar', this._utilities.jsonToEncrypt({ Usuario: usuario, Senha: senha, ReCaptchaToken: reCaptchaToken, Codigo2FA: codigo2FA }), { headers: this._dataService.getHeaderDefault(), responseType: 'text' })
|
|
140
|
+
.pipe(map((rs) => {
|
|
141
|
+
var r = this._utilities.decryptToJson(rs);
|
|
131
142
|
if (r.Success && r.Data != null)
|
|
132
143
|
this._utilities.setLocalStorage(this._plataforma.TokenKey, r.Data.Token);
|
|
133
144
|
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
@@ -135,8 +146,29 @@ export class InfoAuthenticationService {
|
|
|
135
146
|
}
|
|
136
147
|
trocarEmpresa(usuario, empresaId) {
|
|
137
148
|
return this._http
|
|
138
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/trocarempresa', { EmpresaId: empresaId }, { headers: this._dataService.getHeaderToken() })
|
|
139
|
-
.pipe(map((
|
|
149
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/trocarempresa', this._utilities.jsonToEncrypt({ EmpresaId: empresaId }), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
150
|
+
.pipe(map((rs) => {
|
|
151
|
+
var r = this._utilities.decryptToJson(rs);
|
|
152
|
+
if (r.Success && r.Data != null)
|
|
153
|
+
this._utilities.setLocalStorage(this._plataforma.TokenKey, r.Data);
|
|
154
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
155
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
156
|
+
}
|
|
157
|
+
trocarUnidade(usuario, empresaId, unidadeId) {
|
|
158
|
+
return this._http
|
|
159
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/trocarunidade', this._utilities.jsonToEncrypt({ EmpresaId: empresaId, UnidadeId: unidadeId }), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
160
|
+
.pipe(map((rs) => {
|
|
161
|
+
var r = this._utilities.decryptToJson(rs);
|
|
162
|
+
if (r.Success && r.Data != null)
|
|
163
|
+
this._utilities.setLocalStorage(this._plataforma.TokenKey, r.Data);
|
|
164
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
165
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
166
|
+
}
|
|
167
|
+
trocarCliente(usuario, clienteId) {
|
|
168
|
+
return this._http
|
|
169
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/trocarcliente', this._utilities.jsonToEncrypt({ ClienteId: clienteId }), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
170
|
+
.pipe(map((rs) => {
|
|
171
|
+
var r = this._utilities.decryptToJson(rs);
|
|
140
172
|
if (r.Success && r.Data != null)
|
|
141
173
|
this._utilities.setLocalStorage(this._plataforma.TokenKey, r.Data);
|
|
142
174
|
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
@@ -144,8 +176,9 @@ export class InfoAuthenticationService {
|
|
|
144
176
|
}
|
|
145
177
|
clonar(usuario) {
|
|
146
178
|
return this._http
|
|
147
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/clonar', { Usuario: usuario }, { headers: this._dataService.getHeaderToken() })
|
|
148
|
-
.pipe(map((
|
|
179
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/clonar', this._utilities.jsonToEncrypt({ Usuario: usuario }), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
180
|
+
.pipe(map((rs) => {
|
|
181
|
+
var r = this._utilities.decryptToJson(rs);
|
|
149
182
|
if (r.Success && r.Data != null)
|
|
150
183
|
this._utilities.setLocalStorage(this._plataforma.TokenKey, r.Data);
|
|
151
184
|
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
@@ -153,7 +186,7 @@ export class InfoAuthenticationService {
|
|
|
153
186
|
}
|
|
154
187
|
logout() {
|
|
155
188
|
if (this.isLogged()) {
|
|
156
|
-
this._http.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/Logout', null, { headers: this._dataService.getHeaderToken() })
|
|
189
|
+
this._http.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/Logout', null, { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
157
190
|
.subscribe(() => {
|
|
158
191
|
this.removeSessao();
|
|
159
192
|
this._router.navigateByUrl('login').then(r => { location.reload(); });
|
|
@@ -166,28 +199,43 @@ export class InfoAuthenticationService {
|
|
|
166
199
|
}
|
|
167
200
|
getPermissions(url, logAtividade = false) {
|
|
168
201
|
return this._http
|
|
169
|
-
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/getpermissao?url=' + url + '&logatividade=' + logAtividade.toString(), { headers: this._dataService.getHeaderToken() })
|
|
170
|
-
.pipe(map((
|
|
202
|
+
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/getpermissao?' + encodeURIComponent(this._utilities.jsonToEncrypt('url=' + url + '&logatividade=' + logAtividade.toString())), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
203
|
+
.pipe(map((rs) => {
|
|
204
|
+
var r = this._utilities.decryptToJson(rs);
|
|
205
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
206
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
171
207
|
}
|
|
172
208
|
setTrocaSenha(model) {
|
|
173
209
|
return this._http
|
|
174
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/TrocarSenha', model, { headers: this._dataService.getHeaderToken() })
|
|
175
|
-
.pipe(map((
|
|
210
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/TrocarSenha', this._utilities.jsonToEncrypt(model), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
211
|
+
.pipe(map((rs) => {
|
|
212
|
+
var r = this._utilities.decryptToJson(rs);
|
|
213
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
214
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
176
215
|
}
|
|
177
216
|
setRecuperarSenha(model) {
|
|
178
217
|
return this._http
|
|
179
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/RecuperarSenha', model, { headers: this._dataService.getHeaderToken() })
|
|
180
|
-
.pipe(map((
|
|
218
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/RecuperarSenha', this._utilities.jsonToEncrypt(model), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
219
|
+
.pipe(map((rs) => {
|
|
220
|
+
var r = this._utilities.decryptToJson(rs);
|
|
221
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
222
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
181
223
|
}
|
|
182
224
|
setResetarSenha(model) {
|
|
183
225
|
return this._http
|
|
184
|
-
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/ResetarSenha', model)
|
|
185
|
-
.pipe(map((
|
|
226
|
+
.post(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/ResetarSenha', this._utilities.jsonToEncrypt(model), { headers: this._dataService.getHeaderDefault(), responseType: 'text' })
|
|
227
|
+
.pipe(map((rs) => {
|
|
228
|
+
var r = this._utilities.decryptToJson(rs);
|
|
229
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
230
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
186
231
|
}
|
|
187
232
|
getLoginResources() {
|
|
188
233
|
return this._http
|
|
189
|
-
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/app/GetLoginResources')
|
|
190
|
-
.pipe(map((
|
|
234
|
+
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/app/GetLoginResources', { headers: this._dataService.getHeaderDefault(), responseType: 'text' })
|
|
235
|
+
.pipe(map((rs) => {
|
|
236
|
+
var r = this._utilities.decryptToJson(rs);
|
|
237
|
+
return new InfoLoginModel(r.Success, r.Messages, r.Data);
|
|
238
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
191
239
|
}
|
|
192
240
|
hasPermission(url, keyFunction = 'view') {
|
|
193
241
|
if (url == '/' && keyFunction == 'view')
|
|
@@ -241,13 +289,16 @@ export class InfoAuthenticationService {
|
|
|
241
289
|
}
|
|
242
290
|
validaSessao(url) {
|
|
243
291
|
return this._http
|
|
244
|
-
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/validasessao?url=' + url, { headers: this._dataService.getHeaderToken() })
|
|
245
|
-
.pipe(map((
|
|
292
|
+
.get(this._plataforma.Config.webapiUrl + 'centrocontrole/usuario/validasessao?' + encodeURIComponent(this._utilities.jsonToEncrypt('url=' + url)), { headers: this._dataService.getHeaderToken(), responseType: 'text' })
|
|
293
|
+
.pipe(map((rs) => {
|
|
294
|
+
var r = this._utilities.decryptToJson(rs);
|
|
295
|
+
return new InfoLoginModel(r === true, '', r);
|
|
296
|
+
}), catchError((e) => this.errorHandling(e)));
|
|
246
297
|
}
|
|
247
298
|
removeSessao() {
|
|
248
299
|
Object.keys(localStorage).forEach((key) => {
|
|
249
|
-
if (!key.includes('Dashboard') && !key.includes('cols'))
|
|
250
|
-
|
|
300
|
+
if (!key.includes('Dashboard') && !key.includes('cols') && !key.includes('_'))
|
|
301
|
+
localStorage.removeItem(key);
|
|
251
302
|
});
|
|
252
303
|
}
|
|
253
304
|
definePaginaAtiva(url) {
|
|
@@ -258,8 +309,8 @@ export class InfoAuthenticationService {
|
|
|
258
309
|
let aux = url.substring(1).replace(/-/g, '').toLowerCase().split('/');
|
|
259
310
|
let tituloMenu = aux.length > 0 ? aux[0].toString() : url;
|
|
260
311
|
let parametrosUrl = url.split('/').slice(2);
|
|
261
|
-
if (tituloMenu.indexOf('
|
|
262
|
-
this._plataforma.PaginaAtiva = { Icone: 'widgets', Titulo: '
|
|
312
|
+
if (tituloMenu.indexOf('nicio') > -1)
|
|
313
|
+
this._plataforma.PaginaAtiva = { Icone: 'widgets', Titulo: 'Inicio' };
|
|
263
314
|
else {
|
|
264
315
|
let item = this._plataforma.Menu.filter(m => m.Title.toLowerCase().indexOf(tituloMenu) > -1);
|
|
265
316
|
let subTitulo = "";
|
|
@@ -269,10 +320,10 @@ export class InfoAuthenticationService {
|
|
|
269
320
|
}
|
|
270
321
|
if (item != null && item.length > 0) {
|
|
271
322
|
this._plataforma.PaginaAtiva = { Icone: item[0].Icon, Titulo: item[0].Title };
|
|
272
|
-
this._title.setTitle("Plataforma -
|
|
323
|
+
this._title.setTitle(`${this._translate.translate(this._plataforma.Config.title || "Plataforma")} - ${this._translate.translate(item[0].Title)}` + subTitulo);
|
|
273
324
|
}
|
|
274
325
|
else
|
|
275
|
-
this._plataforma.PaginaAtiva = { Icone: 'security', Titulo: 'Plataforma' };
|
|
326
|
+
this._plataforma.PaginaAtiva = { Icone: 'security', Titulo: this._plataforma.Config.title || 'Plataforma' };
|
|
276
327
|
}
|
|
277
328
|
}
|
|
278
329
|
getUrlGenerica(url) {
|
|
@@ -302,8 +353,8 @@ export class InfoAuthenticationService {
|
|
|
302
353
|
toPascalCase(value) {
|
|
303
354
|
return value.replace(/(^\w|-\w)/g, (w1, w2, i) => i == 0 ? w1.toUpperCase() : w1[1].toUpperCase());
|
|
304
355
|
}
|
|
305
|
-
/** @nocollapse */ static
|
|
306
|
-
/** @nocollapse */ static
|
|
356
|
+
/** @nocollapse */ static ɵfac = function InfoAuthenticationService_Factory(t) { return new (t || InfoAuthenticationService)(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.InfoSessionModel), i0.ɵɵinject(i4.InfoPlatformModel), i0.ɵɵinject(i5.InfoDataService), i0.ɵɵinject(i6.MatDialog), i0.ɵɵinject(i7.Utilities), i0.ɵɵinject(i8.InfoTranslateService), i0.ɵɵinject(i9.Title)); };
|
|
357
|
+
/** @nocollapse */ static ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: InfoAuthenticationService, factory: InfoAuthenticationService.ɵfac, providedIn: 'root' });
|
|
307
358
|
}
|
|
308
359
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoAuthenticationService, [{
|
|
309
360
|
type: Injectable,
|
|
@@ -312,9 +363,11 @@ export class InfoAuthenticationService {
|
|
|
312
363
|
}]
|
|
313
364
|
}], function () { return [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.InfoSessionModel }, { type: i4.InfoPlatformModel }, { type: i5.InfoDataService }, { type: i6.MatDialog }, { type: i7.Utilities }, { type: i8.InfoTranslateService }, { type: i9.Title }]; }, null); })();
|
|
314
365
|
export class RefreshSessionTimeModalComponent {
|
|
366
|
+
_ref;
|
|
367
|
+
time = 15;
|
|
368
|
+
interval;
|
|
315
369
|
constructor(_ref) {
|
|
316
370
|
this._ref = _ref;
|
|
317
|
-
this.time = 15;
|
|
318
371
|
}
|
|
319
372
|
ngOnInit() {
|
|
320
373
|
clearInterval(this.interval);
|
|
@@ -330,8 +383,8 @@ export class RefreshSessionTimeModalComponent {
|
|
|
330
383
|
ativo(ativo) {
|
|
331
384
|
this._ref.close({ modalAction: ativo ? InfoModalAction.Yes : InfoModalAction.No });
|
|
332
385
|
}
|
|
333
|
-
/** @nocollapse */ static
|
|
334
|
-
/** @nocollapse */ static
|
|
386
|
+
/** @nocollapse */ static ɵfac = function RefreshSessionTimeModalComponent_Factory(t) { return new (t || RefreshSessionTimeModalComponent)(i0.ɵɵdirectiveInject(i6.MatDialogRef)); };
|
|
387
|
+
/** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: RefreshSessionTimeModalComponent, selectors: [["ng-component"]], decls: 5, vars: 7, consts: [["modaltitle", "Inatividade", "labelsubmit", "Sim", 3, "labelcancel", "onsave"], [2, "font-size", "130%"]], template: function RefreshSessionTimeModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
335
388
|
i0.ɵɵelementStart(0, "info-modal", 0);
|
|
336
389
|
i0.ɵɵlistener("onsave", function RefreshSessionTimeModalComponent_Template_info_modal_onsave_0_listener() { return ctx.ativo(true); });
|
|
337
390
|
i0.ɵɵpipe(1, "translate");
|
|
@@ -343,7 +396,7 @@ export class RefreshSessionTimeModalComponent {
|
|
|
343
396
|
i0.ɵɵpropertyInterpolate2("labelcancel", "(", ctx.time, ") ", i0.ɵɵpipeBind1(1, 3, "Nao"), "");
|
|
344
397
|
i0.ɵɵadvance(3);
|
|
345
398
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 5, "VoceAindaEstaUtilizandoPlataforma"));
|
|
346
|
-
} }, dependencies: [i10.InfoModalComponent, i11.InfoTranslatePipe], encapsulation: 2 });
|
|
399
|
+
} }, dependencies: [i10.InfoModalComponent, i11.InfoTranslatePipe], encapsulation: 2 });
|
|
347
400
|
}
|
|
348
401
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RefreshSessionTimeModalComponent, [{
|
|
349
402
|
type: Component,
|
|
@@ -355,4 +408,4 @@ export class RefreshSessionTimeModalComponent {
|
|
|
355
408
|
`
|
|
356
409
|
}]
|
|
357
410
|
}], function () { return [{ type: i6.MatDialogRef }]; }, null); })();
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvc2VydmljZS9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBK0MsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFtQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUsvQyxNQUFNLE9BQU8seUJBQXlCO0lBSWxDLFlBQW9CLE9BQWUsRUFDZixLQUFpQixFQUNqQixPQUF5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LENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7b0hBckJRLGdDQUFnQzttR0FBaEMsZ0NBQWdDO1lBTDNDLHFDQUFpSTtZQUE1RixtSEFBVSxVQUFNLElBQUksQ0FBQyxJQUFDOztZQUNqRCxnQ0FBOEI7WUFBQSxZQUFxRDs7WUFBQSxpQkFBUSxFQUFBOztZQUR2Qiw4RkFBa0Q7WUFDeEYsZUFBcUQ7WUFBckQsK0VBQXFEOzs7dUZBSWxGLGdDQUFnQztjQVA1QyxTQUFTO2VBQUM7Z0JBQ1YsUUFBUSxFQUFFOzs7O0VBSVQ7YUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZUlucHV0LCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5mb1Nlc3Npb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL3Nlc3Npb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmZvUGxhdGZvcm1Nb2RlbCB9IGZyb20gJy4uL21vZGVsL3BsYXRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgSW5mb0xvZ2luTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9sb2dpbi5tb2RlbCc7XHJcbmltcG9ydCB7IEluZm9EYXRhU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5mb0Zvcm1Qcm9wTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9mb3JtLXByb3AubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEluZm9Nb2RhbEFjdGlvbiB9IGZyb20gJy4uL2VudW0nO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBJbmZvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXRpZXMgfSBmcm9tICcuLi91dGlscy91dGlsaXRpZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbmZvQXV0aGVudGljYXRpb25TZXJ2aWNlICB7XHJcbiAgICBwcml2YXRlIF9zZXNzaW9uVGltZUludGVydmFsO1xyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbkFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsIFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCwgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9zZXNzYW86IEluZm9TZXNzaW9uTW9kZWwsIFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGFmb3JtYTogSW5mb1BsYXRmb3JtTW9kZWwsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9kYXRhU2VydmljZTogSW5mb0RhdGFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWw6IE1hdERpYWxvZywgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF91dGlsaXRpZXM6IFV0aWxpdGllcywgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IEluZm9UcmFuc2xhdGVTZXJ2aWNlLCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RpdGxlOiBUaXRsZSkgeyB9XHJcblxyXG4gICAgZ2V0U2Vzc2FvKCk6IEluZm9TZXNzaW9uTW9kZWx7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nlc3NhbztcclxuICAgIH1cclxuXHJcbiAgICBnZXRQbGF0Zm9ybSgpOiBJbmZvUGxhdGZvcm1Nb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXRhZm9ybWE7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuQWN0aXZhdGUoYWN0aXZhdGVkUm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgcm91dGVyU3RhdGVTbmFwc2hvdDogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9nZ2VkKCkgfHwgIXRoaXMuX3Nlc3Npb25BY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LmRhdGFbJ1VSTCddIHx8IHJvdXRlclN0YXRlU25hcHNob3QudXJsO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2Vzc2lvblRpbWUoKTsgICAgICAgICAgICBcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWZpbmVQYWdpbmFBdGl2YSh1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJtaXNzaW9uKHVybCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwgPT0gJy8nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKHVybCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3Blcm1pc3Npb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJ25vdm8nKSA+IC0xICYmICF0aGlzLmhhc1Blcm1pc3Npb24odXJsLCAnbmV3JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3Blcm1pc3Npb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJ3Zpc3VhbGl6YXInKSA8IC0xICYmIGFjdGl2YXRlZFJvdXRlU25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpICE9IG51bGwgJiYgIXRoaXMuaGFzUGVybWlzc2lvbih1cmwsICdlZGl0JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3Blcm1pc3Npb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAxKSB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVybWlzc2FvID0gYWN0aXZhdGVkUm91dGVTbmFwc2hvdC5kYXRhWydQZXJtaXNzYW8nXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlcm1pc3NhbylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gKHBlcm1pc3Nhb1syXSB8fCAnJykucmVwbGFjZShSZWdFeHAoL1xceyguKj8pXFx9LywgJ2cnKSwgKF8sIHApID0+IGFjdGl2YXRlZFJvdXRlU25hcHNob3QucGFyYW1zW3BdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGF3YWl0IHRoaXMuX2RhdGFTZXJ2aWNlLmdldChwZXJtaXNzYW9bMF0sIHBlcm1pc3Nhb1sxXSwgcGFyYW1zKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzIHx8IHIuZGF0YSAhPSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwZXJtaXNzaW9uJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0xvZ2dlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuX3V0aWxpdGllcy5nZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5Ub2tlbktleSkgIT0gbnVsbCk7XHJcbiAgICB9XHJcblxyXG5cdHJlZnJlc2hTZXNzaW9uVGltZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb25BY3RpdmUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9zZXNzaW9uVGltZUludGVydmFsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Nhby5UZW1wb0luYXRpdmlkYWRlID09IG51bGwgfHwgdGhpcy5fc2Vzc2FvLlRlbXBvSW5hdGl2aWRhZGUgPD0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCB0ZW1wb1Nlc3NhbyA9IHRoaXMuX3Nlc3Nhby5UZW1wb0luYXRpdmlkYWRlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtcycsIG5ldyBEYXRlKCkudmFsdWVPZigpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX3Nlc3Npb25UaW1lSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVtcG9TZXNzYW8gPiAwKSAge1xyXG4gICAgICAgICAgICAgICAgdGVtcG9TZXNzYW8tLTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRlbXBvUmVzdGFudGUgPSBNYXRoLnJvdW5kKHRoaXMuX3Nlc3Nhby5UZW1wb0luYXRpdmlkYWRlIC0gKChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtcycpKSkgLyAxMDAwKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBvUmVzdGFudGUpICYmIHRlbXBvUmVzdGFudGUgPiAwKXtcclxuICAgICAgICAgICAgICAgIHRlbXBvU2Vzc2FvID0gdGVtcG9SZXN0YW50ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9zZXNzaW9uVGltZUludGVydmFsKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbkFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzTmFOKHRlbXBvUmVzdGFudGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBlbHNlIHRoaXMuc2hvd01lc3NhZ2UoKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHR9XHJcblxyXG4gICAgc2hvd01lc3NhZ2UoKXtcclxuICAgICAgICBsZXQgcmVmID0gdGhpcy5fbW9kYWwub3BlbihSZWZyZXNoU2Vzc2lvblRpbWVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocjogSW5mb0Zvcm1Qcm9wTW9kZWwpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmIChyICE9IG51bGwgJiYgKHIubW9kYWxBY3Rpb24gPT0gSW5mb01vZGFsQWN0aW9uLlllcyB8fCAodGhpcy5fc2Vzc2FvLlRlbXBvSW5hdGl2aWRhZGUgLSAoKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gcGFyc2VJbnQobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21zJykpKSAvIDEwMDApKSA+IDApKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25BY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoU2Vzc2lvblRpbWUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKHVzdWFyaW86IHN0cmluZywgc2VuaGE6IHN0cmluZywgcmVDYXB0Y2hhVG9rZW46IHN0cmluZyA9IG51bGwsIGNvZGlnbzJGQTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVTZXNzYW8oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS91c3VhcmlvL2F1dGVudGljYXInLCB7IFVzdWFyaW86IHVzdWFyaW8sIFNlbmhhOiBzZW5oYSwgUmVDYXB0Y2hhVG9rZW46IHJlQ2FwdGNoYVRva2VuLCBDb2RpZ28yRkE6IGNvZGlnbzJGQSB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuU3VjY2VzcyAmJiByLkRhdGEgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3V0aWxpdGllcy5zZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5Ub2tlbktleSwgci5EYXRhLlRva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmZvTG9naW5Nb2RlbChyLlN1Y2Nlc3MsIHIuTWVzc2FnZXMsIHIuRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRyb2NhckVtcHJlc2EodXN1YXJpbzogc3RyaW5nLCBlbXByZXNhSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS91c3VhcmlvL3Ryb2NhcmVtcHJlc2EnLCB7IEVtcHJlc2FJZDogZW1wcmVzYUlkIH0sIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyVG9rZW4oKSB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuU3VjY2VzcyAmJiByLkRhdGEgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91dGlsaXRpZXMuc2V0TG9jYWxTdG9yYWdlKHRoaXMuX3BsYXRhZm9ybWEuVG9rZW5LZXksIHIuRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY2xvbmFyKHVzdWFyaW86IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS91c3VhcmlvL2Nsb25hcicsIHsgVXN1YXJpbzogdXN1YXJpbyB9LCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCkgfSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hcCgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLlN1Y2Nlc3MgJiYgci5EYXRhICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXRpbGl0aWVzLnNldExvY2FsU3RvcmFnZSh0aGlzLl9wbGF0YWZvcm1hLlRva2VuS2V5LCByLkRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmZvTG9naW5Nb2RlbChyLlN1Y2Nlc3MsIHIuTWVzc2FnZXMsIHIuRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nb3V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTG9nZ2VkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS91c3VhcmlvL0xvZ291dCcsIG51bGwsIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyVG9rZW4oKSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZXNzYW8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnbG9naW4nKS50aGVuKHIgPT4geyBsb2NhdGlvbi5yZWxvYWQoKTsgfSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTZXNzYW8oKTtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ2xvZ2luJykudGhlbihyID0+IHsgbG9jYXRpb24ucmVsb2FkKCk7IH0pOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25zKHVybDogc3RyaW5nLCBsb2dBdGl2aWRhZGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vZ2V0cGVybWlzc2FvP3VybD0nICsgdXJsICsgJyZsb2dhdGl2aWRhZGU9JyArIGxvZ0F0aXZpZGFkZS50b1N0cmluZygpLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCkgfSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hcCgocjogYW55KSA9PiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUcm9jYVNlbmhhKG1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9Ucm9jYXJTZW5oYScsIG1vZGVsLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCkgfSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hcCgocjogYW55KSA9PiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSZWN1cGVyYXJTZW5oYShtb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vUmVjdXBlcmFyU2VuaGEnLCBtb2RlbCwgeyBoZWFkZXJzOiB0aGlzLl9kYXRhU2VydmljZS5nZXRIZWFkZXJUb2tlbigpIH0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHI6IGFueSkgPT4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzZXRhclNlbmhhKG1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9SZXNldGFyU2VuaGEnLCBtb2RlbClcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hcCgocjogYW55KSA9PiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2dpblJlc291cmNlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS9hcHAvR2V0TG9naW5SZXNvdXJjZXMnKVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyOiBhbnkpID0+IG5ldyBJbmZvTG9naW5Nb2RlbChyLlN1Y2Nlc3MsIHIuTWVzc2FnZXMsIHIuRGF0YSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc1Blcm1pc3Npb24odXJsOiBzdHJpbmcsIGtleUZ1bmN0aW9uOiBzdHJpbmcgPSAndmlldycpOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgaWYgKHVybCA9PSAnLycgJiYga2V5RnVuY3Rpb24gPT0gJ3ZpZXcnKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IHVybEdlbmVyaWNhID0gdGhpcy5nZXRVcmxHZW5lcmljYSh1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXNzYW8uUGVybWlzc29lcy5zb21lKHMgPT4gcy5VUkwgPT0gdXJsR2VuZXJpY2EgJiYgcy5DaGF2ZUZ1bmNpb25hbGlkYWRlID09IGtleUZ1bmN0aW9uICYmIHMuQWNlc3NvKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uKHVybDogc3RyaW5nLCBsb2dBdGl2aWRhZGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cclxuICAgICAgICBsZXQgdXJsR2VuZXJpY2EgPSB0aGlzLmdldFVybEdlbmVyaWNhKHVybCk7XHJcbiAgICAgICAgbGV0IGNvbnRlbVVybCA9IHRoaXMuX3Nlc3Nhby5QZXJtaXNzb2VzLnNvbWUocyA9PiBzLlVSTCA9PSB1cmxHZW5lcmljYSk7XHJcbiAgICAgICAgaWYgKGNvbnRlbVVybCkge1xyXG4gICAgICAgICAgICBpZiAobG9nQXRpdmlkYWRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGFTZXNzYW8odXJsKS5waXBlKG1hcChyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmV0LnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMSkgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJtaXNzaW9ucyh1cmxHZW5lcmljYSwgbG9nQXRpdmlkYWRlKS5waXBlKG1hcChyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldC5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXQuZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2Vzc2FvLlBlcm1pc3NvZXMuZmlsdGVyKHMgPT4gcy5VUkwgPT0gaXRlbS5VUkwgJiYgcy5DaGF2ZUZ1bmNpb25hbGlkYWRlID09IGl0ZW0uQ2hhdmVGdW5jaW9uYWxpZGFkZSkubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXNzYW8uUGVybWlzc29lcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXQuZGF0YS5zb21lKHMgPT4gcy5VUkwgPT0gdXJsR2VuZXJpY2EpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3V0aWxpdGllcy5zZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5TZXNzaW9uS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLl9zZXNzYW8pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4geyBcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAxKSB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYVNlc3Nhbyh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLmdldCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby92YWxpZGFzZXNzYW8/dXJsPScgKyB1cmwsIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyVG9rZW4oKSB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocjogYW55KSA9PiBuZXcgSW5mb0xvZ2luTW9kZWwociA9PT0gdHJ1ZSwgJycsIHIpKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlU2Vzc2FvKCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgha2V5LmluY2x1ZGVzKCdEYXNoYm9hcmQnKSAmJiAha2V5LmluY2x1ZGVzKCdjb2xzJykpIFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsU3RvcmFnZVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmluZVBhZ2luYUF0aXZhKHVybCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcGxhdGFmb3JtYS5NZW51ID09IG51bGwgfHwgdXJsID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGxhdGFmb3JtYS5QYWdpbmFBdGl2YSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhdXg6IHN0cmluZ1tdID0gdXJsLnN1YnN0cmluZygxKS5yZXBsYWNlKC8tL2csICcnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgbGV0IHRpdHVsb01lbnU6IHN0cmluZyA9IGF1eC5sZW5ndGggPiAwID8gYXV4WzBdLnRvU3RyaW5nKCkgOiB1cmw7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRyb3NVcmw6IHN0cmluZ1tdID0gdXJsLnNwbGl0KCcvJykuc2xpY2UoMik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRpdHVsb01lbnUuaW5kZXhPZignYXNoYm9hcmQnKSA+IC0xKVxyXG4gICAgICAgICAgICB0aGlzLl9wbGF0YWZvcm1hLlBhZ2luYUF0aXZhID0geyBJY29uZTogJ3dpZGdldHMnLCBUaXR1bG86ICdEYXNoYm9hcmQnIH07ICBcclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtOiBhbnkgPSB0aGlzLl9wbGF0YWZvcm1hLk1lbnUuZmlsdGVyKG0gPT4gbS5UaXRsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGl0dWxvTWVudSkgPiAtMSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHN1YlRpdHVsbyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldHJvc1VybC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzR3VpZChwYXJhbWV0cm9zVXJsW2ldKSAmJiBpc05hTihwYXJzZUZsb2F0KHBhcmFtZXRyb3NVcmxbaV0pKSlcclxuICAgICAgICAgICAgICAgICAgICBzdWJUaXR1bG8gKz0gXCIgLSBcIiArIHRoaXMuX3RyYW5zbGF0ZS50cmFuc2xhdGUodGhpcy50b1Bhc2NhbENhc2UocGFyYW1ldHJvc1VybFtpXSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGl0ZW0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxhdGFmb3JtYS5QYWdpbmFBdGl2YSA9IHsgSWNvbmU6IGl0ZW1bMF0uSWNvbiwgVGl0dWxvOiBpdGVtWzBdLlRpdGxlIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aXRsZS5zZXRUaXRsZShcIlBsYXRhZm9ybWEgLSBcIiArIHRoaXMuX3RyYW5zbGF0ZS50cmFuc2xhdGUoaXRlbVswXS5UaXRsZSkgKyBzdWJUaXR1bG8pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIHRoaXMuX3BsYXRhZm9ybWEuUGFnaW5hQXRpdmEgPSB7IEljb25lOiAnc2VjdXJpdHknLCBUaXR1bG86ICdQbGF0YWZvcm1hJyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRVcmxHZW5lcmljYSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJldG9ybm8gPSBcIlwiO1xyXG4gICAgICAgIGxldCB1cmxQYXJ0czogc3RyaW5nW10gPSB1cmwuc3BsaXQoJy8nKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVybFBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VGbG9hdCh1cmxQYXJ0c1tpXSkpIHx8IHRoaXMuaXNHdWlkKHVybFBhcnRzW2ldKSB8fCB1cmxQYXJ0c1tpXS50b0xvd2VyQ2FzZSgpID09ICdub3ZvJylcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXRvcm5vICs9ICcvJyArIHVybFBhcnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0b3Juby5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsaW5nKGU6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZUlucHV0PEluZm9Mb2dpbk1vZGVsPiB7XHJcbiAgICAgICAgaWYgKGUuc3RhdHVzID09IDQwMSkgXHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGUuc3RhdHVzID09IDUwMClcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJzUwMCcpO1xyXG5cclxuICAgICAgICBlbHNlIGlmIChlLmVycm9yICE9IG51bGwgJiYgZS5lcnJvci5lcnJvcl9kZXNjcmlwdGlvbiAhPSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEluZm9Mb2dpbk1vZGVsKGZhbHNlLCBlLmVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKSk7XHJcblxyXG4gICAgICAgIGVsc2UgcmV0dXJuIG9mKG5ldyBJbmZvTG9naW5Nb2RlbChmYWxzZSwgJ0hvdXZlIHVtIHByb2JsZW1hIGUgbsOjbyBmb2kgcG9zc8OtdmVsIGNvbmVjdGFyJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNHdWlkKHZhbHVlKSA6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgJycpLm1hdGNoKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9QYXNjYWxDYXNlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyheXFx3fC1cXHcpL2csICh3MSwgdzIsIGkpID0+IGkgPT0gMCA/IHcxLnRvVXBwZXJDYXNlKCkgOiB3MVsxXS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdDxpbmZvLW1vZGFsIG1vZGFsdGl0bGU9XCJJbmF0aXZpZGFkZVwiIChvbnNhdmUpPVwiYXRpdm8odHJ1ZSlcIiBsYWJlbHN1Ym1pdD1cIlNpbVwiIGxhYmVsY2FuY2VsPVwiKHt7IHRpbWUgfX0pIHt7ICdOYW8nIHwgdHJhbnNsYXRlIH19XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZToxMzAlXCI+e3sgJ1ZvY2VBaW5kYUVzdGFVdGlsaXphbmRvUGxhdGFmb3JtYScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG5cdFx0PC9pbmZvLW1vZGFsPlxyXG5cdGBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZnJlc2hTZXNzaW9uVGltZU1vZGFsQ29tcG9uZW50IHtcclxuICAgIHRpbWUgPSAxNTtcclxuICAgIGludGVydmFsO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9yZWY6IE1hdERpYWxvZ1JlZjxSZWZyZXNoU2Vzc2lvblRpbWVNb2RhbENvbXBvbmVudD4pIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZSA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWUtLTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0aXZvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgYXRpdm8oYXRpdm86IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9yZWYuY2xvc2UoeyBtb2RhbEFjdGlvbjogYXRpdm8gPyBJbmZvTW9kYWxBY3Rpb24uWWVzIDogSW5mb01vZGFsQWN0aW9uLk5vIH0pO1xyXG4gICAgfVxyXG59Il19
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvc2VydmljZS9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBNEQsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFtQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUsvQyxNQUFNLE9BQU8seUJBQXlCO0lBSWQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFD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L2NvcmUnO1xyXG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmFibGVJbnB1dCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEluZm9TZXNzaW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9zZXNzaW9uLm1vZGVsJztcclxuaW1wb3J0IHsgSW5mb1BsYXRmb3JtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9wbGF0Zm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEluZm9Mb2dpbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvbG9naW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBJbmZvRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEluZm9Gb3JtUHJvcE1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvZm9ybS1wcm9wLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJbmZvTW9kYWxBY3Rpb24gfSBmcm9tICcuLi9lbnVtJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSW5mb1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbGl0aWVzIH0gZnJvbSAnLi4vdXRpbHMvdXRpbGl0aWVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0F1dGhlbnRpY2F0aW9uU2VydmljZSBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcclxuICAgIHByaXZhdGUgX3Nlc3Npb25UaW1lSW50ZXJ2YWw7XHJcbiAgICBwcml2YXRlIF9zZXNzaW9uQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3Nlc3NhbzogSW5mb1Nlc3Npb25Nb2RlbCwgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9wbGF0YWZvcm1hOiBJbmZvUGxhdGZvcm1Nb2RlbCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2RhdGFTZXJ2aWNlOiBJbmZvRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbDogTWF0RGlhbG9nLCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3V0aWxpdGllczogVXRpbGl0aWVzLCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogSW5mb1RyYW5zbGF0ZVNlcnZpY2UsIFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlKSB7IH1cclxuXHJcbiAgICBnZXRTZXNzYW8oKTogSW5mb1Nlc3Npb25Nb2RlbHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2FvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsYXRmb3JtKCk6IEluZm9QbGF0Zm9ybU1vZGVsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGxhdGFmb3JtYTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5BY3RpdmF0ZShhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCByb3V0ZXJTdGF0ZVNuYXBzaG90OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNMb2dnZWQoKSB8fCAhdGhpcy5fc2Vzc2lvbkFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybCA9IGFjdGl2YXRlZFJvdXRlU25hcHNob3QuZGF0YVsnVVJMJ10gfHwgcm91dGVyU3RhdGVTbmFwc2hvdC51cmw7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTZXNzaW9uVGltZSgpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sIDEwMDApO1xyXG5cclxuICAgICAgICB0aGlzLmRlZmluZVBhZ2luYUF0aXZhKHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBlcm1pc3Npb24odXJsLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybCA9PSAnLycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1Blcm1pc3Npb24odXJsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgncGVybWlzc2lvbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignbm92bycpID4gLTEgJiYgIXRoaXMuaGFzUGVybWlzc2lvbih1cmwsICduZXcnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgncGVybWlzc2lvbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigndmlzdWFsaXphcicpIDwgLTEgJiYgYWN0aXZhdGVkUm91dGVTbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykgIT0gbnVsbCAmJiAhdGhpcy5oYXNQZXJtaXNzaW9uKHVybCwgJ2VkaXQnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgncGVybWlzc2lvbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDEpIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzYW8gPSBhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LmRhdGFbJ1Blcm1pc3NhbyddO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2FvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSAocGVybWlzc2FvWzJdIHx8ICcnKS5yZXBsYWNlKFJlZ0V4cCgvXFx7KC4qPylcXH0vLCAnZycpLCAoXywgcCkgPT4gYWN0aXZhdGVkUm91dGVTbmFwc2hvdC5wYXJhbXNbcF0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gYXdhaXQgdGhpcy5fZGF0YVNlcnZpY2UuZ2V0KHBlcm1pc3Nhb1swXSwgcGVybWlzc2FvWzFdLCBwYXJhbXMpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MgfHwgci5kYXRhICE9IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3Blcm1pc3Npb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTG9nZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5fdXRpbGl0aWVzLmdldExvY2FsU3RvcmFnZSh0aGlzLl9wbGF0YWZvcm1hLlRva2VuS2V5KSAhPSBudWxsKTtcclxuICAgIH1cclxuXHJcblx0cmVmcmVzaFNlc3Npb25UaW1lKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbkFjdGl2ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3Nlc3Npb25UaW1lSW50ZXJ2YWwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2FvLlRlbXBvSW5hdGl2aWRhZGUgPT0gbnVsbCB8fCB0aGlzLl9zZXNzYW8uVGVtcG9JbmF0aXZpZGFkZSA8PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHRlbXBvU2Vzc2FvID0gdGhpcy5fc2Vzc2FvLlRlbXBvSW5hdGl2aWRhZGU7XHJcbiAgICAgICAgdGhpcy5fdXRpbGl0aWVzLnNldExvY2FsU3RvcmFnZSgnbXMnLCBuZXcgRGF0ZSgpLnZhbHVlT2YoKS50b1N0cmluZygpKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9zZXNzaW9uVGltZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlbXBvU2Vzc2FvID4gMCkgIHtcclxuICAgICAgICAgICAgICAgIHRlbXBvU2Vzc2FvLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0ZW1wb1Jlc3RhbnRlID0gTWF0aC5yb3VuZCh0aGlzLl9zZXNzYW8uVGVtcG9JbmF0aXZpZGFkZSAtICgobmV3IERhdGUoKS52YWx1ZU9mKCkgLSBwYXJzZUludCh0aGlzLl91dGlsaXRpZXMuZ2V0TG9jYWxTdG9yYWdlKCdtcycpKSkgLyAxMDAwKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBvUmVzdGFudGUpICYmIHRlbXBvUmVzdGFudGUgPiAwKXtcclxuICAgICAgICAgICAgICAgIHRlbXBvU2Vzc2FvID0gdGVtcG9SZXN0YW50ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9zZXNzaW9uVGltZUludGVydmFsKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbkFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzTmFOKHRlbXBvUmVzdGFudGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBlbHNlIHRoaXMuc2hvd01lc3NhZ2UoKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHR9XHJcblxyXG4gICAgc2hvd01lc3NhZ2UoKXtcclxuICAgICAgICBsZXQgcmVmID0gdGhpcy5fbW9kYWwub3BlbihSZWZyZXNoU2Vzc2lvblRpbWVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocjogSW5mb0Zvcm1Qcm9wTW9kZWwpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmIChyICE9IG51bGwgJiYgKHIubW9kYWxBY3Rpb24gPT0gSW5mb01vZGFsQWN0aW9uLlllcyB8fCAodGhpcy5fc2Vzc2FvLlRlbXBvSW5hdGl2aWRhZGUgLSAoKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gcGFyc2VJbnQodGhpcy5fdXRpbGl0aWVzLmdldExvY2FsU3RvcmFnZSgnbXMnKSkpIC8gMTAwMCkpID4gMCkpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbkFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hTZXNzaW9uVGltZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4odXN1YXJpbzogc3RyaW5nLCBzZW5oYTogc3RyaW5nLCByZUNhcHRjaGFUb2tlbjogc3RyaW5nID0gbnVsbCwgY29kaWdvMkZBOiBzdHJpbmcgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZVNlc3NhbygpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vYXV0ZW50aWNhcicsIHRoaXMuX3V0aWxpdGllcy5qc29uVG9FbmNyeXB0KHsgVXN1YXJpbzogdXN1YXJpbywgU2VuaGE6IHNlbmhhLCBSZUNhcHRjaGFUb2tlbjogcmVDYXB0Y2hhVG9rZW4sIENvZGlnbzJGQTogY29kaWdvMkZBIH0pLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlckRlZmF1bHQoKSwgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hcCgocnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgOiBhbnkgPSB0aGlzLl91dGlsaXRpZXMuZGVjcnlwdFRvSnNvbihycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLlN1Y2Nlc3MgJiYgci5EYXRhICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91dGlsaXRpZXMuc2V0TG9jYWxTdG9yYWdlKHRoaXMuX3BsYXRhZm9ybWEuVG9rZW5LZXksIHIuRGF0YS5Ub2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0cm9jYXJFbXByZXNhKHVzdWFyaW86IHN0cmluZywgZW1wcmVzYUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby90cm9jYXJlbXByZXNhJywgdGhpcy5fdXRpbGl0aWVzLmpzb25Ub0VuY3J5cHQoeyBFbXByZXNhSWQ6IGVtcHJlc2FJZCB9KSwgeyBoZWFkZXJzOiB0aGlzLl9kYXRhU2VydmljZS5nZXRIZWFkZXJUb2tlbigpLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA6IGFueSA9IHRoaXMuX3V0aWxpdGllcy5kZWNyeXB0VG9Kc29uKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuU3VjY2VzcyAmJiByLkRhdGEgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91dGlsaXRpZXMuc2V0TG9jYWxTdG9yYWdlKHRoaXMuX3BsYXRhZm9ybWEuVG9rZW5LZXksIHIuRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0cm9jYXJVbmlkYWRlKHVzdWFyaW86IHN0cmluZywgZW1wcmVzYUlkOiBudW1iZXIsIHVuaWRhZGVJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vdHJvY2FydW5pZGFkZScsIHRoaXMuX3V0aWxpdGllcy5qc29uVG9FbmNyeXB0KHsgRW1wcmVzYUlkOiBlbXByZXNhSWQsIFVuaWRhZGVJZDogdW5pZGFkZUlkIH0pLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCksIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByIDogYW55ID0gdGhpcy5fdXRpbGl0aWVzLmRlY3J5cHRUb0pzb24ocnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5TdWNjZXNzICYmIHIuRGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3V0aWxpdGllcy5zZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5Ub2tlbktleSwgci5EYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyb2NhckNsaWVudGUodXN1YXJpbzogc3RyaW5nLCBjbGllbnRlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuX3BsYXRhZm9ybWEuQ29uZmlnLndlYmFwaVVybCArICdjZW50cm9jb250cm9sZS91c3VhcmlvL3Ryb2NhcmNsaWVudGUnLCB0aGlzLl91dGlsaXRpZXMuanNvblRvRW5jcnlwdCh7IENsaWVudGVJZDogY2xpZW50ZUlkIH0pLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCksIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByIDogYW55ID0gdGhpcy5fdXRpbGl0aWVzLmRlY3J5cHRUb0pzb24ocnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5TdWNjZXNzICYmIHIuRGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3V0aWxpdGllcy5zZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5Ub2tlbktleSwgci5EYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjbG9uYXIodXN1YXJpbzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vY2xvbmFyJywgdGhpcy5fdXRpbGl0aWVzLmpzb25Ub0VuY3J5cHQoeyBVc3VhcmlvOiB1c3VhcmlvIH0pLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCksIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByIDogYW55ID0gdGhpcy5fdXRpbGl0aWVzLmRlY3J5cHRUb0pzb24ocnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5TdWNjZXNzICYmIHIuRGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3V0aWxpdGllcy5zZXRMb2NhbFN0b3JhZ2UodGhpcy5fcGxhdGFmb3JtYS5Ub2tlbktleSwgci5EYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xvZ2dlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9Mb2dvdXQnLCBudWxsLCB7IGhlYWRlcnM6IHRoaXMuX2RhdGFTZXJ2aWNlLmdldEhlYWRlclRva2VuKCksIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlc3NhbygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdsb2dpbicpLnRoZW4ociA9PiB7IGxvY2F0aW9uLnJlbG9hZCgpOyB9KTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlc3NhbygpO1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnbG9naW4nKS50aGVuKHIgPT4geyBsb2NhdGlvbi5yZWxvYWQoKTsgfSk7ICAgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGVybWlzc2lvbnModXJsOiBzdHJpbmcsIGxvZ0F0aXZpZGFkZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLmdldCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9nZXRwZXJtaXNzYW8/JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl91dGlsaXRpZXMuanNvblRvRW5jcnlwdCgndXJsPScgKyB1cmwgKyAnJmxvZ2F0aXZpZGFkZT0nICsgbG9nQXRpdmlkYWRlLnRvU3RyaW5nKCkpKSwgeyBoZWFkZXJzOiB0aGlzLl9kYXRhU2VydmljZS5nZXRIZWFkZXJUb2tlbigpLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgocnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgOiBhbnkgPSB0aGlzLl91dGlsaXRpZXMuZGVjcnlwdFRvSnNvbihycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VHJvY2FTZW5oYShtb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vVHJvY2FyU2VuaGEnLCB0aGlzLl91dGlsaXRpZXMuanNvblRvRW5jcnlwdChtb2RlbCksIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyVG9rZW4oKSwgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHJzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByIDogYW55ID0gdGhpcy5fdXRpbGl0aWVzLmRlY3J5cHRUb0pzb24ocnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmZvTG9naW5Nb2RlbChyLlN1Y2Nlc3MsIHIuTWVzc2FnZXMsIHIuRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmVycm9ySGFuZGxpbmcoZSkpXHJcbiAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJlY3VwZXJhclNlbmhhKG1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9SZWN1cGVyYXJTZW5oYScsIHRoaXMuX3V0aWxpdGllcy5qc29uVG9FbmNyeXB0KG1vZGVsKSwgeyBoZWFkZXJzOiB0aGlzLl9kYXRhU2VydmljZS5nZXRIZWFkZXJUb2tlbigpLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgocnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgOiBhbnkgPSB0aGlzLl91dGlsaXRpZXMuZGVjcnlwdFRvSnNvbihycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzZXRhclNlbmhhKG1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvdXN1YXJpby9SZXNldGFyU2VuaGEnLCB0aGlzLl91dGlsaXRpZXMuanNvblRvRW5jcnlwdChtb2RlbCksIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyRGVmYXVsdCgpLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgocnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgOiBhbnkgPSB0aGlzLl91dGlsaXRpZXMuZGVjcnlwdFRvSnNvbihycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIuU3VjY2Vzcywgci5NZXNzYWdlcywgci5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9naW5SZXNvdXJjZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLmdldCh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy53ZWJhcGlVcmwgKyAnY2VudHJvY29udHJvbGUvYXBwL0dldExvZ2luUmVzb3VyY2VzJywgeyBoZWFkZXJzOiB0aGlzLl9kYXRhU2VydmljZS5nZXRIZWFkZXJEZWZhdWx0KCksIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChyczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA6IGFueSA9IHRoaXMuX3V0aWxpdGllcy5kZWNyeXB0VG9Kc29uKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5mb0xvZ2luTW9kZWwoci5TdWNjZXNzLCByLk1lc3NhZ2VzLCByLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5lcnJvckhhbmRsaW5nKGUpKVxyXG4gICAgICAgICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNQZXJtaXNzaW9uKHVybDogc3RyaW5nLCBrZXlGdW5jdGlvbjogc3RyaW5nID0gJ3ZpZXcnKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIGlmICh1cmwgPT0gJy8nICYmIGtleUZ1bmN0aW9uID09ICd2aWV3JylcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIGxldCB1cmxHZW5lcmljYSA9IHRoaXMuZ2V0VXJsR2VuZXJpY2EodXJsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2FvLlBlcm1pc3NvZXMuc29tZShzID0+IHMuVVJMID09IHVybEdlbmVyaWNhICYmIHMuQ2hhdmVGdW5jaW9uYWxpZGFkZSA9PSBrZXlGdW5jdGlvbiAmJiBzLkFjZXNzbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGVybWlzc2lvbih1cmw6IHN0cmluZywgbG9nQXRpdmlkYWRlOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHJcbiAgICAgICAgbGV0IHVybEdlbmVyaWNhID0gdGhpcy5nZXRVcmxHZW5lcmljYSh1cmwpO1xyXG4gICAgICAgIGxldCBjb250ZW1VcmwgPSB0aGlzLl9zZXNzYW8uUGVybWlzc29lcy5zb21lKHMgPT4gcy5VUkwgPT0gdXJsR2VuZXJpY2EpO1xyXG4gICAgICAgIGlmIChjb250ZW1VcmwpIHtcclxuICAgICAgICAgICAgaWYgKGxvZ0F0aXZpZGFkZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhU2Vzc2FvKHVybCkucGlwZShtYXAocmV0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJldC5zdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDEpIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChvYnNlcnZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGVybWlzc2lvbnModXJsR2VuZXJpY2EsIGxvZ0F0aXZpZGFkZSkucGlwZShtYXAocmV0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXQuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Nlc3Nhby5QZXJtaXNzb2VzLmZpbHRlcihzID0+IHMuVVJMID09IGl0ZW0uVVJMICYmIHMuQ2hhdmVGdW5jaW9uYWxpZGFkZSA9PSBpdGVtLkNoYXZlRnVuY2lvbmFsaWRhZGUpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vzc2FvLlBlcm1pc3NvZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0LmRhdGEuc29tZShzID0+IHMuVVJMID09IHVybEdlbmVyaWNhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91dGlsaXRpZXMuc2V0TG9jYWxTdG9yYWdlKHRoaXMuX3BsYXRhZm9ybWEuU2Vzc2lvbktleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5fc2Vzc2FvKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHsgXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMSkgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGFTZXNzYW8odXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgIC5nZXQodGhpcy5fcGxhdGFmb3JtYS5Db25maWcud2ViYXBpVXJsICsgJ2NlbnRyb2NvbnRyb2xlL3VzdWFyaW8vdmFsaWRhc2Vzc2FvPycgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5fdXRpbGl0aWVzLmpzb25Ub0VuY3J5cHQoJ3VybD0nICsgdXJsKSksIHsgaGVhZGVyczogdGhpcy5fZGF0YVNlcnZpY2UuZ2V0SGVhZGVyVG9rZW4oKSwgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA6IGFueSA9IHRoaXMuX3V0aWxpdGllcy5kZWNyeXB0VG9Kc29uKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZm9Mb2dpbk1vZGVsKHIgPT09IHRydWUsICcnLCByKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuZXJyb3JIYW5kbGluZyhlKSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVTZXNzYW8oKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMobG9jYWxTdG9yYWdlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFrZXkuaW5jbHVkZXMoJ0Rhc2hib2FyZCcpICYmICFrZXkuaW5jbHVkZXMoJ2NvbHMnKSAmJiAha2V5LmluY2x1ZGVzKCdfJykpIFxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWZpbmVQYWdpbmFBdGl2YSh1cmwpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BsYXRhZm9ybWEuTWVudSA9PSBudWxsIHx8IHVybCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYXRhZm9ybWEuUGFnaW5hQXRpdmEgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYXV4OiBzdHJpbmdbXSA9IHVybC5zdWJzdHJpbmcoMSkucmVwbGFjZSgvLS9nLCAnJykudG9Mb3dlckNhc2UoKS5zcGxpdCgnLycpO1xyXG4gICAgICAgIGxldCB0aXR1bG9NZW51OiBzdHJpbmcgPSBhdXgubGVuZ3RoID4gMCA/IGF1eFswXS50b1N0cmluZygpIDogdXJsO1xyXG4gICAgICAgIGxldCBwYXJhbWV0cm9zVXJsOiBzdHJpbmdbXSA9IHVybC5zcGxpdCgnLycpLnNsaWNlKDIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aXR1bG9NZW51LmluZGV4T2YoJ25pY2lvJykgPiAtMSlcclxuICAgICAgICAgICAgdGhpcy5fcGxhdGFmb3JtYS5QYWdpbmFBdGl2YSA9IHsgSWNvbmU6ICd3aWRnZXRzJywgVGl0dWxvOiAnSW5pY2lvJyB9OyAgXHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaXRlbTogYW55ID0gdGhpcy5fcGxhdGFmb3JtYS5NZW51LmZpbHRlcihtID0+IG0uVGl0bGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRpdHVsb01lbnUpID4gLTEpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzdWJUaXR1bG8gPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRyb3NVcmwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0d1aWQocGFyYW1ldHJvc1VybFtpXSkgJiYgaXNOYU4ocGFyc2VGbG9hdChwYXJhbWV0cm9zVXJsW2ldKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViVGl0dWxvICs9IFwiIC0gXCIgKyB0aGlzLl90cmFuc2xhdGUudHJhbnNsYXRlKHRoaXMudG9QYXNjYWxDYXNlKHBhcmFtZXRyb3NVcmxbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBpdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXRhZm9ybWEuUGFnaW5hQXRpdmEgPSB7IEljb25lOiBpdGVtWzBdLkljb24sIFRpdHVsbzogaXRlbVswXS5UaXRsZSB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGl0bGUuc2V0VGl0bGUoYCR7dGhpcy5fdHJhbnNsYXRlLnRyYW5zbGF0ZSh0aGlzLl9wbGF0YWZvcm1hLkNvbmZpZy50aXRsZSB8fCBcIlBsYXRhZm9ybWFcIil9IC0gJHt0aGlzLl90cmFuc2xhdGUudHJhbnNsYXRlKGl0ZW1bMF0uVGl0bGUpfWArIHN1YlRpdHVsbyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy5fcGxhdGFmb3JtYS5QYWdpbmFBdGl2YSA9IHsgSWNvbmU6ICdzZWN1cml0eScsIFRpdHVsbzogdGhpcy5fcGxhdGFmb3JtYS5Db25maWcudGl0bGUgfHwgJ1BsYXRhZm9ybWEnIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFVybEdlbmVyaWNhKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmV0b3JubyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHVybFBhcnRzOiBzdHJpbmdbXSA9IHVybC5zcGxpdCgnLycpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJsUGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KHVybFBhcnRzW2ldKSkgfHwgdGhpcy5pc0d1aWQodXJsUGFydHNbaV0pIHx8IHVybFBhcnRzW2ldLnRvTG93ZXJDYXNlKCkgPT0gJ25vdm8nKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJldG9ybm8gKz0gJy8nICsgdXJsUGFydHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRvcm5vLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVycm9ySGFuZGxpbmcoZTogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlSW5wdXQ8SW5mb0xvZ2luTW9kZWw+IHtcclxuICAgICAgICBpZiAoZS5zdGF0dXMgPT0gNDAxKSBcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAoZS5zdGF0dXMgPT0gNTAwKVxyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnNTAwJyk7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGUuZXJyb3IgIT0gbnVsbCAmJiBlLmVycm9yLmVycm9yX2Rlc2NyaXB0aW9uICE9IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgSW5mb0xvZ2luTW9kZWwoZmFsc2UsIGUuZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pKTtcclxuXHJcbiAgICAgICAgZWxzZSByZXR1cm4gb2YobmV3IEluZm9Mb2dpbk1vZGVsKGZhbHNlLCAnSG91dmUgdW0gcHJvYmxlbWEgZSBuw6NvIGZvaSBwb3Nzw612ZWwgY29uZWN0YXInKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0d1aWQodmFsdWUpIDogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCAnJykubWF0Y2goJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykgIT09IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b1Bhc2NhbENhc2UodmFsdWU6IHN0cmluZyk6IHN0cmluZ3tcclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKF5cXHd8LVxcdykvZywgKHcxLCB3MiwgaSkgPT4gaSA9PSAwID8gdzEudG9VcHBlckNhc2UoKSA6IHcxWzFdLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0PGluZm8tbW9kYWwgbW9kYWx0aXRsZT1cIkluYXRpdmlkYWRlXCIgKG9uc2F2ZSk9XCJhdGl2byh0cnVlKVwiIGxhYmVsc3VibWl0PVwiU2ltXCIgbGFiZWxjYW5jZWw9XCIoe3sgdGltZSB9fSkge3sgJ05hbycgfCB0cmFuc2xhdGUgfX1cIj5cclxuICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOjEzMCVcIj57eyAnVm9jZUFpbmRhRXN0YVV0aWxpemFuZG9QbGF0YWZvcm1hJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcblx0XHQ8L2luZm8tbW9kYWw+XHJcblx0YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVmcmVzaFNlc3Npb25UaW1lTW9kYWxDb21wb25lbnQge1xyXG4gICAgdGltZSA9IDE1O1xyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlZjogTWF0RGlhbG9nUmVmPFJlZnJlc2hTZXNzaW9uVGltZU1vZGFsQ29tcG9uZW50PikgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMudGltZS0tO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXRpdm8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBhdGl2byhhdGl2bzogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3JlZi5jbG9zZSh7IG1vZGFsQWN0aW9uOiBhdGl2byA/IEluZm9Nb2RhbEFjdGlvbi5ZZXMgOiBJbmZvTW9kYWxBY3Rpb24uTm8gfSk7XHJcbiAgICB9XHJcbn0iXX0=
|