{"version":3,"file":"webilix-ngx-calendar-m3.mjs","sources":["../../../ngx-calendar-m3/src/lib/components/date/ngx-calendar-date.component.ts","../../../ngx-calendar-m3/src/lib/components/date/ngx-calendar-date.component.html","../../../ngx-calendar-m3/src/lib/components/moment/ngx-calendar-moment.component.ts","../../../ngx-calendar-m3/src/lib/components/moment/ngx-calendar-moment.component.html","../../../ngx-calendar-m3/src/lib/components/week/ngx-calendar-week.component.ts","../../../ngx-calendar-m3/src/lib/components/week/ngx-calendar-week.component.html","../../../ngx-calendar-m3/src/lib/components/month/ngx-calendar-month.component.ts","../../../ngx-calendar-m3/src/lib/components/month/ngx-calendar-month.component.html","../../../ngx-calendar-m3/src/lib/components/year/ngx-calendar-year.component.ts","../../../ngx-calendar-m3/src/lib/components/year/ngx-calendar-year.component.html","../../../ngx-calendar-m3/src/lib/container/bottom-sheet/bottom-sheet.component.ts","../../../ngx-calendar-m3/src/lib/container/bottom-sheet/bottom-sheet.component.html","../../../ngx-calendar-m3/src/lib/container/dialog/dialog.component.ts","../../../ngx-calendar-m3/src/lib/container/dialog/dialog.component.html","../../../ngx-calendar-m3/src/lib/ngx-calendar.service.ts","../../../ngx-calendar-m3/src/lib/ngx-calendar.component.ts","../../../ngx-calendar-m3/src/lib/ngx-calendar.component.html","../../../ngx-calendar-m3/src/public-api.ts","../../../ngx-calendar-m3/src/webilix-ngx-calendar-m3.ts"],"sourcesContent":["import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { JalaliDateTime, JalaliDateTimeCalendar } from '@webilix/jalali-date-time';\n\nimport { INgxCalendarDate } from '../../ngx-calendar.interface';\n\n@Component({\n    selector: 'ngx-calendar-date',\n    imports: [MatIconButton, MatIcon],\n    templateUrl: './ngx-calendar-date.component.html',\n    styleUrl: './ngx-calendar-date.component.scss',\n    animations: [\n        trigger('month', [\n            transition(':enter', [style({ height: '*', opacity: 0 }), animate('150ms', style({ height: '*', opacity: 1 }))]),\n        ]),\n    ],\n})\nexport class NgxCalendarDateComponent implements OnInit, OnChanges {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3-date';\n\n    @Input({ required: false }) value?: Date;\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Output() onChange: EventEmitter<INgxCalendarDate> = new EventEmitter<INgxCalendarDate>();\n\n    public view: 'CALENDAR' | 'MONTH' = 'CALENDAR';\n    public values!: { today: string; selected: string; minDate: string; maxDate: string };\n    public calendar!: JalaliDateTimeCalendar;\n\n    public year!: number;\n    public years: number[] = [];\n    public seasons: { title: string; month: string }[][] = [\n        [\n            { title: 'فروردین', month: '' },\n            { title: 'اردیبهشت', month: '' },\n            { title: 'خرداد', month: '' },\n        ],\n        [\n            { title: 'تیر', month: '' },\n            { title: 'مرداد', month: '' },\n            { title: 'شهریور', month: '' },\n        ],\n        [\n            { title: 'مهر', month: '' },\n            { title: 'آبان', month: '' },\n            { title: 'آذر', month: '' },\n        ],\n        [\n            { title: 'دی', month: '' },\n            { title: 'بهمن', month: '' },\n            { title: 'اسفند', month: '' },\n        ],\n    ];\n\n    private jalali = JalaliDateTime();\n\n    ngOnInit(): void {\n        this.initValues();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.initValues();\n    }\n\n    formatDate(date: Date): string {\n        return this.jalali.toString(date, { format: 'Y-M-D' });\n    }\n\n    initValues(): void {\n        let minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        let maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        // Check Value\n        if (this.value && minDate && this.formatDate(this.value) < this.formatDate(minDate)) this.value = undefined;\n        if (this.value && maxDate && this.formatDate(this.value) > this.formatDate(maxDate)) this.value = undefined;\n\n        this.values = {\n            today: this.formatDate(new Date()),\n            selected: this.value ? this.formatDate(this.value) : '',\n            minDate: minDate ? this.formatDate(minDate) : '0000-00-00',\n            maxDate: maxDate ? this.formatDate(maxDate) : '9999-99-99',\n        };\n\n        const month: string = this.jalali.toString(this.value || new Date(), { format: 'Y-M' });\n        this.calendar = this.jalali.calendar(month);\n        this.view = 'CALENDAR';\n    }\n\n    changeMonth(change: number): void {\n        let [year, month] = this.calendar.month.split('-').map((v: string) => +v);\n        switch (change) {\n            case 12:\n            case -12:\n                year += change === 12 ? 1 : -1;\n                break;\n\n            case 1:\n            case -1:\n                month += change;\n                if (month === 13) {\n                    year++;\n                    month = 1;\n                }\n                if (month === 0) {\n                    year--;\n                    month = 12;\n                }\n                break;\n\n            case 0:\n                [year, month] = this.values.today.split('-').map((v: string) => +v);\n                break;\n        }\n\n        this.calendar = this.jalali.calendar(year.toString() + '-' + month.toString().padStart(2, '0'));\n    }\n\n    setDate(value: string): void {\n        const gregorian: string = this.jalali.gregorian(value).date;\n        const date: Date = this.jalali.periodDay(1, new Date(gregorian + 'T00:00:00.000Z')).from;\n        const title: string = this.jalali.toFullText(date, { format: 'W، d N Y' });\n        const jalali: string = this.formatDate(date);\n\n        this.values.selected = value;\n        this.onChange.next({ date, title, jalali });\n    }\n\n    toggleView(): void {\n        this.view = this.view === 'CALENDAR' ? 'MONTH' : 'CALENDAR';\n        if (this.view === 'MONTH') this.changeYear(+this.calendar.month.substring(0, 4));\n    }\n\n    changeYear(year?: number): void {\n        if (year && year < 1000) return;\n        this.year = year || +this.values.today.substring(0, 4);\n\n        let decade: number = this.year - (this.year % 10);\n        if (decade <= 1020) decade = 1020;\n        this.years = [decade - 20, decade - 10, decade, decade + 10, decade + 20];\n        this.seasons.forEach((season, s: number) => {\n            season.forEach((month, m: number) => {\n                month.month = `${this.year.toString()}-${(s * 3 + m + 1).toString().padStart(2, '0')}`;\n            });\n        });\n    }\n\n    setMonth(month: string): void {\n        this.calendar = this.jalali.calendar(month);\n        this.view = 'CALENDAR';\n    }\n}\n","<div class=\"calendar-header\">\n    <button mat-icon-button type=\"button\" (click)=\"toggleView()\">\n        <mat-icon>{{ view === 'CALENDAR' ? 'calendar_month' : 'close' }}</mat-icon>\n    </button>\n    <div class=\"title\">{{ view === 'CALENDAR' ? calendar.title : year }}</div>\n\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(-12) : changeYear(year - 10)\">\n        <mat-icon>keyboard_double_arrow_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(-1) : changeYear(year - 1)\">\n        <mat-icon>chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(0) : changeYear(year)\">\n        <mat-icon>radio_button_checked</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(1) : changeYear(year + 1)\">\n        <mat-icon>chevron_left</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(12) : changeYear(year + 10)\">\n        <mat-icon>keyboard_double_arrow_left</mat-icon>\n    </button>\n</div>\n\n<div class=\"calendar-nav\">\n    @switch (view) {\n    <!-- CALENDAR -->\n    @case ('CALENDAR') {\n    <!-- NAMES  -->\n    @for (day of ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج']; track $index) {\n    <div class=\"item\">{{ day }}</div>\n    } } @case ('MONTH') {\n    <!-- YEARS -->\n    @for (item of years; track $index) {\n    <div class=\"item click\" (click)=\"changeYear(item)\">{{ item }}</div>\n    } } }\n</div>\n\n<div class=\"calendar-content\">\n    <!-- CALENDAR VIEW -->\n    <section class=\"calendar-view\" [style.visibility]=\"view === 'CALENDAR' ? 'visible' : 'hidden'\">\n        <!-- WEEK -->\n        @for ( week of calendar.weeks; track $index) {\n        <div class=\"week\">\n            <!-- DAYS -->\n            @for (day of week; track $index) {\n            <div\n                class=\"day\"\n                [class.day-today]=\"day.date === values.today\"\n                [class.day-selected]=\"day.date === values.selected\"\n                [class.day-disable]=\"day.month !== calendar.month || day.date > values.maxDate || day.date < values.minDate\"\n                (click)=\"\n                    day.month !== calendar.month || day.date > values.maxDate || day.date < values.minDate\n                        ? null\n                        : setDate(day.date)\n                \"\n            >\n                {{ day.day }}\n            </div>\n            }\n        </div>\n        }\n    </section>\n\n    <!-- MONTH VIEW -->\n    @if (view === 'MONTH') {\n    <section class=\"month-view\" [@month]>\n        <!-- SEASON -->\n        @for (season of seasons; track $index) {\n        <div class=\"season\">\n            <!-- MONTH -->\n            @for (month of season; track $index) {\n            <div\n                class=\"month\"\n                [class.month-disable]=\"\n                    (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n                \"\n                (click)=\"\n                    (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n                        ? null\n                        : setMonth(month.month)\n                \"\n            >\n                {{ month.title }}\n            </div>\n            }\n        </div>\n        }\n    </section>\n    }\n</div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { JalaliDateTime } from '@webilix/jalali-date-time';\nimport { NgxHelperDatePipe } from '@webilix/ngx-helper-m3';\n\nimport { INgxCalendarDate, INgxCalendarMoment } from '../../ngx-calendar.interface';\n\nimport { NgxCalendarDateComponent } from '../date/ngx-calendar-date.component';\n\n@Component({\n    selector: 'ngx-calendar-moment',\n    imports: [MatButton, MatMenuModule, NgxHelperDatePipe, NgxCalendarDateComponent],\n    templateUrl: './ngx-calendar-moment.component.html',\n    styleUrl: './ngx-calendar-moment.component.scss',\n})\nexport class NgxCalendarMomentComponent implements OnInit, OnChanges {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3-moment';\n\n    @Input({ required: false }) value?: Date;\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Output() onChange: EventEmitter<INgxCalendarMoment> = new EventEmitter<INgxCalendarMoment>();\n\n    public canSubmit: boolean = false;\n    public dateString!: string;\n\n    public hour!: string;\n    public hours: string[] = [...Array(24).keys()].map((hour: number) => hour.toString().padStart(2, '0'));\n\n    public minute!: string;\n    public minutes: string[] = [...Array(60).keys()].map((minute: number) => minute.toString().padStart(2, '0'));\n\n    private jalali = JalaliDateTime();\n\n    ngOnInit(): void {\n        this.initValues();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.initValues();\n    }\n\n    formatDate(date: Date): string {\n        return this.jalali.toString(date, { format: 'Y-M-D H:I' });\n    }\n\n    getMinMax(): { minDate: Date | undefined; maxDate: Date | undefined } {\n        const minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        const maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        return { minDate, maxDate };\n    }\n\n    initValues(): void {\n        const updateDate = (date: Date): void => {\n            date.setSeconds(0);\n            date.setMilliseconds(0);\n        };\n        let { minDate, maxDate } = this.getMinMax();\n\n        if (this.value) updateDate(this.value);\n        if (minDate) updateDate(minDate);\n        if (maxDate) updateDate(maxDate);\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        // Check Value\n        if (this.value && minDate && this.formatDate(this.value) < this.formatDate(minDate)) this.value = undefined;\n        if (this.value && maxDate && this.formatDate(this.value) > this.formatDate(maxDate)) this.value = undefined;\n\n        this.hour = (this.value || new Date()).getHours().toString().padStart(2, '0');\n        this.minute = (this.value || new Date()).getMinutes().toString().padStart(2, '0');\n        this.updateValue();\n    }\n\n    updateValue(): void {\n        this.canSubmit = false;\n        if (!this.value) return;\n\n        const { minDate, maxDate } = this.getMinMax();\n\n        this.value.setHours(+this.hour);\n        this.value.setMinutes(+this.minute);\n        this.value.setSeconds(0);\n        this.value.setMilliseconds(0);\n\n        if (minDate && this.formatDate(this.value) < this.formatDate(minDate)) {\n            this.value.setHours(minDate.getHours());\n            this.value.setMinutes(minDate.getMinutes());\n        }\n\n        if (maxDate && this.formatDate(this.value) > this.formatDate(maxDate)) {\n            this.value.setHours(maxDate.getHours());\n            this.value.setMinutes(maxDate.getMinutes());\n        }\n\n        this.hour = this.value.getHours().toString().padStart(2, '0');\n        this.minute = this.value.getMinutes().toString().padStart(2, '0');\n        this.canSubmit = true;\n    }\n\n    setDate(date: INgxCalendarDate): void {\n        this.value = date.date;\n        this.updateValue();\n    }\n\n    checkHour(hour: string): boolean {\n        const { minDate, maxDate } = this.getMinMax();\n\n        if (!this.value) return false;\n        if (!minDate && !maxDate) return true;\n\n        const check: string = this.jalali.toString(this.value, { format: `Y-M-D ${hour}` });\n        if (minDate && check < this.formatDate(minDate).substring(0, 13)) return false;\n        if (maxDate && check > this.formatDate(maxDate).substring(0, 13)) return false;\n        return true;\n    }\n\n    setHour(hour: string) {\n        this.hour = hour;\n        this.updateValue();\n    }\n\n    checkMinute(minute: string): boolean {\n        const { minDate, maxDate } = this.getMinMax();\n\n        if (!this.value) return false;\n        if (!minDate && !maxDate) return true;\n\n        const check: string = this.jalali.toString(this.value, { format: `Y-M-D H:${minute}` });\n        if (minDate && check < this.formatDate(minDate)) return false;\n        if (maxDate && check > this.formatDate(maxDate)) return false;\n        return true;\n    }\n\n    setMinute(minute: string) {\n        this.minute = minute;\n        this.updateValue();\n    }\n\n    onSubmit(): void {\n        if (!this.value || !this.canSubmit) return;\n\n        const moment: Date = new Date(this.value.getTime());\n        const title: string = this.jalali.toFullText(moment, { format: 'W، d N Y H:I' });\n        const jalali: string = this.formatDate(moment);\n        this.onChange.next({ moment, title, jalali });\n    }\n}\n","<ngx-calendar-date [value]=\"value\" [minDate]=\"minDate\" [maxDate]=\"maxDate\" (onChange)=\"setDate($event)\"></ngx-calendar-date>\n<div class=\"time\">\n    <div class=\"date\">{{ value | ngxHelperDate }}</div>\n\n    @if (value) {\n    <button mat-button type=\"button\" class=\"value\" [matMenuTriggerFor]=\"minuteMenu\" [disabled]=\"!value\">{{ minute }}</button>\n    <mat-menu #minuteMenu=\"matMenu\" [yPosition]=\"'above'\" class=\"ngx-calendar-m3-moment-minute\">\n        @for (minute of minutes; track $index) {\n        <button mat-menu-item (click)=\"setMinute(minute)\" [disabled]=\"!checkMinute(minute)\">\n            <span class=\"minute\">{{ minute }}</span>\n        </button>\n        }\n    </mat-menu>\n\n    <div class=\"colon\" [style.opacity]=\"value ? 1 : 0.5\">:</div>\n\n    <button mat-button type=\"button\" class=\"value\" [matMenuTriggerFor]=\"hourMenu\" [disabled]=\"!value\">{{ hour }}</button>\n    <mat-menu #hourMenu=\"matMenu\" [yPosition]=\"'above'\" class=\"ngx-calendar-m3-moment-hour\">\n        @for (hour of hours; track $index) {\n        <button mat-menu-item (click)=\"setHour(hour)\" [disabled]=\"!checkHour(hour)\">\n            <span class=\"hour\">{{ hour }}</span>\n        </button>\n        }\n    </mat-menu>\n    }\n\n    <button mat-button type=\"button\" class=\"submit\" (click)=\"onSubmit()\" [disabled]=\"!canSubmit\">تایید</button>\n</div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { Helper } from '@webilix/helper-library';\nimport { JalaliDateTime, JalaliDateTimeCalendar, JalaliDateTimePeriod } from '@webilix/jalali-date-time';\n\nimport { INgxCalendarWeek } from '../../ngx-calendar.interface';\n\n@Component({\n    selector: 'ngx-calendar-week',\n    imports: [MatIconButton, MatIcon],\n    templateUrl: './ngx-calendar-week.component.html',\n    styleUrl: './ngx-calendar-week.component.scss',\n    animations: [\n        trigger('month', [\n            transition(':enter', [style({ height: '*', opacity: 0 }), animate('150ms', style({ height: '*', opacity: 1 }))]),\n        ]),\n    ],\n})\nexport class NgxCalendarWeekComponent implements OnInit, OnChanges {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3-week';\n\n    @Input({ required: false }) value?: Date | { from: Date; to: Date };\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Output() onChange: EventEmitter<INgxCalendarWeek> = new EventEmitter<INgxCalendarWeek>();\n\n    public view: 'CALENDAR' | 'MONTH' = 'CALENDAR';\n    public values!: { today: string; selected: string; minDate: string; maxDate: string };\n    public calendar!: JalaliDateTimeCalendar;\n\n    public year!: number;\n    public years: number[] = [];\n    public seasons: { title: string; month: string }[][] = [\n        [\n            { title: 'فروردین', month: '' },\n            { title: 'اردیبهشت', month: '' },\n            { title: 'خرداد', month: '' },\n        ],\n        [\n            { title: 'تیر', month: '' },\n            { title: 'مرداد', month: '' },\n            { title: 'شهریور', month: '' },\n        ],\n        [\n            { title: 'مهر', month: '' },\n            { title: 'آبان', month: '' },\n            { title: 'آذر', month: '' },\n        ],\n        [\n            { title: 'دی', month: '' },\n            { title: 'بهمن', month: '' },\n            { title: 'اسفند', month: '' },\n        ],\n    ];\n\n    private jalali = JalaliDateTime();\n\n    ngOnInit(): void {\n        this.initValues();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.initValues();\n    }\n\n    formatDate(date: Date): string {\n        return this.jalali.toString(date, { format: 'Y-M-D' });\n    }\n\n    initValues(): void {\n        let minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        let maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        const getWeek = (date: Date, period: 'from' | 'to'): string => {\n            const week: JalaliDateTimePeriod = this.jalali.periodWeek(1, date);\n            return this.formatDate(period === 'from' ? week.from : week.to);\n        };\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        // Check Value\n        let value: Date | undefined = this.value ? ('from' in this.value ? this.value.from : this.value) : undefined;\n        if (value && minDate && this.formatDate(value) < getWeek(minDate, 'from')) value = undefined;\n        if (value && maxDate && this.formatDate(value) > getWeek(maxDate, 'to')) value = undefined;\n\n        this.values = {\n            today: this.formatDate(new Date()),\n            selected: value ? getWeek(value, 'from') : '',\n            minDate: minDate ? getWeek(minDate, 'from') : '0000-00-00',\n            maxDate: maxDate ? getWeek(maxDate, 'to') : '9999-99-99',\n        };\n\n        const month: string = this.jalali.toString(value || new Date(), { format: 'Y-M' });\n        this.calendar = this.jalali.calendar(month);\n        this.view = 'CALENDAR';\n    }\n\n    changeMonth(change: number): void {\n        let [year, month] = this.calendar.month.split('-').map((v: string) => +v);\n        switch (change) {\n            case 12:\n            case -12:\n                year += change === 12 ? 1 : -1;\n                break;\n\n            case 1:\n            case -1:\n                month += change;\n                if (month === 13) {\n                    year++;\n                    month = 1;\n                }\n                if (month === 0) {\n                    year--;\n                    month = 12;\n                }\n                break;\n\n            case 0:\n                [year, month] = this.values.today.split('-').map((v: string) => +v);\n                break;\n        }\n\n        this.calendar = this.jalali.calendar(year.toString() + '-' + month.toString().padStart(2, '0'));\n    }\n\n    setDate(value: string): void {\n        const gregorian: string = this.jalali.gregorian(value).date;\n        const date: Date = this.jalali.periodDay(1, new Date(gregorian + 'T00:00:00.000Z')).from;\n        const period: JalaliDateTimePeriod = this.jalali.periodWeek(1, date);\n        const title: string = Helper.DATE.jalaliPeriod(period.from, period.to);\n\n        this.values.selected = this.formatDate(period.from);\n        this.onChange.next({ period, title });\n    }\n\n    toggleView(): void {\n        this.view = this.view === 'CALENDAR' ? 'MONTH' : 'CALENDAR';\n        if (this.view === 'MONTH') this.changeYear(+this.calendar.month.substring(0, 4));\n    }\n\n    changeYear(year?: number): void {\n        if (year && year < 1000) return;\n        this.year = year || +this.values.today.substring(0, 4);\n\n        let decade: number = this.year - (this.year % 10);\n        if (decade <= 1020) decade = 1020;\n        this.years = [decade - 20, decade - 10, decade, decade + 10, decade + 20];\n        this.seasons.forEach((season, s: number) => {\n            season.forEach((month, m: number) => {\n                month.month = `${this.year.toString()}-${(s * 3 + m + 1).toString().padStart(2, '0')}`;\n            });\n        });\n    }\n\n    setMonth(month: string): void {\n        this.calendar = this.jalali.calendar(month);\n        this.view = 'CALENDAR';\n    }\n}\n","<div class=\"calendar-header\">\n    <button mat-icon-button type=\"button\" (click)=\"toggleView()\">\n        <mat-icon>{{ view === 'CALENDAR' ? 'calendar_month' : 'close' }}</mat-icon>\n    </button>\n    <div class=\"title\">{{ view === 'CALENDAR' ? calendar.title : year }}</div>\n\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(-12) : changeYear(year - 10)\">\n        <mat-icon>keyboard_double_arrow_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(-1) : changeYear(year - 1)\">\n        <mat-icon>chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(0) : changeYear(year)\">\n        <mat-icon>radio_button_checked</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(1) : changeYear(year + 1)\">\n        <mat-icon>chevron_left</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"view === 'CALENDAR' ? changeMonth(12) : changeYear(year + 10)\">\n        <mat-icon>keyboard_double_arrow_left</mat-icon>\n    </button>\n</div>\n\n<div class=\"calendar-nav\">\n    @switch (view) {\n    <!-- CALENDAR -->\n    @case ('CALENDAR') {\n    <!-- NAMES  -->\n    @for (day of ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج']; track $index) {\n    <div class=\"item\">{{ day }}</div>\n    } } @case ('MONTH') {\n    <!-- YEARS -->\n    @for (item of years; track $index) {\n    <div class=\"item click\" (click)=\"changeYear(item)\">{{ item }}</div>\n    } } }\n</div>\n\n<div class=\"calendar-content\">\n    <!-- CALENDAR VIEW -->\n    <section class=\"calendar-view\" [style.visibility]=\"view === 'CALENDAR' ? 'visible' : 'hidden'\">\n        <!-- WEEK -->\n        @for ( week of calendar.weeks; track $index) {\n        <div class=\"week\" [class.week-selected]=\"week[0].date === values.selected\">\n            <!-- DAYS -->\n            @for (day of week; track $index) {\n            <div\n                class=\"day\"\n                [class.day-today]=\"day.date === values.today\"\n                [class.day-selected]=\"week[0].date === values.selected\"\n                [class.day-disable]=\"day.month !== calendar.month || day.date > values.maxDate || day.date < values.minDate\"\n                (click)=\"\n                    day.month !== calendar.month || day.date > values.maxDate || day.date < values.minDate\n                        ? null\n                        : setDate(day.date)\n                \"\n            >\n                {{ day.day }}\n            </div>\n            }\n        </div>\n        }\n    </section>\n\n    <!-- MONTH VIEW -->\n    @if (view === 'MONTH') {\n    <section class=\"month-view\" [@month]>\n        <!-- SEASON -->\n        @for (season of seasons; track $index) {\n        <div class=\"season\">\n            <!-- MONTH -->\n            @for (month of season; track $index) {\n            <div\n                class=\"month\"\n                [class.month-disable]=\"\n                    (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n                \"\n                (click)=\"\n                    (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n                        ? null\n                        : setMonth(month.month)\n                \"\n            >\n                {{ month.title }}\n            </div>\n            }\n        </div>\n        }\n    </section>\n    }\n</div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { JalaliDateTime, JalaliDateTimePeriod } from '@webilix/jalali-date-time';\n\nimport { INgxCalendarMonth } from '../../ngx-calendar.interface';\n\n@Component({\n    selector: 'ngx-calendar-month',\n    imports: [MatIconButton, MatIcon],\n    templateUrl: './ngx-calendar-month.component.html',\n    styleUrl: './ngx-calendar-month.component.scss',\n})\nexport class NgxCalendarMonthComponent implements OnInit, OnChanges {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3-month';\n\n    @Input({ required: false }) value?: Date | { from: Date; to: Date };\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Output() onChange: EventEmitter<INgxCalendarMonth> = new EventEmitter<INgxCalendarMonth>();\n\n    public values!: { today: string; selected: string; minDate: string; maxDate: string };\n    public year!: number;\n\n    public years: number[] = [];\n    public seasons: { title: string; month: string }[][] = [\n        [\n            { title: 'فروردین', month: '' },\n            { title: 'اردیبهشت', month: '' },\n            { title: 'خرداد', month: '' },\n        ],\n        [\n            { title: 'تیر', month: '' },\n            { title: 'مرداد', month: '' },\n            { title: 'شهریور', month: '' },\n        ],\n        [\n            { title: 'مهر', month: '' },\n            { title: 'آبان', month: '' },\n            { title: 'آذر', month: '' },\n        ],\n        [\n            { title: 'دی', month: '' },\n            { title: 'بهمن', month: '' },\n            { title: 'اسفند', month: '' },\n        ],\n    ];\n\n    private jalali = JalaliDateTime();\n\n    ngOnInit(): void {\n        this.initValues();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.initValues();\n    }\n\n    initValues(): void {\n        const getMonth = (date: Date): string => this.jalali.toString(date, { format: 'Y-M' });\n        let minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        let maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        // Check Value\n        let value: Date | undefined = this.value ? ('from' in this.value ? this.value.from : this.value) : undefined;\n        if (value && minDate && getMonth(value) < getMonth(minDate)) value = undefined;\n        if (value && maxDate && getMonth(value) > getMonth(maxDate)) value = undefined;\n\n        this.values = {\n            today: getMonth(new Date()),\n            selected: value ? getMonth(value) : '',\n            minDate: minDate ? getMonth(minDate) : '0000-00',\n            maxDate: maxDate ? getMonth(maxDate) : '9999-99',\n        };\n\n        const year: string = this.values.selected ? this.values.selected : this.values.today;\n        this.changeYear(+year.substring(0, 4));\n    }\n\n    changeYear(year?: number): void {\n        if (year && year < 1000) return;\n        this.year = year || +this.values.today.substring(0, 4);\n\n        let decade: number = this.year - (this.year % 10);\n        if (decade <= 1020) decade = 1020;\n        this.years = [decade - 20, decade - 10, decade, decade + 10, decade + 20];\n        this.seasons.forEach((season, s: number) => {\n            season.forEach((month, m: number) => {\n                month.month = `${this.year.toString()}-${(s * 3 + m + 1).toString().padStart(2, '0')}`;\n            });\n        });\n    }\n\n    setMonth(value: string): void {\n        const gregorian: string = this.jalali.gregorian(`${value}-01`).date;\n        const date: Date = this.jalali.periodDay(1, new Date(gregorian + 'T00:00:00.000Z')).from;\n        const period: JalaliDateTimePeriod = this.jalali.periodMonth(1, date);\n        const title: string = this.jalali.toFullText(period.from, { format: 'N Y' });\n\n        this.values.selected = value;\n        this.onChange.next({ period, title, jalali: value });\n    }\n}\n","<div class=\"calendar-header\">\n    <div class=\"title\">{{ year }}</div>\n\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(year - 10)\">\n        <mat-icon>keyboard_double_arrow_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(year - 1)\">\n        <mat-icon>chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear()\">\n        <mat-icon>radio_button_checked</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(year + 1)\">\n        <mat-icon>chevron_left</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(year + 12)\">\n        <mat-icon>keyboard_double_arrow_left</mat-icon>\n    </button>\n</div>\n\n<div class=\"calendar-nav\">\n    @for (item of years; track $index) {\n    <div class=\"item click\" (click)=\"changeYear(item)\">{{ item }}</div>\n    }\n</div>\n\n<!-- SEASON -->\n@for (season of seasons; track $index) {\n<div class=\"calendar-content\">\n    <!-- MONTH -->\n    @for (month of season; track $index) {\n    <div\n        class=\"month\"\n        [class.month-today]=\"month.month === values.today\"\n        [class.month-selected]=\"month.month === values.selected\"\n        [class.month-disable]=\"\n            (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n        \"\n        (click)=\"\n            (values.minDate && month.month < values.minDate) || (values.maxDate && month.month > values.maxDate)\n                ? null\n                : setMonth(month.month)\n        \"\n    >\n        {{ month.title }}\n    </div>\n    }\n</div>\n}\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { JalaliDateTime } from '@webilix/jalali-date-time';\n\nimport { INgxCalendarYear } from '../../ngx-calendar.interface';\n\n@Component({\n    selector: 'ngx-calendar-year',\n    imports: [MatIconButton, MatIcon],\n    templateUrl: './ngx-calendar-year.component.html',\n    styleUrl: './ngx-calendar-year.component.scss',\n})\nexport class NgxCalendarYearComponent implements OnInit, OnChanges {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3-year';\n\n    @Input({ required: false }) value?: Date | { from: Date; to: Date };\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Output() onChange: EventEmitter<INgxCalendarYear> = new EventEmitter<INgxCalendarYear>();\n\n    public values!: { today: string; selected: string; minDate: string; maxDate: string };\n    public years!: number[];\n\n    private jalali = JalaliDateTime();\n\n    ngOnInit(): void {\n        this.initValues();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.initValues();\n    }\n\n    initValues(): void {\n        const getYear = (date: Date): string => this.jalali.toString(date, { format: 'Y' });\n        let minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        let maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        // Check Value\n        let value: Date | undefined = this.value ? ('from' in this.value ? this.value.from : this.value) : undefined;\n        if (value && minDate && getYear(value) < getYear(minDate)) value = undefined;\n        if (value && maxDate && getYear(value) > getYear(maxDate)) value = undefined;\n\n        this.values = {\n            today: getYear(new Date()),\n            selected: value ? getYear(value) : '',\n            minDate: minDate ? getYear(minDate) : '0000',\n            maxDate: maxDate ? getYear(maxDate) : '9999',\n        };\n\n        const year: string = this.values.selected ? this.values.selected : this.values.today;\n        this.changeYear(+year.substring(0, 4));\n    }\n\n    changeYear(year: number): void {\n        if (year < 1000) year = 1000;\n\n        const count: number = 25;\n        const start: number = year - (year % count);\n        this.years = [...Array(count).keys()].map((n: number) => start + n);\n    }\n\n    setYear(value: string): void {\n        if (\n            value < '1000' ||\n            (this.values.minDate && value < this.values.minDate) ||\n            (this.values.maxDate && value > this.values.maxDate)\n        )\n            return;\n\n        const lastDayInYear: string = this.jalali.daysInMonth(`${value}-12`).toString();\n        const from: Date = new Date(this.jalali.gregorian(`${value}-01-01`).date + 'T00:00:00.000Z');\n        const to: Date = new Date(this.jalali.gregorian(`${value}-12-${lastDayInYear}`).date + 'T00:00:00.000Z');\n        const period = {\n            from: this.jalali.periodDay(1, from).from,\n            to: this.jalali.periodDay(1, to).to,\n        };\n\n        this.values.selected = value;\n        this.onChange.next({ period, year: +value });\n    }\n}\n","<div class=\"calendar-header\">\n    <div class=\"title\">{{ years[0] }} - {{ years[years.length - 1] }}</div>\n\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(years[0] - 1)\">\n        <mat-icon>chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(+values.today)\">\n        <mat-icon>radio_button_checked</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"changeYear(years[years.length - 1] + 1)\">\n        <mat-icon>chevron_left</mat-icon>\n    </button>\n</div>\n\n<!-- YEARS -->\n<div class=\"calendar-content\">\n    @for (year of years; track $index) {\n    <div\n        class=\"year\"\n        [class.year-today]=\"+values.today === year\"\n        [class.year-selected]=\"+values.selected === year\"\n        [class.year-disable]=\"(values.minDate && year < +values.minDate) || (values.maxDate && year > +values.maxDate)\"\n        (click)=\"\n            (values.minDate && year < +values.minDate) || (values.maxDate && year > +values.maxDate)\n                ? null\n                : setYear(year.toString())\n        \"\n    >\n        {{ year }}\n    </div>\n    }\n</div>\n","import { Component, inject } from '@angular/core';\n\nimport { NGX_HELPER_CONTAINER_CLOSE, NGX_HELPER_CONTAINER_DATA } from '@webilix/ngx-helper-m3';\n\nimport {\n    NgxCalendarDateComponent,\n    NgxCalendarMomentComponent,\n    NgxCalendarMonthComponent,\n    NgxCalendarWeekComponent,\n    NgxCalendarYearComponent,\n} from '../../components';\nimport { NgxCalendar } from '../../ngx-calendar.interface';\n\nimport { IContainer } from '../container.interface';\n\n@Component({\n    host: { selector: 'bottom-sheet' },\n    imports: [\n        NgxCalendarMomentComponent,\n        NgxCalendarDateComponent,\n        NgxCalendarWeekComponent,\n        NgxCalendarMonthComponent,\n        NgxCalendarYearComponent,\n    ],\n    templateUrl: './bottom-sheet.component.html',\n    styleUrl: './bottom-sheet.component.scss',\n})\nexport class BottomSheetComponent<R> {\n    public data: { calendar: NgxCalendar | 'MOMENT'; container: IContainer } = inject(NGX_HELPER_CONTAINER_DATA);\n    public closeContainer = inject(NGX_HELPER_CONTAINER_CLOSE);\n}\n","@switch (data.calendar) {\n<!-- MOMENT -->\n@case ('MOMENT') {\n<ngx-calendar-moment\n    [value]=\"data.container.value?.from\"\n    [minDate]=\"data.container.minDate\"\n    [maxDate]=\"data.container.maxDate\"\n    (onChange)=\"closeContainer($event)\"\n></ngx-calendar-moment>\n}\n<!-- DATE -->\n@case ('DATE') {\n<ngx-calendar-date\n    [value]=\"data.container.value?.from\"\n    [minDate]=\"data.container.minDate\"\n    [maxDate]=\"data.container.maxDate\"\n    (onChange)=\"closeContainer($event)\"\n></ngx-calendar-date>\n}\n<!-- WEEK -->\n@case ('WEEK') {\n<ngx-calendar-week\n    [value]=\"data.container.value\"\n    [minDate]=\"data.container.minDate\"\n    [maxDate]=\"data.container.maxDate\"\n    (onChange)=\"closeContainer($event)\"\n></ngx-calendar-week>\n}\n<!-- MONTH -->\n@case ('MONTH') {\n<ngx-calendar-month\n    [value]=\"data.container.value\"\n    [minDate]=\"data.container.minDate\"\n    [maxDate]=\"data.container.maxDate\"\n    (onChange)=\"closeContainer($event)\"\n></ngx-calendar-month>\n}\n<!-- YEAR -->\n@case ('YEAR') {\n<ngx-calendar-year\n    [value]=\"data.container.value\"\n    [minDate]=\"data.container.minDate\"\n    [maxDate]=\"data.container.maxDate\"\n    (onChange)=\"closeContainer($event)\"\n></ngx-calendar-year>\n} }\n","import { Component, inject } from '@angular/core';\n\nimport { NGX_HELPER_CONTAINER_CLOSE, NGX_HELPER_CONTAINER_DATA } from '@webilix/ngx-helper-m3';\n\nimport {\n    NgxCalendarDateComponent,\n    NgxCalendarMomentComponent,\n    NgxCalendarMonthComponent,\n    NgxCalendarWeekComponent,\n    NgxCalendarYearComponent,\n} from '../../components';\nimport { NgxCalendar } from '../../ngx-calendar.interface';\n\nimport { IContainer } from '../container.interface';\n\n@Component({\n    host: { selector: 'dialog' },\n    imports: [\n        NgxCalendarMomentComponent,\n        NgxCalendarDateComponent,\n        NgxCalendarWeekComponent,\n        NgxCalendarMonthComponent,\n        NgxCalendarYearComponent,\n    ],\n    templateUrl: './dialog.component.html',\n    styleUrl: './dialog.component.scss',\n})\nexport class DialogComponent<R> {\n    public data: { calendar: NgxCalendar | 'MOMENT'; container: IContainer } = inject(NGX_HELPER_CONTAINER_DATA);\n    public closeContainer = inject(NGX_HELPER_CONTAINER_CLOSE);\n}\n","<content>\n    @switch (data.calendar) {\n    <!-- MOMENT -->\n    @case ('MOMENT') {\n    <ngx-calendar-moment\n        [value]=\"data.container.value?.from\"\n        [minDate]=\"data.container.minDate\"\n        [maxDate]=\"data.container.maxDate\"\n        (onChange)=\"closeContainer($event)\"\n    ></ngx-calendar-moment>\n    }\n    <!-- DATE -->\n    @case ('DATE') {\n    <ngx-calendar-date\n        [value]=\"data.container.value?.from\"\n        [minDate]=\"data.container.minDate\"\n        [maxDate]=\"data.container.maxDate\"\n        (onChange)=\"closeContainer($event)\"\n    ></ngx-calendar-date>\n    }\n    <!-- WEEK -->\n    @case ('WEEK') {\n    <ngx-calendar-week\n        [value]=\"data.container.value\"\n        [minDate]=\"data.container.minDate\"\n        [maxDate]=\"data.container.maxDate\"\n        (onChange)=\"closeContainer($event)\"\n    ></ngx-calendar-week>\n    }\n    <!-- MONTH -->\n    @case ('MONTH') {\n    <ngx-calendar-month\n        [value]=\"data.container.value\"\n        [minDate]=\"data.container.minDate\"\n        [maxDate]=\"data.container.maxDate\"\n        (onChange)=\"closeContainer($event)\"\n    ></ngx-calendar-month>\n    }\n    <!-- YEAR -->\n    @case ('YEAR') {\n    <ngx-calendar-year\n        [value]=\"data.container.value\"\n        [minDate]=\"data.container.minDate\"\n        [maxDate]=\"data.container.maxDate\"\n        (onChange)=\"closeContainer($event)\"\n    ></ngx-calendar-year>\n    } }\n</content>\n","import { Injectable } from '@angular/core';\n\nimport { NgxHelperContainerService } from '@webilix/ngx-helper-m3';\n\nimport { BottomSheetComponent, DialogComponent, IContainer } from './container';\nimport {\n    INgxCalendarDate,\n    INgxCalendarMoment,\n    INgxCalendarMonth,\n    INgxCalendarWeek,\n    INgxCalendarYear,\n    NgxCalendar,\n} from './ngx-calendar.interface';\n\ninterface ICalendar {\n    readonly title: string;\n    readonly value: Date;\n    readonly minDate: 'NOW' | Date;\n    readonly maxDate: 'NOW' | Date;\n}\n\ninterface ICalendarMoment extends ICalendar {}\n\ninterface ICalendarDate extends ICalendar {}\n\ninterface ICalendarWeek extends Omit<ICalendar, 'value'> {\n    readonly value: Date | { readonly from: Date; readonly to: Date };\n}\ninterface ICalendarMonth extends Omit<ICalendar, 'value'> {\n    readonly value: Date | { readonly from: Date; readonly to: Date };\n}\ninterface ICalendarYear extends Omit<ICalendar, 'value'> {\n    readonly value: Date | { readonly from: Date; readonly to: Date };\n}\n\nclass NgxCalendarClass<R /* RESPONSE */> {\n    constructor(\n        private readonly calendar: NgxCalendar | 'MOMENT',\n        private readonly container: IContainer,\n        private readonly ngxHelperContainerService: NgxHelperContainerService,\n        private readonly title?: string,\n    ) {}\n\n    private getTitle(calendar: NgxCalendar | 'MOMENT', title?: string): string {\n        if (title) return title;\n\n        switch (calendar) {\n            case 'DATE':\n                return 'انتخاب تاریخ';\n            case 'MOMENT':\n                return 'انتخاب زمان';\n            case 'WEEK':\n                return 'انتخاب هفته';\n            case 'MONTH':\n                return 'انتخاب ماه';\n            case 'YEAR':\n                return 'انتخاب سال';\n            case 'PERIOD':\n                return 'انتخاب دوره زمانی';\n        }\n    }\n\n    dialog(onResponse: (response: R) => void): void;\n    dialog(onResponse: (response: R) => void, onDismiss: () => void): void;\n    dialog(onResponse: (response: R) => void, onDismiss?: () => void): void {\n        this.ngxHelperContainerService\n            .init(DialogComponent, this.getTitle(this.calendar, this.title), {\n                data: { calendar: this.calendar, container: this.container },\n                padding: '0',\n            })\n            .dialog<R>(onResponse, onDismiss || (() => {}));\n    }\n\n    bottomSheet(onResponse: (response: R) => void): void;\n    bottomSheet(onResponse: (response: R) => void, onDismiss: () => void): void;\n    bottomSheet(onResponse: (response: R) => void, onDismiss?: () => void): void {\n        this.ngxHelperContainerService\n            .init(BottomSheetComponent, this.getTitle(this.calendar, this.title), {\n                data: { calendar: this.calendar, container: this.container },\n                padding: '0',\n            })\n            .bottomSheet<R>(onResponse, onDismiss || (() => {}));\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgxCalendarService {\n    constructor(private readonly ngxHelperContainerService: NgxHelperContainerService) {}\n\n    getDate(): NgxCalendarClass<INgxCalendarDate>;\n    getDate(options: Partial<ICalendarDate>): NgxCalendarClass<INgxCalendarDate>;\n    getDate(arg1?: any): NgxCalendarClass<INgxCalendarDate> {\n        const options: Partial<ICalendarDate> = arg1 || {};\n        const container: IContainer = {\n            value: options.value ? { from: options.value, to: options.value } : undefined,\n            minDate: options.minDate,\n            maxDate: options.maxDate,\n        };\n\n        return new NgxCalendarClass<INgxCalendarDate>('DATE', container, this.ngxHelperContainerService, options.title);\n    }\n\n    getMoment(): NgxCalendarClass<INgxCalendarMoment>;\n    getMoment(options: Partial<ICalendarMoment>): NgxCalendarClass<INgxCalendarMoment>;\n    getMoment(arg1?: any): NgxCalendarClass<INgxCalendarMoment> {\n        const options: Partial<ICalendarMoment> = arg1 || {};\n        const container: IContainer = {\n            value: options.value ? { from: options.value, to: options.value } : undefined,\n            minDate: options.minDate,\n            maxDate: options.maxDate,\n        };\n\n        return new NgxCalendarClass<INgxCalendarMoment>('MOMENT', container, this.ngxHelperContainerService, options.title);\n    }\n\n    getWeek(): NgxCalendarClass<INgxCalendarWeek>;\n    getWeek(options: Partial<ICalendarWeek>): NgxCalendarClass<INgxCalendarWeek>;\n    getWeek(arg1?: any): NgxCalendarClass<INgxCalendarWeek> {\n        const options: Partial<ICalendarWeek> = arg1 || {};\n        const container: IContainer = {\n            value: options.value\n                ? 'from' in options.value\n                    ? options.value\n                    : { from: options.value, to: options.value }\n                : undefined,\n            minDate: options.minDate,\n            maxDate: options.maxDate,\n        };\n\n        return new NgxCalendarClass<INgxCalendarWeek>('WEEK', container, this.ngxHelperContainerService, options.title);\n    }\n\n    getMonth(): NgxCalendarClass<INgxCalendarMonth>;\n    getMonth(options: Partial<ICalendarMonth>): NgxCalendarClass<INgxCalendarMonth>;\n    getMonth(arg1?: any): NgxCalendarClass<INgxCalendarMonth> {\n        const options: Partial<ICalendarMonth> = arg1 || {};\n        const container: IContainer = {\n            value: options.value\n                ? 'from' in options.value\n                    ? options.value\n                    : { from: options.value, to: options.value }\n                : undefined,\n            minDate: options.minDate,\n            maxDate: options.maxDate,\n        };\n\n        return new NgxCalendarClass<INgxCalendarMonth>('MONTH', container, this.ngxHelperContainerService, options.title);\n    }\n\n    getYear(): NgxCalendarClass<INgxCalendarYear>;\n    getYear(options: Partial<ICalendarYear>): NgxCalendarClass<INgxCalendarYear>;\n    getYear(arg1?: any): NgxCalendarClass<INgxCalendarYear> {\n        const options: Partial<ICalendarYear> = arg1 || {};\n        const container: IContainer = {\n            value: options.value\n                ? 'from' in options.value\n                    ? options.value\n                    : { from: options.value, to: options.value }\n                : undefined,\n            minDate: options.minDate,\n            maxDate: options.maxDate,\n        };\n\n        return new NgxCalendarClass<INgxCalendarYear>('YEAR', container, this.ngxHelperContainerService, options.title);\n    }\n}\n","import { Component, EventEmitter, HostBinding, Input, OnInit, Output } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { Helper } from '@webilix/helper-library';\nimport { JalaliDateTime, JalaliDateTimePeriod } from '@webilix/jalali-date-time';\n\nimport {\n    INgxCalendar,\n    INgxCalendarDate,\n    INgxCalendarMonth,\n    INgxCalendarWeek,\n    INgxCalendarYear,\n    NgxCalendar,\n} from './ngx-calendar.interface';\nimport { NgxCalendarService } from './ngx-calendar.service';\n\n@Component({\n    selector: 'ngx-calendar',\n    imports: [MatIconButton, MatIcon, MatMenuModule],\n    templateUrl: './ngx-calendar.component.html',\n    styleUrl: './ngx-calendar.component.scss',\n})\nexport class NgxCalendarComponent implements OnInit {\n    @HostBinding('className') private className: string = 'ngx-calendar-m3';\n    @HostBinding('style.--ngx-calendar-m3-width') cssWidth = '';\n    @HostBinding('style.--ngx-calendar-m3-height') cssHeight = '';\n\n    @Input({ required: true }) calendars!: NgxCalendar[];\n    @Input({ required: false }) minDate?: 'NOW' | Date;\n    @Input({ required: false }) maxDate?: 'NOW' | Date;\n    @Input({ required: false }) width?: string;\n    @Input({ required: false }) height: string = '40px';\n    @Input({ required: false }) route: string[] = [];\n    @Input({ required: false }) container: 'DIALOG' | 'BOTTONSHEET' = 'DIALOG';\n    @Output() onChanged: EventEmitter<INgxCalendar> = new EventEmitter<INgxCalendar>();\n\n    public calendar!: NgxCalendar;\n    public calendarTitle!: string;\n    public periodTitle!: string | [string, string];\n    public from!: Date;\n    public to!: Date;\n\n    public previous: { active: boolean; date: Date } = { active: false, date: new Date() };\n    public next: { active: boolean; date: Date } = { active: false, date: new Date() };\n\n    private jalali = JalaliDateTime();\n    public list: NgxCalendar[] = ['DATE', 'WEEK', 'MONTH', 'YEAR', 'PERIOD'];\n    public calendarsList: {\n        [key in NgxCalendar]: {\n            title: string;\n            icon: string;\n            method: (v: number, d?: Date, t?: string) => JalaliDateTimePeriod;\n        };\n    } = {\n        DATE: { title: 'روزانه', icon: 'today', method: this.jalali.periodDay },\n        WEEK: { title: 'هفتگی', icon: 'date_range', method: this.jalali.periodWeek },\n        MONTH: { title: 'ماهانه', icon: 'calendar_month', method: this.jalali.periodMonth },\n        YEAR: { title: 'سالانه', icon: 'calendar_today', method: this.jalali.periodYear },\n        PERIOD: { title: 'دوره زمانی', icon: 'event_note', method: this.jalali.periodDay },\n    };\n\n    constructor(\n        private readonly activatedRoute: ActivatedRoute,\n        private readonly router: Router,\n        private readonly ngxCalendarService: NgxCalendarService,\n    ) {}\n\n    ngOnInit(): void {\n        this.cssWidth = this.width || '100%';\n        this.cssHeight = this.height;\n\n        this.calendars = this.calendars\n            .filter((calendar) => !!this.calendarsList[calendar])\n            .filter((calendar, index, arr) => arr.indexOf(calendar) === index);\n        if (this.calendars.length === 0) this.calendars = ['DATE', 'WEEK', 'MONTH', 'YEAR', 'PERIOD'];\n\n        let { minDate, maxDate } = this.getMinMax();\n\n        // Check MIN and MAX Dates\n        if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {\n            const date: Date = new Date(minDate);\n            minDate = maxDate;\n            maxDate = date;\n        }\n\n        const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n        const calendar: NgxCalendar =\n            this.route.length > 0 && this.calendars.includes(queryParams['ngx-calendar'])\n                ? queryParams['ngx-calendar']\n                : this.calendars[0];\n        const from: Date =\n            this.route.length > 0 && Helper.IS.STRING.date(queryParams['ngx-calendar-from'])\n                ? new Date(this.jalali.gregorian(queryParams['ngx-calendar-from']).date + 'T00:00:00.000Z')\n                : new Date();\n        const to: Date =\n            this.route.length > 0 && Helper.IS.STRING.date(queryParams['ngx-calendar-to'])\n                ? new Date(this.jalali.gregorian(queryParams['ngx-calendar-to']).date + 'T00:00:00.000Z')\n                : new Date();\n\n        this.setCalendar(calendar, from, to);\n    }\n\n    getMinMax(): { minDate: Date | undefined; maxDate: Date | undefined } {\n        const minDate: Date | undefined = this.minDate === 'NOW' ? new Date() : this.minDate;\n        const maxDate: Date | undefined = this.maxDate === 'NOW' ? new Date() : this.maxDate;\n\n        return { minDate, maxDate };\n    }\n\n    updateView(): void {\n        switch (this.calendar) {\n            case 'DATE':\n                this.periodTitle = this.jalali.toTitle(this.from, { format: 'W، d N Y' });\n                break;\n            case 'WEEK':\n                this.periodTitle = Helper.DATE.jalaliPeriod(this.from, this.to).replace('-', ' تا ');\n                break;\n            case 'MONTH':\n                this.periodTitle = this.jalali.toTitle(this.from, { format: 'N Y' });\n                break;\n            case 'YEAR':\n                this.periodTitle = this.jalali.toTitle(this.from, { format: 'Y' });\n                break;\n            case 'PERIOD':\n                this.periodTitle = [\n                    this.jalali.toTitle(this.from, { format: 'd N Y' }),\n                    this.jalali.toTitle(this.to, { format: 'd N Y' }),\n                ];\n                break;\n        }\n\n        const { minDate, maxDate } = this.getMinMax();\n\n        // Update Previous and Next\n        if (this.calendar !== 'PERIOD') {\n            const previousCheck = minDate ? this.calendarsList[this.calendar].method(1, minDate).from : undefined;\n            this.previous.date = this.calendarsList[this.calendar].method(1, new Date(this.from.getTime() - 1)).from;\n            this.previous.active = !previousCheck || this.previous.date.getTime() >= previousCheck.getTime();\n\n            const nextCheck = maxDate ? this.calendarsList[this.calendar].method(1, maxDate).to : undefined;\n            this.next.date = this.calendarsList[this.calendar].method(1, new Date(this.to.getTime() + 1)).to;\n            this.next.active = !nextCheck || this.next.date.getTime() <= nextCheck.getTime();\n        }\n\n        // Update Routes\n        if (this.route.length !== 0) {\n            const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n\n            queryParams['ngx-calendar'] = this.calendar;\n            queryParams['ngx-calendar-from'] = this.jalali.toString(this.from, { format: 'Y-M-D' });\n            queryParams['ngx-calendar-to'] = this.jalali.toString(this.to, { format: 'Y-M-D' });\n            this.router.navigate(this.route, { queryParams });\n        }\n\n        const title: string =\n            typeof this.periodTitle === 'string'\n                ? this.periodTitle\n                : Helper.DATE.jalaliPeriod(this.from, this.to).replace('-', ' تا ');\n        this.onChanged.next({\n            calendar: this.calendar,\n            period: { from: this.from, to: this.to },\n            title,\n        });\n    }\n\n    setCalendar(calendar: NgxCalendar, from?: Date, to?: Date): void {\n        const { minDate, maxDate } = this.getMinMax();\n        const checkDate = (date: Date): Date => {\n            if (minDate && date.getTime() < minDate.getTime()) date = minDate;\n            if (maxDate && date.getTime() > maxDate.getTime()) date = maxDate;\n            return date;\n        };\n\n        this.calendar = calendar;\n        this.calendarTitle = this.calendarsList[this.calendar].title;\n        const date: Date = checkDate(from || new Date());\n\n        switch (this.calendar) {\n            case 'DATE':\n            case 'WEEK':\n            case 'MONTH':\n            case 'YEAR':\n                const period: JalaliDateTimePeriod = this.calendarsList[this.calendar].method(1, date);\n                this.from = period.from;\n                this.to = period.to;\n                break;\n            case 'PERIOD':\n                this.from = checkDate(this.jalali.periodMonth(1, date).from);\n                this.to = checkDate(this.jalali.periodDay(1, checkDate(to || date)).to);\n                break;\n        }\n\n        this.updateView();\n    }\n\n    setPrevious(): void {\n        if (this.calendar === 'PERIOD' || !this.previous.active) return;\n        this.from = this.previous.date;\n        this.to = this.calendarsList[this.calendar].method(1, this.previous.date).to;\n\n        this.updateView();\n    }\n\n    setNext(): void {\n        if (this.calendar === 'PERIOD' || !this.next.active) return;\n        this.from = this.calendarsList[this.calendar].method(1, this.next.date).from;\n        this.to = this.next.date;\n\n        this.updateView();\n    }\n\n    getDate(): void {\n        const setDate = (date: INgxCalendarDate): void => {\n            this.from = this.to = date.date;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getDate({ value: this.from, minDate: this.minDate, maxDate: this.maxDate });\n        this.container === 'DIALOG' ? calendar.dialog(setDate) : calendar.bottomSheet(setDate);\n    }\n\n    getWeek(): void {\n        const setWeek = (week: INgxCalendarWeek): void => {\n            this.from = week.period.from;\n            this.to = week.period.to;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getWeek({ value: this.from, minDate: this.minDate, maxDate: this.maxDate });\n        this.container === 'DIALOG' ? calendar.dialog(setWeek) : calendar.bottomSheet(setWeek);\n    }\n\n    getMonth(): void {\n        const setMonth = (week: INgxCalendarMonth): void => {\n            this.from = week.period.from;\n            this.to = week.period.to;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getMonth({\n            value: this.from,\n            minDate: this.minDate,\n            maxDate: this.maxDate,\n        });\n        this.container === 'DIALOG' ? calendar.dialog(setMonth) : calendar.bottomSheet(setMonth);\n    }\n\n    getYear(): void {\n        const setYear = (year: INgxCalendarYear): void => {\n            this.from = year.period.from;\n            this.to = year.period.to;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getYear({\n            value: this.from,\n            minDate: this.minDate,\n            maxDate: this.maxDate,\n        });\n        this.container === 'DIALOG' ? calendar.dialog(setYear) : calendar.bottomSheet(setYear);\n    }\n\n    getPeriodFrom(): void {\n        const setDate = (date: INgxCalendarDate): void => {\n            this.from = date.date;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getDate({\n            value: this.from,\n            minDate: this.minDate,\n            maxDate: this.to || this.maxDate,\n        });\n        this.container === 'DIALOG' ? calendar.dialog(setDate) : calendar.bottomSheet(setDate);\n    }\n\n    getPeriodTo(): void {\n        const setDate = (date: INgxCalendarDate): void => {\n            this.to = date.date;\n            this.updateView();\n        };\n\n        const calendar = this.ngxCalendarService.getDate({\n            value: this.to,\n            minDate: this.from || this.minDate,\n            maxDate: this.maxDate,\n        });\n        this.container === 'DIALOG' ? calendar.dialog(setDate) : calendar.bottomSheet(setDate);\n    }\n}\n","<!-- CALENDAR -->\n@if (calendars.length > 1) {\n<div class=\"calendar-types\" [matMenuTriggerFor]=\"calendarMenu\">\n    <span>{{ calendarTitle }}</span>\n    <mat-icon>keyboard_arrow_down</mat-icon>\n\n    <mat-menu #calendarMenu=\"matMenu\" class=\"ngx-calendar-menu\">\n        @for (item of list; track $index) {\n        <!-- CHECK CALENDAR -->\n        @if (calendars.includes(item)) {\n        <button mat-menu-item (click)=\"setCalendar(item)\" [disabled]=\"item === calendar\">\n            <mat-icon [style.margin-right]=\"'0'\" [style.margin-left]=\"'0.5rem'\" [style.font-size]=\"'18px'\">\n                {{ calendarsList[item].icon }}\n            </mat-icon>\n            <span>{{ calendarsList[item].title }}</span>\n        </button>\n        } }\n    </mat-menu>\n</div>\n}\n\n<!-- DAY, WEEK, MONTH, YEAR -->\n@if (calendar === 'DATE' || calendar === 'WEEK' || calendar === 'MONTH' || calendar === 'YEAR') {\n<div\n    class=\"calendar-title\"\n    (click)=\"\n        calendar === 'DATE' ? getDate() : calendar === 'WEEK' ? getWeek() : calendar === 'MONTH' ? getMonth() : getYear()\n    \"\n>\n    {{ periodTitle }}\n</div>\n\n<div class=\"calendar-buttons\">\n    <button mat-icon-button type=\"button\" [disabled]=\"!previous.active\" (click)=\"setPrevious()\">\n        <mat-icon>chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button type=\"button\" [disabled]=\"!next.active\" (click)=\"setNext()\">\n        <mat-icon>chevron_left</mat-icon>\n    </button>\n    @switch (calendar) {\n    <!-- DATE -->\n    @case ('DATE') {\n    <button mat-icon-button type=\"button\" (click)=\"getDate()\">\n        <mat-icon>today</mat-icon>\n    </button>\n    }\n\n    <!-- WEEK -->\n    @case ('WEEK') {\n    <button mat-icon-button type=\"button\" (click)=\"getWeek()\">\n        <mat-icon>date_range</mat-icon>\n    </button>\n    }\n\n    <!-- MONTH -->\n    @case ('MONTH') {\n    <button mat-icon-button type=\"button\" (click)=\"getMonth()\">\n        <mat-icon>calendar_month</mat-icon>\n    </button>\n    }\n\n    <!-- YEAR -->\n    @case ('YEAR') {\n    <button mat-icon-button type=\"button\" (click)=\"getYear()\">\n        <mat-icon>calendar_today</mat-icon>\n    </button>\n    } }\n</div>\n}\n\n<!-- PERIOD -->\n@if (calendar === 'PERIOD') {\n<div class=\"calendar-title\" (click)=\"getPeriodFrom()\">{{ periodTitle[0] }}</div>\n<div class=\"calendar-buttons square\">\n    <button mat-icon-button type=\"button\" (click)=\"getPeriodFrom()\">\n        <mat-icon>today</mat-icon>\n    </button>\n</div>\n<div class=\"calendar-title\" (click)=\"getPeriodTo()\">{{ periodTitle[1] }}</div>\n<div class=\"calendar-buttons\">\n    <button mat-icon-button type=\"button\" (click)=\"getPeriodTo()\">\n        <mat-icon>today</mat-icon>\n    </button>\n</div>\n}\n","/*\n * Public API Surface of ngx-calendar-m3\n */\n\nexport * from './lib/components/date/ngx-calendar-date.component';\nexport * from './lib/components/moment/ngx-calendar-moment.component';\nexport * from './lib/components/week/ngx-calendar-week.component';\nexport * from './lib/components/month/ngx-calendar-month.component';\nexport * from './lib/components/year/ngx-calendar-year.component';\n\nexport * from './lib/ngx-calendar.component';\nexport * from './lib/ngx-calendar.interface';\nexport * from './lib/ngx-calendar.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.NgxCalendarService","i3"],"mappings":";;;;;;;;;;;;;MAqBa,wBAAwB,CAAA;IACC,SAAS,GAAW,sBAAsB;AAEhD,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACzB,IAAA,QAAQ,GAAmC,IAAI,YAAY,EAAoB;IAElF,IAAI,GAAyB,UAAU;AACvC,IAAA,MAAM;AACN,IAAA,QAAQ;AAER,IAAA,IAAI;IACJ,KAAK,GAAa,EAAE;AACpB,IAAA,OAAO,GAAyC;AACnD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;AACjC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;KACJ;IAEO,MAAM,GAAG,cAAc,EAAE;IAEjC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,UAAU,CAAC,IAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;;IAG1D,UAAU,GAAA;AACN,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAClF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;;AAGlF,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;;QAIlB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QAC3G,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QAE3G,IAAI,CAAC,MAAM,GAAG;YACV,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AAClC,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACvD,YAAA,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,YAAY;AAC1D,YAAA,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,YAAY;SAC7D;QAED,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACvF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;AAG1B,IAAA,WAAW,CAAC,MAAc,EAAA;QACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC;QACzE,QAAQ,MAAM;AACV,YAAA,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,EAAE;AACJ,gBAAA,IAAI,IAAI,MAAM,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9B;AAEJ,YAAA,KAAK,CAAC;AACN,YAAA,KAAK,CAAC,CAAC;gBACH,KAAK,IAAI,MAAM;AACf,gBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AACd,oBAAA,IAAI,EAAE;oBACN,KAAK,GAAG,CAAC;;AAEb,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,oBAAA,IAAI,EAAE;oBACN,KAAK,GAAG,EAAE;;gBAEd;AAEJ,YAAA,KAAK,CAAC;gBACF,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC;gBACnE;;AAGR,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;AAGnG,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,MAAM,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI;QAC3D,MAAM,IAAI,GAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI;AACxF,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAW,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAE5C,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;;IAG/C,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU;AAC3D,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGpF,IAAA,UAAU,CAAC,IAAa,EAAA;AACpB,QAAA,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI;YAAE;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtD,QAAA,IAAI,MAAM,GAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjD,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,IAAI;QACjC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAS,KAAI;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAS,KAAI;AAChC,gBAAA,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC1F,aAAC,CAAC;AACN,SAAC,CAAC;;AAGN,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;uGA1IjB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,kQCrBrC,+hHA0FA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9Ec,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAGpB,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,OAAO,EAAE;AACb,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACnH,CAAC;AACL,SAAA,EAAA,CAAA;;2FAEQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAXpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,CAAC,aAAa,EAAE,OAAO,CAAC,EAGrB,UAAA,EAAA;wBACR,OAAO,CAAC,OAAO,EAAE;AACb,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACnH,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,+hHAAA,EAAA;8BAGiC,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBAEI,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,QAAQ,EAAA,CAAA;sBAAjB;;;METQ,0BAA0B,CAAA;IACD,SAAS,GAAW,wBAAwB;AAElD,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACzB,IAAA,QAAQ,GAAqC,IAAI,YAAY,EAAsB;IAEtF,SAAS,GAAY,KAAK;AAC1B,IAAA,UAAU;AAEV,IAAA,IAAI;AACJ,IAAA,KAAK,GAAa,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE/F,IAAA,MAAM;AACN,IAAA,OAAO,GAAa,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpG,MAAM,GAAG,cAAc,EAAE;IAEjC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,UAAU,CAAC,IAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;;IAG9D,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AACpF,QAAA,MAAM,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAEpF,QAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;;IAG/B,UAAU,GAAA;AACN,QAAA,MAAM,UAAU,GAAG,CAAC,IAAU,KAAU;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC3B,SAAC;QACD,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAE3C,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,OAAO;YAAE,UAAU,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,OAAO;YAAE,UAAU,CAAC,OAAO,CAAC;;AAGhC,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;;QAIlB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QAC3G,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QAE3G,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC7E,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACjF,IAAI,CAAC,WAAW,EAAE;;IAGtB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QAEjB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAE7C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAG/C,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAG/C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACjE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;AAGzB,IAAA,OAAO,CAAC,IAAsB,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,WAAW,EAAE;;AAGtB,IAAA,SAAS,CAAC,IAAY,EAAA;QAClB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAE7C,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAErC,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAA,MAAA,EAAS,IAAI,CAAE,CAAA,EAAE,CAAC;AACnF,QAAA,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,IAAI;;AAGf,IAAA,OAAO,CAAC,IAAY,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,WAAW,EAAE;;AAGtB,IAAA,WAAW,CAAC,MAAc,EAAA;QACtB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAE7C,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAErC,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAA,QAAA,EAAW,MAAM,CAAE,CAAA,EAAE,CAAC;QACvF,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK;QAC7D,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK;AAC7D,QAAA,OAAO,IAAI;;AAGf,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,WAAW,EAAE;;IAGtB,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAEpC,QAAA,MAAM,MAAM,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACnD,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAChF,MAAM,MAAM,GAAW,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;;uGAxIxC,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBvC,u5CA4BA,EDdc,MAAA,EAAA,CAAA,s8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,wUAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAItE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;+BACI,qBAAqB,EAAA,OAAA,EACtB,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,u5CAAA,EAAA,MAAA,EAAA,CAAA,s8BAAA,CAAA,EAAA;8BAK9C,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBAEI,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,QAAQ,EAAA,CAAA;sBAAjB;;;MEFQ,wBAAwB,CAAA;IACC,SAAS,GAAW,sBAAsB;AAEhD,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACzB,IAAA,QAAQ,GAAmC,IAAI,YAAY,EAAoB;IAElF,IAAI,GAAyB,UAAU;AACvC,IAAA,MAAM;AACN,IAAA,QAAQ;AAER,IAAA,IAAI;IACJ,KAAK,GAAa,EAAE;AACpB,IAAA,OAAO,GAAyC;AACnD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;AACjC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;KACJ;IAEO,MAAM,GAAG,cAAc,EAAE;IAEjC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,UAAU,CAAC,IAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;;IAG1D,UAAU,GAAA;AACN,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAClF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAElF,QAAA,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,MAAqB,KAAY;AAC1D,YAAA,MAAM,IAAI,GAAyB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;YAClE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;AACnE,SAAC;;AAGD,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;;AAIlB,QAAA,IAAI,KAAK,GAAqB,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS;AAC5G,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,KAAK,GAAG,SAAS;AAC5F,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,KAAK,GAAG,SAAS;QAE1F,IAAI,CAAC,MAAM,GAAG;YACV,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AAClC,YAAA,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE;AAC7C,YAAA,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,YAAY;AAC1D,YAAA,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,YAAY;SAC3D;QAED,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAClF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;AAG1B,IAAA,WAAW,CAAC,MAAc,EAAA;QACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC;QACzE,QAAQ,MAAM;AACV,YAAA,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,EAAE;AACJ,gBAAA,IAAI,IAAI,MAAM,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9B;AAEJ,YAAA,KAAK,CAAC;AACN,YAAA,KAAK,CAAC,CAAC;gBACH,KAAK,IAAI,MAAM;AACf,gBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AACd,oBAAA,IAAI,EAAE;oBACN,KAAK,GAAG,CAAC;;AAEb,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,oBAAA,IAAI,EAAE;oBACN,KAAK,GAAG,EAAE;;gBAEd;AAEJ,YAAA,KAAK,CAAC;gBACF,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC;gBACnE;;AAGR,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;AAGnG,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,MAAM,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI;QAC3D,MAAM,IAAI,GAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI;AACxF,QAAA,MAAM,MAAM,GAAyB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;AACpE,QAAA,MAAM,KAAK,GAAW,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;AAEtE,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;IAGzC,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU;AAC3D,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGpF,IAAA,UAAU,CAAC,IAAa,EAAA;AACpB,QAAA,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI;YAAE;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtD,QAAA,IAAI,MAAM,GAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjD,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,IAAI;QACjC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAS,KAAI;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAS,KAAI;AAChC,gBAAA,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC1F,aAAC,CAAC;AACN,SAAC,CAAC;;AAGN,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;uGAhJjB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,kQCtBrC,8lHA0FA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7Ec,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAGpB,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,OAAO,EAAE;AACb,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACnH,CAAC;AACL,SAAA,EAAA,CAAA;;2FAEQ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAXpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,CAAC,aAAa,EAAE,OAAO,CAAC,EAGrB,UAAA,EAAA;wBACR,OAAO,CAAC,OAAO,EAAE;AACb,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACnH,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,8lHAAA,EAAA;8BAGiC,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBAEI,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,QAAQ,EAAA,CAAA;sBAAjB;;;MEbQ,yBAAyB,CAAA;IACA,SAAS,GAAW,uBAAuB;AAEjD,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACzB,IAAA,QAAQ,GAAoC,IAAI,YAAY,EAAqB;AAEpF,IAAA,MAAM;AACN,IAAA,IAAI;IAEJ,KAAK,GAAa,EAAE;AACpB,IAAA,OAAO,GAAyC;AACnD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;AACjC,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,SAAA;AACD,QAAA;AACI,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AAChC,SAAA;KACJ;IAEO,MAAM,GAAG,cAAc,EAAE;IAEjC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;IAGrB,UAAU,GAAA;QACN,MAAM,QAAQ,GAAG,CAAC,IAAU,KAAa,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAClF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;;AAGlF,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;;AAIlB,QAAA,IAAI,KAAK,GAAqB,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS;AAC5G,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;YAAE,KAAK,GAAG,SAAS;AAC9E,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;YAAE,KAAK,GAAG,SAAS;QAE9E,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AAC3B,YAAA,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;AACtC,YAAA,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS;AAChD,YAAA,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS;SACnD;QAED,MAAM,IAAI,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,IAAA,UAAU,CAAC,IAAa,EAAA;AACpB,QAAA,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI;YAAE;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtD,QAAA,IAAI,MAAM,GAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjD,IAAI,MAAM,IAAI,IAAI;YAAE,MAAM,GAAG,IAAI;QACjC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAS,KAAI;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAS,KAAI;AAChC,gBAAA,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC1F,aAAC,CAAC;AACN,SAAC,CAAC;;AAGN,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,MAAM,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,EAAG,KAAK,CAAA,GAAA,CAAK,CAAC,CAAC,IAAI;QACnE,MAAM,IAAI,GAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI;AACxF,QAAA,MAAM,MAAM,GAAyB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;AACrE,QAAA,MAAM,KAAK,GAAW,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAE5E,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;uGA9F/C,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,ECftC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ksDAiDA,EDtCc,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,uKAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIvB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EACrB,OAAA,EAAA,CAAC,aAAa,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,ksDAAA,EAAA;8BAKC,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBAEI,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,QAAQ,EAAA,CAAA;sBAAjB;;;MENQ,wBAAwB,CAAA;IACC,SAAS,GAAW,sBAAsB;AAEhD,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACzB,IAAA,QAAQ,GAAmC,IAAI,YAAY,EAAoB;AAElF,IAAA,MAAM;AACN,IAAA,KAAK;IAEJ,MAAM,GAAG,cAAc,EAAE;IAEjC,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;;AAGrB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,UAAU,EAAE;;IAGrB,UAAU,GAAA;QACN,MAAM,OAAO,GAAG,CAAC,IAAU,KAAa,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAClF,QAAA,IAAI,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;;AAGlF,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;;AAIlB,QAAA,IAAI,KAAK,GAAqB,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS;AAC5G,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAAE,KAAK,GAAG,SAAS;AAC5E,QAAA,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAAE,KAAK,GAAG,SAAS;QAE5E,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AAC1B,YAAA,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;AACrC,YAAA,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM;AAC5C,YAAA,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM;SAC/C;QAED,MAAM,IAAI,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,IAAA,UAAU,CAAC,IAAY,EAAA;QACnB,IAAI,IAAI,GAAG,IAAI;YAAE,IAAI,GAAG,IAAI;QAE5B,MAAM,KAAK,GAAW,EAAE;QACxB,MAAM,KAAK,GAAW,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,KAAK,GAAG,CAAC,CAAC;;AAGvE,IAAA,OAAO,CAAC,KAAa,EAAA;QACjB,IACI,KAAK,GAAG,MAAM;AACd,aAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACpD,aAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEpD;AAEJ,QAAA,MAAM,aAAa,GAAW,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,EAAG,KAAK,CAAK,GAAA,CAAA,CAAC,CAAC,QAAQ,EAAE;QAC/E,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAG,EAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC5F,MAAM,EAAE,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAA,IAAA,EAAO,aAAa,CAAE,CAAA,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC;AACxG,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI;AACzC,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;SACtC;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;;uGA1EvC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,ECfrC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2qCAgCA,EDrBc,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,uKAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIvB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EACpB,OAAA,EAAA,CAAC,aAAa,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,2qCAAA,EAAA;8BAKC,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBAEI,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,QAAQ,EAAA,CAAA;sBAAjB;;;MEMQ,oBAAoB,CAAA;AACtB,IAAA,IAAI,GAAgE,MAAM,CAAC,yBAAyB,CAAC;AACrG,IAAA,cAAc,GAAG,MAAM,CAAC,0BAA0B,CAAC;uGAFjD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BjC,2vCA8CA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5BQ,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACA,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,QAAQ,EAAE,cAAc,EAAE,EACzB,OAAA,EAAA;wBACL,0BAA0B;wBAC1B,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;AAC3B,qBAAA,EAAA,QAAA,EAAA,2vCAAA,EAAA,MAAA,EAAA,CAAA,wCAAA,CAAA,EAAA;;;MEIQ,eAAe,CAAA;AACjB,IAAA,IAAI,GAAgE,MAAM,CAAC,yBAAyB,CAAC;AACrG,IAAA,cAAc,GAAG,MAAM,CAAC,0BAA0B,CAAC;uGAFjD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3B5B,08CAgDA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9BQ,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAZ3B,SAAS;AACA,YAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACnB,OAAA,EAAA;wBACL,0BAA0B;wBAC1B,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;AAC3B,qBAAA,EAAA,QAAA,EAAA,08CAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;;;AEYL,MAAM,gBAAgB,CAAA;AAEG,IAAA,QAAA;AACA,IAAA,SAAA;AACA,IAAA,yBAAA;AACA,IAAA,KAAA;AAJrB,IAAA,WAAA,CACqB,QAAgC,EAChC,SAAqB,EACrB,yBAAoD,EACpD,KAAc,EAAA;QAHd,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;QACzB,IAAK,CAAA,KAAA,GAAL,KAAK;;IAGlB,QAAQ,CAAC,QAAgC,EAAE,KAAc,EAAA;AAC7D,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK;QAEvB,QAAQ,QAAQ;AACZ,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,cAAc;AACzB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,aAAa;AACxB,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,aAAa;AACxB,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,YAAY;AACvB,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,YAAY;AACvB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,mBAAmB;;;IAMtC,MAAM,CAAC,UAAiC,EAAE,SAAsB,EAAA;AAC5D,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AAC7D,YAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5D,YAAA,OAAO,EAAE,GAAG;SACf;AACA,aAAA,MAAM,CAAI,UAAU,EAAE,SAAS,KAAK,MAAO,GAAC,CAAC,CAAC;;IAKvD,WAAW,CAAC,UAAiC,EAAE,SAAsB,EAAA;AACjE,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AAClE,YAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5D,YAAA,OAAO,EAAE,GAAG;SACf;AACA,aAAA,WAAW,CAAI,UAAU,EAAE,SAAS,KAAK,MAAO,GAAC,CAAC,CAAC;;AAE/D;MAGY,kBAAkB,CAAA;AACE,IAAA,yBAAA;AAA7B,IAAA,WAAA,CAA6B,yBAAoD,EAAA;QAApD,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;;AAItD,IAAA,OAAO,CAAC,IAAU,EAAA;AACd,QAAA,MAAM,OAAO,GAA2B,IAAI,IAAI,EAAE;AAClD,QAAA,MAAM,SAAS,GAAe;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,SAAS;YAC7E,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAmB,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC;;AAKnH,IAAA,SAAS,CAAC,IAAU,EAAA;AAChB,QAAA,MAAM,OAAO,GAA6B,IAAI,IAAI,EAAE;AACpD,QAAA,MAAM,SAAS,GAAe;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,SAAS;YAC7E,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAqB,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC;;AAKvH,IAAA,OAAO,CAAC,IAAU,EAAA;AACd,QAAA,MAAM,OAAO,GAA2B,IAAI,IAAI,EAAE;AAClD,QAAA,MAAM,SAAS,GAAe;YAC1B,KAAK,EAAE,OAAO,CAAC;AACX,kBAAE,MAAM,IAAI,OAAO,CAAC;sBACd,OAAO,CAAC;AACV,sBAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK;AAC9C,kBAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAmB,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC;;AAKnH,IAAA,QAAQ,CAAC,IAAU,EAAA;AACf,QAAA,MAAM,OAAO,GAA4B,IAAI,IAAI,EAAE;AACnD,QAAA,MAAM,SAAS,GAAe;YAC1B,KAAK,EAAE,OAAO,CAAC;AACX,kBAAE,MAAM,IAAI,OAAO,CAAC;sBACd,OAAO,CAAC;AACV,sBAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK;AAC9C,kBAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAoB,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC;;AAKrH,IAAA,OAAO,CAAC,IAAU,EAAA;AACd,QAAA,MAAM,OAAO,GAA2B,IAAI,IAAI,EAAE;AAClD,QAAA,MAAM,SAAS,GAAe;YAC1B,KAAK,EAAE,OAAO,CAAC;AACX,kBAAE,MAAM,IAAI,OAAO,CAAC;sBACd,OAAO,CAAC;AACV,sBAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK;AAC9C,kBAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAmB,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC;;uGA7E1G,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC3DrB,oBAAoB,CAAA;AAwCR,IAAA,cAAA;AACA,IAAA,MAAA;AACA,IAAA,kBAAA;IAzCa,SAAS,GAAW,iBAAiB;IACzB,QAAQ,GAAG,EAAE;IACZ,SAAS,GAAG,EAAE;AAElC,IAAA,SAAS;AACR,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,KAAK;IACL,MAAM,GAAW,MAAM;IACvB,KAAK,GAAa,EAAE;IACpB,SAAS,GAA6B,QAAQ;AAChE,IAAA,SAAS,GAA+B,IAAI,YAAY,EAAgB;AAE3E,IAAA,QAAQ;AACR,IAAA,aAAa;AACb,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;AAEF,IAAA,QAAQ,GAAoC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE;AAC/E,IAAA,IAAI,GAAoC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE;IAE1E,MAAM,GAAG,cAAc,EAAE;AAC1B,IAAA,IAAI,GAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;AACjE,IAAA,aAAa,GAMhB;AACA,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACvE,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC5E,QAAA,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACnF,QAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACjF,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;KACrF;AAED,IAAA,WAAA,CACqB,cAA8B,EAC9B,MAAc,EACd,kBAAsC,EAAA;QAFtC,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;IAGvC,QAAQ,GAAA;QACJ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;AAE5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACjB,aAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,aAAA,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC;AACtE,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;QAE7F,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;;AAG3C,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO;YACjB,OAAO,GAAG,IAAI;;AAGlB,QAAA,MAAM,WAAW,GAA2B,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC3F,MAAM,QAAQ,GACV,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC;AACxE,cAAE,WAAW,CAAC,cAAc;AAC5B,cAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GACN,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;AAC3E,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,GAAG,gBAAgB;AAC1F,cAAE,IAAI,IAAI,EAAE;QACpB,MAAM,EAAE,GACJ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;AACzE,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,GAAG,gBAAgB;AACxF,cAAE,IAAI,IAAI,EAAE;QAEpB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;;IAGxC,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AACpF,QAAA,MAAM,OAAO,GAAqB,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO;AAEpF,QAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;;IAG/B,UAAU,GAAA;AACN,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACjB,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBACzE;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;gBACpF;AACJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBACpE;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBAClE;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,WAAW,GAAG;AACf,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACnD,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;iBACpD;gBACD;;QAGR,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;;AAG7C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC5B,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS;AACrG,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YACxG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE;YAEhG,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS;AAC/F,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAChG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE;;;QAIpF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,MAAM,WAAW,GAA2B,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE;AAE3F,YAAA,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,QAAQ;YAC3C,WAAW,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YACvF,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACnF,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC;;AAGrD,QAAA,MAAM,KAAK,GACP,OAAO,IAAI,CAAC,WAAW,KAAK;cACtB,IAAI,CAAC;cACL,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;AAC3E,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;YACxC,KAAK;AACR,SAAA,CAAC;;AAGN,IAAA,WAAW,CAAC,QAAqB,EAAE,IAAW,EAAE,EAAS,EAAA;QACrD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7C,QAAA,MAAM,SAAS,GAAG,CAAC,IAAU,KAAU;YACnC,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;gBAAE,IAAI,GAAG,OAAO;YACjE,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;gBAAE,IAAI,GAAG,OAAO;AACjE,YAAA,OAAO,IAAI;AACf,SAAC;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK;QAC5D,MAAM,IAAI,GAAS,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAEhD,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACjB,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,MAAM,GAAyB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;AACtF,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,gBAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;gBACnB;AACJ,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC5D,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE;;QAGR,IAAI,CAAC,UAAU,EAAE;;IAGrB,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;QACzD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;QAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QAE5E,IAAI,CAAC,UAAU,EAAE;;IAGrB,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QACrD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI;QAC5E,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;QAExB,IAAI,CAAC,UAAU,EAAE;;IAGrB,OAAO,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,CAAC,IAAsB,KAAU;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;YAC/B,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpH,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG1F,OAAO,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,CAAC,IAAsB,KAAU;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpH,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG1F,QAAQ,GAAA;AACJ,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAuB,KAAU;YAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAC9C,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;;IAG5F,OAAO,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,CAAC,IAAsB,KAAU;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG1F,aAAa,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,CAAC,IAAsB,KAAU;AAC7C,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;YACrB,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO;AACnC,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;IAG1F,WAAW,GAAA;AACP,QAAA,MAAM,OAAO,GAAG,CAAC,IAAsB,KAAU;AAC7C,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;YACnB,IAAI,CAAC,UAAU,EAAE;AACrB,SAAC;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;uGAzQjF,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,kaC1BjC,kvFAqFA,EAAA,MAAA,EAAA,CAAA,qYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/Dc,aAAa,EAAE,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0IAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAItC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,WACf,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,kvFAAA,EAAA,MAAA,EAAA,CAAA,qYAAA,CAAA,EAAA;0IAKd,SAAS,EAAA,CAAA;sBAA1C,WAAW;uBAAC,WAAW;gBACsB,QAAQ,EAAA,CAAA;sBAArD,WAAW;uBAAC,+BAA+B;gBACG,SAAS,EAAA,CAAA;sBAAvD,WAAW;uBAAC,gCAAgC;gBAElB,SAAS,EAAA,CAAA;sBAAnC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACG,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,MAAM,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,KAAK,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACE,SAAS,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChB,SAAS,EAAA,CAAA;sBAAlB;;;AEtCL;;AAEG;;ACFH;;AAEG;;;;"}