{"version":3,"file":"ng-laydate.mjs","sources":["../../../projects/ng-laydate/src/lib/safe-html.pipe.ts","../../../projects/ng-laydate/src/lib/ng-laydate.component.ts","../../../projects/ng-laydate/src/lib/ng-laydate.component.html","../../../projects/ng-laydate/src/lib/ng-laydate.service.ts","../../../projects/ng-laydate/src/lib/ng-laydate.directive.ts","../../../projects/ng-laydate/src/public-api.ts","../../../projects/ng-laydate/src/ng-laydate.ts"],"sourcesContent":["import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n    name: 'safeHtml',\n    standalone: true\n})\nexport class SafeHtmlPipe implements PipeTransform {\n    constructor(private sanitizer: DomSanitizer) { }\n\n    transform(value: string | SafeHtml | null | undefined): SafeHtml {\n        if (!value) return '';\n        if (typeof value === 'object') return value;\n        return this.sanitizer.sanitize(SecurityContext.HTML, value) ?? '';\n    }\n}\n","import { Component, ViewEncapsulation, ElementRef, inject, input, output, signal, computed, effect, ChangeDetectionStrategy, WritableSignal, ViewChildren, QueryList, PLATFORM_ID, DestroyRef } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { NgLaydateService } from './ng-laydate.service';\nimport { DateObject, LaydateConfig, CalendarDay, LaydateI18n, FullLaydateI18n } from './ng-laydate.types';\nimport { SafeHtmlPipe } from './safe-html.pipe';\n\n@Component({\n  selector: 'ng-laydate',\n  standalone: true,\n  imports: [CommonModule, SafeHtmlPipe],\n  templateUrl: './ng-laydate.component.html',\n  styleUrls: ['./ng-laydate.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.layui-laydate]': 'true',\n    '[class.layui-laydate-static]': 'finalConfig().position === \"static\"',\n    '[class.layui-laydate-range]': '!!finalConfig().range',\n    '[class.laydate-has-shortcut]': '!!finalConfig().shortcuts',\n    '[class.layui-laydate-linkage]': 'isLinked()',\n    '[class.laydate-theme-molv]': 'parsedTheme().base === \"molv\"',\n    '[class.laydate-theme-grid]': 'parsedTheme().base === \"grid\"',\n    '[class.laydate-theme-circle]': 'parsedTheme().base === \"circle\"',\n    '[class.laydate-theme-fullpanel]': 'parsedTheme().base === \"fullpanel\"',\n    '[class.laydate-theme-dark]': 'isDarkMode()',\n    '[class.laydate-ym-show]': '!finalConfig().range && (view() === \"year\" || view() === \"month\")',\n    '[class.laydate-time-show]': '!finalConfig().range && view() === \"time\"',\n    '[style.--laydate-theme-color]': 'parsedTheme().color',\n    '[style.--laydate-theme-color-light]': 'themeColorLight()',\n    '[style.--laydate-border-color]': 'themeColorBorder()',\n    'tabindex': '-1',\n    'role': 'application',\n    '[attr.aria-label]': 'i18n().dateTips',\n    '(keydown)': 'handleKeydown($event)'\n  }\n})\nexport class NgLaydateComponent {\n  private service = inject(NgLaydateService);\n  private el = inject(ElementRef);\n  private platformId = inject(PLATFORM_ID);\n  private destroyRef = inject(DestroyRef);\n  @ViewChildren('timeOl_hours') hoursOls!: QueryList<ElementRef<HTMLOListElement>>;\n  @ViewChildren('timeOl_minutes') minutesOls!: QueryList<ElementRef<HTMLOListElement>>;\n  @ViewChildren('timeOl_seconds') secondsOls!: QueryList<ElementRef<HTMLOListElement>>;\n\n  // System Theme Reactive Signal\n  systemDarkMode = signal<boolean>(false);\n\n  config = input<LaydateConfig>({});\n  select = output<string>();\n  clearOutput = output<void>();\n\n\n\n  // State\n  // We initialize with a default, but effect will override based on config\n  currentDate = signal<DateObject>(this.service.systemDate());\n  isCleared = signal<boolean>(false);\n\n  // Range State\n  startDate = signal<DateObject>(this.service.systemDate());\n  endDate = signal<DateObject>(this.service.systemDate());\n  rangeState = signal<'none' | 'selecting'>('none');\n  hoverDate = signal<DateObject | null>(null);\n\n  // Navigation State (for rendering calendars)\n  leftDate = signal<DateObject>(this.service.systemDate());\n  rightDate = signal<DateObject>(this.service.systemDate());\n\n  // Views\n  view = signal<'date' | 'month' | 'year' | 'time'>('date');\n  leftView = signal<'date' | 'month' | 'year' | 'time'>('date');\n  rightView = signal<'date' | 'month' | 'year' | 'time'>('date');\n\n  // Year Lists\n  yearList = signal<number[]>([]);\n  leftYearList = signal<number[]>([]);\n  rightYearList = signal<number[]>([]);\n  private initialized = false;\n  private lastValueProp: any = undefined;\n\n  // Static Data\n  timeList = {\n    hours: Array.from({ length: 24 }, (_, i) => i),\n    minutes: Array.from({ length: 60 }, (_, i) => i),\n    seconds: Array.from({ length: 60 }, (_, i) => i)\n  };\n\n\n  // Computed Data\n  // Note: We use computed for calendar data to automatically react to date/config changes\n  // This replaces the explicit render() call for the most part\n\n  // However, because getCalendarData depends on year/month which are inside objects, \n  // we need to be careful. Signals trigger on reference change (immutability).\n  // We must ensure we propagate updates by creating new DateObjects.\n\n  calendarData = computed(() => {\n    const d = this.currentDate();\n    const c = this.config();\n    return this.service.getCalendarData(d.year, d.month, c);\n  });\n\n  leftCalendar = computed(() => {\n    const d = this.leftDate();\n    const c = this.config();\n    return this.service.getCalendarData(d.year, d.month, c);\n  });\n\n  rightCalendar = computed(() => {\n    const d = this.rightDate();\n    const c = this.config();\n    return this.service.getCalendarData(d.year, d.month, c);\n  });\n\n  finalConfig = computed(() => {\n    const cfg = this.config();\n    return {\n      showBottom: true,\n      btns: ['clear', 'now', 'confirm'],\n      autoConfirm: true,\n      ...cfg\n    };\n  });\n\n  isLinked = computed(() => {\n    const cfg = this.finalConfig();\n    if (!cfg.range || !cfg.rangeLinked) return false;\n    return true;\n  });\n\n  isConfirmDisabled = computed(() => {\n    const cfg = this.finalConfig();\n    if (!cfg.range) return false;\n\n    // Range must be fully selected (not in 'selecting' state)\n    // and start must not be greater than end\n    if (this.rangeState() === 'selecting') return true;\n\n    const start = this.service.getTime(this.startDate());\n    const end = this.service.getTime(this.endDate());\n    return start > end;\n  });\n\n  // Parse theme config: can be 'molv', '#FF5722', or ['grid', '#FF5722']\n  parsedTheme = computed(() => {\n    const theme = this.finalConfig().theme;\n    const builtInThemes = ['default', 'molv', 'grid', 'circle', 'fullpanel', 'dark'];\n\n    if (!theme) {\n      return { base: 'default', color: null };\n    }\n\n    // Array format: ['grid', '#FF5722']\n    if (Array.isArray(theme)) {\n      return {\n        base: builtInThemes.includes(theme[0]) ? theme[0] : 'default',\n        color: theme[1] || null\n      };\n    }\n\n    // String format\n    if (typeof theme === 'string') {\n      // Check if it's a color (starts with #)\n      if (theme.startsWith('#')) {\n        return { base: 'default', color: theme };\n      }\n      // Built-in theme name\n      if (builtInThemes.includes(theme)) {\n        return { base: theme, color: null };\n      }\n      // Treat as custom color\n      return { base: 'default', color: theme };\n    }\n\n    return { base: 'default', color: null };\n  });\n\n  themeColorLight = computed(() => {\n    const color = this.parsedTheme().color;\n    return this.service.hexToRgba(color || '#16b777', 0.1);\n  });\n\n  themeColorBorder = computed(() => {\n    return this.isDarkMode() ? '#444444' : '#e2e2e2';\n  });\n\n  isDarkMode = computed(() => {\n    const cfg = this.finalConfig();\n    const themeBase = this.parsedTheme().base;\n    if (themeBase === 'dark') return true;\n\n    const rawDm = cfg.darkMode;\n    const dm = typeof rawDm === 'function' ? (rawDm as Function)() : rawDm;\n    if (dm === 'system' || dm === 'auto' || cfg.theme === 'system' || cfg.theme === 'auto') {\n      return this.systemDarkMode();\n    }\n    return !!dm;\n  });\n\n  // i18n Dictionary\n  i18n = computed<FullLaydateI18n>(() => {\n    const rawLang = this.finalConfig().lang;\n    const lang = typeof rawLang === 'function' ? (rawLang as Function)() : (rawLang || 'cn');\n\n    let base: FullLaydateI18n;\n    if (typeof lang === 'object' && lang !== null) {\n      const cnDefault = {\n        weeks: ['日', '一', '二', '三', '四', '五', '六'],\n        months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n        time: ['时', '分', '秒'],\n        timeTips: '选择时间',\n        backToDate: '返回日期',\n        hint: '结果预览',\n        startTime: '开始时间',\n        endTime: '结束时间',\n        dateTips: '选择日期',\n        monthTips: '选择月份',\n        yearTips: '选择年份',\n        duration: '时长',\n        tools: { confirm: '确定', clear: '清空', now: '现在' },\n        formatYear: (year: number) => `${year}年`,\n        formatMonth: (month: number) => `${month + 1}月`,\n        invalidRange: '日期可选值设定在 <br> {min} 到 {max}',\n        invalidDate: '此日期不可选',\n        invalidEndEarly: '结束时间不能早于开始时间<br>请重新选择'\n      };\n      const dict = lang as Partial<LaydateI18n>;\n      base = {\n        ...cnDefault,\n        ...dict,\n        tools: { ...cnDefault.tools, ...(dict.tools || {}) }\n      };\n    } else if (lang === 'en') {\n      base = {\n        weeks: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n        months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n        time: ['Hours', 'Minutes', 'Seconds'],\n        timeTips: 'Select Time',\n        backToDate: 'Back to Date',\n        hint: 'Preview',\n        startTime: 'Start Time',\n        endTime: 'End Time',\n        dateTips: 'Select Date',\n        monthTips: 'Select Month',\n        yearTips: 'Select Year',\n        duration: 'Duration',\n        tools: { confirm: 'Confirm', clear: 'Clear', now: 'Now' },\n        formatYear: (year: number) => `${year}`,\n        formatMonth: (month: number) => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][month],\n        invalidRange: 'Date range limit set to <br> {min} - {max}',\n        invalidDate: 'Date is unavailable',\n        invalidEndEarly: 'End time cannot be earlier than start time<br>Please reselect'\n      };\n    } else if (lang === 'tw') {\n      base = {\n        weeks: ['日', '一', '二', '三', '四', '五', '六'],\n        months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n        time: ['時', '分', '秒'],\n        timeTips: '選擇時間',\n        backToDate: '返回日期',\n        hint: '預覽',\n        startTime: '開始時間',\n        endTime: '結束時間',\n        dateTips: '選擇日期',\n        monthTips: '選擇月份',\n        yearTips: '選擇年份',\n        duration: '時長',\n        tools: { confirm: '確認', clear: '清空', now: '現在' },\n        formatYear: (year: number) => `${year}年`,\n        formatMonth: (month: number) => `${month + 1}月`,\n        invalidRange: '日期可選項設定在 <br> {min} 到 {max}',\n        invalidDate: '此日期不可選',\n        invalidEndEarly: '結束時間不能早於開始時間<br>請重新選擇'\n      };\n    } else if (lang === 'ja') {\n      base = {\n        weeks: ['日', '月', '火', '水', '木', '金', '土'],\n        months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n        time: ['時', '分', '秒'],\n        timeTips: '時間を選択',\n        backToDate: '日付に戻る',\n        hint: 'プレビュー',\n        startTime: '開始時間',\n        endTime: '終了時間',\n        dateTips: '日付を選択',\n        monthTips: '月を選択',\n        yearTips: '年を選択',\n        duration: '期間',\n        tools: { confirm: '決定', clear: 'クリア', now: '現在' },\n        formatYear: (year: number) => `${year}年`,\n        formatMonth: (month: number) => `${month + 1}月`,\n        invalidRange: '選択可能な範囲は <br> {min} から {max} です',\n        invalidDate: '選択できない日付です',\n        invalidEndEarly: '終了時間は開始時間より前には設定できません<br>再選択してください'\n      };\n    } else if (lang === 'ko') {\n      base = {\n        weeks: ['일', '월', '화', '수', '목', '금', '토'],\n        months: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n        time: ['시', '분', '초'],\n        timeTips: '시간 선택',\n        backToDate: '날짜로 돌아가기',\n        hint: '미리보기',\n        startTime: '시작 시간',\n        endTime: '종료 시간',\n        dateTips: '날짜 선택',\n        monthTips: '월 선택',\n        yearTips: '연도 선택',\n        duration: '기간',\n        tools: { confirm: '확인', clear: '초기화', now: '현재' },\n        formatYear: (year: number) => `${year}년`,\n        formatMonth: (month: number) => `${month + 1}월`,\n        invalidRange: '선택 가능한 범위를 벗어났습니다 <br> {min} ~ {max}',\n        invalidDate: '선택할 수 없는 날짜입니다',\n        invalidEndEarly: '종료 시간은 시작 시간보다 빠를 수 없습니다<br>다시 선택해 주세요'\n      };\n    } else if (lang === 'es') {\n      base = {\n        weeks: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],\n        months: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\n        time: ['Horas', 'Minutos', 'Segundos'],\n        timeTips: 'Hora',\n        backToDate: 'Fecha',\n        hint: 'Vista previa',\n        startTime: 'Hora inicio',\n        endTime: 'Hora fin',\n        dateTips: 'Seleccionar Fecha',\n        monthTips: 'Seleccionar Mes',\n        yearTips: 'Seleccionar Año',\n        duration: 'Duración',\n        tools: { confirm: 'Confirmar', clear: 'Limpiar', now: 'Hoy' },\n        formatYear: (year: number) => `${year}`,\n        formatMonth: (month: number) => ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'][month],\n        invalidRange: 'Rango de fechas permitido <br> {min} - {max}',\n        invalidDate: 'Fecha no disponible',\n        invalidEndEarly: 'La hora de fin no puede ser anterior a la hora de inicio'\n      };\n    } else if (lang === 'de') {\n      base = {\n        weeks: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n        months: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n        time: ['Stunden', 'Minuten', 'Sekunden'],\n        timeTips: 'Zeit',\n        backToDate: 'Datum',\n        hint: 'Vorschau',\n        startTime: 'Startzeit',\n        endTime: 'Endzeit',\n        dateTips: 'Datum wählen',\n        monthTips: 'Monat wählen',\n        yearTips: 'Jahr wählen',\n        duration: 'Dauer',\n        tools: { confirm: 'Bestätigen', clear: 'Löschen', now: 'Heute' },\n        formatYear: (year: number) => `${year}`,\n        formatMonth: (month: number) => ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'][month],\n        invalidRange: 'Gültiger Datumsbereich <br> {min} - {max}',\n        invalidDate: 'Datum nicht verfügbar',\n        invalidEndEarly: 'Endzeit darf nicht vor der Startzeit liegen'\n      };\n    } else if (lang === 'fr') {\n      base = {\n        weeks: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n        months: ['Janv', 'Févr', 'Mars', 'Avr', 'Mai', 'Juin', 'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'],\n        time: ['Heures', 'Minutes', 'Secondes'],\n        timeTips: 'Heure',\n        backToDate: 'Date',\n        hint: 'Aperçu',\n        startTime: 'Heure de début',\n        endTime: 'Heure de fin',\n        dateTips: 'Choisir la date',\n        monthTips: 'Choisir le mois',\n        yearTips: \"Choisir l'année\",\n        duration: 'Durée',\n        tools: { confirm: 'Valider', clear: 'Effacer', now: 'Auj.' },\n        formatYear: (year: number) => `${year}`,\n        formatMonth: (month: number) => ['Janv', 'Févr', 'Mars', 'Avr', 'Mai', 'Juin', 'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'][month],\n        invalidRange: 'Plage de dates autorisée <br> {min} - {max}',\n        invalidDate: 'Date non disponible',\n        invalidEndEarly: \"L'heure de fin ne peut pas être antérieure à l'heure de début\"\n      };\n    } else {\n      base = {\n        weeks: ['日', '一', '二', '三', '四', '五', '六'],\n        months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n        time: ['时', '分', '秒'],\n        timeTips: '选择时间',\n        backToDate: '返回日期',\n        hint: '结果预览',\n        startTime: '开始时间',\n        endTime: '结束时间',\n        dateTips: '选择日期',\n        monthTips: '选择月份',\n        yearTips: '选择年份',\n        duration: '时长',\n        tools: {\n          confirm: '确定',\n          clear: '清空',\n          now: '现在'\n        },\n        formatYear: (year: number) => `${year}年`,\n        formatMonth: (month: number) => `${month + 1}月`,\n        invalidRange: '日期可选值设定在 <br> {min} 到 {max}',\n        invalidDate: '此日期不可选',\n        invalidEndEarly: '结束时间不能早于开始时间<br>请重新选择'\n      };\n    }\n\n    const customI18n = this.finalConfig().i18n;\n    if (!customI18n) return base;\n\n    return {\n      ...base,\n      ...customI18n,\n      tools: {\n        ...base.tools,\n        ...(customI18n.tools || {})\n      }\n    } as FullLaydateI18n;\n  });\n\n  footerBtns = computed(() => {\n    const cfg = this.finalConfig();\n    let btns = cfg.btns;\n\n    // Default buttons if not provided\n    if (!btns || btns.length === 0) {\n      if (cfg.range) {\n        btns = ['clear', 'confirm'];\n      } else {\n        btns = ['clear', 'now', 'confirm'];\n      }\n    }\n\n    const tools = this.i18n().tools;\n    const labels: Record<string, string> = {\n      clear: tools.clear,\n      now: tools.now,\n      confirm: tools.confirm\n    };\n    return btns.map(b => ({ type: b, label: labels[b] || b }));\n  });\n\n  // Week Headers (Rotated)\n  weekHeaders = computed(() => {\n    const weeks = this.i18n().weeks;\n    const offset = this.finalConfig().weekStart || 0;\n    return [...weeks.slice(offset), ...weeks.slice(0, offset)];\n  });\n\n  // Time Column Visibility\n  timeColumnVisibility = computed(() => {\n    const fmt = this.getDateFormat();\n    return {\n      h: /H/i.test(fmt), // 'H' or 'h'\n      m: /m/.test(fmt),\n      s: /s/.test(fmt)\n    };\n  });\n\n  // Preview Logic\n  showPreview = computed(() => {\n    const cfg = this.finalConfig();\n    // In FullPanel mode, we ALWAYS want preview for datetime to push buttons to the right\n    // and provide visual feedback for the side-by-side selection.\n    if (cfg.theme === 'fullpanel') return true;\n\n    // Default true, force false if standard datetime (to keep standard look)\n    if (cfg.type === 'datetime') return false;\n    return cfg.isPreview !== false;\n  });\n\n  // Check if time item is disabled\n  isDisabledTime(type: 'hours' | 'minutes' | 'seconds', value: number, isRight: boolean = false): boolean {\n    const cfg = this.finalConfig();\n    if (!cfg.disabledTime) return false;\n\n    // Get current date context\n    const dObj = isRight ? this.endDate() : (cfg.range ? this.startDate() : this.currentDate());\n    const date = new Date(dObj.year, dObj.month, dObj.date, dObj.hours, dObj.minutes, dObj.seconds);\n\n    // Call callback\n    const result = cfg.disabledTime(date, 'time');\n    if (!result || typeof result !== 'object') return false;\n\n    // Get disabled limits\n    const limits = result as any;\n    if (type === 'hours' && typeof limits.hours === 'function') {\n      const arr = limits.hours();\n      return Array.isArray(arr) && arr.includes(value);\n    }\n    if (type === 'minutes' && typeof limits.minutes === 'function') {\n      const arr = limits.minutes(dObj.hours);\n      return Array.isArray(arr) && arr.includes(value);\n    }\n    if (type === 'seconds' && typeof limits.seconds === 'function') {\n      const arr = limits.seconds(dObj.hours, dObj.minutes);\n      return Array.isArray(arr) && arr.includes(value);\n    }\n\n    return false;\n  }\n\n  // Hint State\n  hintState = signal<{ content: string; visible: boolean }>({ content: '', visible: false });\n  private hintTimer: any = null;\n\n  constructor() {\n    this.destroyRef.onDestroy(() => {\n      this.clearScrollTimers();\n      if (this.hintTimer) {\n        clearTimeout(this.hintTimer);\n        this.hintTimer = null;\n      }\n    });\n\n    if (isPlatformBrowser(this.platformId) && typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      if (mediaQuery) {\n        this.systemDarkMode.set(mediaQuery.matches);\n        const mediaListener = (e: MediaQueryListEvent) => {\n          this.systemDarkMode.set(e.matches);\n        };\n        mediaQuery.addEventListener?.('change', mediaListener);\n        this.destroyRef.onDestroy(() => {\n          mediaQuery.removeEventListener?.('change', mediaListener);\n        });\n      }\n    }\n\n    // Initialize Logic\n    effect(() => {\n      const cfg = this.config();\n      // Register with service if ID is present\n      if (cfg.id) {\n        this.service.register(cfg.id, this);\n      }\n\n      // Guard against unnecessary resets (especially since config is often an object literal)\n      const valToStr = (v: any) => {\n        if (!v) return '';\n        if (v instanceof Date) return v.getTime().toString();\n        return JSON.stringify(v);\n      };\n\n      const valueChanged = valToStr(cfg.value) !== valToStr(this.lastValueProp);\n      if (this.initialized && !valueChanged) return;\n\n      this.initialized = true;\n      this.lastValueProp = cfg.value;\n\n      // Handle initial value\n      if (cfg.value) {\n        if (cfg.range) {\n          let parts: any[] = [];\n          if (Array.isArray(cfg.value)) {\n            parts = cfg.value;\n          } else if (typeof cfg.value === 'string') {\n            const separator = typeof cfg.range === 'string' ? cfg.range : ' - ';\n            if (cfg.value.includes(separator)) {\n              parts = cfg.value.split(separator);\n            } else if (cfg.value.includes(' - ')) {\n              parts = cfg.value.split(' - ');\n            } else if (cfg.value.includes(' ~ ')) {\n              parts = cfg.value.split(' ~ ');\n            }\n          }\n          if (parts.length === 2) {\n            const start = this.service.parse(typeof parts[0] === 'string' ? parts[0].trim() : parts[0]);\n            const end = this.service.parse(typeof parts[1] === 'string' ? parts[1].trim() : parts[1]);\n            this.startDate.set(start);\n            this.endDate.set(end);\n            this.leftDate.set({ ...start });\n            this.rightDate.set({ ...end });\n            this.isCleared.set(false);\n            if (cfg.rangeLinked) {\n              this.syncRightDateFromLeft();\n            }\n          }\n        } else {\n          const parsed = this.service.parse(cfg.value);\n          this.currentDate.set(parsed);\n          this.leftDate.set({ ...parsed });\n          this.isCleared.set(false);\n        }\n      } else {\n        this.isCleared.set(false);\n        const now = this.service.systemDate();\n\n        // If theme is fullpanel, we want to start at 00:00:00 for time selection\n        // per user request for a \"clean\" starting point.\n        if (cfg.theme === 'fullpanel') {\n          now.hours = 0;\n          now.minutes = 0;\n          now.seconds = 0;\n        }\n\n        const nextMonth = { ...now };\n        nextMonth.month++;\n        if (nextMonth.month > 11) { nextMonth.month = 0; nextMonth.year++; }\n\n        this.currentDate.set(now);\n        this.startDate.set(now);\n        this.leftDate.set({ ...now });\n\n        if (cfg.range) {\n          if (cfg.type === 'year') {\n            const nextYear = { ...now, year: now.year + 1 };\n            this.endDate.set(nextYear);\n            this.rightDate.set(nextYear);\n          } else if (cfg.type === 'time') {\n            const endTime = { ...now, hours: 23, minutes: 59, seconds: 59 };\n            this.endDate.set(endTime);\n            this.rightDate.set(endTime);\n          } else {\n            this.endDate.set(nextMonth);\n            this.rightDate.set(nextMonth);\n          }\n        } else {\n          this.endDate.set(now);\n          this.rightDate.set(nextMonth);\n        }\n      }\n\n      // Handle type\n      if (cfg.type === 'year') {\n        this.view.set('year');\n        this.leftView.set('year');\n        this.rightView.set('year');\n        this.initYearList(this.currentDate().year, 'single');\n        this.initYearList(this.leftDate().year, 'left');\n        if (cfg.range) this.initYearList(this.rightDate().year, 'right');\n      } else if (cfg.type === 'month') {\n        this.view.set('month');\n        this.leftView.set('month');\n        this.rightView.set('month');\n      } else if (cfg.type === 'time') {\n        this.view.set('time');\n        this.leftView.set('time');\n        this.rightView.set('time');\n        if (cfg.range) {\n          this.leftDate.set({ ...this.startDate() });\n          this.rightDate.set({ ...this.endDate() });\n        }\n      }\n\n      // Ready callback\n      if (cfg.ready) {\n        cfg.ready(this.currentDate());\n      }\n    });\n\n    // Scroll Effect: Whenever time view becomes active OR values change, scroll to selected values\n    effect((onCleanup) => {\n      const cfg = this.finalConfig();\n      const isTimeView = this.view() === 'time' || this.leftView() === 'time' || this.rightView() === 'time' || cfg.theme === 'fullpanel';\n      const cur = this.currentDate();\n      const st = this.startDate();\n      const ed = this.endDate();\n\n      if (isTimeView) {\n        this.autoScrollTime();\n      }\n\n      onCleanup(() => {\n        this.clearScrollTimers();\n      });\n    });\n\n    // Cleanup\n    effect((onCleanup) => {\n      onCleanup(() => {\n        const id = this.config().id;\n        if (id) {\n          this.service.unregister(id);\n        }\n      });\n    });\n  }\n\n  showHint(\n    content: string,\n    ms: number = 3000,\n    type: 'invalidRange' | 'invalidDate' | 'invalidEndEarly' | 'custom' = 'custom',\n    meta: { min?: string; max?: string; date?: DateObject } = {}\n  ) {\n    const cfg = this.finalConfig();\n    let finalContent = content;\n\n    if (cfg.hintFormatter) {\n      const formatted = cfg.hintFormatter(type, {\n        ...meta,\n        defaultText: content\n      });\n      if (formatted === false) {\n        return; // Suppress hint\n      }\n      if (typeof formatted === 'string') {\n        finalContent = formatted;\n      }\n    }\n\n    this.hintState.set({ content: finalContent, visible: true });\n    if (this.hintTimer) clearTimeout(this.hintTimer);\n    if (ms > 0) {\n      this.hintTimer = setTimeout(() => {\n        this.hintState.set({ content: '', visible: false });\n      }, ms);\n    }\n  }\n\n  // Helper to generate year list\n  generateYearList(centerYear: number): number[] {\n    const startYear = centerYear - 7;\n    return Array.from({ length: 15 }, (_, i) => startYear + i);\n  }\n\n  initYearList(centerYear: number, panel: 'left' | 'right' | 'single' = 'single') {\n    const list = this.generateYearList(centerYear);\n    if (panel === 'left') this.leftYearList.set(list);\n    else if (panel === 'right') this.rightYearList.set(list);\n    else this.yearList.set(list);\n  }\n\n  private clampDay(d: DateObject): DateObject {\n    const maxDay = this.service.totalDay(d.year, d.month);\n    if (d.date > maxDay) {\n      d.date = maxDay;\n    }\n    return d;\n  }\n\n  // Navigation Logic\n  prevYear(isRight: boolean = false) {\n    const cfg = this.finalConfig();\n    const isLinked = this.isLinked();\n    const currView = isRight ? this.rightView() : (cfg.range ? this.leftView() : this.view());\n    const useLeft = (isLinked || !isRight);\n\n    if (currView === 'year') {\n      const list = useLeft ? this.leftYearList() : this.rightYearList();\n      const first = list[0] - 15;\n      const center = first + 7;\n      this.initYearList(center, useLeft ? 'left' : 'right');\n\n      // Update base date to keep header in sync\n      const targetSignal = useLeft ? this.leftDate : this.rightDate;\n      targetSignal.set({ ...targetSignal(), year: center });\n    } else {\n      const targetSignal = useLeft ? (cfg.range ? this.leftDate : this.currentDate) : this.rightDate;\n      const d = { ...targetSignal() };\n      d.year--;\n      this.clampDay(d);\n      targetSignal.set(d);\n      if (!cfg.range) this.leftDate.set(d);\n    }\n\n    if (isLinked) {\n      this.syncRightDateFromLeft();\n    }\n  }\n\n  nextYear(isRight: boolean = false) {\n    const cfg = this.finalConfig();\n    const isLinked = this.isLinked();\n    const currView = isRight ? this.rightView() : (cfg.range ? this.leftView() : this.view());\n    const useLeft = (isLinked || !isRight);\n\n    if (currView === 'year') {\n      const list = useLeft ? this.leftYearList() : this.rightYearList();\n      const last = list[list.length - 1] + 15;\n      const center = last - 7;\n      this.initYearList(center, useLeft ? 'left' : 'right');\n\n      // Update base date to keep header in sync\n      const targetSignal = useLeft ? this.leftDate : this.rightDate;\n      targetSignal.set({ ...targetSignal(), year: center });\n    } else {\n      const targetSignal = useLeft ? (cfg.range ? this.leftDate : this.currentDate) : this.rightDate;\n      const d = { ...targetSignal() };\n      d.year++;\n      this.clampDay(d);\n      targetSignal.set(d);\n      if (!cfg.range) this.leftDate.set(d);\n    }\n\n    if (isLinked) {\n      this.syncRightDateFromLeft();\n    }\n  }\n\n  prevMonth(isRight: boolean = false) {\n    const cfg = this.finalConfig();\n    const isLinked = this.isLinked();\n    const targetSignal = (isLinked || !isRight) ? (cfg.range ? this.leftDate : this.currentDate) : this.rightDate;\n\n    const d = { ...targetSignal() };\n    d.month--;\n    if (d.month < 0) { d.month = 11; d.year--; }\n    this.clampDay(d);\n    targetSignal.set(d);\n    if (!cfg.range) this.leftDate.set(d);\n\n    if (isLinked) {\n      this.syncRightDateFromLeft();\n    }\n  }\n\n  nextMonth(isRight: boolean = false) {\n    const cfg = this.finalConfig();\n    const isLinked = this.isLinked();\n    const targetSignal = (isLinked || !isRight) ? (cfg.range ? this.leftDate : this.currentDate) : this.rightDate;\n\n    const d = { ...targetSignal() };\n    d.month++;\n    if (d.month > 11) { d.month = 0; d.year++; }\n    this.clampDay(d);\n    targetSignal.set(d);\n    if (!cfg.range) this.leftDate.set(d);\n\n    if (isLinked) {\n      this.syncRightDateFromLeft();\n    }\n  }\n\n  private syncRightDateFromLeft() {\n    const cfg = this.finalConfig();\n    const left = this.leftDate();\n    const right = { ...left };\n\n    if (cfg.type === 'year') {\n      right.year += 15;\n    } else if (cfg.type === 'month') {\n      right.year += 1;\n    } else {\n      right.month++;\n      if (right.month > 11) {\n        right.month = 0;\n        right.year++;\n      }\n    }\n    this.clampDay(right);\n\n    this.rightDate.set(right);\n\n    if (cfg.type === 'year') {\n      this.initYearList(right.year, 'right');\n    }\n  }\n\n  switchView(view: 'date' | 'month' | 'year' | 'time', isRight: boolean = false) {\n    const cfg = this.config();\n    if (view === 'year') {\n      const date = isRight ? this.rightDate() : (cfg.range ? this.leftDate() : this.currentDate());\n      this.initYearList(date.year, isRight ? 'right' : (cfg.range ? 'left' : 'single'));\n    }\n\n    if (cfg.range) {\n      if (isRight) this.rightView.set(view);\n      else this.leftView.set(view);\n    } else {\n      this.view.set(view);\n      this.leftView.set(view); // sync\n    }\n  }\n\n  getYearRangeLabel(isRight: boolean) {\n    const list = isRight ? this.rightYearList() : (this.finalConfig().range ? this.leftYearList() : this.yearList());\n    if (list.length === 0) return '';\n    const start = this.i18n().formatYear(list[0]);\n    const end = this.i18n().formatYear(list[list.length - 1]);\n    return `${start} - ${end}`;\n  }\n\n  selectDay(day: CalendarDay, isRight: boolean = false) {\n    if (day.disabled) {\n      this.showHint(this.i18n().invalidDate, 3000, 'invalidDate', { date: { year: day.year, month: day.month, date: day.day, hours: 0, minutes: 0, seconds: 0 } });\n      return;\n    }\n\n    if (day.type === 'prev') {\n      this.prevMonth(isRight);\n      return;\n    }\n    if (day.type === 'next') {\n      this.nextMonth(isRight);\n      return;\n    }\n\n    const cfg = this.config();\n    this.isCleared.set(false);\n\n    if (cfg.range) {\n      const dayObj = { year: day.year, month: day.month, date: day.day, hours: 0, minutes: 0, seconds: 0 };\n      this.handleRangeSelection(dayObj);\n    }\n    else {\n      const d = { ...this.currentDate() };\n      d.date = day.day;\n      this.currentDate.set(d);\n\n      const formatStr = this.getDateFormat();\n      const result = this.service.format(d, formatStr);\n\n      // Always trigger change callback on selection\n      if (cfg.change) cfg.change(result, d);\n\n      // Auto Confirm Logic\n      if (cfg.type !== 'datetime' && cfg.type !== 'time') {\n        if (this.finalConfig().autoConfirm !== false) {\n          this.select.emit(result); // Triggers close\n          if (cfg.done) cfg.done(result, d);\n        }\n      } else {\n        // Datetime/Time: switch view or just update signal (handled above)\n        if (cfg.type === 'datetime') this.view.set('time');\n      }\n    }\n  }\n\n  confirmRange() {\n    const cfg = this.config();\n    const separator = typeof cfg.range === 'string' ? cfg.range : ' - ';\n    const formatStr = this.getDateFormat();\n    const startStr = this.service.format(this.startDate(), formatStr);\n    const endStr = this.service.format(this.endDate(), formatStr);\n    const result = `${startStr}${separator}${endStr}`;\n    this.select.emit(result);\n    if (cfg.change) cfg.change(result, this.startDate(), this.endDate());\n    if (cfg.done) cfg.done(result, this.startDate(), this.endDate());\n  }\n\n  getPreview() {\n    if (this.isCleared()) return '';\n    const d = this.currentDate();\n    const cfg = this.finalConfig();\n    const formatStr = this.getDateFormat();\n    if (cfg.range) {\n      const startStr = this.service.format(this.startDate(), formatStr);\n      const endStr = this.service.format(this.endDate(), formatStr);\n      const separator = typeof cfg.range === 'string' ? cfg.range : ' - ';\n      return `${startStr}${separator}${endStr}`;\n    }\n    return this.service.format(d, formatStr);\n  }\n\n\n  digit(num: number) { return this.service.digit(num); }\n\n  getRows(data: any[]) {\n    const rows = [];\n    for (let i = 0; i < data.length; i += 7) {\n      rows.push(data.slice(i, i + 7));\n    }\n    return rows;\n  }\n\n  isSameDay(d1: DateObject, year: number, month: number, day: number) {\n    return d1.year === year && d1.month === month && d1.date === day;\n  }\n\n  isToday(year: number, month: number, day: number) {\n    const sys = this.service.systemDate();\n    return sys.year === year && sys.month === month && sys.date === day;\n  }\n\n  isThisDay(year: number, month: number, day: number, isRight: boolean = false) {\n    if (this.isCleared()) return false;\n    const cfg = this.finalConfig();\n    if (cfg.range) {\n      if (cfg.rangeLinked) {\n        return this.isSameDay(this.startDate(), year, month, day) ||\n          (this.rangeState() === 'none' && this.isSameDay(this.endDate(), year, month, day));\n      } else {\n        // Independent: Left only highlights start, Right only highlights end\n        return isRight ? this.isSameDay(this.endDate(), year, month, day) : this.isSameDay(this.startDate(), year, month, day);\n      }\n    }\n    const cur = this.currentDate();\n    return cur.year === year && cur.month === month && cur.date === day;\n  }\n\n  isThisYear(y: number, isRight: boolean = false) {\n    if (this.isCleared()) return false;\n    const cfg = this.finalConfig();\n    const start = this.startDate();\n    const end = this.endDate();\n\n    if (cfg.range && cfg.type === 'year') {\n      if (cfg.rangeLinked) {\n        return start.year === y || (this.rangeState() === 'none' && end.year === y);\n      } else {\n        return isRight ? end.year === y : start.year === y;\n      }\n    }\n\n    // In single year picker, or when navigating years in date picker\n    const date = isRight ? this.rightDate() : (cfg.range ? this.leftDate() : this.currentDate());\n    return date.year === y;\n  }\n\n  isThisMonth(m: number, y: number, isRight: boolean = false) {\n    if (this.isCleared()) return false;\n    const cfg = this.finalConfig();\n    if (cfg.range && cfg.type === 'month') {\n      if (cfg.rangeLinked) {\n        return (this.startDate().year === y && this.startDate().month === m) ||\n          (this.rangeState() === 'none' && this.endDate().year === y && this.endDate().month === m);\n      } else {\n        const target = isRight ? this.endDate() : this.startDate();\n        return target.year === y && target.month === m;\n      }\n    }\n    const date = isRight ? this.rightDate() : (cfg.range ? this.leftDate() : this.currentDate());\n    return date.year === y && date.month === m;\n  }\n\n  hoverValue(val: Partial<DateObject>) {\n    const cfg = this.finalConfig();\n    if (cfg.range && this.rangeState() === 'selecting') {\n      this.hoverDate.set({\n        year: val.year ?? 0,\n        month: val.month ?? 0,\n        date: val.date ?? 1,\n        hours: val.hours ?? 0,\n        minutes: val.minutes ?? 0,\n        seconds: val.seconds ?? 0\n      });\n    }\n  }\n\n  isInRange(year: number, month: number, day: number, hours: number = 0, minutes: number = 0, seconds: number = 0) {\n    const cfg = this.finalConfig();\n    if (!cfg.range) return false;\n    if (this.isCleared() && this.rangeState() !== 'selecting') return false;\n\n    // Optimize: Use integer comparison instead of Date objects\n    // This reduces GC pressure significantly during hover interaction\n    const getVal = (y: number, m: number, d: number) => {\n      if (cfg.type === 'year') return y;\n      if (cfg.type === 'month') return y * 100 + m;\n      return y * 10000 + m * 100 + d;\n    };\n\n    const current = getVal(year, month, day);\n    const startObj = this.startDate();\n    const start = getVal(startObj.year, startObj.month, startObj.date);\n\n    if (this.rangeState() === 'selecting') {\n      const hover = this.hoverDate();\n      if (!hover) return current === start;\n      const hoverVal = getVal(hover.year, hover.month, hover.date);\n      const min = Math.min(start, hoverVal);\n      const max = Math.max(start, hoverVal);\n      return current >= min && current <= max;\n    }\n\n    const endObj = this.endDate();\n    const end = getVal(endObj.year, endObj.month, endObj.date);\n    return current >= start && current <= end;\n  }\n\n  selectYear(y: number, isRight: boolean = false) {\n    this.isCleared.set(false);\n    const cfg = this.finalConfig();\n    if (cfg.range && cfg.type === 'year') {\n      const dayObj = { year: y, month: 0, date: 1 };\n      this.handleRangeSelection(dayObj);\n      return;\n    }\n\n    if (isRight) {\n      const d = { ...this.rightDate() };\n      d.year = y;\n      this.clampDay(d);\n      this.rightDate.set(d);\n      this.rightView.set(cfg.type === 'year' ? 'year' : 'month');\n    } else {\n      const d = { ...this.currentDate() };\n      d.year = y;\n      this.clampDay(d);\n      this.currentDate.set(d);\n\n      if (cfg.range) {\n        const ld = { ...this.leftDate() };\n        ld.year = y;\n        this.clampDay(ld);\n        this.leftDate.set(ld);\n      }\n\n      if (cfg.type === 'year') {\n        if (this.finalConfig().autoConfirm !== false) {\n          this.confirm();\n        }\n      } else {\n        if (cfg.range) this.leftView.set('month');\n        else this.view.set('month');\n      }\n    }\n  }\n\n  selectMonth(m: number, isRight: boolean = false) {\n    this.isCleared.set(false);\n    const cfg = this.finalConfig();\n    if (cfg.range && cfg.type === 'month') {\n      const baseDate = isRight ? this.rightDate() : this.leftDate();\n      const dayObj = { year: baseDate.year, month: m, date: 1 };\n      this.handleRangeSelection(dayObj);\n      return;\n    }\n\n    if (isRight) {\n      const d = { ...this.rightDate() };\n      d.month = m;\n      this.clampDay(d);\n      this.rightDate.set(d);\n      this.rightView.set(cfg.type === 'month' ? 'month' : 'date');\n    } else {\n      const d = { ...this.currentDate() };\n      d.month = m;\n      this.clampDay(d);\n      this.currentDate.set(d);\n\n      if (cfg.range) {\n        const ld = { ...this.leftDate() };\n        ld.month = m;\n        this.clampDay(ld);\n        this.leftDate.set(ld);\n      }\n\n      if (cfg.type === 'month') {\n        if (this.finalConfig().autoConfirm !== false) {\n          this.confirm();\n        }\n      } else {\n        if (cfg.range) this.leftView.set('date');\n        else this.view.set('date');\n      }\n    }\n  }\n\n  private handleRangeSelection(day: Partial<DateObject>) {\n    this.isCleared.set(false);\n    const cfg = this.finalConfig();\n    if (this.rangeState() === 'none') {\n      // Start picking\n      this.startDate.set({ ...this.startDate(), ...day });\n      this.rangeState.set('selecting');\n    } else {\n      // End picking\n      let start = this.startDate();\n      let end = { ...this.endDate(), ...day };\n\n      // Auto-swap if start > end\n      const startTime = this.service.getTime(start);\n      const endTime = this.service.getTime(end);\n      if (startTime > endTime) {\n        [start, end] = [end, start];\n      }\n\n      this.startDate.set(start);\n      this.endDate.set(end);\n      this.rangeState.set('none');\n      this.hoverDate.set(null);\n    }\n  }\n\n  selectTime(type: 'hours' | 'minutes' | 'seconds', val: number, isRight: boolean = false) {\n    if (this.isDisabledTime(type, val, isRight)) {\n      this.showHint(this.i18n().invalidDate, 3000, 'invalidDate');\n      return;\n    }\n    this.isCleared.set(false);\n    const cfg = this.finalConfig();\n    if (cfg.range) {\n      if (isRight) {\n        const d = { ...this.endDate() };\n        d[type] = val;\n        this.endDate.set(d);\n        this.rightDate.set({ ...d }); // Sync HMS for list checkmark\n      } else {\n        const d = { ...this.startDate() };\n        d[type] = val;\n        this.startDate.set(d);\n        this.leftDate.set({ ...d }); // Sync HMS for list checkmark\n      }\n    } else {\n      const d = { ...this.currentDate() };\n      d[type] = val;\n      this.currentDate.set(d);\n    }\n  }\n\n  toggleTime() {\n    const cfg = this.finalConfig();\n    if (cfg.range) {\n      const l = this.leftView() === 'time' ? 'date' : 'time';\n      const r = this.rightView() === 'time' ? 'date' : 'time';\n      this.leftView.set(l);\n      this.rightView.set(r);\n\n      // Sync selection to views when entering time mode\n      if (l === 'time') this.leftDate.set({ ...this.startDate() });\n      if (r === 'time') this.rightDate.set({ ...this.endDate() });\n    } else {\n      const v = this.view() === 'time' ? 'date' : 'time';\n      this.view.set(v);\n      if (v === 'time') this.leftDate.set({ ...this.currentDate() });\n    }\n  }\n\n  clear() {\n    this.isCleared.set(true);\n    this.rangeState.set('none');\n    this.hoverDate.set(null);\n\n    const now = this.service.systemDate();\n    const cfg = this.finalConfig();\n\n    if (cfg.type === 'time' || cfg.type === 'datetime' || cfg.theme === 'fullpanel') {\n      now.hours = 0;\n      now.minutes = 0;\n      now.seconds = 0;\n    }\n\n    const nextMonth = { ...now };\n    nextMonth.month++;\n    if (nextMonth.month > 11) { nextMonth.month = 0; nextMonth.year++; }\n\n    this.currentDate.set({ ...now });\n    this.startDate.set({ ...now });\n    this.leftDate.set({ ...now });\n\n    if (cfg.range) {\n      if (cfg.type === 'year') {\n        const nextYear = { ...now, year: now.year + 1 };\n        this.endDate.set(nextYear);\n        this.rightDate.set(nextYear);\n      } else if (cfg.type === 'time') {\n        const endTime = { ...now, hours: 23, minutes: 59, seconds: 59 };\n        this.endDate.set(endTime);\n        this.rightDate.set(endTime);\n      } else {\n        this.endDate.set(nextMonth);\n        this.rightDate.set(nextMonth);\n      }\n    } else {\n      this.endDate.set({ ...now });\n      this.rightDate.set(nextMonth);\n    }\n\n    if (cfg.type === 'year') {\n      this.initYearList(now.year, 'single');\n      this.initYearList(now.year, 'left');\n      if (cfg.range) this.initYearList(nextMonth.year, 'right');\n    }\n\n    this.autoScrollTime();\n    this.clearOutput.emit();\n\n    if (cfg.change) cfg.change('', {} as any, {} as any);\n    if (cfg.done) cfg.done('', {} as any, {} as any);\n    if (cfg.onClear) cfg.onClear('', {} as any, {} as any);\n  }\n\n  now() {\n    this.isCleared.set(false);\n    const now = this.service.systemDate();\n    const cfg = this.finalConfig();\n    if (cfg.range) {\n      this.startDate.set({ ...now });\n      this.endDate.set({ ...now });\n\n      // Update view models to ensure lists reflect 'now'\n      this.leftDate.set({ ...now });\n      this.rightDate.set({ ...now });\n\n      this.autoScrollTime(); // Ensure scroll to now\n      this.confirmRange();\n    } else {\n      this.currentDate.set(now);\n      this.autoScrollTime(); // Ensure scroll to now\n      this.confirm();\n    }\n  }\n\n  handleShortcut(item: any) {\n    this.isCleared.set(false);\n    let value = item.value;\n    const cfg = this.finalConfig();\n\n    // 1. Resolve function\n    if (typeof value === 'function') {\n      value = value();\n    }\n\n    // Helper to resolve common tokens\n    const resolve = (v: any) => {\n      if (v instanceof Date) return v;\n      if (typeof v === 'string') {\n        const now = new Date();\n        if (v === 'now' || v === 'today') return now;\n        if (v === 'yesterday') return new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);\n        if (v === 'tomorrow') return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n        if (v === 'last_month') return new Date(now.getFullYear(), now.getMonth() - 1, 1);\n        if (v === 'next_month') return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n        return v; // Return string as-is for parsing\n      }\n      return v;\n    };\n\n    // 2. Handle Range (Array or Range String)\n    let valArr: any[] = [];\n    if (Array.isArray(value)) {\n      valArr = value;\n    } else if (typeof value === 'string' && cfg.range) {\n      const separator = typeof cfg.range === 'string' ? cfg.range : ' - ';\n      if (value.includes(separator)) {\n        valArr = value.split(separator);\n      } else if (value.includes(' - ')) {\n        valArr = value.split(' - ');\n      } else if (value.includes(' ~ ')) {\n        valArr = value.split(' ~ ');\n      } else {\n        // Legacy string helpers for range or single string range\n        const now = new Date();\n        if (value === 'last_7_days') valArr = [new Date(now.getTime() - 7 * 24 * 3600 * 1000), now];\n        else if (value === 'last_30_days') valArr = [new Date(now.getTime() - 30 * 24 * 3600 * 1000), now];\n        else if (value === 'last_90_days') valArr = [new Date(now.getTime() - 90 * 24 * 3600 * 1000), now];\n        else if (value === 'last_year_now') valArr = [new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()), now];\n        else if (value === 'next_year_today') valArr = [now, new Date(now.getFullYear() + 1, now.getMonth(), now.getDate())];\n      }\n    }\n\n    // 3. Apply\n    if (cfg.range && valArr.length === 2) {\n      let start = this.service.parse(resolve(valArr[0]));\n      let end = this.service.parse(resolve(valArr[1]));\n\n      // Validate swap\n      if (this.service.getTime(start) > this.service.getTime(end)) {\n        [start, end] = [end, start];\n      }\n\n      this.startDate.set(start);\n      this.endDate.set(end);\n      this.leftDate.set({ ...start });\n      this.rightDate.set({ ...end });\n\n      if (cfg.type === 'year') {\n        this.initYearList(start.year, 'left');\n        this.initYearList(end.year, 'right');\n      }\n\n      if (cfg.rangeLinked) {\n        this.syncRightDateFromLeft();\n      }\n\n      this.autoScrollTime();\n      this.confirmRange();\n    } else if (cfg.range) {\n      // Single Value in Range Mode -> set both start & end to the same parsed date\n      let singleVal = value;\n      if (Array.isArray(singleVal)) {\n        singleVal = singleVal.length > 0 ? singleVal[0] : '';\n      }\n      const resolved = resolve(singleVal);\n      const parsed = this.service.parse(resolved);\n\n      this.startDate.set({ ...parsed });\n      this.endDate.set({ ...parsed });\n      this.leftDate.set({ ...parsed });\n      this.rightDate.set({ ...parsed });\n\n      if (cfg.type === 'year') {\n        this.initYearList(parsed.year, 'left');\n        this.initYearList(parsed.year, 'right');\n      }\n\n      if (cfg.rangeLinked) {\n        this.syncRightDateFromLeft();\n      }\n\n      this.autoScrollTime();\n      this.confirmRange();\n    } else {\n      // Single Value or Fallback\n      let singleVal = value;\n      if (Array.isArray(singleVal)) {\n        singleVal = singleVal.length > 0 ? singleVal[0] : '';\n      }\n      const resolved = resolve(singleVal);\n      const parsed = this.service.parse(resolved);\n      this.currentDate.set(parsed);\n      this.leftDate.set({ ...parsed });\n\n      if (cfg.type === 'year') {\n        this.initYearList(parsed.year, 'single');\n        this.initYearList(parsed.year, 'left');\n      }\n\n      this.autoScrollTime();\n      this.confirm();\n    }\n  }\n\n  checkValidity(date: DateObject): boolean {\n    const d = this.service.getTime(date);\n    const cfg = this.finalConfig();\n    const min = cfg.min ? this.service.getTime(this.service.parse(cfg.min)) : -Infinity;\n    const max = cfg.max ? this.service.getTime(this.service.parse(cfg.max)) : Infinity;\n\n    if (d < min || d > max) {\n      let msg = this.i18n().invalidRange;\n      const minStr = cfg.min?.toString() || '';\n      const maxStr = cfg.max?.toString() || '';\n      const escape = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n      if (cfg.min) msg = msg.replace('{min}', escape(minStr));\n      if (cfg.max) msg = msg.replace('{max}', escape(maxStr));\n      this.showHint(msg, 3000, 'invalidRange', { min: minStr, max: maxStr, date });\n      return false;\n    }\n    return true;\n  }\n\n  handleBtnClick(type: string) {\n    if (type === 'confirm' && this.isConfirmDisabled()) {\n      this.showHint(this.i18n().invalidEndEarly, 3000, 'invalidEndEarly');\n      return;\n    }\n    if (type === 'clear') this.clear();\n    if (type === 'now') this.now();\n    if (type === 'confirm') {\n      const cfg = this.finalConfig();\n      if (cfg.range) {\n        if (!this.checkValidity(this.startDate()) || !this.checkValidity(this.endDate())) return;\n        this.confirmRange();\n      } else {\n        if (!this.checkValidity(this.currentDate())) return;\n        this.confirm();\n      }\n      if (cfg.onConfirm) cfg.onConfirm(this.service.format(this.currentDate()), this.currentDate());\n    }\n  }\n\n  confirm() {\n    const cfg = this.config();\n    const formatStr = this.getDateFormat();\n    const result = this.service.format(this.currentDate(), formatStr);\n    this.select.emit(result);\n    if (cfg.change) cfg.change(result, this.currentDate());\n    if (cfg.done) cfg.done(result, this.currentDate());\n  }\n\n  // Helper to determine format\n  private getDateFormat(): string {\n    const cfg = this.config();\n    if (cfg.format) return cfg.format;\n    if (cfg.type === 'year') return 'yyyy';\n    if (cfg.type === 'month') return 'yyyy-MM';\n    if (cfg.type === 'time') return 'HH:mm:ss';\n    if (cfg.type === 'datetime') return 'yyyy-MM-dd HH:mm:ss';\n    return 'yyyy-MM-dd';\n  }\n\n  private scrollTimer: any = null;\n  private scrollRaf: any = null;\n\n  private clearScrollTimers() {\n    if (this.scrollTimer) {\n      clearTimeout(this.scrollTimer);\n      this.scrollTimer = null;\n    }\n    if (this.scrollRaf) {\n      cancelAnimationFrame(this.scrollRaf);\n      this.scrollRaf = null;\n    }\n  }\n\n  private autoScrollTime() {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    this.clearScrollTimers();\n\n    const cfg = this.finalConfig();\n    const scroll = (ols: QueryList<ElementRef<HTMLOListElement>>, val: number | ((idx: number) => number)) => {\n      if (!ols) return;\n      ols.forEach((ol, i) => {\n        if (ol && ol.nativeElement) {\n          const v = typeof val === 'function' ? val(i) : val;\n          ol.nativeElement.scrollTop = Math.max(0, (v - 2) * 33);\n        }\n      });\n    };\n\n    // Use task macro-queue (setTimeout 0) + micro-frame (rAF) to wait for Angular @if view DOM mounting\n    this.scrollTimer = setTimeout(() => {\n      this.scrollRaf = requestAnimationFrame(() => {\n        if (cfg.range) {\n          scroll(this.hoursOls, (i) => i === 0 ? this.startDate().hours : this.endDate().hours);\n          scroll(this.minutesOls, (i) => i === 0 ? this.startDate().minutes : this.endDate().minutes);\n          scroll(this.secondsOls, (i) => i === 0 ? this.startDate().seconds : this.endDate().seconds);\n        } else {\n          const cur = this.currentDate();\n          scroll(this.hoursOls, cur.hours);\n          scroll(this.minutesOls, cur.minutes);\n          scroll(this.secondsOls, cur.seconds);\n        }\n      });\n    }, 0);\n  }\n\n  handleKeydown(e: KeyboardEvent) {\n    const key = e.key;\n    const cfg = this.finalConfig();\n    const isRange = !!cfg.range;\n    const currView = isRange ? this.leftView() : this.view();\n\n    if (key === 'Escape') {\n      if (cfg.position !== 'static') {\n        e.preventDefault();\n        e.stopPropagation();\n        this.clearOutput.emit();\n      }\n      return;\n    }\n\n    if (currView === 'date') {\n      const cur = isRange ? this.startDate() : this.currentDate();\n      let delta = 0;\n\n      if (key === 'ArrowLeft') delta = -1;\n      else if (key === 'ArrowRight') delta = 1;\n      else if (key === 'ArrowUp') delta = -7;\n      else if (key === 'ArrowDown') delta = 7;\n      else if (key === 'PageUp') {\n        e.preventDefault();\n        if (e.shiftKey) this.prevYear();\n        else this.prevMonth();\n        return;\n      } else if (key === 'PageDown') {\n        e.preventDefault();\n        if (e.shiftKey) this.nextYear();\n        else this.nextMonth();\n        return;\n      } else if (key === 'Home') {\n        e.preventDefault();\n        const d: DateObject = { ...cur, date: 1 };\n        this.currentDate.set(d);\n        this.leftDate.set({ ...d });\n        if (isRange) this.startDate.set({ ...d });\n        return;\n      } else if (key === 'End') {\n        e.preventDefault();\n        const max = this.service.totalDay(cur.year, cur.month);\n        const d: DateObject = { ...cur, date: max };\n        this.currentDate.set(d);\n        this.leftDate.set({ ...d });\n        if (isRange) this.startDate.set({ ...d });\n        return;\n      } else if (key === 'Enter') {\n        e.preventDefault();\n        if (isRange) this.confirmRange();\n        else this.confirm();\n        return;\n      }\n\n      if (delta !== 0) {\n        e.preventDefault();\n        const dt = new Date(cur.year, cur.month, cur.date + delta, cur.hours, cur.minutes, cur.seconds);\n        const newObj: DateObject = {\n          year: dt.getFullYear(),\n          month: dt.getMonth(),\n          date: dt.getDate(),\n          hours: cur.hours,\n          minutes: cur.minutes,\n          seconds: cur.seconds\n        };\n        this.currentDate.set(newObj);\n        this.leftDate.set({ ...newObj });\n        if (isRange) this.startDate.set({ ...newObj });\n      }\n    } else if (currView === 'year') {\n      const cur = isRange ? this.leftDate() : this.currentDate();\n      let delta = 0;\n      if (key === 'ArrowLeft') delta = -1;\n      else if (key === 'ArrowRight') delta = 1;\n      else if (key === 'ArrowUp') delta = -3;\n      else if (key === 'ArrowDown') delta = 3;\n      else if (key === 'Enter') {\n        e.preventDefault();\n        this.selectYear(cur.year);\n        return;\n      }\n\n      if (delta !== 0) {\n        e.preventDefault();\n        const newYear = cur.year + delta;\n        const d: DateObject = { ...cur, year: newYear };\n        this.clampDay(d);\n        this.currentDate.set(d);\n        this.leftDate.set({ ...d });\n        this.initYearList(newYear, 'single');\n        this.initYearList(newYear, 'left');\n      }\n    } else if (currView === 'month') {\n      const cur = isRange ? this.leftDate() : this.currentDate();\n      let delta = 0;\n      if (key === 'ArrowLeft') delta = -1;\n      else if (key === 'ArrowRight') delta = 1;\n      else if (key === 'ArrowUp') delta = -3;\n      else if (key === 'ArrowDown') delta = 3;\n      else if (key === 'Enter') {\n        e.preventDefault();\n        this.selectMonth(cur.month);\n        return;\n      }\n\n      if (delta !== 0) {\n        e.preventDefault();\n        let newMonth = cur.month + delta;\n        let newYear = cur.year;\n        if (newMonth < 0) {\n          newMonth = (newMonth % 12 + 12) % 12;\n          newYear--;\n        } else if (newMonth > 11) {\n          newMonth = newMonth % 12;\n          newYear++;\n        }\n        const d: DateObject = { ...cur, year: newYear, month: newMonth };\n        this.clampDay(d);\n        this.currentDate.set(d);\n        this.leftDate.set({ ...d });\n      }\n    }\n  }\n}\n","@if (finalConfig().shortcuts) {\n<ul class=\"layui-laydate-shortcut\" role=\"toolbar\" [attr.aria-label]=\"i18n().hint\">\n    @for (item of finalConfig().shortcuts; track $index) {\n    <li role=\"button\" tabindex=\"0\" (click)=\"handleShortcut(item)\" (keydown.enter)=\"handleShortcut(item)\"\n        (keydown.space)=\"handleShortcut(item)\" [innerHTML]=\"item.text | safeHtml\"></li>\n    }\n</ul>\n}\n\n<div class=\"layui-laydate-content-wrapper\">\n    <!-- Range Mode: Two Panels -->\n    @if (finalConfig().range) {\n    <div class=\"layui-laydate-main laydate-main-list-0\"\n        [class.laydate-ym-show]=\"leftView() === 'year' || leftView() === 'month'\"\n        [class.laydate-time-show]=\"leftView() === 'time'\">\n        <ng-container\n            *ngTemplateOutlet=\"calendarPanel; context: { data: leftCalendar(), date: leftDate(), isRight: false, currView: leftView(), yearList: leftYearList() }\"></ng-container>\n    </div>\n    <div class=\"layui-laydate-main laydate-main-list-1\"\n        [class.laydate-ym-show]=\"rightView() === 'year' || rightView() === 'month'\"\n        [class.laydate-time-show]=\"rightView() === 'time'\">\n        <ng-container\n            *ngTemplateOutlet=\"calendarPanel; context: { data: rightCalendar(), date: rightDate(), isRight: true, currView: rightView(), yearList: rightYearList() }\"></ng-container>\n    </div>\n    }\n\n    <!-- Single Mode: One Panel (or Full Panel) -->\n    @if (!finalConfig().range) {\n    <div class=\"layui-laydate-main\"\n        [class.laydate-theme-fullpanel]=\"finalConfig().theme === 'fullpanel'\"\n        [class.laydate-ym-show]=\"finalConfig().theme !== 'fullpanel' && (view() === 'year' || view() === 'month')\"\n        [class.laydate-time-show]=\"finalConfig().theme !== 'fullpanel' && view() === 'time'\">\n        <ng-container\n            *ngTemplateOutlet=\"calendarPanel; context: { data: calendarData(), date: currentDate(), isRight: false, currView: view(), yearList: yearList() }\"></ng-container>\n    </div>\n    }\n</div>\n\n<!-- Footer (Shared) -->\n@if (finalConfig().showBottom) {\n<div class=\"layui-laydate-footer\">\n    @if (finalConfig().type === 'datetime' && finalConfig().theme !== 'fullpanel') {\n    <span class=\"laydate-btns-time\" role=\"button\" tabindex=\"0\" (click)=\"toggleTime()\" (keydown.enter)=\"toggleTime()\"\n        (keydown.space)=\"toggleTime()\">{{ (finalConfig().range ? leftView() : view()) === 'time'\n        ?\n        i18n().backToDate : i18n().timeTips }}</span>\n    }\n\n    @if (showPreview()) {\n    <span class=\"layui-laydate-preview\" [title]=\"i18n().hint\">{{ getPreview() }}</span>\n    }\n\n    <div class=\"laydate-footer-btns\">\n        @for (btn of footerBtns(); track btn.type) {\n        <span [attr.lay-type]=\"btn.type\" role=\"button\" tabindex=\"0\" (click)=\"handleBtnClick(btn.type)\"\n            (keydown.enter)=\"handleBtnClick(btn.type)\" (keydown.space)=\"handleBtnClick(btn.type)\"\n            [attr.aria-disabled]=\"btn.type === 'confirm' && isConfirmDisabled()\"\n            [class.laydate-disabled]=\"btn.type === 'confirm' && isConfirmDisabled()\">{{ btn.label }}</span>\n        }\n    </div>\n</div>\n}\n\n@if (hintState().visible) {\n<div class=\"layui-laydate-hint\" role=\"alert\" aria-live=\"assertive\" [innerHTML]=\"hintState().content | safeHtml\"></div>\n}\n\n<!-- Reusable Calendar Panel Template -->\n<ng-template #calendarPanel let-data=\"data\" let-date=\"date\" let-isRight=\"isRight\" let-currView=\"currView\"\n    let-yearList=\"yearList\">\n    <div class=\"layui-laydate-header\">\n        @if (currView !== 'time' && (!isLinked() || !isRight)) {\n        <i class=\"layui-icon laydate-icon laydate-prev-y\" role=\"button\" tabindex=\"0\"\n            [attr.aria-label]=\"i18n().yearTips + ' ' + (isRight ? 'Right' : 'Left') + ' Prev'\"\n            (click)=\"prevYear(isRight)\" (keydown.enter)=\"prevYear(isRight)\"\n            (keydown.space)=\"prevYear(isRight)\">&#xe65a;</i>\n        }\n        @if ((currView === 'date' || finalConfig().theme === 'fullpanel') && (!isLinked() || !isRight)) {\n        <i class=\"layui-icon laydate-icon laydate-prev-m\" role=\"button\" tabindex=\"0\"\n            [attr.aria-label]=\"i18n().monthTips + ' Prev'\" (click)=\"prevMonth(isRight)\"\n            (keydown.enter)=\"prevMonth(isRight)\" (keydown.space)=\"prevMonth(isRight)\">&#xe603;</i>\n        }\n        <div class=\"laydate-set-ym\">\n            @if (currView === 'time' && finalConfig().theme !== 'fullpanel') {\n            <span>{{ i18n().timeTips }}</span>\n            } @else {\n            <span lay-type=\"year\" role=\"button\" tabindex=\"0\" (click)=\"switchView('year', isRight)\"\n                (keydown.enter)=\"switchView('year', isRight)\" (keydown.space)=\"switchView('year', isRight)\">\n                {{ (currView === 'year' || (finalConfig().theme === 'fullpanel' && currView === 'year')) ?\n                getYearRangeLabel(isRight) : i18n().formatYear(date.year) }}\n            </span>\n            @if (currView !== 'year' && currView !== 'month') {\n            <span lay-type=\"month\" role=\"button\" tabindex=\"0\" (click)=\"switchView('month', isRight)\"\n                (keydown.enter)=\"switchView('month', isRight)\" (keydown.space)=\"switchView('month', isRight)\">{{\n                i18n().formatMonth(date.month)\n                }}</span>\n            }\n            }\n        </div>\n        @if ((currView === 'date' || finalConfig().theme === 'fullpanel') && (!isLinked() || isRight)) {\n        <i class=\"layui-icon laydate-icon laydate-next-m\" role=\"button\" tabindex=\"0\"\n            [attr.aria-label]=\"i18n().monthTips + ' Next'\" (click)=\"nextMonth(isRight)\"\n            (keydown.enter)=\"nextMonth(isRight)\" (keydown.space)=\"nextMonth(isRight)\">&#xe602;</i>\n        }\n        @if (currView !== 'time' && (!isLinked() || isRight)) {\n        <i class=\"layui-icon laydate-icon laydate-next-y\" role=\"button\" tabindex=\"0\"\n            [attr.aria-label]=\"i18n().yearTips + ' ' + (isRight ? 'Right' : 'Left') + ' Next'\"\n            (click)=\"nextYear(isRight)\" (keydown.enter)=\"nextYear(isRight)\"\n            (keydown.space)=\"nextYear(isRight)\">&#xe65b;</i>\n        }\n    </div>\n\n    <div class=\"layui-laydate-content-container\">\n        <!-- Always Date Table for FullPanel Left side -->\n        @if (finalConfig().theme === 'fullpanel') {\n        <div class=\"layui-laydate-content-main\">\n            <ng-container *ngTemplateOutlet=\"dateGrid; context: { data: data, isRight: isRight }\"></ng-container>\n        </div>\n        <div class=\"layui-laydate-content-side\">\n            @if (currView === 'year') {\n            <ng-container\n                *ngTemplateOutlet=\"yearGrid; context: { yearList: yearList, isRight: isRight }\"></ng-container>\n            } @else if (currView === 'month') {\n            <ng-container *ngTemplateOutlet=\"monthGrid; context: { date: date, isRight: isRight }\"></ng-container>\n            } @else {\n            <ng-container *ngTemplateOutlet=\"timePanel; context: { date: date, isRight: isRight }\"></ng-container>\n            }\n        </div>\n        } @else {\n        <!-- Standard Logic -->\n        @if (currView === 'date') {\n        <ng-container *ngTemplateOutlet=\"dateGrid; context: { data: data, isRight: isRight }\"></ng-container>\n        }\n        @if (currView === 'year') {\n        <ng-container *ngTemplateOutlet=\"yearGrid; context: { yearList: yearList, isRight: isRight }\"></ng-container>\n        }\n        @if (currView === 'month') {\n        <ng-container *ngTemplateOutlet=\"monthGrid; context: { date: date, isRight: isRight }\"></ng-container>\n        }\n        @if (currView === 'time') {\n        <ng-container *ngTemplateOutlet=\"timePanel; context: { date: date, isRight: isRight }\"></ng-container>\n        }\n        }\n    </div>\n</ng-template>\n\n<!-- Sub-templates for grid content -->\n<ng-template #dateGrid let-data=\"data\" let-isRight=\"isRight\">\n    <div class=\"layui-laydate-content\">\n        <table role=\"grid\" [attr.aria-label]=\"i18n().dateTips\">\n            <thead>\n                <tr role=\"row\">\n                    @for (w of weekHeaders(); track $index) {\n                    <th role=\"columnheader\">{{ w }}</th>\n                    }\n                </tr>\n            </thead>\n            <tbody>\n                @for (row of getRows(data); track $index) {\n                <tr role=\"row\">\n                    @for (day of row; track day.year + '-' + day.month + '-' + day.day) {\n                    <td role=\"gridcell\" [attr.aria-selected]=\"isThisDay(day.year, day.month, day.day, isRight) || isInRange(day.year, day.month, day.day)\"\n                        [attr.aria-disabled]=\"day.disabled\"\n                        [attr.aria-label]=\"day.year + '-' + digit(day.month + 1) + '-' + digit(day.day) + (day.holiday ? ' (' + day.holiday + ')' : '') + (day.mark ? ' ' + day.mark : '')\"\n                        [attr.tabindex]=\"day.disabled ? -1 : (isThisDay(day.year, day.month, day.day, isRight) ? 0 : -1)\"\n                        (mouseenter)=\"hoverValue({year: day.year, month: day.month, date: day.day})\"\n                        (click)=\"selectDay(day, isRight)\" (keydown.enter)=\"selectDay(day, isRight)\"\n                        (keydown.space)=\"selectDay(day, isRight)\"\n                        [attr.lay-ymd]=\"day.year + '-' + day.month + '-' + day.day\"\n                        [class.laydate-day-prev]=\"day.type === 'prev'\" [class.laydate-day-next]=\"day.type === 'next'\"\n                        [class.laydate-day-now]=\"isToday(day.year, day.month, day.day)\"\n                        [class.layui-this]=\"!day.disabled && isThisDay(day.year, day.month, day.day, isRight)\"\n                        [class.laydate-disabled]=\"day.disabled\" [class.laydate-day-mark-wrap]=\"day.mark\"\n                        [class.laydate-day-range]=\"isInRange(day.year, day.month, day.day)\"\n                        [class.laydate-selected]=\"isInRange(day.year, day.month, day.day)\">\n                        <div>\n                            @if (day.holiday) {\n                            <span class=\"laydate-holiday-badge\" [class.laydate-holiday-work]=\"day.holiday === '班'\">{{\n                                day.holiday }}</span>\n                            }\n                            @if (day.customContent) {\n                            <div class=\"laydate-custom-cell\" [innerHTML]=\"day.customContent | safeHtml\"></div>\n                            } @else if (day.mark) {\n                            <span class=\"laydate-day-mark\">{{ day.mark }}</span>\n                            } @else {\n                            {{ day.day }}\n                            }\n                        </div>\n                    </td>\n                    }\n                </tr>\n                }\n            </tbody>\n        </table>\n    </div>\n</ng-template>\n\n<ng-template #yearGrid let-yearList=\"yearList\" let-isRight=\"isRight\">\n    <ul class=\"layui-laydate-list laydate-year-list\" role=\"listbox\" [attr.aria-label]=\"i18n().yearTips\">\n        @for (y of yearList; track y) {\n        <li role=\"option\" [attr.tabindex]=\"isThisYear(y, isRight) ? 0 : -1\" [attr.aria-selected]=\"isThisYear(y, isRight)\"\n            (click)=\"selectYear(y, isRight)\" (keydown.enter)=\"selectYear(y, isRight)\" (keydown.space)=\"selectYear(y, isRight)\"\n            (mouseenter)=\"hoverValue({year: y, month: 0, date: 1})\"\n            [class.laydate-selected]=\"isInRange(y, 0, 1)\"\n            [class.layui-this]=\"isThisYear(y, isRight)\">\n            {{ i18n().formatYear(y) }}</li>\n        }\n    </ul>\n</ng-template>\n\n<ng-template #monthGrid let-date=\"date\" let-isRight=\"isRight\">\n    <ul class=\"layui-laydate-list laydate-month-list\" role=\"listbox\" [attr.aria-label]=\"i18n().monthTips\">\n        @for (m of i18n().months; track i; let i = $index) {\n        <li role=\"option\" [attr.tabindex]=\"isThisMonth(i, date.year, isRight) ? 0 : -1\"\n            [attr.aria-selected]=\"isThisMonth(i, date.year, isRight)\" (click)=\"selectMonth(i, isRight)\"\n            (keydown.enter)=\"selectMonth(i, isRight)\" (keydown.space)=\"selectMonth(i, isRight)\"\n            (mouseenter)=\"hoverValue({year: date.year, month: i, date: 1})\"\n            [class.laydate-selected]=\"isInRange(date.year, i, 1)\"\n            [class.layui-this]=\"isThisMonth(i, date.year, isRight)\">\n            {{ m }}</li>\n        }\n    </ul>\n</ng-template>\n\n<ng-template #timePanel let-date=\"date\" let-isRight=\"isRight\">\n    <ul class=\"layui-laydate-list laydate-time-list\" role=\"region\" [attr.aria-label]=\"i18n().timeTips\">\n        @if (timeColumnVisibility().h) {\n        <li>\n            <p>{{ i18n().time[0] }}</p>\n            <ol #timeOl_hours role=\"listbox\" [attr.aria-label]=\"i18n().time[0]\">\n                @for (h of timeList.hours; track h) {\n                <li role=\"option\" [attr.tabindex]=\"date.hours === h ? 0 : -1\" [attr.aria-selected]=\"date.hours === h\"\n                    (click)=\"selectTime('hours', h, isRight)\" (keydown.enter)=\"selectTime('hours', h, isRight)\"\n                    (keydown.space)=\"selectTime('hours', h, isRight)\" [class.layui-this]=\"date.hours === h\"\n                    [class.laydate-disabled]=\"isDisabledTime('hours', h, isRight)\">{{ digit(h) }}\n                </li>\n                }\n            </ol>\n        </li>\n        }\n        @if (timeColumnVisibility().m) {\n        <li>\n            <p>{{ i18n().time[1] }}</p>\n            <ol #timeOl_minutes role=\"listbox\" [attr.aria-label]=\"i18n().time[1]\">\n                @for (m of timeList.minutes; track m) {\n                <li role=\"option\" [attr.tabindex]=\"date.minutes === m ? 0 : -1\" [attr.aria-selected]=\"date.minutes === m\"\n                    (click)=\"selectTime('minutes', m, isRight)\" (keydown.enter)=\"selectTime('minutes', m, isRight)\"\n                    (keydown.space)=\"selectTime('minutes', m, isRight)\" [class.layui-this]=\"date.minutes === m\"\n                    [class.laydate-disabled]=\"isDisabledTime('minutes', m, isRight)\">{{ digit(m)\n                    }}\n                </li>\n                }\n            </ol>\n        </li>\n        }\n        @if (timeColumnVisibility().s) {\n        <li>\n            <p>{{ i18n().time[2] }}</p>\n            <ol #timeOl_seconds role=\"listbox\" [attr.aria-label]=\"i18n().time[2]\">\n                @for (s of timeList.seconds; track s) {\n                <li role=\"option\" [attr.tabindex]=\"date.seconds === s ? 0 : -1\" [attr.aria-selected]=\"date.seconds === s\"\n                    (click)=\"selectTime('seconds', s, isRight)\" (keydown.enter)=\"selectTime('seconds', s, isRight)\"\n                    (keydown.space)=\"selectTime('seconds', s, isRight)\" [class.layui-this]=\"date.seconds === s\"\n                    [class.laydate-disabled]=\"isDisabledTime('seconds', s, isRight)\">{{ digit(s)\n                    }}\n                </li>\n                }\n            </ol>\n        </li>\n        }\n    </ul>\n</ng-template>","import { Injectable, inject, ViewContainerRef, ComponentRef, EnvironmentInjector, createComponent, ApplicationRef, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DateObject, LaydateConfig, CalendarDay } from './ng-laydate.types';\nimport { NgLaydateComponent } from './ng-laydate.component';\n\n/**\n * NgLaydate Service\n *\n * Provides programmatic rendering of date/time pickers, dynamic hint notifications, and date math utility functions.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class NgLaydateService {\n\n    private envInjector = inject(EnvironmentInjector);\n    private appRef = inject(ApplicationRef);\n    private platformId = inject(PLATFORM_ID);\n    private defaultVcr?: ViewContainerRef;\n\n    // Instance Registry\n    private instances = new Map<string, NgLaydateComponent>();\n    // Track active panel refs by element using WeakMap to prevent DOM leaks\n    private activePanels = new WeakMap<HTMLElement, ComponentRef<NgLaydateComponent>>();\n    private panelElements = new WeakMap<ComponentRef<any>, HTMLElement>();\n    // Track latest configs by element\n    private elementConfigs = new WeakMap<HTMLElement, LaydateConfig>();\n    // Track element event listeners for unbind/cleanup\n    private elementListeners = new WeakMap<HTMLElement, { click: () => void; focus: () => void }>();\n    // Track event listeners and timers for cleanup\n    private documentClickListeners = new Map<ComponentRef<any>, any>();\n    private documentClickTimers = new Map<ComponentRef<any>, any>();\n    private shadeClickTimers = new Map<ComponentRef<any>, any>();\n    private subscriptionsMap = new Map<ComponentRef<any>, { unsubscribe: () => void }[]>();\n    private repositionListeners = new Map<ComponentRef<any>, () => void>();\n\n    /**\n     * Converts a Hex color code string into an RGBA string with the given opacity.\n     * @param hex Hex color code string (e.g., '#16b777' or '#fff')\n     * @param opacity Opacity value between 0 and 1\n     */\n    hexToRgba(hex: string, opacity: number): string {\n        if (!hex) return `rgba(22, 183, 119, ${opacity})`; // Default green\n        if (!hex.startsWith('#')) return hex;\n        let r = 0, g = 0, b = 0;\n        if (hex.length === 4) {\n            r = parseInt(hex[1] + hex[1], 16);\n            g = parseInt(hex[2] + hex[2], 16);\n            b = parseInt(hex[3] + hex[3], 16);\n        } else if (hex.length === 7) {\n            r = parseInt(hex.substring(1, 3), 16);\n            g = parseInt(hex.substring(3, 5), 16);\n            b = parseInt(hex.substring(5, 7), 16);\n        }\n        return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n    }\n\n    /**\n     * Registers a component instance handle by custom ID.\n     */\n    register(id: string, component: NgLaydateComponent) {\n        if (id) {\n            this.instances.set(id, component);\n        }\n    }\n\n    /**\n     * Unregisters a component instance handle by custom ID.\n     */\n    unregister(id: string) {\n        if (id) {\n            this.instances.delete(id);\n        }\n    }\n\n    /**\n     * Static hint API that displays a temporary toast/hint message on a registered picker instance.\n     * @param id Registered picker instance ID\n     * @param opts Hint configuration with content string and display duration in ms\n     */\n    hint(id: string, opts: { content: string; ms?: number }) {\n        const inst = this.instances.get(id);\n        if (inst) {\n            inst.showHint(opts.content, opts.ms);\n        } else {\n            console.warn(`Laydate: instance with id '${id}' not found`);\n        }\n    }\n\n    /**\n     * Sets the default ViewContainerRef container for dynamic component rendering.\n     */\n    setContainer(vcr: ViewContainerRef) {\n        this.defaultVcr = vcr;\n    }\n\n    /**\n     * Dynamically updates the LaydateConfig configuration bound to a target element.\n     * @param elem Target HTML element\n     * @param config Updated LaydateConfig object\n     */\n    updateConfig(elem: HTMLElement, config: LaydateConfig) {\n        const existing = this.elementConfigs.get(elem);\n        const elemVal = (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) ? elem.value?.trim() : undefined;\n        const val = config.value !== undefined ? config.value : (elemVal || existing?.value);\n        const merged = { ...existing, ...config, value: val };\n        this.elementConfigs.set(elem, merged);\n        const activeRef = this.activePanels.get(elem);\n        if (activeRef) {\n            activeRef.setInput('config', merged);\n        }\n    }\n\n    /**\n     * Retrieves the active picker panel ComponentRef for the given HTML element, if any.\n     */\n    getActivePanel(elem: HTMLElement): ComponentRef<NgLaydateComponent> | null {\n        return elem ? (this.activePanels.get(elem) || null) : null;\n    }\n\n    /**\n     * Programmatically opens and attaches a date/time picker panel to the given HTML element.\n     */\n    open(elem: HTMLElement, config?: LaydateConfig): ComponentRef<NgLaydateComponent> | null {\n        if (!isPlatformBrowser(this.platformId) || !elem) return null;\n        const existingPanel = this.activePanels.get(elem);\n        if (existingPanel) return existingPanel;\n\n        if (config) {\n            this.updateConfig(elem, config);\n        }\n        const storedConfig = this.elementConfigs.get(elem) || config || { elem };\n        const elemVal = (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) ? elem.value?.trim() : undefined;\n        const val = (elemVal !== undefined && elemVal !== '') ? elemVal : storedConfig.value;\n        const latestConfig = { ...storedConfig, value: val };\n        return this.openPanel(latestConfig, elem);\n    }\n\n    /**\n     * Unbinds event listeners and cleans up associated picker instances for the given element.\n     */\n    unbind(elem: HTMLElement) {\n        if (!elem) return;\n        const listeners = this.elementListeners.get(elem);\n        if (listeners) {\n            elem.removeEventListener('click', listeners.click);\n            elem.removeEventListener('focus', listeners.focus);\n            this.elementListeners.delete(elem);\n        }\n        const activeRef = this.activePanels.get(elem);\n        if (activeRef) {\n            this.destroy(activeRef);\n        }\n        this.elementConfigs.delete(elem);\n    }\n\n    /**\n     * Programmatically renders and attaches a Laydate picker panel onto the specified target element.\n     * @param config Full LaydateConfig object (must include target elem or selector string)\n     * @returns Created ComponentRef handle, or null in SSR environments\n     */\n    render(config: LaydateConfig): ComponentRef<NgLaydateComponent> | null {\n        // SSR Guard: Do not render dynamic components accessing DOM in Server\n        if (!isPlatformBrowser(this.platformId)) {\n            return null;\n        }\n\n        const elem = typeof config.elem === 'string' ? document.querySelector(config.elem) as HTMLElement : config.elem;\n        if (!elem) {\n            console.error('Laydate: target element not found', config.elem);\n            return null;\n        }\n\n        if (elem instanceof HTMLElement) {\n            elem.setAttribute('autocomplete', 'off');\n            this.updateConfig(elem, config);\n        }\n\n        // If position is static, render immediately\n        if (config.position === 'static') {\n            const latestConfig = this.elementConfigs.get(elem) || config;\n            return this.openPanel(latestConfig, elem);\n        }\n\n        // Bind click & focus listeners to target element if not already bound\n        if (!this.elementListeners.has(elem)) {\n            const triggerHandler = () => {\n                if (!this.activePanels.get(elem)) {\n                    const storedConfig = this.elementConfigs.get(elem) || config;\n                    const elemVal = (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) ? elem.value?.trim() : undefined;\n                    const val = (elemVal !== undefined && elemVal !== '') ? elemVal : storedConfig.value;\n                    const latestConfig = { ...storedConfig, value: val };\n                    this.openPanel(latestConfig, elem);\n                }\n            };\n\n            elem.addEventListener('click', triggerHandler);\n            elem.addEventListener('focus', triggerHandler);\n            this.elementListeners.set(elem, { click: triggerHandler, focus: triggerHandler });\n        }\n\n        // Only open panel immediately on render if explicitly set in config.show === true\n        if (config.show === true && !this.activePanels.get(elem)) {\n            const storedConfig = this.elementConfigs.get(elem) || config;\n            const elemVal = (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) ? elem.value?.trim() : undefined;\n            const val = (elemVal !== undefined && elemVal !== '') ? elemVal : storedConfig.value;\n            const latestConfig = { ...storedConfig, value: val };\n            return this.openPanel(latestConfig, elem);\n        }\n\n        return this.activePanels.get(elem) || null;\n    }\n\n    private openPanel(config: LaydateConfig, elem: HTMLElement): ComponentRef<NgLaydateComponent> {\n        // Create component\n        const componentRef = createComponent(NgLaydateComponent, {\n            environmentInjector: this.envInjector,\n            hostElement: undefined\n        });\n\n        if (config.position !== 'static') {\n            this.activePanels.set(elem, componentRef);\n            this.panelElements.set(componentRef, elem);\n        }\n\n        // Set inputs correctly\n        componentRef.setInput('config', config);\n\n        const componentEl = componentRef.location.nativeElement;\n\n        // Position Logic\n        if (config.position === 'static') {\n            componentEl.style.position = 'static';\n            componentEl.style.display = 'inline-block';\n            elem.appendChild(componentEl);\n        } else {\n            componentEl.style.position = 'absolute';\n            componentEl.style.zIndex = '99999999';\n            document.body.appendChild(componentEl);\n            this.setAbsolutePosition(elem, componentEl);\n        }\n\n        // Attach to application ref for change detection\n        this.appRef.attachView(componentRef.hostView);\n\n        // Handle selection\n        const sub = componentRef.instance.select.subscribe((value: string) => {\n            if (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) {\n                let displayValue = value;\n                if (config.formatToDisplay) {\n                    displayValue = config.formatToDisplay(value);\n                }\n                elem.value = displayValue;\n                const existingConfig = this.elementConfigs.get(elem) || config;\n                this.elementConfigs.set(elem, { ...existingConfig, value });\n                elem.dispatchEvent(new Event('input', { bubbles: true }));\n                elem.dispatchEvent(new Event('change', { bubbles: true }));\n            }\n\n            // Auto close behavior (only for non-static)\n            if (config.position !== 'static') {\n                setTimeout(() => {\n                    this.destroy(componentRef, shadeEl);\n                }, 0);\n            }\n        });\n\n        // Handle clear (Auto close for non-static panels)\n        const subClear = componentRef.instance.clearOutput.subscribe(() => {\n            if (elem instanceof HTMLInputElement || elem instanceof HTMLTextAreaElement) {\n                elem.value = '';\n                const existingConfig = this.elementConfigs.get(elem) || config;\n                this.elementConfigs.set(elem, { ...existingConfig, value: '' });\n                elem.dispatchEvent(new Event('input', { bubbles: true }));\n                elem.dispatchEvent(new Event('change', { bubbles: true }));\n            }\n\n            // Auto close behavior (only for non-static)\n            if (config.position !== 'static') {\n                setTimeout(() => {\n                    this.destroy(componentRef, shadeEl);\n                }, 0);\n            }\n        });\n\n        // Track subscriptions for cleanup\n        this.subscriptionsMap.set(componentRef, [sub, subClear]);\n\n        // Create shade overlay if configured\n        let shadeEl: HTMLElement | null = null;\n        if (config.shade && config.position !== 'static') {\n            const opacity = typeof config.shade === 'number' ? config.shade : 0.5;\n            shadeEl = document.createElement('div');\n            shadeEl.className = 'layui-laydate-shade';\n            shadeEl.style.cssText = `\n                position: fixed;\n                top: 0;\n                left: 0;\n                width: 100%;\n                height: 100%;\n                background-color: rgba(0, 0, 0, ${opacity});\n                z-index: 99999998;\n            `;\n            document.body.appendChild(shadeEl);\n\n            // Click shade to close (with delay to avoid immediate close)\n            const timer = setTimeout(() => {\n                this.shadeClickTimers.delete(componentRef);\n                shadeEl?.addEventListener('click', (e) => {\n                    e.stopPropagation();\n                    this.destroy(componentRef, shadeEl);\n                });\n            }, 150);\n            this.shadeClickTimers.set(componentRef, timer);\n        }\n\n        // Click outside to close - ONLY if no shade (shade handles its own close)\n        if (config.position !== 'static' && !config.shade) {\n            const clickListener = (e: Event) => {\n                const target = e.target as Node;\n                if (!elem.contains(target) && !componentEl.contains(target)) {\n                    this.destroy(componentRef, shadeEl);\n                }\n            };\n\n            // Register listener for cleanup\n            this.documentClickListeners.set(componentRef, clickListener);\n\n            // Use mousedown to detect clicks before they bubble, with delay\n            const timer = setTimeout(() => {\n                this.documentClickTimers.delete(componentRef);\n                // Verify component hasn't been destroyed before adding listener\n                if (this.documentClickListeners.has(componentRef)) {\n                    document.addEventListener('mousedown', clickListener);\n                }\n            }, 150);\n            this.documentClickTimers.set(componentRef, timer);\n        }\n\n        // Dynamic Anchor Repositioning: Track window resize and container scroll\n        if (config.position !== 'static') {\n            let rafId: number | null = null;\n            const repositionHandler = () => {\n                if (rafId) cancelAnimationFrame(rafId);\n                rafId = requestAnimationFrame(() => {\n                    this.setAbsolutePosition(elem, componentEl);\n                });\n            };\n\n            window.addEventListener('resize', repositionHandler, { passive: true });\n            window.addEventListener('scroll', repositionHandler, { passive: true, capture: true });\n\n            this.repositionListeners.set(componentRef, () => {\n                if (rafId) cancelAnimationFrame(rafId);\n                window.removeEventListener('resize', repositionHandler);\n                window.removeEventListener('scroll', repositionHandler, true);\n            });\n        }\n\n        return componentRef;\n    }\n\n    private setAbsolutePosition(elem: HTMLElement, componentEl: HTMLElement) {\n        if (!isPlatformBrowser(this.platformId) || !elem || !componentEl) return;\n\n        const rect = elem.getBoundingClientRect();\n        const scrollT = window.pageYOffset || document.documentElement.scrollTop;\n        const scrollL = window.pageXOffset || document.documentElement.scrollLeft;\n\n        const panelW = componentEl.offsetWidth;\n        const panelH = componentEl.offsetHeight;\n\n        let top = rect.bottom + scrollT;\n        let left = rect.left + scrollL;\n\n        // Smart Alignment: check if it overflows the bottom\n        if (top + panelH > scrollT + window.innerHeight && rect.top > panelH) {\n            top = rect.top + scrollT - panelH - 2; // flip up\n        }\n\n        // Horizontal Alignment & Mobile Responsive Clamp\n        const isMobile = window.innerWidth <= 640;\n        if (isMobile) {\n            const maxMobileWidth = window.innerWidth - 24;\n            componentEl.style.maxWidth = `${maxMobileWidth}px`;\n            componentEl.style.boxSizing = 'border-box';\n            const actualWidth = Math.min(panelW || maxMobileWidth, maxMobileWidth);\n            left = Math.max(12, scrollL + (window.innerWidth - actualWidth) / 2);\n        } else {\n            if (left + panelW > scrollL + window.innerWidth) {\n                left = scrollL + window.innerWidth - panelW - 5;\n            }\n            if (left < scrollL) left = scrollL;\n        }\n\n        componentEl.style.top = top + 'px';\n        componentEl.style.left = left + 'px';\n        componentEl.style.margin = '0'; // Clear default margin\n    }\n\n    private destroy(ref: ComponentRef<NgLaydateComponent>, shadeEl?: HTMLElement | null) {\n        // Remove from activePanels WeakMap\n        const elem = this.panelElements.get(ref);\n        if (elem) {\n            this.activePanels.delete(elem);\n            this.panelElements.delete(ref);\n        }\n\n        // Cleanup reposition listeners\n        const cleanReposition = this.repositionListeners.get(ref);\n        if (cleanReposition) {\n            cleanReposition();\n            this.repositionListeners.delete(ref);\n        }\n\n        // Clear pending timers\n        const clickTimer = this.documentClickTimers.get(ref);\n        if (clickTimer) {\n            clearTimeout(clickTimer);\n            this.documentClickTimers.delete(ref);\n        }\n        const shadeTimer = this.shadeClickTimers.get(ref);\n        if (shadeTimer) {\n            clearTimeout(shadeTimer);\n            this.shadeClickTimers.delete(ref);\n        }\n\n        if (ref.instance.config().close) {\n            ref.instance.config().close!();\n        }\n        if (shadeEl && shadeEl.parentNode) {\n            shadeEl.parentNode.removeChild(shadeEl);\n        }\n\n        // Cleanup listener\n        const listener = this.documentClickListeners.get(ref);\n        if (listener) {\n            document.removeEventListener('mousedown', listener);\n            this.documentClickListeners.delete(ref);\n        }\n\n        // Cleanup subscriptions\n        const subs = this.subscriptionsMap.get(ref);\n        if (subs) {\n            subs.forEach(s => s.unsubscribe());\n            this.subscriptionsMap.delete(ref);\n        }\n\n        this.appRef.detachView(ref.hostView);\n        ref.destroy();\n    }\n\n    /**\n     * Checks if a given year is a leap year.\n     */\n    isLeap(year: number): boolean {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    /**\n     * Pads numbers with leading zeros to the specified target length (defaults to 2).\n     */\n    digit(num: number | string, length: number = 2): string {\n        let str = String(num);\n        while (str.length < length) {\n            str = '0' + str;\n        }\n        return str;\n    }\n\n    /**\n     * Formats a DateObject into a date string according to the format template.\n     * Uses a single-pass tokenizer to avoid token replacement collisions.\n     * Supports bracket escaping like `[yyyy]` for literal text.\n     * @param date Source DateObject\n     * @param formatStr Format template string (defaults to 'yyyy-MM-dd')\n     */\n    format(date: DateObject, formatStr: string = 'yyyy-MM-dd'): string {\n        const map: Record<string, string> = {\n            yyyy: this.digit(date.year, 4),\n            y: String(date.year),\n            MM: this.digit(date.month + 1),\n            M: String(date.month + 1),\n            dd: this.digit(date.date),\n            d: String(date.date),\n            HH: this.digit(date.hours),\n            H: String(date.hours),\n            mm: this.digit(date.minutes),\n            m: String(date.minutes),\n            ss: this.digit(date.seconds),\n            s: String(date.seconds)\n        };\n\n        return formatStr.replace(/\\[([^\\]]*)\\]|yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s/g, (match, escaped) => {\n            if (escaped !== undefined) {\n                return escaped;\n            }\n            return map[match] ?? match;\n        });\n    }\n\n    /**\n     * Converts a DateObject into a epoch millisecond timestamp for date comparison.\n     */\n    getTime(date: DateObject): number {\n        return new Date(date.year, date.month, date.date, date.hours, date.minutes, date.seconds).getTime();\n    }\n\n    /**\n     * Returns total number of days in a specific month for a given year.\n     */\n    totalDay(year: number, month: number): number {\n        const days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n        const m = ((month % 12) + 12) % 12;\n        return this.isLeap(year) && m === 1 ? 29 : days[m];\n    }\n\n    /**\n     * Converts a Date object or current date to a standard DateObject structure.\n     */\n    systemDate(newDate?: Date): DateObject {\n        const thisDate = newDate || new Date();\n        return {\n            year: thisDate.getFullYear(),\n            month: thisDate.getMonth(),\n            date: thisDate.getDate(),\n            hours: thisDate.getHours(),\n            minutes: thisDate.getMinutes(),\n            seconds: thisDate.getSeconds()\n        };\n    }\n\n    /**\n     * Parses string, Date, or numeric relative day offsets into a standard DateObject structure.\n     */\n    parse(value: any): DateObject {\n        if (value === null || value === undefined || value === '') {\n            return this.systemDate();\n        }\n        if (Array.isArray(value)) {\n            return value.length > 0 ? this.parse(value[0]) : this.systemDate();\n        }\n        if (typeof value === 'object' && 'year' in value && 'month' in value && 'date' in value) {\n            return { ...value } as DateObject;\n        }\n        if (typeof value === 'number') {\n            // Check for Unix timestamp (in milliseconds or seconds)\n            if (Math.abs(value) > 100000000) {\n                const timestamp = Math.abs(value) < 10000000000 ? value * 1000 : value;\n                const d = new Date(timestamp);\n                if (!isNaN(d.getTime())) {\n                    return this.systemDate(d);\n                }\n            }\n            // Relative day offset (e.g. -1, 0, 1, 7)\n            const d = new Date();\n            d.setDate(d.getDate() + value);\n            return this.systemDate(d);\n        }\n        if (value instanceof Date) {\n            return this.systemDate(value);\n        }\n\n        const strVal = typeof value === 'string' ? value.trim() : '';\n\n        // Handle time only string (e.g., '13:00:00', '09:30', '13:00', '13时00分00秒')\n        let targetStr = strVal;\n        if (targetStr && /^\\d{1,2}[:时]\\d{1,2}(?:[:分]\\d{1,2}秒?)?$/.test(targetStr)) {\n            targetStr = targetStr.replace(/时|分|秒/g, ':').replace(/:+$/, '');\n            targetStr = '1970-01-01 ' + targetStr;\n        }\n\n        // Match yyyy-MM-dd HH:mm:ss, yyyy-MM-ddTHH:mm:ss, yyyy/MM/dd, yyyy.MM.dd, yyyy年MM月dd日\n        const match = targetStr ? targetStr.match(/^(\\d{4})[-/\\.年](\\d{1,2})[-/\\.月](\\d{1,2})日?(?:[\\sT]+(\\d{1,2})[:时](\\d{1,2})(?:[:分](\\d{1,2})秒?)?)?/) : null;\n        if (match) {\n            return {\n                year: parseInt(match[1], 10),\n                month: parseInt(match[2], 10) - 1, // month is 0-indexed\n                date: parseInt(match[3], 10),\n                hours: match[4] ? parseInt(match[4], 10) : 0,\n                minutes: match[5] ? parseInt(match[5], 10) : 0,\n                seconds: match[6] ? parseInt(match[6], 10) : 0\n            };\n        }\n\n        // Match yyyy-MM, yyyy/MM, yyyy.MM, yyyy年MM月 (Month picker)\n        const matchYM = targetStr ? targetStr.match(/^(\\d{4})[-/\\.年](\\d{1,2})月?$/) : null;\n        if (matchYM) {\n            return {\n                year: parseInt(matchYM[1], 10),\n                month: parseInt(matchYM[2], 10) - 1,\n                date: 1,\n                hours: 0,\n                minutes: 0,\n                seconds: 0\n            };\n        }\n\n        // Match yyyy or yyyy年 (Year picker)\n        const matchY = targetStr ? targetStr.match(/^(\\d{4})年?$/) : null;\n        if (matchY) {\n            return {\n                year: parseInt(matchY[1], 10),\n                month: 0,\n                date: 1,\n                hours: 0,\n                minutes: 0,\n                seconds: 0\n            };\n        }\n\n        const d = targetStr ? new Date(targetStr) : new Date();\n        // Check for invalid date\n        if (isNaN(d.getTime())) {\n            return this.systemDate();\n        }\n        return this.systemDate(d);\n    }\n\n    /**\n     * Generates a 42-cell CalendarDay array for rendering the month grid.\n     */\n    getCalendarData(year: number, month: number, config?: LaydateConfig): CalendarDay[] {\n        const startDay = new Date(year, month, 1).getDay(); // 0 is Sunday\n        const weekStart = config?.weekStart || 0;\n        const emptyDays = (startDay - weekStart + 7) % 7;\n\n        const daysInMonth = this.totalDay(year, month);\n        const daysInPrevMonth = this.totalDay(year, month === 0 ? 11 : month - 1);\n\n        const list: CalendarDay[] = [];\n\n        // Gregorian festivals\n        const festivals: { [key: string]: string } = {\n            '1-1': '元旦',\n            '2-14': '情人节',\n            '3-8': '妇女节',\n            '3-12': '植树节',\n            '4-1': '愚人节',\n            '5-1': '劳动节',\n            '5-4': '青年节',\n            '6-1': '儿童节',\n            '7-1': '建党节',\n            '8-1': '建军节',\n            '9-10': '教师节',\n            '10-1': '国庆节',\n            '12-25': '圣诞节'\n        };\n\n        // Helper to check disabled, marks, and holidays\n        // Pre-calculate min/max timestamps outside the loop\n        let minTime = -Infinity;\n        let maxTime = Infinity;\n\n        if (config) {\n            if (config.min) {\n                const minD = this.parse(config.min) as DateObject;\n                minTime = new Date(minD.year, minD.month, minD.date).getTime();\n            }\n            if (config.max) {\n                const maxD = this.parse(config.max) as DateObject;\n                maxTime = new Date(maxD.year, maxD.month, maxD.date).getTime();\n            }\n        }\n\n        const checkStatus = (y: number, m: number, d: number) => {\n            const status: { disabled: boolean; mark: string; holiday?: '休' | '班' } = { disabled: false, mark: '' };\n            if (!config) return status;\n\n            // Check disabled\n            const dateOnly = new Date(y, m, d).getTime();\n            status.disabled = dateOnly < minTime || dateOnly > maxTime;\n\n            // Check callback disabledDate\n            if (!status.disabled && config.disabledDate) {\n                status.disabled = config.disabledDate(new Date(y, m, d), 'date');\n            }\n\n            // Check marks (custom marks have priority)\n            if (config.mark) {\n                const ymd = `${y}-${m + 1}-${d}`;\n                const ymdZero = `${y}-${this.digit(m + 1)}-${this.digit(d)}`;\n\n                if (typeof config.mark === 'function') {\n                    // Function support\n                    const render = (input: string | Record<string, string>) => {\n                        if (typeof input === 'string') return input;\n                        // Object map support with priorities\n                        // 1. Specific: yyyy-M-d (or yyyy-MM-dd)\n                        if (input[ymd]) return input[ymd];\n                        if (input[ymdZero]) return input[ymdZero];\n\n                        // 2. Annual: 0-M-d\n                        const annual = `0-${m + 1}-${d}`;\n                        const annualZero = `0-${this.digit(m + 1)}-${this.digit(d)}`;\n                        if (input[annual]) return input[annual];\n                        if (input[annualZero]) return input[annualZero];\n\n                        // 3. Monthly: 0-0-d\n                        const monthly = `0-0-${d}`;\n                        const monthlyZero = `0-0-${this.digit(d)}`;\n                        if (input[monthly]) return input[monthly];\n                        if (input[monthlyZero]) return input[monthlyZero];\n\n                        return ''; // No match\n                    };\n\n                    const result = config.mark({ year: y, month: m + 1, date: d }, render);\n                    if (result && typeof result === 'string') {\n                        status.mark = result;\n                    }\n\n                } else {\n                    // Legacy object support\n                    const markMap = config.mark as Record<string, string>;\n                    if (markMap[ymd]) status.mark = markMap[ymd];\n                    else if (markMap[ymdZero]) status.mark = markMap[ymdZero];\n                }\n            }\n\n            // Check festivals if enabled and no custom mark\n            if (config.calendar && !status.mark) {\n                const md = `${m + 1}-${d}`;\n                if (festivals[md]) status.mark = festivals[md];\n            }\n\n            // Check holidays (休/班)\n            if (config.holidays) {\n                const ymd = `${y}-${m + 1}-${d}`;\n                const ymdZero = `${y}-${this.digit(m + 1)}-${this.digit(d)}`;\n                const [holidayDates, workDates] = config.holidays;\n\n                if (holidayDates?.includes(ymd) || holidayDates?.includes(ymdZero)) {\n                    status.holiday = '休';\n                } else if (workDates?.includes(ymd) || workDates?.includes(ymdZero)) {\n                    status.holiday = '班';\n                }\n            }\n\n            return status;\n        };\n\n        // Prev month days\n        for (let i = 0; i < emptyDays; i++) {\n            const y = month === 0 ? year - 1 : year;\n            const m = month === 0 ? 11 : month - 1;\n            const d = daysInPrevMonth - (emptyDays - i - 1);\n            const status = checkStatus(y, m, d);\n            list.push({\n                type: 'prev',\n                day: d,\n                month: m,\n                year: y,\n                disabled: status.disabled,\n                mark: status.mark,\n                holiday: status.holiday\n            });\n        }\n\n        // Current month days\n        for (let i = 1; i <= daysInMonth; i++) {\n            const status = checkStatus(year, month, i);\n            list.push({\n                type: 'current',\n                day: i,\n                month: month,\n                year: year,\n                disabled: status.disabled,\n                mark: status.mark,\n                holiday: status.holiday\n            });\n        }\n\n        // Next month days\n        const remaining = 42 - list.length;\n        for (let i = 1; i <= remaining; i++) {\n            const y = month === 11 ? year + 1 : year;\n            const m = month === 11 ? 0 : month + 1;\n            const status = checkStatus(y, m, i);\n            list.push({\n                type: 'next',\n                day: i,\n                month: m,\n                year: y,\n                disabled: status.disabled,\n                mark: status.mark,\n                holiday: status.holiday\n            });\n        }\n\n        // Apply cellRender if defined\n        if (config && config.cellRender) {\n            list.forEach(item => {\n                const ymd = { year: item.year, month: item.month, date: item.day };\n                config.cellRender!(ymd, (content) => {\n                    item.customContent = content;\n                }, { type: 'date' });\n            });\n        }\n\n        return list;\n    }\n\n    /**\n     * Validates and clamps DateObject values to ensure year, month, and time numbers stay within valid boundaries.\n     */\n    checkDate(date: DateObject): DateObject {\n        const LIMIT_YEAR = [100, 200000];\n\n        if (date.year > LIMIT_YEAR[1]) date.year = LIMIT_YEAR[1];\n        if (date.year < LIMIT_YEAR[0]) date.year = LIMIT_YEAR[0];\n        if (date.month > 11) date.month = 11;\n        if (date.month < 0) date.month = 0;\n\n        // Time constraints\n        if (date.seconds > 59) { date.seconds = 0; date.minutes++; }\n        if (date.minutes > 59) { date.minutes = 0; date.hours++; }\n        if (date.hours > 23) date.hours = 0;\n\n        // Check last day of month\n        const maxDay = this.totalDay(date.year, date.month);\n        if (date.date > maxDay) date.date = maxDay;\n\n        return date;\n    }\n}\n","import { Directive, ElementRef, ComponentRef, OnDestroy, inject, input, Output, EventEmitter, forwardRef, effect } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgLaydateComponent } from './ng-laydate.component';\nimport { LaydateConfig } from './ng-laydate.types';\nimport { NgLaydateService } from './ng-laydate.service';\n\n/**\n * NgLaydate Directive\n *\n * Attaches an elegant date/time picker to any HTML input element with Angular Forms integration.\n *\n * @example\n * ```html\n * <!-- Basic Usage -->\n * <input type=\"text\" laydate placeholder=\"Select Date\">\n *\n * <!-- Custom Configuration & System Dark Mode -->\n * <input type=\"text\" [laydate]=\"{ type: 'datetime', range: true, darkMode: 'system' }\">\n *\n * <!-- Two-Way Form Binding -->\n * <input type=\"text\" laydate [(ngModel)]=\"dateValue\">\n * ```\n */\n@Directive({\n    selector: '[laydate]',\n    exportAs: 'laydate',\n    standalone: true,\n    providers: [{\n        provide: NG_VALUE_ACCESSOR,\n        useExisting: forwardRef(() => NgLaydateDirective),\n        multi: true\n    }],\n    host: {\n        '(click)': 'open()',\n        '(focus)': 'open()',\n        '(input)': 'onInput($event)'\n    }\n})\nexport class NgLaydateDirective implements OnDestroy, ControlValueAccessor {\n    /**\n     * Laydate configuration input signal (directive alias `laydate`).\n     */\n    configInput = input<LaydateConfig | '' | undefined | null>('', { alias: 'laydate' });\n\n    /** Emitted whenever a new value is selected */\n    @Output() change = new EventEmitter<string>();\n    /** Emitted when the picker panel completes rendering */\n    @Output() ready = new EventEmitter<any>();\n    /** Emitted when selection is confirmed or completed */\n    @Output() done = new EventEmitter<any>();\n    /** Emitted when the \"Confirm\" button is clicked */\n    @Output() onConfirm = new EventEmitter<any>();\n    /** Emitted when the \"Now\" button is clicked */\n    @Output() onNow = new EventEmitter<any>();\n    /** Emitted when the \"Clear\" button is clicked */\n    @Output() onClear = new EventEmitter<any>();\n    /** Emitted when the picker panel is closed */\n    @Output() closeEvent = new EventEmitter<void>();\n\n    private componentRef: ComponentRef<NgLaydateComponent> | null = null;\n    private el = inject(ElementRef);\n    private laydateService = inject(NgLaydateService);\n\n    // Form Control Callbacks\n    private onChange = (_: any) => { };\n    private onTouched = () => { };\n    private _value: any = '';\n    private prevConfigVal: any = undefined;\n\n    constructor() {\n        effect(() => {\n            const rawConfig = this.configInput();\n            const config: LaydateConfig = (typeof rawConfig === 'object' && rawConfig) ? { ...rawConfig } : {};\n            if (!config.elem && this.el?.nativeElement) {\n                config.elem = this.el.nativeElement;\n            }\n            if (config.elem) {\n                this.laydateService.updateConfig(config.elem, config);\n                if (config.value !== undefined && config.value !== this.prevConfigVal) {\n                    this.prevConfigVal = config.value;\n                    const strVal = Array.isArray(config.value) ? config.value.join(' - ') : String(config.value);\n                    this.el.nativeElement.value = strVal;\n                }\n            }\n        });\n    }\n\n    /**\n     * ControlValueAccessor interface: writes initial or updated value to the element.\n     */\n    writeValue(obj: any): void {\n        this._value = obj || '';\n        let displayValue = this._value;\n        const config = this.configInput();\n        if (typeof config === 'object' && config?.formatToDisplay) {\n            displayValue = config.formatToDisplay(this._value);\n        }\n        this.el.nativeElement.value = displayValue;\n    }\n\n    /**\n     * ControlValueAccessor interface: registers onChange callback.\n     */\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    /**\n     * ControlValueAccessor interface: registers onTouched callback.\n     */\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * ControlValueAccessor interface: sets disabled state.\n     */\n    setDisabledState?(isDisabled: boolean): void {\n        this.el.nativeElement.disabled = isDisabled;\n    }\n\n    /**\n     * Native input event handler for manual typing.\n     */\n    onInput(event: Event) {\n        const val = (event.target as HTMLInputElement).value;\n        this._value = val;\n        this.onChange(val);\n    }\n\n    /**\n     * Programmatically opens the date/time picker panel.\n     */\n    open() {\n        if (this.el.nativeElement) {\n            this.el.nativeElement.setAttribute('autocomplete', 'off');\n        }\n\n        if (this.componentRef) {\n            return;\n        }\n\n        const rawConfig = this.configInput();\n        const config: LaydateConfig = (typeof rawConfig === 'object' && rawConfig) ? { ...rawConfig } : {};\n\n        // Ensure host element is set\n        if (!config.elem) {\n            config.elem = this.el.nativeElement;\n        }\n\n        // Current input text in DOM takes highest priority for popup sync\n        const currentInputVal = this.el.nativeElement.value?.trim();\n        if (currentInputVal) {\n            config.value = currentInputVal;\n        } else if (this._value) {\n            config.value = this._value;\n        }\n\n        // Hook into callbacks to propogate changes\n        const origDone = config.done;\n        config.done = (value, date, end) => {\n            this._value = value;\n            this.onChange(value); // Propagate to Angular Form\n            this.onTouched();\n\n            this.done.emit({ value, date, endDate: end });\n            if (origDone) origDone(value, date, end);\n        };\n\n        const origReady = config.ready;\n        config.ready = (date) => {\n            this.ready.emit(date);\n            if (origReady) origReady(date);\n        };\n\n        const origChange = config.change;\n        config.change = (value, date, end) => {\n            this.change.emit(value);\n            if (origChange) origChange(value, date, end);\n        };\n\n        const origConfirm = config.onConfirm;\n        config.onConfirm = (value, date, end) => {\n            this.onConfirm.emit({ value, date, endDate: end });\n            if (origConfirm) origConfirm(value, date, end);\n        };\n\n        const origNow = config.onNow;\n        config.onNow = (value, date, end) => {\n            this.onNow.emit({ value, date, endDate: end });\n            if (origNow) origNow(value, date, end);\n        };\n\n        const origClear = config.onClear;\n        config.onClear = (value, date, end) => {\n            this._value = '';\n            this.onChange('');\n\n            this.onClear.emit({ value, date, endDate: end });\n            if (origClear) origClear(value, date, end);\n        };\n\n        const origClose = config.close;\n        config.close = () => {\n            this.onTouched();\n            this.closeEvent.emit();\n            if (origClose) origClose();\n        };\n\n        this.componentRef = this.laydateService.open(this.el.nativeElement, config);\n\n        if (this.componentRef) {\n            this.componentRef.onDestroy(() => {\n                this.componentRef = null;\n            });\n        }\n    }\n\n    /**\n     * Programmatically closes the date/time picker panel.\n     */\n    close() {\n        const elem = this.el?.nativeElement;\n        const ref = this.componentRef || (elem ? this.laydateService.getActivePanel(elem) : null);\n        if (ref) {\n            ref.destroy();\n            this.componentRef = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.close();\n        if (this.el?.nativeElement) {\n            this.laydateService.unbind(this.el.nativeElement);\n        }\n    }\n}\n","/*\n * Public API Surface of ng-laydate\n */\n\nexport * from './lib/ng-laydate.service';\nexport * from './lib/ng-laydate.component';\nexport * from './lib/ng-laydate.directive';\nexport * from './lib/ng-laydate.types';\nexport * from './lib/safe-html.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MAOa,YAAY,CAAA;AACD,IAAA,SAAA;AAApB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAkB;AAE/C,IAAA,SAAS,CAAC,KAA2C,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;IACrE;uGAPS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MC8BY,kBAAkB,CAAA;AACrB,IAAA,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACT,IAAA,QAAQ;AACN,IAAA,UAAU;AACV,IAAA,UAAU;;AAG1C,IAAA,cAAc,GAAG,MAAM,CAAU,KAAK,0DAAC;AAEvC,IAAA,MAAM,GAAG,KAAK,CAAgB,EAAE,kDAAC;IACjC,MAAM,GAAG,MAAM,EAAU;IACzB,WAAW,GAAG,MAAM,EAAQ;;;IAM5B,WAAW,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC3D,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;;IAGlC,SAAS,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACzD,OAAO,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACvD,IAAA,UAAU,GAAG,MAAM,CAAuB,MAAM,sDAAC;AACjD,IAAA,SAAS,GAAG,MAAM,CAAoB,IAAI,qDAAC;;IAG3C,QAAQ,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACxD,SAAS,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGzD,IAAA,IAAI,GAAG,MAAM,CAAqC,MAAM,gDAAC;AACzD,IAAA,QAAQ,GAAG,MAAM,CAAqC,MAAM,oDAAC;AAC7D,IAAA,SAAS,GAAG,MAAM,CAAqC,MAAM,qDAAC;;AAG9D,IAAA,QAAQ,GAAG,MAAM,CAAW,EAAE,oDAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAW,EAAE,wDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;IAC5B,WAAW,GAAG,KAAK;IACnB,aAAa,GAAQ,SAAS;;AAGtC,IAAA,QAAQ,GAAG;AACT,QAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;KAChD;;;;;;;AAWD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,wDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,wDAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,yDAAC;AAEF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;AACjC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,GAAG;SACJ;AACH,IAAA,CAAC,uDAAC;AAEF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;AAChD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,oDAAC;AAEF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;;;AAI5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI;AAElD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,KAAK,GAAG,GAAG;AACpB,IAAA,CAAC,6DAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK;AACtC,QAAA,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC;QAEhF,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;QACzC;;AAGA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO;gBACL,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;AAC7D,gBAAA,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI;aACpB;QACH;;AAGA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;AAE7B,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;YAC1C;;AAEA,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;YACrC;;YAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1C;QAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AACzC,IAAA,CAAC,uDAAC;AAEF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK;AACtC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE,GAAG,CAAC;AACxD,IAAA,CAAC,2DAAC;AAEF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,SAAS;AAClD,IAAA,CAAC,4DAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;QACzC,IAAI,SAAS,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AAErC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ;AAC1B,QAAA,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,UAAU,GAAI,KAAkB,EAAE,GAAG,KAAK;QACtE,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE;AACtF,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;QAC9B;QACA,OAAO,CAAC,CAAC,EAAE;AACb,IAAA,CAAC,sDAAC;;AAGF,IAAA,IAAI,GAAG,QAAQ,CAAkB,MAAK;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;AACvC,QAAA,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,UAAU,GAAI,OAAoB,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC;AAExF,QAAA,IAAI,IAAqB;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnF,gBAAA,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;gBAChD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;gBACxC,WAAW,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG;AAC/C,gBAAA,YAAY,EAAE,6BAA6B;AAC3C,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,eAAe,EAAE;aAClB;YACD,MAAM,IAAI,GAAG,IAA4B;AACzC,YAAA,IAAI,GAAG;AACL,gBAAA,GAAG,SAAS;AACZ,gBAAA,GAAG,IAAI;AACP,gBAAA,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;aACnD;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACjD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5F,gBAAA,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;AACrC,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;gBACzD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE;AACvC,gBAAA,WAAW,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;AAC3H,gBAAA,YAAY,EAAE,4CAA4C;AAC1D,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnF,gBAAA,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;gBAChD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;gBACxC,WAAW,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG;AAC/C,gBAAA,YAAY,EAAE,6BAA6B;AAC3C,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnF,gBAAA,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;gBACjD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;gBACxC,WAAW,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG;AAC/C,gBAAA,YAAY,EAAE,iCAAiC;AAC/C,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnF,gBAAA,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;gBACjD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;gBACxC,WAAW,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG;AAC/C,gBAAA,YAAY,EAAE,sCAAsC;AACpD,gBAAA,WAAW,EAAE,gBAAgB;AAC7B,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACjD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5F,gBAAA,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;AACtC,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,SAAS,EAAE,aAAa;AACxB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE;gBAC7D,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE;AACvC,gBAAA,WAAW,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;AAC3H,gBAAA,YAAY,EAAE,8CAA8C;AAC5D,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACjD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5F,gBAAA,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;AACxC,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,SAAS,EAAE,cAAc;AACzB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE;gBAChE,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE;AACvC,gBAAA,WAAW,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;AAC3H,gBAAA,YAAY,EAAE,2CAA2C;AACzD,gBAAA,WAAW,EAAE,uBAAuB;AACpC,gBAAA,eAAe,EAAE;aAClB;QACH;AAAO,aAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;gBACxD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnG,gBAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;AACvC,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,gBAAgB;AAC3B,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE;gBAC5D,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE;AACvC,gBAAA,WAAW,EAAE,CAAC,KAAa,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC;AAClI,gBAAA,YAAY,EAAE,6CAA6C;AAC3D,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,eAAe,EAAE;aAClB;QACH;aAAO;AACL,YAAA,IAAI,GAAG;AACL,gBAAA,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACnF,gBAAA,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACrB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,GAAG,EAAE;AACN,iBAAA;gBACD,UAAU,EAAE,CAAC,IAAY,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;gBACxC,WAAW,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAA,CAAG;AAC/C,gBAAA,YAAY,EAAE,6BAA6B;AAC3C,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,eAAe,EAAE;aAClB;QACH;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;AAC1C,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;QAE5B,OAAO;AACL,YAAA,GAAG,IAAI;AACP,YAAA,GAAG,UAAU;AACb,YAAA,KAAK,EAAE;gBACL,GAAG,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,UAAU,CAAC,KAAK,IAAI,EAAE;AAC3B;SACiB;AACtB,IAAA,CAAC,gDAAC;AAEF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI;;QAGnB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,gBAAA,IAAI,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;YAC7B;iBAAO;gBACL,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;YACpC;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;AAC/B,QAAA,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,sDAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,IAAI,CAAC;AAChD,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5D,IAAA,CAAC,uDAAC;;AAGF,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;QAChC,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,YAAA,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAChB,YAAA,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;SAChB;AACH,IAAA,CAAC,gEAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;;;AAG9B,QAAA,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI;;AAG1C,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,KAAK;AACzC,QAAA,OAAO,GAAG,CAAC,SAAS,KAAK,KAAK;AAChC,IAAA,CAAC,uDAAC;;AAGF,IAAA,cAAc,CAAC,IAAqC,EAAE,KAAa,EAAE,UAAmB,KAAK,EAAA;AAC3F,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,CAAC,GAAG,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;;AAGnC,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3F,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;QAG/F,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;;QAGvD,MAAM,MAAM,GAAG,MAAa;QAC5B,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;AAC1D,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD;QACA,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;YAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD;QACA,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;AAC9D,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD;AAEA,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,SAAS,GAAG,MAAM,CAAwC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,qDAAC;IAClF,SAAS,GAAQ,IAAI;AAE7B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACvB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;YAClH,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC;YACpE,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AAC3C,gBAAA,MAAM,aAAa,GAAG,CAAC,CAAsB,KAAI;oBAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACpC,gBAAA,CAAC;gBACD,UAAU,CAAC,gBAAgB,GAAG,QAAQ,EAAE,aAAa,CAAC;AACtD,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;oBAC7B,UAAU,CAAC,mBAAmB,GAAG,QAAQ,EAAE,aAAa,CAAC;AAC3D,gBAAA,CAAC,CAAC;YACJ;QACF;;QAGA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;;AAEzB,YAAA,IAAI,GAAG,CAAC,EAAE,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;YACrC;;AAGA,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAI;AAC1B,gBAAA,IAAI,CAAC,CAAC;AAAE,oBAAA,OAAO,EAAE;gBACjB,IAAI,CAAC,YAAY,IAAI;AAAE,oBAAA,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AACpD,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC;AAED,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AACzE,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;gBAAE;AAEvC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,KAAK;;AAG9B,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,IAAI,KAAK,GAAU,EAAE;oBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5B,wBAAA,KAAK,GAAG,GAAG,CAAC,KAAK;oBACnB;AAAO,yBAAA,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE;AACxC,wBAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;wBACnE,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;4BACjC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;wBACpC;6BAAO,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;4BACpC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;wBAChC;6BAAO,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;4BACpC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;wBAChC;oBACF;AACA,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,wBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3F,wBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzF,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;wBACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;wBAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAC9B,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,wBAAA,IAAI,GAAG,CAAC,WAAW,EAAE;4BACnB,IAAI,CAAC,qBAAqB,EAAE;wBAC9B;oBACF;gBACF;qBAAO;AACL,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AAChC,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;;AAIrC,gBAAA,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE;AAC7B,oBAAA,GAAG,CAAC,KAAK,GAAG,CAAC;AACb,oBAAA,GAAG,CAAC,OAAO,GAAG,CAAC;AACf,oBAAA,GAAG,CAAC,OAAO,GAAG,CAAC;gBACjB;AAEA,gBAAA,MAAM,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE;gBAC5B,SAAS,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,SAAS,CAAC,KAAK,GAAG,EAAE,EAAE;AAAE,oBAAA,SAAS,CAAC,KAAK,GAAG,CAAC;oBAAE,SAAS,CAAC,IAAI,EAAE;gBAAE;AAEnE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAE7B,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,oBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,wBAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE;AAC/C,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1B,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC9B;AAAO,yBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC9B,wBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AAC/D,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC7B;yBAAO;AACL,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;oBAC/B;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC/B;YACF;;AAGA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC/C,IAAI,GAAG,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;YAClE;AAAO,iBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAC7B;AAAO,iBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;AAC1C,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3C;YACF;;AAGA,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;AACnI,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAEzB,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,cAAc,EAAE;YACvB;YAEA,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,SAAS,CAAC,MAAK;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAC3B,IAAI,EAAE,EAAE;AACN,oBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,CACN,OAAe,EACf,EAAA,GAAa,IAAI,EACjB,IAAA,GAAsE,QAAQ,EAC9E,IAAA,GAA0D,EAAE,EAAA;AAE5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,YAAY,GAAG,OAAO;AAE1B,QAAA,IAAI,GAAG,CAAC,aAAa,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE;AACxC,gBAAA,GAAG,IAAI;AACP,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC;AACF,YAAA,IAAI,SAAS,KAAK,KAAK,EAAE;AACvB,gBAAA,OAAO;YACT;AACA,YAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;gBACjC,YAAY,GAAG,SAAS;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,EAAE,GAAG,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC/B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACrD,CAAC,EAAE,EAAE,CAAC;QACR;IACF;;AAGA,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC;IAC5D;AAEA,IAAA,YAAY,CAAC,UAAkB,EAAE,KAAA,GAAqC,QAAQ,EAAA;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAC9C,IAAI,KAAK,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;aAC5C,IAAI,KAAK,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;AAEQ,IAAA,QAAQ,CAAC,CAAa,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;AACnB,YAAA,CAAC,CAAC,IAAI,GAAG,MAAM;QACjB;AACA,QAAA,OAAO,CAAC;IACV;;IAGA,QAAQ,CAAC,UAAmB,KAAK,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzF,MAAM,OAAO,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC;AAEtC,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;YACjE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;;AAGrD,YAAA,MAAM,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC7D,YAAA,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACvD;aAAO;AACL,YAAA,MAAM,YAAY,GAAG,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;AAC9F,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,EAAE;YAC/B,CAAC,CAAC,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC;QAEA,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;IAEA,QAAQ,CAAC,UAAmB,KAAK,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzF,MAAM,OAAO,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC;AAEtC,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;AACjE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;AACvC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;;AAGrD,YAAA,MAAM,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC7D,YAAA,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACvD;aAAO;AACL,YAAA,MAAM,YAAY,GAAG,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;AAC9F,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,EAAE;YAC/B,CAAC,CAAC,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC;QAEA,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;IAEA,SAAS,CAAC,UAAmB,KAAK,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;AAE7G,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,EAAE;QAC/B,CAAC,CAAC,KAAK,EAAE;AACT,QAAA,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;AAAE,YAAA,CAAC,CAAC,KAAK,GAAG,EAAE;YAAE,CAAC,CAAC,IAAI,EAAE;QAAE;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,QAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;IAEA,SAAS,CAAC,UAAmB,KAAK,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;AAE7G,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,EAAE;QAC/B,CAAC,CAAC,KAAK,EAAE;AACT,QAAA,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE;AAAE,YAAA,CAAC,CAAC,KAAK,GAAG,CAAC;YAAE,CAAC,CAAC,IAAI,EAAE;QAAE;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,QAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE;AAEzB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,KAAK,CAAC,IAAI,IAAI,EAAE;QAClB;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/B,YAAA,KAAK,CAAC,IAAI,IAAI,CAAC;QACjB;aAAO;YACL,KAAK,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE;AACpB,gBAAA,KAAK,CAAC,KAAK,GAAG,CAAC;gBACf,KAAK,CAAC,IAAI,EAAE;YACd;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEzB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC;IACF;AAEA,IAAA,UAAU,CAAC,IAAwC,EAAE,OAAA,GAAmB,KAAK,EAAA;AAC3E,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5F,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;QACnF;AAEA,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B;IACF;AAEA,IAAA,iBAAiB,CAAC,OAAgB,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChH,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,QAAA,OAAO,CAAA,EAAG,KAAK,CAAA,GAAA,EAAM,GAAG,EAAE;IAC5B;AAEA,IAAA,SAAS,CAAC,GAAgB,EAAE,OAAA,GAAmB,KAAK,EAAA;AAClD,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5J;QACF;AAEA,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACvB;QACF;AACA,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACvB;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAEzB,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AACpG,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACnC;aACK;YACH,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACnC,YAAA,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;;YAGhD,IAAI,GAAG,CAAC,MAAM;AAAE,gBAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;;AAGrC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;oBAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACzB,IAAI,GAAG,CAAC,IAAI;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnC;YACF;iBAAO;;AAEL,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YACpD;QACF;IACF;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;AACnE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;QAC7D,MAAM,MAAM,GAAG,CAAA,EAAG,QAAQ,GAAG,SAAS,CAAA,EAAG,MAAM,CAAA,CAAE;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM;AAAE,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,GAAG,CAAC,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAClE;IAEA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,EAAE;AAC/B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC;AACjE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;AAC7D,YAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;AACnE,YAAA,OAAO,GAAG,QAAQ,CAAA,EAAG,SAAS,CAAA,EAAG,MAAM,EAAE;QAC3C;QACA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;IAC1C;AAGA,IAAA,KAAK,CAAC,GAAW,EAAA,EAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,IAAA,OAAO,CAAC,IAAW,EAAA;QACjB,MAAM,IAAI,GAAG,EAAE;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,SAAS,CAAC,EAAc,EAAE,IAAY,EAAE,KAAa,EAAE,GAAW,EAAA;AAChE,QAAA,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG;IAClE;AAEA,IAAA,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAA;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACrC,QAAA,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;IACrE;IAEA,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,UAAmB,KAAK,EAAA;QAC1E,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,GAAG,CAAC,WAAW,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;qBACtD,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACtF;iBAAO;;AAEL,gBAAA,OAAO,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;YACxH;QACF;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;IACrE;AAEA,IAAA,UAAU,CAAC,CAAS,EAAE,OAAA,GAAmB,KAAK,EAAA;QAC5C,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;QAE1B,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,WAAW,EAAE;gBACnB,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;YAC7E;iBAAO;AACL,gBAAA,OAAO,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;YACpD;QACF;;AAGA,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5F,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC;IACxB;AAEA,IAAA,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,UAAmB,KAAK,EAAA;QACxD,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AACrC,YAAA,IAAI,GAAG,CAAC,WAAW,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,KAAK,CAAC;qBAChE,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;YAC7F;iBAAO;AACL,gBAAA,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;gBAC1D,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC;YAChD;QACF;AACA,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;IAC5C;AAEA,IAAA,UAAU,CAAC,GAAwB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,EAAE;AAClD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;AACnB,gBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AACrB,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;AACnB,gBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;AACrB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC;AACzB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI;AACzB,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,KAAA,GAAgB,CAAC,EAAE,OAAA,GAAkB,CAAC,EAAE,UAAkB,CAAC,EAAA;AAC7G,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AAAE,YAAA,OAAO,KAAK;;;QAIvE,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;AACjD,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,CAAC;AACjC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;AAAE,gBAAA,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;YAC5C,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAChC,QAAA,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;AAElE,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,EAAE;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO,OAAO,KAAK,KAAK;AACpC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;AACrC,YAAA,OAAO,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG;QACzC;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAC7B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;AAC1D,QAAA,OAAO,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,GAAG;IAC3C;AAEA,IAAA,UAAU,CAAC,CAAS,EAAE,OAAA,GAAmB,KAAK,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACpC,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACjC;QACF;QAEA,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE;AACjC,YAAA,CAAC,CAAC,IAAI,GAAG,CAAC;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC5D;aAAO;YACL,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACnC,YAAA,CAAC,CAAC,IAAI,GAAG,CAAC;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjC,gBAAA,EAAE,CAAC,IAAI,GAAG,CAAC;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB;AAEA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;oBAC5C,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;iBAAO;gBACL,IAAI,GAAG,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;;AACpC,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAC7B;QACF;IACF;AAEA,IAAA,WAAW,CAAC,CAAS,EAAE,OAAA,GAAmB,KAAK,EAAA;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7D,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACjC;QACF;QAEA,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE;AACjC,YAAA,CAAC,CAAC,KAAK,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7D;aAAO;YACL,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACnC,YAAA,CAAC,CAAC,KAAK,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjC,gBAAA,EAAE,CAAC,KAAK,GAAG,CAAC;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB;AAEA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;gBACxB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;oBAC5C,IAAI,CAAC,OAAO,EAAE;gBAChB;YACF;iBAAO;gBACL,IAAI,GAAG,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;;AACnC,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B;QACF;IACF;AAEQ,IAAA,oBAAoB,CAAC,GAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;;AAEhC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;QAClC;aAAO;;AAEL,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE;;YAGvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AACzC,YAAA,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;YAC7B;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,IAAqC,EAAE,GAAW,EAAE,UAAmB,KAAK,EAAA;QACrF,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC;YAC3D;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,IAAI,OAAO,EAAE;gBACX,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/B;iBAAO;gBACL,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE;AACjC,gBAAA,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B;QACF;aAAO;YACL,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACnC,YAAA,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB;IACF;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;AACtD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;;YAGrB,IAAI,CAAC,KAAK,MAAM;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,KAAK,MAAM;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D;aAAO;AACL,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,KAAK,MAAM;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAChE;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAE9B,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE;AAC/E,YAAA,GAAG,CAAC,KAAK,GAAG,CAAC;AACb,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC;AACf,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC;QACjB;AAEA,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE;QAC5B,SAAS,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,SAAS,CAAC,KAAK,GAAG,EAAE,EAAE;AAAE,YAAA,SAAS,CAAC,KAAK,GAAG,CAAC;YAAE,SAAS,CAAC,IAAI,EAAE;QAAE;QAEnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAE7B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,gBAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B;AAAO,iBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC9B,gBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AAC/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B;QACF;aAAO;YACL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;AAEA,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;YACnC,IAAI,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;QAC3D;QAEA,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAEvB,IAAI,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,EAAE,EAAS,CAAC;QACpD,IAAI,GAAG,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAS,EAAE,EAAS,CAAC;QAChD,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAS,EAAE,EAAS,CAAC;IACxD;IAEA,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;;YAG5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAE9B,YAAA,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;AAEA,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;;AAG9B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,KAAK,GAAG,KAAK,EAAE;QACjB;;AAGA,QAAA,MAAM,OAAO,GAAG,CAAC,CAAM,KAAI;YACzB,IAAI,CAAC,YAAY,IAAI;AAAE,gBAAA,OAAO,CAAC;AAC/B,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO;AAAE,oBAAA,OAAO,GAAG;gBAC5C,IAAI,CAAC,KAAK,WAAW;oBAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC5F,IAAI,CAAC,KAAK,UAAU;oBAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC3F,IAAI,CAAC,KAAK,YAAY;AAAE,oBAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjF,IAAI,CAAC,KAAK,YAAY;AAAE,oBAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjF,OAAO,CAAC,CAAC;YACX;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;;QAGD,IAAI,MAAM,GAAU,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,GAAG,KAAK;QAChB;aAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE;AACjD,YAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;AACnE,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC7B,gBAAA,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YACjC;AAAO,iBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B;AAAO,iBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7B;iBAAO;;AAEL,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,KAAK,KAAK,aAAa;oBAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;qBACtF,IAAI,KAAK,KAAK,cAAc;oBAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;qBAC7F,IAAI,KAAK,KAAK,cAAc;oBAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;qBAC7F,IAAI,KAAK,KAAK,eAAe;oBAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC;qBAC7G,IAAI,KAAK,KAAK,iBAAiB;oBAAE,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtH;QACF;;QAGA,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGhD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC3D,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;YAC7B;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAE9B,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC;AAEA,YAAA,IAAI,GAAG,CAAC,WAAW,EAAE;gBACnB,IAAI,CAAC,qBAAqB,EAAE;YAC9B;YAEA,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE;QACrB;AAAO,aAAA,IAAI,GAAG,CAAC,KAAK,EAAE;;YAEpB,IAAI,SAAS,GAAG,KAAK;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,gBAAA,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;YACtD;AACA,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YAE3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AAEjC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YACzC;AAEA,YAAA,IAAI,GAAG,CAAC,WAAW,EAAE;gBACnB,IAAI,CAAC,qBAAqB,EAAE;YAC9B;YAEA,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;;YAEL,IAAI,SAAS,GAAG,KAAK;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,gBAAA,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;YACtD;AACA,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AAEhC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;YACxC;YAEA,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;AAEA,IAAA,aAAa,CAAC,IAAgB,EAAA;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ;AACnF,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;QAElF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;YACtB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY;YAClC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;YAClJ,IAAI,GAAG,CAAC,GAAG;AAAE,gBAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,GAAG,CAAC,GAAG;AAAE,gBAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC5E,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,iBAAiB,CAAC;YACnE;QACF;QACA,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE;QAClC,IAAI,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,GAAG,EAAE;AAC9B,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAAE;gBAClF,IAAI,CAAC,YAAY,EAAE;YACrB;iBAAO;gBACL,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAAE;gBAC7C,IAAI,CAAC,OAAO,EAAE;YAChB;YACA,IAAI,GAAG,CAAC,SAAS;gBAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/F;IACF;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,GAAG,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpD;;IAGQ,aAAa,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM;AACjC,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AACtC,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,OAAO,SAAS;AAC1C,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,UAAU;AAC1C,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,qBAAqB;AACzD,QAAA,OAAO,YAAY;IACrB;IAEQ,WAAW,GAAQ,IAAI;IACvB,SAAS,GAAQ,IAAI;IAErB,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QAEzC,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,CAAC,GAA4C,EAAE,GAAuC,KAAI;AACvG,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AACpB,gBAAA,IAAI,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE;AAC1B,oBAAA,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAClD,oBAAA,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;;AAGD,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,MAAK;AAC1C,gBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACrF,oBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;AAC3F,oBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;gBAC7F;qBAAO;AACL,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;oBAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC;gBACtC;AACF,YAAA,CAAC,CAAC;QACJ,CAAC,EAAE,CAAC,CAAC;IACP;AAEA,IAAA,aAAa,CAAC,CAAgB,EAAA;AAC5B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK;AAC3B,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AAExD,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC7B,CAAC,CAAC,cAAc,EAAE;gBAClB,CAAC,CAAC,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACzB;YACA;QACF;AAEA,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC3D,IAAI,KAAK,GAAG,CAAC;YAEb,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC,CAAC;iBAC9B,IAAI,GAAG,KAAK,YAAY;gBAAE,KAAK,GAAG,CAAC;iBACnC,IAAI,GAAG,KAAK,SAAS;gBAAE,KAAK,GAAG,CAAC,CAAC;iBACjC,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC;AAClC,iBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;gBACzB,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,EAAE;;oBAC1B,IAAI,CAAC,SAAS,EAAE;gBACrB;YACF;AAAO,iBAAA,IAAI,GAAG,KAAK,UAAU,EAAE;gBAC7B,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,EAAE;;oBAC1B,IAAI,CAAC,SAAS,EAAE;gBACrB;YACF;AAAO,iBAAA,IAAI,GAAG,KAAK,MAAM,EAAE;gBACzB,CAAC,CAAC,cAAc,EAAE;gBAClB,MAAM,CAAC,GAAe,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3B,gBAAA,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzC;YACF;AAAO,iBAAA,IAAI,GAAG,KAAK,KAAK,EAAE;gBACxB,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;gBACtD,MAAM,CAAC,GAAe,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3B,gBAAA,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzC;YACF;AAAO,iBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;gBAC1B,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,OAAO;oBAAE,IAAI,CAAC,YAAY,EAAE;;oBAC3B,IAAI,CAAC,OAAO,EAAE;gBACnB;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;AAC/F,gBAAA,MAAM,MAAM,GAAe;AACzB,oBAAA,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE;AACtB,oBAAA,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE;AACpB,oBAAA,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE;oBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG,CAAC;iBACd;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AAChC,gBAAA,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;YAChD;QACF;AAAO,aAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AAC9B,YAAA,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC1D,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC,CAAC;iBAC9B,IAAI,GAAG,KAAK,YAAY;gBAAE,KAAK,GAAG,CAAC;iBACnC,IAAI,GAAG,KAAK,SAAS;gBAAE,KAAK,GAAG,CAAC,CAAC;iBACjC,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC;AAClC,iBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;gBACxB,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzB;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK;gBAChC,MAAM,CAAC,GAAe,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AAC/C,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;YACpC;QACF;AAAO,aAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC1D,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC,CAAC;iBAC9B,IAAI,GAAG,KAAK,YAAY;gBAAE,KAAK,GAAG,CAAC;iBACnC,IAAI,GAAG,KAAK,SAAS;gBAAE,KAAK,GAAG,CAAC,CAAC;iBACjC,IAAI,GAAG,KAAK,WAAW;gBAAE,KAAK,GAAG,CAAC;AAClC,iBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;gBACxB,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK;AAChC,gBAAA,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI;AACtB,gBAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAChB,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AACpC,oBAAA,OAAO,EAAE;gBACX;AAAO,qBAAA,IAAI,QAAQ,GAAG,EAAE,EAAE;AACxB,oBAAA,QAAQ,GAAG,QAAQ,GAAG,EAAE;AACxB,oBAAA,OAAO,EAAE;gBACX;AACA,gBAAA,MAAM,CAAC,GAAe,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;AAChE,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAC7B;QACF;IACF;uGA9jDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,4BAAA,EAAA,uCAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,iCAAA,EAAA,0BAAA,EAAA,iCAAA,EAAA,4BAAA,EAAA,mCAAA,EAAA,+BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,uEAAA,EAAA,yBAAA,EAAA,6CAAA,EAAA,6BAAA,EAAA,qBAAA,EAAA,mCAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC/B,07dA+Qc,EAAA,MAAA,EAAA,CAAA,63qCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtQF,YAAY,mMAAE,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA2BzB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA9B9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,CAAC,EAAA,aAAA,EAGtB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,uBAAuB,EAAE,MAAM;AAC/B,wBAAA,8BAA8B,EAAE,qCAAqC;AACrE,wBAAA,6BAA6B,EAAE,uBAAuB;AACtD,wBAAA,8BAA8B,EAAE,2BAA2B;AAC3D,wBAAA,+BAA+B,EAAE,YAAY;AAC7C,wBAAA,4BAA4B,EAAE,+BAA+B;AAC7D,wBAAA,4BAA4B,EAAE,+BAA+B;AAC7D,wBAAA,8BAA8B,EAAE,iCAAiC;AACjE,wBAAA,iCAAiC,EAAE,oCAAoC;AACvE,wBAAA,4BAA4B,EAAE,cAAc;AAC5C,wBAAA,yBAAyB,EAAE,mEAAmE;AAC9F,wBAAA,2BAA2B,EAAE,2CAA2C;AACxE,wBAAA,+BAA+B,EAAE,qBAAqB;AACtD,wBAAA,qCAAqC,EAAE,mBAAmB;AAC1D,wBAAA,gCAAgC,EAAE,oBAAoB;AACtD,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,mBAAmB,EAAE,iBAAiB;AACtC,wBAAA,WAAW,EAAE;AACd,qBAAA,EAAA,QAAA,EAAA,07dAAA,EAAA,MAAA,EAAA,CAAA,63qCAAA,CAAA,EAAA;;sBAOA,YAAY;uBAAC,cAAc;;sBAC3B,YAAY;uBAAC,gBAAgB;;sBAC7B,YAAY;uBAAC,gBAAgB;;;AEtChC;;;;AAIG;MAIU,gBAAgB,CAAA;AAEjB,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACzC,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,UAAU;;AAGV,IAAA,SAAS,GAAG,IAAI,GAAG,EAA8B;;AAEjD,IAAA,YAAY,GAAG,IAAI,OAAO,EAAiD;AAC3E,IAAA,aAAa,GAAG,IAAI,OAAO,EAAkC;;AAE7D,IAAA,cAAc,GAAG,IAAI,OAAO,EAA8B;;AAE1D,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAyD;;AAEvF,IAAA,sBAAsB,GAAG,IAAI,GAAG,EAA0B;AAC1D,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAA0B;AACvD,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAA0B;AACpD,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAoD;AAC9E,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAAiC;AAEtE;;;;AAIG;IACH,SAAS,CAAC,GAAW,EAAE,OAAe,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAA,CAAG,CAAC;AAClD,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,GAAG;QACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjC,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjC,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrC;AAAO,aAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrC,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrC,YAAA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACzC;QACA,OAAO,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAG;IAC/C;AAEA;;AAEG;IACH,QAAQ,CAAC,EAAU,EAAE,SAA6B,EAAA;QAC9C,IAAI,EAAE,EAAE;YACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;QACrC;IACJ;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;QACjB,IAAI,EAAE,EAAE;AACJ,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B;IACJ;AAEA;;;;AAIG;IACH,IAAI,CAAC,EAAU,EAAE,IAAsC,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC;aAAO;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAA,WAAA,CAAa,CAAC;QAC/D;IACJ;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,GAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;IACzB;AAEA;;;;AAIG;IACH,YAAY,CAAC,IAAiB,EAAE,MAAqB,EAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS;QAC1H,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE,KAAK,CAAC;AACpF,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;QACrD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7C,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxC;IACJ;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,IAAiB,EAAA;QAC5B,OAAO,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;IAC9D;AAEA;;AAEG;IACH,IAAI,CAAC,IAAiB,EAAE,MAAsB,EAAA;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,aAAa;AAAE,YAAA,OAAO,aAAa;QAEvC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;QACnC;AACA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,IAAI,EAAE;QACxE,MAAM,OAAO,GAAG,CAAC,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS;QAC1H,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,GAAG,YAAY,CAAC,KAAK;QACpF,MAAM,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE;QACpD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;IAC7C;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,IAAiB,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;AAClD,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC;QACA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7C,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,MAAqB,EAAA;;QAExB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAgB,GAAG,MAAM,CAAC,IAAI;QAC/G,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC;AAC/D,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,IAAI,YAAY,WAAW,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;QACnC;;AAGA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;YAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7C;;QAGA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClC,MAAM,cAAc,GAAG,MAAK;gBACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC9B,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;oBAC5D,MAAM,OAAO,GAAG,CAAC,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS;oBAC1H,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,GAAG,YAAY,CAAC,KAAK;oBACpF,MAAM,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE;AACpD,oBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;gBACtC;AACJ,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC;AAC9C,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC;AAC9C,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QACrF;;AAGA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;YAC5D,MAAM,OAAO,GAAG,CAAC,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS;YAC1H,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,GAAG,YAAY,CAAC,KAAK;YACpF,MAAM,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE;YACpD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7C;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;IAC9C;IAEQ,SAAS,CAAC,MAAqB,EAAE,IAAiB,EAAA;;AAEtD,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,kBAAkB,EAAE;YACrD,mBAAmB,EAAE,IAAI,CAAC,WAAW;AACrC,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC;QAC9C;;AAGA,QAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AAEvC,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa;;AAGvD,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9B,YAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACrC,YAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QACjC;aAAO;AACH,YAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACvC,YAAA,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AACtC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC;QAC/C;;QAGA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;;AAG7C,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAa,KAAI;YACjE,IAAI,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,EAAE;gBACzE,IAAI,YAAY,GAAG,KAAK;AACxB,gBAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AACxB,oBAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;gBAChD;AACA,gBAAA,IAAI,CAAC,KAAK,GAAG,YAAY;AACzB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;AAC9D,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,EAAE,KAAK,EAAE,CAAC;AAC3D,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D;;AAGA,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC9B,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;gBACvC,CAAC,EAAE,CAAC,CAAC;YACT;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC9D,IAAI,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,mBAAmB,EAAE;AACzE,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;AAC9D,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/D,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D;;AAGA,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC9B,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;gBACvC,CAAC,EAAE,CAAC,CAAC;YACT;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;;QAGxD,IAAI,OAAO,GAAuB,IAAI;QACtC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC9C,YAAA,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG;AACrE,YAAA,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACvC,YAAA,OAAO,CAAC,SAAS,GAAG,qBAAqB;AACzC,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG;;;;;;kDAMc,OAAO,CAAA;;aAE5C;AACD,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;AAGlC,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC1B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC1C,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;oBACrC,CAAC,CAAC,eAAe,EAAE;AACnB,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;AACvC,gBAAA,CAAC,CAAC;YACN,CAAC,EAAE,GAAG,CAAC;YACP,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;QAClD;;QAGA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC/C,YAAA,MAAM,aAAa,GAAG,CAAC,CAAQ,KAAI;AAC/B,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;gBACvC;AACJ,YAAA,CAAC;;YAGD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC;;AAG5D,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC1B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC;;gBAE7C,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC/C,oBAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC;gBACzD;YACJ,CAAC,EAAE,GAAG,CAAC;YACP,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;QACrD;;AAGA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,KAAK,GAAkB,IAAI;YAC/B,MAAM,iBAAiB,GAAG,MAAK;AAC3B,gBAAA,IAAI,KAAK;oBAAE,oBAAoB,CAAC,KAAK,CAAC;AACtC,gBAAA,KAAK,GAAG,qBAAqB,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC;AAC/C,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AAED,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAEtF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,MAAK;AAC5C,gBAAA,IAAI,KAAK;oBAAE,oBAAoB,CAAC,KAAK,CAAC;AACtC,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC;gBACvD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACjE,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,YAAY;IACvB;IAEQ,mBAAmB,CAAC,IAAiB,EAAE,WAAwB,EAAA;AACnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE;AAElE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;QACxE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU;AAEzE,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW;AACtC,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY;AAEvC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO;AAC/B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO;;AAG9B,QAAA,IAAI,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE;AAClE,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;QAC1C;;AAGA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG;QACzC,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,GAAG,EAAE;YAC7C,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAA,EAAG,cAAc,IAAI;AAClD,YAAA,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY;AAC1C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc,EAAE,cAAc,CAAC;AACtE,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,IAAI,CAAC,CAAC;QACxE;aAAO;YACH,IAAI,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE;gBAC7C,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,CAAC;YACnD;YACA,IAAI,IAAI,GAAG,OAAO;gBAAE,IAAI,GAAG,OAAO;QACtC;QAEA,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI;QAClC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;QACpC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACnC;IAEQ,OAAO,CAAC,GAAqC,EAAE,OAA4B,EAAA;;QAE/E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC;;QAGA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;QACzD,IAAI,eAAe,EAAE;AACjB,YAAA,eAAe,EAAE;AACjB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;QACpD,IAAI,UAAU,EAAE;YACZ,YAAY,CAAC,UAAU,CAAC;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,IAAI,UAAU,EAAE;YACZ,YAAY,CAAC,UAAU,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;QACrC;QAEA,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;YAC7B,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAM,EAAE;QAClC;AACA,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE;AAC/B,YAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;QAC3C;;QAGA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;QACrD,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC;AACnD,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3C;;QAGA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3C,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;QACrC;QAEA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpC,GAAG,CAAC,OAAO,EAAE;IACjB;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,IAAY,EAAA;AACf,QAAA,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;IACnE;AAEA;;AAEG;AACH,IAAA,KAAK,CAAC,GAAoB,EAAE,MAAA,GAAiB,CAAC,EAAA;AAC1C,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACrB,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;AACxB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG;QACnB;AACA,QAAA,OAAO,GAAG;IACd;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,IAAgB,EAAE,SAAA,GAAoB,YAAY,EAAA;AACrD,QAAA,MAAM,GAAG,GAA2B;YAChC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9B,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACzB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,YAAA,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;SACzB;QAED,OAAO,SAAS,CAAC,OAAO,CAAC,+CAA+C,EAAE,CAAC,KAAK,EAAE,OAAO,KAAI;AACzF,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,OAAO;YAClB;AACA,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK;AAC9B,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,IAAgB,EAAA;AACpB,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IACvG;AAEA;;AAEG;IACH,QAAQ,CAAC,IAAY,EAAE,KAAa,EAAA;QAChC,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7D,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,OAAc,EAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE;QACtC,OAAO;AACH,YAAA,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE;AAC5B,YAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;AAC1B,YAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE;AACxB,YAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;AAC1B,YAAA,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE;AAC9B,YAAA,OAAO,EAAE,QAAQ,CAAC,UAAU;SAC/B;IACL;AAEA;;AAEG;AACH,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACvD,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;QAC5B;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;QACtE;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE;AACrF,YAAA,OAAO,EAAE,GAAG,KAAK,EAAgB;QACrC;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;YAE3B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK;AACtE,gBAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;AACrB,oBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7B;YACJ;;AAEA,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;YACpB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AAC9B,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7B;AACA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACjC;AAEA,QAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;;QAG5D,IAAI,SAAS,GAAG,MAAM;QACtB,IAAI,SAAS,IAAI,wCAAwC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACvE,YAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/D,YAAA,SAAS,GAAG,aAAa,GAAG,SAAS;QACzC;;AAGA,QAAA,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,iGAAiG,CAAC,GAAG,IAAI;QACnJ,IAAI,KAAK,EAAE;YACP,OAAO;gBACH,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5B,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;gBACjC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;gBAC5C,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;gBAC9C,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;aAChD;QACL;;AAGA,QAAA,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC,GAAG,IAAI;QACjF,IAAI,OAAO,EAAE;YACT,OAAO;gBACH,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC9B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AACnC,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;aACZ;QACL;;AAGA,QAAA,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI;QAChE,IAAI,MAAM,EAAE;YACR,OAAO;gBACH,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7B,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;aACZ;QACL;AAEA,QAAA,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE;;QAEtD,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;QAC5B;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7B;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,MAAsB,EAAA;AAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC;QAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAkB,EAAE;;AAG9B,QAAA,MAAM,SAAS,GAA8B;AACzC,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE;SACZ;;;AAID,QAAA,IAAI,OAAO,GAAG,CAAC,QAAQ;QACvB,IAAI,OAAO,GAAG,QAAQ;QAEtB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,MAAM,CAAC,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAe;AACjD,gBAAA,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;YAClE;AACA,YAAA,IAAI,MAAM,CAAC,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAe;AACjD,gBAAA,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;YAClE;QACJ;QAEA,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;YACpD,MAAM,MAAM,GAA6D,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;AACtG,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,MAAM;;AAG1B,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;YAC5C,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,OAAO,IAAI,QAAQ,GAAG,OAAO;;YAG1D,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;AACzC,gBAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;YACpE;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,EAAE;gBACb,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;gBAChC,MAAM,OAAO,GAAG,CAAA,EAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AAE5D,gBAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;;AAEnC,oBAAA,MAAM,MAAM,GAAG,CAAC,KAAsC,KAAI;wBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,4BAAA,OAAO,KAAK;;;wBAG3C,IAAI,KAAK,CAAC,GAAG,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,GAAG,CAAC;wBACjC,IAAI,KAAK,CAAC,OAAO,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,OAAO,CAAC;;wBAGzC,MAAM,MAAM,GAAG,CAAA,EAAA,EAAK,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAChC,wBAAA,MAAM,UAAU,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBAC5D,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,MAAM,CAAC;wBACvC,IAAI,KAAK,CAAC,UAAU,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,UAAU,CAAC;;AAG/C,wBAAA,MAAM,OAAO,GAAG,CAAA,IAAA,EAAO,CAAC,EAAE;wBAC1B,MAAM,WAAW,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;wBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,OAAO,CAAC;wBACzC,IAAI,KAAK,CAAC,WAAW,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,WAAW,CAAC;wBAEjD,OAAO,EAAE,CAAC;AACd,oBAAA,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC;AACtE,oBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACtC,wBAAA,MAAM,CAAC,IAAI,GAAG,MAAM;oBACxB;gBAEJ;qBAAO;;AAEH,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAA8B;oBACrD,IAAI,OAAO,CAAC,GAAG,CAAC;AAAE,wBAAA,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;yBACvC,IAAI,OAAO,CAAC,OAAO,CAAC;AAAE,wBAAA,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC7D;YACJ;;YAGA,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACjC,MAAM,EAAE,GAAG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;gBAC1B,IAAI,SAAS,CAAC,EAAE,CAAC;AAAE,oBAAA,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;YAClD;;AAGA,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;gBAChC,MAAM,OAAO,GAAG,CAAA,EAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;gBAC5D,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,QAAQ;AAEjD,gBAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChE,oBAAA,MAAM,CAAC,OAAO,GAAG,GAAG;gBACxB;AAAO,qBAAA,IAAI,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AACjE,oBAAA,MAAM,CAAC,OAAO,GAAG,GAAG;gBACxB;YACJ;AAEA,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;AACvC,YAAA,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;YACtC,MAAM,CAAC,GAAG,eAAe,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC;AACnB,aAAA,CAAC;QACN;;AAGA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC;AACnB,aAAA,CAAC;QACN;;AAGA,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;AACxC,YAAA,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;YACtC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC;AACnB,aAAA,CAAC;QACN;;AAGA,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;gBAChB,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAClE,MAAM,CAAC,UAAW,CAAC,GAAG,EAAE,CAAC,OAAO,KAAI;AAChC,oBAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAChC,gBAAA,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxB,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,IAAgB,EAAA;AACtB,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACpC,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;;AAGlC,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAAE,IAAI,CAAC,OAAO,EAAE;QAAE;AAC3D,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE;QAAE;AACzD,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;;AAGnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAE1C,QAAA,OAAO,IAAI;IACf;uGA3yBS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA;;2FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACND;;;;;;;;;;;;;;;;AAgBG;MAgBU,kBAAkB,CAAA;AAC3B;;AAEG;IACH,WAAW,GAAG,KAAK,CAAwC,EAAE,wDAAI,KAAK,EAAE,SAAS,EAAA,CAAG;;AAG1E,IAAA,MAAM,GAAG,IAAI,YAAY,EAAU;;AAEnC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAO;;AAE/B,IAAA,IAAI,GAAG,IAAI,YAAY,EAAO;;AAE9B,IAAA,SAAS,GAAG,IAAI,YAAY,EAAO;;AAEnC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAO;;AAE/B,IAAA,OAAO,GAAG,IAAI,YAAY,EAAO;;AAEjC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;IAEvC,YAAY,GAA4C,IAAI;AAC5D,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAGzC,IAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,EAAG,CAAC;AAC1B,IAAA,SAAS,GAAG,MAAK,EAAG,CAAC;IACrB,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,SAAS;AAEtC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;YACpC,MAAM,MAAM,GAAkB,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE;YAClG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE;gBACxC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;YACvC;AACA,YAAA,IAAI,MAAM,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;AACrD,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE;AACnE,oBAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK;AACjC,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC5F,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,MAAM;gBACxC;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,EAAE;AACvB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;QACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,EAAE,eAAe,EAAE;YACvD,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD;QACA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY;IAC9C;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAE,UAAmB,EAAA;QACjC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;IAC/C;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,KAAY,EAAA;AAChB,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACtB;AAEA;;AAEG;IACH,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7D;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;QACpC,MAAM,MAAM,GAAkB,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE;;AAGlG,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACd,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QACvC;;AAGA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;QAC3D,IAAI,eAAe,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,GAAG,eAAe;QAClC;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;QAC9B;;AAGA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI;QAC5B,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAI;AAC/B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,SAAS,EAAE;AAEhB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC7C,YAAA,IAAI,QAAQ;AAAE,gBAAA,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;AAC5C,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,KAAI;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC;AAClC,QAAA,CAAC;AAED,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;QAChC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAI;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,UAAU;AAAE,gBAAA,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;AAChD,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS;QACpC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAI;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAClD,YAAA,IAAI,WAAW;AAAE,gBAAA,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;AAClD,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;QAC5B,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAI;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC9C,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;AAC1C,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;QAChC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAI;AAClC,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAChD,YAAA,IAAI,SAAS;AAAE,gBAAA,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;AAC9C,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;AAC9B,QAAA,MAAM,CAAC,KAAK,GAAG,MAAK;YAChB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,SAAS;AAAE,gBAAA,SAAS,EAAE;AAC9B,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;AAE3E,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC7B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC5B,YAAA,CAAC,CAAC;QACN;IACJ;AAEA;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,aAAa;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACzF,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,OAAO,EAAE;AACb,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC5B;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE;YACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACrD;IACJ;uGArMS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,wbAXhB,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE;aACV,CAAC,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAOO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE;yBACV,CAAC;AACF,oBAAA,IAAI,EAAE;AACF,wBAAA,SAAS,EAAE,QAAQ;AACnB,wBAAA,SAAS,EAAE,QAAQ;AACnB,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;sBAQI;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;ACzDL;;AAEG;;ACFH;;AAEG;;;;"}