{"version":3,"file":"Form.js","names":["Form","a","setters","Component","default","ajax","mix","Event","on","off","trigger","deepMerge","AnalyticsMixin","AccessibilityMixin","Registry","getRelativeSelector","scrollTo","CrossRequestStorage","execute","with","constructor","element","options","arguments","length","headers","errorMessages","captchaRequired","text","accessibility","processingStatusMessage","finishedStatusMessage","genericErrorMessage","classNames","formErrorMessage","onSubmitSuccessReload","showErrorAsSnackbar","showSuccessAsSnackbar","clearFormOnSuccess","onSubmitErrorReload","successModal","submitOnChange","closeModalOnSuccess","clearCustomMessageOnError","captcha","prependError","redirectUrl","events","customSuccess","customError","success","error","validateError","submit","executeSubmit","global","reloadData","section","id","scrollToFormOnSubmit","scrollToFirstErrorOnSubmit","stickyHeaderHeight","isRelativeLoader","disableValidation","keepDisabledSubmitAfterInit","trackFocusedElements","autoSubmit","crossRequestDelayedAction","crossRequestDelayedActionOnError","formUniqueKey","customValidation","customValidationSelector","keepLoaderUntilRedirected","initCache","classes","submitting","relativeLoader","errorMessage","reCaptcha","formCustomMessage","loadingClass","noValidate","selectors","buttons","querySelectorAll","url","getAttribute","method","createCSRFField","getCSRF","hasActiveCsrfProtection","metaCsrf","document","querySelector","formIdField","console","metaCsrfContents","split","name","token","getComponentKey","_componentKey","parentElement","getSelectorForSubElement","data","input","createElement","setAttribute","appendChild","initState","state","isSubmitting","hasError","hasCaptcha","isCaptchaValid","isCaptchaInvisible","invisible","customValidationComplete","classList","add","afterInit","forEach","removeAttribute","remove","restoreLastFocusState","isAutosubmitRequired","Promise","all","Array","from","map","afterRegistered","then","bindEvents","bind","onAction","onReset","onFormReload","onValidate","onCaptchaSuccess","onCaptchaExpired","onSubmitOnChange","handleFieldStateDependencies","e","detail","dependentActions","entry","fieldName","fieldAction","fieldActionCondition","field","target","offsetParent","hasAttribute","action","masterField","type","handleButtonDependentAction","fieldComponent","closest","isRegistered","disabled","parentNode","preventDefault","value","skipAnalytics","_initEventAnalytics","checked","serializedForm","getSerializedForm","getBody","catch","resetFields","reload","bubbles","stopPropagation","clearFormErrors","beforeSubmit","clientValidate","validate","checkValidity","scrollIntoView","block","scrollToFirstError","reject","resolve","form","onExecuteSuccess","event","fieldsErrors","setFormError","onExecuteFail","setSubmitState","onValidationSuccess","onValidationFail","message","saveLastFocusState","emit","body","getHeaders","onSubmitSuccess","onSubmitError","customSubmit","getFieldValues","fieldValues","key","onSuccess","response","onError","Error","getComponent","resetFieldsErrors","cleanGroupsErrors","groupError","refreshForm","content","_replaceElement","reset","FormData","custom","sendFormAnalytics","customRedirect","continueUrl","successUrl","contentUrl","openModal","successMessage","resetCaptcha","emitEventsOnSuccess","setDelayedAction","stopRedirect","redirectInProgress","redirectPage","submissionAnalytics","sendAnalytics","getAnalytics","formObj","entries","concat","emitEventsOnError","clearFormCustomMessage","hasFieldOrGroupError","groupsErrors","navigator","onLine","offlineErrorMessage","fieldGroup","group","groupErrorElement","innerHTML","insertBefore","nextSibling","fieldsValues","fieldError","errorField","errorKey","newValue","errorAnalytics","needReload","call","errorMsg","msg","errNode","prepend","loader","updateStatusMessage","window","location","href","delayedAction","getDelayedAction","removeDelayedAction","focusField","firstError","parent","focus","onComponentValidate","onValidated","isValid","destroy"],"sources":["components/global/Form.js"],"sourcesContent":["/* eslint complexity: off */\n/* eslint max-lines: off */\nimport Component from 'core/Component';\nimport { ajax } from 'toolbox/ajax';\nimport { mix } from 'core/mixwith';\nimport { Event } from 'services/EventEmitter';\nimport { on, off, trigger } from 'toolbox/event';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport AnalyticsMixin from 'mixins/Analytics';\nimport AccessibilityMixin from 'mixins/Accessibility';\nimport Registry from 'core/ComponentRegistry';\nimport { getRelativeSelector } from 'toolbox/html';\nimport { scrollTo } from 'toolbox/scroll';\nimport CrossRequestStorage from 'services/CrossRequestStorage';\n\n/**\n * This is a description of the Form constructor function.\n * @class\n * @classdesc This is a description of the Form class.\n * @extends Component\n */\nexport default class Form extends mix(Component).with(AnalyticsMixin, AccessibilityMixin) {\n /**\n * Constructor of the class that mainly merge the options of the components\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options options that belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n headers: {},\n errorMessages: {\n captchaRequired: '',\n },\n text: {\n accessibility: { processingStatusMessage: '', finishedStatusMessage: '' },\n genericErrorMessage: '',\n },\n classNames: {\n formErrorMessage: 'c-alert m-error',\n },\n onSubmitSuccessReload: false, // replace form content with content that came from server on success\n showErrorAsSnackbar: false, // show error as a snackbar element\n showSuccessAsSnackbar: false, // show success message as a snackbar element\n clearFormOnSuccess: true, // clear form on success\n onSubmitErrorReload: false, // replaces form content with content that came from server on error\n successModal: null, // pass the same options as the ones in Modal.js\n submitOnChange: false, // submit form on change\n closeModalOnSuccess: false, // close Modal on form submit success (for case when form is rendered inside modal)\n clearCustomMessageOnError: false, // remove custom message, if it was added during previous submit or rendered\n captcha: null,\n prependError: false, // change error message position (at the top or at the bottom of a form)\n redirectUrl: null, // Redirect user if form submission is successful (self | string)\n events: {\n customSuccess: null,\n customError: null,\n success: 'form.submit.success',\n error: 'form.submit.error',\n validateError: 'form.validate.error',\n submit: 'form.submit',\n executeSubmit: 'form.execute.submit',\n global: false, // emit global event with ajax response data\n },\n reloadData: {\n section: 'common',\n id: 'form',\n },\n scrollToFormOnSubmit: false, // Scrolls the parent container such that the component is visible to the user\n scrollToFirstErrorOnSubmit: false, // Scrolls first form error into view\n stickyHeaderHeight: 153, // Change it If you have a fixed header height\n isRelativeLoader: false, // makes the form loader relative to the form (by default the loader is full screen)\n disableValidation: false, // disable form validation on submit,\n keepDisabledSubmitAfterInit: false, // disable the button's disabled attribute removal at afterInit\n trackFocusedElements: true, // enable focused elements tracking\n autoSubmit: false, // submit form after initialization\n crossRequestDelayedAction: null, // this delayed action will be applied on form success submit\n crossRequestDelayedActionOnError: null, // this delayed action will be applied on form submit error\n formUniqueKey: null, // unique form key, use to identify form as target between different requests\n customValidation: false,\n customValidationSelector: null,\n keepLoaderUntilRedirected: false, // keep Loader on form submit success until page redirected\n }, options));\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.classes = {\n submitting: this.options.isRelativeLoader ? ['c-loader'] : ['c-loader', 'm-fixed', 'm-icon-fixed'],\n relativeLoader: 'm-relative-loader',\n error: 'm-error',\n errorMessage: 'c-field__error-message',\n formErrorMessage: 'c-form__error-message',\n reCaptcha: 'g-recaptcha',\n formCustomMessage: 'c-form__custom-message',\n loadingClass: 'm-loading',\n };\n this.element.noValidate = false;\n this.selectors.buttons = this.element.querySelectorAll('button[name][type=submit]');\n this.url = this.element.getAttribute('action');\n this.method = this.element.getAttribute('method') || 'POST';\n this.createCSRFField(this.getCSRF());\n }\n\n /**\n * Get the CSRF token value generated in the tag.\n * The same token can be used by any form.\n *\n * @returns {object} An object containing both the CSRF token name and value\n */\n getCSRF() {\n const hasActiveCsrfProtection = this.element.getAttribute('data-has-active-csrf');\n // CSRF is not needed for this form, abort, no alerting needed\n if (hasActiveCsrfProtection !== 'true') {\n return null;\n }\n\n const metaCsrf = document.querySelector('meta[name=\"csrf\"]');\n if (!metaCsrf) {\n const formIdField = this.element.querySelector('[name=\"form_id\"]');\n if (!formIdField) {\n return null;\n }\n console.error(`[Form.js] Failed to find the meta csrf HTML element for form \"${formIdField.getAttribute('value')}\"`);\n return null;\n }\n\n const metaCsrfContents = metaCsrf.getAttribute('content').split('||');\n return {\n name: metaCsrfContents[0],\n token: metaCsrfContents[1],\n };\n }\n\n /**\n * Returns component key\n * @override Accessibility mixin method\n * @returns {String} component key\n */\n getComponentKey() {\n if (!this._componentKey) {\n this._componentKey = getRelativeSelector(this.element);\n\n if (this.element.parentElement) {\n this._componentKey = getRelativeSelector(this.element, this.element.parentElement.parentElement);\n }\n }\n return this._componentKey;\n }\n\n /**\n * Return selector for child element\n * @param {HTMLElement} element optional, custom focused state\n * @returns {String} selector for child element\n */\n getSelectorForSubElement(element) {\n return getRelativeSelector(element, element.parentElement) || true;\n }\n\n /**\n * Create CSRF field\n * @param { Object } data - CSRF object\n */\n createCSRFField(data) {\n if (!data || !data.name || !data.token) {\n return;\n }\n\n const input = document.createElement('input');\n input.setAttribute('type', 'hidden');\n input.setAttribute('name', data.name);\n input.setAttribute('value', data.token);\n\n this.element.appendChild(input);\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n this.state = {\n isSubmitting: false,\n hasError: false,\n hasCaptcha: !!this.options.captcha,\n };\n\n if (this.state.hasCaptcha) {\n this.state.isCaptchaValid = false;\n this.state.isCaptchaInvisible = !!this.options.captcha.invisible;\n }\n\n if (this.options.customValidation) {\n this.state.customValidationComplete = false;\n }\n\n if (this.options.isRelativeLoader) {\n this.element.classList.add(this.classes.relativeLoader);\n }\n }\n\n /**\n * Called after component initialization\n */\n afterInit() {\n // remove disabled attribute and loading class for each submit button\n if (!this.options.keepDisabledSubmitAfterInit && this.selectors.buttons && this.selectors.buttons.length) {\n this.selectors.buttons.forEach((element) => {\n element.removeAttribute('disabled');\n element.classList.remove(this.classes.loadingClass);\n });\n }\n\n if (this.options.trackFocusedElements) {\n this.restoreLastFocusState();\n }\n\n if (this.isAutosubmitRequired()) {\n Promise.all(Array.from(this.element.querySelectorAll('[data-js-field-component]')).map(element => Registry.afterRegistered(element, true)))\n .then(() => {\n this.submit();\n });\n }\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n super.bindEvents();\n\n on('submit', this.element, this.submit.bind(this));\n on('click', this.selectors.buttons, this.onAction.bind(this));\n on('reset', this.element, this.onReset.bind(this));\n on('form.action', this.element, this.onAction.bind(this));\n on('form.reload', this.element, this.onFormReload.bind(this));\n on('form.validate', this.element, this.onValidate.bind(this));\n if (this.state.hasCaptcha) {\n on('form.captcha.success', this.element, this.onCaptchaSuccess.bind(this));\n on('form.captcha.expired', this.element, this.onCaptchaExpired.bind(this));\n }\n if (this.options.submitOnChange) {\n on('change.submit', this.element, this.onSubmitOnChange.bind(this));\n }\n on('field.dependency.state.changed', this.element, this.handleFieldStateDependencies.bind(this));\n }\n\n /**\n * Handle fields state dependencies when master field (having dependent fields) state changes.\n * We handle bubbled event at Form level to limit the scope of field dependencies to one form.\n *\n * @param {Event} e Event data\n */\n handleFieldStateDependencies(e) {\n e.detail.dependentActions.forEach((entry) => {\n const [fieldName, fieldAction, fieldActionCondition] = entry.split(':');\n const field = this.element.querySelector(`[name=${fieldName}],[data-dependency-listener=${fieldName}]`);\n if (!field) {\n return;\n }\n // additional condition could require that master field should be visible\n // in order to perform the dependent action\n if (fieldActionCondition === 'ifmastervisible' && e.target.offsetParent === null) {\n return;\n }\n\n if (field.hasAttribute('data-dependency-listener')) {\n Registry.afterRegistered(field).then(() => {\n trigger('field.dependency.action', field, { action: fieldAction, masterField: e.detail.masterField, data: e.detail.data });\n });\n } else if ('type' in field && (field.type === 'button' || field.type === 'submit')) {\n // buttons do not have own data-component so can not react to events\n this.handleButtonDependentAction(field, fieldAction);\n } else {\n const fieldComponent = field.closest('[data-js-field-component]');\n if (fieldComponent) {\n if (Registry.isRegistered(fieldComponent)) {\n trigger('field.dependency.action', field, { action: fieldAction, masterField: e.detail.masterField, data: e.detail.data });\n return;\n }\n Registry.afterRegistered(fieldComponent).then(() => {\n trigger('field.dependency.action', field, { action: fieldAction, masterField: e.detail.masterField, data: e.detail.data });\n });\n }\n }\n });\n }\n\n /**\n * Handle dependent action for button elements since they don't have own component\n * so can not react on events.\n *\n * @param {HTMLElement} field button HTML element\n * @param {String} fieldAction action to be performed\n */\n handleButtonDependentAction(field, fieldAction) {\n switch (fieldAction) {\n case 'enable':\n field.disabled = false;\n break;\n case 'disable':\n field.disabled = true;\n break;\n case 'show':\n field.parentNode.classList.remove('h-hidden');\n break;\n case 'hide':\n field.parentNode.classList.add('h-hidden');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Handler for custom 'form.action' event which could be triggered by non-submit form elements\n * or elements outside of the form.\n *\n * @param {Event} e Event data\n */\n onAction(e) {\n e.preventDefault();\n\n const name = (e.detail && e.detail.name) || e.target.name;\n const value = (e.detail && e.detail.value) || e.target.value;\n const target = (e.detail && e.detail.target) || e.target;\n\n if (!e.detail || !e.detail.skipAnalytics) {\n this._initEventAnalytics(target);\n }\n let action = null;\n\n if (name && !(e.target.type === 'checkbox' && !e.target.checked)) {\n const serializedForm = this.getSerializedForm(this.getBody());\n // do not create duplicated filed with the same value\n // TODO: review all the cases where duplicated fields were created and refactor\n if (!(name in serializedForm) || serializedForm[name] !== value) {\n action = document.createElement('input');\n action.type = 'hidden';\n action.name = name;\n action.value = value;\n this.element.appendChild(action);\n }\n }\n\n this.submit().catch(() => {});\n\n if (action) {\n action.remove();\n }\n }\n\n /**\n * Form reset handler\n */\n onReset() {\n this.resetFields();\n }\n\n /**\n * Form reload handler\n */\n onFormReload() {\n this.reload({\n data: this.element.name,\n });\n }\n\n /**\n * Submit form on change\n * @param {Object} e event\n */\n onSubmitOnChange(e) {\n trigger('form.action', e.target, { bubbles: true });\n }\n\n /**\n * Captcha validation callback\n *\n * @param {Event} e Event data\n */\n onCaptchaSuccess(e) {\n e.stopPropagation();\n this.state.isCaptchaValid = true;\n this.clearFormErrors();\n }\n\n /**\n * Captcha expired callback\n *\n * @param {Event} e Event data\n */\n onCaptchaExpired(e) {\n e.stopPropagation();\n this.state.isCaptchaValid = false;\n }\n\n /**\n * Called before the submit happens\n */\n beforeSubmit() {\n // Can be extended\n }\n\n /**\n * Runs form client validation\n * @returns {Boolean} true, if valid\n */\n clientValidate() {\n // Do not validate the form if disableValidation option flag is set to true\n if (this.options.disableValidation) {\n return true;\n }\n\n this.validate();\n if (!this.element.checkValidity()) {\n trigger(this.options.events.validateError, this.element, { bubbles: true });\n if (this.options.scrollToFormOnSubmit) {\n this.element.scrollIntoView({ block: 'center' });\n }\n\n this.scrollToFirstError();\n return false;\n }\n return true;\n }\n\n /**\n * Submit callback\n *\n * @param {Event} e event data\n * @returns {Boolean} submit result\n */\n submit(e) {\n if (e) {\n e.preventDefault();\n }\n\n this.clearFormErrors();\n\n this.beforeSubmit();\n\n // Submission already under process\n if (this.state.isSubmitting && !this.state.customValidationComplete) {\n return Promise.reject();\n }\n\n if (!this.clientValidate()) {\n return Promise.reject();\n }\n\n if (this.state.hasCaptcha && !this.state.isCaptchaValid) {\n // if captcha is invisible we need to execute captcha validation\n // after validation is successful state.isCaptchaValid will be seted to true and form will be submited again\n if (this.state.isCaptchaInvisible) {\n return new Promise((resolve, reject) => {\n trigger('captcha.execute', this.element.querySelector(`.${this.classes.reCaptcha}`), {\n form: this.element,\n onExecuteSuccess: () => {\n // If recaptcha send a success then we resubmit the form\n this.submit().then(resolve).catch((event) => {\n if (!event.errorMessage && !event.fieldsErrors) {\n this.setFormError(this.options.errorMessages.captchaRequired);\n }\n\n reject();\n });\n },\n onExecuteFail: reject,\n });\n });\n }\n\n this.setFormError(this.options.errorMessages.captchaRequired);\n\n return Promise.reject();\n }\n\n if (!this.state.isSubmitting) {\n this.setSubmitState(true);\n }\n\n if (this.options.customValidation && !this.state.customValidationComplete) {\n return new Promise((resolve, reject) => {\n trigger('client.validate', this.element.querySelector(this.options.customValidationSelector), {\n onValidationSuccess: () => {\n this.state.customValidationComplete = true;\n this.submit().then(resolve);\n },\n onValidationFail: (error) => {\n this.state.customValidationComplete = true;\n this.setFormError(error.message);\n\n if (error.submit) {\n this.submit().then(resolve);\n } else {\n this.setSubmitState(false);\n }\n reject();\n },\n });\n });\n }\n\n if (this.hasError) {\n this.resetFields();\n }\n\n if (this.options.trackFocusedElements) {\n this.saveLastFocusState();\n }\n\n Event.emit(this.options.events.executeSubmit, { form: this.element });\n\n if (this.url) {\n return ajax(this.url, {\n method: this.method,\n body: this.getBody(),\n headers: this.getHeaders(),\n })\n .then(this.onSubmitSuccess.bind(this))\n .catch(this.onSubmitError.bind(this));\n }\n return this.customSubmit();\n }\n\n /**\n * Returns an object with the form's values\n *\n * @returns {Object} form field values\n */\n getFieldValues() {\n const fieldValues = {};\n this.getBody().forEach((value, key) => {\n fieldValues[key] = value;\n });\n\n return fieldValues;\n }\n\n /**\n * Triggers custom form submit event using the form values as a prameter\n * @returns {Promise} custom submit event promise\n */\n customSubmit() {\n return new Promise((resolve, reject) => {\n if (this.options.events.submit) {\n Event.emit(this.options.events.submit, {\n form: this.getFieldValues(),\n onSuccess: (response) => {\n this.onSubmitSuccess(response);\n resolve();\n },\n onError: (response) => {\n this.onSubmitError(response);\n reject();\n },\n });\n } else {\n const e = new Error('customSubmit event must be defined');\n reject(e);\n }\n });\n }\n\n /**\n * Performs native and custom form validations\n */\n validate() {\n // native fields validation\n this.element.checkValidity();\n // field component validation\n Array.from(this.element.querySelectorAll('[data-js-field-component]')).forEach((field) => {\n if (Registry.isRegistered(field)) {\n const fieldComponent = Registry.getComponent(field);\n if (typeof fieldComponent.validate === 'function') {\n fieldComponent.validate();\n }\n }\n });\n }\n\n /**\n * Trigger reset event to each field in error of the form\n */\n resetFields() {\n this.element.querySelectorAll('[data-js-field]').forEach(field => trigger('field.reset', field));\n }\n\n /**\n * Trigger error reset event to each field in error of the form\n */\n resetFieldsErrors() {\n this.element.querySelectorAll('[data-js-field]').forEach(field => trigger('error.reset', field));\n }\n\n /**\n * Trigger error reset event to each field in error of the form\n */\n cleanGroupsErrors() {\n this.element.querySelectorAll('.c-field__error-message.m-group').forEach(groupError => groupError.remove());\n }\n\n /**\n * Replace form content with content that came from server or clear\n * based on provided options\n * @param {string} content - html content to be replaced\n */\n refreshForm(content) {\n if (this.options.onSubmitSuccessReload) {\n // replace from with provided content\n this._replaceElement(content);\n } else if (this.options.clearFormOnSuccess) {\n // reset form inputs\n this.element.reset();\n }\n }\n\n /**\n * Returns FormData interface to be used for ajax request\n *\n * @returns {FormData} form data\n */\n getBody() {\n return new FormData(this.element);\n }\n\n /**\n * By default, the options.headers is returned for simple form. This can be overloaded through options or in case of more\n * complex use case, the method should be overloaded\n * @returns {Object} headers object\n */\n getHeaders() {\n return this.options.headers;\n }\n\n /**\n * Submit success callback\n *\n * @param {Object} content successful submit response object\n * @returns {Object} serialized form\n */\n onSubmitSuccess(content) {\n // if there is a redirection to happen, then do not remove the loader\n content = content || {};\n const custom = content.custom || {};\n this.sendFormAnalytics(content);\n const customRedirect = custom.redirectUrl;\n const redirectUrl = content.redirectUrl || content.continueUrl || customRedirect || this.options.redirectUrl;\n if (redirectUrl && typeof content === 'object') {\n content.redirectUrl = redirectUrl;\n } else if (!redirectUrl && !this.options.keepLoaderUntilRedirected) {\n this.setSubmitState(false);\n }\n trigger(this.options.events.success, this.element, { bubbles: true, content });\n\n if ((this.options.successModal && typeof this.options.successModal === 'object') || custom.successModal) {\n let successModal = this.options.successModal || {};\n if (content.successUrl) {\n successModal.contentUrl = content.successUrl;\n }\n\n // extra configuration for successModal (e.g. 'clickOutsideClose', ...)\n if (custom.successModal) {\n successModal = deepMerge(successModal, custom.successModal);\n }\n\n this.openModal(successModal);\n } else if (this.options.showSuccessAsSnackbar && content.successMessage) {\n Event.emit('snackbar.notify', { content: content.successMessage, type: 'success' });\n }\n\n this.resetCaptcha();\n\n this.emitEventsOnSuccess(content);\n\n if (this.options.crossRequestDelayedAction) {\n CrossRequestStorage.setDelayedAction(this.options.crossRequestDelayedAction);\n }\n\n if (!content.stopRedirect && !content.redirectInProgress && this.redirectPage(redirectUrl)) {\n return this.getSerializedForm(this.getBody());\n }\n\n this.refreshForm(content);\n\n if (this.options.scrollToFormOnSubmit && content.success && content.message) {\n this.element.scrollIntoView({ block: 'center' });\n }\n\n return this.getSerializedForm(this.getBody());\n }\n\n /**\n * Send Analytics data\n *\n * @param {Object} data analytics data\n */\n sendFormAnalytics(data) {\n if (!data) {\n return;\n }\n\n if (typeof data === 'object' && data.submissionAnalytics) {\n this.sendAnalytics(data.submissionAnalytics);\n delete data.submissionAnalytics;\n }\n\n this.sendAnalytics(this.getAnalytics(data));\n }\n\n /**\n * Transform FormData object into plain object\n * @param {FormData} form FormData object\n * @returns {Object} test\n */\n getSerializedForm(form) {\n const formObj = {};\n // eslint-disable-next-line\n for (const [key, value] of form.entries()) {\n formObj[key] = value;\n }\n\n return formObj;\n }\n\n /**\n * Emits events on success submit\n * @param {string} content - ajax response\n */\n emitEventsOnSuccess(content) {\n let events = [];\n if (content.custom && content.custom.events) {\n events = events.concat(content.custom.events);\n }\n if (this.options.events.customSuccess) {\n events = events.concat(this.options.events.customSuccess);\n }\n events.forEach((event) => {\n Event.emit(event, content);\n });\n\n if (this.options.closeModalOnSuccess) {\n Event.emit('modal.close');\n }\n }\n\n /**\n * Emits events on failed submit\n * @param {string} content - ajax response\n */\n emitEventsOnError(content) {\n let events = [];\n\n if (this.options.events.customError) {\n events = events.concat(this.options.events.customError);\n }\n events.forEach((event) => {\n Event.emit(event, content);\n });\n }\n\n /**\n * Open modal\n *\n * @param {Object} options Modal settings\n */\n openModal(options) {\n Event.emit('modal.open', {\n options,\n });\n }\n\n /**\n * Submit error callback\n *\n * @param {Object} error unsuccessful submit response object\n * @returns {Object} error\n */\n onSubmitError(error) {\n this.setSubmitState(false);\n trigger(this.options.events.error, this.element, { bubbles: true, content: error });\n\n /**\n * In case if server responds with redirect url\n */\n if (error.data && error.data.redirectUrl) {\n this.redirectPage(error.data.redirectUrl);\n }\n\n /**\n * In case if server responds with form HTML\n */\n if (this.options.onSubmitErrorReload) {\n this._replaceElement(error);\n } else if (this.options.clearCustomMessageOnError) {\n // remove custom message on error, if it was added during previous submit (e.g checking balance of gift certificate)\n this.clearFormCustomMessage();\n }\n\n if (this.options.crossRequestDelayedActionOnError) {\n CrossRequestStorage.setDelayedAction(this.options.crossRequestDelayedActionOnError);\n }\n\n // check if response has any error (field / group)\n const hasFieldOrGroupError = error.data && ((error.data.fieldsErrors && error.data.fieldsErrors.length !== 0)\n || (error.data.groupsErrors && error.data.groupsErrors.length !== 0));\n\n /**\n * In case if server responds with errors JSON\n */\n // show error as snackbar element if option is configured OR set form error\n if (this.options.showErrorAsSnackbar && error && error.errorMessage) {\n Event.emit('snackbar.notify', { content: error.errorMessage, type: 'error' });\n } else if (error.errorMessage) {\n this.setFormError(error.errorMessage);\n } else if (!hasFieldOrGroupError) {\n const errorMessage = !navigator.onLine ? this.options.text.offlineErrorMessage\n : (this.options.text.genericErrorMessage || 'ERROR_UNDEFINED');\n this.setFormError(errorMessage);\n }\n // set form group errors\n const groupsErrors = (error.data && error.data.groupsErrors) || [];\n if (groupsErrors.length) {\n this.cleanGroupsErrors();\n groupsErrors.forEach((groupError) => {\n const fieldGroup = this.element.querySelector(`[data-js-group=\"${groupError.group}\"]`);\n if (fieldGroup) {\n let groupErrorElement = null;\n groupErrorElement = document.createElement('div');\n groupErrorElement.classList.add('c-field__error-message', 'm-group');\n groupErrorElement.setAttribute('id', groupError.group);\n groupErrorElement.setAttribute('role', 'alert');\n groupErrorElement.innerHTML = groupError.errorMessage;\n fieldGroup.parentNode.insertBefore(groupErrorElement, fieldGroup.nextSibling);\n }\n });\n }\n // set form field errors\n const fieldsErrors = (error.data && error.data.fieldsErrors) || [];\n const fieldsValues = (error.data && error.data.fieldsValues) || {};\n if (fieldsErrors.length) {\n this.resetFieldsErrors();\n fieldsErrors.forEach((fieldError) => {\n const errorField = this.element.querySelector(`[name=\"${fieldError.field}\"]`);\n if (errorField) {\n trigger('field.invalidate', errorField, {\n errorMessage: fieldError.errorMessage,\n errorKey: fieldError.errorKey,\n newValue: fieldsValues[fieldError.field],\n });\n }\n });\n this.scrollToFirstError();\n }\n // fire error events\n this.emitEventsOnError(error.data || error);\n // fire error analytics\n if (error.data && error.data.custom && error.data.custom.errorAnalytics) {\n this.sendAnalytics(error.data.custom.errorAnalytics);\n }\n // reset captcha if it was checked\n this.resetCaptcha();\n\n if (error.data && error.data.needReload) {\n this.redirectPage('self');\n }\n\n return Promise.reject(error.data || error);\n }\n\n /**\n * Emit captcha.reset\n */\n resetCaptcha() {\n if (this.state.isCaptchaValid) {\n this.state.isCaptchaValid = false;\n trigger('captcha.reset', this.element.querySelector(`.${this.classes.reCaptcha}`));\n }\n }\n\n /**\n * Clear form validation errors.\n */\n clearFormErrors() {\n this.element.classList.remove(this.classes.error);\n [].forEach.call(this.element.querySelectorAll(`.${this.classes.formErrorMessage}`), (errorMsg) => {\n errorMsg.remove();\n });\n this.cleanGroupsErrors();\n }\n\n /**\n * Clear form custom message.\n */\n clearFormCustomMessage() {\n [].forEach.call(this.element.querySelectorAll(`.${this.classes.formCustomMessage}`), (msg) => {\n msg.classList.add('h-hidden');\n });\n }\n\n /**\n * Set form state and add error message.\n *\n * @param {String} errorMessage message to set\n */\n setFormError(errorMessage) {\n this.clearFormErrors();\n this.element.classList.add(this.classes.error);\n const errNode = document.createElement('p');\n errNode.classList.add(this.classes.formErrorMessage);\n if (this.options.classNames && this.options.classNames.formErrorMessage) {\n errNode.classList.add(...this.options.classNames.formErrorMessage.split(' '));\n }\n errNode.setAttribute('role', 'alert');\n errNode.innerHTML = errorMessage;\n if (this.options.prependError) {\n this.element.prepend(errNode);\n } else {\n this.element.appendChild(errNode);\n }\n }\n\n /**\n * Set flag isSubmitting to avoid duplicate call in case of multiple submit within short time.\n *\n * @param {Boolean} isSubmitting if true then set submiting state, clear state otherwise\n */\n setSubmitState(isSubmitting) {\n if (isSubmitting) {\n if (!this.loader) {\n this.loader = document.createElement('div');\n this.loader.classList.add(...this.classes.submitting);\n }\n this.element.appendChild(this.loader);\n this.state.isSubmitting = true;\n this.updateStatusMessage(this.options.text.accessibility.processingStatusMessage);\n } else {\n if (this.loader) {\n this.loader.remove();\n }\n this.state.isSubmitting = false;\n this.updateStatusMessage(this.options.text.accessibility.finishedStatusMessage);\n }\n }\n\n /**\n * Reload page or redirect to requested location\n *\n * @param {String} url URL to redirect to, default is this.options.redirectUrl\n * @return {Boolean} true, if reload or redirect was initiated\n */\n redirectPage(url) {\n const redirectUrl = url || this.options.redirectUrl;\n\n if (redirectUrl) {\n this.setSubmitState(true);\n\n if (redirectUrl === 'self') {\n window.location.reload();\n } else {\n window.location.href = redirectUrl;\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if autosubmit is required\n * @returns {Boolean} true, if required\n */\n isAutosubmitRequired() {\n if (this.options.autoSubmit) {\n return true;\n }\n\n if (this.options.formUniqueKey) {\n const delayedAction = CrossRequestStorage.getDelayedAction();\n if (delayedAction && delayedAction.type === 'submit' && this.options.formUniqueKey === delayedAction.value) {\n CrossRequestStorage.removeDelayedAction();\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Scroll to first error\n */\n scrollToFirstError() {\n if (!this.options.scrollToFirstErrorOnSubmit) {\n // focus field if an error occurs\n this.focusField(this.element.querySelector('[data-js-field][aria-invalid=\"true\"]'));\n return;\n }\n\n const firstError = this.element.querySelector(`.${this.classes.errorMessage}`) || this.element.querySelector(`.${this.classes.formErrorMessage}`);\n\n if (!firstError) {\n return;\n }\n\n const parent = firstError.parentNode;\n\n scrollTo(parent, this.options.stickyHeaderHeight);\n }\n\n /**\n * Focus field\n * @param {Object} field field DOM element\n * @return {Boolean} true, if filed focused\n */\n focusField(field) {\n if (!field) {\n return false;\n }\n\n field.focus();\n return true;\n }\n\n /**\n * This function hook is called whenever a validation of the component is requested\n * @param {Event} event Event object\n */\n onComponentValidate(event) {\n const { onValidated } = event.detail;\n if (typeof onValidated === 'function') {\n this.submit()\n .then((data) => {\n onValidated({\n isValid: true,\n data,\n });\n }).catch(() => {\n onValidated({\n isValid: false,\n });\n });\n }\n }\n\n /**\n * Validate event handler\n */\n onValidate() {\n this.validate();\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n super.destroy();\n\n off(this.element);\n off('click', this.selectors.buttons);\n }\n}\n"],"mappings":"qUAqBqBA,CAAI,QAAAC,CAAA,oBAAAC,OAAA,WAAAD,CAAA,EAnBlBE,CAAS,CAAAF,CAAA,CAAAG,OAAA,WAAAH,CAAA,EACPI,CAAI,CAAAJ,CAAA,CAAJI,IAAI,WAAAJ,CAAA,EACJK,CAAG,CAAAL,CAAA,CAAHK,GAAG,WAAAL,CAAA,EACHM,CAAK,CAAAN,CAAA,CAALM,KAAK,WAAAN,CAAA,EACLO,CAAE,CAAAP,CAAA,CAAFO,EAAE,CAAEC,CAAG,CAAAR,CAAA,CAAHQ,GAAG,CAAEC,CAAO,CAAAT,CAAA,CAAPS,OAAO,WAAAT,CAAA,EAChBU,CAAS,CAAAV,CAAA,CAATU,SAAS,WAAAV,CAAA,EACXW,CAAc,CAAAX,CAAA,CAAAG,OAAA,WAAAH,CAAA,EACdY,CAAkB,CAAAZ,CAAA,CAAAG,OAAA,WAAAH,CAAA,EAClBa,CAAQ,CAAAb,CAAA,CAAAG,OAAA,WAAAH,CAAA,EACNc,CAAmB,CAAAd,CAAA,CAAnBc,mBAAmB,WAAAd,CAAA,EACnBe,CAAQ,CAAAf,CAAA,CAARe,QAAQ,WAAAf,CAAA,EACVgB,CAAmB,CAAAhB,CAAA,CAAAG,OAAA,GAAAc,OAAA,SAAAA,CAAA,EAAAjB,CAAA,WAQLD,CAAI,CAAV,aAAmB,CAAAM,CAAG,CAACH,CAAS,CAAC,CAACgB,IAAI,CAACP,CAAc,CAAEC,CAAkB,CAAE,CAMtFO,WAAWA,CAACC,CAAO,CAAgB,IAAd,CAAAC,CAAO,GAAAC,SAAA,CAAAC,MAAA,WAAAD,SAAA,IAAAA,SAAA,IAAG,CAAC,CAAC,CAC7B,KAAK,CAACF,CAAO,CAAEV,CAAS,CAAC,CACrBc,OAAO,CAAE,CAAC,CAAC,CACXC,aAAa,CAAE,CACXC,eAAe,CAAE,EACrB,CAAC,CACDC,IAAI,CAAE,CACFC,aAAa,CAAE,CAAEC,uBAAuB,CAAE,EAAE,CAAEC,qBAAqB,CAAE,EAAG,CAAC,CACzEC,mBAAmB,CAAE,EACzB,CAAC,CACDC,UAAU,CAAE,CACRC,gBAAgB,CAAE,iBACtB,CAAC,CACDC,qBAAqB,GAAO,CAC5BC,mBAAmB,GAAO,CAC1BC,qBAAqB,GAAO,CAC5BC,kBAAkB,GAAM,CACxBC,mBAAmB,GAAO,CAC1BC,YAAY,CAAE,IAAI,CAClBC,cAAc,GAAO,CACrBC,mBAAmB,GAAO,CAC1BC,yBAAyB,GAAO,CAChCC,OAAO,CAAE,IAAI,CACbC,YAAY,GAAO,CACnBC,WAAW,CAAE,IAAI,CACjBC,MAAM,CAAE,CACJC,aAAa,CAAE,IAAI,CACnBC,WAAW,CAAE,IAAI,CACjBC,OAAO,CAAE,qBAAqB,CAC9BC,KAAK,CAAE,mBAAmB,CAC1BC,aAAa,CAAE,qBAAqB,CACpCC,MAAM,CAAE,aAAa,CACrBC,aAAa,CAAE,qBAAqB,CACpCC,MAAM,GACV,CAAC,CACDC,UAAU,CAAE,CACRC,OAAO,CAAE,QAAQ,CACjBC,EAAE,CAAE,MACR,CAAC,CACDC,oBAAoB,GAAO,CAC3BC,0BAA0B,GAAO,CACjCC,kBAAkB,CAAE,GAAG,CACvBC,gBAAgB,GAAO,CACvBC,iBAAiB,GAAO,CACxBC,2BAA2B,GAAO,CAClCC,oBAAoB,GAAM,CAC1BC,UAAU,GAAO,CACjBC,yBAAyB,CAAE,IAAI,CAC/BC,gCAAgC,CAAE,IAAI,CACtCC,aAAa,CAAE,IAAI,CACnBC,gBAAgB,GAAO,CACvBC,wBAAwB,CAAE,IAAI,CAC9BC,yBAAyB,GAC7B,CAAC,CAAElD,CAAO,CAAC,CACf,CAKAmD,SAASA,CAAA,CAAG,CACR,IAAI,CAACC,OAAO,CAAG,CACXC,UAAU,CAAE,IAAI,CAACrD,OAAO,CAACwC,gBAAgB,CAAG,CAAC,UAAU,CAAC,CAAG,CAAC,UAAU,CAAE,SAAS,CAAE,cAAc,CAAC,CAClGc,cAAc,CAAE,mBAAmB,CACnCzB,KAAK,CAAE,SAAS,CAChB0B,YAAY,CAAE,wBAAwB,CACtC3C,gBAAgB,CAAE,uBAAuB,CACzC4C,SAAS,CAAE,aAAa,CACxBC,iBAAiB,CAAE,wBAAwB,CAC3CC,YAAY,CAAE,WAClB,CAAC,CACD,IAAI,CAAC3D,OAAO,CAAC4D,UAAU,GAAQ,CAC/B,IAAI,CAACC,SAAS,CAACC,OAAO,CAAG,IAAI,CAAC9D,OAAO,CAAC+D,gBAAgB,CAAC,2BAA2B,CAAC,CACnF,IAAI,CAACC,GAAG,CAAG,IAAI,CAAChE,OAAO,CAACiE,YAAY,CAAC,QAAQ,CAAC,CAC9C,IAAI,CAACC,MAAM,CAAG,IAAI,CAAClE,OAAO,CAACiE,YAAY,CAAC,QAAQ,CAAC,EAAI,MAAM,CAC3D,IAAI,CAACE,eAAe,CAAC,IAAI,CAACC,OAAO,CAAC,CAAC,CACvC,CAQAA,OAAOA,CAAA,CAAG,CACN,KAAM,CAAAC,CAAuB,CAAG,IAAI,CAACrE,OAAO,CAACiE,YAAY,CAAC,sBAAsB,CAAC,CAEjF,GAAgC,MAAM,GAAlCI,CAAkC,CAClC,MAAO,KAAI,CAGf,KAAM,CAAAC,CAAQ,CAAGC,QAAQ,CAACC,aAAa,CAAC,qBAAmB,CAAC,CAC5D,GAAI,CAACF,CAAQ,CAAE,CACX,KAAM,CAAAG,CAAW,CAAG,IAAI,CAACzE,OAAO,CAACwE,aAAa,CAAC,oBAAkB,CAAC,CAAC,MAC9D,CAAAC,CAAW,EAGhBC,OAAO,CAAC5C,KAAK,CAAE,iEAAgE2C,CAAW,CAACR,YAAY,CAAC,OAAO,CAAE,GAAE,CAAC,CAC7G,IAAI,EAHA,IAIf,CAEA,KAAM,CAAAU,CAAgB,CAAGL,CAAQ,CAACL,YAAY,CAAC,SAAS,CAAC,CAACW,KAAK,CAAC,IAAI,CAAC,CACrE,MAAO,CACHC,IAAI,CAAEF,CAAgB,CAAC,CAAC,CAAC,CACzBG,KAAK,CAAEH,CAAgB,CAAC,CAAC,CAC7B,CACJ,CAOAI,eAAeA,CAAA,CAAG,CAQd,MAPK,KAAI,CAACC,aAAa,GACnB,IAAI,CAACA,aAAa,CAAGtF,CAAmB,CAAC,IAAI,CAACM,OAAO,CAAC,CAElD,IAAI,CAACA,OAAO,CAACiF,aAAa,GAC1B,IAAI,CAACD,aAAa,CAAGtF,CAAmB,CAAC,IAAI,CAACM,OAAO,CAAE,IAAI,CAACA,OAAO,CAACiF,aAAa,CAACA,aAAa,CAAC,GAGjG,IAAI,CAACD,aAChB,CAOAE,wBAAwBA,CAAClF,CAAO,CAAE,CAC9B,MAAO,CAAAN,CAAmB,CAACM,CAAO,CAAEA,CAAO,CAACiF,aAAa,CAAC,IAC9D,CAMAd,eAAeA,CAACgB,CAAI,CAAE,CAClB,GAAKA,CAAI,EAAKA,CAAI,CAACN,IAAI,EAAKM,CAAI,CAACL,KAAK,EAItC,KAAM,CAAAM,CAAK,CAAGb,QAAQ,CAACc,aAAa,CAAC,OAAO,CAAC,CAC7CD,CAAK,CAACE,YAAY,CAAC,MAAM,CAAE,QAAQ,CAAC,CACpCF,CAAK,CAACE,YAAY,CAAC,MAAM,CAAEH,CAAI,CAACN,IAAI,CAAC,CACrCO,CAAK,CAACE,YAAY,CAAC,OAAO,CAAEH,CAAI,CAACL,KAAK,CAAC,CAEvC,IAAI,CAAC9E,OAAO,CAACuF,WAAW,CAACH,CAAK,CAAC,CACnC,CAMAI,SAASA,CAAA,CAAG,CACR,IAAI,CAACC,KAAK,CAAG,CACTC,YAAY,GAAO,CACnBC,QAAQ,GAAO,CACfC,UAAU,CAAE,CAAC,CAAC,IAAI,CAAC3F,OAAO,CAACsB,OAC/B,CAAC,CAEG,IAAI,CAACkE,KAAK,CAACG,UAAU,GACrB,IAAI,CAACH,KAAK,CAACI,cAAc,GAAQ,CACjC,IAAI,CAACJ,KAAK,CAACK,kBAAkB,CAAG,CAAC,CAAC,IAAI,CAAC7F,OAAO,CAACsB,OAAO,CAACwE,SAAS,EAGhE,IAAI,CAAC9F,OAAO,CAACgD,gBAAgB,GAC7B,IAAI,CAACwC,KAAK,CAACO,wBAAwB,GAAQ,EAG3C,IAAI,CAAC/F,OAAO,CAACwC,gBAAgB,EAC7B,IAAI,CAACzC,OAAO,CAACiG,SAAS,CAACC,GAAG,CAAC,IAAI,CAAC7C,OAAO,CAACE,cAAc,CAE9D,CAKA4C,SAASA,CAAA,CAAG,CAEJ,CAAC,IAAI,CAAClG,OAAO,CAAC0C,2BAA2B,EAAI,IAAI,CAACkB,SAAS,CAACC,OAAO,EAAI,IAAI,CAACD,SAAS,CAACC,OAAO,CAAC3D,MAAM,EACpG,IAAI,CAAC0D,SAAS,CAACC,OAAO,CAACsC,OAAO,CAAEpG,CAAO,EAAK,CACxCA,CAAO,CAACqG,eAAe,CAAC,UAAU,CAAC,CACnCrG,CAAO,CAACiG,SAAS,CAACK,MAAM,CAAC,IAAI,CAACjD,OAAO,CAACM,YAAY,CACtD,CAAC,CAAC,CAGF,IAAI,CAAC1D,OAAO,CAAC2C,oBAAoB,EACjC,IAAI,CAAC2D,qBAAqB,CAAC,CAAC,CAG5B,IAAI,CAACC,oBAAoB,CAAC,CAAC,EAC3BC,OAAO,CAACC,GAAG,CAACC,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC5G,OAAO,CAAC+D,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAAC8C,GAAG,CAAC7G,CAAO,EAAIP,CAAQ,CAACqH,eAAe,CAAC9G,CAAO,GAAM,CAAC,CAAC,CAAC,CACtI+G,IAAI,CAAC,IAAM,CACR,IAAI,CAAC/E,MAAM,CAAC,CAChB,CAAC,CAEb,CAMAgF,UAAUA,CAAA,CAAG,CACT,KAAK,CAACA,UAAU,CAAC,CAAC,CAElB7H,CAAE,CAAC,QAAQ,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACgC,MAAM,CAACiF,IAAI,CAAC,IAAI,CAAC,CAAC,CAClD9H,CAAE,CAAC,OAAO,CAAE,IAAI,CAAC0E,SAAS,CAACC,OAAO,CAAE,IAAI,CAACoD,QAAQ,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAC7D9H,CAAE,CAAC,OAAO,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACmH,OAAO,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAClD9H,CAAE,CAAC,aAAa,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACkH,QAAQ,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC,CACzD9H,CAAE,CAAC,aAAa,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACoH,YAAY,CAACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAC7D9H,CAAE,CAAC,eAAe,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACqH,UAAU,CAACJ,IAAI,CAAC,IAAI,CAAC,CAAC,CACzD,IAAI,CAACxB,KAAK,CAACG,UAAU,GACrBzG,CAAE,CAAC,sBAAsB,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACsH,gBAAgB,CAACL,IAAI,CAAC,IAAI,CAAC,CAAC,CAC1E9H,CAAE,CAAC,sBAAsB,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACuH,gBAAgB,CAACN,IAAI,CAAC,IAAI,CAAC,CAAC,EAE1E,IAAI,CAAChH,OAAO,CAACmB,cAAc,EAC3BjC,CAAE,CAAC,eAAe,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACwH,gBAAgB,CAACP,IAAI,CAAC,IAAI,CAAC,CAAC,CAEvE9H,CAAE,CAAC,gCAAgC,CAAE,IAAI,CAACa,OAAO,CAAE,IAAI,CAACyH,4BAA4B,CAACR,IAAI,CAAC,IAAI,CAAC,CACnG,CAQAQ,4BAA4BA,CAACC,CAAC,CAAE,CAC5BA,CAAC,CAACC,MAAM,CAACC,gBAAgB,CAACxB,OAAO,CAAEyB,CAAK,EAAK,MACnC,CAACC,CAAS,CAAEC,CAAW,CAAEC,CAAoB,CAAC,CAAGH,CAAK,CAACjD,KAAK,CAAC,GAAG,CAAC,CACjEqD,CAAK,CAAG,IAAI,CAACjI,OAAO,CAACwE,aAAa,CAAE,SAAQsD,CAAU,+BAA8BA,CAAU,GAAE,CAAC,CACvG,GAAKG,CAAK,GAKmB,iBAAiB,GAA1CD,CAA0C,EAA8B,IAAI,GAA9BN,CAAC,CAACQ,MAAM,CAACC,YAAqB,EAIhF,GAAIF,CAAK,CAACG,YAAY,CAAC,0BAA0B,CAAC,CAC9C3I,CAAQ,CAACqH,eAAe,CAACmB,CAAK,CAAC,CAAClB,IAAI,CAAC,IAAM,CACvC1H,CAAO,CAAC,yBAAyB,CAAE4I,CAAK,CAAE,CAAEI,MAAM,CAAEN,CAAW,CAAEO,WAAW,CAAEZ,CAAC,CAACC,MAAM,CAACW,WAAW,CAAEnD,IAAI,CAAEuC,CAAC,CAACC,MAAM,CAACxC,IAAK,CAAC,CAC7H,CAAC,CAAC,KACC,IAAI,MAAM,EAAI,CAAA8C,CAAK,GAAoB,QAAQ,GAAvBA,CAAK,CAACM,IAAiB,EAAmB,QAAQ,GAAvBN,CAAK,CAACM,IAAiB,CAAC,CAE9E,IAAI,CAACC,2BAA2B,CAACP,CAAK,CAAEF,CAAW,CAAC,KACjD,CACH,KAAM,CAAAU,CAAc,CAAGR,CAAK,CAACS,OAAO,CAAC,2BAA2B,CAAC,CACjE,GAAID,CAAc,CAAE,CAChB,GAAIhJ,CAAQ,CAACkJ,YAAY,CAACF,CAAc,CAAC,CAErC,WADA,CAAApJ,CAAO,CAAC,yBAAyB,CAAE4I,CAAK,CAAE,CAAEI,MAAM,CAAEN,CAAW,CAAEO,WAAW,CAAEZ,CAAC,CAACC,MAAM,CAACW,WAAW,CAAEnD,IAAI,CAAEuC,CAAC,CAACC,MAAM,CAACxC,IAAK,CAAC,CAAC,CAG9H1F,CAAQ,CAACqH,eAAe,CAAC2B,CAAc,CAAC,CAAC1B,IAAI,CAAC,IAAM,CAChD1H,CAAO,CAAC,yBAAyB,CAAE4I,CAAK,CAAE,CAAEI,MAAM,CAAEN,CAAW,CAAEO,WAAW,CAAEZ,CAAC,CAACC,MAAM,CAACW,WAAW,CAAEnD,IAAI,CAAEuC,CAAC,CAACC,MAAM,CAACxC,IAAK,CAAC,CAC7H,CAAC,CACL,CACJ,CACJ,CAAC,CACL,CASAqD,2BAA2BA,CAACP,CAAK,CAAEF,CAAW,CAAE,CAC5C,OAAQA,CAAW,EACnB,IAAK,QAAQ,CACTE,CAAK,CAACW,QAAQ,GAAQ,CACtB,MACJ,IAAK,SAAS,CACVX,CAAK,CAACW,QAAQ,GAAO,CACrB,MACJ,IAAK,MAAM,CACPX,CAAK,CAACY,UAAU,CAAC5C,SAAS,CAACK,MAAM,CAAC,UAAU,CAAC,CAC7C,MACJ,IAAK,MAAM,CACP2B,CAAK,CAACY,UAAU,CAAC5C,SAAS,CAACC,GAAG,CAAC,UAAU,CAAC,CAC1C,MAEJ,QAEA,CACJ,CAQAgB,QAAQA,CAACQ,CAAC,CAAE,CACRA,CAAC,CAACoB,cAAc,CAAC,CAAC,MAEZ,CAAAjE,CAAI,CAAI6C,CAAC,CAACC,MAAM,EAAID,CAAC,CAACC,MAAM,CAAC9C,IAAI,EAAK6C,CAAC,CAACQ,MAAM,CAACrD,IAAI,CACnDkE,CAAK,CAAIrB,CAAC,CAACC,MAAM,EAAID,CAAC,CAACC,MAAM,CAACoB,KAAK,EAAKrB,CAAC,CAACQ,MAAM,CAACa,KAAK,CACtDb,CAAM,CAAIR,CAAC,CAACC,MAAM,EAAID,CAAC,CAACC,MAAM,CAACO,MAAM,EAAKR,CAAC,CAACQ,MAAM,CAEnDR,CAAC,CAACC,MAAM,EAAKD,CAAC,CAACC,MAAM,CAACqB,aAAa,EACpC,IAAI,CAACC,mBAAmB,CAACf,CAAM,CAAC,CAEpC,GAAI,CAAAG,CAAM,CAAG,IAAI,CAEjB,GAAIxD,CAAI,GAAwB,UAAU,GAA5B6C,CAAC,CAACQ,MAAM,CAACK,IAAmB,EAAKb,CAAC,CAACQ,MAAM,CAACgB,OAAO,CAAC,CAAE,CAC9D,KAAM,CAAAC,CAAc,CAAG,IAAI,CAACC,iBAAiB,CAAC,IAAI,CAACC,OAAO,CAAC,CAAC,CAAC,CAGvDxE,CAAI,GAAI,CAAAsE,CAAc,EAAKA,CAAc,CAACtE,CAAI,CAAC,GAAKkE,CAAK,GAC3DV,CAAM,CAAG9D,QAAQ,CAACc,aAAa,CAAC,OAAO,CAAC,CACxCgD,CAAM,CAACE,IAAI,CAAG,QAAQ,CACtBF,CAAM,CAACxD,IAAI,CAAGA,CAAI,CAClBwD,CAAM,CAACU,KAAK,CAAGA,CAAK,CACpB,IAAI,CAAC/I,OAAO,CAACuF,WAAW,CAAC8C,CAAM,CAAC,CAExC,CAEA,IAAI,CAACrG,MAAM,CAAC,CAAC,CAACsH,KAAK,CAAC,IAAM,CAAC,CAAC,CAAC,CAEzBjB,CAAM,EACNA,CAAM,CAAC/B,MAAM,CAAC,CAEtB,CAKAa,OAAOA,CAAA,CAAG,CACN,IAAI,CAACoC,WAAW,CAAC,CACrB,CAKAnC,YAAYA,CAAA,CAAG,CACX,IAAI,CAACoC,MAAM,CAAC,CACRrE,IAAI,CAAE,IAAI,CAACnF,OAAO,CAAC6E,IACvB,CAAC,CACL,CAMA2C,gBAAgBA,CAACE,CAAC,CAAE,CAChBrI,CAAO,CAAC,aAAa,CAAEqI,CAAC,CAACQ,MAAM,CAAE,CAAEuB,OAAO,GAAO,CAAC,CACtD,CAOAnC,gBAAgBA,CAACI,CAAC,CAAE,CAChBA,CAAC,CAACgC,eAAe,CAAC,CAAC,CACnB,IAAI,CAACjE,KAAK,CAACI,cAAc,GAAO,CAChC,IAAI,CAAC8D,eAAe,CAAC,CACzB,CAOApC,gBAAgBA,CAACG,CAAC,CAAE,CAChBA,CAAC,CAACgC,eAAe,CAAC,CAAC,CACnB,IAAI,CAACjE,KAAK,CAACI,cAAc,GAC7B,CAKA+D,YAAYA,CAAA,CAAG,CAEf,CAMAC,cAAcA,CAAA,CAAG,SAET,IAAI,CAAC5J,OAAO,CAACyC,iBAAiB,GAIlC,IAAI,CAACoH,QAAQ,CAAC,CAAC,GACV,IAAI,CAAC9J,OAAO,CAAC+J,aAAa,CAAC,CAAC,GAC7B1K,CAAO,CAAC,IAAI,CAACY,OAAO,CAACyB,MAAM,CAACK,aAAa,CAAE,IAAI,CAAC/B,OAAO,CAAE,CAAEyJ,OAAO,GAAO,CAAC,CAAC,CACvE,IAAI,CAACxJ,OAAO,CAACqC,oBAAoB,EACjC,IAAI,CAACtC,OAAO,CAACgK,cAAc,CAAC,CAAEC,KAAK,CAAE,QAAS,CAAC,CAAC,CAGpD,IAAI,CAACC,kBAAkB,CAAC,CAAC,KAIjC,CAQAlI,MAAMA,CAAC0F,CAAC,CAAE,QACFA,CAAC,EACDA,CAAC,CAACoB,cAAc,CAAC,CAAC,CAGtB,IAAI,CAACa,eAAe,CAAC,CAAC,CAEtB,IAAI,CAACC,YAAY,CAAC,CAAC,CAGf,IAAI,CAACnE,KAAK,CAACC,YAAY,EAAI,CAAC,IAAI,CAACD,KAAK,CAACO,wBAAwB,EACxDS,OAAO,CAAC0D,MAAM,CAAC,CAAC,CAGtB,IAAI,CAACN,cAAc,CAAC,CAAC,CAItB,IAAI,CAACpE,KAAK,CAACG,UAAU,EAAI,CAAC,IAAI,CAACH,KAAK,CAACI,cAAc,CAG/C,IAAI,CAACJ,KAAK,CAACK,kBAAkB,CACtB,GAAI,CAAAW,OAAO,CAAC,CAAC2D,CAAO,CAAED,CAAM,GAAK,CACpC9K,CAAO,CAAC,iBAAiB,CAAE,IAAI,CAACW,OAAO,CAACwE,aAAa,CAAE,IAAG,IAAI,CAACnB,OAAO,CAACI,SAAU,EAAC,CAAC,CAAE,CACjF4G,IAAI,CAAE,IAAI,CAACrK,OAAO,CAClBsK,gBAAgB,CAAEA,CAAA,GAAM,CAEpB,IAAI,CAACtI,MAAM,CAAC,CAAC,CAAC+E,IAAI,CAACqD,CAAO,CAAC,CAACd,KAAK,CAAEiB,CAAK,EAAK,CACpCA,CAAK,CAAC/G,YAAY,EAAK+G,CAAK,CAACC,YAAY,EAC1C,IAAI,CAACC,YAAY,CAAC,IAAI,CAACxK,OAAO,CAACI,aAAa,CAACC,eAAe,CAAC,CAGjE6J,CAAM,CAAC,CACX,CAAC,CACL,CAAC,CACDO,aAAa,CAAEP,CACnB,CAAC,CACL,CAAC,CAAC,EAGN,IAAI,CAACM,YAAY,CAAC,IAAI,CAACxK,OAAO,CAACI,aAAa,CAACC,eAAe,CAAC,CAEtDmG,OAAO,CAAC0D,MAAM,CAAC,CAAC,GAGtB,IAAI,CAAC1E,KAAK,CAACC,YAAY,EACxB,IAAI,CAACiF,cAAc,GAAK,CAAC,CAGzB,IAAI,CAAC1K,OAAO,CAACgD,gBAAgB,EAAI,CAAC,IAAI,CAACwC,KAAK,CAACO,wBAAwB,EAC9D,GAAI,CAAAS,OAAO,CAAC,CAAC2D,CAAO,CAAED,CAAM,GAAK,CACpC9K,CAAO,CAAC,iBAAiB,CAAE,IAAI,CAACW,OAAO,CAACwE,aAAa,CAAC,IAAI,CAACvE,OAAO,CAACiD,wBAAwB,CAAC,CAAE,CAC1F0H,mBAAmB,CAAEA,CAAA,GAAM,CACvB,IAAI,CAACnF,KAAK,CAACO,wBAAwB,GAAO,CAC1C,IAAI,CAAChE,MAAM,CAAC,CAAC,CAAC+E,IAAI,CAACqD,CAAO,CAC9B,CAAC,CACDS,gBAAgB,CAAG/I,CAAK,EAAK,CACzB,IAAI,CAAC2D,KAAK,CAACO,wBAAwB,GAAO,CAC1C,IAAI,CAACyE,YAAY,CAAC3I,CAAK,CAACgJ,OAAO,CAAC,CAE5BhJ,CAAK,CAACE,MAAM,CACZ,IAAI,CAACA,MAAM,CAAC,CAAC,CAAC+E,IAAI,CAACqD,CAAO,CAAC,CAE3B,IAAI,CAACO,cAAc,GAAM,CAAC,CAE9BR,CAAM,CAAC,CACX,CACJ,CAAC,CACL,CAAC,CAAC,EAGF,IAAI,CAACxE,QAAQ,EACb,IAAI,CAAC4D,WAAW,CAAC,CAAC,CAGlB,IAAI,CAACtJ,OAAO,CAAC2C,oBAAoB,EACjC,IAAI,CAACmI,kBAAkB,CAAC,CAAC,CAG7B7L,CAAK,CAAC8L,IAAI,CAAC,IAAI,CAAC/K,OAAO,CAACyB,MAAM,CAACO,aAAa,CAAE,CAAEoI,IAAI,CAAE,IAAI,CAACrK,OAAQ,CAAC,CAAC,CAEjE,IAAI,CAACgE,GAAG,CACDhF,CAAI,CAAC,IAAI,CAACgF,GAAG,CAAE,CAClBE,MAAM,CAAE,IAAI,CAACA,MAAM,CACnB+G,IAAI,CAAE,IAAI,CAAC5B,OAAO,CAAC,CAAC,CACpBjJ,OAAO,CAAE,IAAI,CAAC8K,UAAU,CAAC,CAC7B,CAAC,CAAC,CACGnE,IAAI,CAAC,IAAI,CAACoE,eAAe,CAAClE,IAAI,CAAC,IAAI,CAAC,CAAC,CACrCqC,KAAK,CAAC,IAAI,CAAC8B,aAAa,CAACnE,IAAI,CAAC,IAAI,CAAC,CAAC,CAEtC,IAAI,CAACoE,YAAY,CAAC,CAAC,EA3Ef5E,OAAO,CAAC0D,MAAM,CAAC,CA4E9B,CAOAmB,cAAcA,CAAA,CAAG,CACb,KAAM,CAAAC,CAAW,CAAG,CAAC,CAAC,CAKtB,MAJA,KAAI,CAAClC,OAAO,CAAC,CAAC,CAACjD,OAAO,CAAC,CAAC2C,CAAK,CAAEyC,CAAG,GAAK,CACnCD,CAAW,CAACC,CAAG,CAAC,CAAGzC,CACvB,CAAC,CAAC,CAEKwC,CACX,CAMAF,YAAYA,CAAA,CAAG,CACX,MAAO,IAAI,CAAA5E,OAAO,CAAC,CAAC2D,CAAO,CAAED,CAAM,GAAK,CACpC,GAAI,IAAI,CAAClK,OAAO,CAACyB,MAAM,CAACM,MAAM,CAC1B9C,CAAK,CAAC8L,IAAI,CAAC,IAAI,CAAC/K,OAAO,CAACyB,MAAM,CAACM,MAAM,CAAE,CACnCqI,IAAI,CAAE,IAAI,CAACiB,cAAc,CAAC,CAAC,CAC3BG,SAAS,CAAGC,CAAQ,EAAK,CACrB,IAAI,CAACP,eAAe,CAACO,CAAQ,CAAC,CAC9BtB,CAAO,CAAC,CACZ,CAAC,CACDuB,OAAO,CAAGD,CAAQ,EAAK,CACnB,IAAI,CAACN,aAAa,CAACM,CAAQ,CAAC,CAC5BvB,CAAM,CAAC,CACX,CACJ,CAAC,CAAC,KACC,CACH,KAAM,CAAAzC,CAAC,CAAG,GAAI,CAAAkE,KAAK,CAAC,oCAAoC,CAAC,CACzDzB,CAAM,CAACzC,CAAC,CACZ,CACJ,CAAC,CACL,CAKAoC,QAAQA,CAAA,CAAG,CAEP,IAAI,CAAC9J,OAAO,CAAC+J,aAAa,CAAC,CAAC,CAE5BpD,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC5G,OAAO,CAAC+D,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAACqC,OAAO,CAAE6B,CAAK,EAAK,CACtF,GAAIxI,CAAQ,CAACkJ,YAAY,CAACV,CAAK,CAAC,CAAE,CAC9B,KAAM,CAAAQ,CAAc,CAAGhJ,CAAQ,CAACoM,YAAY,CAAC5D,CAAK,CAAC,CACZ,UAAU,EAA7C,MAAO,CAAAQ,CAAc,CAACqB,QAAuB,EAC7CrB,CAAc,CAACqB,QAAQ,CAAC,CAEhC,CACJ,CAAC,CACL,CAKAP,WAAWA,CAAA,CAAG,CACV,IAAI,CAACvJ,OAAO,CAAC+D,gBAAgB,CAAC,iBAAiB,CAAC,CAACqC,OAAO,CAAC6B,CAAK,EAAI5I,CAAO,CAAC,aAAa,CAAE4I,CAAK,CAAC,CACnG,CAKA6D,iBAAiBA,CAAA,CAAG,CAChB,IAAI,CAAC9L,OAAO,CAAC+D,gBAAgB,CAAC,iBAAiB,CAAC,CAACqC,OAAO,CAAC6B,CAAK,EAAI5I,CAAO,CAAC,aAAa,CAAE4I,CAAK,CAAC,CACnG,CAKA8D,iBAAiBA,CAAA,CAAG,CAChB,IAAI,CAAC/L,OAAO,CAAC+D,gBAAgB,CAAC,iCAAiC,CAAC,CAACqC,OAAO,CAAC4F,CAAU,EAAIA,CAAU,CAAC1F,MAAM,CAAC,CAAC,CAC9G,CAOA2F,WAAWA,CAACC,CAAO,CAAE,CACb,IAAI,CAACjM,OAAO,CAACa,qBAAqB,CAElC,IAAI,CAACqL,eAAe,CAACD,CAAO,CAAC,CACtB,IAAI,CAACjM,OAAO,CAACgB,kBAAkB,EAEtC,IAAI,CAACjB,OAAO,CAACoM,KAAK,CAAC,CAE3B,CAOA/C,OAAOA,CAAA,CAAG,CACN,MAAO,IAAI,CAAAgD,QAAQ,CAAC,IAAI,CAACrM,OAAO,CACpC,CAOAkL,UAAUA,CAAA,CAAG,CACT,MAAO,KAAI,CAACjL,OAAO,CAACG,OACxB,CAQA+K,eAAeA,CAACe,CAAO,CAAE,CAErBA,CAAO,CAAGA,CAAO,EAAI,CAAC,CAAC,CACvB,KAAM,CAAAI,CAAM,CAAGJ,CAAO,CAACI,MAAM,EAAI,CAAC,CAAC,CACnC,IAAI,CAACC,iBAAiB,CAACL,CAAO,CAAC,MACzB,CAAAM,CAAc,CAAGF,CAAM,CAAC7K,WAAW,CACnCA,CAAW,CAAGyK,CAAO,CAACzK,WAAW,EAAIyK,CAAO,CAACO,WAAW,EAAID,CAAc,EAAI,IAAI,CAACvM,OAAO,CAACwB,WAAW,CAQ5G,GAPIA,CAAW,EAAuB,QAAQ,EAA3B,MAAO,CAAAyK,CAAoB,CAC1CA,CAAO,CAACzK,WAAW,CAAGA,CAAW,CAC1B,CAACA,CAAW,EAAI,CAAC,IAAI,CAACxB,OAAO,CAACkD,yBAAyB,EAC9D,IAAI,CAACwH,cAAc,GAAM,CAAC,CAE9BtL,CAAO,CAAC,IAAI,CAACY,OAAO,CAACyB,MAAM,CAACG,OAAO,CAAE,IAAI,CAAC7B,OAAO,CAAE,CAAEyJ,OAAO,GAAM,CAAEyC,OAAO,CAAPA,CAAQ,CAAC,CAAC,CAEzE,IAAI,CAACjM,OAAO,CAACkB,YAAY,EAAyC,QAAQ,EAA7C,MAAO,KAAI,CAAClB,OAAO,CAACkB,YAAyB,EAAKmL,CAAM,CAACnL,YAAY,CAAE,CACrG,GAAI,CAAAA,CAAY,CAAG,IAAI,CAAClB,OAAO,CAACkB,YAAY,EAAI,CAAC,CAAC,CAC9C+K,CAAO,CAACQ,UAAU,GAClBvL,CAAY,CAACwL,UAAU,CAAGT,CAAO,CAACQ,UAAU,EAI5CJ,CAAM,CAACnL,YAAY,GACnBA,CAAY,CAAG7B,CAAS,CAAC6B,CAAY,CAAEmL,CAAM,CAACnL,YAAY,CAAC,EAG/D,IAAI,CAACyL,SAAS,CAACzL,CAAY,CAC/B,CAAC,IAAU,KAAI,CAAClB,OAAO,CAACe,qBAAqB,EAAIkL,CAAO,CAACW,cAAc,EACnE3N,CAAK,CAAC8L,IAAI,CAAC,iBAAiB,CAAE,CAAEkB,OAAO,CAAEA,CAAO,CAACW,cAAc,CAAEtE,IAAI,CAAE,SAAU,CAAC,CAAC,CACtF,OAED,IAAI,CAACuE,YAAY,CAAC,CAAC,CAEnB,IAAI,CAACC,mBAAmB,CAACb,CAAO,CAAC,CAE7B,IAAI,CAACjM,OAAO,CAAC6C,yBAAyB,EACtClD,CAAmB,CAACoN,gBAAgB,CAAC,IAAI,CAAC/M,OAAO,CAAC6C,yBAAyB,CAAC,CAG5E,CAACoJ,CAAO,CAACe,YAAY,EAAI,CAACf,CAAO,CAACgB,kBAAkB,EAAI,IAAI,CAACC,YAAY,CAAC1L,CAAW,CAAC,EAC/E,IAAI,CAAC2H,iBAAiB,CAAC,IAAI,CAACC,OAAO,CAAC,CAAC,CAAC,EAGjD,IAAI,CAAC4C,WAAW,CAACC,CAAO,CAAC,CAErB,IAAI,CAACjM,OAAO,CAACqC,oBAAoB,EAAI4J,CAAO,CAACrK,OAAO,EAAIqK,CAAO,CAACpB,OAAO,EACvE,IAAI,CAAC9K,OAAO,CAACgK,cAAc,CAAC,CAAEC,KAAK,CAAE,QAAS,CAAC,CAAC,CAG7C,IAAI,CAACb,iBAAiB,CAAC,IAAI,CAACC,OAAO,CAAC,CAAC,CAAC,CACjD,CAOAkD,iBAAiBA,CAACpH,CAAI,CAAE,CACfA,CAAI,GAIW,QAAQ,EAAxB,MAAO,CAAAA,CAAiB,EAAIA,CAAI,CAACiI,mBAAmB,GACpD,IAAI,CAACC,aAAa,CAAClI,CAAI,CAACiI,mBAAmB,CAAC,CAC5C,MAAO,CAAAjI,CAAI,CAACiI,mBAAmB,EAGnC,IAAI,CAACC,aAAa,CAAC,IAAI,CAACC,YAAY,CAACnI,CAAI,CAAC,CAAC,CAC/C,CAOAiE,iBAAiBA,CAACiB,CAAI,CAAE,CACpB,KAAM,CAAAkD,CAAO,CAAG,CAAC,CAAC,CAElB,IAAK,KAAM,CAAC/B,CAAG,CAAEzC,CAAK,CAAC,EAAI,CAAAsB,CAAI,CAACmD,OAAO,CAAC,CAAC,CACrCD,CAAO,CAAC/B,CAAG,CAAC,CAAGzC,CAAK,CAGxB,MAAO,CAAAwE,CACX,CAMAR,mBAAmBA,CAACb,CAAO,CAAE,CACzB,GAAI,CAAAxK,CAAM,CAAG,EAAE,CACXwK,CAAO,CAACI,MAAM,EAAIJ,CAAO,CAACI,MAAM,CAAC5K,MAAM,GACvCA,CAAM,CAAGA,CAAM,CAAC+L,MAAM,CAACvB,CAAO,CAACI,MAAM,CAAC5K,MAAM,CAAC,EAE7C,IAAI,CAACzB,OAAO,CAACyB,MAAM,CAACC,aAAa,GACjCD,CAAM,CAAGA,CAAM,CAAC+L,MAAM,CAAC,IAAI,CAACxN,OAAO,CAACyB,MAAM,CAACC,aAAa,CAAC,EAE7DD,CAAM,CAAC0E,OAAO,CAAEmE,CAAK,EAAK,CACtBrL,CAAK,CAAC8L,IAAI,CAACT,CAAK,CAAE2B,CAAO,CAC7B,CAAC,CAAC,CAEE,IAAI,CAACjM,OAAO,CAACoB,mBAAmB,EAChCnC,CAAK,CAAC8L,IAAI,CAAC,aAAa,CAEhC,CAMA0C,iBAAiBA,CAACxB,CAAO,CAAE,CACvB,GAAI,CAAAxK,CAAM,CAAG,EAAE,CAEX,IAAI,CAACzB,OAAO,CAACyB,MAAM,CAACE,WAAW,GAC/BF,CAAM,CAAGA,CAAM,CAAC+L,MAAM,CAAC,IAAI,CAACxN,OAAO,CAACyB,MAAM,CAACE,WAAW,CAAC,EAE3DF,CAAM,CAAC0E,OAAO,CAAEmE,CAAK,EAAK,CACtBrL,CAAK,CAAC8L,IAAI,CAACT,CAAK,CAAE2B,CAAO,CAC7B,CAAC,CACL,CAOAU,SAASA,CAAC3M,CAAO,CAAE,CACff,CAAK,CAAC8L,IAAI,CAAC,YAAY,CAAE,CACrB/K,OAAO,CAAPA,CACJ,CAAC,CACL,CAQAmL,aAAaA,CAACtJ,CAAK,CAAE,CACjB,IAAI,CAAC6I,cAAc,GAAM,CAAC,CAC1BtL,CAAO,CAAC,IAAI,CAACY,OAAO,CAACyB,MAAM,CAACI,KAAK,CAAE,IAAI,CAAC9B,OAAO,CAAE,CAAEyJ,OAAO,GAAM,CAAEyC,OAAO,CAAEpK,CAAM,CAAC,CAAC,CAK/EA,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAAC1D,WAAW,EACpC,IAAI,CAAC0L,YAAY,CAACrL,CAAK,CAACqD,IAAI,CAAC1D,WAAW,CAAC,CAMzC,IAAI,CAACxB,OAAO,CAACiB,mBAAmB,CAChC,IAAI,CAACiL,eAAe,CAACrK,CAAK,CAAC,CACpB,IAAI,CAAC7B,OAAO,CAACqB,yBAAyB,EAE7C,IAAI,CAACqM,sBAAsB,CAAC,CAAC,CAG7B,IAAI,CAAC1N,OAAO,CAAC8C,gCAAgC,EAC7CnD,CAAmB,CAACoN,gBAAgB,CAAC,IAAI,CAAC/M,OAAO,CAAC8C,gCAAgC,CAAC,CAIvF,KAAM,CAAA6K,CAAoB,CAAG9L,CAAK,CAACqD,IAAI,GAAMrD,CAAK,CAACqD,IAAI,CAACqF,YAAY,EAAuC,CAAC,GAApC1I,CAAK,CAACqD,IAAI,CAACqF,YAAY,CAACrK,MAAY,EACpG2B,CAAK,CAACqD,IAAI,CAAC0I,YAAY,EAAuC,CAAC,GAApC/L,CAAK,CAACqD,IAAI,CAAC0I,YAAY,CAAC1N,MAAa,CAAC,CAMzE,GAAI,IAAI,CAACF,OAAO,CAACc,mBAAmB,EAAIe,CAAK,EAAIA,CAAK,CAAC0B,YAAY,CAC/DtE,CAAK,CAAC8L,IAAI,CAAC,iBAAiB,CAAE,CAAEkB,OAAO,CAAEpK,CAAK,CAAC0B,YAAY,CAAE+E,IAAI,CAAE,OAAQ,CAAC,CAAC,KAC1E,IAAIzG,CAAK,CAAC0B,YAAY,CACzB,IAAI,CAACiH,YAAY,CAAC3I,CAAK,CAAC0B,YAAY,CAAC,KAClC,IAAI,CAACoK,CAAoB,CAAE,CAC9B,KAAM,CAAApK,CAAY,CAAIsK,SAAS,CAACC,MAAM,CAC/B,IAAI,CAAC9N,OAAO,CAACM,IAAI,CAACI,mBAAmB,EAAI,iBAAiB,CADxB,IAAI,CAACV,OAAO,CAACM,IAAI,CAACyN,mBACO,CAClE,IAAI,CAACvD,YAAY,CAACjH,CAAY,CAClC,CAEA,KAAM,CAAAqK,CAAY,CAAI/L,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAAC0I,YAAY,EAAK,EAAE,CAC9DA,CAAY,CAAC1N,MAAM,GACnB,IAAI,CAAC4L,iBAAiB,CAAC,CAAC,CACxB8B,CAAY,CAACzH,OAAO,CAAE4F,CAAU,EAAK,CACjC,KAAM,CAAAiC,CAAU,CAAG,IAAI,CAACjO,OAAO,CAACwE,aAAa,CAAE,mBAAkBwH,CAAU,CAACkC,KAAM,IAAG,CAAC,CACtF,GAAID,CAAU,CAAE,CACZ,GAAI,CAAAE,CAAiB,CAAG,IAAI,CAC5BA,CAAiB,CAAG5J,QAAQ,CAACc,aAAa,CAAC,KAAK,CAAC,CACjD8I,CAAiB,CAAClI,SAAS,CAACC,GAAG,CAAC,wBAAwB,CAAE,SAAS,CAAC,CACpEiI,CAAiB,CAAC7I,YAAY,CAAC,IAAI,CAAE0G,CAAU,CAACkC,KAAK,CAAC,CACtDC,CAAiB,CAAC7I,YAAY,CAAC,MAAM,CAAE,OAAO,CAAC,CAC/C6I,CAAiB,CAACC,SAAS,CAAGpC,CAAU,CAACxI,YAAY,CACrDyK,CAAU,CAACpF,UAAU,CAACwF,YAAY,CAACF,CAAiB,CAAEF,CAAU,CAACK,WAAW,CAChF,CACJ,CAAC,CAAC,OAGA,CAAA9D,CAAY,CAAI1I,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAACqF,YAAY,EAAK,EAAE,CAC5D+D,CAAY,CAAIzM,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAACoJ,YAAY,EAAK,CAAC,CAAC,CA4BlE,MA3BI,CAAA/D,CAAY,CAACrK,MAAM,GACnB,IAAI,CAAC2L,iBAAiB,CAAC,CAAC,CACxBtB,CAAY,CAACpE,OAAO,CAAEoI,CAAU,EAAK,CACjC,KAAM,CAAAC,CAAU,CAAG,IAAI,CAACzO,OAAO,CAACwE,aAAa,CAAE,UAASgK,CAAU,CAACvG,KAAM,IAAG,CAAC,CACzEwG,CAAU,EACVpP,CAAO,CAAC,kBAAkB,CAAEoP,CAAU,CAAE,CACpCjL,YAAY,CAAEgL,CAAU,CAAChL,YAAY,CACrCkL,QAAQ,CAAEF,CAAU,CAACE,QAAQ,CAC7BC,QAAQ,CAAEJ,CAAY,CAACC,CAAU,CAACvG,KAAK,CAC3C,CAAC,CAET,CAAC,CAAC,CACF,IAAI,CAACiC,kBAAkB,CAAC,CAAC,EAG7B,IAAI,CAACwD,iBAAiB,CAAC5L,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAAC,CAEvCA,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAACmH,MAAM,EAAIxK,CAAK,CAACqD,IAAI,CAACmH,MAAM,CAACsC,cAAc,EACnE,IAAI,CAACvB,aAAa,CAACvL,CAAK,CAACqD,IAAI,CAACmH,MAAM,CAACsC,cAAc,CAAC,CAGxD,IAAI,CAAC9B,YAAY,CAAC,CAAC,CAEfhL,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAACqD,IAAI,CAAC0J,UAAU,EACnC,IAAI,CAAC1B,YAAY,CAAC,MAAM,CAAC,CAGtB1G,OAAO,CAAC0D,MAAM,CAACrI,CAAK,CAACqD,IAAI,EAAIrD,CAAK,CAC7C,CAKAgL,YAAYA,CAAA,CAAG,CACP,IAAI,CAACrH,KAAK,CAACI,cAAc,GACzB,IAAI,CAACJ,KAAK,CAACI,cAAc,GAAQ,CACjCxG,CAAO,CAAC,eAAe,CAAE,IAAI,CAACW,OAAO,CAACwE,aAAa,CAAE,IAAG,IAAI,CAACnB,OAAO,CAACI,SAAU,EAAC,CAAC,CAAC,CAE1F,CAKAkG,eAAeA,CAAA,CAAG,CACd,IAAI,CAAC3J,OAAO,CAACiG,SAAS,CAACK,MAAM,CAAC,IAAI,CAACjD,OAAO,CAACvB,KAAK,CAAC,CACjD,EAAE,CAACsE,OAAO,CAAC0I,IAAI,CAAC,IAAI,CAAC9O,OAAO,CAAC+D,gBAAgB,CAAE,IAAG,IAAI,CAACV,OAAO,CAACxC,gBAAiB,EAAC,CAAC,CAAGkO,CAAQ,EAAK,CAC9FA,CAAQ,CAACzI,MAAM,CAAC,CACpB,CAAC,CAAC,CACF,IAAI,CAACyF,iBAAiB,CAAC,CAC3B,CAKA4B,sBAAsBA,CAAA,CAAG,CACrB,EAAE,CAACvH,OAAO,CAAC0I,IAAI,CAAC,IAAI,CAAC9O,OAAO,CAAC+D,gBAAgB,CAAE,IAAG,IAAI,CAACV,OAAO,CAACK,iBAAkB,EAAC,CAAC,CAAGsL,CAAG,EAAK,CAC1FA,CAAG,CAAC/I,SAAS,CAACC,GAAG,CAAC,UAAU,CAChC,CAAC,CACL,CAOAuE,YAAYA,CAACjH,CAAY,CAAE,CACvB,IAAI,CAACmG,eAAe,CAAC,CAAC,CACtB,IAAI,CAAC3J,OAAO,CAACiG,SAAS,CAACC,GAAG,CAAC,IAAI,CAAC7C,OAAO,CAACvB,KAAK,CAAC,CAC9C,KAAM,CAAAmN,CAAO,CAAG1K,QAAQ,CAACc,aAAa,CAAC,GAAG,CAAC,CAC3C4J,CAAO,CAAChJ,SAAS,CAACC,GAAG,CAAC,IAAI,CAAC7C,OAAO,CAACxC,gBAAgB,CAAC,CAChD,IAAI,CAACZ,OAAO,CAACW,UAAU,EAAI,IAAI,CAACX,OAAO,CAACW,UAAU,CAACC,gBAAgB,EACnEoO,CAAO,CAAChJ,SAAS,CAACC,GAAG,CAAC,GAAG,IAAI,CAACjG,OAAO,CAACW,UAAU,CAACC,gBAAgB,CAAC+D,KAAK,CAAC,GAAG,CAAC,CAAC,CAEjFqK,CAAO,CAAC3J,YAAY,CAAC,MAAM,CAAE,OAAO,CAAC,CACrC2J,CAAO,CAACb,SAAS,CAAG5K,CAAY,CAC5B,IAAI,CAACvD,OAAO,CAACuB,YAAY,CACzB,IAAI,CAACxB,OAAO,CAACkP,OAAO,CAACD,CAAO,CAAC,CAE7B,IAAI,CAACjP,OAAO,CAACuF,WAAW,CAAC0J,CAAO,CAExC,CAOAtE,cAAcA,CAACjF,CAAY,CAAE,CACrBA,CAAY,EACR,CAAC,IAAI,CAACyJ,MAAM,GACZ,IAAI,CAACA,MAAM,CAAG5K,QAAQ,CAACc,aAAa,CAAC,KAAK,CAAC,CAC3C,IAAI,CAAC8J,MAAM,CAAClJ,SAAS,CAACC,GAAG,CAAC,GAAG,IAAI,CAAC7C,OAAO,CAACC,UAAU,CAAC,EAEzD,IAAI,CAACtD,OAAO,CAACuF,WAAW,CAAC,IAAI,CAAC4J,MAAM,CAAC,CACrC,IAAI,CAAC1J,KAAK,CAACC,YAAY,GAAO,CAC9B,IAAI,CAAC0J,mBAAmB,CAAC,IAAI,CAACnP,OAAO,CAACM,IAAI,CAACC,aAAa,CAACC,uBAAuB,CAAC,GAE7E,IAAI,CAAC0O,MAAM,EACX,IAAI,CAACA,MAAM,CAAC7I,MAAM,CAAC,CAAC,CAExB,IAAI,CAACb,KAAK,CAACC,YAAY,GAAQ,CAC/B,IAAI,CAAC0J,mBAAmB,CAAC,IAAI,CAACnP,OAAO,CAACM,IAAI,CAACC,aAAa,CAACE,qBAAqB,CAAC,CAEvF,CAQAyM,YAAYA,CAACnJ,CAAG,CAAE,CACd,KAAM,CAAAvC,CAAW,CAAGuC,CAAG,EAAI,IAAI,CAAC/D,OAAO,CAACwB,WAAW,CAAC,QAEhDA,CAAW,GACX,IAAI,CAACkJ,cAAc,GAAK,CAAC,CAEL,MAAM,GAAtBlJ,CAAsB,CACtB4N,MAAM,CAACC,QAAQ,CAAC9F,MAAM,CAAC,CAAC,CAExB6F,MAAM,CAACC,QAAQ,CAACC,IAAI,CAAG9N,CAAW,IAM9C,CAMA+E,oBAAoBA,CAAA,CAAG,CACnB,GAAI,IAAI,CAACvG,OAAO,CAAC4C,UAAU,CACvB,SAGJ,GAAI,IAAI,CAAC5C,OAAO,CAAC+C,aAAa,CAAE,CAC5B,KAAM,CAAAwM,CAAa,CAAG5P,CAAmB,CAAC6P,gBAAgB,CAAC,CAAC,CAC5D,GAAID,CAAa,EAA2B,QAAQ,GAA/BA,CAAa,CAACjH,IAAiB,EAAI,IAAI,CAACtI,OAAO,CAAC+C,aAAa,GAAKwM,CAAa,CAACzG,KAAK,CAEtG,MADA,CAAAnJ,CAAmB,CAAC8P,mBAAmB,CAAC,CAAC,GAGjD,CAEA,QACJ,CAKAxF,kBAAkBA,CAAA,CAAG,CACjB,GAAI,CAAC,IAAI,CAACjK,OAAO,CAACsC,0BAA0B,CAGxC,WADA,KAAI,CAACoN,UAAU,CAAC,IAAI,CAAC3P,OAAO,CAACwE,aAAa,CAAC,wCAAsC,CAAC,CAAC,CAIvF,KAAM,CAAAoL,CAAU,CAAG,IAAI,CAAC5P,OAAO,CAACwE,aAAa,CAAE,IAAG,IAAI,CAACnB,OAAO,CAACG,YAAa,EAAC,CAAC,EAAI,IAAI,CAACxD,OAAO,CAACwE,aAAa,CAAE,IAAG,IAAI,CAACnB,OAAO,CAACxC,gBAAiB,EAAC,CAAC,CAEjJ,GAAK+O,CAAU,EAIf,KAAM,CAAAC,CAAM,CAAGD,CAAU,CAAC/G,UAAU,CAEpClJ,CAAQ,CAACkQ,CAAM,CAAE,IAAI,CAAC5P,OAAO,CAACuC,kBAAkB,CAAC,CACrD,CAOAmN,UAAUA,CAAC1H,CAAK,CAAE,SACTA,CAAK,GAIVA,CAAK,CAAC6H,KAAK,CAAC,CAAC,IAEjB,CAMAC,mBAAmBA,CAACxF,CAAK,CAAE,CACvB,KAAM,CAAEyF,WAAW,CAAXA,CAAY,CAAC,CAAGzF,CAAK,CAAC5C,MAAM,CACT,UAAU,EAAjC,MAAO,CAAAqI,CAA0B,EACjC,IAAI,CAAChO,MAAM,CAAC,CAAC,CACR+E,IAAI,CAAE5B,CAAI,EAAK,CACZ6K,CAAW,CAAC,CACRC,OAAO,GAAM,CACb9K,IAAI,CAAJA,CACJ,CAAC,CACL,CAAC,CAAC,CAACmE,KAAK,CAAC,IAAM,CACX0G,CAAW,CAAC,CACRC,OAAO,GACX,CAAC,CACL,CAAC,CAEb,CAKA5I,UAAUA,CAAA,CAAG,CACT,IAAI,CAACyC,QAAQ,CAAC,CAClB,CAMAoG,OAAOA,CAAA,CAAG,CACN,KAAK,CAACA,OAAO,CAAC,CAAC,CAEf9Q,CAAG,CAAC,IAAI,CAACY,OAAO,CAAC,CACjBZ,CAAG,CAAC,OAAO,CAAE,IAAI,CAACyE,SAAS,CAACC,OAAO,CACvC,CACJ,CAAC","ignoreList":[]}