@tuki-io/tuki-widgets 0.0.58 → 0.0.60
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/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +3 -3
- package/esm2020/users-list/src/services/move-user.service.mjs +13 -13
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +16 -15
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +16 -15
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -28,11 +28,11 @@ export class DeviceMoveUserWizardComponent {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
DeviceMoveUserWizardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceMoveUserWizardComponent, deps: [{ token: i1.DnsService }, { token: i2.UserService }, { token: i3.SiteSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
31
|
-
DeviceMoveUserWizardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DeviceMoveUserWizardComponent, selector: "app-device-move-user-wizard", inputs: { device: "device" }, ngImport: i0, template: "<form>\n <div class=\"device-item-panel-container\">\n <div class=\"device-left\">\n <div\n class=\"device-migration-status\"\n [ngClass]=\"{'--checked': device.toMigrate}\"\n >\n <mat-checkbox\n class=\"rounded\"\n [checked]=\"device.toMigrate\"\n ></mat-checkbox>\n </div>\n </div>\n <div class=\"device-right\">\n <div class=\"device-header\">\n <div class=\"device-name\">{{ device.name }}</div>\n <div class=\"device-migrate\" *ngIf=\"device.isEligible\">\n <mat-checkbox name=\"toMigrate\"\n [(ngModel)]=\"device.toMigrate\"\n >Migrate this device</mat-checkbox>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"device-info\">\n <div class=\"device-info__item\">\n <div class=\"key\">Device type</div>\n <div class=\"value\">{{ device.
|
|
31
|
+
DeviceMoveUserWizardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DeviceMoveUserWizardComponent, selector: "app-device-move-user-wizard", inputs: { device: "device" }, ngImport: i0, template: "<form>\n <div class=\"device-item-panel-container\">\n <div class=\"device-left\">\n <div\n class=\"device-migration-status\"\n [ngClass]=\"{'--checked': device.toMigrate}\"\n >\n <mat-checkbox\n class=\"rounded\"\n [checked]=\"device.toMigrate\"\n ></mat-checkbox>\n </div>\n </div>\n <div class=\"device-right\">\n <div class=\"device-header\">\n <div class=\"device-name\">{{ device.name }}</div>\n <div class=\"device-migrate\" *ngIf=\"device.isEligible\">\n <mat-checkbox name=\"toMigrate\"\n [(ngModel)]=\"device.toMigrate\"\n >Migrate this device</mat-checkbox>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"device-info\">\n <div *ngIf=\"device.product\" class=\"device-info__item\">\n <div class=\"key\">Device type</div>\n <div class=\"value\">{{ device.product }}</div>\n </div>\n <div *ngIf=\"device.mac\" class=\"device-info__item\">\n <div class=\"key\">MAC address</div>\n <div class=\"value\">{{ device.mac }}</div>\n </div>\n\n </div>\n </div>\n </div>\n</form>\n", styles: [".device-item-panel-container{display:flex;border:1px solid gray;border-radius:.5rem;margin-bottom:1.5rem;overflow:hidden}.device-migration-status{height:100%;padding:1rem;background-color:#ffebc2}.device-right{width:100%;display:flex;flex-direction:column;justify-content:space-between;padding:1rem 2rem}.device-header{display:flex;justify-content:space-between;align-items:center;padding:0 0 7px}.device-header .device-name{font-size:18px;font-weight:700}.device-header .device-migrate{font-weight:700}.device-header .device-migrate .mat-checkbox ::ng-deep .mat-checkbox-label{margin-left:.4rem}.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#05f!important}.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background,.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#05f!important}.device-header .device-migrate ::ng-deep .mat-checkbox.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#05f!important}.device-info{display:grid;grid-template-columns:auto auto;gap:2.5rem}.device-info__item{font-size:16px;font-weight:700}.device-info__item .key{margin:10px 0 0}.device-info__item .value{color:#a0a0a0}.--checked{background-color:#cef5eb}.mat-checkbox ::ng-deep .mat-checkbox-inner-container{width:20px;height:20px}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#185e46!important}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background,::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#185e46}::ng-deep .mat-checkbox.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#185e46!important}::ng-deep .rounded{pointer-events:none}::ng-deep .rounded .mat-checkbox-background,::ng-deep .rounded .mat-checkbox-frame{border-radius:50%!important}::ng-deep .mat-divider{display:block;margin:0;border-top-width:2px;border-top-style:solid}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
|
|
32
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceMoveUserWizardComponent, decorators: [{
|
|
33
33
|
type: Component,
|
|
34
|
-
args: [{ selector: 'app-device-move-user-wizard', template: "<form>\n <div class=\"device-item-panel-container\">\n <div class=\"device-left\">\n <div\n class=\"device-migration-status\"\n [ngClass]=\"{'--checked': device.toMigrate}\"\n >\n <mat-checkbox\n class=\"rounded\"\n [checked]=\"device.toMigrate\"\n ></mat-checkbox>\n </div>\n </div>\n <div class=\"device-right\">\n <div class=\"device-header\">\n <div class=\"device-name\">{{ device.name }}</div>\n <div class=\"device-migrate\" *ngIf=\"device.isEligible\">\n <mat-checkbox name=\"toMigrate\"\n [(ngModel)]=\"device.toMigrate\"\n >Migrate this device</mat-checkbox>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"device-info\">\n <div class=\"device-info__item\">\n <div class=\"key\">Device type</div>\n <div class=\"value\">{{ device.
|
|
34
|
+
args: [{ selector: 'app-device-move-user-wizard', template: "<form>\n <div class=\"device-item-panel-container\">\n <div class=\"device-left\">\n <div\n class=\"device-migration-status\"\n [ngClass]=\"{'--checked': device.toMigrate}\"\n >\n <mat-checkbox\n class=\"rounded\"\n [checked]=\"device.toMigrate\"\n ></mat-checkbox>\n </div>\n </div>\n <div class=\"device-right\">\n <div class=\"device-header\">\n <div class=\"device-name\">{{ device.name }}</div>\n <div class=\"device-migrate\" *ngIf=\"device.isEligible\">\n <mat-checkbox name=\"toMigrate\"\n [(ngModel)]=\"device.toMigrate\"\n >Migrate this device</mat-checkbox>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"device-info\">\n <div *ngIf=\"device.product\" class=\"device-info__item\">\n <div class=\"key\">Device type</div>\n <div class=\"value\">{{ device.product }}</div>\n </div>\n <div *ngIf=\"device.mac\" class=\"device-info__item\">\n <div class=\"key\">MAC address</div>\n <div class=\"value\">{{ device.mac }}</div>\n </div>\n\n </div>\n </div>\n </div>\n</form>\n", styles: [".device-item-panel-container{display:flex;border:1px solid gray;border-radius:.5rem;margin-bottom:1.5rem;overflow:hidden}.device-migration-status{height:100%;padding:1rem;background-color:#ffebc2}.device-right{width:100%;display:flex;flex-direction:column;justify-content:space-between;padding:1rem 2rem}.device-header{display:flex;justify-content:space-between;align-items:center;padding:0 0 7px}.device-header .device-name{font-size:18px;font-weight:700}.device-header .device-migrate{font-weight:700}.device-header .device-migrate .mat-checkbox ::ng-deep .mat-checkbox-label{margin-left:.4rem}.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#05f!important}.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background,.device-header .device-migrate ::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#05f!important}.device-header .device-migrate ::ng-deep .mat-checkbox.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#05f!important}.device-info{display:grid;grid-template-columns:auto auto;gap:2.5rem}.device-info__item{font-size:16px;font-weight:700}.device-info__item .key{margin:10px 0 0}.device-info__item .value{color:#a0a0a0}.--checked{background-color:#cef5eb}.mat-checkbox ::ng-deep .mat-checkbox-inner-container{width:20px;height:20px}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#185e46!important}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background,::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#185e46}::ng-deep .mat-checkbox.mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#185e46!important}::ng-deep .rounded{pointer-events:none}::ng-deep .rounded .mat-checkbox-background,::ng-deep .rounded .mat-checkbox-frame{border-radius:50%!important}::ng-deep .mat-divider{display:block;margin:0;border-top-width:2px;border-top-style:solid}\n"] }]
|
|
35
35
|
}], ctorParameters: function () { return [{ type: i1.DnsService }, { type: i2.UserService }, { type: i3.SiteSettingsService }]; }, propDecorators: { device: [{
|
|
36
36
|
type: Input
|
|
37
37
|
}] } });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLW1vdmUtdXNlci13aXphcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL21vdmUtdXNlci13aXphcmQvbW92ZS11c2VyLXN0ZXBwZXIvZGV2aWNlLW1vdmUtdXNlci9kZXZpY2UtbW92ZS11c2VyLXdpemFyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvbW92ZS11c2VyLXdpemFyZC9tb3ZlLXVzZXItc3RlcHBlci9kZXZpY2UtbW92ZS11c2VyL2RldmljZS1tb3ZlLXVzZXItd2l6YXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFZekQsTUFBTSxPQUFPLDZCQUE2QjtJQUt4QyxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFFRCxZQUNTLFVBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLG1CQUF3QztRQUZ4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFFakQsQ0FBQztJQUVELFFBQVE7SUFFUixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBVTtJQUVqQyxDQUFDO0lBR08sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzsySEEvQlUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsaUdDWjFDLDZyQ0FxQ0E7NEZEekJhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSw2QkFBNkI7NkpBT3ZDLE1BQU07c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBQcmVwYXJlTWlncmF0aW9uRGV2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9tb3ZlLXVzZXInO1xuaW1wb3J0IHsgQXBwTG9jYXRpb24gfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2FwcC1sb2NhdGlvbic7XG5pbXBvcnQgeyBEbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZG5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2l0ZVNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGV2aWNlLW1vdmUtdXNlci13aXphcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLW1vdmUtdXNlci13aXphcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXZpY2UtbW92ZS11c2VyLXdpemFyZC5jb21wb25lbnQuc2NzcyddXG5cbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlTW92ZVVzZXJXaXphcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBkZXZpY2UhOiBQcmVwYXJlTWlncmF0aW9uRGV2aWNlO1xuXG5cbiAgZ2V0IG1vdmVVc2VyUGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5tb3ZlVXNlclBlbmRpbmc7XG4gIH1cblxuICBnZXQgbG9jYXRpb25zKCk6IEFwcExvY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UubG9jYXRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRuc1NlcnZpY2U6IERuc1NlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cblxuICBvbk1pZ3JhdGVEZXZpY2VDaGVja2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICB9XG5cblxuICBwcml2YXRlIHJlc2V0TW92ZVR5cGVQaG9uZU5VbWJlcigpOiB2b2lkIHtcbiAgICB0aGlzLmRuc1NlcnZpY2UucGhvbmVOdW1iZXJzID0gW107XG4gIH1cblxufVxuIiwiPGZvcm0+XG4gIDxkaXYgY2xhc3M9XCJkZXZpY2UtaXRlbS1wYW5lbC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGV2aWNlLWxlZnRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkZXZpY2UtbWlncmF0aW9uLXN0YXR1c1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnLS1jaGVja2VkJzogIGRldmljZS50b01pZ3JhdGV9XCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZFwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZGV2aWNlLnRvTWlncmF0ZVwiXG4gICAgICAgID48L21hdC1jaGVja2JveD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtbmFtZVwiPnt7IGRldmljZS5uYW1lIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2UtbWlncmF0ZVwiICpuZ0lmPVwiZGV2aWNlLmlzRWxpZ2libGVcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IG5hbWU9XCJ0b01pZ3JhdGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkZXZpY2UudG9NaWdyYXRlXCJcbiAgICAgICAgICA+TWlncmF0ZSB0aGlzIGRldmljZTwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGV2aWNlLWluZm9cIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRldmljZS5wcm9kdWN0XCIgY2xhc3M9XCJkZXZpY2UtaW5mb19faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXlcIj5EZXZpY2UgdHlwZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPnt7IGRldmljZS5wcm9kdWN0IH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGV2aWNlLm1hY1wiIGNsYXNzPVwiZGV2aWNlLWluZm9fX2l0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5XCI+TUFDIGFkZHJlc3M8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj57eyBkZXZpY2UubWFjIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs
CHANGED
|
@@ -168,10 +168,10 @@ export class MoveUserStepperComponent {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
MoveUserStepperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MoveUserStepperComponent, deps: [{ token: i1.DnsService }, { token: i2.UserService }, { token: i3.SiteSettingsService }, { token: i4.NotificationService }, { token: i5.MoveUserService }], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
-
MoveUserStepperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MoveUserStepperComponent, selector: "app-move-user-stepper", inputs: { user: "user", customerId: "customerId" }, outputs: { done: "done", runMoveUser: "runMoveUser", cancel: "cancel" }, viewQueries: [{ propertyName: "nextAfterMoveBtn", first: true, predicate: ["nextAfterMoveBtn"], descendants: true }], ngImport: i0, template: "<app-loader *ngIf=\"prepareMigrationData.pending || moveUserPending || dataPending\"></app-loader>\n<div id=\"move-user-stepper\">\n <mat-stepper *ngIf=\"prepareMigrationData?.moveType\" [linear]=\"isLinear\" labelPosition=\"bottom\" #stepper>\n <mat-step>\n <div class=\"step-title\">Step 1: Select location</div>\n <!-- <form>-->\n <ng-template matStepLabel>Select location</ng-template>\n <form>\n <div class=\"move-user-tab-content-box\">\n <mat-label class=\"mat-label\">Select a new location</mat-label>\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select location\" [matAutocomplete]=\"auto\" matInput\n (input)=\"onLocationAutocomplete($event)\"/>\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayLocation\"\n (optionSelected)=\"onLocationChange($event)\">\n <mat-option *ngFor=\"let location of filteredLocations\" [value]=\"location\">\n {{ location.name }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!dataPending && !locations.length\" class=\"mat-error\">\n Locations are not available\n </div>\n\n <ng-container *ngIf=\"prepareMigrationData?.newLocation?.id\">\n <mat-label class=\"mat-label\">Phone number</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypePhoneNumber\"\n [(ngModel)]=\"prepareMigrationData.moveType.phoneNumber\" name=\"phoneNumber\"\n (change)=\"selectPhoneNumberMigrationType($event)\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current number\n {{ prepareMigrationData.primaryPhoneNumber || currentNumber }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\"\n [disabled]=\"!prepareMigrationData.newLocation?.id\">\n Select a new number\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.phoneNumber === '2'\" class=\"select-container\">\n <mat-progress-spinner *ngIf=\"phoneNumberPending\" class=\"field-spinner\" mode=\"indeterminate\"\n [diameter]=\"30\"></mat-progress-spinner>\n\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select number\" [(ngModel)]=\"prepareMigrationData.newPhoneNumber\"\n [matAutocomplete]=\"autoPh\" matInput name=\"newPhoneNumber\"\n (input)=\"onNumberAutocomplete()\"/>\n <mat-autocomplete #autoPh=\"matAutocomplete\" (optionSelected)=\"onPhoneNumberChange($event)\">\n <mat-option *ngFor=\"let number of filteredPhoneNumbers\" [value]=\"number\">\n {{ number }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!phoneNumberPending && !dnsService.phoneNumbers?.length\" class=\"mat-error\">\n Phone numbers are not available for this location\n </div>\n </div>\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removeExtension\">\n Remove number\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-label class=\"mat-label\">Extension</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypeExtension\"\n (change)=\"selectExtensionMigrationType($event)\"\n [(ngModel)]=\"prepareMigrationData.moveType.extension\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current extension {{ prepareMigrationData.primaryExtension }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\">\n Select a new extension\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.extension === '2'\" class=\"input-container\">\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n name=\"newExtension\"\n (change)=\"onExtensionChange($event)\"\n [(ngModel)]=\"prepareMigrationData.newExtension\"\n [placeholder]=\"'Enter extension'\"\n />\n </mat-form-field>\n </div>\n\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removePhoneNumber\">Remove extension\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n </div>\n </form>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext\n [disabled]=\"isNextFromSelectLocationDisabled()\" (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\">Cancel</button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 2: Device eligibility check</div>\n <ng-template matStepLabel>Device eligibility check</ng-template>\n <div class=\"move-user-tab-content-box\">\n <app-devices-move-user-tab></app-devices-move-user-tab>\n </div>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 3: Validation</div>\n <ng-template matStepLabel>Validation</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Validation</mat-label>\n <div *ngIf=\"!prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationSuccess\">\n </ng-container>\n </div>\n <div *ngIf=\"prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationFailed\">\n </ng-container>\n </div>\n </div>\n <button #nextAfterMoveBtn mat-button class=\"invisible-next-btn\" matStepperNext\n (click)=\"goNextStep(stepper)\"></button>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\"\n [disabled]=\"prepareMigrationData.errors?.length > 0 || !prepareMigrationData.isConfirm\"\n (click)=\"startMigration()\">\n Move\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step>\n <div class=\"step-title\">Step 4: Result</div>\n <ng-template matStepLabel>Result</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Moving user has been successfully initiated!</mat-label>\n <p class=\"validation-text\">\n The user will be moved to the new location, $MTlocationname.\n <br/>\n For the progress of move, please visit the\n <a class=\"form-link\" href=\"#\">user details</a>.\n </p>\n </div>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-done\" (click)=\"done.emit(true)\">\n Done\n </button>\n </div>\n </mat-step>\n </mat-stepper>\n</div>\n\n<ng-template #validationSuccess>\n <p class=\"validation-text\">\n Validation has completed successfully. The user can be moved to the\n new location. Please be aware of the potential impact of the changes\n below.\n </p>\n <mat-label class=\"mat-label\">Expected changes</mat-label>\n <ul>\n <li>Cisco 6941 device (SEP987987987987) will not be migrated</li>\n <li>\n The user will be removed from the Call Pickup Group:\n 1675090334-Paris_pickup\n </li>\n <li>\n If Webex App is currently in use, the user will to sign in again to\n update the service.\n </li>\n </ul>\n <form>\n <mat-checkbox class=\"checkbox\" name=\"isConfirm\" [(ngModel)]=\"prepareMigrationData.isConfirm\"\n color=\"primary\">\n I confirm that I understand these conditions. I acknowledge the\n changes.\n </mat-checkbox>\n </form>\n\n</ng-template>\n\n<ng-template #validationFailed>\n <p class=\"validation-text\">\n Validation is failed. User migration is not available\n </p>\n <ul>\n <li *ngFor=\"let error of prepareMigrationData.errors\">{{ error }}</li>\n </ul>\n</ng-template>\n", styles: ["::ng-deep .mat-form-field-infix{padding:0!important;width:100%}::ng-deep .mat-form-field-appearance-outline .mat-input-element{height:35px;width:100%;line-height:35px;margin:5px 0 0}::ng-deep .mat-form-field{width:350px}.mat-stepper-horizontal{height:-moz-fit-content;height:fit-content;max-height:750px;margin:0 auto;width:70%;background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}.mat-stepper-horizontal .mat-step-icon{width:18px;height:18px;border:3px solid hsl(0,0%,50.2%)}.mat-stepper-horizontal .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}.mat-stepper-horizontal .mat-step-icon-state-number{background-color:#fff}.mat-stepper-horizontal .mat-step-icon-state-edit,.mat-stepper-horizontal .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}.mat-stepper-horizontal .mat-step-icon-content{display:none}.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}.mat-stepper-horizontal .mat-horizontal-stepper-header:before,.mat-stepper-horizontal .mat-horizontal-stepper-header:after,.mat-stepper-horizontal .mat-stepper-horizontal-line{border-top-width:3px!important;background-color:#7b7b7b}::ng-deep .mat-step-header[aria-labelledby=disabled_af]{pointer-events:none!important;cursor:not-allowed}::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-icon,::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-label{cursor:not-allowed;opacity:.6}.mat-mdc-form-field{margin-top:16px}.mat-label{font-size:16px;font-weight:600;margin:1rem 0}.step-title{font-size:28px;font-weight:700;margin:.5rem 0 1.5rem 2rem}.validation-text{margin-top:.5rem;margin-bottom:2rem}ul{padding:.5rem 2rem;margin-top:.5rem;margin-bottom:2rem}.devices-move-user-box{background-color:#fff;padding:2.5rem;min-height:350px;border-radius:.5rem}.form-link{text-decoration:none;color:#007bff}.radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.radio-button{margin:.5rem 0}.select{width:350px;padding:.5rem;margin:.5rem 0;border:1px solid #a0a0a0;border-radius:.5rem}.step-actions{display:flex;flex-flow:row-reverse;margin-top:2rem;gap:1rem}.webex-btn{border:1px solid black;border-radius:1rem;cursor:pointer;gap:1rem}.btn-next{background-color:#000;color:#fff}.btn-cancel,.btn-done{background-color:#fff;color:#000}.select-container{position:relative;width:100%;max-width:300px}.select-container .mat-progress-spinner{position:absolute;left:45%;top:35px}.invisible-next-btn{height:1px;width:1px}.mat-error{margin:0 0 15px}mat-label{display:block}.btn-next{min-width:80px}.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important}.move-user-tab-content-box{background-color:#fff;min-height:350px;border-radius:.5rem;box-sizing:border-box;padding:25px}.input-container{display:flex;flex-direction:column;gap:1rem}.input-container input{height:-moz-fit-content!important;height:fit-content!important}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i14.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i14.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i14.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i14.MatStepperNext, selector: "button[matStepperNext]", inputs: ["type"] }, { kind: "directive", type: i14.MatStepperPrevious, selector: "button[matStepperPrevious]", inputs: ["type"] }, { kind: "component", type: i15.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i16.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i17.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i18.DevicesMoveUserWizardTabComponent, selector: "app-devices-move-user-tab" }] });
|
|
171
|
+
MoveUserStepperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MoveUserStepperComponent, selector: "app-move-user-stepper", inputs: { user: "user", customerId: "customerId" }, outputs: { done: "done", runMoveUser: "runMoveUser", cancel: "cancel" }, viewQueries: [{ propertyName: "nextAfterMoveBtn", first: true, predicate: ["nextAfterMoveBtn"], descendants: true }], ngImport: i0, template: "<app-loader *ngIf=\"prepareMigrationData.pending || moveUserPending || dataPending\"></app-loader>\n<div id=\"move-user-stepper\">\n <mat-stepper *ngIf=\"prepareMigrationData?.moveType\" [linear]=\"isLinear\" labelPosition=\"bottom\" #stepper>\n <mat-step>\n <div class=\"step-title\">Step 1: Select location</div>\n <!-- <form>-->\n <ng-template matStepLabel>Select location</ng-template>\n <form>\n <div class=\"move-user-tab-content-box\">\n <mat-label class=\"mat-label\">Select a new location</mat-label>\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select location\" [matAutocomplete]=\"auto\" matInput\n (input)=\"onLocationAutocomplete($event)\"/>\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayLocation\"\n (optionSelected)=\"onLocationChange($event)\">\n <mat-option *ngFor=\"let location of filteredLocations\" [value]=\"location\">\n {{ location.name }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!dataPending && !locations.length\" class=\"mat-error\">\n Locations are not available\n </div>\n\n <ng-container *ngIf=\"prepareMigrationData?.newLocation?.id\">\n <mat-label class=\"mat-label\">Phone number</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypePhoneNumber\"\n [(ngModel)]=\"prepareMigrationData.moveType.phoneNumber\" name=\"phoneNumber\"\n (change)=\"selectPhoneNumberMigrationType($event)\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current number\n {{ prepareMigrationData.primaryPhoneNumber || currentNumber }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\"\n [disabled]=\"!prepareMigrationData.newLocation?.id\">\n Select a new number\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.phoneNumber === '2'\" class=\"select-container\">\n <mat-progress-spinner *ngIf=\"phoneNumberPending\" class=\"field-spinner\" mode=\"indeterminate\"\n [diameter]=\"30\"></mat-progress-spinner>\n\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select number\" [(ngModel)]=\"prepareMigrationData.newPhoneNumber\"\n [matAutocomplete]=\"autoPh\" matInput name=\"newPhoneNumber\"\n (input)=\"onNumberAutocomplete()\"/>\n <mat-autocomplete #autoPh=\"matAutocomplete\" (optionSelected)=\"onPhoneNumberChange($event)\">\n <mat-option *ngFor=\"let number of filteredPhoneNumbers\" [value]=\"number\">\n {{ number }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!phoneNumberPending && !dnsService.phoneNumbers?.length\" class=\"mat-error\">\n Phone numbers are not available for this location\n </div>\n </div>\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removeExtension\">\n Remove number\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-label class=\"mat-label\">Extension</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypeExtension\"\n (change)=\"selectExtensionMigrationType($event)\"\n [(ngModel)]=\"prepareMigrationData.moveType.extension\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current extension {{ prepareMigrationData.primaryExtension }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\">\n Select a new extension\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.extension === '2'\" class=\"input-container\">\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n name=\"newExtension\"\n (change)=\"onExtensionChange($event)\"\n [(ngModel)]=\"prepareMigrationData.newExtension\"\n [placeholder]=\"'Enter extension'\"\n />\n </mat-form-field>\n </div>\n\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removePhoneNumber\">Remove extension\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n </div>\n </form>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext\n [disabled]=\"isNextFromSelectLocationDisabled()\" (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" (click)=\"cancel.emit()\">Cancel</button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 2: Device eligibility check</div>\n <ng-template matStepLabel>Device eligibility check</ng-template>\n <div class=\"move-user-tab-content-box\">\n <app-devices-move-user-tab></app-devices-move-user-tab>\n </div>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 3: Validation</div>\n <ng-template matStepLabel>Validation</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Validation</mat-label>\n <div *ngIf=\"!prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationSuccess\">\n </ng-container>\n </div>\n <div *ngIf=\"prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationFailed\">\n </ng-container>\n </div>\n </div>\n <button #nextAfterMoveBtn mat-button class=\"invisible-next-btn\" matStepperNext\n (click)=\"goNextStep(stepper)\"></button>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\"\n [disabled]=\"prepareMigrationData.errors?.length > 0 || !prepareMigrationData.isConfirm\"\n (click)=\"startMigration()\">\n Move\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step>\n <div class=\"step-title\">Step 4: Result</div>\n <ng-template matStepLabel>Result</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Moving user has been successfully initiated!</mat-label>\n <p class=\"validation-text\">\n The user will be moved to the new location {{prepareMigrationData?.newLocation?.name}}\n <br/>\n For the progress of move, please visit the\n <a class=\"form-link\" href=\"#\">user details</a>.\n </p>\n </div>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-done\" (click)=\"done.emit(true)\">\n Done\n </button>\n </div>\n </mat-step>\n </mat-stepper>\n</div>\n\n<ng-template #validationSuccess>\n <p class=\"validation-text\">\n Validation has completed successfully. The user can be moved to the\n new location. Please be aware of the potential impact of the changes\n below.\n </p>\n <mat-label class=\"mat-label\">Expected changes</mat-label>\n <ul>\n <li>Cisco 6941 device (SEP987987987987) will not be migrated</li>\n <li>\n The user will be removed from the Call Pickup Group:\n 1675090334-Paris_pickup\n </li>\n <li>\n If Webex App is currently in use, the user will to sign in again to\n update the service.\n </li>\n </ul>\n <form>\n <mat-checkbox class=\"checkbox\" name=\"isConfirm\" [(ngModel)]=\"prepareMigrationData.isConfirm\"\n color=\"primary\">\n I confirm that I understand these conditions. I acknowledge the\n changes.\n </mat-checkbox>\n </form>\n\n</ng-template>\n\n<ng-template #validationFailed>\n <p class=\"validation-text\">\n Validation is failed. User migration is not available\n </p>\n <ul>\n <li *ngFor=\"let error of prepareMigrationData.errors\">{{ error }}</li>\n </ul>\n</ng-template>\n", styles: ["::ng-deep .mat-form-field-infix{padding:0!important;width:100%}::ng-deep .mat-form-field-appearance-outline .mat-input-element{height:35px;width:100%;line-height:35px;margin:5px 0 0}::ng-deep .mat-form-field{width:350px}.mat-stepper-horizontal{height:-moz-fit-content;height:fit-content;max-height:750px;margin:0 auto;width:70%;background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}.mat-stepper-horizontal .mat-step-icon{width:18px;height:18px;border:3px solid hsl(0,0%,50.2%)}.mat-stepper-horizontal .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}.mat-stepper-horizontal .mat-step-icon-state-number{background-color:#fff}.mat-stepper-horizontal .mat-step-icon-state-edit,.mat-stepper-horizontal .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}.mat-stepper-horizontal .mat-step-icon-content{display:none}.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}.mat-stepper-horizontal .mat-horizontal-stepper-header:before,.mat-stepper-horizontal .mat-horizontal-stepper-header:after,.mat-stepper-horizontal .mat-stepper-horizontal-line{border-top-width:3px!important;background-color:#7b7b7b}::ng-deep .mat-step-header[aria-labelledby=disabled_af]{pointer-events:none!important;cursor:not-allowed}::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-icon,::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-label{cursor:not-allowed;opacity:.6}.mat-mdc-form-field{margin-top:16px}.mat-label{font-size:16px;font-weight:600;margin:1rem 0}.step-title{font-size:28px;font-weight:700;margin:.5rem 0 1.5rem 2rem}.validation-text{margin-top:.5rem;margin-bottom:2rem}ul{padding:.5rem 2rem;margin-top:.5rem;margin-bottom:2rem}.devices-move-user-box{background-color:#fff;padding:2.5rem;min-height:350px;border-radius:.5rem}.form-link{text-decoration:none;color:#007bff}.radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.radio-button{margin:.5rem 0}.select{width:350px;padding:.5rem;margin:.5rem 0;border:1px solid #a0a0a0;border-radius:.5rem}.step-actions{display:flex;flex-flow:row-reverse;margin-top:2rem;gap:1rem}.webex-btn{border:1px solid black;border-radius:1rem;cursor:pointer;gap:1rem}.btn-next{background-color:#000;color:#fff}.btn-cancel,.btn-done{background-color:#fff;color:#000}.select-container{position:relative;width:100%;max-width:300px}.select-container .mat-progress-spinner{position:absolute;left:45%;top:35px}.invisible-next-btn{height:1px;width:1px}.mat-error{margin:0 0 15px}mat-label{display:block}.btn-next{min-width:80px}.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important}.move-user-tab-content-box{background-color:#fff;min-height:350px;border-radius:.5rem;box-sizing:border-box;padding:25px}.input-container{display:flex;flex-direction:column;gap:1rem}.input-container input{height:-moz-fit-content!important;height:fit-content!important}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i14.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i14.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i14.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i14.MatStepperNext, selector: "button[matStepperNext]", inputs: ["type"] }, { kind: "directive", type: i14.MatStepperPrevious, selector: "button[matStepperPrevious]", inputs: ["type"] }, { kind: "component", type: i15.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i16.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i17.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i18.DevicesMoveUserWizardTabComponent, selector: "app-devices-move-user-tab" }] });
|
|
172
172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MoveUserStepperComponent, decorators: [{
|
|
173
173
|
type: Component,
|
|
174
|
-
args: [{ selector: 'app-move-user-stepper', template: "<app-loader *ngIf=\"prepareMigrationData.pending || moveUserPending || dataPending\"></app-loader>\n<div id=\"move-user-stepper\">\n <mat-stepper *ngIf=\"prepareMigrationData?.moveType\" [linear]=\"isLinear\" labelPosition=\"bottom\" #stepper>\n <mat-step>\n <div class=\"step-title\">Step 1: Select location</div>\n <!-- <form>-->\n <ng-template matStepLabel>Select location</ng-template>\n <form>\n <div class=\"move-user-tab-content-box\">\n <mat-label class=\"mat-label\">Select a new location</mat-label>\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select location\" [matAutocomplete]=\"auto\" matInput\n (input)=\"onLocationAutocomplete($event)\"/>\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayLocation\"\n (optionSelected)=\"onLocationChange($event)\">\n <mat-option *ngFor=\"let location of filteredLocations\" [value]=\"location\">\n {{ location.name }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!dataPending && !locations.length\" class=\"mat-error\">\n Locations are not available\n </div>\n\n <ng-container *ngIf=\"prepareMigrationData?.newLocation?.id\">\n <mat-label class=\"mat-label\">Phone number</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypePhoneNumber\"\n [(ngModel)]=\"prepareMigrationData.moveType.phoneNumber\" name=\"phoneNumber\"\n (change)=\"selectPhoneNumberMigrationType($event)\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current number\n {{ prepareMigrationData.primaryPhoneNumber || currentNumber }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\"\n [disabled]=\"!prepareMigrationData.newLocation?.id\">\n Select a new number\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.phoneNumber === '2'\" class=\"select-container\">\n <mat-progress-spinner *ngIf=\"phoneNumberPending\" class=\"field-spinner\" mode=\"indeterminate\"\n [diameter]=\"30\"></mat-progress-spinner>\n\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select number\" [(ngModel)]=\"prepareMigrationData.newPhoneNumber\"\n [matAutocomplete]=\"autoPh\" matInput name=\"newPhoneNumber\"\n (input)=\"onNumberAutocomplete()\"/>\n <mat-autocomplete #autoPh=\"matAutocomplete\" (optionSelected)=\"onPhoneNumberChange($event)\">\n <mat-option *ngFor=\"let number of filteredPhoneNumbers\" [value]=\"number\">\n {{ number }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!phoneNumberPending && !dnsService.phoneNumbers?.length\" class=\"mat-error\">\n Phone numbers are not available for this location\n </div>\n </div>\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removeExtension\">\n Remove number\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-label class=\"mat-label\">Extension</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypeExtension\"\n (change)=\"selectExtensionMigrationType($event)\"\n [(ngModel)]=\"prepareMigrationData.moveType.extension\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current extension {{ prepareMigrationData.primaryExtension }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\">\n Select a new extension\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.extension === '2'\" class=\"input-container\">\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n name=\"newExtension\"\n (change)=\"onExtensionChange($event)\"\n [(ngModel)]=\"prepareMigrationData.newExtension\"\n [placeholder]=\"'Enter extension'\"\n />\n </mat-form-field>\n </div>\n\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removePhoneNumber\">Remove extension\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n </div>\n </form>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext\n [disabled]=\"isNextFromSelectLocationDisabled()\" (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\">Cancel</button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 2: Device eligibility check</div>\n <ng-template matStepLabel>Device eligibility check</ng-template>\n <div class=\"move-user-tab-content-box\">\n <app-devices-move-user-tab></app-devices-move-user-tab>\n </div>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 3: Validation</div>\n <ng-template matStepLabel>Validation</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Validation</mat-label>\n <div *ngIf=\"!prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationSuccess\">\n </ng-container>\n </div>\n <div *ngIf=\"prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationFailed\">\n </ng-container>\n </div>\n </div>\n <button #nextAfterMoveBtn mat-button class=\"invisible-next-btn\" matStepperNext\n (click)=\"goNextStep(stepper)\"></button>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\"\n [disabled]=\"prepareMigrationData.errors?.length > 0 || !prepareMigrationData.isConfirm\"\n (click)=\"startMigration()\">\n Move\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step>\n <div class=\"step-title\">Step 4: Result</div>\n <ng-template matStepLabel>Result</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Moving user has been successfully initiated!</mat-label>\n <p class=\"validation-text\">\n The user will be moved to the new location, $MTlocationname.\n <br/>\n For the progress of move, please visit the\n <a class=\"form-link\" href=\"#\">user details</a>.\n </p>\n </div>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-done\" (click)=\"done.emit(true)\">\n Done\n </button>\n </div>\n </mat-step>\n </mat-stepper>\n</div>\n\n<ng-template #validationSuccess>\n <p class=\"validation-text\">\n Validation has completed successfully. The user can be moved to the\n new location. Please be aware of the potential impact of the changes\n below.\n </p>\n <mat-label class=\"mat-label\">Expected changes</mat-label>\n <ul>\n <li>Cisco 6941 device (SEP987987987987) will not be migrated</li>\n <li>\n The user will be removed from the Call Pickup Group:\n 1675090334-Paris_pickup\n </li>\n <li>\n If Webex App is currently in use, the user will to sign in again to\n update the service.\n </li>\n </ul>\n <form>\n <mat-checkbox class=\"checkbox\" name=\"isConfirm\" [(ngModel)]=\"prepareMigrationData.isConfirm\"\n color=\"primary\">\n I confirm that I understand these conditions. I acknowledge the\n changes.\n </mat-checkbox>\n </form>\n\n</ng-template>\n\n<ng-template #validationFailed>\n <p class=\"validation-text\">\n Validation is failed. User migration is not available\n </p>\n <ul>\n <li *ngFor=\"let error of prepareMigrationData.errors\">{{ error }}</li>\n </ul>\n</ng-template>\n", styles: ["::ng-deep .mat-form-field-infix{padding:0!important;width:100%}::ng-deep .mat-form-field-appearance-outline .mat-input-element{height:35px;width:100%;line-height:35px;margin:5px 0 0}::ng-deep .mat-form-field{width:350px}.mat-stepper-horizontal{height:-moz-fit-content;height:fit-content;max-height:750px;margin:0 auto;width:70%;background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}.mat-stepper-horizontal .mat-step-icon{width:18px;height:18px;border:3px solid hsl(0,0%,50.2%)}.mat-stepper-horizontal .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}.mat-stepper-horizontal .mat-step-icon-state-number{background-color:#fff}.mat-stepper-horizontal .mat-step-icon-state-edit,.mat-stepper-horizontal .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}.mat-stepper-horizontal .mat-step-icon-content{display:none}.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}.mat-stepper-horizontal .mat-horizontal-stepper-header:before,.mat-stepper-horizontal .mat-horizontal-stepper-header:after,.mat-stepper-horizontal .mat-stepper-horizontal-line{border-top-width:3px!important;background-color:#7b7b7b}::ng-deep .mat-step-header[aria-labelledby=disabled_af]{pointer-events:none!important;cursor:not-allowed}::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-icon,::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-label{cursor:not-allowed;opacity:.6}.mat-mdc-form-field{margin-top:16px}.mat-label{font-size:16px;font-weight:600;margin:1rem 0}.step-title{font-size:28px;font-weight:700;margin:.5rem 0 1.5rem 2rem}.validation-text{margin-top:.5rem;margin-bottom:2rem}ul{padding:.5rem 2rem;margin-top:.5rem;margin-bottom:2rem}.devices-move-user-box{background-color:#fff;padding:2.5rem;min-height:350px;border-radius:.5rem}.form-link{text-decoration:none;color:#007bff}.radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.radio-button{margin:.5rem 0}.select{width:350px;padding:.5rem;margin:.5rem 0;border:1px solid #a0a0a0;border-radius:.5rem}.step-actions{display:flex;flex-flow:row-reverse;margin-top:2rem;gap:1rem}.webex-btn{border:1px solid black;border-radius:1rem;cursor:pointer;gap:1rem}.btn-next{background-color:#000;color:#fff}.btn-cancel,.btn-done{background-color:#fff;color:#000}.select-container{position:relative;width:100%;max-width:300px}.select-container .mat-progress-spinner{position:absolute;left:45%;top:35px}.invisible-next-btn{height:1px;width:1px}.mat-error{margin:0 0 15px}mat-label{display:block}.btn-next{min-width:80px}.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important}.move-user-tab-content-box{background-color:#fff;min-height:350px;border-radius:.5rem;box-sizing:border-box;padding:25px}.input-container{display:flex;flex-direction:column;gap:1rem}.input-container input{height:-moz-fit-content!important;height:fit-content!important}\n"] }]
|
|
174
|
+
args: [{ selector: 'app-move-user-stepper', template: "<app-loader *ngIf=\"prepareMigrationData.pending || moveUserPending || dataPending\"></app-loader>\n<div id=\"move-user-stepper\">\n <mat-stepper *ngIf=\"prepareMigrationData?.moveType\" [linear]=\"isLinear\" labelPosition=\"bottom\" #stepper>\n <mat-step>\n <div class=\"step-title\">Step 1: Select location</div>\n <!-- <form>-->\n <ng-template matStepLabel>Select location</ng-template>\n <form>\n <div class=\"move-user-tab-content-box\">\n <mat-label class=\"mat-label\">Select a new location</mat-label>\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select location\" [matAutocomplete]=\"auto\" matInput\n (input)=\"onLocationAutocomplete($event)\"/>\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayLocation\"\n (optionSelected)=\"onLocationChange($event)\">\n <mat-option *ngFor=\"let location of filteredLocations\" [value]=\"location\">\n {{ location.name }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!dataPending && !locations.length\" class=\"mat-error\">\n Locations are not available\n </div>\n\n <ng-container *ngIf=\"prepareMigrationData?.newLocation?.id\">\n <mat-label class=\"mat-label\">Phone number</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypePhoneNumber\"\n [(ngModel)]=\"prepareMigrationData.moveType.phoneNumber\" name=\"phoneNumber\"\n (change)=\"selectPhoneNumberMigrationType($event)\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current number\n {{ prepareMigrationData.primaryPhoneNumber || currentNumber }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\"\n [disabled]=\"!prepareMigrationData.newLocation?.id\">\n Select a new number\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.phoneNumber === '2'\" class=\"select-container\">\n <mat-progress-spinner *ngIf=\"phoneNumberPending\" class=\"field-spinner\" mode=\"indeterminate\"\n [diameter]=\"30\"></mat-progress-spinner>\n\n <mat-form-field class=\"app-autocomplete-input\" appearance=\"outline\">\n <input placeholder=\"Select number\" [(ngModel)]=\"prepareMigrationData.newPhoneNumber\"\n [matAutocomplete]=\"autoPh\" matInput name=\"newPhoneNumber\"\n (input)=\"onNumberAutocomplete()\"/>\n <mat-autocomplete #autoPh=\"matAutocomplete\" (optionSelected)=\"onPhoneNumberChange($event)\">\n <mat-option *ngFor=\"let number of filteredPhoneNumbers\" [value]=\"number\">\n {{ number }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <div *ngIf=\"!phoneNumberPending && !dnsService.phoneNumbers?.length\" class=\"mat-error\">\n Phone numbers are not available for this location\n </div>\n </div>\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removeExtension\">\n Remove number\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-label class=\"mat-label\">Extension</mat-label>\n <mat-radio-group class=\"radio-group\" name=\"moveTypeExtension\"\n (change)=\"selectExtensionMigrationType($event)\"\n [(ngModel)]=\"prepareMigrationData.moveType.extension\">\n <mat-radio-button\n class=\"radio-button\"\n value=\"1\"\n color=\"primary\">\n Keep current extension {{ prepareMigrationData.primaryExtension }}\n </mat-radio-button>\n <mat-radio-button\n class=\"radio-button\"\n value=\"2\"\n color=\"primary\">\n Select a new extension\n </mat-radio-button>\n\n <div *ngIf=\"prepareMigrationData.moveType.extension === '2'\" class=\"input-container\">\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n name=\"newExtension\"\n (change)=\"onExtensionChange($event)\"\n [(ngModel)]=\"prepareMigrationData.newExtension\"\n [placeholder]=\"'Enter extension'\"\n />\n </mat-form-field>\n </div>\n\n <mat-radio-button\n class=\"radio-button\"\n value=\"3\"\n color=\"primary\"\n [disabled]=\"prepareMigrationData.removePhoneNumber\">Remove extension\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n </div>\n </form>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext\n [disabled]=\"isNextFromSelectLocationDisabled()\" (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" (click)=\"cancel.emit()\">Cancel</button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 2: Device eligibility check</div>\n <ng-template matStepLabel>Device eligibility check</ng-template>\n <div class=\"move-user-tab-content-box\">\n <app-devices-move-user-tab></app-devices-move-user-tab>\n </div>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\" matStepperNext (click)=\"goNextStep(stepper)\">\n Next\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step [aria-labelledby]=\"'disabled_af'\">\n <div class=\"step-title\">Step 3: Validation</div>\n <ng-template matStepLabel>Validation</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Validation</mat-label>\n <div *ngIf=\"!prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationSuccess\">\n </ng-container>\n </div>\n <div *ngIf=\"prepareMigrationData.errors?.length\">\n <ng-container *ngTemplateOutlet=\"validationFailed\">\n </ng-container>\n </div>\n </div>\n <button #nextAfterMoveBtn mat-button class=\"invisible-next-btn\" matStepperNext\n (click)=\"goNextStep(stepper)\"></button>\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-next\"\n [disabled]=\"prepareMigrationData.errors?.length > 0 || !prepareMigrationData.isConfirm\"\n (click)=\"startMigration()\">\n Move\n </button>\n <button mat-button class=\"webex-btn btn-cancel\" matStepperPrevious>\n Previous\n </button>\n </div>\n </mat-step>\n <mat-step>\n <div class=\"step-title\">Step 4: Result</div>\n <ng-template matStepLabel>Result</ng-template>\n\n <div class=\"devices-move-user-box\">\n <mat-label class=\"mat-label\">Moving user has been successfully initiated!</mat-label>\n <p class=\"validation-text\">\n The user will be moved to the new location {{prepareMigrationData?.newLocation?.name}}\n <br/>\n For the progress of move, please visit the\n <a class=\"form-link\" href=\"#\">user details</a>.\n </p>\n </div>\n\n <div class=\"step-actions\">\n <button mat-button class=\"webex-btn btn-done\" (click)=\"done.emit(true)\">\n Done\n </button>\n </div>\n </mat-step>\n </mat-stepper>\n</div>\n\n<ng-template #validationSuccess>\n <p class=\"validation-text\">\n Validation has completed successfully. The user can be moved to the\n new location. Please be aware of the potential impact of the changes\n below.\n </p>\n <mat-label class=\"mat-label\">Expected changes</mat-label>\n <ul>\n <li>Cisco 6941 device (SEP987987987987) will not be migrated</li>\n <li>\n The user will be removed from the Call Pickup Group:\n 1675090334-Paris_pickup\n </li>\n <li>\n If Webex App is currently in use, the user will to sign in again to\n update the service.\n </li>\n </ul>\n <form>\n <mat-checkbox class=\"checkbox\" name=\"isConfirm\" [(ngModel)]=\"prepareMigrationData.isConfirm\"\n color=\"primary\">\n I confirm that I understand these conditions. I acknowledge the\n changes.\n </mat-checkbox>\n </form>\n\n</ng-template>\n\n<ng-template #validationFailed>\n <p class=\"validation-text\">\n Validation is failed. User migration is not available\n </p>\n <ul>\n <li *ngFor=\"let error of prepareMigrationData.errors\">{{ error }}</li>\n </ul>\n</ng-template>\n", styles: ["::ng-deep .mat-form-field-infix{padding:0!important;width:100%}::ng-deep .mat-form-field-appearance-outline .mat-input-element{height:35px;width:100%;line-height:35px;margin:5px 0 0}::ng-deep .mat-form-field{width:350px}.mat-stepper-horizontal{height:-moz-fit-content;height:fit-content;max-height:750px;margin:0 auto;width:70%;background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}.mat-stepper-horizontal .mat-step-icon{width:18px;height:18px;border:3px solid hsl(0,0%,50.2%)}.mat-stepper-horizontal .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}.mat-stepper-horizontal .mat-step-icon-state-number{background-color:#fff}.mat-stepper-horizontal .mat-step-icon-state-edit,.mat-stepper-horizontal .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}.mat-stepper-horizontal .mat-step-icon-content{display:none}.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,.mat-stepper-horizontal .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,.mat-stepper-horizontal [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}.mat-stepper-horizontal .mat-horizontal-stepper-header:before,.mat-stepper-horizontal .mat-horizontal-stepper-header:after,.mat-stepper-horizontal .mat-stepper-horizontal-line{border-top-width:3px!important;background-color:#7b7b7b}::ng-deep .mat-step-header[aria-labelledby=disabled_af]{pointer-events:none!important;cursor:not-allowed}::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-icon,::ng-deep .mat-step-header[aria-labelledby=disabled_af] .mat-step-label{cursor:not-allowed;opacity:.6}.mat-mdc-form-field{margin-top:16px}.mat-label{font-size:16px;font-weight:600;margin:1rem 0}.step-title{font-size:28px;font-weight:700;margin:.5rem 0 1.5rem 2rem}.validation-text{margin-top:.5rem;margin-bottom:2rem}ul{padding:.5rem 2rem;margin-top:.5rem;margin-bottom:2rem}.devices-move-user-box{background-color:#fff;padding:2.5rem;min-height:350px;border-radius:.5rem}.form-link{text-decoration:none;color:#007bff}.radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.radio-button{margin:.5rem 0}.select{width:350px;padding:.5rem;margin:.5rem 0;border:1px solid #a0a0a0;border-radius:.5rem}.step-actions{display:flex;flex-flow:row-reverse;margin-top:2rem;gap:1rem}.webex-btn{border:1px solid black;border-radius:1rem;cursor:pointer;gap:1rem}.btn-next{background-color:#000;color:#fff}.btn-cancel,.btn-done{background-color:#fff;color:#000}.select-container{position:relative;width:100%;max-width:300px}.select-container .mat-progress-spinner{position:absolute;left:45%;top:35px}.invisible-next-btn{height:1px;width:1px}.mat-error{margin:0 0 15px}mat-label{display:block}.btn-next{min-width:80px}.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important}.move-user-tab-content-box{background-color:#fff;min-height:350px;border-radius:.5rem;box-sizing:border-box;padding:25px}.input-container{display:flex;flex-direction:column;gap:1rem}.input-container input{height:-moz-fit-content!important;height:fit-content!important}\n"] }]
|
|
175
175
|
}], ctorParameters: function () { return [{ type: i1.DnsService }, { type: i2.UserService }, { type: i3.SiteSettingsService }, { type: i4.NotificationService }, { type: i5.MoveUserService }]; }, propDecorators: { nextAfterMoveBtn: [{
|
|
176
176
|
type: ViewChild,
|
|
177
177
|
args: ['nextAfterMoveBtn']
|
|
@@ -186,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
186
186
|
}], cancel: [{
|
|
187
187
|
type: Output
|
|
188
188
|
}] } });
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL21vdmUtdXNlci13aXphcmQvbW92ZS11c2VyLXN0ZXBwZXIvbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL21vdmUtdXNlci13aXphcmQvbW92ZS11c2VyLXN0ZXBwZXIvbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJcEcsZ0JBQWdCO0FBQ2hCLE1BQU0sUUFBUSxHQUFHLG9GQUFvRixDQUFDO0FBUXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFtQm5DLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMs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QUssQ0FBQztnQkFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFFSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNwQyxDQUFDOztzSEF0TFUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsZ1RDckJyQyxrOVNBOE5BOzRGRHpNYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsdUJBQXVCOzZOQU1GLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRTdCLElBQUk7c0JBREgsTUFBTTtnQkFHUCxJQUFJO3NCQURILEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTTtnQkFHUCxNQUFNO3NCQURMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IERuc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kbnMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXJcIjtcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcExvY2F0aW9uIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hcHAtbG9jYXRpb24nO1xuaW1wb3J0IHsgU2l0ZVNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBmaWx0ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uLWZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBNaWdyYXRpb25EYXRhLCBQcmVwYXJlTWlncmF0aW9uQm9keSwgUHJlcGFyZU1pZ3JhdGlvbkRhdGEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL21vdmUtdXNlcic7XG5pbXBvcnQgeyBNb3ZlVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb3ZlLXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG4vLyBmb3IgdGVzdCBvbmx5XG5jb25zdCBMT0NBVElPTiA9ICdZMmx6WTI5emNHRnlhem92TDNWekwweFBRMEZVU1U5T0x6RTJZalkwTmpsakxUQmpabVF0TkRKak1TMWlPV0pqTFRVeU4yRmxaVE5oTjJSbE9RJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1vdmUtdXNlci1zdGVwcGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vdmUtdXNlci1zdGVwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LnNjc3MnXVxuXG59KVxuZXhwb3J0IGNsYXNzIE1vdmVVc2VyU3RlcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ25leHRBZnRlck1vdmVCdG4nKSBuZXh0QWZ0ZXJNb3ZlQnRuOiBhbnk7XG4gIEBPdXRwdXQoKVxuICBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKVxuICB1c2VyOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGN1c3RvbWVySWQhOiBudW1iZXI7XG4gIEBPdXRwdXQoKVxuICBydW5Nb3ZlVXNlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgaXNMaW5lYXIgPSBmYWxzZTtcbiAgcGhvbmVOdW1iZXJQZW5kaW5nID0gZmFsc2U7XG4gIHN0ZXBwZXIhOiBNYXRTdGVwcGVyO1xuICBmaWx0ZXJlZExvY2F0aW9uczogQXBwTG9jYXRpb25bXSA9IFtdO1xuICBmaWx0ZXJlZFBob25lTnVtYmVyczogYW55O1xuICBkYXRhUGVuZGluZyA9IGZhbHNlO1xuXG4gIGdldCBtb3ZlVXNlclBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UubW92ZVVzZXJQZW5kaW5nO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnROdW1iZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy51c2VyPy5kZXZpY2VzPy5sZW5ndGggJiYgdGhpcy51c2VyLmRldmljZXNbMF0/LmxpbmVBc3NvY2lhdGlvbnMgJiYgdGhpcy51c2VyLmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9uc1swXSkge1xuICAgICAgcmV0dXJuIHRoaXMudXNlci5kZXZpY2VzWzBdLmxpbmVBc3NvY2lhdGlvbnNbMF0uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9ucygpOiBBcHBMb2NhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmxvY2F0aW9ucztcbiAgfVxuXG4gIGdldCBwcmVwYXJlTWlncmF0aW9uRGF0YSgpOiBQcmVwYXJlTWlncmF0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRuc1NlcnZpY2U6IERuc1NlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHVibGljIG1vdmVVc2VyU2VydmljZTogTW92ZVVzZXJTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tb3ZlVXNlclNlcnZpY2UucHJlcGFyZU1pZ3JhdGlvbkRhdGEgPSBuZXcgUHJlcGFyZU1pZ3JhdGlvbkRhdGEoKTtcbiAgICB0aGlzLmdldERhdGEoKTtcbiAgfVxuXG4gIGRpc3BsYXlMb2NhdGlvbihsb2NhdGlvbj86IEFwcExvY2F0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbG9jYXRpb24/Lm5hbWUgfHwgJyc7XG4gIH1cblxuICBvbkxvY2F0aW9uQXV0b2NvbXBsZXRlKGV2ZW50OiBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgaWYgKHRoaXMubG9jYXRpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBmaWx0ZXJPcHRpb25zKHRoaXMubG9jYXRpb25zLCB2YWx1ZSB8fCAnJywgJycsICduYW1lJyk7XG4gICAgfVxuICB9XG5cbiAgb25OdW1iZXJBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG5zU2VydmljZS5waG9uZU51bWJlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFBob25lTnVtYmVycyA9IGZpbHRlck9wdGlvbnModGhpcy5kbnNTZXJ2aWNlLnBob25lTnVtYmVycywgdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdQaG9uZU51bWJlcik7XG4gICAgfVxuICB9XG5cbiAgb25Nb3ZlVXNlcihzdGVwcGVyOiBNYXRTdGVwcGVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcGVyID0gc3RlcHBlcjtcbiAgICB0aGlzLnJ1bk1vdmVVc2VyLmVtaXQoKTtcbiAgfVxuXG4gIG9uU3RlcENoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gIH1cblxuICBzZWxlY3RQaG9uZU51bWJlck1pZ3JhdGlvblR5cGUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC52YWx1ZSAmJiBldmVudC52YWx1ZSA9PT0gJzInKSB7XG4gICAgICB0aGlzLmdldFBob25lTnVtYmVycygpO1xuICAgIH1cbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5yZW1vdmVQaG9uZU51bWJlciA9IGV2ZW50LnZhbHVlICYmIGV2ZW50LnZhbHVlID09PSAnMyc7XG4gIH1cblxuICBzZWxlY3RFeHRlbnNpb25NaWdyYXRpb25UeXBlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5yZW1vdmVFeHRlbnNpb24gPSBldmVudC52YWx1ZSAmJiBldmVudC52YWx1ZSA9PT0gJzMnO1xuICB9XG5cbiAgb25QaG9uZU51bWJlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ25ldyBwaG9uZSBudW1iZXIgPSAnLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld1Bob25lTnVtYmVyKTtcbiAgfVxuXG4gIG9uTG9jYXRpb25DaGFuZ2UoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdMb2NhdGlvbiA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5yZXNldE1pZ3JhdGlvbkRhdGFGb3JOZXdMb2NhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJykge1xuICAgICAgdGhpcy5nZXRQaG9uZU51bWJlcnMoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRQcmVwYXJlVXNlckRhdGEoKTtcbiAgfVxuXG4gIG9uRXh0ZW5zaW9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbmV3IG5ld0V4dGVuc2lvbiA9ICcsIHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3RXh0ZW5zaW9uKTtcbiAgfVxuXG4gIGdldFBob25lTnVtYmVycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3TG9jYXRpb24/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGhvbmVOdW1iZXJQZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRuc1NlcnZpY2UuZmV0Y2hQaG9uZU51bWJlcnModGhpcy5jdXN0b21lcklkLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0xvY2F0aW9uLmlkKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXJQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQaG9uZU51bWJlcnMgPSB0aGlzLmRuc1NlcnZpY2UucGhvbmVOdW1iZXJzLnNsaWNlKCk7XG4gICAgICB9LCAoKSA9PiB0aGlzLnBob25lTnVtYmVyUGVuZGluZyA9IGZhbHNlKTtcbiAgfVxuXG4gIGlzTmV4dEZyb21TZWxlY3RMb2NhdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YT8ubmV3TG9jYXRpb24/LmlkIHx8ICF0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLmVudGl0eUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJyAmJiAhdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdQaG9uZU51bWJlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvbiA9PT0gJzInICYmICF0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdvTmV4dFN0ZXAoc3RlcHBlcjogTWF0U3RlcHBlcikge1xuXG4gIH1cblxuICBzdGFydE1pZ3JhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBtaWdyYXRpb25EYXRhID0gbmV3IE1pZ3JhdGlvbkRhdGEodGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YSk7XG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5tb3ZlVXNlclNlcnZpY2Uuc3RhcnRNaWdyYXRpb24obWlncmF0aW9uRGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubmV4dEFmdGVyTW92ZUJ0bj8uX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLm5leHRBZnRlck1vdmVCdG4uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gIH1cblxuICBnZXREYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5nZXRMb2NhdGlvbnModGhpcy5jdXN0b21lcklkKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xuICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVwYXJlVXNlckRhdGEoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGE/Lm5ld0xvY2F0aW9uPy5pZCkge1xuICAgICAgdGhpcy5tb3ZlVXNlclNlcnZpY2Uuc2V0T3JpZ2luUHJlcGFyZU1pZ3JhdGlvbkRhdGEoKTtcbiAgICAgIGNvbnN0IHByZXBhcmVNaWdyYXRpb25Cb2R5ID0gbmV3IFByZXBhcmVNaWdyYXRpb25Cb2R5KHRoaXMudXNlciwgdGhpcy5jdXN0b21lcklkLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0xvY2F0aW9uLmlkKTtcbiAgICAgIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5tb3ZlVXNlclNlcnZpY2UuZmV0Y2hQcmVwYXJlTWlncmF0aW9uRGF0YShwcmVwYXJlTWlncmF0aW9uQm9keSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoJ01vdmUgdXNlciBhdHRlbXB0IGlzIGZhaWxlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRNb3ZlVHlwZVBob25lTlVtYmVyKCk6IHZvaWQge1xuICAgIHRoaXMuZG5zU2VydmljZS5waG9uZU51bWJlcnMgPSBbXTtcbiAgfVxuXG59XG4iLCI8YXBwLWxvYWRlciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgfHwgbW92ZVVzZXJQZW5kaW5nIHx8IGRhdGFQZW5kaW5nXCI+PC9hcHAtbG9hZGVyPlxuPGRpdiBpZD1cIm1vdmUtdXNlci1zdGVwcGVyXCI+XG4gIDxtYXQtc3RlcHBlciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhPy5tb3ZlVHlwZVwiIFtsaW5lYXJdPVwiaXNMaW5lYXJcIiBsYWJlbFBvc2l0aW9uPVwiYm90dG9tXCIgI3N0ZXBwZXI+XG4gICAgPG1hdC1zdGVwPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtdGl0bGVcIj5TdGVwIDE6IFNlbGVjdCBsb2NhdGlvbjwvZGl2PlxuICAgICAgPCEtLSAgICAgIDxmb3JtPi0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5TZWxlY3QgbG9jYXRpb248L25nLXRlbXBsYXRlPlxuICAgICAgPGZvcm0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLXVzZXItdGFiLWNvbnRlbnQtYm94XCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPlNlbGVjdCBhIG5ldyBsb2NhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFwcC1hdXRvY29tcGxldGUtaW5wdXRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPGlucHV0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IGxvY2F0aW9uXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25Mb2NhdGlvbkF1dG9jb21wbGV0ZSgkZXZlbnQpXCIvPlxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbkxvY2F0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGZpbHRlcmVkTG9jYXRpb25zXCIgW3ZhbHVlXT1cImxvY2F0aW9uXCI+XG4gICAgICAgICAgICAgICAge3sgbG9jYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFQZW5kaW5nICYmICFsb2NhdGlvbnMubGVuZ3RoXCIgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgIExvY2F0aW9ucyBhcmUgbm90IGF2YWlsYWJsZVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhPy5uZXdMb2NhdGlvbj8uaWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtYXQtbGFiZWxcIj5QaG9uZSBudW1iZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJyYWRpby1ncm91cFwiIG5hbWU9XCJtb3ZlVHlwZVBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVwYXJlTWlncmF0aW9uRGF0YS5tb3ZlVHlwZS5waG9uZU51bWJlclwiIG5hbWU9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0UGhvbmVOdW1iZXJNaWdyYXRpb25UeXBlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInJhZGlvLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCIxXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgbnVtYmVyXG4gICAgICAgICAgICAgICAge3sgcHJlcGFyZU1pZ3JhdGlvbkRhdGEucHJpbWFyeVBob25lTnVtYmVyIHx8IGN1cnJlbnROdW1iZXIgfX1cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjJcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdMb2NhdGlvbj8uaWRcIj5cbiAgICAgICAgICAgICAgICBTZWxlY3QgYSBuZXcgbnVtYmVyXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJ1wiIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInBob25lTnVtYmVyUGVuZGluZ1wiIGNsYXNzPVwiZmllbGQtc3Bpbm5lclwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMwXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFwcC1hdXRvY29tcGxldGUtaW5wdXRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IG51bWJlclwiIFsobmdNb2RlbCldPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3UGhvbmVOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1BoXCIgbWF0SW5wdXQgbmFtZT1cIm5ld1Bob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25OdW1iZXJBdXRvY29tcGxldGUoKVwiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvUGg9XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25QaG9uZU51bWJlckNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBudW1iZXIgb2YgZmlsdGVyZWRQaG9uZU51bWJlcnNcIiBbdmFsdWVdPVwibnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcGhvbmVOdW1iZXJQZW5kaW5nICYmICFkbnNTZXJ2aWNlLnBob25lTnVtYmVycz8ubGVuZ3RoXCIgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIFBob25lIG51bWJlcnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgbG9jYXRpb25cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiM1wiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEucmVtb3ZlRXh0ZW5zaW9uXCI+XG4gICAgICAgICAgICAgICAgUmVtb3ZlIG51bWJlclxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cblxuICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPkV4dGVuc2lvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInJhZGlvLWdyb3VwXCIgbmFtZT1cIm1vdmVUeXBlRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RFeHRlbnNpb25NaWdyYXRpb25UeXBlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvblwiPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjFcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIEtlZXAgY3VycmVudCBleHRlbnNpb24ge3sgcHJlcGFyZU1pZ3JhdGlvbkRhdGEucHJpbWFyeUV4dGVuc2lvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiMlwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IGEgbmV3IGV4dGVuc2lvblxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvbiA9PT0gJzInXCIgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdFeHRlbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRXh0ZW5zaW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvblwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgZXh0ZW5zaW9uJ1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiM1wiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEucmVtb3ZlUGhvbmVOdW1iZXJcIj5SZW1vdmUgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cblxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLW5leHRcIiBtYXRTdGVwcGVyTmV4dFxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc05leHRGcm9tU2VsZWN0TG9jYXRpb25EaXNhYmxlZCgpXCIgKGNsaWNrKT1cImdvTmV4dFN0ZXAoc3RlcHBlcilcIj5cbiAgICAgICAgICBOZXh0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLWNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc3RlcD5cbiAgICA8bWF0LXN0ZXAgW2FyaWEtbGFiZWxsZWRieV09XCInZGlzYWJsZWRfYWYnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC10aXRsZVwiPlN0ZXAgMjogRGV2aWNlIGVsaWdpYmlsaXR5IGNoZWNrPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPkRldmljZSBlbGlnaWJpbGl0eSBjaGVjazwvbmctdGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwibW92ZS11c2VyLXRhYi1jb250ZW50LWJveFwiPlxuICAgICAgICA8YXBwLWRldmljZXMtbW92ZS11c2VyLXRhYj48L2FwcC1kZXZpY2VzLW1vdmUtdXNlci10YWI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwid2ViZXgtYnRuIGJ0bi1uZXh0XCIgbWF0U3RlcHBlck5leHQgKGNsaWNrKT1cImdvTmV4dFN0ZXAoc3RlcHBlcilcIj5cbiAgICAgICAgICBOZXh0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLWNhbmNlbFwiIG1hdFN0ZXBwZXJQcmV2aW91cz5cbiAgICAgICAgICBQcmV2aW91c1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXN0ZXA+XG4gICAgPG1hdC1zdGVwIFthcmlhLWxhYmVsbGVkYnldPVwiJ2Rpc2FibGVkX2FmJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtdGl0bGVcIj5TdGVwIDM6IFZhbGlkYXRpb248L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+VmFsaWRhdGlvbjwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2VzLW1vdmUtdXNlci1ib3hcIj5cbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPlZhbGlkYXRpb248L21hdC1sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFwcmVwYXJlTWlncmF0aW9uRGF0YS5lcnJvcnM/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWxpZGF0aW9uU3VjY2Vzc1wiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhLmVycm9ycz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZhbGlkYXRpb25GYWlsZWRcIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gI25leHRBZnRlck1vdmVCdG4gbWF0LWJ1dHRvbiBjbGFzcz1cImludmlzaWJsZS1uZXh0LWJ0blwiIG1hdFN0ZXBwZXJOZXh0XG4gICAgICAgICAgICAgIChjbGljayk9XCJnb05leHRTdGVwKHN0ZXBwZXIpXCI+PC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC1hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIndlYmV4LWJ0biBidG4tbmV4dFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXBhcmVNaWdyYXRpb25EYXRhLmVycm9ycz8ubGVuZ3RoID4gMCB8fCAhcHJlcGFyZU1pZ3JhdGlvbkRhdGEuaXNDb25maXJtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhcnRNaWdyYXRpb24oKVwiPlxuICAgICAgICAgIE1vdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIndlYmV4LWJ0biBidG4tY2FuY2VsXCIgbWF0U3RlcHBlclByZXZpb3VzPlxuICAgICAgICAgIFByZXZpb3VzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc3RlcD5cbiAgICA8bWF0LXN0ZXA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC10aXRsZVwiPlN0ZXAgNDogUmVzdWx0PC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlJlc3VsdDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXZpY2VzLW1vdmUtdXNlci1ib3hcIj5cbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPk1vdmluZyB1c2VyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQhPC9tYXQtbGFiZWw+XG4gICAgICAgIDxwIGNsYXNzPVwidmFsaWRhdGlvbi10ZXh0XCI+XG4gICAgICAgICAgVGhlIHVzZXIgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbmV3IGxvY2F0aW9uLCAkTVRsb2NhdGlvbm5hbWUuXG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICBGb3IgdGhlIHByb2dyZXNzIG9mIG1vdmUsIHBsZWFzZSB2aXNpdCB0aGVcbiAgICAgICAgICA8YSBjbGFzcz1cImZvcm0tbGlua1wiIGhyZWY9XCIjXCI+dXNlciBkZXRhaWxzPC9hPi5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwid2ViZXgtYnRuIGJ0bi1kb25lXCIgKGNsaWNrKT1cImRvbmUuZW1pdCh0cnVlKVwiPlxuICAgICAgICAgIERvbmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1zdGVwPlxuICA8L21hdC1zdGVwcGVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdmFsaWRhdGlvblN1Y2Nlc3M+XG4gIDxwIGNsYXNzPVwidmFsaWRhdGlvbi10ZXh0XCI+XG4gICAgVmFsaWRhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhlIHVzZXIgY2FuIGJlIG1vdmVkIHRvIHRoZVxuICAgIG5ldyBsb2NhdGlvbi4gUGxlYXNlIGJlIGF3YXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzXG4gICAgYmVsb3cuXG4gIDwvcD5cbiAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPkV4cGVjdGVkIGNoYW5nZXM8L21hdC1sYWJlbD5cbiAgPHVsPlxuICAgIDxsaT5DaXNjbyA2OTQxIGRldmljZSAoU0VQOTg3OTg3OTg3OTg3KSB3aWxsIG5vdCBiZSBtaWdyYXRlZDwvbGk+XG4gICAgPGxpPlxuICAgICAgVGhlIHVzZXIgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIENhbGwgUGlja3VwIEdyb3VwOlxuICAgICAgMTY3NTA5MDMzNC1QYXJpc19waWNrdXBcbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIElmIFdlYmV4IEFwcCBpcyBjdXJyZW50bHkgaW4gdXNlLCB0aGUgdXNlciB3aWxsIHRvIHNpZ24gaW4gYWdhaW4gdG9cbiAgICAgIHVwZGF0ZSB0aGUgc2VydmljZS5cbiAgICA8L2xpPlxuICA8L3VsPlxuICA8Zm9ybT5cbiAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hcIiBuYW1lPVwiaXNDb25maXJtXCIgWyhuZ01vZGVsKV09XCJwcmVwYXJlTWlncmF0aW9uRGF0YS5pc0NvbmZpcm1cIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBJIGNvbmZpcm0gdGhhdCBJIHVuZGVyc3RhbmQgdGhlc2UgY29uZGl0aW9ucy4gSSBhY2tub3dsZWRnZSB0aGVcbiAgICAgIGNoYW5nZXMuXG4gICAgPC9tYXQtY2hlY2tib3g+XG4gIDwvZm9ybT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN2YWxpZGF0aW9uRmFpbGVkPlxuICA8cCBjbGFzcz1cInZhbGlkYXRpb24tdGV4dFwiPlxuICAgIFZhbGlkYXRpb24gaXMgZmFpbGVkLiBVc2VyIG1pZ3JhdGlvbiBpcyBub3QgYXZhaWxhYmxlXG4gIDwvcD5cbiAgPHVsPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgcHJlcGFyZU1pZ3JhdGlvbkRhdGEuZXJyb3JzXCI+e3sgZXJyb3IgfX08L2xpPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL21vdmUtdXNlci13aXphcmQvbW92ZS11c2VyLXN0ZXBwZXIvbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL21vdmUtdXNlci13aXphcmQvbW92ZS11c2VyLXN0ZXBwZXIvbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJcEcsZ0JBQWdCO0FBQ2hCLE1BQU0sUUFBUSxHQUFHLG9GQUFvRixDQUFDO0FBUXRHLE1BQU0sT0FBTyx3QkFBd0I7SUFtQm5DLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMs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QUssQ0FBQztnQkFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFFSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNwQyxDQUFDOztzSEF0TFUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsZ1RDckJyQyxzZ1RBOE5BOzRGRHpNYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsdUJBQXVCOzZOQU1GLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRTdCLElBQUk7c0JBREgsTUFBTTtnQkFHUCxJQUFJO3NCQURILEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUdOLFdBQVc7c0JBRFYsTUFBTTtnQkFHUCxNQUFNO3NCQURMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IERuc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kbnMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXJcIjtcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcExvY2F0aW9uIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hcHAtbG9jYXRpb24nO1xuaW1wb3J0IHsgU2l0ZVNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBmaWx0ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uLWZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBNaWdyYXRpb25EYXRhLCBQcmVwYXJlTWlncmF0aW9uQm9keSwgUHJlcGFyZU1pZ3JhdGlvbkRhdGEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL21vdmUtdXNlcic7XG5pbXBvcnQgeyBNb3ZlVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb3ZlLXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG4vLyBmb3IgdGVzdCBvbmx5XG5jb25zdCBMT0NBVElPTiA9ICdZMmx6WTI5emNHRnlhem92TDNWekwweFBRMEZVU1U5T0x6RTJZalkwTmpsakxUQmpabVF0TkRKak1TMWlPV0pqTFRVeU4yRmxaVE5oTjJSbE9RJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1vdmUtdXNlci1zdGVwcGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vdmUtdXNlci1zdGVwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW92ZS11c2VyLXN0ZXBwZXIuY29tcG9uZW50LnNjc3MnXVxuXG59KVxuZXhwb3J0IGNsYXNzIE1vdmVVc2VyU3RlcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ25leHRBZnRlck1vdmVCdG4nKSBuZXh0QWZ0ZXJNb3ZlQnRuOiBhbnk7XG4gIEBPdXRwdXQoKVxuICBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKVxuICB1c2VyOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGN1c3RvbWVySWQhOiBudW1iZXI7XG4gIEBPdXRwdXQoKVxuICBydW5Nb3ZlVXNlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgaXNMaW5lYXIgPSBmYWxzZTtcbiAgcGhvbmVOdW1iZXJQZW5kaW5nID0gZmFsc2U7XG4gIHN0ZXBwZXIhOiBNYXRTdGVwcGVyO1xuICBmaWx0ZXJlZExvY2F0aW9uczogQXBwTG9jYXRpb25bXSA9IFtdO1xuICBmaWx0ZXJlZFBob25lTnVtYmVyczogYW55O1xuICBkYXRhUGVuZGluZyA9IGZhbHNlO1xuXG4gIGdldCBtb3ZlVXNlclBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UubW92ZVVzZXJQZW5kaW5nO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnROdW1iZXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy51c2VyPy5kZXZpY2VzPy5sZW5ndGggJiYgdGhpcy51c2VyLmRldmljZXNbMF0/LmxpbmVBc3NvY2lhdGlvbnMgJiYgdGhpcy51c2VyLmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9uc1swXSkge1xuICAgICAgcmV0dXJuIHRoaXMudXNlci5kZXZpY2VzWzBdLmxpbmVBc3NvY2lhdGlvbnNbMF0uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9ucygpOiBBcHBMb2NhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmxvY2F0aW9ucztcbiAgfVxuXG4gIGdldCBwcmVwYXJlTWlncmF0aW9uRGF0YSgpOiBQcmVwYXJlTWlncmF0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRuc1NlcnZpY2U6IERuc1NlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHVibGljIG1vdmVVc2VyU2VydmljZTogTW92ZVVzZXJTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tb3ZlVXNlclNlcnZpY2UucHJlcGFyZU1pZ3JhdGlvbkRhdGEgPSBuZXcgUHJlcGFyZU1pZ3JhdGlvbkRhdGEoKTtcbiAgICB0aGlzLmdldERhdGEoKTtcbiAgfVxuXG4gIGRpc3BsYXlMb2NhdGlvbihsb2NhdGlvbj86IEFwcExvY2F0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbG9jYXRpb24/Lm5hbWUgfHwgJyc7XG4gIH1cblxuICBvbkxvY2F0aW9uQXV0b2NvbXBsZXRlKGV2ZW50OiBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgaWYgKHRoaXMubG9jYXRpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRMb2NhdGlvbnMgPSBmaWx0ZXJPcHRpb25zKHRoaXMubG9jYXRpb25zLCB2YWx1ZSB8fCAnJywgJycsICduYW1lJyk7XG4gICAgfVxuICB9XG5cbiAgb25OdW1iZXJBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG5zU2VydmljZS5waG9uZU51bWJlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFBob25lTnVtYmVycyA9IGZpbHRlck9wdGlvbnModGhpcy5kbnNTZXJ2aWNlLnBob25lTnVtYmVycywgdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdQaG9uZU51bWJlcik7XG4gICAgfVxuICB9XG5cbiAgb25Nb3ZlVXNlcihzdGVwcGVyOiBNYXRTdGVwcGVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcGVyID0gc3RlcHBlcjtcbiAgICB0aGlzLnJ1bk1vdmVVc2VyLmVtaXQoKTtcbiAgfVxuXG4gIG9uU3RlcENoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gIH1cblxuICBzZWxlY3RQaG9uZU51bWJlck1pZ3JhdGlvblR5cGUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC52YWx1ZSAmJiBldmVudC52YWx1ZSA9PT0gJzInKSB7XG4gICAgICB0aGlzLmdldFBob25lTnVtYmVycygpO1xuICAgIH1cbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5yZW1vdmVQaG9uZU51bWJlciA9IGV2ZW50LnZhbHVlICYmIGV2ZW50LnZhbHVlID09PSAnMyc7XG4gIH1cblxuICBzZWxlY3RFeHRlbnNpb25NaWdyYXRpb25UeXBlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5yZW1vdmVFeHRlbnNpb24gPSBldmVudC52YWx1ZSAmJiBldmVudC52YWx1ZSA9PT0gJzMnO1xuICB9XG5cbiAgb25QaG9uZU51bWJlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ25ldyBwaG9uZSBudW1iZXIgPSAnLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld1Bob25lTnVtYmVyKTtcbiAgfVxuXG4gIG9uTG9jYXRpb25DaGFuZ2UoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdMb2NhdGlvbiA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcbiAgICB0aGlzLm1vdmVVc2VyU2VydmljZS5yZXNldE1pZ3JhdGlvbkRhdGFGb3JOZXdMb2NhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJykge1xuICAgICAgdGhpcy5nZXRQaG9uZU51bWJlcnMoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRQcmVwYXJlVXNlckRhdGEoKTtcbiAgfVxuXG4gIG9uRXh0ZW5zaW9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbmV3IG5ld0V4dGVuc2lvbiA9ICcsIHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3RXh0ZW5zaW9uKTtcbiAgfVxuXG4gIGdldFBob25lTnVtYmVycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3TG9jYXRpb24/LmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGhvbmVOdW1iZXJQZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRuc1NlcnZpY2UuZmV0Y2hQaG9uZU51bWJlcnModGhpcy5jdXN0b21lcklkLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0xvY2F0aW9uLmlkKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXJQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQaG9uZU51bWJlcnMgPSB0aGlzLmRuc1NlcnZpY2UucGhvbmVOdW1iZXJzLnNsaWNlKCk7XG4gICAgICB9LCAoKSA9PiB0aGlzLnBob25lTnVtYmVyUGVuZGluZyA9IGZhbHNlKTtcbiAgfVxuXG4gIGlzTmV4dEZyb21TZWxlY3RMb2NhdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YT8ubmV3TG9jYXRpb24/LmlkIHx8ICF0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLmVudGl0eUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJyAmJiAhdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdQaG9uZU51bWJlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvbiA9PT0gJzInICYmICF0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdvTmV4dFN0ZXAoc3RlcHBlcjogTWF0U3RlcHBlcikge1xuXG4gIH1cblxuICBzdGFydE1pZ3JhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBtaWdyYXRpb25EYXRhID0gbmV3IE1pZ3JhdGlvbkRhdGEodGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YSk7XG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5tb3ZlVXNlclNlcnZpY2Uuc3RhcnRNaWdyYXRpb24obWlncmF0aW9uRGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubmV4dEFmdGVyTW92ZUJ0bj8uX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLm5leHRBZnRlck1vdmVCdG4uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gIH1cblxuICBnZXREYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5nZXRMb2NhdGlvbnModGhpcy5jdXN0b21lcklkKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExvY2F0aW9ucyA9IHRoaXMubG9jYXRpb25zLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xuICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVwYXJlVXNlckRhdGEoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGE/Lm5ld0xvY2F0aW9uPy5pZCkge1xuICAgICAgdGhpcy5tb3ZlVXNlclNlcnZpY2Uuc2V0T3JpZ2luUHJlcGFyZU1pZ3JhdGlvbkRhdGEoKTtcbiAgICAgIGNvbnN0IHByZXBhcmVNaWdyYXRpb25Cb2R5ID0gbmV3IFByZXBhcmVNaWdyYXRpb25Cb2R5KHRoaXMudXNlciwgdGhpcy5jdXN0b21lcklkLCB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0xvY2F0aW9uLmlkKTtcbiAgICAgIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5tb3ZlVXNlclNlcnZpY2UuZmV0Y2hQcmVwYXJlTWlncmF0aW9uRGF0YShwcmVwYXJlTWlncmF0aW9uQm9keSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW92ZVVzZXJTZXJ2aWNlLnByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoJ01vdmUgdXNlciBhdHRlbXB0IGlzIGZhaWxlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRNb3ZlVHlwZVBob25lTlVtYmVyKCk6IHZvaWQge1xuICAgIHRoaXMuZG5zU2VydmljZS5waG9uZU51bWJlcnMgPSBbXTtcbiAgfVxuXG59XG4iLCI8YXBwLWxvYWRlciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhLnBlbmRpbmcgfHwgbW92ZVVzZXJQZW5kaW5nIHx8IGRhdGFQZW5kaW5nXCI+PC9hcHAtbG9hZGVyPlxuPGRpdiBpZD1cIm1vdmUtdXNlci1zdGVwcGVyXCI+XG4gIDxtYXQtc3RlcHBlciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhPy5tb3ZlVHlwZVwiIFtsaW5lYXJdPVwiaXNMaW5lYXJcIiBsYWJlbFBvc2l0aW9uPVwiYm90dG9tXCIgI3N0ZXBwZXI+XG4gICAgPG1hdC1zdGVwPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtdGl0bGVcIj5TdGVwIDE6IFNlbGVjdCBsb2NhdGlvbjwvZGl2PlxuICAgICAgPCEtLSAgICAgIDxmb3JtPi0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5TZWxlY3QgbG9jYXRpb248L25nLXRlbXBsYXRlPlxuICAgICAgPGZvcm0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLXVzZXItdGFiLWNvbnRlbnQtYm94XCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPlNlbGVjdCBhIG5ldyBsb2NhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFwcC1hdXRvY29tcGxldGUtaW5wdXRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPGlucHV0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IGxvY2F0aW9uXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25Mb2NhdGlvbkF1dG9jb21wbGV0ZSgkZXZlbnQpXCIvPlxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbkxvY2F0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGZpbHRlcmVkTG9jYXRpb25zXCIgW3ZhbHVlXT1cImxvY2F0aW9uXCI+XG4gICAgICAgICAgICAgICAge3sgbG9jYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFQZW5kaW5nICYmICFsb2NhdGlvbnMubGVuZ3RoXCIgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgIExvY2F0aW9ucyBhcmUgbm90IGF2YWlsYWJsZVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhPy5uZXdMb2NhdGlvbj8uaWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtYXQtbGFiZWxcIj5QaG9uZSBudW1iZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJyYWRpby1ncm91cFwiIG5hbWU9XCJtb3ZlVHlwZVBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVwYXJlTWlncmF0aW9uRGF0YS5tb3ZlVHlwZS5waG9uZU51bWJlclwiIG5hbWU9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0UGhvbmVOdW1iZXJNaWdyYXRpb25UeXBlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInJhZGlvLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCIxXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgbnVtYmVyXG4gICAgICAgICAgICAgICAge3sgcHJlcGFyZU1pZ3JhdGlvbkRhdGEucHJpbWFyeVBob25lTnVtYmVyIHx8IGN1cnJlbnROdW1iZXIgfX1cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjJcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwcmVwYXJlTWlncmF0aW9uRGF0YS5uZXdMb2NhdGlvbj8uaWRcIj5cbiAgICAgICAgICAgICAgICBTZWxlY3QgYSBuZXcgbnVtYmVyXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEubW92ZVR5cGUucGhvbmVOdW1iZXIgPT09ICcyJ1wiIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInBob25lTnVtYmVyUGVuZGluZ1wiIGNsYXNzPVwiZmllbGQtc3Bpbm5lclwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMwXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFwcC1hdXRvY29tcGxldGUtaW5wdXRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IG51bWJlclwiIFsobmdNb2RlbCldPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3UGhvbmVOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1BoXCIgbWF0SW5wdXQgbmFtZT1cIm5ld1Bob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25OdW1iZXJBdXRvY29tcGxldGUoKVwiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvUGg9XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25QaG9uZU51bWJlckNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBudW1iZXIgb2YgZmlsdGVyZWRQaG9uZU51bWJlcnNcIiBbdmFsdWVdPVwibnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcGhvbmVOdW1iZXJQZW5kaW5nICYmICFkbnNTZXJ2aWNlLnBob25lTnVtYmVycz8ubGVuZ3RoXCIgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIFBob25lIG51bWJlcnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgbG9jYXRpb25cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiM1wiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEucmVtb3ZlRXh0ZW5zaW9uXCI+XG4gICAgICAgICAgICAgICAgUmVtb3ZlIG51bWJlclxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cblxuICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1hdC1sYWJlbFwiPkV4dGVuc2lvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cInJhZGlvLWdyb3VwXCIgbmFtZT1cIm1vdmVUeXBlRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RFeHRlbnNpb25NaWdyYXRpb25UeXBlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvblwiPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjFcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIEtlZXAgY3VycmVudCBleHRlbnNpb24ge3sgcHJlcGFyZU1pZ3JhdGlvbkRhdGEucHJpbWFyeUV4dGVuc2lvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiMlwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IGEgbmV3IGV4dGVuc2lvblxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByZXBhcmVNaWdyYXRpb25EYXRhLm1vdmVUeXBlLmV4dGVuc2lvbiA9PT0gJzInXCIgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdFeHRlbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRXh0ZW5zaW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvblwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgZXh0ZW5zaW9uJ1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyYWRpby1idXR0b25cIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiM1wiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEucmVtb3ZlUGhvbmVOdW1iZXJcIj5SZW1vdmUgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cblxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLW5leHRcIiBtYXRTdGVwcGVyTmV4dFxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc05leHRGcm9tU2VsZWN0TG9jYXRpb25EaXNhYmxlZCgpXCIgKGNsaWNrKT1cImdvTmV4dFN0ZXAoc3RlcHBlcilcIj5cbiAgICAgICAgICBOZXh0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLWNhbmNlbFwiIChjbGljayk9XCJjYW5jZWwuZW1pdCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1zdGVwPlxuICAgIDxtYXQtc3RlcCBbYXJpYS1sYWJlbGxlZGJ5XT1cIidkaXNhYmxlZF9hZidcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXRpdGxlXCI+U3RlcCAyOiBEZXZpY2UgZWxpZ2liaWxpdHkgY2hlY2s8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+RGV2aWNlIGVsaWdpYmlsaXR5IGNoZWNrPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLXVzZXItdGFiLWNvbnRlbnQtYm94XCI+XG4gICAgICAgIDxhcHAtZGV2aWNlcy1tb3ZlLXVzZXItdGFiPjwvYXBwLWRldmljZXMtbW92ZS11c2VyLXRhYj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJ3ZWJleC1idG4gYnRuLW5leHRcIiBtYXRTdGVwcGVyTmV4dCAoY2xpY2spPVwiZ29OZXh0U3RlcChzdGVwcGVyKVwiPlxuICAgICAgICAgIE5leHRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIndlYmV4LWJ0biBidG4tY2FuY2VsXCIgbWF0U3RlcHBlclByZXZpb3VzPlxuICAgICAgICAgIFByZXZpb3VzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc3RlcD5cbiAgICA8bWF0LXN0ZXAgW2FyaWEtbGFiZWxsZWRieV09XCInZGlzYWJsZWRfYWYnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC10aXRsZVwiPlN0ZXAgMzogVmFsaWRhdGlvbjwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5WYWxpZGF0aW9uPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImRldmljZXMtbW92ZS11c2VyLWJveFwiPlxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibWF0LWxhYmVsXCI+VmFsaWRhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXByZXBhcmVNaWdyYXRpb25EYXRhLmVycm9ycz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZhbGlkYXRpb25TdWNjZXNzXCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEuZXJyb3JzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsaWRhdGlvbkZhaWxlZFwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiAjbmV4dEFmdGVyTW92ZUJ0biBtYXQtYnV0dG9uIGNsYXNzPVwiaW52aXNpYmxlLW5leHQtYnRuXCIgbWF0U3RlcHBlck5leHRcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTmV4dFN0ZXAoc3RlcHBlcilcIj48L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwid2ViZXgtYnRuIGJ0bi1uZXh0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEuZXJyb3JzPy5sZW5ndGggPiAwIHx8ICFwcmVwYXJlTWlncmF0aW9uRGF0YS5pc0NvbmZpcm1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydE1pZ3JhdGlvbigpXCI+XG4gICAgICAgICAgTW92ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwid2ViZXgtYnRuIGJ0bi1jYW5jZWxcIiBtYXRTdGVwcGVyUHJldmlvdXM+XG4gICAgICAgICAgUHJldmlvdXNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1zdGVwPlxuICAgIDxtYXQtc3RlcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXRpdGxlXCI+U3RlcCA0OiBSZXN1bHQ8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+UmVzdWx0PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImRldmljZXMtbW92ZS11c2VyLWJveFwiPlxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibWF0LWxhYmVsXCI+TW92aW5nIHVzZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluaXRpYXRlZCE8L21hdC1sYWJlbD5cbiAgICAgICAgPHAgY2xhc3M9XCJ2YWxpZGF0aW9uLXRleHRcIj5cbiAgICAgICAgICBUaGUgdXNlciB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXcgbG9jYXRpb24ge3twcmVwYXJlTWlncmF0aW9uRGF0YT8ubmV3TG9jYXRpb24/Lm5hbWV9fVxuICAgICAgICAgIDxici8+XG4gICAgICAgICAgRm9yIHRoZSBwcm9ncmVzcyBvZiBtb3ZlLCBwbGVhc2UgdmlzaXQgdGhlXG4gICAgICAgICAgPGEgY2xhc3M9XCJmb3JtLWxpbmtcIiBocmVmPVwiI1wiPnVzZXIgZGV0YWlsczwvYT4uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcC1hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIndlYmV4LWJ0biBidG4tZG9uZVwiIChjbGljayk9XCJkb25lLmVtaXQodHJ1ZSlcIj5cbiAgICAgICAgICBEb25lXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtc3RlcD5cbiAgPC9tYXQtc3RlcHBlcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3ZhbGlkYXRpb25TdWNjZXNzPlxuICA8cCBjbGFzcz1cInZhbGlkYXRpb24tdGV4dFwiPlxuICAgIFZhbGlkYXRpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIFRoZSB1c2VyIGNhbiBiZSBtb3ZlZCB0byB0aGVcbiAgICBuZXcgbG9jYXRpb24uIFBsZWFzZSBiZSBhd2FyZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlc1xuICAgIGJlbG93LlxuICA8L3A+XG4gIDxtYXQtbGFiZWwgY2xhc3M9XCJtYXQtbGFiZWxcIj5FeHBlY3RlZCBjaGFuZ2VzPC9tYXQtbGFiZWw+XG4gIDx1bD5cbiAgICA8bGk+Q2lzY28gNjk0MSBkZXZpY2UgKFNFUDk4Nzk4Nzk4Nzk4Nykgd2lsbCBub3QgYmUgbWlncmF0ZWQ8L2xpPlxuICAgIDxsaT5cbiAgICAgIFRoZSB1c2VyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBDYWxsIFBpY2t1cCBHcm91cDpcbiAgICAgIDE2NzUwOTAzMzQtUGFyaXNfcGlja3VwXG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICBJZiBXZWJleCBBcHAgaXMgY3VycmVudGx5IGluIHVzZSwgdGhlIHVzZXIgd2lsbCB0byBzaWduIGluIGFnYWluIHRvXG4gICAgICB1cGRhdGUgdGhlIHNlcnZpY2UuXG4gICAgPC9saT5cbiAgPC91bD5cbiAgPGZvcm0+XG4gICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImNoZWNrYm94XCIgbmFtZT1cImlzQ29uZmlybVwiIFsobmdNb2RlbCldPVwicHJlcGFyZU1pZ3JhdGlvbkRhdGEuaXNDb25maXJtXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgSSBjb25maXJtIHRoYXQgSSB1bmRlcnN0YW5kIHRoZXNlIGNvbmRpdGlvbnMuIEkgYWNrbm93bGVkZ2UgdGhlXG4gICAgICBjaGFuZ2VzLlxuICAgIDwvbWF0LWNoZWNrYm94PlxuICA8L2Zvcm0+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdmFsaWRhdGlvbkZhaWxlZD5cbiAgPHAgY2xhc3M9XCJ2YWxpZGF0aW9uLXRleHRcIj5cbiAgICBWYWxpZGF0aW9uIGlzIGZhaWxlZC4gVXNlciBtaWdyYXRpb24gaXMgbm90IGF2YWlsYWJsZVxuICA8L3A+XG4gIDx1bD5cbiAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIHByZXBhcmVNaWdyYXRpb25EYXRhLmVycm9yc1wiPnt7IGVycm9yIH19PC9saT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -2,7 +2,6 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { API } from '../app.constants';
|
|
3
3
|
import { map } from 'rxjs/operators';
|
|
4
4
|
import { PrepareMigrationData } from '../classes/move-user';
|
|
5
|
-
import { Observable } from 'rxjs';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "./api.service";
|
|
8
7
|
import * as i2 from "../services/api-webex.service";
|
|
@@ -31,17 +30,18 @@ export class MoveUserService {
|
|
|
31
30
|
// .pipe(this.handleError(false, true));
|
|
32
31
|
}
|
|
33
32
|
startMigration(data) {
|
|
34
|
-
return new Observable(observer => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
/* return new Observable<boolean>(observer => {
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
observer.next(true);
|
|
36
|
+
|
|
37
|
+
}, 2000);
|
|
38
|
+
});*/
|
|
39
|
+
return this.apiWebexService.post(API.START_MIGRATION, data.getSavableData())
|
|
40
|
+
.pipe(map((result) => {
|
|
41
|
+
if (data) {
|
|
42
|
+
this.prepareMigrationData = new PrepareMigrationData(data);
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
45
|
// .pipe(this.handleError(false, true));
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -50,4 +50,4 @@ MoveUserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", vers
|
|
|
50
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MoveUserService, decorators: [{
|
|
51
51
|
type: Injectable
|
|
52
52
|
}], ctorParameters: function () { return [{ type: i1.APIService }, { type: i2.ApiWebexService }]; } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS11c2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvc2VydmljZXMvbW92ZS11c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBdUMsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUlqRyxNQUFNLE9BQU8sZUFBZTtJQUkxQixZQUNVLFVBQXNCLEVBQ3RCLGVBQWdDO1FBRGhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBRzFDLENBQUM7SUFFRCxnQ0FBZ0M7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFFOUMsQ0FBQztJQUVELDZCQUE2QjtRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBMEI7UUFDbEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ2xGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN4QixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDL0Y7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sd0NBQXdDO0lBQzFDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBbUI7UUFDakM7Ozs7O2NBS007UUFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN4QixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDTix3Q0FBd0M7SUFDMUMsQ0FBQzs7NkdBaERVLGVBQWU7aUhBQWYsZUFBZTs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpV2ViZXhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBpLXdlYmV4LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVBJIH0gZnJvbSAnLi4vYXBwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNaWdyYXRpb25EYXRhLCBQcmVwYXJlTWlncmF0aW9uQm9keSwgUHJlcGFyZU1pZ3JhdGlvbkRhdGEgfSBmcm9tICcuLi9jbGFzc2VzL21vdmUtdXNlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb3ZlVXNlclNlcnZpY2Uge1xuICBwcmVwYXJlTWlncmF0aW9uRGF0YSE6IFByZXBhcmVNaWdyYXRpb25EYXRhO1xuICBvcmlnaW5QcmVwYXJlTWlncmF0aW9uRGF0YSE6IFByZXBhcmVNaWdyYXRpb25EYXRhO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQVBJU2VydmljZSxcbiAgICBwcml2YXRlIGFwaVdlYmV4U2VydmljZTogQXBpV2ViZXhTZXJ2aWNlXG4gICkge1xuXG4gIH1cblxuICByZXNldE1pZ3JhdGlvbkRhdGFGb3JOZXdMb2NhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvbiA9ICcnO1xuICAgIHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEubmV3UGhvbmVOdW1iZXIgPSAnJztcbiAgICB0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLm5ld0V4dGVuc2lvbiA9ICcnO1xuXG4gIH1cblxuICBzZXRPcmlnaW5QcmVwYXJlTWlncmF0aW9uRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByZXBhcmVNaWdyYXRpb25EYXRhLmdldFNhdmFibGVEYXRhKCkpKTtcbiAgICB0aGlzLm9yaWdpblByZXBhcmVNaWdyYXRpb25EYXRhID0gbmV3IFByZXBhcmVNaWdyYXRpb25EYXRhKGRhdGEpO1xuICB9XG5cbiAgZmV0Y2hQcmVwYXJlTWlncmF0aW9uRGF0YShkYXRhOiBQcmVwYXJlTWlncmF0aW9uQm9keSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpV2ViZXhTZXJ2aWNlLnBvc3QoQVBJLlBSRVBBUkVfUEVSU09OX01JR1JBVElPTiwgZGF0YS5nZXRTYXZhYmxlRGF0YSgpKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5wcmVwYXJlTWlncmF0aW9uRGF0YSA9IG5ldyBQcmVwYXJlTWlncmF0aW9uRGF0YShyZXN1bHQsIHRoaXMub3JpZ2luUHJlcGFyZU1pZ3JhdGlvbkRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSk7XG4gICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xuICB9XG5cbiAgc3RhcnRNaWdyYXRpb24oZGF0YTogTWlncmF0aW9uRGF0YSk6IGFueSB7XG4gICAvKiByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG5cbiAgICAgIH0sIDIwMDApO1xuICAgIH0pOyovXG4gICAgcmV0dXJuIHRoaXMuYXBpV2ViZXhTZXJ2aWNlLnBvc3QoQVBJLlNUQVJUX01JR1JBVElPTiwgZGF0YS5nZXRTYXZhYmxlRGF0YSgpKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucHJlcGFyZU1pZ3JhdGlvbkRhdGEgPSBuZXcgUHJlcGFyZU1pZ3JhdGlvbkRhdGEoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XG4gIH1cbn1cbiJdfQ==
|