{"version":3,"file":"tangential-authorization-service.mjs","sources":["../../../../projects/tangential/authorization-service/src/lib/exception/insufficient-permissions.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth-permission.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth-role.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth-settings.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth-user.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/session-info.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/sign-in-event.ts","../../../../projects/tangential/authorization-service/src/lib/sign-in-state.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/cdm/auth-subject.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-settings.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-configuration.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-permission.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-role.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-user.ts","../../../../projects/tangential/authorization-service/src/lib/state/settings-service/settings-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/admin-service/admin-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/admin-service/firebase-admin-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/authentication-service/authentication-service.ts","../../../../projects/tangential/authorization-service/src/lib/media-type/doc-model/auth-events.ts","../../../../projects/tangential/authorization-service/src/lib/state/user-service/user-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/authentication-service/firebase-authentication-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/settings-service/firebase-settings-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/user-service/firebase-user-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/media-type/cdm/visitor-preferences.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/media-type/cdm/visitor.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/media-type/doc-model/visitor-data.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/media-type/doc-model/visitor-preferences.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/visitor-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/firebase-visitor-service.ts","../../../../projects/tangential/authorization-service/src/lib/state/visitor-service/util/visitor-resolver.ts","../../../../projects/tangential/authorization-service/src/lib/guard/has-role.guard.ts","../../../../projects/tangential/authorization-service/src/lib/guard/has-permission.guard.ts","../../../../projects/tangential/authorization-service/src/lib/guard/signed-in.guard.ts","../../../../projects/tangential/authorization-service/src/lib/module.ts","../../../../projects/tangential/authorization-service/src/public-api.ts","../../../../projects/tangential/authorization-service/src/tangential-authorization-service.ts"],"sourcesContent":["import {AuthPermission,} from '../index'\nimport {Guard} from '@tangential/core'\n\nexport class InsufficientPermissions extends Error {\n\n  override name: string = 'InsufficientPermissions'\n\n  constructor(public permission: AuthPermission | string, message?: string) {\n    super(message || `Insufficient Permissions: Requires permission '${Guard.isString(permission) ? permission : permission.$key}'`);\n  }\n\n}\n\n","import {generatePushID} from '@tangential/core'\nimport {\n  AuthPermissionDm,\n  AuthPermissionKey\n} from '../doc-model/auth-permission'\n\nexport interface AuthPermissionCfg {\n  $key?: string\n  createdMils?: number\n  description?: string\n  editedMils?: number\n  orderIndex?: number\n}\n\nexport class AuthPermission {\n  $key: string\n  description: string\n  createdMils: number = Date.now()\n  editedMils: number = Date.now()\n  orderIndex: number\n\n  constructor($key?: string) {\n    this.$key = $key\n  }\n\n  withDescription(description:string) {\n    this.description = description\n    return this\n  }\n\n  static withKey($key: string) {\n    return new AuthPermission($key)\n  }\n\n\n  static guard(value: AuthPermission | string): value is AuthPermission {\n    return value instanceof AuthPermission\n  }\n\n  static from(cfg: AuthPermission | AuthPermissionCfg, key?: AuthPermissionKey) {\n    cfg = cfg || <AuthPermissionCfg>{}\n    key = key || cfg.$key || generatePushID()\n    const perm = new AuthPermission(key)\n    perm.createdMils = cfg.createdMils || perm.createdMils\n    perm.editedMils = cfg.editedMils || perm.editedMils\n    perm.description = cfg.description || perm.description\n    perm.orderIndex = cfg.orderIndex || perm.orderIndex\n    return perm\n  }\n}\n\n\nexport class AuthPermissionTransform {\n  static fromDocModel(dm: AuthPermissionDm, key?: string): AuthPermission {\n    key = key || dm.$key || generatePushID()\n    /* Safe to use the AuthPermission.from call, as the document model and the cfg are the same. Not even close to always true. */\n    dm.$key = key\n    return AuthPermission.from(dm)\n  }\n\n  static toDocModel(authPermission: AuthPermission) {\n    return {\n      createdMils: authPermission.createdMils,\n      editedMils:  authPermission.editedMils,\n      description: authPermission.description,\n      orderIndex:  authPermission.orderIndex,\n    }\n  }\n\n  static toDocModels(permissions: AuthPermission[]) {\n    return permissions.map(cm => AuthPermissionTransform.toDocModel(cm))\n  }\n}\n","import {generatePushID, ObjectUtil, ObjMap} from '@tangential/core';\nimport {AuthRoleDm} from '../doc-model/auth-role';\nimport {AuthPermission} from './auth-permission';\nimport {AuthRoleKey} from '../doc-model/auth-role';\nimport {RolePermissionsDm} from '../doc-model/auth-role';\n\nexport interface AuthRoleCfg {\n  $key ?: string\n  description ?: string\n  createdMils ?: number\n  editedMils ?: number\n  orderIndex ?: number\n\n  permissions ?: AuthPermission[]\n}\n\nexport class AuthRole {\n\n  $key: string\n  description: string\n  createdMils: number = Date.now()\n  editedMils: number = Date.now()\n  orderIndex: number\n\n  permissions: AuthPermission[]\n\n\n  constructor($key?: string) {\n    this.$key = $key\n  }\n\n  withPermissions(permissions:AuthPermission[]):this {\n    this.permissions = permissions\n    return this\n  }\n\n  withDescription(description:string):this {\n    this.description = description\n    return this\n  }\n\n  static withKey($key:AuthRoleKey){\n    return new AuthRole($key)\n  }\n\n  static guard(value: AuthRole | string): value is AuthRole {\n    return value instanceof AuthRole\n  }\n\n  static from(cfg: AuthRole | AuthRoleCfg): AuthRole {\n    const role = new AuthRole(cfg.$key || generatePushID())\n    role.$key = cfg.$key\n    role.permissions = cfg.permissions || role.permissions\n    role.description = cfg.description || role.description\n    role.createdMils = cfg.createdMils || role.createdMils\n    role.editedMils = cfg.editedMils || role.editedMils\n    role.orderIndex = cfg.orderIndex || role.orderIndex\n    return role\n  }\n}\n\nexport class AuthRoleTransform {\n\n  static fromDocModel(dm: AuthRoleDm,\n                      key: string,\n                      rolePermissions: { [permissionKey: string]: boolean },\n                      allPermissions: ObjMap<AuthPermission>): AuthRole {\n    const cdm = AuthRoleTransform.fragmentFromDocModel(dm, key)\n    cdm.permissions = ObjectUtil.keys(rolePermissions).map(permKey => allPermissions[permKey])\n    return cdm\n  }\n\n  static fragmentFromDocModel(dm: AuthRoleDm, key?: AuthRoleKey): AuthRole {\n    dm = dm || {}\n    key = key || dm.$key || generatePushID()\n    const cdm = new AuthRole(key)\n    cdm.description = dm.description\n    cdm.orderIndex = dm.orderIndex\n    cdm.createdMils = dm.createdMils\n    cdm.editedMils = dm.editedMils\n    return cdm\n  }\n\n  static toDocModel(role: AuthRole):AuthRoleDm {\n    return {\n      description: role.description,\n      orderIndex: role.orderIndex,\n      createdMils: role.createdMils,\n      editedMils: role.editedMils,\n    }\n  }\n\n  static toDocModels(roles: AuthRole[]):AuthRoleDm[] {\n    return roles.map(cm => AuthRoleTransform.toDocModel(cm))\n  }\n\n  static toRolePermissionDocModels(roles: AuthRole[]):RolePermissionsDm {\n    let rpDm:RolePermissionsDm = {}\n    roles.forEach(role => {\n      const permTruthMap = {}\n      role.permissions.forEach(perm => permTruthMap[perm.$key] = true)\n      rpDm[role.$key] = permTruthMap\n    })\n    return rpDm\n  }\n}\n","import {ObjectUtil, ObjMap, ObjMapUtil} from '@tangential/core';\nimport {AuthPermission, AuthPermissionTransform} from './auth-permission';\nimport {AuthRole, AuthRoleTransform} from './auth-role';\nimport {AuthPermissionKey} from '../doc-model/auth-permission';\nimport {AuthConfigurationDm} from '../doc-model/auth-configuration';\nimport {AuthSettingsDm} from '../doc-model/auth-settings';\nimport {AuthRoleKey} from '../doc-model/auth-role';\n\nexport class AuthConfiguration {\n  defaultAnonymousRole: AuthPermissionKey\n  defaultUserRole: AuthPermissionKey\n\n  constructor(cfg?: any) {\n    cfg = cfg || {}\n    this.defaultAnonymousRole = cfg.defaultAnonymousRole || null\n    this.defaultUserRole = cfg.defaultUserRole || null\n  }\n\n\n}\n\nexport class AuthConfigurationTransform {\n  static fromDocModel(configuration: AuthConfigurationDm):AuthConfiguration {\n    return new AuthConfiguration(configuration)\n  }\n\n  static toDocModel(configuration:AuthConfiguration):AuthConfigurationDm {\n    return {\n      defaultAnonymousRole: configuration.defaultAnonymousRole,\n      defaultUserRole: configuration.defaultUserRole\n    }\n\n  }\n}\n\nexport class AuthSettings {\n\n  constructor(public permissions: AuthPermission[],\n              public roles: AuthRole[],\n              public configuration: AuthConfiguration) {\n  }\n\n  permissionsMap() {\n    return ObjMapUtil.fromKeyedEntityArray(this.permissions)\n  }\n\n  rolesMap() {\n    return ObjMapUtil.fromKeyedEntityArray(this.roles)\n  }\n\n  permissionsForRoles(keys: AuthRoleKey[]):ObjMap<AuthPermission> {\n    let rolesMap = this.rolesMap()\n    let permissions: AuthPermission[] = []\n    keys.forEach(key => {\n      let role = rolesMap[key]\n      permissions.concat(role.permissions)\n    })\n    return ObjMapUtil.fromKeyedEntityArray(permissions)\n\n  }\n\n  getRole(key: AuthRoleKey):AuthRole {\n    return this.roles.find(role => key === role.$key)\n  }\n\n  getPermission(key: AuthPermissionKey):AuthPermission {\n    return this.permissions.find(permission => key === permission.$key)\n  }\n}\n\nexport class AuthSettingsTransform {\n\n  static fromDocModel(settingsDm: AuthSettingsDm): AuthSettings {\n    const permissions: AuthPermission[] = AuthSettingsTransform.permissionsFromDocModel(settingsDm)\n    const permMap = ObjMapUtil.fromKeyedEntityArray(permissions)\n    const roles: AuthRole[] = AuthSettingsTransform.rolesFromDocModel(settingsDm, permMap)\n    const configuration = AuthSettingsTransform.configurationFromDocModel(settingsDm)\n    return new AuthSettings(permissions, roles, configuration)\n  }\n\n  private static permissionsFromDocModel(docModel: AuthSettingsDm) {\n    return ObjectUtil.entries(docModel.permissions).map(entry => AuthPermissionTransform.fromDocModel(entry.value, entry.key))\n  }\n\n  private static rolesFromDocModel(docModel: AuthSettingsDm, permMap: ObjMap<AuthPermission>) {\n    return ObjectUtil.entries(docModel.roles).map(\n      entry => AuthRoleTransform.fromDocModel(entry.value, entry.key, docModel.rolePermissions[entry.key], permMap))\n  }\n\n  private static configurationFromDocModel(docModel: AuthSettingsDm) {\n    return AuthConfigurationTransform.fromDocModel(docModel.configuration)\n  }\n\n  static toDocModel(cm: AuthSettings):AuthSettingsDm {\n    const dm= <AuthSettingsDm>{}\n    dm.permissions = ObjMapUtil.fromKeyedEntityArray(AuthPermissionTransform.toDocModels(cm.permissions))\n    dm.roles = ObjMapUtil.fromKeyedEntityArray(AuthRoleTransform.toDocModels(cm.roles))\n    dm.rolePermissions = AuthRoleTransform.toRolePermissionDocModels(cm.roles)\n    dm.configuration = AuthConfigurationTransform.fromDocModel(cm.configuration)\n\n    return dm\n  }\n}\n","import {generatePushID, ObjectUtil, ObjMap, TransformUtil as TUtil} from '@tangential/core';\nimport {UserPermissionGrantsDm, UserRoleGrantsDm} from '../doc-model/auth';\nimport {AuthUserDm, AuthUserKey} from '../doc-model/auth-user';\nimport {AuthPermission} from './auth-permission';\nimport {AuthRole} from './auth-role';\nimport {AuthSettings} from './auth-settings';\nimport {SignInEvent} from './sign-in-event';\n\nexport interface AuthUserCfg {\n  $key?: AuthUserKey\n  createdMils?: number\n  disabled?: boolean\n  displayName?: string\n  editedMils?: number\n  effectivePermissions?: AuthPermission[]\n  email?: string\n  emailVerified?: boolean\n  grantedPermissions?: AuthPermission[]\n  grantedRoles?: AuthRole[]\n  isAnonymous?: boolean\n  lastSignInIp?: string\n  lastSignInMils?: number\n}\n\n\n/**\n * Conceptual data model for Auth User.\n *\n *\n *\n */\nexport class AuthUser {\n  $key: AuthUserKey\n  createdMils: number = Date.now()\n  disabled: boolean = false\n  displayName: string = ''\n  editedMils: number = Date.now()\n  effectivePermissions: AuthPermission[] = []\n  email: string = ''\n  emailVerified: boolean = false\n  grantedPermissions: AuthPermission[] = []\n  grantedRoles: AuthRole[] = []\n  isAnonymous: boolean = true\n  lastSignInIp: string\n  lastSignInMils: number = Date.now()\n  signInEvents: SignInEvent[]\n\n\n  constructor(key?: string) {\n    this.$key = key\n  }\n\n  public isAdministrator(): boolean {\n    return this.hasRole('Administrator')\n  }\n\n  public hasRole(roleKey: string): boolean {\n    return this.grantedRoles.some(role => role.$key === roleKey)\n  }\n\n  public hasRoles(roleKeys: string[]) {\n    roleKeys = roleKeys || []\n    return roleKeys.every(key => this.hasRole(key))\n  }\n\n  public hasPermission(permissionKey: string): boolean {\n    return this.effectivePermissions.some(role => role.$key === permissionKey)\n  }\n\n  public hasPermissions(permissionKeys: string[]) {\n    permissionKeys = permissionKeys || []\n    return permissionKeys.every(key => this.hasPermission(key))\n  }\n\n  /**\n   * Copy the source object to the target. Return the target for convenience.\n   * @param source\n   * @param target\n   * @returns {AuthUser|AuthUserCfg} The populated target argument.\n   */\n  static copyTo<T extends AuthUser | AuthUserCfg>(source: AuthUser | AuthUserCfg, target: T): T {\n    target.$key = source.$key || target.$key\n    target.email = source.email || target.email\n    target.displayName = source.displayName || target.displayName\n    target.isAnonymous = TUtil.firstExisting(source.isAnonymous, target.isAnonymous)\n    target.lastSignInMils = source.lastSignInMils || target.lastSignInMils\n    target.lastSignInIp = source.lastSignInIp || target.lastSignInIp\n    target.emailVerified = source.emailVerified || target.emailVerified\n    target.createdMils = source.createdMils || target.createdMils\n    target.editedMils = source.editedMils || target.editedMils\n    target.disabled = source.disabled || target.disabled\n\n    target.effectivePermissions = [].concat(source.effectivePermissions || [])\n    target.grantedPermissions = [].concat(source.grantedPermissions || [])\n    target.grantedRoles = [].concat(source.grantedRoles || [])\n\n    return target\n  }\n\n  static from(cfg: AuthUser | AuthUserCfg, key?: AuthUserKey): AuthUser {\n    cfg = cfg || {}\n    key = key || cfg.$key || generatePushID()\n    const user = new AuthUser(key)\n    return AuthUser.copyTo(cfg, user)\n  }\n}\n\n\nexport class AuthUserTransform {\n\n  static toDocModel(authUser: AuthUser): AuthUserDm {\n    let dm = {\n      email:          authUser.email,\n      displayName:    authUser.displayName,\n      isAnonymous:    authUser.isAnonymous,\n      lastSignInMils: authUser.lastSignInMils,\n      lastSignInIp:   authUser.lastSignInIp,\n      emailVerified:  authUser.emailVerified,\n      createdMils:    authUser.createdMils,\n      editedMils:     authUser.editedMils,\n      disabled:       authUser.disabled,\n    }\n\n    return ObjectUtil.removeNullish(dm)\n  }\n\n  static fromDocModels(subjects: ObjMap<AuthUserDm>,\n                       effectivePermissions: UserPermissionGrantsDm,\n                       grantedPermissions: UserPermissionGrantsDm,\n                       grantedRoles: UserRoleGrantsDm,\n                       authSettings: AuthSettings): AuthUser[] {\n    const permMap = authSettings.permissionsMap()\n    const roleMap = authSettings.rolesMap()\n    return ObjectUtil.entries(subjects).map(\n      subjectEntry => AuthUserTransform.fromDocModel(subjectEntry.key,\n        subjectEntry.value,\n        effectivePermissions[subjectEntry.key],\n        grantedPermissions[subjectEntry.key],\n        grantedRoles[subjectEntry.key],\n        permMap,\n        roleMap))\n  }\n\n  static fromDocModel(key: string,\n                      dm: AuthUserDm,\n                      effectivePermissionDms: { [permKey: string]: boolean },\n                      grantedPermissionDms: { [permKey: string]: boolean },\n                      userRoles: { [roleKey: string]: boolean },\n                      allPermissions: ObjMap<AuthPermission>,\n                      allRoles: ObjMap<AuthRole>): AuthUser {\n\n\n    const effectivePermission = ObjectUtil.keys(effectivePermissionDms).map(permKey => allPermissions[permKey])\n    const grantedPermission = ObjectUtil.keys(grantedPermissionDms).map(permKey => allPermissions[permKey])\n    const roles = ObjectUtil.keys(userRoles).map(roleKey => allRoles[roleKey])\n\n    return AuthUserTransform.fromDocModelAndCdms(key, dm, effectivePermission, grantedPermission, roles)\n  }\n\n  static fromDocModelAndCdms(key: string,\n                             dm: AuthUserDm,\n                             effectivePermissions: AuthPermission[],\n                             grantedPermissions: AuthPermission[],\n                             roles: AuthRole[]): AuthUser {\n\n    const cdm = AuthUserTransform.fragmentFromDocModel(dm, key)\n\n    cdm.effectivePermissions = effectivePermissions\n    cdm.grantedPermissions = grantedPermissions\n    cdm.grantedRoles = roles\n    return cdm\n  }\n\n  static fragmentFromDocModel(dm: AuthUserDm, key?: AuthUserKey): AuthUser {\n    dm = dm || {}\n    key = key || dm.$key || generatePushID()\n    const cdm = new AuthUser(key)\n    cdm.email = TUtil.firstExisting(dm.email, cdm.email)\n    cdm.displayName = TUtil.firstExisting(dm.displayName, cdm.displayName)\n    cdm.isAnonymous = TUtil.firstExisting(dm.isAnonymous, cdm.isAnonymous)\n    cdm.lastSignInMils = TUtil.firstExisting(dm.lastSignInMils, cdm.lastSignInMils)\n    cdm.lastSignInIp = TUtil.firstExisting(dm.lastSignInIp, cdm.lastSignInIp)\n    cdm.emailVerified = TUtil.firstExisting(dm.emailVerified, cdm.emailVerified)\n    cdm.createdMils = TUtil.firstExisting(dm.createdMils, cdm.createdMils)\n    cdm.editedMils = TUtil.firstExisting(dm.editedMils, cdm.editedMils)\n    cdm.disabled = TUtil.firstExisting(dm.disabled, cdm.disabled, false)\n    return cdm\n  }\n\n  static applyDocModelTo(source: AuthUserDm, target: AuthUser): AuthUser {\n    target.email = TUtil.firstExisting(source.email, target.email)\n    target.displayName = TUtil.firstExisting(source.displayName, target.displayName)\n    target.isAnonymous = TUtil.firstExisting(source.isAnonymous, target.isAnonymous)\n    target.lastSignInMils = TUtil.firstExisting(source.lastSignInMils, target.lastSignInMils)\n    target.lastSignInIp = TUtil.firstExisting(source.lastSignInIp, target.lastSignInIp)\n    target.emailVerified = TUtil.firstExisting(source.emailVerified, target.emailVerified)\n    target.createdMils = TUtil.firstExisting(source.createdMils, target.createdMils)\n    target.editedMils = TUtil.firstExisting(source.editedMils, target.editedMils)\n    target.disabled = TUtil.firstExisting(source.disabled, target.disabled, false)\n\n    return target\n  }\n}\n","import {AuthDm} from '../doc-model/auth';\nimport {AuthSettings, AuthSettingsTransform} from './auth-settings';\nimport {AuthUser, AuthUserTransform} from './auth-user';\n\n\nexport class Auth {\n\n  constructor(public settings: AuthSettings,\n              public users?: AuthUser[]) {\n  }\n}\n\nexport class AuthTransform {\n\n  static fromDocModel(docModel: AuthDm): Auth {\n    const settings = AuthSettingsTransform.fromDocModel(docModel.settings)\n    const users = AuthUserTransform.fromDocModels(\n      docModel.users,\n      docModel.ep,\n      docModel.grantedPermissions,\n      docModel.grantedRoles, settings)\n    return new Auth(settings, users)\n  }\n\n\n}\n","const headerKeys = [\n  'user-agent',\n  'accept-language',\n  'origin',\n  'x-appengine-city',\n  'x-appengine-citylatlong',\n  'x-appengine-country',\n  'x-appengine-region',\n  'x-appengine-user-ip',\n  'x-forwarded-for'\n]\n\nexport class SessionInfoCdm {\n  createdMils: number;\n  latLong: {\n    lat: number\n    long: number\n  }\n  city: string\n  country: string\n  region: string\n  ipAddress: string\n  rawHeaders: {\n    'user-agent': string\n    'accept-language': string\n    'origin': string\n    'x-appengine-city': string\n    'x-appengine-citylatlong': string\n    'x-appengine-country': string\n    'x-appengine-region': string\n    'x-appengine-user-ip': string\n    'x-forwarded-for': string\n  }\n\n\n  constructor() {\n    this.createdMils = Date.now()\n    this.latLong = {lat: 0, long: 0}\n  }\n\n  static fromHeaders(raw: any): SessionInfoCdm {\n    raw = raw || {}\n    let cdm = new SessionInfoCdm()\n    cdm.rawHeaders = <any>{}\n    headerKeys.forEach(key => {\n      cdm.rawHeaders[key] = raw[key] || ''\n    })\n    let latLong = cdm.rawHeaders['x-appengine-citylatlong'].split(\",\")\n    cdm.latLong = {\n      lat: Number.parseFloat(latLong[0]),\n      long: Number.parseFloat(latLong[1])\n    }\n    cdm.city = cdm.rawHeaders['x-appengine-city']\n    cdm.country = cdm.rawHeaders['x-appengine-country']\n    cdm.region = cdm.rawHeaders['x-appengine-region']\n    cdm.ipAddress = cdm.rawHeaders['x-appengine-user-ip']\n    if(!cdm.ipAddress || cdm.ipAddress.startsWith('0')){\n      cdm.ipAddress = cdm.rawHeaders['x-forwarded-for']\n    }\n    return cdm\n  }\n}\n","import {SignInEventDm} from '../doc-model/sign-in-event';\nimport {AuthSubject} from './auth-subject';\n\nexport class SignInEvent {\n  uid: string\n  whenMils: number\n  city: string\n  country: string\n  ipAddress: string\n  region: string\n  latLong: {\n    lat: number\n    long: number\n  }\n\n\n  constructor() {\n    this.whenMils = Date.now()\n  }\n\n  static forSubject(subject: AuthSubject):SignInEvent {\n    let sessionInfo = subject.sessionInfo\n    let cdm = new SignInEvent()\n    cdm.uid = subject.$key\n    cdm.whenMils = sessionInfo.createdMils\n    cdm.ipAddress = sessionInfo.ipAddress\n    cdm.city = sessionInfo.city\n    cdm.country = sessionInfo.country\n    cdm.region = sessionInfo.region\n    cdm.latLong= sessionInfo.latLong\n    return cdm\n  }\n}\n\nexport class SignInEventTransform{\n\n\n\n  static toDocModel(event:SignInEvent):SignInEventDm{\n    return {\n      uid: event.uid,\n      whenMils: event.whenMils,\n      city: event.city,\n      country: event.country,\n      ipAddress: event.ipAddress,\n      region: event.region,\n      cityLatLong: event.latLong.lat + \",\" + event.latLong.long\n    }\n  }\n\n}\n","export type SignInState =\n  'unknown' |\n  'guest' |\n  'signedOut' |\n  'signingIn' |\n  'signedIn' |\n  'signedInAnonymous' |\n  'signInFailed' |\n  'signingOut' |\n  'signingUp' |\n  'newAccount' |\n  'signUpFailed'\n\nexport const SignInStates = {\n  unknown:           <SignInState>'unknown',\n  guest:             <SignInState>'guest',\n  signedOut:         <SignInState>'signedOut',\n  signingIn:         <SignInState>'signingIn',\n  signedIn:          <SignInState>'signedIn',\n  signedInAnonymous: <SignInState>'signedInAnonymous',\n  signInFailed:      <SignInState>'signInFailed',\n  signingOut:        <SignInState>'signingOut',\n  signingUp:         <SignInState>'signingUp',\n  newAccount:        <SignInState>'newAccount',\n  signUpFailed:      <SignInState>'signUpFailed',\n}\n\n","import {SignInState, SignInStates} from '../../sign-in-state';\nimport {SessionInfoCdm} from './session-info';\nimport {AuthUser, AuthUserCfg} from './auth-user';\nimport {AuthUserKey} from '../doc-model/auth-user';\nimport {generatePushID} from '@tangential/core';\n\nexport const AnonymousSubjectUserKey = 'Anonymous'\n\nexport interface AuthSubjectCfg extends AuthUserCfg {\n  signInState?: SignInState\n  sessionInfo?: SessionInfoCdm;\n}\n\n/**\n * Conceptual Data Model for an Authentication Subject.\n *\n */\nexport class AuthSubject extends AuthUser {\n  static UnknownSubject = new AuthSubject(AnonymousSubjectUserKey)\n  static GuestSubject = new AuthSubject(AnonymousSubjectUserKey, SignInStates.guest)\n\n  signInState: SignInState\n  sessionInfo: SessionInfoCdm;\n\n  constructor(key?: AuthUserKey, signInState?: SignInState) {\n    super(key)\n    this.signInState = signInState || SignInStates.unknown\n    this.displayName = 'Guest'\n  }\n\n  public isSignedIn(): boolean {\n    return this.signInState === SignInStates.signedIn || this.isAnonymousAccount() || this.isNewAccount()\n  }\n\n  public isNewAccount(): boolean {\n    return this.signInState === SignInStates.newAccount\n  }\n\n  /**\n   * If the user has not signed in in any way. Not to be confused with isUnknown, which means that our IAM server (Firebase) has\n   * not yet informed us if the Subject is remembered or not.\n   * @returns {boolean}\n   */\n  public isGuest(): boolean {\n    return this.signInState === SignInStates.guest\n  }\n\n  public isAnonymousAccount(): boolean {\n    return this.signInState === SignInStates.signedInAnonymous\n  }\n\n  public isUnknown(): boolean {\n    return this.signInState === SignInStates.unknown\n  }\n\n  static override from(cfg: AuthSubject | AuthSubjectCfg): AuthSubject {\n    let subject = new AuthSubject(cfg.$key || generatePushID())\n    subject.signInState = cfg.signInState\n    subject.sessionInfo = cfg.sessionInfo\n    return subject\n  }\n\n\n}\n\n\nexport class AuthSubjectTransform {\n  static from(user: AuthUser, signInState: SignInState, sessionInfo: SessionInfoCdm): AuthSubject {\n    const subject = new AuthSubject(user.$key)\n    subject.signInState = signInState\n    subject.sessionInfo = sessionInfo\n    AuthUser.copyTo(user, subject)\n    if(subject.signInState === SignInStates.signedInAnonymous){\n      subject.displayName = 'Anonymous'\n    }\n\n    return subject\n  }\n}\n","import {AuthEventsDm} from './auth-events';\nimport {AuthSettingsDm} from './auth-settings';\nimport {AuthUserDm} from './auth-user';\n\nimport {Database, DatabaseReference} from '@firebase/database'\nimport {ref, child} from 'firebase/database'\n\n\nexport type UserPermissionGrantsDm = { [uid: string]: { [permissionKey: string]: boolean } }\nexport type UserRoleGrantsDm = { [uid: string]: { [roleKey: string]: boolean } }\n\nexport interface AuthDm {\n  ep: UserPermissionGrantsDm\n  events: AuthEventsDm\n  grantedPermissions: UserPermissionGrantsDm\n  grantedRoles: UserRoleGrantsDm\n  settings: AuthSettingsDm\n  users: { [uid: string]: AuthUserDm }\n}\n\n\nexport const AuthFirebaseRef = function (db: Database): DatabaseReference {\n  return ref(db, '/auth')\n}\n\nexport const AuthEffectivePermissionsRef = function (db: Database): DatabaseReference {\n  return child(AuthFirebaseRef(db), 'ep')\n}\n\nexport const AuthGrantedPermissionsRef = function (db: Database): DatabaseReference {\n  return child(AuthFirebaseRef(db), 'grantedPermissions')\n}\n\nexport const AuthGrantedRolesRef = function (db: Database): DatabaseReference {\n  return child(AuthFirebaseRef(db), 'grantedRoles')\n}\n","import {AuthRoleDm, RolePermissionsDm} from './auth-role';\nimport {AuthPermissionDm} from './auth-permission';\nimport {AuthConfigurationDm} from './auth-configuration';\nimport {AuthFirebaseRef} from './auth';\nimport {Database} from '@firebase/database'\nimport {child} from 'firebase/database'\n\n\nexport const AuthSettingsFirebaseRef = function (db: Database) {\n  return child(AuthFirebaseRef(db), 'settings/')\n}\n\nexport interface AuthSettingsDm {\n  configuration: AuthConfigurationDm\n  permissions: { [key: string]: AuthPermissionDm }\n  roles: { [key: string]: AuthRoleDm }\n  rolePermissions: RolePermissionsDm\n}\n","import {Database, DatabaseReference} from '@firebase/database'\nimport {child} from 'firebase/database'\n\nimport {AuthPermissionKey} from './auth-permission';\nimport {AuthSettingsFirebaseRef} from './auth-settings';\n\n\nexport const AuthConfigurationFirebaseRef = function(db: Database):DatabaseReference {\n  return child(AuthSettingsFirebaseRef(db), 'configuration')\n}\n\n\nexport interface AuthConfigurationDm {\n  defaultAnonymousRole: AuthPermissionKey,\n  defaultUserRole: AuthPermissionKey\n}\n","import {Database} from '@firebase/database'\nimport {AuthSettingsFirebaseRef} from './auth-settings';\nimport {child} from 'firebase/database'\n\nexport type AuthPermissionKey = string\n\nexport const AuthPermissionsFirebaseRef = function (db: Database) {\n  return child(AuthSettingsFirebaseRef(db), 'permissions')\n}\n\nexport interface AuthPermissionDm {\n  $key?: AuthPermissionKey\n  createdMils?: number\n  description?: string\n  editedMils?: number\n  orderIndex?: number\n}\n","import {Database} from '@firebase/database'\nimport {child} from 'firebase/database'\nimport {AuthSettingsFirebaseRef} from './auth-settings';\nexport type AuthRoleKey = string\n\nexport const AuthRolesFirebaseRef = function (db: Database) {\n  return child(AuthSettingsFirebaseRef(db), 'roles')\n}\n\nexport const AuthRolePermissionsFirebaseRef = function (db: Database) {\n  return child(AuthSettingsFirebaseRef(db), 'rolePermissions')\n}\n\n\nexport interface AuthRoleDm {\n  $key?: AuthRoleKey\n  createdMils?: number\n  editedMils?: number\n  description?: string\n  orderIndex?: number\n}\n\nexport type RolePermissionsDm = { [roleKey: string]: { [permissionKey: string]: boolean } }\n","import {Database, DatabaseReference} from '@firebase/database'\nimport {child} from 'firebase/database'\nimport {AuthFirebaseRef} from './auth';\nexport type AuthUserKey = string\n\n\nexport const AuthUsersFirebaseRef = function (db: Database) {\n  return child(AuthFirebaseRef(db), 'users')\n}\n\n\n\n/**\n * An AuthUser is the most basic user type. It represents any 'User' in the system; any entity that has signed in at some point.\n * AuthUser does not contain information directly related to the application - although the application does likely care about the\n * user's email, display name and avatar. AuthUser contains information that is related to identification.\n *\n * An AuthSubject is an AuthUser that is currently active; e.g. only the user currently signed in can legitimately be claimed to be\n * an authSubject.\n *\n * Applications will likely subclass or otherwise augment this AuthUser class with another 'AppUser' that contains things relevant to the\n * specific application, including Preferences and other saved application state.\n *\n */\nexport interface AuthUserDm {\n  $key?: AuthUserKey\n  createdMils?: number\n  editedMils?: number\n  email?: string\n  displayName?: string\n  emailVerified?: boolean\n  disabled?: boolean\n  isAnonymous?: boolean\n  lastSignInMils?: number\n  lastSignInIp?: string\n  photoURL?: string\n}\n\n\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\n//noinspection ES6PreferShortImport\nimport {AuthSettings} from '../../media-type/cdm/auth-settings';\n\n@Injectable()\nexport abstract class AuthSettingsService {\n\n  abstract authSettings$(): Observable<AuthSettings>\n\n}\n","import {Injectable} from '@angular/core';\n\nimport {Database} from '@firebase/database'\nimport {child, getDatabase} from 'firebase/database'\n\n\nimport {Observable} from 'rxjs';\nimport {first} from 'rxjs/operators'\n//noinspection ES6PreferShortImport\nimport {Auth} from '../../media-type/cdm/auth';\n//noinspection ES6PreferShortImport\nimport {AuthPermission} from '../../media-type/cdm/auth-permission';\n//noinspection ES6PreferShortImport\nimport {AuthPermissionKey} from '../../media-type/doc-model/auth-permission';\n//noinspection ES6PreferShortImport\nimport {AuthRoleKey, AuthRolePermissionsFirebaseRef} from '../../media-type/doc-model/auth-role';\n//noinspection ES6PreferShortImport\nimport {AuthRole} from '../../media-type/cdm/auth-role';\n//noinspection ES6PreferShortImport\nimport {AuthUser} from '../../media-type/cdm/auth-user';\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util';\n//noinspection ES6PreferShortImport\nimport {AuthSettings} from '../../media-type/cdm/auth-settings';\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../media-type/doc-model/auth-user';\n//noinspection ES6PreferShortImport\nimport {AuthSettingsService} from '../settings-service/settings-service';\n\n\n@Injectable()\nexport abstract class AdminService {\n\n  protected db: Database\n\n  constructor(protected authSettingsService:AuthSettingsService,\n              protected fb: FirebaseProvider) {\n    this.db = getDatabase(fb.app)\n\n  }\n\n  /**\n   * Use extremely rarely. This loads the entire Auth document, including *all* users.\n   */\n  abstract auth$(): Observable<Auth>\n\n  abstract addPermission(permission: AuthPermission):Promise<void>\n\n  abstract removePermission(key: AuthPermissionKey):Promise<void>\n\n  abstract updatePermission(permission: AuthPermission):Promise<void>\n\n  abstract addRole(role: AuthRole): Promise<void>\n\n  abstract updateRole(role: AuthRole): Promise<void>\n\n  abstract removeRole(key: AuthRoleKey): Promise<void>\n\n\n\n\n  /**\n   * @todo ggranum: Add Firebase Function to watch for Add Permission on Role action for updating user effective permissions.\n   * @param roleKey\n   * @param permissionKey\n   * @returns {Promise<void>}\n   */\n  grantPermissionOnRole(roleKey: AuthRoleKey, permissionKey: AuthPermissionKey): Promise<void> {\n    this.authSettingsService.authSettings$().pipe(first()).toPromise().then((authSettings:AuthSettings) => {\n      let role = authSettings.getRole(roleKey)\n      let permission = authSettings.getPermission(permissionKey)\n      role.permissions.push(permission)\n      this.updateSettings(authSettings)\n    })\n    const pRef = child(AuthRolePermissionsFirebaseRef(this.db), roleKey + '/' + permissionKey)\n    return FireBlanket.set(pRef, true)\n  }\n\n  /**\n   * @todo ggranum: Add Firebase Function to watch for revoke Permission on Role action for updating user effective permissions.\n   * @param roleKey\n   * @param permissionKey\n   * @returns {Promise<void>}\n   */\n  revokePermissionOnRole(roleKey: AuthRoleKey, permissionKey: AuthPermissionKey): Promise<void> {\n    const pRef = child(AuthRolePermissionsFirebaseRef(this.db), roleKey + '/' + permissionKey)\n    return FireBlanket.remove(pRef)\n  }\n\n  abstract addUser(entity: AuthUser): Promise<void>\n\n  abstract updateUser(entity: AuthUser): Promise<void>\n\n  abstract removeUser(entityKey: string): Promise<void>\n\n  abstract grantPermissionOnUser(user: AuthUser, permission: AuthPermission): Promise<void>\n\n  abstract revokePermissionOnUser(user: AuthUser, permission: AuthPermission): Promise<void>\n\n  abstract grantRoleOnUser(user: AuthUser, role: AuthRole): Promise<void>\n\n  abstract revokeRoleOnUser(key: AuthUserKey, role: AuthRoleKey): Promise<void>\n\n  abstract updateSettings(authSettings: AuthSettings)\n}\n","import {Injectable} from '@angular/core';\nimport {Database} from '@firebase/database'\nimport {MessageBus} from '@tangential/core';\n\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util';\nimport {getDatabase, ref, get, child} from 'firebase/database'\n\n\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators'\n//noinspection ES6PreferShortImport\nimport {Auth, AuthTransform} from '../../media-type/cdm/auth';\n//noinspection ES6PreferShortImport\nimport {AuthPermission, AuthPermissionTransform} from '../../media-type/cdm/auth-permission';\n//noinspection ES6PreferShortImport\nimport {AuthRole, AuthRoleTransform} from '../../media-type/cdm/auth-role';\n//noinspection ES6PreferShortImport\nimport {AuthSettings, AuthSettingsTransform} from '../../media-type/cdm/auth-settings';\n//noinspection ES6PreferShortImport\nimport {AuthUser, AuthUserTransform} from '../../media-type/cdm/auth-user';\n//noinspection ES6PreferShortImport\nimport {AuthPermissionKey, AuthPermissionsFirebaseRef} from '../../media-type/doc-model/auth-permission';\n//noinspection ES6PreferShortImport\nimport {AuthRoleKey, AuthRolesFirebaseRef} from '../../media-type/doc-model/auth-role';\n//noinspection ES6PreferShortImport\nimport {AuthSettingsDm} from '../../media-type/doc-model/auth-settings';\n//noinspection ES6PreferShortImport\nimport {AuthUserKey, AuthUsersFirebaseRef} from '../../media-type/doc-model/auth-user';\n//noinspection ES6PreferShortImport\nimport {AuthSettingsService} from '../settings-service/settings-service';\n\nimport {AdminService} from './admin-service';\n\n\n@Injectable()\nexport class FirebaseAdminService extends AdminService {\n\n  constructor(private bus: MessageBus,\n              fb: FirebaseProvider,\n              authSettingsService: AuthSettingsService) {\n    super(authSettingsService, fb)\n  }\n\n  public auth$(): Observable<Auth> {\n    const dRef = ref(this.db, '/auth')\n    return FireBlanket.awaitValue$(dRef).pipe(\n      map(snap => snap.val()),\n      map(dm => AuthTransform.fromDocModel(dm)))\n  }\n\n  addPermission(newPermission: AuthPermission): Promise<void> {\n    const cRef = child(AuthPermissionsFirebaseRef(this.db), newPermission.$key)\n    const model = AuthPermissionTransform.toDocModel(newPermission)\n    return FireBlanket.set(cRef, FireBlanket.util.clean(model))\n  }\n\n\n  updatePermission(permission: AuthPermission): Promise<void> {\n    const cRef = child(AuthPermissionsFirebaseRef(this.db), permission.$key)\n    const model = AuthPermissionTransform.toDocModel(permission)\n    return FireBlanket.update(cRef, FireBlanket.util.clean(model))\n  }\n\n  /**\n   * @todo ggranum: Add Firebase Function that watches for removed permissions and updates the Users table.\n   * @todo ggranum: Remove these removed permissions from Roles.\n   * @param permissionKey\n   * @returns {Promise<void>}\n   */\n  removePermission(permissionKey: AuthPermissionKey): Promise<void> {\n    const cRef = child(AuthPermissionsFirebaseRef(this.db), permissionKey)\n    return FireBlanket.remove(cRef)\n  }\n\n\n  addRole(role: AuthRole): Promise<void> {\n    const cRef = child(AuthRolesFirebaseRef(this.db), role.$key)\n    const roleDm = AuthRoleTransform.toDocModel(role)\n    return FireBlanket.set(cRef, FireBlanket.util.clean(roleDm))\n  }\n\n  updateRole(role: AuthRole): Promise<void> {\n    const cRef = child(AuthRolesFirebaseRef(this.db), role.$key)\n    const roleDm = AuthRoleTransform.toDocModel(role)\n    return FireBlanket.update(cRef, FireBlanket.util.clean(roleDm))\n  }\n\n  removeRole(key: AuthRoleKey): Promise<void> {\n    const cRef = child(AuthRolesFirebaseRef(this.db), key)\n    return FireBlanket.remove(cRef)\n  }\n\n\n  addUser(user: AuthUser): Promise<void> {\n    const cRef = child(AuthUsersFirebaseRef(this.db), user.$key)\n    let userDm = AuthUserTransform.toDocModel(user)\n    return FireBlanket.set(cRef, FireBlanket.util.clean(userDm))\n  }\n\n  updateUser(user: AuthUser): Promise<void> {\n    const cRef = child(AuthUsersFirebaseRef(this.db), user.$key)\n    let userDm = AuthUserTransform.toDocModel(user)\n    return FireBlanket.update(cRef, FireBlanket.util.clean(userDm))\n  }\n\n  removeUser(entityKey: string): Promise<void> {\n    return null;\n  }\n\n  grantPermissionOnUser(user: AuthUser, permission: AuthPermission): Promise<void> {\n    return null;\n  }\n\n  revokePermissionOnUser(user: AuthUser, permission: AuthPermission): Promise<void> {\n    return null;\n  }\n\n  grantRoleOnUser(user: AuthUser, role: AuthRole): Promise<void> {\n    return null;\n  }\n\n  revokeRoleOnUser(userKey: AuthUserKey, role: AuthRoleKey): Promise<void> {\n    return null;\n  }\n\n  updateSettings(authSettings: AuthSettings): Promise<void> {\n    let authSettingsDm: AuthSettingsDm = AuthSettingsTransform.toDocModel(authSettings)\n\n\n    return null\n  }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\n//noinspection ES6PreferShortImport\nimport {EmailPasswordCredentials} from '../../media-type/doc-model/email-password-credentials';\nimport {AuthSubject} from '../../media-type/cdm/auth-subject';\n//noinspection ES6PreferShortImport\nimport {SessionInfoCdm} from '../../media-type/cdm/session-info';\n\n@Injectable()\nexport abstract class AuthenticationService {\n\n  abstract authSubject$(): Observable<AuthSubject>\n\n  abstract awaitKnownAuthSubject$(): Observable<AuthSubject>\n\n  abstract createUserWithEmailAndPassword(payload: EmailPasswordCredentials): Promise<void>\n\n  abstract signInWithEmailAndPassword(action: EmailPasswordCredentials, suppressUserInfoSynchronization?: boolean): Promise<void>\n\n  abstract signInAnonymously(): Promise<void>\n\n  abstract signOut(): Promise<void>;\n\n  abstract deleteAccount(): Promise<void>\n\n  abstract sendResetPasswordEmail(toEmailAddress: string): Promise<void>\n\n  abstract linkAnonymousAccount(newCredentials: EmailPasswordCredentials): Promise<void>\n\n  abstract addSignInEvent(subject: AuthSubject): Promise<void>\n\n  abstract obtainAcceptLanguageHeader(): Promise<SessionInfoCdm>\n\n\n}\n","\nimport {Database, DatabaseReference} from '@firebase/database'\nimport {child} from 'firebase/database'\n\nimport {SignInEventDm} from './sign-in-event';\nimport {ObjMap} from '@tangential/core';\nimport {AuthFirebaseRef} from './auth';\nimport {AuthUserKey} from './auth-user';\n\n\nexport const AuthEventsFirebaseRef = function(db: Database):DatabaseReference {\n  return child(AuthFirebaseRef(db), 'events')\n}\n\nexport const AuthSignInEventsFirebaseRef = function(db: Database):DatabaseReference {\n  return child(AuthEventsFirebaseRef(db), 'signIn')\n}\n\nexport const AuthSignInEventsByUserFirebaseRef = function(db: Database, subjectKey:AuthUserKey):DatabaseReference {\n  return child(AuthEventsFirebaseRef(db), `byUser/${subjectKey}`)\n}\n\nexport type SignInEventMappings = {[key:string]: boolean}\n\n\nexport interface UserAuthEvents {\n  signIn: SignInEventMappings\n}\n\nexport type ByUserAuthEventMappings = {[key:string]: UserAuthEvents}\n\nexport interface AuthEventsDm {\n  byUser: ByUserAuthEventMappings\n  signIn: ObjMap<SignInEventDm>\n}\n","import {Observable} from 'rxjs';\n//noinspection ES6PreferShortImport\nimport {AuthUserDm, AuthUserKey} from '../../media-type/doc-model/auth-user';\n//noinspection ES6PreferShortImport\nimport {AuthUser} from '../../media-type/cdm/auth-user';\n\nexport abstract class UserService {\n\n  abstract awaitUsers$(): Observable<AuthUserDm[]>\n\n  abstract getUserFragment(key: AuthUserKey): Promise<AuthUser>\n\n  abstract getUser(key: AuthUserKey): Promise<AuthUser>\n\n}\n\n\n","import {Injectable} from '@angular/core';\n\nimport {Auth, User} from '@firebase/auth'\nimport {Database} from '@firebase/database'\nimport {child, getDatabase} from 'firebase/database';\nimport {\n  createUserWithEmailAndPassword, EmailAuthProvider, getAuth, linkWithCredential, sendPasswordResetEmail, signInAnonymously,\n  signInWithEmailAndPassword\n} from 'firebase/auth';\n\n\nimport {generatePushID, Logger, MessageBus, ResolveVoid} from '@tangential/core';\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {first, skip, skipWhile} from 'rxjs/operators'\nimport {AuthSubject, AuthSubjectTransform} from '../../media-type';\nimport {AuthUser, AuthUserTransform} from '../../media-type';\nimport {SessionInfoCdm} from '../../media-type';\n//noinspection ES6PreferShortImport\nimport {SignInEvent, SignInEventTransform} from '../../media-type';\n//noinspection ES6PreferShortImport\nimport {AuthSignInEventsByUserFirebaseRef, AuthSignInEventsFirebaseRef} from '../../media-type/doc-model/auth-events';\n//noinspection ES6PreferShortImport\nimport {AuthUserDm, AuthUserKey, AuthUsersFirebaseRef} from '../../media-type';\n//noinspection ES6PreferShortImport\nimport {EmailPasswordCredentials} from '../../media-type';\nimport {SignInState, SignInStates} from '../../sign-in-state';\nimport {UserService} from '../user-service/user-service';\nimport {AuthenticationService} from './authentication-service';\n\n\ninterface FirebaseAuthResponse {\n  displayName: string\n  email: string\n  emailVerified: boolean\n  isAnonymous: boolean\n  photoURL: string\n  uid: string\n}\n\n@Injectable()\nexport class FirebaseAuthenticationService extends AuthenticationService {\n\n  signInStateValue: SignInState\n  private authSubjectObserver: BehaviorSubject<AuthSubject>\n  private readonly auth: Auth\n  private readonly db: Database\n\n  constructor(bus: MessageBus,\n              protected logger: Logger,\n              private fb: FirebaseProvider,\n              protected userService: UserService) {\n    super()\n    this.auth = getAuth(fb.app)\n    this.db = getDatabase(fb.app)\n    this.init()\n  }\n\n  public obtainAcceptLanguageHeader(): Promise<SessionInfoCdm> {\n    let url = 'https://us-central1-' + this.fb.app.options['authDomain'].split('.')[0] + '.cloudfunctions.net/visitorInfoEndpoint/';\n    return new Promise((resolve, reject) => {\n      this.auth.currentUser.getIdToken().then((token) => {\n        this.logger.debug(this, '#obtainAcceptLanguageHeader', 'Sending visitor info request.');\n        const req = new XMLHttpRequest();\n        req.onload = () => {\n          let rawHeaders = JSON.parse(req.responseText) || {}\n          let sessionInfo = SessionInfoCdm.fromHeaders(rawHeaders)\n          this.logger.debug(this, '#obtainAcceptLanguageHeader::onload', sessionInfo.city)\n          resolve(sessionInfo)\n        }\n        req.onerror = (ev) => {\n          this.logger.error(this, '#obtainAcceptLanguageHeader::onerror', req.statusText)\n          reject({ event: ev, message: \"#obtainAcceptLanguageHeader::onerror\" })\n        }\n        req.open('GET', url, true);\n        req.setRequestHeader('Authorization', 'Bearer ' + token);\n        req.send();\n      });\n    })\n  }\n\n  addSignInEvent(subject: AuthSubject): Promise<void> {\n    let refId = generatePushID()\n    let ref = child(AuthSignInEventsFirebaseRef(this.db), refId)\n    let mapRef = child(AuthSignInEventsByUserFirebaseRef(this.db, subject.$key), refId)\n    let event = SignInEvent.forSubject(subject)\n    return FireBlanket.set(ref, SignInEventTransform.toDocModel(event)).then(() => {\n      return FireBlanket.set(mapRef, event.whenMils)\n    })\n  }\n\n  authSubject$(): Observable<AuthSubject> {\n    return this.authSubjectObserver\n  }\n\n  awaitKnownAuthSubject$(): Observable<AuthSubject> {\n    return this.authSubjectObserver.pipe(skipWhile(subject => subject.signInState === SignInStates.unknown))\n  }\n\n  /**\n   * Auth state changes - including which user is set as currentAuthUser - are handled by listening for\n   * changes sent down by firebase, NOT by manually setting the currentUser here. We have to set the login state\n   * here because that information can't be derived from what is supplied by firebase.\n   *\n   * @param payload\n   * @param suppressUserInfoSynchronization\n   * @returns {Promise<void>}\n   */\n  signInWithEmailAndPassword(payload: EmailPasswordCredentials, suppressUserInfoSynchronization: boolean = false): Promise<void> {\n    this.logger.trace(this, '#signInWithEmailAndPassword', 'enter', payload.email)\n    this.setSignInState(SignInStates.signingIn)\n    const loginCfg = {\n      email:    payload.email,\n      password: payload.password\n    }\n    /** @todo: ggranum: This can clearly be improved. At least figure why it was written this way and document it.  */\n    return new Promise<void>((resolve, reject) => {\n      let readyToResolve = true\n      this.authSubjectObserver.pipe(\n        skip(1),\n        first()\n      ).subscribe(() => {\n        this.logger.trace(this, '#signInWithEmailAndPassword:resolving', payload.email)\n        resolve(ResolveVoid)\n      })\n      signInWithEmailAndPassword(this.auth, loginCfg.email, loginCfg.password).catch((reason) => {\n        this.setSignInState(SignInStates.signInFailed)\n        reject(reason)\n      })\n    });\n  }\n\n  signInAnonymously(): Promise<void> {\n    this.logger.trace(this, '#signInAnonymously')\n    this.setSignInState(SignInStates.signingIn)\n    return new Promise<void>((resolve, reject) => {\n      signInAnonymously(this.auth)\n        .then((fbAuthState) => {\n          const userDm = this.subjectFromFirebaseResponse(fbAuthState.user)\n          return this.createOwnUserAccount(AuthUserTransform.fragmentFromDocModel(userDm, userDm.$key)).then(() => {\n            this.logger.trace(this, '#signInAnonymously', 'created anonymous user')\n            this.setSignInState(SignInStates.signedInAnonymous)\n            resolve(ResolveVoid)\n          })\n        })\n        .catch((reason) => {\n          this.setSignInState(SignInStates.signInFailed)\n          reject(reason)\n        })\n    });\n  }\n\n  createUserWithEmailAndPassword(payload: EmailPasswordCredentials): Promise<void> {\n    this.setSignInState(SignInStates.signingUp)\n    return new Promise<void>((resolve, reject) => {\n      createUserWithEmailAndPassword(this.auth, payload.email, payload.password)\n        .then((fbAuthState) => {\n          const userDm = this.subjectFromFirebaseResponse(fbAuthState.user)\n          return this.createOwnUserAccount(AuthUserTransform.fragmentFromDocModel(userDm, userDm.$key)).then(() => {\n            this.logger.trace(this, 'created user', userDm.email)\n            this.handleUserSignedIn(userDm).then(hydratedUser => {\n              this.setCurrentUser(hydratedUser)\n              resolve(undefined)\n            })\n          })\n        })\n        .catch((reason) => {\n          this.setSignInState(SignInStates.signUpFailed)\n          reject(reason)\n        })\n    })\n  }\n\n  createOwnUserAccount(user: AuthUser): Promise<void> {\n    const cRef = child(AuthUsersFirebaseRef(this.db), user.$key)\n    const dm = AuthUserTransform.toDocModel(user)\n    return FireBlanket.set(cRef, dm)\n  }\n\n  updateOwnUserAccount(user: AuthUser): Promise<void> {\n    const cRef = child(AuthUsersFirebaseRef(this.db), user.$key)\n    const dm = AuthUserTransform.toDocModel(user)\n    this.logger.trace(this, '#update', JSON.stringify(dm))\n    return FireBlanket.update(cRef, dm).catch(e => {\n      this.logger.error(this, '#update:failed')\n      throw e\n    })\n  }\n\n  removeOwnUserAccount(childKey: AuthUserKey): Promise<void> {\n    const cRef = child(AuthUsersFirebaseRef(this.db), childKey)\n    return FireBlanket.remove(cRef)\n  }\n\n  signOut(): Promise<void> {\n    this.logger.info(this, '#signOut', this.auth.currentUser ? this.auth.currentUser.uid : '{no user}')\n    if (this.signInStateValue === SignInStates.signedOut) {\n      throw new Error('Cannot sign out: No user is signed in.')\n    }\n    if (this.signInStateValue === SignInStates.signingOut) {\n      throw new Error('Cannot sign out: User is already signing out.')\n    }\n    this.setSignInState(SignInStates.signingOut)\n    return new Promise<void>((resolve, reject) => {\n      this.auth.signOut().then(() => {\n        this.setSignInState(SignInStates.signedOut)\n        resolve()\n      }).catch(() => {\n        this.setSignInState(this.auth.currentUser ? SignInStates.signedIn : SignInStates.signedOut)\n        reject()\n      })\n    })\n  }\n\n  deleteAccount(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      const _authUser = this.auth.currentUser\n      if (_authUser) {\n        this.removeOwnUserAccount(_authUser.uid).then(() => {\n          this.auth.currentUser.delete().then(resolve)\n        }).catch((reason) => reject(reason))\n      } else {\n        reject('NOT_SIGNED_IN')\n      }\n    })\n  }\n\n  public sendResetPasswordEmail(emailAddress: string): Promise<void> {\n    return <Promise<void>>sendPasswordResetEmail(this.auth, emailAddress)\n  }\n\n  public linkAnonymousAccount(payload: EmailPasswordCredentials): Promise<void> {\n    this.setSignInState(SignInStates.signingUp)\n    const credential = EmailAuthProvider.credential(payload.email, payload.password);\n    return <Promise<void>>linkWithCredential(this.auth.currentUser, credential)\n      .then((fbAuthState) => {\n        this.logger.trace(this, '#linkAnonymousAccount', 'linked user', fbAuthState.user.uid, fbAuthState.user.email)\n        let dm = this.subjectFromFirebaseResponse(fbAuthState.user)\n        const newAuthUser = AuthUserTransform.fragmentFromDocModel(dm, dm.$key);\n        return this.updateOwnUserAccount(newAuthUser).then(() => {\n          this.logger.trace(this, '#linkAnonymousAccount', 'updated linked user data', newAuthUser.email)\n          return this.handleUserSignedIn(newAuthUser).then(hydratedUser => {\n            this.setCurrentUser(hydratedUser)\n          })\n        })\n      })\n      .catch((reason) => {\n        this.setSignInState(SignInStates.signUpFailed)\n        throw reason\n      })\n  }\n\n  private init() {\n    this.authSubjectObserver = new BehaviorSubject(AuthSubject.UnknownSubject)\n    this.auth.onAuthStateChanged((fbAuthState: User) => {\n      this.handleAuthStateChanged(fbAuthState)\n    })\n    this.setSignInState(SignInStates.unknown)\n  }\n\n  private handleAuthStateChanged(firebaseAuthResponse: User) {\n    if (this.signInStateValue === SignInStates.signingUp) {\n      /* This state change will be handled by the '#createUserWithEmailAndPassword' method. */\n      this.logger.trace(this, '#handleAuthStateChanged:signingUp', 'User is signing up')\n    } else if (this.isSignedInResponse(firebaseAuthResponse)) {\n      this.logger.trace(this,\n        '#handleAuthStateChanged:signedIn',\n        firebaseAuthResponse.uid,\n        firebaseAuthResponse.email,\n        firebaseAuthResponse.isAnonymous)\n      let firebaseResponse: AuthUserDm = this.subjectFromFirebaseResponse(firebaseAuthResponse)\n      this.handleUserSignedIn(firebaseResponse).then(subject => {\n        this.logger.trace(this, '#handleAuthStateChanged:Subject Resolved', subject.$key, subject.email, subject.isAnonymous)\n        this.setCurrentUser(subject)\n      }).catch(error => {\n        console.warn(\"User sign in failed\", error)\n        console.log(firebaseResponse)\n      })\n    } else {\n      this.logger.trace(this, '#handleAuthStateChanged', 'Visitor is Guest or has signed out')\n      this.setCurrentUser(AuthSubject.GuestSubject)\n    }\n  }\n\n  private setCurrentUser(subject: AuthSubject): void {\n    this.logger.trace(this, '#setCurrentUser', subject ? subject.$key : 'null')\n    this.setSignInState(subject.signInState)\n    this.authSubjectObserver.next(subject)\n  }\n\n  private isSignedInResponse(firebaseAuthResponse: FirebaseAuthResponse) {\n    return firebaseAuthResponse;\n  }\n\n  private setSignInState(newState: SignInState) {\n    if (this.signInStateValue !== newState) {\n      this.logger.trace(this, '#setSignInState', newState)\n      this.signInStateValue = newState\n    }\n  }\n\n  private subjectFromFirebaseResponse(user: User): AuthUserDm {\n    const subject: AuthUserDm = {}\n    subject.$key = user.uid\n    subject.displayName = user.displayName\n    subject.email = user.email\n    subject.emailVerified = user.emailVerified\n    subject.isAnonymous = user.isAnonymous\n    subject.photoURL = user.photoURL\n    return subject;\n  }\n\n  private handleUserSignedIn(iamServiceAuthDm: AuthUserDm): Promise<AuthSubject> {\n    let user: AuthUser\n    return this.userService.getUser(iamServiceAuthDm.$key)\n      .then((u: AuthUser) => {\n        user = u\n        user = AuthUserTransform.applyDocModelTo(iamServiceAuthDm, user)\n        return this.obtainAcceptLanguageHeader()\n      }).then((sessionInfo: SessionInfoCdm) => {\n        const signInState = user.isAnonymous ? SignInStates.signedInAnonymous : SignInStates.signedIn\n        const subject = AuthSubjectTransform.from(user, signInState, sessionInfo)\n        subject.lastSignInMils = Date.now()\n        subject.lastSignInIp = sessionInfo.ipAddress\n        this.updateOwnUserAccount(subject).catch(e => {\n          /* By not waiting for this response we can cause problems in unit tests. In real use, however, waiting is a waste\n           * of at least tens of milliseconds.  */\n          this.logger.error(this, '#updateUserAuthData', 'Could not update user data', subject.email, e.message)\n        })\n        return subject\n      })\n  }\n\n}\n\n","import {Injectable} from '@angular/core';\n\nimport {MessageBus} from '@tangential/core';\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util';\n\nimport {Database} from '@firebase/database'\nimport {getAuth} from 'firebase/auth'\nimport { getDatabase } from \"firebase/database\";\n\n\nimport {Auth} from '@firebase/auth'\n\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators'\n//noinspection ES6PreferShortImport\nimport {AuthSettingsService} from './settings-service';\n//noinspection ES6PreferShortImport\nimport {AuthSettings, AuthSettingsTransform} from '../../media-type/cdm/auth-settings';\n//noinspection ES6PreferShortImport\nimport {AuthSettingsDm, AuthSettingsFirebaseRef} from '../../media-type/doc-model/auth-settings';\n\n\n\n@Injectable()\nexport class FirebaseAuthSettingsService extends AuthSettingsService {\n\n  private auth: Auth\n  private db: Database\n  private authSettingsObserver: Observable<AuthSettings>\n\n  constructor(bus: MessageBus,\n              private fb: FirebaseProvider) {\n    super()\n    this.auth = getAuth(fb.app)\n    console.log(\"===A===\", this.fb, this.fb.app)\n    this.db = getDatabase(this.fb.app)\n    this.init()\n  }\n\n  private init(){\n    this.authSettingsObserver = FireBlanket.awaitValue$(AuthSettingsFirebaseRef(this.db)).pipe(\n      map(snap => snap.val()),\n      map((dm:AuthSettingsDm) => AuthSettingsTransform.fromDocModel(dm)))\n  }\n\n\n  public authSettings$(): Observable<AuthSettings> {\n    return this.authSettingsObserver\n  }\n\n}\n\n","import {Injectable} from '@angular/core'\nimport {MessageBus, ObjectUtil, ObjMap, ObjMapUtil} from '@tangential/core'\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util'\nimport { DatabaseReference} from '@firebase/database'\nimport {child, DataSnapshot, getDatabase} from 'firebase/database'\nimport {firstValueFrom, Observable} from 'rxjs'\nimport {first, map} from 'rxjs/operators';\n//noinspection ES6PreferShortImport\nimport {AuthPermission} from '../../media-type/cdm/auth-permission'\n//noinspection ES6PreferShortImport\nimport {AuthRole} from '../../media-type/cdm/auth-role'\n//noinspection ES6PreferShortImport\nimport {AuthSettings, AuthSettingsTransform} from '../../media-type/cdm/auth-settings'\n//noinspection ES6PreferShortImport\nimport {AuthUser, AuthUserTransform} from '../../media-type/cdm/auth-user'\n//noinspection ES6PreferShortImport\nimport {AuthEffectivePermissionsRef, AuthGrantedPermissionsRef, AuthGrantedRolesRef} from '../../media-type/doc-model/auth'\n//noinspection ES6PreferShortImport\nimport {AuthRoleDm} from '../../media-type/doc-model/auth-role'\n//noinspection ES6PreferShortImport\nimport {AuthSettingsFirebaseRef} from '../../media-type/doc-model/auth-settings'\n//noinspection ES6PreferShortImport\nimport {AuthUserDm, AuthUserKey, AuthUsersFirebaseRef} from '../../media-type/doc-model/auth-user'\n//noinspection ES6PreferShortImport\nimport {AuthSettingsService} from '../settings-service/settings-service'\n//noinspection ES6PreferShortImport\nimport {UserService} from './user-service'\n\n\n\n\n@Injectable()\nexport class FirebaseUserService implements UserService {\n\n\n  userPermissionsFromUserRolesMapping = (snap: DataSnapshot): Promise<ObjMap<AuthPermission>> => {\n    const roleKeys = snap.exists() ? snap.val() : {}\n    return this.authSettingsService.authSettings$().pipe(first()).toPromise().then((authSettings: AuthSettings) => {\n      return authSettings.permissionsForRoles(ObjectUtil.keys(roleKeys))\n    })\n  }\n  private authSettingsRef: DatabaseReference\n  private effectivePermissionsRef: DatabaseReference\n  private grantedPermissionsRef: DatabaseReference\n  private grantedRolesRef: DatabaseReference\n  private ref: DatabaseReference\n  private snapMapToValue = (snap: DataSnapshot): AuthUserDm[] => {\n    let result: AuthUserDm[] = []\n    if (snap.exists()) {\n      return ObjMapUtil.toKeyedEntityArray(snap.val())\n    }\n    return result\n  }\n\n  private snapToValue = (snap: DataSnapshot): AuthUserDm => {\n    let result: AuthUserDm\n    if (snap && snap.exists()) {\n      result = Object.assign({}, {$key: snap.key}, snap.val())\n    }\n    return result\n  }\n\n  constructor(private fb: FirebaseProvider, private bus: MessageBus, private authSettingsService: AuthSettingsService) {\n\n    const db = getDatabase(fb.app)\n    this.ref = AuthUsersFirebaseRef(db)\n    this.authSettingsRef = AuthSettingsFirebaseRef(db)\n    this.grantedPermissionsRef = AuthGrantedPermissionsRef(db)\n    this.effectivePermissionsRef = AuthEffectivePermissionsRef(db)\n    this.grantedRolesRef = AuthGrantedRolesRef(db)\n  }\n\n  getRolePermissionsFor(userKey: AuthUserKey): Promise<ObjMap<AuthPermission>> {\n    const userRolesRef = child(this.grantedRolesRef, userKey)\n    return FireBlanket.value(userRolesRef).then(this.userPermissionsFromUserRolesMapping)\n  }\n\n  getUser(key: AuthUserKey): Promise<AuthUser> {\n    let effectivePermissions: ObjMap<AuthPermission>\n    let grantedPermissions: ObjMap<AuthPermission>\n    let grantedRoles: ObjMap<AuthRole>\n    let authUser: AuthUser\n    return this.getUserFragment(key).then((userFragment: AuthUser) => {\n      authUser = userFragment\n      return Promise.all([\n        this.effectivePermissionsFor(userFragment.$key).then(ep => effectivePermissions = ep),\n        this.grantedPermissionsFor(userFragment.$key).then(gp => grantedPermissions = gp),\n        this.grantedRolesFor(userFragment.$key).then(r => grantedRoles = r),\n      ])\n    }).then(() => {\n        authUser.effectivePermissions = ObjMapUtil.toKeyedEntityArray(effectivePermissions)\n        authUser.grantedPermissions = ObjMapUtil.toKeyedEntityArray(grantedPermissions)\n        authUser.grantedRoles = ObjMapUtil.toKeyedEntityArray(grantedRoles)\n        return authUser\n      }\n    )\n  }\n\n  getUserFragment(key: AuthUserKey): Promise<AuthUser> {\n    const cRef = child(this.ref, key)\n    return FireBlanket.value(cRef).then(this.snapToValue)\n      .then(dm => AuthUserTransform.fragmentFromDocModel(dm, dm ? dm.$key : key))\n  }\n\n  awaitUsers$(): Observable<AuthUserDm[]> {\n    return FireBlanket.awaitValue$(this.ref).pipe(map(this.snapMapToValue))\n  }\n\n  effectivePermissionsFor(userKey: AuthUserKey): Promise<ObjMap<AuthPermission>> {\n    return firstValueFrom(FireBlanket.awaitValue$(child(this.effectivePermissionsRef, userKey))).then(snap => {\n      return this.authSettings$().pipe(first()).toPromise().then(authSettings => {\n        const v: ObjMap<AuthRoleDm> = snap.val()\n        const permissions: ObjMap<AuthPermission> = {}\n        let permissionSmap = authSettings.permissionsMap()\n        ObjectUtil.entries(v).forEach(entry => {\n          permissions[entry.key] = permissionSmap[entry.key]\n        })\n        return permissions\n      })\n\n    })\n  }\n\n  grantedPermissionsFor(userKey: AuthUserKey): Promise<ObjMap<AuthPermission>> {\n    return firstValueFrom(FireBlanket.awaitValue$(child(this.grantedPermissionsRef, userKey))).then(snap => {\n      return firstValueFrom(this.authSettings$()).then(authSettings => {\n        const v: ObjMap<AuthRoleDm> = snap.val()\n        const permissions: ObjMap<AuthPermission> = {}\n        let permissionSmap = authSettings.permissionsMap()\n        ObjectUtil.entries(v).forEach(entry => {\n          permissions[entry.key] = permissionSmap[entry.key]\n        })\n        return permissions\n      })\n\n    })\n  }\n\n  grantedRolesFor(userKey: AuthUserKey): Promise<ObjMap<AuthRole>> {\n    return firstValueFrom(FireBlanket.awaitValue$(child(this.grantedRolesRef, userKey))).then(snap => {\n      return this.authSettings$().pipe(first()).toPromise().then(authSettings => {\n        const v: ObjMap<AuthRoleDm> = snap.val()\n        const roles: ObjMap<AuthRole> = {}\n        let roleMap = authSettings.rolesMap()\n        ObjectUtil.entries(v).forEach(entry => {\n          roles[entry.key] = roleMap[entry.key]\n        })\n        return roles\n      })\n\n    })\n  }\n\n  private authSettings$(): Observable<AuthSettings> {\n    return FireBlanket.awaitValue$(this.authSettingsRef).pipe(\n      map(snap => snap.val()),\n      map(docModel => AuthSettingsTransform.fromDocModel(docModel)))\n  }\n\n\n}\n","import {ObjMap} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {VisitorPreferencesDm} from '../doc-model/visitor-preferences';\n\nexport class VisitorPreferences {\n  hideCookieWarnings?: boolean = false\n  hiddenTips?: ObjMap<boolean> = {}\n\n  constructor() {\n  }\n\n  shouldShowTip(preferenceId: string) {\n    return this.hiddenTips[preferenceId] !== true\n  }\n\n  hideTip(preferenceId: string) {\n    this.hiddenTips[preferenceId] = true\n  }\n\n  toDocModel():VisitorPreferencesDm{\n    return {\n      hideCookieWarnings: this.hideCookieWarnings,\n      hiddenTips: Object.assign({}, this.hiddenTips)\n    }\n  }\n\n  static forGuest() {\n    return new VisitorPreferences()\n  }\n\n}\n\nexport class VisitorPreferencesTransform {\n\n  static fromDocModel(json:VisitorPreferencesDm):VisitorPreferences {\n    json = json || {}\n    let prefs = new VisitorPreferences()\n    prefs.hideCookieWarnings = json.hideCookieWarnings || false\n    prefs.hiddenTips = json.hiddenTips || {}\n    return prefs\n  }\n}\n","import {VisitorPreferences} from './visitor-preferences';\nimport {VisitorEvents} from './visitor-events';\n//noinspection ES6PreferShortImport\nimport {AuthSubject} from '../../../../media-type/cdm/auth-subject';\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../../../media-type/doc-model/auth-user';\n\n\n/**\n *\n * \"Current User\" would perhaps be a better term.\n *\n * This is a stub that will be expanded into something more akin to an 'AppUser' class, and a 'CurrentAppUser' subclass.\n * CurrentAppUser (this class) will have a subject, while AppUser will not.\n *\n * As of this moment there is no way to explore all the application data for all users in the system. Which is fair, because consumers\n * of Tangential will need to write their own application data model, and Tangential really has very little to offer 'out of the box',\n * since we have no idea what the shape of that data model will be.\n *\n */\nexport class Visitor {\n\n  subject: AuthSubject\n  events: VisitorEvents\n  prefs: VisitorPreferences\n\n  constructor(subject: AuthSubject, prefs: VisitorPreferences) {\n    this.subject = subject;\n    this.prefs = prefs || new VisitorPreferences();\n  }\n\n  get $key():AuthUserKey {\n    return this.subject.$key\n  }\n\n}\n","import {Database, DatabaseReference} from '@firebase/database'\nimport {child, ref} from 'firebase/database'\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../../../media-type/doc-model/auth-user';\nimport {VisitorEventsDocModel} from './visitor-events';\nimport {VisitorPreferencesDm} from './visitor-preferences';\n\n\nexport const VisitorDataFbPath = function (db: Database, key: AuthUserKey): DatabaseReference {\n  return child(ref(db, '/data/byUser/'), key)\n}\n\nexport interface VisitorDataDm {\n  events: VisitorEventsDocModel\n  prefs: VisitorPreferencesDm\n}\n","import {ObjMap} from '@tangential/core';\nimport {Database, DatabaseReference} from '@firebase/database'\nimport {child} from 'firebase/database'\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../../../media-type/doc-model/auth-user';\nimport {VisitorDataFbPath} from './visitor-data';\n\nexport const VisitorPreferencesFbPath = function (db: Database, key: AuthUserKey):DatabaseReference {\n  return child(VisitorDataFbPath(db, key), 'prefs')\n}\nexport interface VisitorPreferencesDm {\n  hideCookieWarnings?: boolean\n  hiddenTips?: ObjMap<boolean>\n}\n","import {Visitor} from './media-type/cdm/visitor';\n//noinspection ES6PreferShortImport\nimport {VisitorPreferences} from './media-type/cdm/visitor-preferences';\n\nimport {Observable} from 'rxjs';\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../media-type/doc-model/auth-user';\n\nexport abstract class VisitorService {\n\n  abstract awaitVisitor$(timeoutMils?: number): Observable<Visitor>\n\n  abstract visitor$(): Observable<Visitor>\n\n  abstract getVisitorPreferences(key:AuthUserKey):Promise<VisitorPreferences>\n\n  abstract setVisitorPreferences(key:AuthUserKey, prefs: VisitorPreferences): Promise<void>\n\n  abstract updateVisitorPreferences(key:AuthUserKey, prefs: VisitorPreferences): Promise<void>\n\n}\n","import {Injectable} from '@angular/core'\nimport {Logger, MessageBus} from '@tangential/core'\nimport {FirebaseProvider, FireBlanket} from '@tangential/firebase-util'\n\nimport {Database, DataSnapshot} from '@firebase/database'\nimport { getDatabase } from 'firebase/database'\n\nimport {BehaviorSubject, Observable} from 'rxjs'\nimport {catchError, first, skipWhile, tap, timeout} from 'rxjs/operators'\n//noinspection ES6PreferShortImport\nimport {AuthSubject} from '../../media-type/cdm/auth-subject'\n//noinspection ES6PreferShortImport\nimport {AuthUserKey} from '../../media-type/doc-model/auth-user'\n//noinspection ES6PreferShortImport\nimport {AuthenticationService} from '../authentication-service/authentication-service'\n\n//noinspection ES6PreferShortImport\nimport {Visitor} from './media-type/cdm/visitor'\n//noinspection ES6PreferShortImport\nimport {VisitorPreferences, VisitorPreferencesTransform} from './media-type/cdm/visitor-preferences'\n//noinspection ES6PreferShortImport\nimport {VisitorPreferencesFbPath} from './media-type/doc-model/visitor-preferences'\nimport {VisitorService} from './visitor-service'\n\n\n@Injectable()\nexport class FirebaseVisitorService extends VisitorService {\n  /**\n   * Waits for the first non-placeholder visitor (e.g. not the default value provided to the behaviour subject).\n   * This is basically saying 'wait for the Firebase auth server to respond.\n   *\n   * Subsequent calls to this method will be provided the same observable instance as the initial call. The has the effect of\n   * making the timeoutMils argument effective only on the initial call to this method for the current client session.\n   *\n   * The returned observable will never complete.\n   * @param timeoutMils\n   * @returns {Observable<R>}\n   */\n  private awaitVisitorObserver: Observable<Visitor>\n  private db: Database\n  private visitorObserver: BehaviorSubject<Visitor>\n\n  constructor(private bus: MessageBus,\n              protected logger: Logger,\n              private fb: FirebaseProvider, private authService: AuthenticationService) {\n    super()\n    this.db = getDatabase(fb.app)\n    this.visitorObserver = new BehaviorSubject(null)\n    this.initSubscriptions()\n  }\n\n  getCurrentVisitor(subject: AuthSubject): Promise<Visitor> {\n    let result: Promise<Visitor>\n    let visitor: Visitor\n    if (subject.isGuest()) {\n      visitor = new Visitor(subject, VisitorPreferences.forGuest())\n      result = Promise.resolve(visitor)\n    } else {\n      result = this.getVisitorPreferences(subject.$key).then(prefs => {\n        visitor = new Visitor(subject, prefs)\n        if (prefs === null) {\n          this.setVisitorPreferences(visitor.$key, visitor.prefs)\n        }\n        return visitor\n      }).catch(this.doCatch('#getCurrentVisitor'))\n    }\n    return result\n  }\n\n  getVisitorPreferences(key: AuthUserKey): Promise<VisitorPreferences> {\n    let ref = VisitorPreferencesFbPath(this.db, key)\n    return FireBlanket.value(ref).then((snap: DataSnapshot) => {\n      return VisitorPreferencesTransform.fromDocModel(snap.exists() ? snap.val() : null)\n    }).catch(this.doCatch('#getVisitorPreferences'))\n  }\n\n  visitor$(): Observable<Visitor> {\n    return this.visitorObserver.pipe(skipWhile(v => v === null))\n  }\n\n  awaitVisitor$(timeoutMils: number = 10000): Observable<Visitor> {\n    /* Wait up to timeout millis for the Firebase Auth to comeback with a response. */\n    this.logger.trace(this, '#awaitVisitor$')\n    if (!this.awaitVisitorObserver) {\n      this.awaitVisitorObserver = this.visitor$().pipe(\n        timeout(timeoutMils),\n        catchError((e) => {\n          this.logger.trace(this, 'Timed out')\n          return this.visitor$().pipe(\n            first(),\n            tap(v => {\n              this.logger.trace(this, 'providing alternate: ', v)\n            }))\n        }))\n    }\n    return this.awaitVisitorObserver\n  }\n\n  setVisitorPreferences(key: AuthUserKey, prefs: VisitorPreferences): Promise<void> {\n    let ref = VisitorPreferencesFbPath(this.db, key)\n    return FireBlanket.set(ref, prefs.toDocModel()).catch(this.doCatch('#setVisitorPreferences'))\n  }\n\n  updateVisitorPreferences(key: AuthUserKey, prefs: VisitorPreferences): Promise<void> {\n    let ref = VisitorPreferencesFbPath(this.db, key)\n    return FireBlanket.update(ref, prefs.toDocModel()).catch(this.doCatch('#updateVisitorPreferences'))\n  }\n\n  private initSubscriptions() {\n    this.logger.trace(this, '#initSubscriptions')\n    this.authService.awaitKnownAuthSubject$().subscribe((subject: AuthSubject) => {\n      this.logger.trace(this, '#initSubscriptions', 'Auth user changed', subject)\n      if (subject.isSignedIn()) {\n        this.getCurrentVisitor(subject).then(visitor => this.visitorObserver.next(visitor))\n      } else {\n        this.visitorObserver.next(new Visitor(subject, VisitorPreferences.forGuest()))\n      }\n    })\n  }\n\n  private doCatch(msg: string) {\n    return (e) => {\n      console.log('FirebaseVisitorService', msg, e && e.message ? e.message : '')\n      return Promise.reject(e)\n    }\n  }\n\n}\n\n","import {Injectable} from '@angular/core'\nimport {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'\nimport {Logger} from '@tangential/core'\nimport {first} from 'rxjs/operators'\nimport {Visitor} from '../media-type/cdm/visitor'\nimport {VisitorService} from '../visitor-service'\n\n@Injectable()\nexport class VisitorResolver implements Resolve<Visitor> {\n\n  constructor(protected logger: Logger,\n              private visitorService: VisitorService) {\n  }\n\n  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Visitor> {\n    return this.resolveVisitor()\n  }\n\n  resolveVisitor(): Promise<Visitor> {\n    this.logger.trace(this, 'resolve', 'enter')\n    /* Wait up to five seconds for the Firebase Auth to comeback with a response. */\n    return this.visitorService.awaitVisitor$(5000).pipe(first()).toPromise().then(x => {\n      this.logger.trace(this, 'resolved', x)\n      return x\n    })\n  }\n}\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanLoad, Route, Router, RouterStateSnapshot} from '@angular/router';\nimport {MessageBus, NavigationRequiresAuthenticationMessage, NavigationRequiresRoleMessage, NgUtil} from '@tangential/core';\nimport {Observable} from 'rxjs';\nimport {first, map} from 'rxjs/operators'\nimport {AuthSubject} from '../media-type';\nimport {AuthenticationService} from '../state'\n\n\n/**\n * Register this class as a Provider in your module before using it on a route.\n */\n@Injectable()\nexport class HasRoleGuard implements CanActivate, CanLoad, CanActivateChild {\n\n  constructor(private bus: MessageBus, private router: Router, private authService: AuthenticationService) {\n  }\n\n  public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    return this.doCheck(route, null)\n  }\n\n  public canLoad(route: Route): Observable<boolean> {\n    return this.doCheck(null, route)\n  }\n\n  public canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    return this.doCheck(childRoute, null)\n  }\n\n  private requiredRoles(activeRoute: ActivatedRouteSnapshot, route?: Route): string[] {\n    let data: any\n    if (activeRoute) {\n      data = NgUtil.data(activeRoute)\n    } else {\n      data = route.data\n    }\n    return data.roles || []\n  }\n\n  private doCheck(activeRoute: ActivatedRouteSnapshot, route?: Route): Observable<boolean> {\n    const path = activeRoute ? activeRoute.toString() : route.path\n    const roles = this.requiredRoles(activeRoute, route)\n    return this.authService.awaitKnownAuthSubject$().pipe(\n      first(),\n      map(v => {\n        let canDo: boolean\n        if (!v.isSignedIn()) {\n          canDo = false\n          NavigationRequiresAuthenticationMessage.post(this.bus, path)\n          this.router.navigate(['/sign-in'])\n        } else {\n          canDo = v.hasRoles(roles)\n          if (!canDo) {\n            NavigationRequiresRoleMessage.post(this.bus, path, this.firstMissingRole(v, roles))\n            this.router.navigate(['/home'])\n          }\n        }\n        return canDo\n      }))\n  }\n\n  private firstMissingRole(subject: AuthSubject, roles: string[]): string {\n    let role: string\n    for (let i = 0; i < roles.length; i++) {\n      if (!subject.hasRole(roles[i])) {\n        role = roles[i]\n        break\n      }\n    }\n    return role\n  }\n\n}\n","import {Injectable} from '@angular/core'\nimport {ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanLoad, Route, Router, RouterStateSnapshot} from '@angular/router'\nimport {MessageBus, NavigationRequiresAuthenticationMessage, NavigationRequiresPermissionMessage, NgUtil} from '@tangential/core'\nimport {Observable} from 'rxjs'\nimport {first, map} from 'rxjs/operators'\nimport {AuthSubject} from '../media-type'\nimport {AuthenticationService} from '../state'\n\n\n/**\n * Register this class as a Provider in your module before using it on a route.\n */\n@Injectable()\nexport class HasPermissionGuard implements CanActivate, CanLoad, CanActivateChild {\n\n  constructor(private bus: MessageBus, private router: Router, private authService: AuthenticationService) {\n  }\n\n  public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    return this.doCheck(route, null)\n  }\n\n  public canLoad(route: Route): Observable<boolean> {\n    return this.doCheck(null, route)\n  }\n\n  public canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    return this.doCheck(childRoute, null)\n  }\n\n  private requiredPermissions(activeRoute: ActivatedRouteSnapshot, route?: Route): string[] {\n    let data: any\n    if (activeRoute) {\n      data = NgUtil.data(activeRoute)\n    } else {\n      data = route.data\n    }\n    return data.permissions || []\n  }\n\n  private doCheck(activeRoute: ActivatedRouteSnapshot, route?: Route): Observable<boolean> {\n    const path = activeRoute ? activeRoute.toString() : route.path\n    const permissions = this.requiredPermissions(activeRoute, route)\n    return this.authService.awaitKnownAuthSubject$().pipe(\n      first(),\n      map(v => {\n        let canDo: boolean\n        if (!v.isSignedIn()) {\n          canDo = false\n          NavigationRequiresAuthenticationMessage.post(this.bus, path)\n          this.router.navigate(['/sign-in'])\n        } else {\n          canDo = v.hasPermissions(permissions)\n          if (!canDo) {\n            NavigationRequiresPermissionMessage.post(this.bus, path, this.firstMissingPermission(v, permissions))\n            this.router.navigate(['/home'])\n          }\n        }\n        return canDo\n      }))\n  }\n\n  private firstMissingPermission(subject: AuthSubject, permissions: string[]): string {\n    let permission: string\n    for (let i = 0; i < permissions.length; i++) {\n      if (!subject.hasPermission(permissions[i])) {\n        permission = permissions[i]\n        break\n      }\n    }\n    return permission\n  }\n\n}\n","import {Injectable} from '@angular/core'\nimport {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from '@angular/router'\nimport {Observable} from 'rxjs'\nimport {first, map} from 'rxjs/operators'\n//noinspection ES6PreferShortImport\nimport {VisitorService} from '../state/visitor-service/visitor-service';\n\n\n/**\n * Register this class as a Provider in your module before using it on a route.\n */\n@Injectable()\nexport class SignedInGuard implements CanActivate {\n\n  constructor(private router: Router, private visitorService: VisitorService) {\n  }\n\n  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    return this.isSignedIn(state.url)\n  }\n\n  private isSignedIn(url: string): Observable<boolean> {\n\n    return this.visitorService.awaitVisitor$().pipe(\n      first(),\n      map(v => {\n        const signedIn = v != null\n        if (!signedIn) {\n          this.router.navigate(['/sign-in'])\n        }\n        return signedIn\n      }))\n  }\n}\n","import {CommonModule} from '@angular/common'\nimport {NgModule, Optional, SkipSelf} from '@angular/core'\n\n/**\n * State management (including persistence) for Authentication and Authorization.\n *\n * Modules that implement other persistence mechanisms should provide their own module, replacing this one.\n *\n */\n@NgModule({\n  declarations: [],\n  imports:      [\n    CommonModule,\n  ],\n  providers:    [],\n  exports:      []\n})\nexport class AuthorizationServiceModule {\n\n\n  constructor(@Optional() @SkipSelf() parentModule: AuthorizationServiceModule) {\n    if (parentModule) {\n      throw new Error(\n        'AuthModule is already loaded. Import it in the AppModule only')\n    }\n  }\n}\n","/*\n * Public API Surface of authorization-service\n */\n\nexport * from './lib/index'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TUtil","i1.AuthSettingsService","i3.AuthSettingsService","i3.UserService","i1","i2","i3.AuthenticationService","i2.VisitorService"],"mappings":";;;;;;;;;;;;;AAGM,MAAO,uBAAwB,SAAQ,KAAK,CAAA;IAIhD,WAAmB,CAAA,UAAmC,EAAE,OAAgB,EAAA;QACtE,KAAK,CAAC,OAAO,IAAI,CAAA,+CAAA,EAAkD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;QADhH,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QAF7C,IAAI,CAAA,IAAA,GAAW,yBAAyB,CAAA;KAIhD;AAEF;;MCGY,cAAc,CAAA;AAOzB,IAAA,WAAA,CAAY,IAAa,EAAA;AAJzB,QAAA,IAAA,CAAA,WAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;AAChC,QAAA,IAAA,CAAA,UAAU,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;AAI7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;KACjB;AAED,IAAA,eAAe,CAAC,WAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;AAC9B,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;KAChC;IAGD,OAAO,KAAK,CAAC,KAA8B,EAAA;QACzC,OAAO,KAAK,YAAY,cAAc,CAAA;KACvC;AAED,IAAA,OAAO,IAAI,CAAC,GAAuC,EAAE,GAAuB,EAAA;AAC1E,QAAA,GAAG,GAAG,GAAG,IAAuB,EAAE,CAAA;QAClC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc,EAAE,CAAA;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAA;QACnD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAA;AACnD,QAAA,OAAO,IAAI,CAAA;KACZ;AACF,CAAA;MAGY,uBAAuB,CAAA;AAClC,IAAA,OAAO,YAAY,CAAC,EAAoB,EAAE,GAAY,EAAA;QACpD,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,cAAc,EAAE,CAAA;;AAExC,QAAA,EAAE,CAAC,IAAI,GAAG,GAAG,CAAA;AACb,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KAC/B;IAED,OAAO,UAAU,CAAC,cAA8B,EAAA;QAC9C,OAAO;YACL,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,UAAU,EAAG,cAAc,CAAC,UAAU;YACtC,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,UAAU,EAAG,cAAc,CAAC,UAAU;SACvC,CAAA;KACF;IAED,OAAO,WAAW,CAAC,WAA6B,EAAA;AAC9C,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;KACrE;AACF;;MCxDY,QAAQ,CAAA;AAWnB,IAAA,WAAA,CAAY,IAAa,EAAA;AAPzB,QAAA,IAAA,CAAA,WAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;AAChC,QAAA,IAAA,CAAA,UAAU,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;AAO7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;KACjB;AAED,IAAA,eAAe,CAAC,WAA4B,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;AAC9B,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,eAAe,CAAC,WAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;AAC9B,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,OAAO,CAAC,IAAgB,EAAA;AAC7B,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;KAC1B;IAED,OAAO,KAAK,CAAC,KAAwB,EAAA;QACnC,OAAO,KAAK,YAAY,QAAQ,CAAA;KACjC;IAED,OAAO,IAAI,CAAC,GAA2B,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAA;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACtD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACtD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAA;QACnD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAA;AACnD,QAAA,OAAO,IAAI,CAAA;KACZ;AACF,CAAA;MAEY,iBAAiB,CAAA;IAE5B,OAAO,YAAY,CAAC,EAAc,EACd,GAAW,EACX,eAAqD,EACrD,cAAsC,EAAA;QACxD,MAAM,GAAG,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC3D,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;AAC1F,QAAA,OAAO,GAAG,CAAA;KACX;AAED,IAAA,OAAO,oBAAoB,CAAC,EAAc,EAAE,GAAiB,EAAA;AAC3D,QAAA,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;QACb,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,cAAc,EAAE,CAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC7B,QAAA,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAA;AAChC,QAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAA;AAC9B,QAAA,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAA;AAChC,QAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAA;AAC9B,QAAA,OAAO,GAAG,CAAA;KACX;IAED,OAAO,UAAU,CAAC,IAAc,EAAA;QAC9B,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAA;KACF;IAED,OAAO,WAAW,CAAC,KAAiB,EAAA;AAClC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;KACzD;IAED,OAAO,yBAAyB,CAAC,KAAiB,EAAA;QAChD,IAAI,IAAI,GAAqB,EAAE,CAAA;AAC/B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;YACnB,MAAM,YAAY,GAAG,EAAE,CAAA;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;AAChE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;AAChC,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,IAAI,CAAA;KACZ;AACF;;MCjGY,iBAAiB,CAAA;AAI5B,IAAA,WAAA,CAAY,GAAS,EAAA;AACnB,QAAA,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;QACf,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAA;QAC5D,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAA;KACnD;AAGF,CAAA;MAEY,0BAA0B,CAAA;IACrC,OAAO,YAAY,CAAC,aAAkC,EAAA;AACpD,QAAA,OAAO,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAA;KAC5C;IAED,OAAO,UAAU,CAAC,aAA+B,EAAA;QAC/C,OAAO;YACL,oBAAoB,EAAE,aAAa,CAAC,oBAAoB;YACxD,eAAe,EAAE,aAAa,CAAC,eAAe;SAC/C,CAAA;KAEF;AACF,CAAA;MAEY,YAAY,CAAA;AAEvB,IAAA,WAAA,CAAmB,WAA6B,EAC7B,KAAiB,EACjB,aAAgC,EAAA;QAFhC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;QAC7B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAmB;KAClD;IAED,cAAc,GAAA;QACZ,OAAO,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;KACzD;IAED,QAAQ,GAAA;QACN,OAAO,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACnD;AAED,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AACrC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC9B,IAAI,WAAW,GAAqB,EAAE,CAAA;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACjB,YAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AACxB,YAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AACtC,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;KAEpD;AAED,IAAA,OAAO,CAAC,GAAgB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,CAAA;KAClD;AAED,IAAA,aAAa,CAAC,GAAsB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA;KACpE;AACF,CAAA;MAEY,qBAAqB,CAAA;IAEhC,OAAO,YAAY,CAAC,UAA0B,EAAA;QAC5C,MAAM,WAAW,GAAqB,qBAAqB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;QAC/F,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QAC5D,MAAM,KAAK,GAAe,qBAAqB,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtF,MAAM,aAAa,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAA;QACjF,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;KAC3D;IAEO,OAAO,uBAAuB,CAAC,QAAwB,EAAA;AAC7D,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,uBAAuB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;KAC3H;AAEO,IAAA,OAAO,iBAAiB,CAAC,QAAwB,EAAE,OAA+B,EAAA;AACxF,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAC3C,KAAK,IAAI,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;KACjH;IAEO,OAAO,yBAAyB,CAAC,QAAwB,EAAA;QAC/D,OAAO,0BAA0B,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;KACvE;IAED,OAAO,UAAU,CAAC,EAAgB,EAAA;QAChC,MAAM,EAAE,GAAkB,EAAE,CAAA;AAC5B,QAAA,EAAE,CAAC,WAAW,GAAG,UAAU,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;AACrG,QAAA,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QACnF,EAAE,CAAC,eAAe,GAAG,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC1E,EAAE,CAAC,aAAa,GAAG,0BAA0B,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;AAE5E,QAAA,OAAO,EAAE,CAAA;KACV;AACF;;AC7ED;;;;;AAKG;MACU,QAAQ,CAAA;AAiBnB,IAAA,WAAA,CAAY,GAAY,EAAA;AAfxB,QAAA,IAAA,CAAA,WAAW,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAA;QACzB,IAAW,CAAA,WAAA,GAAW,EAAE,CAAA;AACxB,QAAA,IAAA,CAAA,UAAU,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;QAC/B,IAAoB,CAAA,oBAAA,GAAqB,EAAE,CAAA;QAC3C,IAAK,CAAA,KAAA,GAAW,EAAE,CAAA;QAClB,IAAa,CAAA,aAAA,GAAY,KAAK,CAAA;QAC9B,IAAkB,CAAA,kBAAA,GAAqB,EAAE,CAAA;QACzC,IAAY,CAAA,YAAA,GAAe,EAAE,CAAA;QAC7B,IAAW,CAAA,WAAA,GAAY,IAAI,CAAA;AAE3B,QAAA,IAAA,CAAA,cAAc,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;AAKjC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;KAChB;IAEM,eAAe,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;KACrC;AAEM,IAAA,OAAO,CAAC,OAAe,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;KAC7D;AAEM,IAAA,QAAQ,CAAC,QAAkB,EAAA;AAChC,QAAA,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAA;AACzB,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;KAChD;AAEM,IAAA,aAAa,CAAC,aAAqB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;KAC3E;AAEM,IAAA,cAAc,CAAC,cAAwB,EAAA;AAC5C,QAAA,cAAc,GAAG,cAAc,IAAI,EAAE,CAAA;AACrC,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;KAC5D;AAED;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAmC,MAA8B,EAAE,MAAS,EAAA;QACvF,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA;QACxC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAA;QAC3C,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAA;AAC7D,QAAA,MAAM,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAChF,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAA;QACtE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAA;QAChE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAA;QACnE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAA;QAC7D,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAA;QAC1D,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAA;AAEpD,QAAA,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;AAC1E,QAAA,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAA;AACtE,QAAA,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;AAE1D,QAAA,OAAO,MAAM,CAAA;KACd;AAED,IAAA,OAAO,IAAI,CAAC,GAA2B,EAAE,GAAiB,EAAA;AACxD,QAAA,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;QACf,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,cAAc,EAAE,CAAA;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;KAClC;AACF,CAAA;MAGY,iBAAiB,CAAA;IAE5B,OAAO,UAAU,CAAC,QAAkB,EAAA;AAClC,QAAA,IAAI,EAAE,GAAG;YACP,KAAK,EAAW,QAAQ,CAAC,KAAK;YAC9B,WAAW,EAAK,QAAQ,CAAC,WAAW;YACpC,WAAW,EAAK,QAAQ,CAAC,WAAW;YACpC,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,YAAY,EAAI,QAAQ,CAAC,YAAY;YACrC,aAAa,EAAG,QAAQ,CAAC,aAAa;YACtC,WAAW,EAAK,QAAQ,CAAC,WAAW;YACpC,UAAU,EAAM,QAAQ,CAAC,UAAU;YACnC,QAAQ,EAAQ,QAAQ,CAAC,QAAQ;SAClC,CAAA;AAED,QAAA,OAAO,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;KACpC;IAED,OAAO,aAAa,CAAC,QAA4B,EAC5B,oBAA4C,EAC5C,kBAA0C,EAC1C,YAA8B,EAC9B,YAA0B,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,CAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;QACvC,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CACrC,YAAY,IAAI,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAC7D,YAAY,CAAC,KAAK,EAClB,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,EACtC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,EACpC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,EAC9B,OAAO,EACP,OAAO,CAAC,CAAC,CAAA;KACd;AAED,IAAA,OAAO,YAAY,CAAC,GAAW,EACX,EAAc,EACd,sBAAsD,EACtD,oBAAoD,EACpD,SAAyC,EACzC,cAAsC,EACtC,QAA0B,EAAA;QAG5C,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3G,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QACvG,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AAE1E,QAAA,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAA;KACrG;IAED,OAAO,mBAAmB,CAAC,GAAW,EACX,EAAc,EACd,oBAAsC,EACtC,kBAAoC,EACpC,KAAiB,EAAA;QAE1C,MAAM,GAAG,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;AAE3D,QAAA,GAAG,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;AAC/C,QAAA,GAAG,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;AAC3C,QAAA,GAAG,CAAC,YAAY,GAAG,KAAK,CAAA;AACxB,QAAA,OAAO,GAAG,CAAA;KACX;AAED,IAAA,OAAO,oBAAoB,CAAC,EAAc,EAAE,GAAiB,EAAA;AAC3D,QAAA,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;QACb,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,cAAc,EAAE,CAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC7B,QAAA,GAAG,CAAC,KAAK,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;AACpD,QAAA,GAAG,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;AACtE,QAAA,GAAG,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;AACtE,QAAA,GAAG,CAAC,cAAc,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;AAC/E,QAAA,GAAG,CAAC,YAAY,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;AACzE,QAAA,GAAG,CAAC,aAAa,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;AAC5E,QAAA,GAAG,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;AACtE,QAAA,GAAG,CAAC,UAAU,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AACnE,QAAA,GAAG,CAAC,QAAQ,GAAGA,aAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACpE,QAAA,OAAO,GAAG,CAAA;KACX;AAED,IAAA,OAAO,eAAe,CAAC,MAAkB,EAAE,MAAgB,EAAA;AACzD,QAAA,MAAM,CAAC,KAAK,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAC9D,QAAA,MAAM,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;AAChF,QAAA,MAAM,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;AAChF,QAAA,MAAM,CAAC,cAAc,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;AACzF,QAAA,MAAM,CAAC,YAAY,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;AACnF,QAAA,MAAM,CAAC,aAAa,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;AACtF,QAAA,MAAM,CAAC,WAAW,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;AAChF,QAAA,MAAM,CAAC,UAAU,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;AAC7E,QAAA,MAAM,CAAC,QAAQ,GAAGA,aAAK,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAE9E,QAAA,OAAO,MAAM,CAAA;KACd;AACF;;MCrMY,IAAI,CAAA;IAEf,WAAmB,CAAA,QAAsB,EACtB,KAAkB,EAAA;QADlB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;QACtB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAa;KACpC;AACF,CAAA;MAEY,aAAa,CAAA;IAExB,OAAO,YAAY,CAAC,QAAgB,EAAA;QAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAC3C,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,kBAAkB,EAC3B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAClC,QAAA,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;KACjC;AAGF;;ACzBD,MAAM,UAAU,GAAG;IACjB,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,kBAAkB;IAClB,yBAAyB;IACzB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;CAClB,CAAA;MAEY,cAAc,CAAA;AAuBzB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC,CAAA;KACjC;IAED,OAAO,WAAW,CAAC,GAAQ,EAAA;AACzB,QAAA,GAAG,GAAG,GAAG,IAAI,EAAE,CAAA;AACf,QAAA,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE,CAAA;AAC9B,QAAA,GAAG,CAAC,UAAU,GAAQ,EAAE,CAAA;AACxB,QAAA,UAAU,CAAC,OAAO,CAAC,GAAG,IAAG;AACvB,YAAA,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;AACtC,SAAC,CAAC,CAAA;AACF,QAAA,IAAI,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClE,GAAG,CAAC,OAAO,GAAG;YACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACpC,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;QAC7C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;QACnD,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;QACjD,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;AACrD,QAAA,IAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAC;YACjD,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;AAClD,SAAA;AACD,QAAA,OAAO,GAAG,CAAA;KACX;AACF;;MC1DY,WAAW,CAAA;AAatB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;KAC3B;IAED,OAAO,UAAU,CAAC,OAAoB,EAAA;AACpC,QAAA,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;AACrC,QAAA,IAAI,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,QAAA,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAA;AACtB,QAAA,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAA;AACtC,QAAA,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAA;AACrC,QAAA,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;AAC3B,QAAA,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAA;AACjC,QAAA,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAA;AAC/B,QAAA,GAAG,CAAC,OAAO,GAAE,WAAW,CAAC,OAAO,CAAA;AAChC,QAAA,OAAO,GAAG,CAAA;KACX;AACF,CAAA;MAEY,oBAAoB,CAAA;IAI/B,OAAO,UAAU,CAAC,KAAiB,EAAA;QACjC,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,YAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI;SAC1D,CAAA;KACF;AAEF;;ACrCY,MAAA,YAAY,GAAG;AAC1B,IAAA,OAAO,EAAyB,SAAS;AACzC,IAAA,KAAK,EAA2B,OAAO;AACvC,IAAA,SAAS,EAAuB,WAAW;AAC3C,IAAA,SAAS,EAAuB,WAAW;AAC3C,IAAA,QAAQ,EAAwB,UAAU;AAC1C,IAAA,iBAAiB,EAAe,mBAAmB;AACnD,IAAA,YAAY,EAAoB,cAAc;AAC9C,IAAA,UAAU,EAAsB,YAAY;AAC5C,IAAA,SAAS,EAAuB,WAAW;AAC3C,IAAA,UAAU,EAAsB,YAAY;AAC5C,IAAA,YAAY,EAAoB,cAAc;;;AClBzC,MAAM,uBAAuB,GAAG,YAAW;AAOlD;;;AAGG;AACG,MAAO,WAAY,SAAQ,QAAQ,CAAA;IAOvC,WAAY,CAAA,GAAiB,EAAE,WAAyB,EAAA;QACtD,KAAK,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,YAAY,CAAC,OAAO,CAAA;AACtD,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAA;KAC3B;IAEM,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;KACtG;IAEM,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,UAAU,CAAA;KACpD;AAED;;;;AAIG;IACI,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,KAAK,CAAA;KAC/C;IAEM,kBAAkB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,iBAAiB,CAAA;KAC3D;IAEM,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,OAAO,CAAA;KACjD;IAED,OAAgB,IAAI,CAAC,GAAiC,EAAA;AACpD,QAAA,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAA;AAC3D,QAAA,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAA;AACrC,QAAA,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAA;AACrC,QAAA,OAAO,OAAO,CAAA;KACf;;AA1CM,WAAA,CAAA,cAAc,GAAG,IAAI,WAAW,CAAC,uBAAuB,CAAC,CAAA;AACzD,WAAY,CAAA,YAAA,GAAG,IAAI,WAAW,CAAC,uBAAuB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;MA+CvE,oBAAoB,CAAA;AAC/B,IAAA,OAAO,IAAI,CAAC,IAAc,EAAE,WAAwB,EAAE,WAA2B,EAAA;QAC/E,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1C,QAAA,OAAO,CAAC,WAAW,GAAG,WAAW,CAAA;AACjC,QAAA,OAAO,CAAC,WAAW,GAAG,WAAW,CAAA;AACjC,QAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC9B,QAAA,IAAG,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC,iBAAiB,EAAC;AACxD,YAAA,OAAO,CAAC,WAAW,GAAG,WAAW,CAAA;AAClC,SAAA;AAED,QAAA,OAAO,OAAO,CAAA;KACf;AACF;;ACzDM,MAAM,eAAe,GAAG,UAAU,EAAY,EAAA;AACnD,IAAA,OAAO,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;AACzB,EAAC;AAEM,MAAM,2BAA2B,GAAG,UAAU,EAAY,EAAA;IAC/D,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AACzC,EAAC;AAEM,MAAM,yBAAyB,GAAG,UAAU,EAAY,EAAA;IAC7D,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAA;AACzD,EAAC;AAEM,MAAM,mBAAmB,GAAG,UAAU,EAAY,EAAA;IACvD,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;AACnD;;AC3BO,MAAM,uBAAuB,GAAG,UAAU,EAAY,EAAA;IAC3D,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;AAChD;;ACHO,MAAM,4BAA4B,GAAG,UAAS,EAAY,EAAA;IAC/D,OAAO,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAA;AAC5D;;ACHO,MAAM,0BAA0B,GAAG,UAAU,EAAY,EAAA;IAC9D,OAAO,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;AAC1D;;ACHO,MAAM,oBAAoB,GAAG,UAAU,EAAY,EAAA;IACxD,OAAO,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;AACpD,EAAC;AAEM,MAAM,8BAA8B,GAAG,UAAU,EAAY,EAAA;IAClE,OAAO,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;AAC9D;;ACLO,MAAM,oBAAoB,GAAG,UAAU,EAAY,EAAA;IACxD,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;AAC5C;;MCFsB,mBAAmB,CAAA;;iHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;;;MCyBW,YAAY,CAAA;IAIhC,WAAsB,CAAA,mBAAuC,EACvC,EAAoB,EAAA;QADpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAoB;QACvC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QACxC,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;KAE9B;AAsBD;;;;;AAKG;IACH,qBAAqB,CAAC,OAAoB,EAAE,aAAgC,EAAA;QAC1E,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,YAAyB,KAAI;YACpG,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACxC,IAAI,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;AACnC,SAAC,CAAC,CAAA;AACF,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,aAAa,CAAC,CAAA;QAC1F,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KACnC;AAED;;;;;AAKG;IACH,sBAAsB,CAAC,OAAoB,EAAE,aAAgC,EAAA;AAC3E,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,aAAa,CAAC,CAAA;AAC1F,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAChC;;0GAxDmB,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;8GAAZ,YAAY,EAAA,CAAA,CAAA;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;;ACML,MAAO,oBAAqB,SAAQ,YAAY,CAAA;AAEpD,IAAA,WAAA,CAAoB,GAAe,EACvB,EAAoB,EACpB,mBAAwC,EAAA;AAClD,QAAA,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAHZ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;KAIlC;IAEM,KAAK,GAAA;QACV,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;AAClC,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CACvC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EACvB,GAAG,CAAC,EAAE,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;KAC7C;AAED,IAAA,aAAa,CAAC,aAA6B,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;QAC3E,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AAC/D,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;KAC5D;AAGD,IAAA,gBAAgB,CAAC,UAA0B,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC5D,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;KAC/D;AAED;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,aAAgC,EAAA;AAC/C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;AACtE,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAChC;AAGD,IAAA,OAAO,CAAC,IAAc,EAAA;AACpB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACjD,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAC7D;AAED,IAAA,UAAU,CAAC,IAAc,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACjD,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAChE;AAED,IAAA,UAAU,CAAC,GAAgB,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;AACtD,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAChC;AAGD,IAAA,OAAO,CAAC,IAAc,EAAA;AACpB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,IAAI,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC/C,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAC7D;AAED,IAAA,UAAU,CAAC,IAAc,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,IAAI,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC/C,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAChE;AAED,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,qBAAqB,CAAC,IAAc,EAAE,UAA0B,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC;KACb;IAED,sBAAsB,CAAC,IAAc,EAAE,UAA0B,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC;KACb;IAED,eAAe,CAAC,IAAc,EAAE,IAAc,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CAAC,OAAoB,EAAE,IAAiB,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,cAAc,CAAC,YAA0B,EAAA;QACvC,IAAI,cAAc,GAAmB,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAGnF,QAAA,OAAO,IAAI,CAAA;KACZ;;kHA/FU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;sHAApB,oBAAoB,EAAA,CAAA,CAAA;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;MCzBW,qBAAqB,CAAA;;mHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;uHAArB,qBAAqB,EAAA,CAAA,CAAA;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;;;ACEJ,MAAM,qBAAqB,GAAG,UAAS,EAAY,EAAA;IACxD,OAAO,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC7C,CAAC,CAAA;AAEM,MAAM,2BAA2B,GAAG,UAAS,EAAY,EAAA;IAC9D,OAAO,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AACnD,CAAC,CAAA;AAEM,MAAM,iCAAiC,GAAG,UAAS,EAAY,EAAE,UAAsB,EAAA;IAC5F,OAAO,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,CAAU,OAAA,EAAA,UAAU,CAAE,CAAA,CAAC,CAAA;AACjE,CAAC;;MCdqB,WAAW,CAAA;AAQhC;;AC2BK,MAAO,6BAA8B,SAAQ,qBAAqB,CAAA;AAOtE,IAAA,WAAA,CAAY,GAAe,EACL,MAAc,EAChB,EAAoB,EAClB,WAAwB,EAAA;AAC5C,QAAA,KAAK,EAAE,CAAA;QAHa,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAChB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QAClB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAE5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAA;KACZ;IAEM,0BAA0B,GAAA;QAC/B,IAAI,GAAG,GAAG,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,0CAA0C,CAAC;QAChI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;gBAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,6BAA6B,EAAE,+BAA+B,CAAC,CAAC;AACxF,gBAAA,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;AACjC,gBAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,oBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;oBACnD,IAAI,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;AACxD,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qCAAqC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;oBAChF,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,iBAAC,CAAA;AACD,gBAAA,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,KAAI;AACnB,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,sCAAsC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;oBAC/E,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC,CAAA;AACxE,iBAAC,CAAA;gBACD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC3B,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;gBACzD,GAAG,CAAC,IAAI,EAAE,CAAC;AACb,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAA;KACH;AAED,IAAA,cAAc,CAAC,OAAoB,EAAA;AACjC,QAAA,IAAI,KAAK,GAAG,cAAc,EAAE,CAAA;AAC5B,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5D,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;QACnF,IAAI,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC3C,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;YAC5E,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;AAChD,SAAC,CAAC,CAAA;KACH;IAED,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,mBAAmB,CAAA;KAChC;IAED,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;KACzG;AAED;;;;;;;;AAQG;AACH,IAAA,0BAA0B,CAAC,OAAiC,EAAE,+BAAA,GAA2C,KAAK,EAAA;AAC5G,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;AAC9E,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG;YACf,KAAK,EAAK,OAAO,CAAC,KAAK;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAA;;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;YAC3C,IAAI,cAAc,GAAG,IAAI,CAAA;AACzB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC3B,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,EAAE,CACR,CAAC,SAAS,CAAC,MAAK;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,uCAAuC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC/E,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,aAAC,CAAC,CAAA;AACF,YAAA,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACxF,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;gBAC9C,MAAM,CAAC,MAAM,CAAC,CAAA;AAChB,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,iBAAiB,GAAA;QACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;AAC7C,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,iBAAA,IAAI,CAAC,CAAC,WAAW,KAAI;gBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACjE,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;oBACtG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,EAAE,wBAAwB,CAAC,CAAA;AACvE,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;oBACnD,OAAO,CAAC,WAAW,CAAC,CAAA;AACtB,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;gBAC9C,MAAM,CAAC,MAAM,CAAC,CAAA;AAChB,aAAC,CAAC,CAAA;AACN,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,8BAA8B,CAAC,OAAiC,EAAA;AAC9D,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvE,iBAAA,IAAI,CAAC,CAAC,WAAW,KAAI;gBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACjE,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;AACtG,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;oBACrD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,IAAG;AAClD,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;wBACjC,OAAO,CAAC,SAAS,CAAC,CAAA;AACpB,qBAAC,CAAC,CAAA;AACJ,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;gBAC9C,MAAM,CAAC,MAAM,CAAC,CAAA;AAChB,aAAC,CAAC,CAAA;AACN,SAAC,CAAC,CAAA;KACH;AAED,IAAA,oBAAoB,CAAC,IAAc,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,EAAE,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC7C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;KACjC;AAED,IAAA,oBAAoB,CAAC,IAAc,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,EAAE,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;AACtD,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAG;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACzC,YAAA,MAAM,CAAC,CAAA;AACT,SAAC,CAAC,CAAA;KACH;AAED,IAAA,oBAAoB,CAAC,QAAqB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC3D,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAChC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,CAAA;AACnG,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,CAAC,SAAS,EAAE;AACpD,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;AAC1D,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,CAAC,UAAU,EAAE;AACrD,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;AACjE,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QAC5C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC5B,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAC3C,gBAAA,OAAO,EAAE,CAAA;AACX,aAAC,CAAC,CAAC,KAAK,CAAC,MAAK;gBACZ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;AAC3F,gBAAA,MAAM,EAAE,CAAA;AACV,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;IAED,aAAa,GAAA;QACX,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA;AACvC,YAAA,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAK;AACjD,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC9C,iBAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AACrC,aAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,eAAe,CAAC,CAAA;AACxB,aAAA;AACH,SAAC,CAAC,CAAA;KACH;AAEM,IAAA,sBAAsB,CAAC,YAAoB,EAAA;QAChD,OAAsB,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;KACtE;AAEM,IAAA,oBAAoB,CAAC,OAAiC,EAAA;AAC3D,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAC3C,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjF,OAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;AACxE,aAAA,IAAI,CAAC,CAAC,WAAW,KAAI;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7G,IAAI,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AAC3D,YAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;AACtD,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;gBAC/F,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,IAAG;AAC9D,oBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;AACnC,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,MAAM,KAAI;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;AAC9C,YAAA,MAAM,MAAM,CAAA;AACd,SAAC,CAAC,CAAA;KACL;IAEO,IAAI,GAAA;QACV,IAAI,CAAC,mBAAmB,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QAC1E,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAiB,KAAI;AACjD,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAA;AAC1C,SAAC,CAAC,CAAA;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;KAC1C;AAEO,IAAA,sBAAsB,CAAC,oBAA0B,EAAA;AACvD,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,CAAC,SAAS,EAAE;;YAEpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,mCAAmC,EAAE,oBAAoB,CAAC,CAAA;AACnF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EACpB,kCAAkC,EAClC,oBAAoB,CAAC,GAAG,EACxB,oBAAoB,CAAC,KAAK,EAC1B,oBAAoB,CAAC,WAAW,CAAC,CAAA;YACnC,IAAI,gBAAgB,GAAe,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAA;YACzF,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;gBACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,0CAA0C,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;AACrH,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;AAC9B,aAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;AACf,gBAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;AAC1C,gBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC/B,aAAC,CAAC,CAAA;AACH,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,yBAAyB,EAAE,oCAAoC,CAAC,CAAA;AACxF,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;AAC9C,SAAA;KACF;AAEO,IAAA,cAAc,CAAC,OAAoB,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAC3E,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AACxC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACvC;AAEO,IAAA,kBAAkB,CAAC,oBAA0C,EAAA;AACnE,QAAA,OAAO,oBAAoB,CAAC;KAC7B;AAEO,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AACpD,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAA;AACjC,SAAA;KACF;AAEO,IAAA,2BAA2B,CAAC,IAAU,EAAA;QAC5C,MAAM,OAAO,GAAe,EAAE,CAAA;AAC9B,QAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;AACvB,QAAA,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;AACtC,QAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AAC1B,QAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;AAC1C,QAAA,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;AACtC,QAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;AAChC,QAAA,OAAO,OAAO,CAAC;KAChB;AAEO,IAAA,kBAAkB,CAAC,gBAA4B,EAAA;AACrD,QAAA,IAAI,IAAc,CAAA;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACnD,aAAA,IAAI,CAAC,CAAC,CAAW,KAAI;YACpB,IAAI,GAAG,CAAC,CAAA;YACR,IAAI,GAAG,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;AAChE,YAAA,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAA;AAC1C,SAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAA2B,KAAI;AACtC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,iBAAiB,GAAG,YAAY,CAAC,QAAQ,CAAA;AAC7F,YAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACzE,YAAA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AACnC,YAAA,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,SAAS,CAAA;YAC5C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAG;AAC3C;AACwC;AACxC,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;AACxG,aAAC,CAAC,CAAA;AACF,YAAA,OAAO,OAAO,CAAA;AAChB,SAAC,CAAC,CAAA;KACL;;2HAlSU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+HAA7B,6BAA6B,EAAA,CAAA,CAAA;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;;;AChBL,MAAO,2BAA4B,SAAQ,mBAAmB,CAAA;IAMlE,WAAY,CAAA,GAAe,EACP,EAAoB,EAAA;AACtC,QAAA,KAAK,EAAE,CAAA;QADW,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QAEtC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,IAAI,EAAE,CAAA;KACZ;IAEO,IAAI,GAAA;QACV,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACxF,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EACvB,GAAG,CAAC,CAAC,EAAiB,KAAK,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;KACtE;IAGM,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAA;KACjC;;yHAxBU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6HAA3B,2BAA2B,EAAA,CAAA,CAAA;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;MCSE,mBAAmB,CAAA;AA8B9B,IAAA,WAAA,CAAoB,EAAoB,EAAU,GAAe,EAAU,mBAAwC,EAAA;QAA/F,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;QAAU,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AA3BnH,QAAA,IAAA,CAAA,mCAAmC,GAAG,CAAC,IAAkB,KAAqC;AAC5F,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;YAChD,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,YAA0B,KAAI;gBAC5G,OAAO,YAAY,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AACpE,aAAC,CAAC,CAAA;AACJ,SAAC,CAAA;AAMO,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,IAAkB,KAAkB;YAC5D,IAAI,MAAM,GAAiB,EAAE,CAAA;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,OAAO,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;AACjD,aAAA;AACD,YAAA,OAAO,MAAM,CAAA;AACf,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,IAAkB,KAAgB;AACvD,YAAA,IAAI,MAAkB,CAAA;AACtB,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACzB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;AACzD,aAAA;AACD,YAAA,OAAO,MAAM,CAAA;AACf,SAAC,CAAA;QAIC,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAA;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,qBAAqB,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAA;AAC1D,QAAA,IAAI,CAAC,uBAAuB,GAAG,2BAA2B,CAAC,EAAE,CAAC,CAAA;AAC9D,QAAA,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAA;KAC/C;AAED,IAAA,qBAAqB,CAAC,OAAoB,EAAA;QACxC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AACzD,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;KACtF;AAED,IAAA,OAAO,CAAC,GAAgB,EAAA;AACtB,QAAA,IAAI,oBAA4C,CAAA;AAChD,QAAA,IAAI,kBAA0C,CAAA;AAC9C,QAAA,IAAI,YAA8B,CAAA;AAClC,QAAA,IAAI,QAAkB,CAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAsB,KAAI;YAC/D,QAAQ,GAAG,YAAY,CAAA;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC;AACjB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,oBAAoB,GAAG,EAAE,CAAC;AACrF,gBAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,kBAAkB,GAAG,EAAE,CAAC;AACjF,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;AACpE,aAAA,CAAC,CAAA;AACJ,SAAC,CAAC,CAAC,IAAI,CAAC,MAAK;YACT,QAAQ,CAAC,oBAAoB,GAAG,UAAU,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAA;YACnF,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAA;YAC/E,QAAQ,CAAC,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;AACnE,YAAA,OAAO,QAAQ,CAAA;AACjB,SAAC,CACF,CAAA;KACF;AAED,IAAA,eAAe,CAAC,GAAgB,EAAA;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACjC,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;aAClD,IAAI,CAAC,EAAE,IAAI,iBAAiB,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA;KAC9E;IAED,WAAW,GAAA;AACT,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;KACxE;AAED,IAAA,uBAAuB,CAAC,OAAoB,EAAA;QAC1C,OAAO,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;AACvG,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY,IAAG;AACxE,gBAAA,MAAM,CAAC,GAAuB,IAAI,CAAC,GAAG,EAAE,CAAA;gBACxC,MAAM,WAAW,GAA2B,EAAE,CAAA;AAC9C,gBAAA,IAAI,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE,CAAA;gBAClD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AACpC,oBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACpD,iBAAC,CAAC,CAAA;AACF,gBAAA,OAAO,WAAW,CAAA;AACpB,aAAC,CAAC,CAAA;AAEJ,SAAC,CAAC,CAAA;KACH;AAED,IAAA,qBAAqB,CAAC,OAAoB,EAAA;QACxC,OAAO,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;AACrG,YAAA,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,IAAG;AAC9D,gBAAA,MAAM,CAAC,GAAuB,IAAI,CAAC,GAAG,EAAE,CAAA;gBACxC,MAAM,WAAW,GAA2B,EAAE,CAAA;AAC9C,gBAAA,IAAI,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE,CAAA;gBAClD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AACpC,oBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACpD,iBAAC,CAAC,CAAA;AACF,gBAAA,OAAO,WAAW,CAAA;AACpB,aAAC,CAAC,CAAA;AAEJ,SAAC,CAAC,CAAA;KACH;AAED,IAAA,eAAe,CAAC,OAAoB,EAAA;QAClC,OAAO,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;AAC/F,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY,IAAG;AACxE,gBAAA,MAAM,CAAC,GAAuB,IAAI,CAAC,GAAG,EAAE,CAAA;gBACxC,MAAM,KAAK,GAAqB,EAAE,CAAA;AAClC,gBAAA,IAAI,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;gBACrC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AACpC,oBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACvC,iBAAC,CAAC,CAAA;AACF,gBAAA,OAAO,KAAK,CAAA;AACd,aAAC,CAAC,CAAA;AAEJ,SAAC,CAAC,CAAA;KACH;IAEO,aAAa,GAAA;AACnB,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EACvB,GAAG,CAAC,QAAQ,IAAI,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KACjE;;iHA7HU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MC3BE,kBAAkB,CAAA;AAI7B,IAAA,WAAA,GAAA;QAHA,IAAkB,CAAA,kBAAA,GAAa,KAAK,CAAA;QACpC,IAAU,CAAA,UAAA,GAAqB,EAAE,CAAA;KAGhC;AAED,IAAA,aAAa,CAAC,YAAoB,EAAA;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAA;KAC9C;AAED,IAAA,OAAO,CAAC,YAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;KACrC;IAED,UAAU,GAAA;QACR,OAAO;YACL,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;SAC/C,CAAA;KACF;AAED,IAAA,OAAO,QAAQ,GAAA;QACb,OAAO,IAAI,kBAAkB,EAAE,CAAA;KAChC;AAEF,CAAA;MAEY,2BAA2B,CAAA;IAEtC,OAAO,YAAY,CAAC,IAAyB,EAAA;AAC3C,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;AACjB,QAAA,IAAI,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAA;QACpC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAA;QAC3D,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;AACxC,QAAA,OAAO,KAAK,CAAA;KACb;AACF;;ACjCD;;;;;;;;;;;AAWG;MACU,OAAO,CAAA;IAMlB,WAAY,CAAA,OAAoB,EAAE,KAAyB,EAAA;AACzD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,kBAAkB,EAAE,CAAC;KAChD;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;KACzB;AAEF;;AC3BY,MAAA,iBAAiB,GAAG,UAAU,EAAY,EAAE,GAAgB,EAAA;IACvE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,CAAA;AAC7C;;ACHa,MAAA,wBAAwB,GAAG,UAAU,EAAY,EAAE,GAAgB,EAAA;IAC9E,OAAO,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AACnD;;MCDsB,cAAc,CAAA;AAYnC;;ACMK,MAAO,sBAAuB,SAAQ,cAAc,CAAA;AAgBxD,IAAA,WAAA,CAAoB,GAAe,EACb,MAAc,EAChB,EAAoB,EAAU,WAAkC,EAAA;AAClF,QAAA,KAAK,EAAE,CAAA;QAHW,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;QACb,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAChB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QAAU,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;QAElF,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,iBAAiB,EAAE,CAAA;KACzB;AAED,IAAA,iBAAiB,CAAC,OAAoB,EAAA;AACpC,QAAA,IAAI,MAAwB,CAAA;AAC5B,QAAA,IAAI,OAAgB,CAAA;AACpB,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;YACrB,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC7D,YAAA,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAClC,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAG;gBAC7D,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACrC,IAAI,KAAK,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;AACxD,iBAAA;AACD,gBAAA,OAAO,OAAO,CAAA;aACf,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAA;AAC7C,SAAA;AACD,QAAA,OAAO,MAAM,CAAA;KACd;AAED,IAAA,qBAAqB,CAAC,GAAgB,EAAA;QACpC,IAAI,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;AAChD,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAkB,KAAI;YACxD,OAAO,2BAA2B,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;SACnF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAA;KACjD;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;KAC7D;IAED,aAAa,CAAC,cAAsB,KAAK,EAAA;;QAEvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC9C,OAAO,CAAC,WAAW,CAAC,EACpB,UAAU,CAAC,CAAC,CAAC,KAAI;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;AACpC,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CACzB,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,IAAG;oBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAA;iBACpD,CAAC,CAAC,CAAA;aACN,CAAC,CAAC,CAAA;AACN,SAAA;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAA;KACjC;IAED,qBAAqB,CAAC,GAAgB,EAAE,KAAyB,EAAA;QAC/D,IAAI,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAChD,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAA;KAC9F;IAED,wBAAwB,CAAC,GAAgB,EAAE,KAAyB,EAAA;QAClE,IAAI,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAChD,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAA;KACpG;IAEO,iBAAiB,GAAA;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;QAC7C,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,SAAS,CAAC,CAAC,OAAoB,KAAI;AAC3E,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAA;AAC3E,YAAA,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE;gBACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AACpF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC/E,aAAA;AACH,SAAC,CAAC,CAAA;KACH;AAEO,IAAA,OAAO,CAAC,GAAW,EAAA;QACzB,OAAO,CAAC,CAAC,KAAI;YACX,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;AAC3E,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC1B,SAAC,CAAA;KACF;;oHAnGU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;wHAAtB,sBAAsB,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;MCjBE,eAAe,CAAA;IAE1B,WAAsB,CAAA,MAAc,EAChB,cAA8B,EAAA;QAD5B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAChB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KACjD;IAED,OAAO,CAAC,KAA6B,EAAE,KAA0B,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAA;KAC7B;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;;QAE3C,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAG;YAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;AACtC,YAAA,OAAO,CAAC,CAAA;AACV,SAAC,CAAC,CAAA;KACH;;6GAjBU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAf,eAAe,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;ACEX;;AAEG;MAEU,YAAY,CAAA;AAEvB,IAAA,WAAA,CAAoB,GAAe,EAAU,MAAc,EAAU,WAAkC,EAAA;QAAnF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;QAAU,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAAU,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KACtG;IAEM,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KACjC;AAEM,IAAA,OAAO,CAAC,KAAY,EAAA;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACjC;IAEM,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QACpF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;KACtC;IAEO,aAAa,CAAC,WAAmC,EAAE,KAAa,EAAA;AACtE,QAAA,IAAI,IAAS,CAAA;AACb,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;KACxB;IAEO,OAAO,CAAC,WAAmC,EAAE,KAAa,EAAA;AAChE,QAAA,MAAM,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACpD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,IAAI,CACnD,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,KAAc,CAAA;AAClB,YAAA,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnB,KAAK,GAAG,KAAK,CAAA;gBACb,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACnC,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBACzB,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;oBACnF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAChC,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAA;SACb,CAAC,CAAC,CAAA;KACN;IAEO,gBAAgB,CAAC,OAAoB,EAAE,KAAe,EAAA;AAC5D,QAAA,IAAI,IAAY,CAAA;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9B,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACf,MAAK;AACN,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAA;KACZ;;0GA1DU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;8GAAZ,YAAY,EAAA,CAAA,CAAA;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;;ACHX;;AAEG;MAEU,kBAAkB,CAAA;AAE7B,IAAA,WAAA,CAAoB,GAAe,EAAU,MAAc,EAAU,WAAkC,EAAA;QAAnF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;QAAU,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAAU,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KACtG;IAEM,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KACjC;AAEM,IAAA,OAAO,CAAC,KAAY,EAAA;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACjC;IAEM,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QACpF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;KACtC;IAEO,mBAAmB,CAAC,WAAmC,EAAE,KAAa,EAAA;AAC5E,QAAA,IAAI,IAAS,CAAA;AACb,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;KAC9B;IAEO,OAAO,CAAC,WAAmC,EAAE,KAAa,EAAA;AAChE,QAAA,MAAM,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAChE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,IAAI,CACnD,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,KAAc,CAAA;AAClB,YAAA,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnB,KAAK,GAAG,KAAK,CAAA;gBACb,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACnC,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;gBACrC,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;oBACrG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAChC,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAA;SACb,CAAC,CAAC,CAAA;KACN;IAEO,sBAAsB,CAAC,OAAoB,EAAE,WAAqB,EAAA;AACxE,QAAA,IAAI,UAAkB,CAAA;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1C,gBAAA,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC3B,MAAK;AACN,aAAA;AACF,SAAA;AACD,QAAA,OAAO,UAAU,CAAA;KAClB;;gHA1DU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;oHAAlB,kBAAkB,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;ACJX;;AAEG;MAEU,aAAa,CAAA;IAExB,WAAoB,CAAA,MAAc,EAAU,cAA8B,EAAA;QAAtD,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAAU,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KACzE;IAED,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAClC;AAEO,IAAA,UAAU,CAAC,GAAW,EAAA;AAE5B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAC7C,KAAK,EAAE,EACP,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAA;YAC1B,IAAI,CAAC,QAAQ,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACnC,aAAA;AACD,YAAA,OAAO,QAAQ,CAAA;SAChB,CAAC,CAAC,CAAA;KACN;;2GApBU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAb,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;;;ACRX;;;;;AAKG;MASU,0BAA0B,CAAA;AAGrC,IAAA,WAAA,CAAoC,YAAwC,EAAA;AAC1E,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CACb,+DAA+D,CAAC,CAAA;AACnE,SAAA;KACF;;wHARU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YALnC,YAAY,CAAA,EAAA,CAAA,CAAA;AAKH,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YALnC,YAAY,CAAA,EAAA,CAAA,CAAA;4FAKH,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAO;wBACZ,YAAY;AACb,qBAAA;AACD,oBAAA,SAAS,EAAK,EAAE;AAChB,oBAAA,OAAO,EAAO,EAAE;AACjB,iBAAA,CAAA;;0BAIc,QAAQ;;0BAAI,QAAQ;;;ACpBnC;;AAEG;;ACFH;;AAEG;;;;"}