UNPKG

angular-cc-library

Version:
1 lines 40.8 kB
{"version":3,"file":"angular-cc-library.mjs","sources":["../../../projects/angular-cc-library/src/lib/credit-card.ts","../../../projects/angular-cc-library/src/lib/validators.ts","../../../projects/angular-cc-library/src/lib/directives/credit-card-format.directive.ts","../../../projects/angular-cc-library/src/lib/directives/cvc-format.directive.ts","../../../projects/angular-cc-library/src/lib/directives/expiry-format.directive.ts","../../../projects/angular-cc-library/src/lib/credit-card-directives.module.ts","../../../projects/angular-cc-library/src/public-api.ts","../../../projects/angular-cc-library/src/angular-cc-library.ts"],"sourcesContent":["const defaultFormat = /(\\d{1,4})/g;\n\nexport interface CardDefinition {\n type: string;\n patterns: number[];\n format: RegExp;\n length: number[];\n cvvLength: number[];\n luhn: boolean;\n}\n\nconst cards: CardDefinition[] = [\n {\n type: 'maestro',\n patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n format: defaultFormat,\n length: [12, 13, 14, 15, 16, 17, 18, 19],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'forbrugsforeningen',\n patterns: [600],\n format: defaultFormat,\n length: [16],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'dankort',\n patterns: [5019],\n format: defaultFormat,\n length: [16],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'visa',\n patterns: [4],\n format: defaultFormat,\n length: [13, 16, 19],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'mastercard',\n patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n format: defaultFormat,\n length: [16],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'amex',\n patterns: [34, 37],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n length: [15],\n cvvLength: [3, 4],\n luhn: true,\n }, {\n type: 'dinersclub',\n patterns: [30, 36, 38, 39],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n length: [14],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'discover',\n patterns: [60, 64, 65, 622],\n format: defaultFormat,\n length: [16],\n cvvLength: [3],\n luhn: true,\n }, {\n type: 'unionpay',\n patterns: [62, 88],\n format: defaultFormat,\n length: [16, 17, 18, 19],\n cvvLength: [3],\n luhn: false,\n }, {\n type: 'jcb',\n patterns: [35],\n format: defaultFormat,\n length: [16, 19],\n cvvLength: [3],\n luhn: true,\n },\n];\n\n// @dynamic\nexport class CreditCard {\n\n public static cards() {\n return cards;\n }\n\n public static cardFromNumber(num: string): CardDefinition {\n num = (num + '').replace(/\\D/g, '');\n\n for (let i = 0, len = cards.length; i < len; i++) {\n const card = cards[i];\n const ref = card.patterns;\n\n for (let j = 0, len1 = ref.length; j < len1; j++) {\n const pattern = ref[j];\n const p = pattern + '';\n\n if (num.substr(0, p.length) === p) {\n return card;\n }\n }\n }\n }\n\n public static restrictNumeric(e: KeyboardEvent): boolean {\n if (e.metaKey || e.ctrlKey) {\n return true;\n }\n if (e.which === 32) {\n return false;\n }\n if (e.which === 0) {\n return true;\n }\n if (e.which < 33) {\n return true;\n }\n const input = String.fromCharCode(e.which);\n return !!/[\\d\\s]/.test(input);\n }\n\n public static hasTextSelected(target: HTMLInputElement) {\n return target.selectionStart !== null && target.selectionStart !== target.selectionEnd;\n }\n\n public static cardType(num: string) {\n if (!num) {\n return num;\n }\n\n const card = this.cardFromNumber(num);\n\n if (card !== null && typeof card !== 'undefined') {\n return card.type;\n } else {\n return null;\n }\n }\n\n public static formatCardNumber(num: string) {\n num = num.replace(/\\D/g, '');\n const card = this.cardFromNumber(num);\n\n if (!card) {\n return num;\n }\n\n const upperLength = card.length[card.length.length - 1];\n num = num.slice(0, upperLength);\n\n if (card.format.global) {\n const matches = num.match(card.format);\n if (matches != null) {\n return matches.join(' ');\n }\n } else {\n const groups = card.format.exec(num);\n if (groups == null) {\n return;\n }\n groups.shift();\n return groups.filter(Boolean).join(' ');\n }\n }\n\n public static safeVal(value: string, target: HTMLInputElement, updateValue: (value: string) => void): number {\n let cursor: number | null = null;\n const last = target.value;\n let result: number = null;\n\n try {\n cursor = target.selectionStart;\n } catch {\n // do nothing\n }\n\n updateValue(value);\n\n if (cursor !== null && target === document.activeElement) {\n if (cursor === last.length) {\n cursor = value.length;\n }\n\n if (last !== value) {\n const prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n const currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n const digit = value[cursor];\n\n if (/\\d/.test(digit) && prevPair === (`${digit} `) && currPair === (` ${digit}`)) {\n cursor = cursor + 1;\n }\n }\n\n result = cursor;\n }\n return result;\n }\n\n public static isCardNumber(key: number, target: HTMLInputElement): boolean {\n const digit = String.fromCharCode(key);\n if (!/^\\d+$/.test(digit)) {\n return false;\n }\n if (CreditCard.hasTextSelected(target)) {\n return true;\n }\n const value = (target.value + digit).replace(/\\D/g, '');\n const card = CreditCard.cardFromNumber(value);\n\n if (card) {\n return value.length <= card.length[card.length.length - 1];\n } else {\n return value.length <= 16;\n }\n }\n\n public static restrictExpiry(key: number, target: HTMLInputElement) {\n const digit = String.fromCharCode(key);\n if (!/^\\d+$/.test(digit) || this.hasTextSelected(target)) {\n return false;\n }\n const value = `${target.value}${digit}`.replace(/\\D/g, '');\n\n return value.length > 6;\n }\n\n public static replaceFullWidthChars(str: string) {\n if (str === null) {\n str = '';\n }\n\n const fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n const halfWidth = '0123456789';\n let value = '';\n const chars = str.split('');\n\n for (let i = 0; i < chars.length; i++) {\n let chr = chars[i];\n const idx = fullWidth.indexOf(chr);\n if (idx > -1) {\n chr = halfWidth[idx];\n }\n value += chr;\n }\n return value;\n }\n\n public static formatExpiry(expiry: string) {\n const parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n\n if (!parts) {\n return '';\n }\n\n let mon = parts[1] || '';\n let sep = parts[2] || '';\n const year = parts[3] || '';\n\n if (year.length > 0) {\n sep = ' / ';\n } else if (sep === ' /') {\n mon = mon.substring(0, 1);\n sep = '';\n } else if (mon.length === 2 || sep.length > 0) {\n sep = ' / ';\n } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n mon = `0${mon}`;\n sep = ' / ';\n }\n return `${mon}${sep}${year}`;\n }\n\n public static restrictCvc(key: number, target: HTMLInputElement) {\n const digit = String.fromCharCode(key);\n if (!/^\\d+$/.test(digit) || this.hasTextSelected(target)) {\n return false;\n }\n const val = `${target.value}${digit}`;\n return val.length <= 4;\n }\n\n public static luhnCheck(num: string) {\n const digits = num.split('').reverse();\n let odd = true;\n let sum = 0;\n\n for (let i = 0; i < digits.length; i++) {\n let digit = parseInt(digits[i], 10);\n if ((odd = !odd)) {\n digit *= 2;\n }\n if (digit > 9) {\n digit -= 9;\n }\n sum += digit;\n }\n\n return sum % 10 === 0;\n }\n}\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { CreditCard } from './credit-card';\n\nexport class CreditCardValidators {\n public static validateCCNumber(control: AbstractControl): ValidationErrors | null {\n if (Validators.required(control) !== undefined && Validators.required(control) !== null) {\n return {ccNumber: true};\n }\n\n const num = control.value.toString().replace(/\\s+|-/g, '');\n\n if (!/^\\d+$/.test(num)) {\n return {ccNumber: true};\n }\n\n const card = CreditCard.cardFromNumber(num);\n\n if (!card) {\n return {ccNumber: true};\n }\n\n if (card.length.includes(num.length) && (card.luhn === false || CreditCard.luhnCheck(num))) {\n return null;\n }\n\n const upperlength = card.length[card.length.length - 1];\n if (num.length > upperlength) {\n const registeredNum = num.substring(0, upperlength);\n if (CreditCard.luhnCheck(registeredNum)) {\n return null;\n }\n }\n\n return {ccNumber: true};\n }\n\n public static validateExpDate(control: AbstractControl): ValidationErrors | null {\n if (Validators.required(control) !== undefined && Validators.required(control) !== null) {\n return {expDate: true};\n }\n\n if (typeof control.value !== 'undefined' && control.value.length >= 5) {\n let [month, year] = control.value.split(/[\\s/]+/, 2);\n\n if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n const prefix = new Date().getFullYear().toString().slice(0, 2);\n year = prefix + year;\n }\n\n month = parseInt(month, 10).toString();\n year = parseInt(year, 10).toString();\n\n if (/^\\d+$/.test(month) && /^\\d+$/.test(year) && (month >= 1 && month <= 12)) {\n const expiry = new Date(year, month);\n const currentTime = new Date();\n expiry.setMonth(expiry.getMonth() - 1);\n expiry.setMonth(expiry.getMonth() + 1, 1);\n\n if (expiry > currentTime) {\n return null;\n }\n }\n }\n\n return {expDate: true};\n }\n}\n\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n selector: '[ccNumber]',\n exportAs: 'ccNumber',\n standalone: true,\n})\nexport class CreditCardFormatDirective {\n private el = inject(ElementRef);\n private target: HTMLInputElement = this.el.nativeElement;\n private control = inject(NgControl, { optional: true, self: true });\n private cards = CreditCard.cards();\n\n public resolvedScheme$ = new BehaviorSubject<string>('unknown');\n\n /**\n * Updates the value to target element, or FormControl if exists.\n * @param value New input value.\n */\n private updateValue(value: string) {\n if (this.control) {\n this.control.control.setValue(value);\n } else {\n this.target.value = value;\n }\n }\n\n @HostListener('keypress', ['$event'])\n public onKeypress(e: KeyboardEvent) {\n if (CreditCard.restrictNumeric(e)) {\n if (CreditCard.isCardNumber(e.which, this.target)) {\n this.formatCardNumber(e);\n }\n } else {\n e.preventDefault();\n }\n }\n\n @HostListener('keydown', ['$event'])\n public onKeydown(e: KeyboardEvent) {\n this.formatBackCardNumber(e);\n this.reFormatCardNumber();\n }\n\n @HostListener('keyup')\n public onKeyup() {\n this.setCardType();\n }\n\n @HostListener('paste')\n public onPaste() {\n this.reFormatCardNumber();\n }\n\n @HostListener('change')\n public onChange() {\n this.reFormatCardNumber();\n }\n\n @HostListener('input')\n public onInput() {\n this.reFormatCardNumber();\n this.setCardType();\n }\n\n private formatCardNumber(e: KeyboardEvent) {\n const digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n\n const value = this.target.value;\n const card = CreditCard.cardFromNumber(value + digit);\n const length = (value.replace(/\\D/g, '') + digit).length;\n const upperLength = card ? card.length[card.length.length - 1] : 19;\n\n if (length >= upperLength) {\n return;\n }\n }\n\n private formatBackCardNumber(e: KeyboardEvent) {\n const value = this.target.value;\n const selStart = this.target.selectionStart;\n\n if (e.which !== 8) {\n return;\n }\n\n if (selStart != null\n && selStart === this.target.selectionEnd\n && selStart > 0\n && selStart !== value.length\n && value[selStart - 1] === ' ') {\n e.preventDefault();\n if (selStart <= 2) {\n this.updateValue(value.slice(selStart));\n this.target.selectionStart = 0;\n this.target.selectionEnd = 0;\n } else {\n this.updateValue(value.slice(0, selStart - 2) + value.slice(selStart));\n this.target.selectionStart = selStart - 2;\n this.target.selectionEnd = selStart - 2;\n }\n }\n }\n\n private setCardType() {\n const cardType = CreditCard.cardType(this.target.value) || 'unknown';\n\n this.resolvedScheme$.next(cardType);\n\n if (!this.target.classList.contains(cardType)) {\n this.cards.forEach((card) => {\n this.target.classList.remove(card.type);\n });\n\n this.target.classList.remove('unknown');\n this.target.classList.add(cardType);\n this.target.classList.toggle('identified', cardType !== 'unknown');\n }\n }\n\n private reFormatCardNumber() {\n const value = CreditCard.formatCardNumber(\n CreditCard.replaceFullWidthChars(this.target.value),\n );\n const oldValue = this.target.value;\n if (value !== oldValue) {\n this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(value, this.target, (safeVal => {\n this.updateValue(safeVal);\n }));\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[ccCVC]',\n standalone: true,\n})\nexport class CvcFormatDirective {\n private el = inject(ElementRef);\n private target: HTMLInputElement = this.el.nativeElement;\n private control = inject(NgControl, { optional: true, self: true });\n\n /**\n * Updates the value to target element, or FormControl if exists.\n * @param value New input value.\n */\n private updateValue(value: string) {\n if (this.control) {\n this.control.control.setValue(value);\n } else {\n this.target.value = value;\n }\n }\n\n @HostListener('keypress', ['$event'])\n public onKeypress(e: KeyboardEvent) {\n if (!CreditCard.restrictNumeric(e) && !CreditCard.restrictCvc(e.which, this.target)) {\n e.preventDefault();\n }\n }\n\n @HostListener('paste')\n @HostListener('change')\n @HostListener('input')\n public reformatCvc() {\n const val = CreditCard.replaceFullWidthChars(this.target.value)\n .replace(/\\D/g, '')\n .slice(0, 4);\n const oldVal = this.target.value;\n if (val !== oldVal) {\n this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(val, this.target, (safeVal => {\n this.updateValue(safeVal);\n }));\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[ccExp]',\n standalone: true,\n})\nexport class ExpiryFormatDirective {\n private el = inject(ElementRef);\n private target: HTMLInputElement = this.el.nativeElement;\n private control = inject(NgControl, { optional: true, self: true });\n\n /**\n * Updates the value to target element, or FormControl if exists.\n * @param value New input value.\n */\n private updateValue(value: string) {\n if (this.control) {\n this.control.control.setValue(value);\n } else {\n this.target.value = value;\n }\n }\n\n @HostListener('keypress', ['$event'])\n public onKeypress(e: KeyboardEvent) {\n if (CreditCard.restrictNumeric(e)) {\n if (CreditCard.restrictExpiry(e.which, this.target)) {\n this.formatExpiry(e);\n this.formatForwardSlashAndSpace(e);\n this.formatForwardExpiry(e);\n }\n } else {\n e.preventDefault();\n return false;\n }\n }\n\n @HostListener('keydown', ['$event'])\n public onKeydown(e: KeyboardEvent) {\n if (CreditCard.restrictNumeric(e) && CreditCard.restrictExpiry(e.which, this.target)) {\n this.formatBackExpiry(e);\n }\n }\n\n @HostListener('change')\n public onChange() {\n this.reformatExpiry();\n }\n\n @HostListener('input')\n public onInput() {\n this.reformatExpiry();\n }\n\n private formatExpiry(e: KeyboardEvent) {\n const digit = String.fromCharCode(e.which);\n const val = `${this.target.value}${digit}`;\n\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n\n if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n e.preventDefault();\n this.updateValue(`0${val} / `);\n } else if (/^\\d\\d$/.test(val)) {\n e.preventDefault();\n const m1 = parseInt(val[0], 10);\n const m2 = parseInt(val[1], 10);\n if (m2 > 2 && m1 !== 0) {\n this.updateValue(`0${m1} / ${m2}`);\n } else {\n this.updateValue(`${val} / `);\n }\n\n }\n }\n\n private formatForwardSlashAndSpace(e: KeyboardEvent) {\n const which = String.fromCharCode(e.which);\n const val = this.target.value;\n\n if (!(which === '/' || which === ' ')) {\n return false;\n }\n if (/^\\d$/.test(val) && val !== '0') {\n this.updateValue(`0${val} / `);\n }\n }\n\n private formatForwardExpiry(e: KeyboardEvent) {\n const digit = String.fromCharCode(e.which);\n const val = this.target.value;\n\n if (!/^\\d+$/.test(digit) && /^\\d\\d$/.test(val)) {\n this.updateValue(this.target.value = `${val} / `);\n }\n }\n\n private formatBackExpiry(e: KeyboardEvent) {\n const val = this.target.valueOf as unknown as string;\n\n if (e.which !== 8) {\n return;\n }\n if ((this.target.selectionStart != null) && this.target.selectionStart !== val.length) {\n return;\n }\n if (/\\d\\s\\/\\s$/.test(val)) {\n e.preventDefault();\n this.updateValue(val.replace(/\\d\\s\\/\\s$/, ''));\n }\n }\n\n private reformatExpiry() {\n const val = CreditCard.formatExpiry(\n CreditCard.replaceFullWidthChars(this.target.value),\n );\n\n const oldVal = this.target.value;\n if (val !== oldVal) {\n this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(val, this.target, (safeVal => {\n this.updateValue(safeVal);\n }));\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CreditCardFormatDirective } from './directives/credit-card-format.directive';\nimport { ExpiryFormatDirective } from './directives/expiry-format.directive';\nimport { CvcFormatDirective } from './directives/cvc-format.directive';\n\nconst CREDIT_CARD_LIBRARY_DIRECTIVES = [\n CreditCardFormatDirective,\n ExpiryFormatDirective,\n CvcFormatDirective,\n];\n\n@NgModule({\n imports: [CREDIT_CARD_LIBRARY_DIRECTIVES],\n exports: [CREDIT_CARD_LIBRARY_DIRECTIVES],\n})\nexport class CreditCardDirectivesModule {\n}\n","/*\n * Public API Surface of angular-cc-library\n */\n\nexport * from './lib/validators';\nexport * from './lib/credit-card';\n\nexport * from './lib/directives/credit-card-format.directive';\nexport * from './lib/directives/cvc-format.directive';\nexport * from './lib/directives/expiry-format.directive';\n\nexport * from './lib/credit-card-directives.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA,MAAM,aAAa,GAAG,YAAY;AAWlC,MAAM,KAAK,GAAqB;AAC9B,IAAA;AACE,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;AACtD,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,CAAC,GAAG,CAAC;AACf,QAAA,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,IAAI,CAAC;AAChB,QAAA,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,CAAC,CAAC,CAAC;AACb,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACtD,QAAA,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,QAAA,MAAM,EAAE,+BAA+B;QACvC,MAAM,EAAE,CAAC,EAAE,CAAC;AACZ,QAAA,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC1B,QAAA,MAAM,EAAE,+BAA+B;QACvC,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;KACX,EAAE;AACD,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,QAAA,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACxB,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,KAAK;KACZ,EAAE;AACD,QAAA,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC,EAAE,CAAC;AACd,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;CACF;AAED;MACa,UAAU,CAAA;AAEd,IAAA,OAAO,KAAK,GAAA;AACjB,QAAA,OAAO,KAAK;;IAGP,OAAO,cAAc,CAAC,GAAW,EAAA;AACtC,QAAA,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;AAEzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAChD,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE;AAEtB,gBAAA,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,oBAAA,OAAO,IAAI;;;;;IAMZ,OAAO,eAAe,CAAC,CAAgB,EAAA;QAC5C,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE;AAC1B,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;AAClB,YAAA,OAAO,KAAK;;AAEd,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE;AAChB,YAAA,OAAO,IAAI;;QAEb,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGxB,OAAO,eAAe,CAAC,MAAwB,EAAA;AACpD,QAAA,OAAO,MAAM,CAAC,cAAc,KAAK,IAAI,IAAI,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,YAAY;;IAGjF,OAAO,QAAQ,CAAC,GAAW,EAAA;QAChC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,GAAG;;QAGZ,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAErC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAChD,OAAO,IAAI,CAAC,IAAI;;aACX;AACL,YAAA,OAAO,IAAI;;;IAIR,OAAO,gBAAgB,CAAC,GAAW,EAAA;QACxC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAErC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,GAAG;;AAGZ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;;;aAErB;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB;;YAEF,MAAM,CAAC,KAAK,EAAE;YACd,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;;AAIpC,IAAA,OAAO,OAAO,CAAC,KAAa,EAAE,MAAwB,EAAE,WAAoC,EAAA;QACjG,IAAI,MAAM,GAAkB,IAAI;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK;QACzB,IAAI,MAAM,GAAW,IAAI;AAEzB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,CAAC,cAAc;;AAC9B,QAAA,MAAM;;;QAIR,WAAW,CAAC,KAAK,CAAC;QAElB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,aAAa,EAAE;AACxD,YAAA,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAC1B,gBAAA,MAAM,GAAG,KAAK,CAAC,MAAM;;AAGvB,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAC3D,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;AAC5D,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;gBAE3B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,MAAM,CAAA,EAAG,KAAK,CAAG,CAAA,CAAA,CAAC,IAAI,QAAQ,MAAM,IAAI,KAAK,CAAA,CAAE,CAAC,EAAE;AAChF,oBAAA,MAAM,GAAG,MAAM,GAAG,CAAC;;;YAIvB,MAAM,GAAG,MAAM;;AAEjB,QAAA,OAAO,MAAM;;AAGR,IAAA,OAAO,YAAY,CAAC,GAAW,EAAE,MAAwB,EAAA;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK;;AAEd,QAAA,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI;;AAEb,QAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC;QAE7C,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;;aACrD;AACL,YAAA,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE;;;AAItB,IAAA,OAAO,cAAc,CAAC,GAAW,EAAE,MAAwB,EAAA;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AACxD,YAAA,OAAO,KAAK;;AAEd,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,MAAM,CAAC,KAAK,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAE1D,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;;IAGlB,OAAO,qBAAqB,CAAC,GAAW,EAAA;AAC7C,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB,GAAG,GAAG,EAAE;;QAGV,MAAM,SAAS,GAAG,8DAA8D;QAChF,MAAM,SAAS,GAAG,YAAY;QAC9B,IAAI,KAAK,GAAG,EAAE;QACd,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;YAClB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;AACZ,gBAAA,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;;YAEtB,KAAK,IAAI,GAAG;;AAEd,QAAA,OAAO,KAAK;;IAGP,OAAO,YAAY,CAAC,MAAc,EAAA;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC;QAE3D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;QAGX,IAAI,GAAG,GAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACzB,IAAI,GAAG,GAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,GAAG,GAAG,KAAK;;AACN,aAAA,IAAI,GAAG,KAAK,IAAI,EAAE;YACvB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,GAAG,EAAE;;AACH,aAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,GAAG,GAAG,KAAK;;AACN,aAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE;AAC3D,YAAA,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;YACf,GAAG,GAAG,KAAK;;AAEb,QAAA,OAAO,GAAG,GAAG,CAAA,EAAG,GAAG,CAAG,EAAA,IAAI,EAAE;;AAGvB,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,MAAwB,EAAA;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AACxD,YAAA,OAAO,KAAK;;QAEd,MAAM,GAAG,GAAG,CAAG,EAAA,MAAM,CAAC,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE;AACrC,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC;;IAGjB,OAAO,SAAS,CAAC,GAAW,EAAA;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;QACtC,IAAI,GAAG,GAAG,IAAI;QACd,IAAI,GAAG,GAAG,CAAC;AAEX,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnC,YAAA,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;gBAChB,KAAK,IAAI,CAAC;;AAEZ,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,KAAK,IAAI,CAAC;;YAEZ,GAAG,IAAI,KAAK;;AAGd,QAAA,OAAO,GAAG,GAAG,EAAE,KAAK,CAAC;;AAExB;;MC9SY,oBAAoB,CAAA;IACxB,OAAO,gBAAgB,CAAC,OAAwB,EAAA;AACrD,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;AACvF,YAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC;;AAGzB,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QAE1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC;;QAGzB,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC;QAE3C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC;;QAGzB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,EAAE;YAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;AACnD,YAAA,IAAI,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;AACvC,gBAAA,OAAO,IAAI;;;AAIf,QAAA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC;;IAGlB,OAAO,eAAe,CAAC,OAAwB,EAAA;AACpD,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;AACvF,YAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC;;AAGxB,QAAA,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpD,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrE,gBAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,gBAAA,IAAI,GAAG,MAAM,GAAG,IAAI;;YAGtB,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;YACtC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;YAEpC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE;gBAC5E,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AACpC,gBAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE;gBAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtC,gBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAEzC,gBAAA,IAAI,MAAM,GAAG,WAAW,EAAE;AACxB,oBAAA,OAAO,IAAI;;;;AAKjB,QAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAC;;AAEzB;;MCxDY,yBAAyB,CAAA;AALtC,IAAA,WAAA,GAAA;AAMU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAqB,IAAI,CAAC,EAAE,CAAC,aAAa;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE;AAE3B,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAS,SAAS,CAAC;AAyHhE;AAvHC;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;;;AAKtB,IAAA,UAAU,CAAC,CAAgB,EAAA;AAChC,QAAA,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AACjC,YAAA,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;aAErB;YACL,CAAC,CAAC,cAAc,EAAE;;;AAKf,IAAA,SAAS,CAAC,CAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE;;IAIpB,OAAO,GAAA;QACZ,IAAI,CAAC,WAAW,EAAE;;IAIb,OAAO,GAAA;QACZ,IAAI,CAAC,kBAAkB,EAAE;;IAIpB,QAAQ,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE;;IAIpB,OAAO,GAAA;QACZ,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,WAAW,EAAE;;AAGZ,IAAA,gBAAgB,CAAC,CAAgB,EAAA;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACxB;;AAGF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM;QACxD,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;AAEnE,QAAA,IAAI,MAAM,IAAI,WAAW,EAAE;YACzB;;;AAII,IAAA,oBAAoB,CAAC,CAAgB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;AAE3C,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YACjB;;QAGF,IAAI,QAAQ,IAAI;AACX,eAAA,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC;AACzB,eAAA,QAAQ,GAAG;eACX,QAAQ,KAAK,KAAK,CAAC;eACnB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAChC,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;;iBACvB;gBACL,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtE,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,QAAQ,GAAG,CAAC;;;;IAKrC,WAAW,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS;AAEpE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,aAAC,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,KAAK,SAAS,CAAC;;;IAI9D,kBAAkB,GAAA;AACxB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CACvC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACpD;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAClC,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAG;AACxG,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;aAC1B,EAAE;;;+GA5HI,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAqBE,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAWnC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAMlC,YAAY;uBAAC,OAAO;;sBAKpB,YAAY;uBAAC,OAAO;;sBAKpB,YAAY;uBAAC,QAAQ;;sBAKrB,YAAY;uBAAC,OAAO;;;MCtDV,kBAAkB,CAAA;AAJ/B,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAqB,IAAI,CAAC,EAAE,CAAC,aAAa;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAmCpE;AAjCC;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;;;AAKtB,IAAA,UAAU,CAAC,CAAgB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YACnF,CAAC,CAAC,cAAc,EAAE;;;IAOf,WAAW,GAAA;QAChB,MAAM,GAAG,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;AAC3D,aAAA,OAAO,CAAC,KAAK,EAAE,EAAE;AACjB,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,GAAG,KAAK,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAG;AACtG,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;aAC1B,EAAE;;;+GAnCI,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAkBE,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAOnC,YAAY;uBAAC,OAAO;;sBACpB,YAAY;uBAAC,QAAQ;;sBACrB,YAAY;uBAAC,OAAO;;;MC1BV,qBAAqB,CAAA;AAJlC,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAqB,IAAI,CAAC,EAAE,CAAC,aAAa;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAqHpE;AAnHC;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;;aAC/B;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;;;AAKtB,IAAA,UAAU,CAAC,CAAgB,EAAA;AAChC,QAAA,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AACjC,YAAA,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;;;aAExB;YACL,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK;;;AAKT,IAAA,SAAS,CAAC,CAAgB,EAAA;QAC/B,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AACpF,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;IAKrB,QAAQ,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;;IAIhB,OAAO,GAAA;QACZ,IAAI,CAAC,cAAc,EAAE;;AAGf,IAAA,YAAY,CAAC,CAAgB,EAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE;QAE1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACxB;;AAGF,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE;YACpD,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAA,GAAA,CAAK,CAAC;;AACzB,aAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC7B,CAAC,CAAC,cAAc,EAAE;YAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACtB,IAAI,CAAC,WAAW,CAAC,CAAA,CAAA,EAAI,EAAE,CAAM,GAAA,EAAA,EAAE,CAAE,CAAA,CAAC;;iBAC7B;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA,GAAA,CAAK,CAAC;;;;AAM3B,IAAA,0BAA0B,CAAC,CAAgB,EAAA;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAE7B,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,KAAK;;QAEd,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAA,GAAA,CAAK,CAAC;;;AAI1B,IAAA,mBAAmB,CAAC,CAAgB,EAAA;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAE7B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAA,EAAG,GAAG,CAAA,GAAA,CAAK,CAAC;;;AAI7C,IAAA,gBAAgB,CAAC,CAAgB,EAAA;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAA4B;AAEpD,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YACjB;;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,GAAG,CAAC,MAAM,EAAE;YACrF;;AAEF,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzB,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;;;IAI1C,cAAc,GAAA;AACpB,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CACjC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACpD;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,GAAG,KAAK,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAG;AACtG,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;aAC1B,EAAE;;;+GArHI,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAkBE,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAcnC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAOlC,YAAY;uBAAC,QAAQ;;sBAKrB,YAAY;uBAAC,OAAO;;;AC7CvB,MAAM,8BAA8B,GAAG;IACrC,yBAAyB;IACzB,qBAAqB;IACrB,kBAAkB;CACnB;MAMY,0BAA0B,CAAA;+GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YATrC,yBAAyB;YACzB,qBAAqB;AACrB,YAAA,kBAAkB,aAFlB,yBAAyB;YACzB,qBAAqB;YACrB,kBAAkB,CAAA,EAAA,CAAA,CAAA;gHAOP,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,8BAA8B,CAAC;oBACzC,OAAO,EAAE,CAAC,8BAA8B,CAAC;AAC1C,iBAAA;;;ACfD;;AAEG;;ACFH;;AAEG;;;;"}