{"version":3,"file":"loan-calculator.js","sources":["../../FrontEnd/PDP-FE/src/scripts/modules/loan-calculator.ts"],"sourcesContent":["import { Component } from '@verndale/core';\n\ntype DataLayerObject = {\n  event: string;\n  down_payment: string;\n  loan_duration: string;\n  credit_rating: string;\n  loan_amount: string;\n  total_monthly_payment: string;\n  api_flag: string;\n  price: string;\n};\nclass LoanCalculator extends Component {\n  private downPaymentPercentage: number;\n  private loanCalculatorEndpoint: string;\n  private msrpValue: number;\n  private loanDuration: number;\n  private defaultMonthly: string;\n  private defaultLoanAmount: string;\n  private totalMonthlyPayment: string;\n  private resultCode: string;\n  private isBoatDetailPage: boolean;\n\n  constructor(el: HTMLElement) {\n    super(el);\n    this.loanCalculatorEndpoint = this.el.dataset.loanCalculatorEndpoint || '';\n    this.downPaymentPercentage = 0;\n    this.loanDuration = 0;\n    this.defaultMonthly = this.el.dataset.defaultMonthly || '';\n    this.defaultLoanAmount = this.el.dataset.defaultLoanAmount || '';\n    this.msrpValue = Number(this.el.dataset.msrpValue);\n    this.isBoatDetailPage = this.el.dataset.isBoatDetailPage === 'true';\n    this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n    this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n    this.totalMonthlyPayment = '0';\n    this.resultCode = 'N/C';\n  }\n\n  setupDefaults() {\n    this.dom = {\n      el: this.el,\n      sliderElements: this.el.querySelectorAll<HTMLElement>('.loan-calculator__slider'),\n      tickmarksElementsDP: this.el.querySelectorAll<HTMLElement>(\n        '.loan-calculator__tickmarks.down-payment option'\n      ),\n      tickmarksElementsLD: this.el.querySelectorAll<HTMLElement>(\n        '.loan-calculator__tickmarks.loan-duration option'\n      ),\n      tickmarksRangeDP: this.el.querySelector<HTMLElement>(\n        '.form-control-range.range-slider__range.down-payment'\n      ),\n      tickmarksRangeLD: this.el.querySelector<HTMLElement>(\n        '.form-control-range.range-slider__range.loan-duration'\n      ),\n      creditScoreSelect: this.el.querySelector<HTMLElement>('.loan-calculator__credit-select'),\n      downPaymentInput: this.el.querySelector<HTMLElement>('.loan-calculator__input.down-payment'),\n      downPaymentDisplay: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__down-payment-display'\n      ),\n      loanDurationInput: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__input.loan-duration'\n      ),\n      form: this.el.querySelector<HTMLElement>('.loan-calculator__content-left'),\n      msrpInput: this.el.querySelector<HTMLElement>('.loan-calculator__msrp-value'),\n      errorDownPayment: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__error-container.down-payment'\n      ),\n      errorLoanDuration: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__error-container.loan-duration'\n      ),\n      getPrequalifiedBtn: this.el.querySelector<HTMLElement>('.loan-calculator__btn-cta'),\n      loanCalculatorDialog: document.querySelector<HTMLElement>('.loan-calculator__dialog'),\n      closeBtnLoanCalculatorDialog: document.querySelector<HTMLElement>(\n        '.loan-calculator__dialog-close-btn'\n      ),\n      contactDialog: document.querySelector<HTMLElement>('.loan-calculator__contact-dialog'),\n      closeBtnLoanCalculatorContactDialog: document.querySelector<HTMLElement>(\n        '.loan-calculator__contact-dialog-close-btn'\n      ),\n      totalMonthlyPayment: this.el.querySelector<HTMLElement>('.loan-calculator__total-result'),\n      loanAmountValue: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__loan-wrapper .loan-calculator__value'\n      ),\n      creditRatingLabels: this.el.querySelectorAll<HTMLElement>(\n        '.loan-calculator__range-label-container .loan-calculator__range-label'\n      ),\n      creditRatingValue: this.el.querySelector<HTMLElement>(\n        '.loan-calculator__credit-wrapper .loan-calculator__value'\n      )\n    };\n\n    this.msrpValue = Number(this.el.dataset.msrpValue);\n    this.isBoatDetailPage = this.el.dataset.isBoatDetailPage === 'true';\n    this.loanCalculatorEndpoint = this.el.dataset.loanCalculatorEndpoint || '';\n    this.totalMonthlyPayment = '0';\n    this.resultCode = 'N/C';\n\n    this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n    this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n    this.initMSRP();\n  }\n\n  addListeners() {\n    (this.dom.sliderElements as NodeList).forEach(slider => {\n      slider.addEventListener('input', this.updateValue.bind(this));\n    });\n    (this.dom.tickmarksRangeDP as HTMLElement).addEventListener(\n      'input',\n      this.updateTickmarks.bind(this)\n    );\n    (this.dom.tickmarksRangeLD as HTMLElement).addEventListener(\n      'input',\n      this.updateTickmarks.bind(this)\n    );\n    (this.dom.form as HTMLElement).addEventListener('submit', this.handleSubmit.bind(this));\n    (this.dom.form as HTMLElement).addEventListener('reset', this.handleReset.bind(this));\n    (this.dom.getPrequalifiedBtn as HTMLElement).addEventListener(\n      'click',\n      this.openDialog.bind(this)\n    );\n    (this.dom.msrpInput as HTMLInputElement).addEventListener('input', this.handleMsrpInput.bind(this));\n\n    (this.dom.closeBtnLoanCalculatorDialog as HTMLElement).addEventListener('click', () => {\n      (this.dom.loanCalculatorDialog as HTMLDialogElement).close();\n      document.body.style.overflow = 'auto';\n    });\n    (this.dom.closeBtnLoanCalculatorContactDialog as HTMLElement).addEventListener('click', () => {\n      document.body.style.overflow = 'auto';\n      (this.dom.contactDialog as HTMLDialogElement).close();\n    });\n  }\n\n  handleMsrpInput() {\n    // this.msrpValue = Number((this.dom.msrpInput as HTMLInputElement).value);\n    this.msrpValue = Number((this.dom.msrpInput as HTMLInputElement).value.replace(/[^0-9]/g, ''));\n    this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n    this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n    this.initMSRP();\n  }\n\n  openDialog(e: Event) {\n    e.preventDefault();\n    const _window = window as Window &\n      typeof globalThis & {\n        dataLayer: Array<DataLayerObject>;\n      };\n    const loanAmountCalc = (\n      Number(this.msrpValue) -\n      Number(this.msrpValue) * (this.downPaymentPercentage / 100)\n    ).toFixed(2);\n    const ficoScoreSelected = (this.dom.creditScoreSelect as HTMLSelectElement).selectedOptions[0]\n      .text;\n    (this.dom.loanCalculatorDialog as HTMLDialogElement).showModal();\n    document.body.style.overflow = 'hidden';\n    \n    // datalayer push\n    const event = this.isBoatDetailPage ? 'pdp_enhanced_loan_calculator_prequalified' : 'pcalculator_get_prequalified';\n    _window.dataLayer = _window.dataLayer || [];\n    _window.dataLayer.push({\n      event: event,\n      down_payment: `${this.downPaymentPercentage.toString()}`,\n      loan_duration: `${this.loanDuration.toString()}`,\n      credit_rating: ficoScoreSelected.toString().split(' (')[0],\n      loan_amount: Number(loanAmountCalc).toString(),\n      total_monthly_payment: this.totalMonthlyPayment,\n      api_flag: this.resultCode,\n      price: this.msrpValue.toString()\n    });\n  }\n\n  initMSRP() {\n    const msrpInput = this.dom.msrpInput as HTMLInputElement;\n    const rawValue = msrpInput.value.replace(/[^0-9]/g, '');\n    const numberValue = parseInt(rawValue, 10);\n\n    const editableMsrp = !msrpInput.hasAttribute('disabled');\n\n    if (editableMsrp) {\n      msrpInput.classList.add('--editable');\n    }\n\n    if (isNaN(numberValue)) {\n      msrpInput.value = '';\n    } else {\n      let formattedValue = numberValue.toString();\n      formattedValue = formattedValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n      msrpInput.value = `${formattedValue}`;\n    }\n\n    (this.dom.creditRatingValue as HTMLElement).innerHTML = (\n      this.dom.creditScoreSelect as HTMLSelectElement\n    ).selectedOptions[0].text\n      .toString()\n      .split(' (')[0];\n  }\n\n  handleReset() {\n    setTimeout(() => {\n      (this.dom.totalMonthlyPayment as HTMLElement).innerHTML = this.defaultMonthly;\n      (this.dom.loanAmountValue as HTMLElement).innerHTML = this.defaultLoanAmount;\n      (this.dom.creditRatingValue as HTMLElement).innerHTML = (\n        this.dom.creditScoreSelect as HTMLSelectElement\n      ).selectedOptions[0].text\n        .toString()\n        .split(' (')[0];\n      this.initMSRP();\n      this.updateTickmarks({ target: this.dom.tickmarksRangeDP } as Event);\n      this.updateTickmarks({ target: this.dom.tickmarksRangeLD } as Event);\n    }, 10);\n  }\n\n  updateValue(event: Event | { target: HTMLElement | NodeListOf<HTMLElement> }) {\n    const target = event.target as HTMLInputElement;\n    const value = Number(target.value);\n    const progress = (value / Number(target.max)) * 100;\n    target.style.background = `linear-gradient(to right, #0c4787 0%, #0c4787 ${progress}%, #d1d3d4 ${progress}%, #d1d3d4 100%)`;\n  }\n\n  updateTickmarks(event: Event) {\n    const target = event.target as HTMLInputElement;\n    const selectedValue = Number(target.value);\n    if (target.classList.contains('down-payment')) {\n      (this.dom.tickmarksElementsDP as NodeList).forEach((tickmark, index) => {\n        if (index === selectedValue - 1) {\n          (tickmark as HTMLElement).classList.add('selected');\n          this.downPaymentPercentage = Number((tickmark as HTMLInputElement).value);\n\n          const downPaymentDisplay = this.dom.downPaymentDisplay as HTMLElement;\n          const downPaymentValue = (this.msrpValue * (this.downPaymentPercentage / 100)).toFixed(0);\n          const formattedValue = downPaymentValue.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n          downPaymentDisplay.innerHTML = `$${formattedValue}`;\n        } else {\n          (tickmark as HTMLElement).classList.remove('selected');\n        }\n      });\n    } else {\n      (this.dom.tickmarksElementsLD as NodeList).forEach((tickmark, index) => {\n        if (index === selectedValue - 1) {\n          (tickmark as HTMLElement).classList.add('selected');\n          this.loanDuration = Number((tickmark as HTMLInputElement).value);\n        } else {\n          (tickmark as HTMLElement).classList.remove('selected');\n        }\n      });\n    }\n  }\n\n  async handleSubmit(e: Event) {\n    e.preventDefault();\n    const target = e.target as HTMLFormElement;\n    const formData = new FormData(target);\n    const ficoScoreSelected = (this.dom.creditScoreSelect as HTMLSelectElement).selectedOptions[0]\n      .text;\n    const _window = window as Window &\n      typeof globalThis & {\n        dataLayer: Array<DataLayerObject>;\n      };\n\n    const loanAmountCalc = (\n      Number(this.msrpValue) -\n      Number(this.msrpValue) * (this.downPaymentPercentage / 100)\n    ).toFixed(2);\n\n    formData.append('ficoScore', (this.dom.creditScoreSelect as HTMLInputElement).value);\n    formData.delete('loan-duration');\n    formData.delete('fico-score');\n    formData.delete('down-payment');\n    formData.set('percentDown', this.downPaymentPercentage.toString());\n    formData.set('term', (Number(this.loanDuration) * 12).toString());\n    formData.append('loanAmount', Math.round(Number(loanAmountCalc)).toString());\n\n    try {\n      const res = await fetch(this.loanCalculatorEndpoint, {\n        method: 'POST',\n        headers: {\n          'Access-Control-Allow-Origin': '*',\n          'Content-Type': 'application/json;charset=utf-8'\n        },\n        body: JSON.stringify(Object.fromEntries(formData))\n      });\n\n      const resData = await res.json();\n      this.resultCode = resData.ResultCode;\n      if (resData.ResultCode.toString() === 'F') {\n        (this.dom.totalMonthlyPayment as HTMLElement).innerHTML = resData.MonthlyPayment.toString();\n        (this.dom.loanAmountValue as HTMLElement).innerHTML = new Intl.NumberFormat('en-US', {\n          style: 'currency',\n          currency: 'USD'\n        }).format(Number(loanAmountCalc));\n\n        this.totalMonthlyPayment = resData.MonthlyPayment.toString();\n\n        (this.dom.creditRatingValue as HTMLElement).innerHTML = ficoScoreSelected\n          .toString()\n          .split(' (')[0];\n      } else {\n        (this.dom.contactDialog as HTMLDialogElement).showModal();\n        document.body.style.overflow = 'hidden';\n      }\n\n      // datalayer push\n      const event = this.isBoatDetailPage ? 'pdp_enhanced_loan_calculator_interactions' : 'pcalculator_calculate';\n\n      _window.dataLayer = _window.dataLayer || [];\n      _window.dataLayer.push({\n        event,\n        down_payment: `${formData.get('percentDown')}`,\n        loan_duration: `${this.loanDuration.toString()}`,\n        credit_rating: ficoScoreSelected.toString().split(' (')[0],\n        loan_amount: Number(loanAmountCalc).toString(),\n        total_monthly_payment: this.totalMonthlyPayment,\n        api_flag: resData.ResultCode.toString(),\n        price: this.msrpValue.toString()\n      });\n    } catch (error) {\n      console.error('Error:', error);\n    }\n  }\n}\n\nexport default LoanCalculator;\n"],"names":["LoanCalculator","Component","el","__publicField","slider","e","_window","loanAmountCalc","ficoScoreSelected","event","msrpInput","rawValue","numberValue","formattedValue","target","progress","selectedValue","tickmark","index","downPaymentDisplay","formData","resData","error"],"mappings":"wMAYA,MAAMA,UAAuBC,CAAU,CAWrC,YAAYC,EAAiB,CAC3B,MAAMA,CAAE,EAXFC,EAAA,8BACAA,EAAA,+BACAA,EAAA,kBACAA,EAAA,qBACAA,EAAA,uBACAA,EAAA,0BACAA,EAAA,4BACAA,EAAA,mBACAA,EAAA,yBAIN,KAAK,uBAAyB,KAAK,GAAG,QAAQ,wBAA0B,GACxE,KAAK,sBAAwB,EAC7B,KAAK,aAAe,EACpB,KAAK,eAAiB,KAAK,GAAG,QAAQ,gBAAkB,GACxD,KAAK,kBAAoB,KAAK,GAAG,QAAQ,mBAAqB,GAC9D,KAAK,UAAY,OAAO,KAAK,GAAG,QAAQ,SAAS,EACjD,KAAK,iBAAmB,KAAK,GAAG,QAAQ,mBAAqB,OAC7D,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,oBAAsB,IAC3B,KAAK,WAAa,KACpB,CAEA,eAAgB,CACd,KAAK,IAAM,CACT,GAAI,KAAK,GACT,eAAgB,KAAK,GAAG,iBAA8B,0BAA0B,EAChF,oBAAqB,KAAK,GAAG,iBAC3B,iDACF,EACA,oBAAqB,KAAK,GAAG,iBAC3B,kDACF,EACA,iBAAkB,KAAK,GAAG,cACxB,sDACF,EACA,iBAAkB,KAAK,GAAG,cACxB,uDACF,EACA,kBAAmB,KAAK,GAAG,cAA2B,iCAAiC,EACvF,iBAAkB,KAAK,GAAG,cAA2B,sCAAsC,EAC3F,mBAAoB,KAAK,GAAG,cAC1B,wCACF,EACA,kBAAmB,KAAK,GAAG,cACzB,uCACF,EACA,KAAM,KAAK,GAAG,cAA2B,gCAAgC,EACzE,UAAW,KAAK,GAAG,cAA2B,8BAA8B,EAC5E,iBAAkB,KAAK,GAAG,cACxB,gDACF,EACA,kBAAmB,KAAK,GAAG,cACzB,iDACF,EACA,mBAAoB,KAAK,GAAG,cAA2B,2BAA2B,EAClF,qBAAsB,SAAS,cAA2B,0BAA0B,EACpF,6BAA8B,SAAS,cACrC,oCACF,EACA,cAAe,SAAS,cAA2B,kCAAkC,EACrF,oCAAqC,SAAS,cAC5C,4CACF,EACA,oBAAqB,KAAK,GAAG,cAA2B,gCAAgC,EACxF,gBAAiB,KAAK,GAAG,cACvB,wDACF,EACA,mBAAoB,KAAK,GAAG,iBAC1B,uEACF,EACA,kBAAmB,KAAK,GAAG,cACzB,0DACF,CAAA,EAGF,KAAK,UAAY,OAAO,KAAK,GAAG,QAAQ,SAAS,EACjD,KAAK,iBAAmB,KAAK,GAAG,QAAQ,mBAAqB,OAC7D,KAAK,uBAAyB,KAAK,GAAG,QAAQ,wBAA0B,GACxE,KAAK,oBAAsB,IAC3B,KAAK,WAAa,MAElB,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,SAAS,CAChB,CAEA,cAAe,CACZ,KAAK,IAAI,eAA4B,QAAkBC,GAAA,CACtDA,EAAO,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,CAAA,CAC7D,EACA,KAAK,IAAI,iBAAiC,iBACzC,QACA,KAAK,gBAAgB,KAAK,IAAI,CAAA,EAE/B,KAAK,IAAI,iBAAiC,iBACzC,QACA,KAAK,gBAAgB,KAAK,IAAI,CAAA,EAE/B,KAAK,IAAI,KAAqB,iBAAiB,SAAU,KAAK,aAAa,KAAK,IAAI,CAAC,EACrF,KAAK,IAAI,KAAqB,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,EACnF,KAAK,IAAI,mBAAmC,iBAC3C,QACA,KAAK,WAAW,KAAK,IAAI,CAAA,EAE1B,KAAK,IAAI,UAA+B,iBAAiB,QAAS,KAAK,gBAAgB,KAAK,IAAI,CAAC,EAEjG,KAAK,IAAI,6BAA6C,iBAAiB,QAAS,IAAM,CACpF,KAAK,IAAI,qBAA2C,QAC5C,SAAA,KAAK,MAAM,SAAW,MAAA,CAChC,EACA,KAAK,IAAI,oCAAoD,iBAAiB,QAAS,IAAM,CACnF,SAAA,KAAK,MAAM,SAAW,OAC9B,KAAK,IAAI,cAAoC,OAAM,CACrD,CACH,CAEA,iBAAkB,CAEX,KAAA,UAAY,OAAQ,KAAK,IAAI,UAA+B,MAAM,QAAQ,UAAW,EAAE,CAAC,EAC7F,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,SAAS,CAChB,CAEA,WAAWC,EAAU,CACnBA,EAAE,eAAe,EACjB,MAAMC,EAAU,OAIVC,GACJ,OAAO,KAAK,SAAS,EACrB,OAAO,KAAK,SAAS,GAAK,KAAK,sBAAwB,MACvD,QAAQ,CAAC,EACLC,EAAqB,KAAK,IAAI,kBAAwC,gBAAgB,CAAC,EAC1F,KACF,KAAK,IAAI,qBAA2C,YAC5C,SAAA,KAAK,MAAM,SAAW,SAGzB,MAAAC,EAAQ,KAAK,iBAAmB,4CAA8C,+BAC5EH,EAAA,UAAYA,EAAQ,WAAa,CAAA,EACzCA,EAAQ,UAAU,KAAK,CACrB,MAAAG,EACA,aAAc,GAAG,KAAK,sBAAsB,SAAU,CAAA,GACtD,cAAe,GAAG,KAAK,aAAa,SAAU,CAAA,GAC9C,cAAeD,EAAkB,SAAA,EAAW,MAAM,IAAI,EAAE,CAAC,EACzD,YAAa,OAAOD,CAAc,EAAE,SAAS,EAC7C,sBAAuB,KAAK,oBAC5B,SAAU,KAAK,WACf,MAAO,KAAK,UAAU,SAAS,CAAA,CAChC,CACH,CAEA,UAAW,CACH,MAAAG,EAAY,KAAK,IAAI,UACrBC,EAAWD,EAAU,MAAM,QAAQ,UAAW,EAAE,EAChDE,EAAc,SAASD,EAAU,EAAE,EAQrC,GANiB,CAACD,EAAU,aAAa,UAAU,GAG3CA,EAAA,UAAU,IAAI,YAAY,EAGlC,MAAME,CAAW,EACnBF,EAAU,MAAQ,OACb,CACD,IAAAG,EAAiBD,EAAY,WAChBC,EAAAA,EAAe,QAAQ,wBAAyB,GAAG,EAC1DH,EAAA,MAAQ,GAAGG,CAAc,EACrC,CAEC,KAAK,IAAI,kBAAkC,UAC1C,KAAK,IAAI,kBACT,gBAAgB,CAAC,EAAE,KAClB,SAAS,EACT,MAAM,IAAI,EAAE,CAAC,CAClB,CAEA,aAAc,CACZ,WAAW,IAAM,CACd,KAAK,IAAI,oBAAoC,UAAY,KAAK,eAC9D,KAAK,IAAI,gBAAgC,UAAY,KAAK,kBAC1D,KAAK,IAAI,kBAAkC,UAC1C,KAAK,IAAI,kBACT,gBAAgB,CAAC,EAAE,KAClB,SAAS,EACT,MAAM,IAAI,EAAE,CAAC,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,EACnE,KAAK,gBAAgB,CAAE,OAAQ,KAAK,IAAI,iBAA2B,GAClE,EAAE,CACP,CAEA,YAAYJ,EAAkE,CAC5E,MAAMK,EAASL,EAAM,OAEfM,EADQ,OAAOD,EAAO,KAAK,EACP,OAAOA,EAAO,GAAG,EAAK,IAChDA,EAAO,MAAM,WAAa,iDAAiDC,CAAQ,cAAcA,CAAQ,kBAC3G,CAEA,gBAAgBN,EAAc,CAC5B,MAAMK,EAASL,EAAM,OACfO,EAAgB,OAAOF,EAAO,KAAK,EACrCA,EAAO,UAAU,SAAS,cAAc,EACzC,KAAK,IAAI,oBAAiC,QAAQ,CAACG,EAAUC,IAAU,CAClE,GAAAA,IAAUF,EAAgB,EAAG,CAC9BC,EAAyB,UAAU,IAAI,UAAU,EAC7C,KAAA,sBAAwB,OAAQA,EAA8B,KAAK,EAElE,MAAAE,EAAqB,KAAK,IAAI,mBAE9BN,GADoB,KAAK,WAAa,KAAK,sBAAwB,MAAM,QAAQ,CAAC,EAChD,SAAA,EAAW,QAAQ,wBAAyB,GAAG,EACpEM,EAAA,UAAY,IAAIN,CAAc,EAAA,MAEhDI,EAAyB,UAAU,OAAO,UAAU,CACvD,CACD,EAEA,KAAK,IAAI,oBAAiC,QAAQ,CAACA,EAAUC,IAAU,CAClEA,IAAUF,EAAgB,GAC3BC,EAAyB,UAAU,IAAI,UAAU,EAC7C,KAAA,aAAe,OAAQA,EAA8B,KAAK,GAE9DA,EAAyB,UAAU,OAAO,UAAU,CACvD,CACD,CAEL,CAEA,MAAM,aAAaZ,EAAU,CAC3BA,EAAE,eAAe,EACjB,MAAMS,EAAST,EAAE,OACXe,EAAW,IAAI,SAASN,CAAM,EAC9BN,EAAqB,KAAK,IAAI,kBAAwC,gBAAgB,CAAC,EAC1F,KACGF,EAAU,OAKVC,GACJ,OAAO,KAAK,SAAS,EACrB,OAAO,KAAK,SAAS,GAAK,KAAK,sBAAwB,MACvD,QAAQ,CAAC,EAEXa,EAAS,OAAO,YAAc,KAAK,IAAI,kBAAuC,KAAK,EACnFA,EAAS,OAAO,eAAe,EAC/BA,EAAS,OAAO,YAAY,EAC5BA,EAAS,OAAO,cAAc,EAC9BA,EAAS,IAAI,cAAe,KAAK,sBAAsB,UAAU,EACxDA,EAAA,IAAI,QAAS,OAAO,KAAK,YAAY,EAAI,IAAI,UAAU,EACvDA,EAAA,OAAO,aAAc,KAAK,MAAM,OAAOb,CAAc,CAAC,EAAE,SAAA,CAAU,EAEvE,GAAA,CAUI,MAAAc,EAAU,MATJ,MAAM,MAAM,KAAK,uBAAwB,CACnD,OAAQ,OACR,QAAS,CACP,8BAA+B,IAC/B,eAAgB,gCAClB,EACA,KAAM,KAAK,UAAU,OAAO,YAAYD,CAAQ,CAAC,CAAA,CAClD,GAEyB,OAC1B,KAAK,WAAaC,EAAQ,WACtBA,EAAQ,WAAW,SAAS,IAAM,KACnC,KAAK,IAAI,oBAAoC,UAAYA,EAAQ,eAAe,WAChF,KAAK,IAAI,gBAAgC,UAAY,IAAI,KAAK,aAAa,QAAS,CACnF,MAAO,WACP,SAAU,KACX,CAAA,EAAE,OAAO,OAAOd,CAAc,CAAC,EAE3B,KAAA,oBAAsBc,EAAQ,eAAe,SAAS,EAE1D,KAAK,IAAI,kBAAkC,UAAYb,EACrD,SACA,EAAA,MAAM,IAAI,EAAE,CAAC,IAEf,KAAK,IAAI,cAAoC,YACrC,SAAA,KAAK,MAAM,SAAW,UAI3B,MAAAC,EAAQ,KAAK,iBAAmB,4CAA8C,wBAE5EH,EAAA,UAAYA,EAAQ,WAAa,CAAA,EACzCA,EAAQ,UAAU,KAAK,CACrB,MAAAG,EACA,aAAc,GAAGW,EAAS,IAAI,aAAa,CAAC,GAC5C,cAAe,GAAG,KAAK,aAAa,SAAU,CAAA,GAC9C,cAAeZ,EAAkB,SAAA,EAAW,MAAM,IAAI,EAAE,CAAC,EACzD,YAAa,OAAOD,CAAc,EAAE,SAAS,EAC7C,sBAAuB,KAAK,oBAC5B,SAAUc,EAAQ,WAAW,SAAS,EACtC,MAAO,KAAK,UAAU,SAAS,CAAA,CAChC,QACMC,EAAO,CACN,QAAA,MAAM,SAAUA,CAAK,CAC/B,CACF,CACF"}