{"version":3,"file":"laserfiche-lf-ui-components-lf-login.mjs","sources":["../../../projects/ui-components/lf-login/login-utils/lf-login.service.ts","../../../projects/ui-components/lf-login/login-utils/cloud-login-provider.ts","../../../projects/ui-components/lf-login/login-utils/self-hosted-login-provider.ts","../../../projects/ui-components/lf-login/lf-login.component.ts","../../../projects/ui-components/lf-login/lf-login.component.html","../../../projects/ui-components/lf-login/login-utils/lf-login-types.ts","../../../projects/ui-components/lf-login/lf-login.module.ts","../../../projects/ui-components/lf-login/lf-login-public-api.ts","../../../projects/ui-components/lf-login/laserfiche-lf-ui-components-lf-login.ts"],"sourcesContent":["// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { EventEmitter, Injectable, Output } from '@angular/core';\nimport { AccountInfo, RedirectUriQueryParams } from './lf-login-internal-types';\nimport { AbortedLoginError, AuthorizationCredentials, AccountEndpoints } from './lf-login-types';\nimport { LoginState, RedirectBehavior, LoginType } from '@laserfiche/lf-ui-components/shared';\nimport { GetAccessTokenResponse, ApiException, JwtUtils } from '@laserfiche/lf-api-client-core';\nimport { LoginProvider } from './login-provider';\nconst CONTENT_TYPE_WWW_FORM_URLENCODED = 'application/x-www-form-urlencoded';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LfLoginService {\n  /** @internal */\n  _accessToken?: AuthorizationCredentials;\n  /** @internal */\n  _accountInfo?: AccountInfo;\n  /** @internal */\n  _accountEndpoints?: AccountEndpoints;\n  /** @internal */\n  _state?: LoginState;\n\n  /** @internal */\n  client_id?: string;\n  /** @internal */\n  redirect_uri!: string;\n  /** @internal */\n  scope?: string;\n  /** @internal */\n  redirect_behavior: RedirectBehavior = RedirectBehavior.Replace;\n  /** @internal */\n  authorize_url_host_name: string = 'laserfiche.com';\n  /** @internal */\n  self_hosted_base_url?: string;\n  /** @internal */\n  self_hosted_account_endpoints?: AccountEndpoints;\n\n  /** @internal */\n  code_verifier?: string;\n  /** @internal */\n  login_type: LoginType = LoginType.Cloud;\n  /** @internal */\n  loginProvider?: LoginProvider;\n  /** @internal */\n  login_identifier: string = this.client_id ?? '';\n\n  /** @internal */\n  @Output() logoutCompletedInService: EventEmitter<AbortedLoginError | undefined> = new EventEmitter<\n    AbortedLoginError | undefined\n  >();\n  /** @internal */\n  @Output() loginCompletedInService: EventEmitter<void> = new EventEmitter<void>();\n\n  /** @internal */\n  private get base64EncodedLoginIdentifier(): string {\n    return btoa(this.login_identifier);\n  }\n\n  /** @internal */\n  get accountIdStorageKey() {\n    return `lf-login.${this.base64EncodedLoginIdentifier}.account-id`;\n  }\n\n  /** @internal */\n  get accountEndpointsStorageKey() {\n    return `lf-login.${this.base64EncodedLoginIdentifier}.account-endpoints`;\n  }\n\n  /** @internal */\n  get accessTokenStorageKey() {\n    return `lf-login.${this.base64EncodedLoginIdentifier}.access-token`;\n  }\n\n  /** @internal */\n  get codeVerifierStorageKey() {\n    return `lf-login.${this.base64EncodedLoginIdentifier}.code-verifier`;\n  }\n\n  /** @internal */\n  private exchangeCodeForToken_lock: boolean = false;\n\n  /** @internal */\n  getAccountEndpoints(): AccountEndpoints | undefined {\n    try {\n      const accountEndpointsFromStorage = localStorage.getItem(this.accountEndpointsStorageKey);\n      if (accountEndpointsFromStorage) {\n        const accountEndpoints: AccountEndpoints = JSON.parse(accountEndpointsFromStorage);\n        return accountEndpoints;\n      } else {\n        return undefined;\n      }\n      // }\n    } catch (err: any) {\n      console.warn('Unable to retrieve accountEndpoints: ' + err.message);\n      return undefined;\n    }\n  }\n\n  /** @internal */\n  async exchangeCodeForTokenAsync(callBackURIParams: RedirectUriQueryParams) {\n    let concurrentCallsDetected: boolean = false;\n    try {\n      if (this.exchangeCodeForToken_lock) {\n        concurrentCallsDetected = true;\n        console.warn('exchangeCodeForTokenAsync is already running. Will not try again.');\n        return;\n      }\n      this.exchangeCodeForToken_lock = true;\n      this.code_verifier = localStorage.getItem(this.codeVerifierStorageKey)!;\n      const tokenClient = this.loginProvider?.getTokenClient(callBackURIParams.cloudSubDomain!);\n      if (callBackURIParams.authorizationCode && this.code_verifier && tokenClient) {\n        try {\n          const response = await tokenClient.getAccessTokenFromCode(\n            callBackURIParams.authorizationCode,\n            this.redirect_uri,\n            this.client_id,\n            undefined,\n            this.code_verifier,\n          );\n          const accessToken = await this.parseTokenResponseAsync(response);\n          this.loginProvider?.storeInLocalStorage(\n            accessToken!,\n            callBackURIParams.customerId!,\n            callBackURIParams.cloudSubDomain!,\n          );\n          this._state = LoginState.LoggedIn;\n          console.info('state changed to LoggedIn');\n          this.loginCompletedInService.emit();\n        } catch (e) {\n          const status = (<ApiException>e).status ?? 0;\n          const message = (<ApiException>e).message;\n          this.removeFromLocalStorage();\n          this._state = LoginState.LoggedOut;\n          console.error('Login Error (state changed to LoggedOut): ' + message);\n          this.logoutCompletedInService.emit({\n            ErrorType: status.toString(),\n            ErrorMessage: message,\n          });\n        }\n      } else if (callBackURIParams.error) {\n        this._state = LoginState.LoggedOut;\n        this.removeFromLocalStorage();\n        this.logoutCompletedInService.emit({\n          ErrorType: callBackURIParams.error.name,\n          ErrorMessage: callBackURIParams.error.description!,\n        });\n        console.error(\n          'Login Error (state changed to Logged Out): ' +\n            callBackURIParams.error.name +\n            ', ' +\n            callBackURIParams.error.description,\n        );\n      } else if (callBackURIParams.authorizationCode && !this.code_verifier) {\n        this._state = LoginState.LoggedOut;\n        this.removeFromLocalStorage();\n        this.logoutCompletedInService.emit({\n          ErrorType: 'no code verifier',\n          ErrorMessage: 'code verifier not found',\n        });\n        console.error('Login Error (state changed to Logged Out): unable to find code verifier');\n      } else if (!tokenClient) {\n        this._state = LoginState.LoggedOut;\n        this.removeFromLocalStorage();\n        this.logoutCompletedInService.emit({\n          ErrorType: 'TokenClient is undefined',\n          ErrorMessage: 'TokenClient is undefined',\n        });\n        console.error('Login Error (state changed to Logged Out): unable to use an undefined TokenClient', tokenClient);\n      } else {\n        throw new Error('Unexpected callBackURIParams');\n      }\n    } finally {\n      if (!concurrentCallsDetected) {\n        this.exchangeCodeForToken_lock = false;\n      }\n    }\n  }\n\n  /** @internal */\n  async parseTokenResponseAsync(response: GetAccessTokenResponse): Promise<AuthorizationCredentials | undefined> {\n    try {\n      const authorizationCredentials = this.getExchangeCodeSuccessResponse(response);\n      return authorizationCredentials;\n    } catch {\n      throw Error('Parse token response error.');\n    }\n  }\n\n  /** @internal */\n  getExchangeCodeSuccessResponse(jsonResponse: any) {\n    const accessToken = jsonResponse['access_token'];\n    const refreshToken = jsonResponse['refresh_token'] ?? jsonResponse['refreshToken'];\n    const expiresIn = jsonResponse['expires_in'];\n    const tokenType = jsonResponse['token_type'];\n    if (!accessToken) throw new Error('access_token undefined');\n    if (!expiresIn) throw new Error('expires_in undefined');\n    if (!tokenType) throw new Error('token_type undefined');\n    if (!refreshToken) throw new Error('refresh_token undefined');\n\n    return {\n      accessToken,\n      refreshToken,\n      expiresIn,\n      tokenType,\n    };\n  }\n\n  /** @internal */\n  removeFromLocalStorage() {\n    this.removeCodeVerifierFromLocalStorage();\n    localStorage.removeItem(this.accessTokenStorageKey!);\n    localStorage.removeItem(this.accountIdStorageKey!);\n    this.removeFromCache();\n  }\n\n  removeFromCache() {\n    this._accessToken = undefined;\n    this._accountInfo = undefined;\n  }\n\n  /** @internal */\n  removeCodeVerifierFromLocalStorage() {\n    localStorage.removeItem(this.codeVerifierStorageKey!);\n    this.code_verifier = undefined;\n  }\n\n  /** @internal */\n  createPostTokenRequest(code: string): RequestInit {\n    const request: RequestInit = { method: 'POST' };\n    const headers = this.getPostRequestHeaders();\n    const body = {\n      grant_type: 'authorization_code',\n      code: code,\n      redirect_uri: this.redirect_uri,\n      client_id: this.client_id,\n      code_verifier: this.code_verifier,\n    };\n    const requestBody = this.objToWWWFormUrlEncodedBody(body);\n    request.headers = headers;\n    request.body = requestBody;\n    return request;\n  }\n\n  /** @internal */\n  storeAccessToken(responseBody: AuthorizationCredentials) {\n    localStorage.setItem(this.accessTokenStorageKey!, JSON.stringify(responseBody));\n    this._accessToken = responseBody;\n  }\n\n  /** @internal */\n  storeCodeVerifier(code_verifier: string) {\n    localStorage.setItem(this.codeVerifierStorageKey!, code_verifier);\n  }\n\n  /** @internal */\n  getPostRequestHeaders() {\n    const headers: Record<string, string> = {\n      'Content-Type': CONTENT_TYPE_WWW_FORM_URLENCODED,\n    };\n\n    return headers;\n  }\n\n  /** @internal */\n  objToWWWFormUrlEncodedBody(obj: any): string {\n    const urlSearchParams = new URLSearchParams();\n    for (const i in obj) {\n      urlSearchParams.set(i, obj[i]);\n    }\n    return urlSearchParams.toString();\n  }\n\n  /** @internal */\n  parseAccessToken(accessToken: string): string {\n    const decodedAccessToken = JwtUtils.parseAccessToken(accessToken);\n    const trusteeId = JwtUtils.getTrusteeIdFromLfJWT(decodedAccessToken);\n    return trusteeId;\n  }\n\n  /** @internal */\n  storeAccountEndpoints(accountEndpoints: AccountEndpoints) {\n    localStorage.setItem(this.accountEndpointsStorageKey!, JSON.stringify(accountEndpoints));\n    this._accountEndpoints = accountEndpoints;\n  }\n\n  /** @internal */\n  storeAccountInfo(accountId: string, trusteeId: string) {\n    const accountInfo: AccountInfo = {\n      accountId,\n      trusteeId,\n    };\n    localStorage.setItem(this.accountIdStorageKey!, JSON.stringify(accountInfo));\n    this._accountInfo = accountInfo;\n  }\n\n  refreshServiceAccountProperties() {\n    const accountInfo = localStorage.getItem(this.accountIdStorageKey);\n    const accountEndpoints = localStorage.getItem(this.accountEndpointsStorageKey);\n    this._accountInfo = JSON.parse(accountInfo!);\n    this._accountEndpoints = JSON.parse(accountEndpoints!);\n  }\n\n  /** @internal */\n  extractErrorFromUrl(url: URL): { name: string; description: string } | undefined {\n    const error = url.searchParams.get('error');\n    if (error) {\n      const description = url.searchParams.get('description') ?? 'unknown';\n      return { name: error, description };\n    } else {\n      return undefined;\n    }\n  }\n\n  /** @internal */\n  extractCodeFromUrl(url: URL): string | undefined {\n    return url.searchParams.get('code') ?? undefined;\n  }\n\n  /** @internal */\n  extractDomainFromUrl(url: URL): string | undefined {\n    return url.searchParams.get('domain') ?? undefined;\n  }\n\n  /** @internal */\n  extractCustomerIdFromUrl(url: URL): string | undefined {\n    return url.searchParams.get('customerId') ?? undefined;\n  }\n}\n","// Copyright Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { LoginProvider } from './login-provider';\nimport { DomainUtils, TokenClient } from '@laserfiche/lf-api-client-core';\nimport { LfLoginService } from './lf-login.service';\nimport { AuthorizationCredentials } from './lf-login-types';\nimport { RedirectUriQueryParams } from './lf-login-internal-types';\nimport { LoginState } from '@laserfiche/lf-ui-components/shared';\n\n/** @internal */\n@Injectable({\n  providedIn: 'root',\n})\nexport class CloudLoginProvider implements LoginProvider {\n  readonly CLOUDDEV = 'clouddev';\n  readonly CLOUDTEST = 'cloudtest';\n\n  constructor(private lfLoginService: LfLoginService) {}\n\n  getTokenClient(tokenClientUrl: string) {\n    return new TokenClient(tokenClientUrl);\n  }\n\n  getBaseAuthorizeUrl(): string {\n    let baseAuthorizeUrl: string;\n    const lastOAuthAuthorizeUrl = this.lfLoginService.getAccountEndpoints()?.oauthAuthorizeUrl;\n    const configuredHostName = this.lfLoginService.authorize_url_host_name;\n\n    const bothClouddev = configuredHostName.includes(this.CLOUDDEV) && lastOAuthAuthorizeUrl?.includes(this.CLOUDDEV);\n    const bothCloudtest =\n      configuredHostName.includes(this.CLOUDTEST) && lastOAuthAuthorizeUrl?.includes(this.CLOUDTEST);\n    const bothCloudprod =\n      lastOAuthAuthorizeUrl &&\n      !configuredHostName.includes(this.CLOUDDEV) &&\n      !configuredHostName.includes(this.CLOUDTEST) &&\n      !lastOAuthAuthorizeUrl?.includes(this.CLOUDDEV) &&\n      !lastOAuthAuthorizeUrl?.includes(this.CLOUDTEST);\n\n    const sameEnvironment = bothClouddev || bothCloudtest || bothCloudprod;\n\n    if (sameEnvironment && lastOAuthAuthorizeUrl) {\n      baseAuthorizeUrl = lastOAuthAuthorizeUrl;\n    } else {\n      baseAuthorizeUrl = `https://signin.${this.lfLoginService.authorize_url_host_name}/oauth/Authorize`;\n    }\n\n    return baseAuthorizeUrl;\n  }\n\n  storeInLocalStorage(accessTokenCredentials: AuthorizationCredentials, accountId: string, regionalDomain: string) {\n    this.lfLoginService.storeAccessToken(accessTokenCredentials);\n    const trusteeId: string = this.lfLoginService.parseAccessToken(accessTokenCredentials.accessToken);\n    const endpoints = DomainUtils.getLfEndpoints(regionalDomain);\n    this.lfLoginService.storeAccountInfo(accountId, trusteeId);\n    this.lfLoginService.storeAccountEndpoints(endpoints);\n  }\n\n  exchangeRedirectUriQueryParams(url: URL): RedirectUriQueryParams | undefined {\n    const authorizationCode = this.lfLoginService.extractCodeFromUrl(url);\n    const domain = this.lfLoginService.extractDomainFromUrl(url);\n    const customerId = this.lfLoginService.extractCustomerIdFromUrl(url);\n    const error = this.lfLoginService.extractErrorFromUrl(url);\n    if (authorizationCode && domain && customerId) {\n      return {\n        authorizationCode,\n        cloudSubDomain: domain,\n        customerId,\n      };\n    } else if (error) {\n      return { error };\n    }\n    return undefined;\n  }\n\n  determineCurrentState(\n    callBackURIParams: RedirectUriQueryParams | undefined,\n    loginCompleted: EventEmitter<void>,\n    logoutCompleted: EventEmitter<void>,\n  ): LoginState {\n    const storedAccessToken = localStorage.getItem(this.lfLoginService.accessTokenStorageKey!);\n    const storedAccountEndpoints = localStorage.getItem(this.lfLoginService.accountEndpointsStorageKey);\n    const storedAccountId = localStorage.getItem(this.lfLoginService.accountIdStorageKey);\n\n    if (storedAccessToken && storedAccountEndpoints && storedAccountId) {\n      this.lfLoginService._accessToken = JSON.parse(storedAccessToken);\n      this.lfLoginService._accountEndpoints = JSON.parse(storedAccountEndpoints);\n      const accountInfo = JSON.parse(storedAccountId);\n      this.lfLoginService._accountInfo = accountInfo;\n      loginCompleted.emit();\n      return LoginState.LoggedIn;\n    } else if (callBackURIParams?.authorizationCode || callBackURIParams?.error) {\n      return LoginState.LoggingIn;\n    } else {\n      logoutCompleted.emit();\n      return LoginState.LoggedOut;\n    }\n  }\n\n  logoutInitiatedViaUrl(url: string | undefined, logoutInitiated: { emit: (url?: string) => void }): void {\n    logoutInitiated.emit(url);\n  }\n}\n","// Copyright Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { EventEmitter, Inject, Injectable } from '@angular/core';\nimport { LoginProvider } from './login-provider';\nimport { LfLoginService } from './lf-login.service';\nimport { SelfHostedTokenClient } from '@laserfiche/lf-api-client-core';\nimport { AuthorizationCredentials } from './lf-login-types';\nimport { RedirectUriQueryParams } from './lf-login-internal-types';\nimport { LoginState } from '@laserfiche/lf-ui-components/shared';\n\n/** @internal */\n@Injectable({\n  providedIn: 'root',\n})\nexport class SelfHostedLoginProvider implements LoginProvider {\n  constructor(\n    private lfLoginService: LfLoginService,\n    @Inject('repositoryId') private readonly repositoryId: string,\n  ) {}\n\n  getTokenClient() {\n    return new SelfHostedTokenClient(\n      `${this.lfLoginService.self_hosted_base_url}/v2/Repositories/${this.repositoryId}/Token`,\n    );\n  }\n\n  getBaseAuthorizeUrl(): string {\n    return this.lfLoginService.self_hosted_account_endpoints?.oauthAuthorizeUrl ?? '';\n  }\n\n  storeInLocalStorage(accessTokenCredentials: AuthorizationCredentials, _accountId: string, _regionalDomain: string) {\n    this.lfLoginService.storeAccessToken(accessTokenCredentials);\n    if (this.lfLoginService.self_hosted_account_endpoints) {\n      this.lfLoginService.storeAccountEndpoints(this.lfLoginService.self_hosted_account_endpoints);\n    }\n  }\n\n  exchangeRedirectUriQueryParams(url: URL): RedirectUriQueryParams | undefined {\n    const authorizationCode = this.lfLoginService.extractCodeFromUrl(url);\n    const error = this.lfLoginService.extractErrorFromUrl(url);\n    if (authorizationCode) {\n      return {\n        authorizationCode,\n      };\n    } else if (error) {\n      return { error };\n    }\n    return undefined;\n  }\n\n  determineCurrentState(\n    callBackURIParams: RedirectUriQueryParams | undefined,\n    loginCompleted: EventEmitter<void>,\n    logoutCompleted: EventEmitter<void>,\n  ): LoginState {\n    const storedAccessToken = localStorage.getItem(this.lfLoginService.accessTokenStorageKey!);\n    const storedAccountEndpoints = localStorage.getItem(this.lfLoginService.accountEndpointsStorageKey);\n    if (storedAccessToken && storedAccountEndpoints) {\n      this.lfLoginService._accessToken = JSON.parse(storedAccessToken);\n      this.lfLoginService._accountEndpoints = JSON.parse(storedAccountEndpoints);\n      loginCompleted.emit();\n      return LoginState.LoggedIn;\n    } else if (callBackURIParams?.authorizationCode || callBackURIParams?.error) {\n      return LoginState.LoggingIn;\n    } else {\n      logoutCompleted.emit();\n      return LoginState.LoggedOut;\n    }\n  }\n\n  logoutInitiatedViaUrl(url: string | undefined, logoutInitiated: { emit: (url?: string) => void }): void {\n    if (url) {\n      logoutInitiated.emit(url);\n    }\n  }\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n} from '@angular/core';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { AccountInfo, RedirectUriQueryParams } from './login-utils/lf-login-internal-types';\nimport {\n  AbortedLoginError,\n  AccountEndpoints,\n  AuthorizationCredentials,\n  LfBeforeFetchResult,\n  LfHttpRequestHandler,\n} from './login-utils/lf-login-types';\nimport { LoginMode, LoginState, LoginType, RedirectBehavior } from '@laserfiche/lf-ui-components/shared';\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\nimport { LfLoginService } from './login-utils/lf-login.service';\nimport { ApiException, PKCEUtils } from '@laserfiche/lf-api-client-core';\nimport { CloudLoginProvider } from './login-utils/cloud-login-provider';\nimport { SelfHostedLoginProvider } from './login-utils/self-hosted-login-provider';\n\nconst LOGIN_REDIRECT_STATE = 'lf-login-redirect';\nconst CODE_CHALLENGE_METHOD = 'S256';\n@Component({\n  selector: 'lf-login-component',\n  templateUrl: './lf-login.component.html',\n  styleUrls: ['./lf-login.component.css'],\n})\nexport class LfLoginComponent implements OnDestroy, OnInit, OnChanges, AfterViewInit {\n  @Input() mode: LoginMode = LoginMode.Button;\n\n  /**\n   * @return {LfHttpRequestHandler}\n   * Returns the LfHttpRequestHandler that can be used\n   * to instantiate a repository API client.\n   */\n  @Input()\n  get authorizationRequestHandler(): LfHttpRequestHandler {\n    return {\n      beforeFetchRequestAsync: this.beforeFetchRequestAsync.bind(this),\n      afterFetchResponseAsync: this.afterFetchResponseAsync.bind(this),\n    };\n  }\n\n  /** @internal */\n  get isMenuMode(): boolean {\n    return this.mode === LoginMode.Menu;\n  }\n\n  /** @internal */\n  _sign_in_text: Observable<string> = this.localizationService.getStringLaserficheObservable('SIGN_IN');\n  /** @internal */\n  _sign_out_text: Observable<string> = this.localizationService.getStringLaserficheObservable('SIGN_OUT');\n  /** @internal */\n  _signing_in_text: Observable<string> = this.localizationService.getStringLaserficheObservable('SIGNING_IN');\n  /** @internal */\n  _signing_out_text: Observable<string> = this.localizationService.getStringLaserficheObservable('SIGNING_OUT');\n\n  @Input() set sign_in_text(text: string) {\n    this._sign_in_text = of(text);\n  }\n  @Input() set sign_out_text(text: string) {\n    this._sign_out_text = of(text);\n  }\n  @Input() set signing_in_text(text: string) {\n    this._signing_in_text = of(text);\n  }\n  @Input() set signing_out_text(text: string) {\n    this._signing_out_text = of(text);\n  }\n\n  /** @internal */\n  buttonText: Observable<string> = this._sign_in_text;\n\n  @Input() set client_id(val: string) {\n    this.loginService.client_id = val;\n  }\n  get client_id(): string | undefined {\n    return this.loginService.client_id;\n  }\n\n  @Input() set redirect_uri(val: string) {\n    this.loginService.redirect_uri = val;\n  }\n  get redirect_uri(): string {\n    return this.loginService.redirect_uri;\n  }\n\n  @Input() set scope(val: string) {\n    this.loginService.scope = val;\n  }\n  get scope(): string | undefined {\n    return this.loginService.scope;\n  }\n\n  @Input() set redirect_behavior(val: RedirectBehavior) {\n    this.loginService.redirect_behavior = val;\n  }\n  get redirect_behavior(): RedirectBehavior {\n    return this.loginService.redirect_behavior;\n  }\n\n  @Input() set authorize_url_host_name(val: string) {\n    this.loginService.authorize_url_host_name = val;\n  }\n\n  get authorize_url_host_name(): string {\n    return this.loginService.authorize_url_host_name;\n  }\n\n  @Input() set login_type(val: LoginType) {\n    this.loginService.login_type = val;\n  }\n\n  get login_type(): LoginType {\n    return this.loginService.login_type;\n  }\n\n  @Input() set login_identifier(val: string) {\n    this.loginService.login_identifier = val;\n  }\n\n  get login_identifier(): string {\n    return this.loginService.login_identifier;\n  }\n\n  @Input()\n  get authorization_credentials(): AuthorizationCredentials | undefined {\n    try {\n      if (this.loginService._accessToken) {\n        return this.loginService._accessToken;\n      } else {\n        const accessTokenFromStorage = localStorage.getItem(this.loginService.accessTokenStorageKey);\n        if (accessTokenFromStorage) {\n          const accessTokenCredentials: AuthorizationCredentials = JSON.parse(accessTokenFromStorage);\n          return accessTokenCredentials;\n        } else {\n          return undefined;\n        }\n      }\n    } catch (err: any) {\n      console.warn('Unable to retrieve accessToken: ' + err.message);\n      return undefined;\n    }\n  }\n\n  @Input()\n  get account_endpoints(): AccountEndpoints | undefined {\n    return this.loginService.getAccountEndpoints();\n  }\n\n  @Input()\n  get account_id(): string | undefined {\n    try {\n      if (this.loginService._accountInfo) {\n        return this.loginService._accountInfo.accountId;\n      } else {\n        const accountInfoFromStorage = localStorage.getItem(this.loginService.accountIdStorageKey);\n        if (accountInfoFromStorage) {\n          const accountInfo: AccountInfo = JSON.parse(accountInfoFromStorage);\n          return accountInfo.accountId;\n        } else {\n          return undefined;\n        }\n      }\n    } catch (err: any) {\n      console.warn('Unable to retrieve accountId: ' + err.message);\n      return undefined;\n    }\n  }\n\n  @Input()\n  get trustee_id(): string | undefined {\n    try {\n      if (this.loginService._accountInfo) {\n        return this.loginService._accountInfo.trusteeId;\n      } else {\n        const accountInfoFromStorage = localStorage.getItem(this.loginService.accountIdStorageKey);\n        if (accountInfoFromStorage) {\n          const accountInfo: AccountInfo = JSON.parse(accountInfoFromStorage);\n          return accountInfo.trusteeId;\n        } else {\n          return undefined;\n        }\n      }\n    } catch (err: any) {\n      console.warn('Unable to retrieve trusteeId: ' + err.message);\n      return undefined;\n    }\n  }\n\n  @Input()\n  get state(): LoginState {\n    return this.loginService._state ?? LoginState.LoggedOut;\n  }\n\n  private set _state(state: LoginState) {\n    this.loginService._state = state;\n    this.setButtonText();\n  }\n\n  @Output() loginInitiated = new EventEmitter<string>();\n  @Output() logoutInitiated = new EventEmitter<string>();\n\n  @Output() loginCompleted = new EventEmitter<void>();\n  @Output() logoutCompleted = new EventEmitter<AbortedLoginError | void>();\n\n  /**\n   * Refreshes and returns the access token\n   * @param initiateLoginFlowOnRefreshFailure\n   * Indicates whether an attempt should be made to login using OAuth flow upon encountering an inability to refresh the access token.\n   * @returns  {Promise<string | undefined>}\n   */\n  @Input()\n  refreshTokenAsync: (initiateLoginFlowOnRefreshFailure: boolean) => Promise<string | undefined> = async (\n    initiateLoginFlowOnRefreshFailure: boolean = true,\n  ) => {\n    try {\n      const refreshToken: string | undefined = this.authorization_credentials?.refreshToken;\n      if (!refreshToken) {\n        if (initiateLoginFlowOnRefreshFailure && !this.hasLoginError && this.state === LoginState.LoggedOut) {\n          console.warn('Unable to refresh, refreshToken is not defined. Will attempt to start the OAuth login flow');\n          await this.startOAuthLoginFlowAsync();\n        } else if (this.state === LoginState.LoggingIn) {\n          console.log('Logging in. Will not attempt to refresh');\n        } else {\n          console.warn(\n            'Unable to refresh, refreshToken is not defined, initiateLoginFlowOnRefreshFailure set to false',\n          );\n          this._state = LoginState.LoggedOut;\n          this.logoutCompleted.emit({\n            ErrorType: 'Refresh Token Error',\n            ErrorMessage: 'refreshToken is not defined',\n          });\n          this.ref.detectChanges();\n          this.loginService.removeFromLocalStorage();\n        }\n        return undefined;\n      } else {\n        try {\n          const oauthRegion = this.account_endpoints?.regionalDomain;\n          if (!oauthRegion) {\n            throw new Error('Unable to refresh. Cannot construct tokenClient.');\n          }\n\n          const tokenClient = this.loginService.loginProvider?.getTokenClient(oauthRegion);\n          const response = await tokenClient!.refreshAccessToken(refreshToken, this.client_id);\n          const newAccessToken = await this.loginService.parseTokenResponseAsync(response);\n          this.loginService.storeAccessToken(newAccessToken!);\n          this._state = LoginState.LoggedIn;\n          console.info('state changed to LoggedIn');\n          this.loginCompleted.emit();\n          return newAccessToken?.accessToken;\n        } catch (e) {\n          const status = (<ApiException>e).status ?? 0;\n          if (status === 401 || status === 403) {\n            if (initiateLoginFlowOnRefreshFailure && !this.hasLoginError && this.state === LoginState.LoggedOut) {\n              console.warn('Unable to refresh. Will attempt to start the OAuth login flow');\n              await this.startOAuthLoginFlowAsync();\n            } else {\n              console.warn(\n                `Unable to refresh, initiateLoginFlowOnRefreshFailure set to ${initiateLoginFlowOnRefreshFailure}, state is ${this.state}`,\n              );\n              this._state = LoginState.LoggedOut;\n              this.ref.detectChanges();\n              this.loginService.removeFromLocalStorage();\n            }\n          }\n          throw e;\n        }\n      }\n    } catch (err: any) {\n      this._state = LoginState.LoggedOut;\n      this.ref.detectChanges();\n      this.loginService.removeFromLocalStorage();\n      this.logoutCompleted.emit({\n        ErrorType: 'Refresh Token Error',\n        ErrorMessage: err.message,\n      });\n      console.error('Unable to refresh, logged out: ' + err.message);\n      return undefined;\n    }\n  };\n\n  private async loginFlowHandler(startLoginMethodAsync: () => Promise<void>): Promise<string | undefined> {\n    try {\n      const accessToken: string | undefined = this.authorization_credentials?.accessToken;\n      if (this.state === LoginState.LoggedOut && !this.hasLoginError) {\n        await startLoginMethodAsync();\n        return undefined;\n      } else {\n        await this.initializeLoginAsync();\n        return accessToken;\n      }\n    } catch (err: any) {\n      this._state = LoginState.LoggedOut;\n      this.ref.detectChanges();\n      this.loginService.removeFromLocalStorage();\n      this.logoutCompleted.emit({\n        ErrorType: 'Login Error',\n        ErrorMessage: err.message,\n      });\n      console.error('Unable to login, logged out: ' + err.message);\n      return undefined;\n    }\n  }\n\n  private async startCloudLoginFlowAsync() {\n    this.loginService.loginProvider = new CloudLoginProvider(this.loginService);\n    await this.startOAuthLoginFlowAsync();\n  }\n\n  @Input()\n  initLoginFlowAsync: () => Promise<string | undefined> = async () => {\n    return await this.loginFlowHandler(() => this.startCloudLoginFlowAsync());\n  };\n\n  private async startSelfHostedLoginFlow(accountEndpoints: AccountEndpoints, repositoryId: string) {\n    this.loginService.loginProvider = new SelfHostedLoginProvider(this.loginService, repositoryId);\n    await this.startSelfHostedLoginFlowAsync(accountEndpoints);\n  }\n\n  @Input()\n  initSelfHostedLoginFlowAsync: (\n    accountEndpoints: AccountEndpoints,\n    repositoryId: string,\n  ) => Promise<string | undefined> = async (accountEndpoints: AccountEndpoints, repositoryId: string) => {\n    return await this.loginFlowHandler(() => this.startSelfHostedLoginFlow(accountEndpoints, repositoryId));\n  };\n\n  @Input() handleRedirectURICallbackAsync = async (url: string) => {\n    try {\n      const callbackURIParams = this.parseCallbackURI(url);\n      if (callbackURIParams) {\n        await this.loginService.exchangeCodeForTokenAsync(callbackURIParams);\n      }\n    } catch (err: any) {\n      console.error('handleRedirectURICallbackAsync error, unable to exchange token: ', err.message);\n      throw err;\n    }\n  };\n\n  /** @internal */\n  private logoutCompleteSub?: Subscription;\n  /** @internal */\n  private loginCompleteSub?: Subscription;\n  /** @internal */\n  private code_challenge?: string;\n  /** @internal */\n  private hasLoginError: boolean = false;\n  /** @internal */\n  private initialized: boolean = false;\n\n  /** @internal */\n  constructor(\n    /** @internal */\n    private ref: ChangeDetectorRef,\n    /** @internal */\n    private loginService: LfLoginService,\n    /** @internal */\n    private localizationService: AppLocalizationService,\n  ) {\n    window.addEventListener('storage', (ev) => {\n      this.onStorageChanged(ev);\n    });\n  }\n\n  async ngAfterViewInit() {\n    const accessToken = this.authorization_credentials?.accessToken;\n    if (accessToken) {\n      this._state = LoginState.LoggedIn;\n    } else {\n      await this.initializeLoginAsync();\n    }\n  }\n\n  /** @internal */\n  async ngOnChanges(changes: SimpleChanges) {\n    // initialize the login state according to the access token\n    const currentLoginIdentifier = changes['login_identifier'];\n    if (\n      (currentLoginIdentifier?.currentValue && currentLoginIdentifier?.isFirstChange()) ||\n      currentLoginIdentifier?.previousValue !== currentLoginIdentifier?.currentValue\n    ) {\n      const accessToken = this.authorization_credentials?.accessToken;\n      if (accessToken) {\n        this._state = LoginState.LoggedIn;\n      } else {\n        await this.initializeLoginAsync();\n      }\n    }\n\n    const currentLoginType = changes['login_type'];\n    if (\n      !this.loginService.loginProvider &&\n      ((currentLoginType?.currentValue && currentLoginType?.isFirstChange()) ||\n        currentLoginType?.previousValue !== currentLoginType?.currentValue)\n    ) {\n      this.loginService.loginProvider =\n        currentLoginType.currentValue === LoginType.SelfHosted\n          ? new SelfHostedLoginProvider(this.loginService, currentLoginIdentifier.currentValue)\n          : new CloudLoginProvider(this.loginService);\n    }\n  }\n\n  private setButtonText() {\n    if (this.state === LoginState.LoggedIn) {\n      this.buttonText = this._sign_out_text;\n    } else if (this.state === LoginState.LoggingIn) {\n      this.buttonText = this._signing_in_text;\n    } else if (this.state === LoginState.LoggingOut) {\n      this.buttonText = this._signing_out_text;\n    } else {\n      this.buttonText = this._sign_in_text;\n    }\n  }\n\n  private onStorageChanged(ev: StorageEvent) {\n    const keyName = ev.key;\n    const oldValue = ev.oldValue;\n    const newValue = ev.newValue;\n    if (keyName === this.loginService.accessTokenStorageKey) {\n      this.onAccessTokenLocalStorageChange(oldValue, newValue);\n    }\n  }\n\n  private onAccessTokenLocalStorageChange(oldValue: string | null, newValue: string | null) {\n    if (oldValue && !newValue) {\n      // newly logged out\n      this.loginService.removeFromCache();\n      this._state = LoginState.LoggedOut;\n      this.ref.detectChanges();\n      this.logoutCompleted.emit();\n    } else if (!oldValue && newValue) {\n      // newly logged in\n      this._state = LoginState.LoggingIn;\n      this.ref.detectChanges();\n\n      this.loginService.storeAccessToken(JSON.parse(newValue));\n      this.loginService.refreshServiceAccountProperties();\n      this._state = LoginState.LoggedIn;\n      this.ref.detectChanges();\n      this.loginCompleted.emit();\n    } else if (newValue && oldValue && oldValue !== newValue) {\n      // refreshed\n      const newAccessToken: AuthorizationCredentials = JSON.parse(newValue);\n      this.loginService.storeAccessToken(newAccessToken);\n      this.loginService.refreshServiceAccountProperties();\n      this._state = LoginState.LoggedIn;\n      this.ref.detectChanges();\n      this.loginCompleted.emit();\n    } else {\n      // accessToken didn't change\n      // do nothing\n    }\n  }\n\n  /** @internal */\n  get isLoggedIn() {\n    return this.loginService._state === LoginState.LoggedIn;\n  }\n\n  /** @internal */\n  get isIntermediateState() {\n    const loggingIn = this.loginService._state === LoginState.LoggingIn;\n    const loggingOut = this.loginService._state === LoginState.LoggingOut;\n    return loggingIn || loggingOut;\n  }\n\n  /** @internal */\n  async ngOnInit() {\n    this.logoutCompleteSub = this.loginService.logoutCompletedInService.subscribe((error) => {\n      this.hasLoginError = true;\n      this.setButtonText();\n      this.logoutCompleted.emit(error);\n    });\n    this.loginCompleteSub = this.loginService.loginCompletedInService.subscribe(() => {\n      this.setButtonText();\n      this.loginCompleted.emit();\n    });\n  }\n\n  /** @internal */\n  ngOnDestroy() {\n    this.loginCompleteSub?.unsubscribe();\n    this.logoutCompleteSub?.unsubscribe();\n  }\n\n  /** @internal */\n  private async initializeLoginAsync() {\n    try {\n      const callBackURIParams = this.parseCallbackURI(window.location.href);\n      this._state =\n        this.loginService.loginProvider?.determineCurrentState(\n          callBackURIParams,\n          this.loginCompleted,\n          this.logoutCompleted,\n        ) ?? LoginState.LoggedOut;\n      this.ref.detectChanges();\n      if (this.loginService._state === LoginState.LoggingIn) {\n        await this.loginService.exchangeCodeForTokenAsync(callBackURIParams!);\n      }\n    } catch (err: any) {\n      this.logoutCompleted.emit({\n        ErrorType: 'Login Error',\n        ErrorMessage: err.message,\n      });\n      this.loginService.removeFromLocalStorage();\n      this._state = LoginState.LoggedOut;\n      console.warn('Login Error: ' + err.message);\n      this.ref.detectChanges();\n    }\n  }\n\n  /** @internal */\n  parseCallbackURI(urlString: string): RedirectUriQueryParams | undefined {\n    const url = new URL(urlString);\n    const state = url.searchParams.get('state');\n    if (state !== LOGIN_REDIRECT_STATE) {\n      return undefined;\n    }\n\n    return this.loginService.loginProvider?.exchangeRedirectUriQueryParams(url);\n  }\n\n  /** @internal */\n  createRefreshTokenRequest(): RequestInit {\n    const refreshToken: string | undefined = this.loginService._accessToken?.refreshToken;\n    if (refreshToken) {\n      const request: RequestInit = { method: 'POST' };\n      const headers = this.loginService.getPostRequestHeaders();\n      const body = {\n        grant_type: 'refresh_token',\n        refresh_token: refreshToken,\n        client_id: this.client_id,\n      };\n      const requestBody = this.loginService.objToWWWFormUrlEncodedBody(body);\n      request.headers = headers;\n      request.body = requestBody;\n      return request;\n    } else {\n      throw new Error('RefreshToken is not defined');\n    }\n  }\n\n  /** @internal */\n  async onLoginButtonClickAsync() {\n    if (this.state === LoginState.LoggedIn) {\n      this.startLogout();\n    } else if (this.state === LoginState.LoggedOut) {\n      await this.startLoginAsync();\n    } else {\n      // Do not expect to get here as the button should be disabled.\n      console.warn('Intermediate state. Should not attempt to login.');\n    }\n  }\n\n  /** @internal */\n  async startLoginAsync() {\n    try {\n      await this.startCloudLoginFlowAsync();\n    } catch (err: any) {\n      if (this.loginService._state !== LoginState.LoggedOut) {\n        this._state = LoginState.LoggedOut;\n        this.ref.detectChanges();\n        this.loginService.removeFromLocalStorage();\n        this.logoutCompleted.emit({\n          ErrorType: 'Login Error',\n          ErrorMessage: err.message,\n        });\n        console.error('Login Error: ' + err.message);\n      }\n    }\n  }\n\n  /** @internal */\n  private async startOAuthLoginFlowAsync() {\n    const code_verifier = PKCEUtils.generateCodeVerifier();\n    this.loginService.storeCodeVerifier(code_verifier);\n\n    this.code_challenge = await PKCEUtils.generateCodeChallengeAsync(code_verifier);\n\n    const fullAuthorizeUrl = this.getAuthorizeUrl();\n    this.loginInitiated.emit(fullAuthorizeUrl);\n    this._state = LoginState.LoggingIn;\n    this.ref.detectChanges();\n    console.info('state changed to LoggingIn');\n    this.handleRedirectBehavior(fullAuthorizeUrl, 'Log in button clicked.');\n  }\n\n  private async startSelfHostedLoginFlowAsync(accountEndpoints: AccountEndpoints) {\n    this.loginService.self_hosted_account_endpoints = accountEndpoints;\n    this.loginService.self_hosted_base_url = accountEndpoints.regionalDomain;\n    await this.startOAuthLoginFlowAsync();\n  }\n\n  /** @internal */\n  getAuthorizeUrl(): string {\n    const baseAuthorizeUrl = this.loginService.loginProvider?.getBaseAuthorizeUrl();\n\n    const baseUrl: URL = new URL(baseAuthorizeUrl ?? '');\n    if (this.client_id) {\n      baseUrl.searchParams.set('client_id', this.client_id);\n    }\n    if (this.scope) {\n      baseUrl.searchParams.set('scope', this.scope);\n    }\n    baseUrl.searchParams.set('redirect_uri', this.redirect_uri);\n    baseUrl.searchParams.set('response_type', 'code');\n    baseUrl.searchParams.set('response_mode', 'query');\n    baseUrl.searchParams.set('state', LOGIN_REDIRECT_STATE);\n    baseUrl.searchParams.set('code_challenge', this.code_challenge!);\n    baseUrl.searchParams.set('code_challenge_method', CODE_CHALLENGE_METHOD);\n\n    return baseUrl.toString();\n  }\n\n  /** @internal */\n  startLogout() {\n    try {\n      this._state = LoginState.LoggingOut;\n      this.ref.detectChanges();\n      console.info('state changed to LoggingOut');\n\n      const logoutUrl = this.getFullLogoutUrl();\n      this.loginService.loginProvider?.logoutInitiatedViaUrl(logoutUrl, this.logoutInitiated);\n\n      this.loginService.removeFromLocalStorage();\n      this._state = LoginState.LoggedOut;\n      this.ref.detectChanges();\n      console.info('state changed to LoggedOut');\n\n      this.logoutCompleted.emit();\n      if (logoutUrl) {\n        this.handleRedirectBehavior(logoutUrl, 'Logout button clicked.');\n      }\n    } catch (err: any) {\n      if (this.loginService._state !== LoginState.LoggedOut) {\n        this.loginService.removeFromLocalStorage();\n        this._state = LoginState.LoggedOut;\n        this.ref.detectChanges();\n\n        console.error('Logout error (state changed to LoggedOut): ' + err.message);\n        this.logoutCompleted.emit({\n          ErrorType: 'Logout Error',\n          ErrorMessage: err.message,\n        });\n      }\n    }\n  }\n\n  /** @internal */\n  getFullLogoutUrl(): string | undefined {\n    if (this.account_endpoints?.wsignoutUrl) {\n      const acsToLfLogout = new URL(this.account_endpoints?.wsignoutUrl);\n      // Warning: if we are already logged out this will behave strangely\n      // won't redirect back to redirect Url\n      acsToLfLogout.searchParams.set('wreply', this.redirect_uri);\n      const stringUrl = acsToLfLogout.toString();\n      return stringUrl;\n    } else {\n      console.warn('No account endpoint available. Did not redirect');\n      return undefined;\n    }\n  }\n\n  /** @internal */\n  private handleRedirectBehavior(stringUrl: string, additionalContext?: string) {\n    if (this.redirect_behavior === RedirectBehavior.Replace) {\n      window.location.replace(stringUrl);\n    } else if (this.redirect_behavior === RedirectBehavior.Popup) {\n      throw new Error('Not implemented');\n    } else {\n      const concatStrings = this.concatStrings(\n        additionalContext,\n        'Redirect behavior none. Redirect must be implemented by container in event initiated handler',\n      );\n      console.log(concatStrings);\n    }\n  }\n\n  /** @internal */\n  concatStrings(firstString: string | undefined, secondString: string) {\n    const firstStringExists = firstString && firstString.length > 0;\n    if (firstStringExists) {\n      const lastCharOfFirstString = firstString?.charAt(firstString.length - 1);\n      const firstCharOfSecondString = secondString.charAt(0);\n      if (lastCharOfFirstString !== ' ' && firstCharOfSecondString !== ' ') {\n        return firstString + ' ' + secondString;\n      } else if (lastCharOfFirstString === ' ' && firstCharOfSecondString === ' ') {\n        return firstString + secondString.substring(1);\n      }\n      return firstString + secondString;\n    } else {\n      return secondString;\n    }\n  }\n\n  /** @internal */\n  private async beforeFetchRequestAsync(url: string, request: RequestInit): Promise<LfBeforeFetchResult> {\n    // must get accessToken each time\n    const accessToken = this.authorization_credentials?.accessToken;\n    if (accessToken) {\n      const headers = request.headers as Record<string, string>;\n      headers['Authorization'] = 'Bearer ' + accessToken;\n      const regionalDomain: string = this.account_endpoints?.regionalDomain ?? '';\n      return { regionalDomain };\n    } else {\n      throw new Error('Access Token undefined.');\n    }\n  }\n\n  /** @internal */\n  private async afterFetchResponseAsync(url: string, response: Response, request: RequestInit): Promise<boolean> {\n    if (response.status === 401) {\n      // this will initialize the login flow if refresh is unsuccessful\n      const accessToken = await this.refreshTokenAsync(true);\n      const retry = accessToken !== undefined;\n      return retry;\n    }\n    return false;\n  }\n}\n","<!--Copyright (c) Laserfiche.\r\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\r\n\r\n<div class=\"lf-login-button\" *ngIf=\"!isMenuMode\">\r\n  <button [disabled]=\"isIntermediateState\"\r\n    [ngClass]=\"{'primary-button': !isLoggedIn,'sec-button': isLoggedIn, 'lf-button': true, 'login-button': true}\"\r\n    (click)=\"onLoginButtonClickAsync()\">\r\n    {{buttonText | async}}\r\n  </button>\r\n</div>\r\n\r\n<div class=\"lf-login-menu\" *ngIf=\"isMenuMode\">\r\n  <button [disabled]=\"isIntermediateState\" [matMenuTriggerFor]=\"menu\" class=\"lf-login-menu-trigger\"\r\n    [ngClass]=\"{'lf-trigger-logged-in': isLoggedIn}\">\r\n    <div [ngClass]=\"{'lf-logged-in': isLoggedIn, 'lf-login-trigger-button': true}\">\r\n      <span class=\"material-icons-outlined\">\r\n        person\r\n      </span>\r\n    </div>\r\n  </button>\r\n  <mat-menu #menu=\"matMenu\" class=\"lf-login-mat-menu\">\r\n    <div mat-menu-item>\r\n      <div class=\"lf-login-menu-button\" (click)=\"onLoginButtonClickAsync()\">\r\n        <button [disabled]=\"isIntermediateState\" class=\"lf-login-menu-internal-button\">\r\n          {{buttonText | async}}\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </mat-menu>\r\n</div>\r\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nexport interface AuthorizationCredentials {\n    accessToken: string;\n    refreshToken?: string;\n    expiresIn: string;\n    tokenType: string;\n}\n\nexport interface AccountEndpoints {\n    webClientUrl: string;\n    wsignoutUrl: string;\n    regionalDomain: string;\n    oauthAuthorizeUrl: string;\n}\n\nexport interface AbortedLoginError {\n    ErrorType: string;\n    ErrorMessage: string;\n}\n\n/**\n * Interface defined by Laserfiche API providing\n * return type of beforeFetchRequestAsync\n */\nexport interface LfBeforeFetchResult {\n  regionalDomain: string;\n}\n\n/**\n * This object handles obtaining the accessToken and\n * setting the authorization header\n */\nexport interface LfHttpRequestHandler {\n  /**\n   * Called to prepare the request to the API service.\n   * @param url The HTTP url\n   * @param request The HTTP request\n   */\n  beforeFetchRequestAsync: (url: string, request: RequestInit) => Promise<LfBeforeFetchResult>;\n  /**\n   * Called to handle the response from the API service.\n   * @param url The HTTP url\n   * @param response The HTTP response\n   * @param request The HTTP request\n   * @returns true if the request should be retried.\n   */\n  afterFetchResponseAsync: (url: string, response: Response, request: RequestInit) => Promise<boolean>;\n}\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { Injector, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LfLoginComponent } from './lf-login.component';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { createCustomElement } from '@angular/elements';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    LfLoginComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MatMenuModule\r\n  ],\r\n  bootstrap: [\r\n    LfLoginComponent\r\n  ],\r\n  exports: [\r\n    LfLoginComponent\r\n  ]\r\n})\r\nexport class LfLoginModule {\r\n  /** @internal */\r\n  constructor(\r\n    /** @internal */ injector: Injector\r\n  ) {\r\n    const elementName: string = 'lf-login';\r\n    if (window.customElements && !customElements.get(elementName)) {\r\n      const newElement = createCustomElement(LfLoginComponent, { injector });\r\n      customElements.define(elementName, newElement);\r\n    }\r\n  }\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nexport * from './lf-login.component';\r\nexport * from './login-utils/lf-login-types';\r\n\r\nexport * from './lf-login.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './lf-login-public-api';\n"],"names":["i1.LfLoginService"],"mappings":";;;;;;;;;;;;AAAA;AACA;AAQA,MAAM,gCAAgC,GAAG,mCAAmC,CAAC;MAKhE,cAAc,CAAA;AAH3B,IAAA,WAAA,GAAA;;AAoBE,QAAA,IAAA,CAAA,iBAAiB,GAAqB,gBAAgB,CAAC,OAAO,CAAC;;QAE/D,IAAuB,CAAA,uBAAA,GAAW,gBAAgB,CAAC;;AASnD,QAAA,IAAA,CAAA,UAAU,GAAc,SAAS,CAAC,KAAK,CAAC;;AAIxC,QAAA,IAAA,CAAA,gBAAgB,GAAW,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;;AAGtC,QAAA,IAAA,CAAA,wBAAwB,GAAgD,IAAI,YAAY,EAE/F,CAAC;;AAEM,QAAA,IAAA,CAAA,uBAAuB,GAAuB,IAAI,YAAY,EAAQ,CAAC;;QA4BzE,IAAyB,CAAA,yBAAA,GAAY,KAAK,CAAC;AAwPpD,KAAA;;AAjRC,IAAA,IAAY,4BAA4B,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACpC;;AAGD,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,CAAY,SAAA,EAAA,IAAI,CAAC,4BAA4B,aAAa,CAAC;KACnE;;AAGD,IAAA,IAAI,0BAA0B,GAAA;AAC5B,QAAA,OAAO,CAAY,SAAA,EAAA,IAAI,CAAC,4BAA4B,oBAAoB,CAAC;KAC1E;;AAGD,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,CAAY,SAAA,EAAA,IAAI,CAAC,4BAA4B,eAAe,CAAC;KACrE;;AAGD,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,CAAY,SAAA,EAAA,IAAI,CAAC,4BAA4B,gBAAgB,CAAC;KACtE;;IAMD,mBAAmB,GAAA;AACjB,QAAA,IAAI;YACF,MAAM,2BAA2B,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1F,IAAI,2BAA2B,EAAE;gBAC/B,MAAM,gBAAgB,GAAqB,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACnF,gBAAA,OAAO,gBAAgB,CAAC;aACzB;iBAAM;AACL,gBAAA,OAAO,SAAS,CAAC;aAClB;;SAEF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;;IAGD,MAAM,yBAAyB,CAAC,iBAAyC,EAAA;QACvE,IAAI,uBAAuB,GAAY,KAAK,CAAC;AAC7C,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBAClC,uBAAuB,GAAG,IAAI,CAAC;AAC/B,gBAAA,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;gBAClF,OAAO;aACR;AACD,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAE,CAAC;AACxE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,iBAAiB,CAAC,cAAe,CAAC,CAAC;YAC1F,IAAI,iBAAiB,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,EAAE;AAC5E,gBAAA,IAAI;oBACF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,sBAAsB,CACvD,iBAAiB,CAAC,iBAAiB,EACnC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,SAAS,EACT,IAAI,CAAC,aAAa,CACnB,CAAC;oBACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACjE,oBAAA,IAAI,CAAC,aAAa,EAAE,mBAAmB,CACrC,WAAY,EACZ,iBAAiB,CAAC,UAAW,EAC7B,iBAAiB,CAAC,cAAe,CAClC,CAAC;AACF,oBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AAClC,oBAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;iBACrC;gBAAC,OAAO,CAAC,EAAE;AACV,oBAAA,MAAM,MAAM,GAAkB,CAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7C,oBAAA,MAAM,OAAO,GAAkB,CAAE,CAAC,OAAO,CAAC;oBAC1C,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,oBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,oBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,GAAG,OAAO,CAAC,CAAC;AACtE,oBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACjC,wBAAA,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE;AAC5B,wBAAA,YAAY,EAAE,OAAO;AACtB,qBAAA,CAAC,CAAC;iBACJ;aACF;AAAM,iBAAA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAClC,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;gBACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACjC,oBAAA,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI;AACvC,oBAAA,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAY;AACnD,iBAAA,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CACX,6CAA6C;oBAC3C,iBAAiB,CAAC,KAAK,CAAC,IAAI;oBAC5B,IAAI;AACJ,oBAAA,iBAAiB,CAAC,KAAK,CAAC,WAAW,CACtC,CAAC;aACH;iBAAM,IAAI,iBAAiB,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrE,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;gBACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACjC,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,YAAY,EAAE,yBAAyB;AACxC,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;aAC1F;iBAAM,IAAI,CAAC,WAAW,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;gBACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACjC,oBAAA,SAAS,EAAE,0BAA0B;AACrC,oBAAA,YAAY,EAAE,0BAA0B;AACzC,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,CAAC,KAAK,CAAC,mFAAmF,EAAE,WAAW,CAAC,CAAC;aACjH;iBAAM;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;aACjD;SACF;gBAAS;YACR,IAAI,CAAC,uBAAuB,EAAE;AAC5B,gBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;aACxC;SACF;KACF;;IAGD,MAAM,uBAAuB,CAAC,QAAgC,EAAA;AAC5D,QAAA,IAAI;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;AAC/E,YAAA,OAAO,wBAAwB,CAAC;SACjC;AAAC,QAAA,MAAM;AACN,YAAA,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAC5C;KACF;;AAGD,IAAA,8BAA8B,CAAC,YAAiB,EAAA;AAC9C,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC;AACnF,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAC7C,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE9D,OAAO;YACL,WAAW;YACX,YAAY;YACZ,SAAS;YACT,SAAS;SACV,CAAC;KACH;;IAGD,sBAAsB,GAAA;QACpB,IAAI,CAAC,kCAAkC,EAAE,CAAC;AAC1C,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAsB,CAAC,CAAC;AACrD,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;;IAGD,kCAAkC,GAAA;AAChC,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAuB,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KAChC;;AAGD,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACjC,QAAA,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,QAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;AAC3B,QAAA,OAAO,OAAO,CAAC;KAChB;;AAGD,IAAA,gBAAgB,CAAC,YAAsC,EAAA;AACrD,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;;AAGD,IAAA,iBAAiB,CAAC,aAAqB,EAAA;QACrC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAuB,EAAE,aAAa,CAAC,CAAC;KACnE;;IAGD,qBAAqB,GAAA;AACnB,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,cAAc,EAAE,gCAAgC;SACjD,CAAC;AAEF,QAAA,OAAO,OAAO,CAAC;KAChB;;AAGD,IAAA,0BAA0B,CAAC,GAAQ,EAAA;AACjC,QAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;YACnB,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAChC;AACD,QAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;KACnC;;AAGD,IAAA,gBAAgB,CAAC,WAAmB,EAAA;QAClC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AACrE,QAAA,OAAO,SAAS,CAAC;KAClB;;AAGD,IAAA,qBAAqB,CAAC,gBAAkC,EAAA;AACtD,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;KAC3C;;IAGD,gBAAgB,CAAC,SAAiB,EAAE,SAAiB,EAAA;AACnD,QAAA,MAAM,WAAW,GAAgB;YAC/B,SAAS;YACT,SAAS;SACV,CAAC;AACF,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;KACjC;IAED,+BAA+B,GAAA;QAC7B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC;KACxD;;AAGD,IAAA,mBAAmB,CAAC,GAAQ,EAAA;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;AACrE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;SACrC;aAAM;AACL,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;;AAGD,IAAA,kBAAkB,CAAC,GAAQ,EAAA;QACzB,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;KAClD;;AAGD,IAAA,oBAAoB,CAAC,GAAQ,EAAA;QAC3B,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;KACpD;;AAGD,IAAA,wBAAwB,CAAC,GAAQ,EAAA;QAC/B,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;KACxD;+GA1TU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;8BAoCW,wBAAwB,EAAA,CAAA;sBAAjC,MAAM;gBAIG,uBAAuB,EAAA,CAAA;sBAAhC,MAAM;;;ACrDT;AACA;AAUA;MAIa,kBAAkB,CAAA;AAI7B,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAHzC,IAAQ,CAAA,QAAA,GAAG,UAAU,CAAC;QACtB,IAAS,CAAA,SAAA,GAAG,WAAW,CAAC;KAEqB;AAEtD,IAAA,cAAc,CAAC,cAAsB,EAAA;AACnC,QAAA,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;KACxC;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,gBAAwB,CAAC;QAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,EAAE,iBAAiB,CAAC;AAC3F,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC;AAEvE,QAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClH,QAAA,MAAM,aAAa,GACjB,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjG,MAAM,aAAa,GACjB,qBAAqB;AACrB,YAAA,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3C,YAAA,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEnD,QAAA,MAAM,eAAe,GAAG,YAAY,IAAI,aAAa,IAAI,aAAa,CAAC;AAEvE,QAAA,IAAI,eAAe,IAAI,qBAAqB,EAAE;YAC5C,gBAAgB,GAAG,qBAAqB,CAAC;SAC1C;aAAM;YACL,gBAAgB,GAAG,kBAAkB,IAAI,CAAC,cAAc,CAAC,uBAAuB,kBAAkB,CAAC;SACpG;AAED,QAAA,OAAO,gBAAgB,CAAC;KACzB;AAED,IAAA,mBAAmB,CAAC,sBAAgD,EAAE,SAAiB,EAAE,cAAsB,EAAA;AAC7G,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAW,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;KACtD;AAED,IAAA,8BAA8B,CAAC,GAAQ,EAAA;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,iBAAiB,IAAI,MAAM,IAAI,UAAU,EAAE;YAC7C,OAAO;gBACL,iBAAiB;AACjB,gBAAA,cAAc,EAAE,MAAM;gBACtB,UAAU;aACX,CAAC;SACH;aAAM,IAAI,KAAK,EAAE;YAChB,OAAO,EAAE,KAAK,EAAE,CAAC;SAClB;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,qBAAqB,CACnB,iBAAqD,EACrD,cAAkC,EAClC,eAAmC,EAAA;AAEnC,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAsB,CAAC,CAAC;AAC3F,QAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;AACpG,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAEtF,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,IAAI,eAAe,EAAE;YAClE,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjE,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,WAAW,CAAC;YAC/C,cAAc,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,QAAQ,CAAC;SAC5B;aAAM,IAAI,iBAAiB,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,KAAK,EAAE;YAC3E,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;aAAM;YACL,eAAe,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;KACF;IAED,qBAAqB,CAAC,GAAuB,EAAE,eAAiD,EAAA;AAC9F,QAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3B;+GAvFU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACdD;AACA;AAUA;MAIa,uBAAuB,CAAA;IAClC,WACU,CAAA,cAA8B,EACG,YAAoB,EAAA;QADrD,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QACG,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;KAC3D;IAEJ,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,qBAAqB,CAC9B,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,oBAAoB,IAAI,CAAC,YAAY,CAAA,MAAA,CAAQ,CACzF,CAAC;KACH;IAED,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,6BAA6B,EAAE,iBAAiB,IAAI,EAAE,CAAC;KACnF;AAED,IAAA,mBAAmB,CAAC,sBAAgD,EAAE,UAAkB,EAAE,eAAuB,EAAA;AAC/G,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,EAAE;YACrD,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC;SAC9F;KACF;AAED,IAAA,8BAA8B,CAAC,GAAQ,EAAA;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,iBAAiB,EAAE;YACrB,OAAO;gBACL,iBAAiB;aAClB,CAAC;SACH;aAAM,IAAI,KAAK,EAAE;YAChB,OAAO,EAAE,KAAK,EAAE,CAAC;SAClB;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,qBAAqB,CACnB,iBAAqD,EACrD,cAAkC,EAClC,eAAmC,EAAA;AAEnC,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAsB,CAAC,CAAC;AAC3F,QAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;AACpG,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,EAAE;YAC/C,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjE,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,QAAQ,CAAC;SAC5B;aAAM,IAAI,iBAAiB,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,KAAK,EAAE;YAC3E,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;aAAM;YACL,eAAe,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC,SAAS,CAAC;SAC7B;KACF;IAED,qBAAqB,CAAC,GAAuB,EAAE,eAAiD,EAAA;QAC9F,IAAI,GAAG,EAAE;AACP,YAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;KACF;AA5DU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,6CAGxB,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAHb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAII,MAAM;2BAAC,cAAc,CAAA;;;AClB1B;AACA;AA8BA,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACjD,MAAM,qBAAqB,GAAG,MAAM,CAAC;MAMxB,gBAAgB,CAAA;AAG3B;;;;AAIG;AACH,IAAA,IACI,2BAA2B,GAAA;QAC7B,OAAO;YACL,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SACjE,CAAC;KACH;;AAGD,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;KACrC;IAWD,IAAa,YAAY,CAAC,IAAY,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;KAC/B;IACD,IAAa,aAAa,CAAC,IAAY,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;KAChC;IACD,IAAa,eAAe,CAAC,IAAY,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;KAClC;IACD,IAAa,gBAAgB,CAAC,IAAY,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;KACnC;IAKD,IAAa,SAAS,CAAC,GAAW,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,GAAG,CAAC;KACnC;AACD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;KACpC;IAED,IAAa,YAAY,CAAC,GAAW,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,GAAG,CAAC;KACtC;AACD,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;KACvC;IAED,IAAa,KAAK,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC;KAC/B;AACD,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;KAChC;IAED,IAAa,iBAAiB,CAAC,GAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,GAAG,CAAC;KAC3C;AACD,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;KAC5C;IAED,IAAa,uBAAuB,CAAC,GAAW,EAAA;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,GAAG,CAAC;KACjD;AAED,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC;KAClD;IAED,IAAa,UAAU,CAAC,GAAc,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,GAAG,CAAC;KACpC;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;KACrC;IAED,IAAa,gBAAgB,CAAC,GAAW,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,GAAG,CAAC;KAC1C;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;KAC3C;AAED,IAAA,IACI,yBAAyB,GAAA;AAC3B,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;aACvC;iBAAM;AACL,gBAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;gBAC7F,IAAI,sBAAsB,EAAE;oBAC1B,MAAM,sBAAsB,GAA6B,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC5F,oBAAA,OAAO,sBAAsB,CAAC;iBAC/B;qBAAM;AACL,oBAAA,OAAO,SAAS,CAAC;iBAClB;aACF;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,kCAAkC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/D,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;AAED,IAAA,IACI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;KAChD;AAED,IAAA,IACI,UAAU,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;aACjD;iBAAM;AACL,gBAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBAC3F,IAAI,sBAAsB,EAAE;oBAC1B,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBACpE,OAAO,WAAW,CAAC,SAAS,CAAC;iBAC9B;qBAAM;AACL,oBAAA,OAAO,SAAS,CAAC;iBAClB;aACF;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,gCAAgC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7D,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;AAED,IAAA,IACI,UAAU,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;aACjD;iBAAM;AACL,gBAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBAC3F,IAAI,sBAAsB,EAAE;oBAC1B,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBACpE,OAAO,WAAW,CAAC,SAAS,CAAC;iBAC9B;qBAAM;AACL,oBAAA,OAAO,SAAS,CAAC;iBAClB;aACF;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,gCAAgC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7D,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;AAED,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC;KACzD;IAED,IAAY,MAAM,CAAC,KAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAqFO,MAAM,gBAAgB,CAAC,qBAA0C,EAAA;AACvE,QAAA,IAAI;AACF,YAAA,MAAM,WAAW,GAAuB,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;AACpF,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9D,MAAM,qBAAqB,EAAE,CAAC;AAC9B,gBAAA,OAAO,SAAS,CAAC;aAClB;iBAAM;AACL,gBAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAClC,gBAAA,OAAO,WAAW,CAAC;aACpB;SACF;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,SAAS,EAAE,aAAa;gBACxB,YAAY,EAAE,GAAG,CAAC,OAAO;AAC1B,aAAA,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7D,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;AAEO,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5E,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACvC;AAOO,IAAA,MAAM,wBAAwB,CAAC,gBAAkC,EAAE,YAAoB,EAAA;AAC7F,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC/F,QAAA,MAAM,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;KAC5D;;AAkCD,IAAA,WAAA;;IAEU,GAAsB;;IAEtB,YAA4B;;IAE5B,mBAA2C,EAAA;QAJ3C,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAEtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAgB;QAE5B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAwB;AA3U5C,QAAA,IAAA,CAAA,IAAI,GAAc,SAAS,CAAC,MAAM,CAAC;;QAqB5C,IAAa,CAAA,aAAA,GAAuB,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;;QAEtG,IAAc,CAAA,cAAA,GAAuB,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;;QAExG,IAAgB,CAAA,gBAAA,GAAuB,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;;QAE5G,IAAiB,CAAA,iBAAA,GAAuB,IAAI,CAAC,mBAAmB,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;;AAgB9G,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,CAAC,aAAa,CAAC;AAiI1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAC5C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;AAE7C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAA4B,CAAC;AAEzE;;;;;AAKG;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAgF,OAC/F,iCAA6C,GAAA,IAAI,KAC/C;AACF,YAAA,IAAI;AACF,gBAAA,MAAM,YAAY,GAAuB,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC;gBACtF,IAAI,CAAC,YAAY,EAAE;AACjB,oBAAA,IAAI,iCAAiC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;AACnG,wBAAA,OAAO,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;AAC3G,wBAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;qBACvC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;AAC9C,wBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;qBACxD;yBAAM;AACL,wBAAA,OAAO,CAAC,IAAI,CACV,gGAAgG,CACjG,CAAC;AACF,wBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,4BAAA,SAAS,EAAE,qBAAqB;AAChC,4BAAA,YAAY,EAAE,6BAA6B;AAC5C,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,wBAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;qBAC5C;AACD,oBAAA,OAAO,SAAS,CAAC;iBAClB;qBAAM;AACL,oBAAA,IAAI;AACF,wBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC;wBAC3D,IAAI,CAAC,WAAW,EAAE;AAChB,4BAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;yBACrE;AAED,wBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;AACjF,wBAAA,MAAM,QAAQ,GAAG,MAAM,WAAY,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBACrF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACjF,wBAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,cAAe,CAAC,CAAC;AACpD,wBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AAClC,wBAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC1C,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;wBAC3B,OAAO,cAAc,EAAE,WAAW,CAAC;qBACpC;oBAAC,OAAO,CAAC,EAAE;AACV,wBAAA,MAAM,MAAM,GAAkB,CAAE,CAAC,MAAM,IAAI,CAAC,CAAC;wBAC7C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;AACpC,4BAAA,IAAI,iCAAiC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;AACnG,gCAAA,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;AAC9E,gCAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;6BACvC;iCAAM;gCACL,OAAO,CAAC,IAAI,CACV,CAA+D,4DAAA,EAAA,iCAAiC,CAAc,WAAA,EAAA,IAAI,CAAC,KAAK,CAAE,CAAA,CAC3H,CAAC;AACF,gCAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,gCAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,gCAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;6BAC5C;yBACF;AACD,wBAAA,MAAM,CAAC,CAAC;qBACT;iBACF;aACF;YAAC,OAAO,GAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,oBAAA,SAAS,EAAE,qBAAqB;oBAChC,YAAY,EAAE,GAAG,CAAC,OAAO;AAC1B,iBAAA,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/D,gBAAA,OAAO,SAAS,CAAC;aAClB;AACH,SAAC,CAAC;QA+BF,IAAkB,CAAA,kBAAA,GAAsC,YAAW;AACjE,YAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAC5E,SAAC,CAAC;AAQF,QAAA,IAAA,CAAA,4BAA4B,GAGO,OAAO,gBAAkC,EAAE,YAAoB,KAAI;AACpG,YAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1G,SAAC,CAAC;AAEO,QAAA,IAAA,CAAA,8BAA8B,GAAG,OAAO,GAAW,KAAI;AAC9D,YAAA,IAAI;gBACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,iBAAiB,EAAE;oBACrB,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;iBACtE;aACF;YAAC,OAAO,GAAQ,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,kEAAkE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/F,gBAAA,MAAM,GAAG,CAAC;aACX;AACH,SAAC,CAAC;;QASM,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;;QAE/B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAWnC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,KAAI;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;QAChE,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SACnC;aAAM;AACL,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACnC;KACF;;IAGD,MAAM,WAAW,CAAC,OAAsB,EAAA;;AAEtC,QAAA,MAAM,sBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC3D,IACE,CAAC,sBAAsB,EAAE,YAAY,IAAI,sBAAsB,EAAE,aAAa,EAAE;AAChF,YAAA,sBAAsB,EAAE,aAAa,KAAK,sBAAsB,EAAE,YAAY,EAC9E;AACA,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;YAChE,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;aACnC;iBAAM;AACL,gBAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACnC;SACF;AAED,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/C,QAAA,IACE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa;aAC/B,CAAC,gBAAgB,EAAE,YAAY,IAAI,gBAAgB,EAAE,aAAa,EAAE;gBACnE,gBAAgB,EAAE,aAAa,KAAK,gBAAgB,EAAE,YAAY,CAAC,EACrE;YACA,IAAI,CAAC,YAAY,CAAC,aAAa;AAC7B,gBAAA,gBAAgB,CAAC,YAAY,KAAK,SAAS,CAAC,UAAU;sBAClD,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,CAAC,YAAY,CAAC;sBACnF,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACjD;KACF;IAEO,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;SACvC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;SACzC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,UAAU,EAAE;AAC/C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC1C;aAAM;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACtC;KACF;AAEO,IAAA,gBAAgB,CAAC,EAAgB,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;AACvB,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;QAC7B,IAAI,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;AACvD,YAAA,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC1D;KACF;IAEO,+BAA+B,CAAC,QAAuB,EAAE,QAAuB,EAAA;AACtF,QAAA,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE;;AAEzB,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;SAC7B;AAAM,aAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;;AAEhC,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAEzB,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,YAAY,CAAC,+BAA+B,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC5B;aAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;;YAExD,MAAM,cAAc,GAA6B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,+BAA+B,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC5B;aAAM;;;SAGN;KACF;;AAGD,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;KACzD;;AAGD,IAAA,IAAI,mBAAmB,GAAA;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,CAAC;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC;QACtE,OAAO,SAAS,IAAI,UAAU,CAAC;KAChC;;AAGD,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACtF,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAK;YAC/E,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;KACJ;;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,CAAC;KACvC;;AAGO,IAAA,MAAM,oBAAoB,GAAA;AAChC,QAAA,IAAI;AACF,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,MAAM;gBACT,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,CACpD,iBAAiB,EACjB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,CACrB,IAAI,UAAU,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;gBACrD,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,iBAAkB,CAAC,CAAC;aACvE;SACF;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,SAAS,EAAE,aAAa;gBACxB,YAAY,EAAE,GAAG,CAAC,OAAO;AAC1B,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;;AAGD,IAAA,gBAAgB,CAAC,SAAiB,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,IAAI,KAAK,KAAK,oBAAoB,EAAE;AAClC,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,8BAA8B,CAAC,GAAG,CAAC,CAAC;KAC7E;;IAGD,yBAAyB,GAAA;QACvB,MAAM,YAAY,GAAuB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC;QACtF,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC;AAC1D,YAAA,MAAM,IAAI,GAAG;AACX,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,aAAa,EAAE,YAAY;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACvE,YAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,YAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;AAC3B,YAAA,OAAO,OAAO,CAAC;SAChB;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;KACF;;AAGD,IAAA,MAAM,uBAAuB,GAAA;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,EAAE;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,EAAE;AAC9C,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;SAC9B;aAAM;;AAEL,YAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;SAClE;KACF;;AAGD,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACvC;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;AACrD,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,oBAAA,SAAS,EAAE,aAAa;oBACxB,YAAY,EAAE,GAAG,CAAC,OAAO;AAC1B,iBAAA,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;aAC9C;SACF;KACF;;AAGO,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEnD,IAAI,CAAC,cAAc,GAAG,MAAM,SAAS,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;AAEhF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;KACzE;IAEO,MAAM,6BAA6B,CAAC,gBAAkC,EAAA;AAC5E,QAAA,IAAI,CAAC,YAAY,CAAC,6BAA6B,GAAG,gBAAgB,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,cAAc,CAAC;AACzE,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACvC;;IAGD,eAAe,GAAA;QACb,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,mBAAmB,EAAE,CAAC;QAEhF,MAAM,OAAO,GAAQ,IAAI,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACvD;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/C;QACD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACxD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAe,CAAC,CAAC;QACjE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;AAEzE,QAAA,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;KAC3B;;IAGD,WAAW,GAAA;AACT,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAE5C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAExF,YAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAE3C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;aAClE;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE;AACrD,gBAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBAEzB,OAAO,CAAC,KAAK,CAAC,6CAA6C,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3E,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,oBAAA,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,GAAG,CAAC,OAAO;AAC1B,iBAAA,CAAC,CAAC;aACJ;SACF;KACF;;IAGD,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;;;YAGnE,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5D,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC3C,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AAChE,YAAA,OAAO,SAAS,CAAC;SAClB;KACF;;IAGO,sBAAsB,CAAC,SAAiB,EAAE,iBAA0B,EAAA;QAC1E,IAAI,IAAI,CAAC,iBAAiB,KAAK,gBAAgB,CAAC,OAAO,EAAE;AACvD,YAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACpC;aAAM,IAAI,IAAI,CAAC,iBAAiB,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACpC;aAAM;YACL,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CACtC,iBAAiB,EACjB,8FAA8F,CAC/F,CAAC;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;SAC5B;KACF;;IAGD,aAAa,CAAC,WAA+B,EAAE,YAAoB,EAAA;QACjE,MAAM,iBAAiB,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAChE,IAAI,iBAAiB,EAAE;AACrB,YAAA,MAAM,qBAAqB,GAAG,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1E,MAAM,uBAAuB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,qBAAqB,KAAK,GAAG,IAAI,uBAAuB,KAAK,GAAG,EAAE;AACpE,gBAAA,OAAO,WAAW,GAAG,GAAG,GAAG,YAAY,CAAC;aACzC;iBAAM,IAAI,qBAAqB,KAAK,GAAG,IAAI,uBAAuB,KAAK,GAAG,EAAE;gBAC3E,OAAO,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAChD;YACD,OAAO,WAAW,GAAG,YAAY,CAAC;SACnC;aAAM;AACL,YAAA,OAAO,YAAY,CAAC;SACrB;KACF;;AAGO,IAAA,MAAM,uBAAuB,CAAC,GAAW,EAAE,OAAoB,EAAA;;AAErE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;QAChE,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAiC,CAAC;AAC1D,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC;YACnD,MAAM,cAAc,GAAW,IAAI,CAAC,iBAAiB,EAAE,cAAc,IAAI,EAAE,CAAC;YAC5E,OAAO,EAAE,cAAc,EAAE,CAAC;SAC3B;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;KACF;;AAGO,IAAA,MAAM,uBAAuB,CAAC,GAAW,EAAE,QAAkB,EAAE,OAAoB,EAAA;AACzF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;;YAE3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACvD,YAAA,MAAM,KAAK,GAAG,WAAW,KAAK,SAAS,CAAC;AACxC,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,KAAK,CAAC;KACd;+GArrBU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,8hCCtC7B,svCA8BA,EAAA,MAAA,EAAA,CAAA,sxBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDQa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,svCAAA,EAAA,MAAA,EAAA,CAAA,sxBAAA,CAAA,EAAA,CAAA;qJAKrB,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAQF,2BAA2B,EAAA,CAAA;sBAD9B,KAAK;gBAsBO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAGO,aAAa,EAAA,CAAA;sBAAzB,KAAK;gBAGO,eAAe,EAAA,CAAA;sBAA3B,KAAK;gBAGO,gBAAgB,EAAA,CAAA;sBAA5B,KAAK;gBAOO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAOO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAOO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAOO,iBAAiB,EAAA,CAAA;sBAA7B,KAAK;gBAOO,uBAAuB,EAAA,CAAA;sBAAnC,KAAK;gBAQO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAQO,gBAAgB,EAAA,CAAA;sBAA5B,KAAK;gBASF,yBAAyB,EAAA,CAAA;sBAD5B,KAAK;gBAqBF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBAMF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAqBF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAqBF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAUI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBASP,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAoGN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAWN,4BAA4B,EAAA,CAAA;sBAD3B,KAAK;gBAQG,8BAA8B,EAAA,CAAA;sBAAtC,KAAK;;;AEpVR;AACA;;ACDA;AACA;MAwBa,aAAa,CAAA;;AAExB,IAAA,WAAA;AACE,qBAAiB,QAAkB,EAAA;QAEnC,MAAM,WAAW,GAAW,UAAU,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YAC7D,MAAM,UAAU,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvE,YAAA,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;SAChD;KACF;+GAVU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EANtB,SAAA,EAAA,CAAA,gBAAgB,CAPhB,EAAA,YAAA,EAAA,CAAA,gBAAgB,aAGhB,YAAY;AACZ,YAAA,aAAa,aAMb,gBAAgB,CAAA,EAAA,CAAA,CAAA,EAAA;AAGP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAVtB,YAAY;YACZ,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;4FASJ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAfzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;AACd,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;AACjB,qBAAA;AACF,iBAAA,CAAA;;;ACxBD;AACA;;ACDA;;AAEG;;;;"}