ngx-auth-firebaseui-updated
Version:
From ngx-auth-firbaseui but updated to fix dependency issues with Angular 16. Open Source Library for Angular Web Apps to integrate a material user interface for firebase authentication
244 lines • 29.3 kB
JavaScript
// @angular/*
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
// @angular/fire
import { FIREBASE_APP_NAME, FIREBASE_OPTIONS } from '@angular/fire/compat';
import { AngularFireAuthModule } from '@angular/fire/compat/auth';
import { AngularFirestoreModule } from '@angular/fire/compat/firestore';
// @angular/material
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatChipsModule } from '@angular/material/chips';
import { MatDialogModule } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatMenuModule } from '@angular/material/menu';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatTabsModule } from '@angular/material/tabs';
import { MatTooltipModule } from '@angular/material/tooltip';
import { MatPasswordStrengthModule } from '@angular-material-extensions/password-strength';
import { NgxAuthFirebaseuiLoginComponent } from './components/ngx-auth-firebaseui-login/ngx-auth-firebaseui-login.component';
import { NgxAuthFirebaseuiRegisterComponent } from './components/ngx-auth-firebaseui-register/ngx-auth-firebaseui-register.component';
// ngx-auth-firebaseui
// components
import { AuthComponent } from './components/ngx-auth-firebaseui/auth.component';
import { UserComponent } from './components/ngx-auth-firebaseui-user/user.component';
import { AuthProvidersComponent } from './components/providers/auth.providers.component';
import { EmailConfirmationComponent } from './components/email-confirmation/email-confirmation.component';
import { ngxAuthFirebaseUIConfigFactory } from './interfaces/config.interface';
import { NgxAuthFirebaseuiAvatarComponent } from './components/ngx-auth-firebaseui-avatar/ngx-auth-firebaseui-avatar.component';
import { LegalityDialogComponent } from './components/legality-dialog/legality-dialog.component';
// guards
import { LoggedInGuard } from './guards/logged-in.guard';
// services
import { FirestoreSyncService } from './services/firestore-sync.service';
import { AuthProcessService } from './services/auth-process.service';
import { NgxAuthFirebaseUIConfigToken, UserProvidedConfigToken } from './tokens';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/icon";
import * as i2 from "@angular/platform-browser";
import * as i3 from "./services/auth-process.service";
// interfaces
// ###################################################################################################
// Export module's public API
// components
export { LegalityDialogComponent } from './components/legality-dialog/legality-dialog.component';
export { NgxAuthFirebaseuiAvatarComponent } from './components/ngx-auth-firebaseui-avatar/ngx-auth-firebaseui-avatar.component';
export { UserComponent } from './components/ngx-auth-firebaseui-user/user.component';
export { AuthComponent } from './components/ngx-auth-firebaseui/auth.component';
export { AuthProvidersComponent } from './components/providers/auth.providers.component';
export { NgxAuthFirebaseuiLoginComponent } from './components/ngx-auth-firebaseui-login/ngx-auth-firebaseui-login.component';
export { NgxAuthFirebaseuiRegisterComponent } from './components/ngx-auth-firebaseui-register/ngx-auth-firebaseui-register.component';
// guards
export { LoggedInGuard } from './guards/logged-in.guard';
// services
export { AuthProcessService, AuthProvider } from './services/auth-process.service';
export { FirestoreSyncService } from './services/firestore-sync.service';
export class NgxAuthFirebaseUIModule {
constructor(iconRegistry, sanitizer, auth) {
this.iconRegistry = iconRegistry;
this.sanitizer = sanitizer;
auth.listenToUserEvents();
this.registerProviderIcons();
}
static forRoot(configFactory, appNameFactory = () => undefined, config = {}) {
return {
ngModule: NgxAuthFirebaseUIModule,
providers: [
{
provide: FIREBASE_OPTIONS,
useValue: configFactory
},
{
provide: FIREBASE_APP_NAME,
useFactory: appNameFactory
},
{ provide: UserProvidedConfigToken, useValue: config },
{
provide: NgxAuthFirebaseUIConfigToken,
useFactory: ngxAuthFirebaseUIConfigFactory,
deps: [UserProvidedConfigToken]
},
AuthProcessService,
FirestoreSyncService,
LoggedInGuard
]
};
}
registerProviderIcons() {
this.iconRegistry
.addSvgIcon('google', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/google.svg'))
.addSvgIcon('apple', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/apple.svg'))
.addSvgIcon('google-colored', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/google.svg'))
.addSvgIcon('facebook', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/facebook.svg'))
.addSvgIcon('twitter', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/twitter.svg'))
.addSvgIcon('github', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/github-circle.svg'))
.addSvgIcon('microsoft', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/microsoft.svg'))
.addSvgIcon('yahoo', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/yahoo.svg'))
.addSvgIcon('phone', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/phone.svg'));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, deps: [{ token: i1.MatIconRegistry }, { token: i2.DomSanitizer }, { token: i3.AuthProcessService }], target: i0.ɵɵFactoryTarget.NgModule }); }
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, declarations: [AuthComponent,
UserComponent,
NgxAuthFirebaseuiAvatarComponent,
AuthProvidersComponent,
EmailConfirmationComponent,
LegalityDialogComponent,
NgxAuthFirebaseuiLoginComponent,
NgxAuthFirebaseuiRegisterComponent], imports: [CommonModule,
// HTTP
RouterModule,
HttpClientModule,
// FLEX_LAYOUT
// FORMS
FormsModule,
ReactiveFormsModule,
// MATERIAL2
MatTabsModule,
MatCardModule,
MatInputModule,
MatButtonModule,
MatIconModule,
MatSnackBarModule,
MatDividerModule,
MatChipsModule,
MatTooltipModule,
MatDialogModule,
MatCheckboxModule,
MatProgressSpinnerModule,
MatProgressBarModule,
MatDialogModule,
MatMenuModule,
// ANGULAR MATERIAL EXTENSIONS
MatPasswordStrengthModule,
// ANGULARFIRE2
AngularFireAuthModule,
AngularFirestoreModule], exports: [AuthComponent,
UserComponent,
NgxAuthFirebaseuiAvatarComponent,
AuthProvidersComponent,
EmailConfirmationComponent,
// LoggedInGuard,
AngularFireAuthModule,
AngularFirestoreModule,
NgxAuthFirebaseuiLoginComponent,
NgxAuthFirebaseuiRegisterComponent] }); }
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, imports: [CommonModule,
// HTTP
RouterModule,
HttpClientModule,
// FLEX_LAYOUT
// FORMS
FormsModule,
ReactiveFormsModule,
// MATERIAL2
MatTabsModule,
MatCardModule,
MatInputModule,
MatButtonModule,
MatIconModule,
MatSnackBarModule,
MatDividerModule,
MatChipsModule,
MatTooltipModule,
MatDialogModule,
MatCheckboxModule,
MatProgressSpinnerModule,
MatProgressBarModule,
MatDialogModule,
MatMenuModule,
// ANGULAR MATERIAL EXTENSIONS
MatPasswordStrengthModule,
// ANGULARFIRE2
AngularFireAuthModule,
AngularFirestoreModule,
// LoggedInGuard,
AngularFireAuthModule,
AngularFirestoreModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule,
// HTTP
RouterModule,
HttpClientModule,
// FLEX_LAYOUT
// FORMS
FormsModule,
ReactiveFormsModule,
// MATERIAL2
MatTabsModule,
MatCardModule,
MatInputModule,
MatButtonModule,
MatIconModule,
MatSnackBarModule,
MatDividerModule,
MatChipsModule,
MatTooltipModule,
MatDialogModule,
MatCheckboxModule,
MatProgressSpinnerModule,
MatProgressBarModule,
MatDialogModule,
MatMenuModule,
// ANGULAR MATERIAL EXTENSIONS
MatPasswordStrengthModule,
// ANGULARFIRE2
AngularFireAuthModule,
AngularFirestoreModule,
],
exports: [
AuthComponent,
UserComponent,
NgxAuthFirebaseuiAvatarComponent,
AuthProvidersComponent,
EmailConfirmationComponent,
// LoggedInGuard,
AngularFireAuthModule,
AngularFirestoreModule,
NgxAuthFirebaseuiLoginComponent,
NgxAuthFirebaseuiRegisterComponent
],
declarations: [
AuthComponent,
UserComponent,
NgxAuthFirebaseuiAvatarComponent,
AuthProvidersComponent,
EmailConfirmationComponent,
LegalityDialogComponent,
NgxAuthFirebaseuiLoginComponent,
NgxAuthFirebaseuiRegisterComponent
]
}]
}], ctorParameters: function () { return [{ type: i1.MatIconRegistry }, { type: i2.DomSanitizer }, { type: i3.AuthProcessService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1dGgtZmlyZWJhc2V1aS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXV0aC1maXJlYmFzZXVpL3NyYy9saWIvbmd4LWF1dGgtZmlyZWJhc2V1aS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQXNCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLGdCQUFnQjtBQUNoQixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7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QUF1Qjt3QkFDdkIsK0JBQStCO3dCQUMvQixrQ0FBa0M7cUJBQ25DO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGFuZ3VsYXIvKlxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SHR0cENsaWVudE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4vLyBAYW5ndWxhci9maXJlXG5pbXBvcnQge0ZJUkVCQVNFX0FQUF9OQU1FLCBGSVJFQkFTRV9PUFRJT05TfSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdCc7XG5pbXBvcnQge0ZpcmViYXNlT3B0aW9uc30gZnJvbSAnQGZpcmViYXNlL2FwcC10eXBlcyc7XG5pbXBvcnQge0FuZ3VsYXJGaXJlQXV0aE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvYXV0aCc7XG5pbXBvcnQge0FuZ3VsYXJGaXJlc3RvcmVNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0L2ZpcmVzdG9yZSc7XG4vLyBAYW5ndWxhci9tYXRlcmlhbFxuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdENhcmRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtNYXRDaGVja2JveE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHtNYXRDaGlwc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHtNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdERpdmlkZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlLCBNYXRJY29uUmVnaXN0cnl9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtNYXRNZW51TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NCYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge01hdFNuYWNrQmFyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHtNYXRUYWJzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7TWF0VG9vbHRpcE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7TWF0UGFzc3dvcmRTdHJlbmd0aE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9wYXNzd29yZC1zdHJlbmd0aCc7XG5cblxuaW1wb3J0IHtOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1sb2dpbi9uZ3gtYXV0aC1maXJlYmFzZXVpLWxvZ2luLmNvbXBvbmVudCc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLXJlZ2lzdGVyL25neC1hdXRoLWZpcmViYXNldWktcmVnaXN0ZXIuY29tcG9uZW50JztcblxuXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4vLyBuZ3gtYXV0aC1maXJlYmFzZXVpXG4vLyBjb21wb25lbnRzXG5pbXBvcnQge0F1dGhDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpL2F1dGguY29tcG9uZW50JztcbmltcG9ydCB7VXNlckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1hdXRoLWZpcmViYXNldWktdXNlci91c2VyLmNvbXBvbmVudCc7XG5pbXBvcnQge0F1dGhQcm92aWRlcnNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wcm92aWRlcnMvYXV0aC5wcm92aWRlcnMuY29tcG9uZW50JztcbmltcG9ydCB7RW1haWxDb25maXJtYXRpb25Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9lbWFpbC1jb25maXJtYXRpb24vZW1haWwtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZVVJQ29uZmlnLCBuZ3hBdXRoRmlyZWJhc2VVSUNvbmZpZ0ZhY3Rvcnl9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7Tmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLWF2YXRhci9uZ3gtYXV0aC1maXJlYmFzZXVpLWF2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHtMZWdhbGl0eURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2xlZ2FsaXR5LWRpYWxvZy9sZWdhbGl0eS1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGd1YXJkc1xuaW1wb3J0IHtMb2dnZWRJbkd1YXJkfSBmcm9tICcuL2d1YXJkcy9sb2dnZWQtaW4uZ3VhcmQnO1xuLy8gc2VydmljZXNcbmltcG9ydCB7RmlyZXN0b3JlU3luY1NlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZmlyZXN0b3JlLXN5bmMuc2VydmljZSc7XG5pbXBvcnQge0F1dGhQcm9jZXNzU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9hdXRoLXByb2Nlc3Muc2VydmljZSc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZVVJQ29uZmlnVG9rZW4sIFVzZXJQcm92aWRlZENvbmZpZ1Rva2VufSBmcm9tICcuL3Rva2Vucyc7XG4vLyBpbnRlcmZhY2VzXG4vLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIEV4cG9ydCBtb2R1bGUncyBwdWJsaWMgQVBJXG4vLyBjb21wb25lbnRzXG5leHBvcnQge0xlZ2FsaXR5RGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbGVnYWxpdHktZGlhbG9nL2xlZ2FsaXR5LWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0IHtMaW5rTWVudUl0ZW0sIE5neEF1dGhGaXJlYmFzZXVpQXZhdGFyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1hdmF0YXIvbmd4LWF1dGgtZmlyZWJhc2V1aS1hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCB7VXNlckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1hdXRoLWZpcmViYXNldWktdXNlci91c2VyLmNvbXBvbmVudCc7XG5leHBvcnQge0F1dGhDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpL2F1dGguY29tcG9uZW50JztcbmV4cG9ydCB7QXV0aFByb3ZpZGVyc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3ZpZGVycy9hdXRoLnByb3ZpZGVycy5jb21wb25lbnQnO1xuZXhwb3J0IHtOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1sb2dpbi9uZ3gtYXV0aC1maXJlYmFzZXVpLWxvZ2luLmNvbXBvbmVudCc7XG5leHBvcnQge05neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLXJlZ2lzdGVyL25neC1hdXRoLWZpcmViYXNldWktcmVnaXN0ZXIuY29tcG9uZW50JztcblxuXG4vLyBndWFyZHNcbmV4cG9ydCB7TG9nZ2VkSW5HdWFyZH0gZnJvbSAnLi9ndWFyZHMvbG9nZ2VkLWluLmd1YXJkJztcbi8vIGludGVyZmFjZXNcbmV4cG9ydCB7Tmd4QXV0aEZpcmViYXNlVUlDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbi8vIHNlcnZpY2VzXG5leHBvcnQge0F1dGhQcm9jZXNzU2VydmljZSwgQXV0aFByb3ZpZGVyfSBmcm9tICcuL3NlcnZpY2VzL2F1dGgtcHJvY2Vzcy5zZXJ2aWNlJztcbmV4cG9ydCB7RmlyZXN0b3JlU3luY1NlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZmlyZXN0b3JlLXN5bmMuc2VydmljZSc7XG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICAvLyBIVFRQXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgLy8gRkxFWF9MQVlPVVRcbiAgICAvLyBGT1JNU1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgLy8gTUFURVJJQUwyXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRDYXJkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFNuYWNrQmFyTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIC8vIEFOR1VMQVIgTUFURVJJQUwgRVhURU5TSU9OU1xuICAgIE1hdFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUsXG4gICAgLy8gQU5HVUxBUkZJUkUyXG4gICAgQW5ndWxhckZpcmVBdXRoTW9kdWxlLFxuICAgIEFuZ3VsYXJGaXJlc3RvcmVNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBdXRoQ29tcG9uZW50LFxuICAgIFVzZXJDb21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnQsXG4gICAgQXV0aFByb3ZpZGVyc0NvbXBvbmVudCxcbiAgICBFbWFpbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcbiAgICAvLyBMb2dnZWRJbkd1YXJkLFxuICAgIEFuZ3VsYXJGaXJlQXV0aE1vZHVsZSxcbiAgICBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlLFxuICAgIE5neEF1dGhGaXJlYmFzZXVpTG9naW5Db21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlSZWdpc3RlckNvbXBvbmVudFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBdXRoQ29tcG9uZW50LFxuICAgIFVzZXJDb21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnQsXG4gICAgQXV0aFByb3ZpZGVyc0NvbXBvbmVudCxcbiAgICBFbWFpbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcbiAgICBMZWdhbGl0eURpYWxvZ0NvbXBvbmVudCxcbiAgICBOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50LFxuICAgIE5neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBdXRoRmlyZWJhc2VVSU1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIGF1dGg6IEF1dGhQcm9jZXNzU2VydmljZSkge1xuICAgIGF1dGgubGlzdGVuVG9Vc2VyRXZlbnRzKCk7XG4gICAgdGhpcy5yZWdpc3RlclByb3ZpZGVySWNvbnMoKTtcbiAgfVxuXG5cbiAgc3RhdGljIGZvclJvb3QoXG4gICAgY29uZmlnRmFjdG9yeTogRmlyZWJhc2VPcHRpb25zLFxuICAgIGFwcE5hbWVGYWN0b3J5OiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoKSA9PiB1bmRlZmluZWQsXG4gICAgY29uZmlnOiBOZ3hBdXRoRmlyZWJhc2VVSUNvbmZpZyA9IHt9XG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4QXV0aEZpcmViYXNlVUlNb2R1bGU+IHtcblxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4QXV0aEZpcmViYXNlVUlNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6XG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGSVJFQkFTRV9PUFRJT05TLFxuICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ0ZhY3RvcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZJUkVCQVNFX0FQUF9OQU1FLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogYXBwTmFtZUZhY3RvcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtwcm92aWRlOiBVc2VyUHJvdmlkZWRDb25maWdUb2tlbiwgdXNlVmFsdWU6IGNvbmZpZ30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTmd4QXV0aEZpcmViYXNlVUlDb25maWdUb2tlbixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG5neEF1dGhGaXJlYmFzZVVJQ29uZmlnRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtVc2VyUHJvdmlkZWRDb25maWdUb2tlbl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEF1dGhQcm9jZXNzU2VydmljZSxcbiAgICAgICAgICBGaXJlc3RvcmVTeW5jU2VydmljZSxcbiAgICAgICAgICBMb2dnZWRJbkd1YXJkXG4gICAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgcmVnaXN0ZXJQcm92aWRlckljb25zKCkge1xuICAgIHRoaXMuaWNvblJlZ2lzdHJ5XG4gICAgICAuYWRkU3ZnSWNvbignZ29vZ2xlJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL21kaS9nb29nbGUuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbignYXBwbGUnLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL2FwcGxlLnN2ZycpKVxuICAgICAgLmFkZFN2Z0ljb24oJ2dvb2dsZS1jb2xvcmVkJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL2dvb2dsZS5zdmcnKSlcbiAgICAgIC5hZGRTdmdJY29uKCdmYWNlYm9vaycsIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnL2Fzc2V0cy9tZGkvZmFjZWJvb2suc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbigndHdpdHRlcicsIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnL2Fzc2V0cy9tZGkvdHdpdHRlci5zdmcnKSlcbiAgICAgIC5hZGRTdmdJY29uKCdnaXRodWInLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL2dpdGh1Yi1jaXJjbGUuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbignbWljcm9zb2Z0JywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL21kaS9taWNyb3NvZnQuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbigneWFob28nLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL3lhaG9vLnN2ZycpKVxuICAgICAgLmFkZFN2Z0ljb24oJ3Bob25lJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL3Bob25lLnN2ZycpKTtcbiAgfVxufVxuIl19