@apia/execution 4.0.43 → 4.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +28 -15
- package/dist/index.js +236 -101
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/util/comparators/deepEqual.ts","../src/main/Notifications/Notification.ts","../src/main/Notifications/MessageNotification.ts","../src/main/Execution/FormsExecution/constants/fieldProps.ts","../src/main/Execution/FormsExecution/constants/formProps.ts","../src/main/Execution/FormsExecution/constants/props/booleanProps.ts","../src/main/Execution/FormsExecution/constants/props/numberProps.ts","../src/util/xml/parseXml.ts","../src/util/dom/getWindow.ts","../src/main/Execution/types.ts","../src/util/api/apiaApi.ts","../src/util/events/EventEmitter.ts","../src/util/events/StatefulEmitter.ts","../src/util/events/BouncingEmitter.ts","../src/util/labels/labels.ts","../src/util/dataTypes/parseBoolean.ts","../src/util/other/parseFakeJSON.ts","../src/main/Execution/FormsExecution/WithProperties.ts","../src/util/dom/getDocument.ts","../src/util/app/getCurrentTabsString.ts","../src/main/Execution/FormsExecution/constants/actions.ts","../src/main/Execution/FormsExecution/constants/eventTypes.ts","../src/main/Execution/FormsExecution/constants/IProperty.ts","../src/main/Execution/FormsExecution/events/setAjaxFormResponse.ts","../src/programming/utils/asynCreateApiaField.ts","../src/main/Execution/FormsExecution/Field.ts","../src/main/Execution/FormsExecution/fields/Button/index.ts","../src/main/Execution/FormsExecution/fields/Captcha/index.ts","../src/util/other/asyncRetry.ts","../src/util/comparators/shallowEqual.ts","../src/main/Execution/FormsExecution/util/isFieldShowAsText.ts","../src/main/Execution/FormsExecution/FieldWithAttribute.ts","../src/main/Execution/FormsExecution/fields/Checkbox/index.ts","../src/main/Execution/FormsExecution/TranslatableField/Translation.ts","../src/main/Execution/FormsExecution/TranslatableField/util.ts","../src/main/Execution/FormsExecution/TranslatableField/index.ts","../src/main/Execution/FormsExecution/fields/Editor/index.ts","../src/main/Execution/Uploader/UploaderModalController.ts","../src/main/Execution/Uploader/UploaderApi.ts","../src/main/Execution/Uploader/FormsUploader.ts","../src/main/Execution/FormsExecution/fields/File/index.ts","../src/util/number/noNaN.ts","../src/main/Execution/FormsExecution/fields/Grid/GridFooterHandler.ts","../src/main/Execution/FormsExecution/fields/Grid/GridCell.ts","../src/main/Execution/FormsExecution/fields/Grid/AdditionalCell.ts","../src/main/Execution/FormsExecution/fields/Grid/HeaderCell.ts","../src/main/Execution/FormsExecution/fields/Grid/FieldsCache.ts","../src/main/Execution/FormsExecution/fields/ModalInput/index.ts","../src/main/Execution/FormsExecution/fields/Hidden/index.ts","../src/main/Execution/FormsExecution/fields/Grid/index.ts","../src/main/Execution/FormsExecution/fields/GridPaginated/index.ts","../src/main/Execution/FormsExecution/fields/Image/index.ts","../src/main/Execution/FormsExecution/fields/Input/index.ts","../src/main/Execution/FormsExecution/fields/Label/index.ts","../src/main/Execution/FormsExecution/fields/Link/index.ts","../src/main/Execution/FormsExecution/fields/Multiple/index.ts","../src/main/Execution/FormsExecution/fields/Password/index.ts","../src/main/Execution/FormsExecution/fields/Radio/index.ts","../src/main/Execution/FormsExecution/fields/Select/index.ts","../src/main/Execution/FormsExecution/fields/Textarea/index.ts","../src/main/Execution/FormsExecution/fields/Title/index.ts","../src/main/Execution/FormsExecution/fields/Tree/index.ts","../src/main/Execution/FormsExecution/fields/Scheduler/index.ts","../src/programming/constants/FieldConstants.ts","../src/programming/constants/FormConstants.ts","../src/programming/constants/IProperty.ts","../src/programming/ActionController/index.ts","../src/programming/ApiaField.ts","../src/programming/fields/ButtonField.ts","../src/programming/ApiaFieldWithAttribute.ts","../src/programming/fields/EditorField.ts","../src/programming/fields/SelectField.ts","../src/programming/fields/InputField.ts","../src/programming/fields/TreeField.ts","../src/programming/fields/CheckField.ts","../src/programming/fields/RadioField.ts","../src/programming/fields/MultipleField.ts","../src/programming/fields/HiddenField.ts","../src/programming/fields/AreaField.ts","../src/programming/fields/ImageField.ts","../src/programming/fields/LinkField.ts","../src/programming/fields/TextField.ts","../src/programming/fields/CustomComponentField.ts","../src/programming/utils/createApiaField.ts","../src/programming/fields/GridField.ts","../src/programming/fields/CaptchaField.ts","../src/programming/fields/FileUploaderField.ts","../src/programming/fields/PasswordField.ts","../src/programming/fields/ModalInput.ts","../src/programming/ApiaForm.ts","../src/programming/ApiaFunctions.ts","../src/main/Execution/FormsExecution/customComponents/CustomComponent.ts","../src/main/Notifications/StatusNotification.ts","../src/main/Notifications/index.ts","../src/main/Execution/FormsExecution/Form.ts","../src/main/InitialData/bootstrap/readFormsDefinition.ts","../src/main/InitialData/index.ts","../src/main/Execution/FormsExecution/fieldsMap.ts","../src/main/Execution/Process/index.ts","../src/main/Execution/Task.ts","../src/main/Execution/Entity/index.ts","../src/main/Execution/Observations/index.ts","../src/main/Execution/FlowModals/FlowModal.ts","../src/main/Execution/FlowModals/ShowPoolSelection.ts","../src/main/Execution/FlowModals/ShowPathSelection.ts","../src/main/Execution/FlowModals/ShowSignSelection.ts","../src/main/Execution/FlowModals/ShowConfirmMessage.ts","../src/main/Execution/FlowModals/ShowSign.ts","../src/main/Execution/FlowModals/confirmFlow.ts","../src/main/Execution/EntityFlowModals/FlowModal.ts","../src/main/Execution/EntityFlowModals/ShowSignSelection.ts","../src/main/Execution/EntityFlowModals/ShowSign.ts","../src/main/Execution/EntityFlowModals/confirmFlow.ts","../src/main/Execution/index.ts"],"sourcesContent":["export type Comparator<T> = (a: T, b: T) => boolean;\r\n\r\nexport const deepEqual: Comparator<any> = (a: any, b: any) => {\r\n if (Object.is(a, b)) return true;\r\n\r\n if (!Object.is(a, b) && typeof a !== typeof b) {\r\n return false;\r\n }\r\n\r\n if (typeof a === 'object') {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (a && b) {\r\n for (const [key, value] of Object.entries(a)) {\r\n if (!deepEqual(value, b[key])) {\r\n return false;\r\n }\r\n }\r\n for (const [key, value] of Object.entries(b)) {\r\n if (!deepEqual(value, a[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if ((a && !b) || (!a && b)) {\r\n return false;\r\n }\r\n }\r\n\r\n return a === b;\r\n};\r\n","import { makeObservable, observable } from 'mobx';\r\n\r\nexport type NotificationIcon = string;\r\n\r\nexport type NotificationType = 'info' | 'error' | 'success' | 'warning';\r\n\r\nexport type NotificationDefinition = {\r\n icon?: NotificationIcon;\r\n id?: string | number;\r\n isOpen?: boolean;\r\n message: string;\r\n stackTrace?: string;\r\n title?: string;\r\n type?: NotificationType;\r\n};\r\n\r\nexport abstract class Notification<\r\n State extends NotificationDefinition = NotificationDefinition,\r\n> {\r\n protected state: State;\r\n\r\n constructor(public readonly props: State) {\r\n this.state = props;\r\n\r\n makeObservable<Notification, 'state'>(this, { state: observable });\r\n }\r\n\r\n get icon() {\r\n return this.state.icon;\r\n }\r\n get id() {\r\n return this.state.id;\r\n }\r\n get isOpen() {\r\n return this.state.isOpen;\r\n }\r\n get message() {\r\n return this.state.message;\r\n }\r\n get stackTrace() {\r\n return this.state.stackTrace;\r\n }\r\n get title() {\r\n return this.state.title;\r\n }\r\n get type() {\r\n return this.state.type;\r\n }\r\n}\r\n","import { Notification } from './Notification';\r\n\r\nexport class MessageNotification extends Notification {\r\n close() {\r\n this.state.isOpen = false;\r\n }\r\n}\r\n","const fieldProps = {\r\n // field types\r\n TYPE_INPUT: 'input',\r\n TYPE_SELECT: 'select',\r\n TYPE_RADIO: 'radio',\r\n TYPE_CHECK: 'check',\r\n TYPE_BUTTON: 'button',\r\n TYPE_AREA: 'area',\r\n TYPE_LABEL: 'label',\r\n TYPE_TITLE: 'title',\r\n TYPE_FILE: 'file',\r\n TYPE_MULTIPLE: 'multiple',\r\n TYPE_HIDDEN: 'hidden',\r\n TYPE_PASSWORD: 'password',\r\n TYPE_GRID: 'grid',\r\n TYPE_IMAGE: 'image',\r\n TYPE_HREF: 'href',\r\n TYPE_EDITOR: 'editor',\r\n TYPE_TREE: 'tree',\r\n TYPE_CAPTCHA: 'captcha',\r\n\r\n // field functions\r\n FUNC_CLICK: 'onclick',\r\n FUNC_CHANGE: 'onchange',\r\n FUNC_MODAL_RETURN: 'onmodalreturn',\r\n\r\n FUNC_ROW_ADD: 'onrowadd',\r\n FUNC_ROW_DELETE: 'onrowdelete',\r\n FUNC_ROW_SORT: 'onrowsort',\r\n FUNC_COL_SELECT: 'oncolselect',\r\n\r\n // Attribute w/ props json for fields\r\n FIELD_PROPERTIES: 'properties',\r\n\r\n // Field properties\r\n PROPERTY_NAME: 'name',\r\n PROPERTY_SIZE: 'size',\r\n PROPERTY_READONLY: 'readonly',\r\n PROPERTY_DISABLED: 'disabled',\r\n PROPERTY_MODAL_DISABLED: 'modalDisabled',\r\n PROPERTY_FONT_COLOR: 'fontColor',\r\n PROPERTY_VALUE: 'value',\r\n PROPERTY_REQUIRED: 'required',\r\n PROPERTY_COLSPAN: 'colspan',\r\n PROPERTY_ROWSPAN: 'rowspan',\r\n PROPERTY_MODAL: 'modal',\r\n PROPERTY_ROWS: 'thisRows',\r\n PROPERTY_BOLD: 'bold',\r\n PROPERTY_UNDERLINED: 'underlined',\r\n PROPERTY_ALIGNMENT: 'alignment',\r\n PROPERTY_IMAGE: 'imageUrl',\r\n PROPERTY_COL_WIDTH: 'colWidth',\r\n PROPERTY_GRID_HEIGHT: 'gridHeight',\r\n PROPERTY_HIDE_GRID_BTN: 'hideGridButtons',\r\n PROPERTY_VISIBILITY_HIDDEN: 'visibilityHidden',\r\n PROPERTY_TRANSIENT: 'transient',\r\n PROPERTY_GRID_TITLE: 'gridTitle',\r\n PROPERTY_GRID_FORM: 'gridForm',\r\n PROPERTY_TOOLTIP: 'tooltip',\r\n PROPERTY_VALUE_COLOR: 'valueColor',\r\n PROPERTY_INPUT_AS_TEXT: 'inputAsText',\r\n PROPERTY_NO_DOWNLOAD: 'noDownload',\r\n PROPERTY_NO_ERASE: 'noErase',\r\n PROPERTY_NO_LOCK: 'noLock',\r\n PROPERTY_NO_HISTORY: 'noHistory',\r\n PROPERTY_NO_MODIFY: 'noModify',\r\n PROPERTY_ALLOW_EDITION: 'allowEdition',\r\n PROPERTY_HIDE_SIGN_ICONS: 'hideSignButtons',\r\n PROPERTY_URL: 'url',\r\n PROPERTY_GRID_HIDE_BTN_ORDER: 'hideOrderButton',\r\n PROPERTY_GRID_HIDE_BTN_INCLUDE: 'hideIncludeButton',\r\n PROPERTY_REGEXP_MESSAGE: 'regExpMessage',\r\n PROPERTY_PAGED_GRID: 'paged',\r\n PROPERTY_PAGED_GRID_SIZE: 'pagedGridSize',\r\n PROPERTY_GRID_ALTER_IN_LAST_PAGE: 'alterOnlyLastPage',\r\n PROPERTY_GRID_PRINT_HORIZONTAL: 'printHorizontal',\r\n PROPERTY_STORE_MODAL_QUERY_RESULT: 'storeMdlQryResult',\r\n PROPERTY_INCLUDE_FIRST_ROW: 'includeFirstRow',\r\n PROPERTY_MAX_REG_GRID: 'maxRecords',\r\n PROPERTY_GRID_LABEL: 'gridColTitle',\r\n PROPERTY_GRID_QUERY: 'gridQuery',\r\n PROPERTY_HIDE_DOC_PERMISSIONS: 'hideDocPermissions',\r\n PROPERTY_VERIFY_SIGNATURE_ONLY: 'verifySignatureOnly',\r\n PROPERTY_GRID_HIDE_BTN_ADD: 'hideAddButton',\r\n PROPERTY_GRID_HIDE_BTN_DEL: 'hideDelButton',\r\n PROPERTY_HIDE_DOC_UPLOAD: 'hideDocUpload',\r\n PROPERTY_HIDE_DOC_DOWNLOAD: 'hideDocDownload',\r\n PROPERTY_HIDE_DOC_ERASE: 'hideDocErase',\r\n PROPERTY_HIDE_DOC_LOCK: 'hideDocLock',\r\n PROPERTY_HIDE_DOC_HISTORY: 'hideDocHistory',\r\n PROPERTY_HIDE_DOC_SIGN: 'hideSignButtons',\r\n PROPERTY_DISPLAY_NONE: 'displayNone',\r\n PROPERTY_DONT_BREAK_RADIO: 'dontBreakRadio',\r\n PROPERTY_CHECKED: 'checked',\r\n PROPERTY_FILE_PREVIEW: 'filePreview',\r\n PROPERTY_NOT_PRINT: 'noPrint',\r\n // tree component\r\n PROPERTY_SELECT_PARENT: 'selParent',\r\n PROPERTY_HEIGHT: 'height',\r\n PROPERTY_MULTISELECT: 'multiselect',\r\n PROPERTY_SEL_PARENT: 'selParent',\r\n PROPERTY_PARENT_ICON: 'parentIcon',\r\n PROPERTY_LEAF_ICON: 'leafIcon',\r\n PROPERTY_CSS_CLASS: 'cssClass',\r\n PROPERTY_DOC_TYPE: 'docType',\r\n // file component\r\n PROPERTY_HIDE_DOC_METADATA: 'hideDocMetadata',\r\n PROPERTY_TRANSLATION_REQUIRED: 'reqTrad',\r\n PROPERTY_SIGNATURE_REQUIRED: 'reqSign',\r\n PROPERTY_SHOW_TOOLTIP_AS_HELP: 'tooltipHelp',\r\n PROPERTY_DOCUMENT_MONITOR_DEF: 'documentMonitorDef',\r\n PROPERTY_DOCUMENT_MONITOR_CUS: 'documentMonitorCus',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN: 'fileShwFoldTreeBtn',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR: 'fileShwFoldTreeStr',\r\n PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP: 'fileNoAllwDnD',\r\n PROPERTY_DOCUMENT_NO_SHOW_MODAL: 'fileDntShwDocMdlOnDrop',\r\n PROPERTY_DOCUMENT_SHOW_DESC: 'fileShowDesc',\r\n PROPERTY_DOCUMENT_DEFAULT_FOLDER: 'fileDefFolder',\r\n PROPERTY_DOCUMENT_ROOT_FOLDER: 'fileRootFolder',\r\n PROPERTY_DOCUMENT_EXP_DATE: 'fileExpDate',\r\n PROPERTY_DOCUMENT_DNT_SHW_DOC_MON: 'fileNotShowDocMon',\r\n PROPERTY_DOCUMENT_COLLAPSE_PERM: 'fileCollapsePermission',\r\n PROPERTY_DOCUMENT_COLLAPSE_META: 'fileCollapseMetadata',\r\n PROPERTY_DOCUMENT_COLLAPSE_FLD_STC: 'fileCollapseFldStrc',\r\n} as const;\r\n\r\nexport default fieldProps;\r\n","const formProps = {\r\n FUNC_LOAD: 'onload',\r\n FUNC_RELOAD: 'onreload',\r\n PROPERTY_FORM_INVISIBLE: 'frmInvisible',\r\n PROPERTY_FORM_HIDDEN: 'frmHidden',\r\n PROPERTY_FORM_CLOSED: 'prpFrmClosed',\r\n PROPERTY_FORM_TAB: 'frmTab',\r\n PROPERTY_FORM_HIGHLIGHT: 'frmHighlight',\r\n PROPERTY_FORM_DONT_FIRE: 'frmDontFire',\r\n PROPERTY_FORM_READONLY: 'readOnly',\r\n SIGNABLE_FORM: 'signableForm',\r\n MARKED_TO_SIGN: 'markedToSign',\r\n REQUIRED_SIGN: 'requiredSignableForm',\r\n LANGUAGES: 'langs',\r\n} as const;\r\n\r\nexport default formProps;\r\n","import fieldProps from '../fieldProps';\r\nimport formProps from '../formProps';\r\n\r\nconst FormBoolProps = [\r\n formProps.PROPERTY_FORM_INVISIBLE,\r\n formProps.PROPERTY_FORM_HIDDEN,\r\n formProps.PROPERTY_FORM_CLOSED,\r\n formProps.PROPERTY_FORM_TAB,\r\n formProps.PROPERTY_FORM_HIGHLIGHT,\r\n formProps.PROPERTY_FORM_DONT_FIRE,\r\n formProps.PROPERTY_FORM_READONLY,\r\n formProps.SIGNABLE_FORM,\r\n formProps.MARKED_TO_SIGN,\r\n formProps.REQUIRED_SIGN,\r\n];\r\n\r\nconst FieldBoolProps = [\r\n fieldProps.PROPERTY_ALLOW_EDITION,\r\n fieldProps.PROPERTY_CHECKED,\r\n fieldProps.PROPERTY_DISABLED,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_FLD_STC,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_META,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_PERM,\r\n fieldProps.PROPERTY_DOCUMENT_DNT_SHW_DOC_MON,\r\n fieldProps.PROPERTY_DOCUMENT_EXP_DATE,\r\n fieldProps.PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP,\r\n fieldProps.PROPERTY_DOCUMENT_NO_SHOW_MODAL,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_DESC,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR,\r\n fieldProps.PROPERTY_FILE_PREVIEW,\r\n fieldProps.PROPERTY_GRID_ALTER_IN_LAST_PAGE,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_ADD,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_DEL,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_INCLUDE,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_ORDER,\r\n fieldProps.PROPERTY_HIDE_DOC_DOWNLOAD,\r\n fieldProps.PROPERTY_HIDE_DOC_ERASE,\r\n fieldProps.PROPERTY_HIDE_DOC_LOCK,\r\n fieldProps.PROPERTY_HIDE_DOC_METADATA,\r\n fieldProps.PROPERTY_HIDE_DOC_PERMISSIONS,\r\n fieldProps.PROPERTY_HIDE_DOC_SIGN,\r\n fieldProps.PROPERTY_HIDE_DOC_UPLOAD,\r\n fieldProps.PROPERTY_HIDE_GRID_BTN,\r\n fieldProps.PROPERTY_INCLUDE_FIRST_ROW,\r\n fieldProps.PROPERTY_INPUT_AS_TEXT,\r\n fieldProps.PROPERTY_MODAL_DISABLED,\r\n fieldProps.PROPERTY_MULTISELECT,\r\n fieldProps.PROPERTY_NO_DOWNLOAD,\r\n fieldProps.PROPERTY_NO_ERASE,\r\n fieldProps.PROPERTY_NO_LOCK,\r\n fieldProps.PROPERTY_NO_MODIFY,\r\n fieldProps.PROPERTY_NOT_PRINT,\r\n fieldProps.PROPERTY_PAGED_GRID,\r\n fieldProps.PROPERTY_READONLY,\r\n fieldProps.PROPERTY_REQUIRED,\r\n fieldProps.PROPERTY_SEL_PARENT,\r\n fieldProps.PROPERTY_SHOW_TOOLTIP_AS_HELP,\r\n fieldProps.PROPERTY_SIGNATURE_REQUIRED,\r\n fieldProps.PROPERTY_STORE_MODAL_QUERY_RESULT,\r\n fieldProps.PROPERTY_TRANSIENT,\r\n fieldProps.PROPERTY_TRANSLATION_REQUIRED,\r\n fieldProps.PROPERTY_VISIBILITY_HIDDEN,\r\n];\r\n\r\nconst BoolProps: string[] = [...FieldBoolProps, ...FormBoolProps];\r\nexport default BoolProps;\r\n","import fieldProps from '../fieldProps';\r\n\r\nconst NumProps: string[] = [\r\n fieldProps.PROPERTY_SIZE,\r\n fieldProps.PROPERTY_ROWS,\r\n fieldProps.PROPERTY_COLSPAN,\r\n fieldProps.PROPERTY_ROWSPAN,\r\n fieldProps.PROPERTY_PAGED_GRID_SIZE,\r\n fieldProps.PROPERTY_GRID_HEIGHT,\r\n fieldProps.PROPERTY_MAX_REG_GRID,\r\n];\r\n\r\nexport default NumProps;\r\n","import xml2js, { ParserOptions } from 'xml2js';\r\nimport he from 'he';\r\nimport { parseBooleans, parseNumbers } from 'xml2js/lib/processors';\r\nimport {\r\n TApiaFieldPropsObj,\r\n TFieldScriptEvents,\r\n TFieldServerEvents,\r\n TMap,\r\n} from '@apia/util';\r\nimport BoolProps from '../../main/Execution/FormsExecution/constants/props/booleanProps';\r\nimport NumProps from '../../main/Execution/FormsExecution/constants/props/numberProps';\r\nimport { InvalidSessionException } from '../api/apiaApi';\r\n\r\n// get JS object from string\r\nconst jsonDecode = (string: string): TMap<string | boolean | number> => {\r\n if (!string || typeof string !== 'string') return {};\r\n // remove eol enters\r\n const str = string.replace(/\\n|\\r/g, '');\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return eval(`(${str})`);\r\n};\r\n\r\n// get boolean value from string values\r\nconst parseBool = (val: string | null): boolean => {\r\n if (typeof val === 'string') {\r\n if (/^(?:true|T|t|1|1,00)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0|0,00|null)$/i.test(val)) return false;\r\n }\r\n return false;\r\n};\r\n\r\ntype TFieldProps = TMap<string | boolean | number>;\r\ntype TFieldValueProps = (string | boolean | number)[];\r\ntype TFieldParsedProps = TMap<string | boolean | number>;\r\n\r\nexport type TParseXmlBehavior = {\r\n avoidTrimXml?: boolean;\r\n avoidNormalize?: boolean;\r\n};\r\n\r\n// parse XML properties of Field element\r\nconst parseFieldPropertiesObj = (props: TFieldProps): TFieldParsedProps => {\r\n // default values for missing props can go here below in response.\r\n const response: TFieldParsedProps = {};\r\n const objKeys: string[] = Object.keys(props);\r\n const objVal: TFieldValueProps = Object.values(props);\r\n for (let i = 0; i < objKeys.length; i += 1) {\r\n const key = objKeys[i];\r\n if (BoolProps.indexOf(key) === -1 && NumProps.indexOf(key) === -1) {\r\n response[key] = objVal[i] || '';\r\n } else if (typeof objVal[i] === 'number') {\r\n response[key] = objVal[i];\r\n } else if (BoolProps.indexOf(key) !== -1) {\r\n response[key] = parseBool(objVal[i] as string);\r\n } else if (NumProps.indexOf(key) !== -1) {\r\n response[key] = parseInt((objVal[i] as string) || '', 10);\r\n }\r\n }\r\n return response;\r\n};\r\n\r\nconst processAjaxEventTagNames = (name: string): string => {\r\n if (name === 'a') return 'form';\r\n if (name === 'b') return 'field';\r\n if (name === 'g') return 'possibleValues';\r\n if (name === 'h') return 'item';\r\n if (name === 'z') return 'focusTo';\r\n if (name === 'r') return 'reload';\r\n if (name === 'p') return 'proccess';\r\n if (name === 'd') return 'valueAttr';\r\n return name;\r\n};\r\n\r\nconst processAjaxEventAttrNames = (name: string): string => {\r\n if (name === 't') return 'text';\r\n if (name === 'label') return 'LABEL';\r\n return name;\r\n};\r\n\r\nconst processAjaxEventResponse = <T>(value: T, _name: string): boolean | T => {\r\n return value;\r\n};\r\nfunction htmlToText(html: string) {\r\n const safe = html.replace(/</g, '<');\r\n return he.decode(safe);\r\n}\r\n\r\nconst processStringObj = (\r\n value: string,\r\n key: string,\r\n):\r\n | TApiaFieldPropsObj\r\n | string\r\n | number\r\n | TFieldScriptEvents\r\n | TFieldServerEvents => {\r\n if (key === 'properties') {\r\n return parseFieldPropertiesObj(jsonDecode(value)) as TApiaFieldPropsObj;\r\n }\r\n if (key === 'scriptEvents') {\r\n return JSON.parse(value) as TFieldScriptEvents;\r\n }\r\n if (key === 'serverEvents') {\r\n return JSON.parse(value) as TFieldServerEvents;\r\n }\r\n if (key === 'gridXml') {\r\n return parseXml(he.decode(value).replaceAll('&', '&'));\r\n }\r\n if (key === 'value' && typeof value === 'number' && Number.isNaN(value)) {\r\n return '';\r\n }\r\n if (key === 'valueType' && typeof value === 'string' && value === 'null') {\r\n return '';\r\n }\r\n if (\r\n (key === 'cols' ||\r\n key === 'rows' ||\r\n key === 'x' ||\r\n key === 'y' ||\r\n key === 'length') &&\r\n typeof value === 'string'\r\n ) {\r\n return parseNumbers(value);\r\n }\r\n\r\n return value.match?.(/[&]/) ? htmlToText(value) : value;\r\n};\r\n\r\nfunction replaceLabelHtmlValues(o: object) {\r\n for (const [key, value] of Object.entries(o)) {\r\n if (typeof value === 'object' && value) {\r\n (o as any)[key] = replaceLabelHtmlValues(value);\r\n } else if (typeof value === 'string' && value.match(/&/)) {\r\n if ((o as any).fieldType === 'editor') {\r\n (o as any)[key] = htmlToText(value);\r\n } else {\r\n (o as any)[key] = htmlToText(value);\r\n }\r\n }\r\n }\r\n return o;\r\n}\r\nexport const asyncGetJSObjfromXML = async <T>(xml: string): Promise<T> => {\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'label',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n const result = await new Promise<T>((resolve, reject) => {\r\n parser.parseString(xml, (err: Error | null, innerResult: T) => {\r\n if (err) reject(err);\r\n else {\r\n resolve(\r\n typeof innerResult === 'object' && innerResult\r\n ? (replaceLabelHtmlValues(innerResult) as any)\r\n : innerResult,\r\n );\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport const parseXml = <T = Record<string, unknown>>(\r\n xml: XMLDocument | string,\r\n behaveConfig?: TParseXmlBehavior,\r\n): T => {\r\n let objJS;\r\n\r\n if (typeof xml === 'object' && !(xml instanceof XMLDocument)) {\r\n return xml;\r\n }\r\n\r\n const parser = new xml2js.Parser({\r\n trim: !behaveConfig?.avoidTrimXml,\r\n normalize: !behaveConfig?.avoidNormalize,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'label',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n parser.parseString(\r\n xml,\r\n (err: Error | null, result: Record<string, unknown>) => {\r\n if (err) {\r\n console.warn('Error Parsing XML data', err);\r\n objJS = err;\r\n } else {\r\n if (result?.code === '-1' && result.exceptions) {\r\n throw new InvalidSessionException();\r\n }\r\n objJS = result;\r\n }\r\n },\r\n );\r\n if (objJS) {\r\n return typeof objJS === 'object' && objJS\r\n ? (replaceLabelHtmlValues(objJS) as any)\r\n : objJS;\r\n }\r\n return {} as T;\r\n};\r\n","import type { Execution } from '../../main/Execution';\r\n\r\nexport function getWindow(execution: Execution) {\r\n return execution.environment.window;\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\n\r\nexport enum ExecutionState {\r\n RUNNING,\r\n LOADING,\r\n FINISHED,\r\n RENDERING,\r\n CONFIRMING,\r\n FINISHED_WITH_ERROR,\r\n}\r\n\r\nexport type TOnClose =\r\n | 'clearEvalPath'\r\n | 'confirmOkOnClose'\r\n | 'confirmOkOnCloseSplash'\r\n | 'confirmOkOnSaveSplash'\r\n | 'releaseOkOnClose'\r\n | null;\r\n\r\nexport type TErrMessage = {\r\n message: {\r\n text: string;\r\n label?: string;\r\n };\r\n};\r\nexport type TFetchTaskActionResponse = {\r\n onClose?: TOnClose;\r\n sysMessages?: TErrMessage;\r\n sysExceptions?: TErrMessage;\r\n type?: string;\r\n actions?: {\r\n action: {\r\n param: string[];\r\n toDo: string;\r\n };\r\n };\r\n load?: {\r\n canClose: boolean;\r\n type: string;\r\n text: {\r\n label: string;\r\n closeAll: boolean;\r\n addClass?: string;\r\n title?: string;\r\n };\r\n };\r\n text?: {\r\n title?: string;\r\n label?: string;\r\n };\r\n};\r\n\r\nexport type TConfirmResponse = {\r\n onClose: string;\r\n pathSelection?: boolean | null;\r\n groupSelection?: boolean | null;\r\n load?: TApiaLoadForm & {\r\n type: 'form' | 'text' | 'table' | 'function';\r\n canClose: boolean;\r\n text?: {\r\n closeAll: string;\r\n title: string;\r\n addClass: string;\r\n label: string;\r\n };\r\n };\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: [number, string];\r\n };\r\n };\r\n};\r\n\r\n/*\r\n{\r\n \"onClose\": \"\",\r\n \"load\": {\r\n \"canClose\": false,\r\n \"type\": \"text\",\r\n \"text\": {\r\n \"closeAll\": false,\r\n \"title\": \"\",\r\n \"addClass\": \"success\",\r\n \"text\": \"Operación completa. Cargando el listado.\"\r\n }\r\n },\r\n \"actions\": {\r\n \"action\": {\r\n \"toDo\": \"linkTimed\",\r\n \"param\": [\r\n {\r\n \"text\": \"1000\"\r\n },\r\n {\r\n \"text\": \"/apia.execution.EntInstanceListAction.run?action=list&tabId=174949147885442422&tokenId=1749490825179\"\r\n }\r\n ]\r\n }\r\n },\r\n \"canClose\": false,\r\n \"type\": \"text\",\r\n \"text\": {\r\n \"closeAll\": false,\r\n \"title\": \"\",\r\n \"addClass\": \"success\",\r\n \"text\": \"Operación completa. Cargando el listado.\"\r\n }\r\n}\r\n*/\r\n\r\nexport type TConfirmEntityResponse = {\r\n onClose: string;\r\n load?: TApiaLoadForm & {\r\n type: 'form' | 'text' | 'table' | 'function';\r\n canClose: boolean;\r\n text?: {\r\n closeAll: string;\r\n title: string;\r\n addClass: string;\r\n label?: string;\r\n };\r\n };\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: string[];\r\n };\r\n };\r\n};\r\n","import { AxiosError, type AxiosResponse } from 'axios';\r\nimport { MessageNotification } from '../../main/Notifications/MessageNotification';\r\nimport {\r\n IApiaApiPostConfig,\r\n IApiaApiRequestConfig,\r\n TApiaApiAxiosResponse,\r\n TApiaApiResult,\r\n TApiaMessage,\r\n TApiaSystemMessageObj,\r\n} from './types';\r\nimport { NotificationType } from '../../main/Notifications/Notification';\r\nimport { parseXml } from '../xml/parseXml';\r\nimport type { IStringifyOptions } from 'qs';\r\nimport QueryString from 'qs';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { getWindow } from '../dom/getWindow';\r\nimport { type Execution } from '../../main/Execution';\r\nimport { ExecutionState } from '../../main/Execution/types';\r\n\r\ndeclare global {\r\n interface Window {\r\n [key: string]: string;\r\n }\r\n\r\n interface Document {\r\n headers: any;\r\n }\r\n}\r\n\r\nfunction dispatchMessage(\r\n execution: Execution,\r\n type: NotificationType,\r\n message: TApiaMessage,\r\n) {\r\n const definedType = message.type;\r\n const actualType = [null, 'success', 'warning', 'error'][\r\n definedType || 0\r\n ] as NotificationType;\r\n\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: message.text!,\r\n stackTrace: message.label,\r\n title: message.title,\r\n type: actualType || type,\r\n }),\r\n );\r\n}\r\n\r\nfunction getAxios() {\r\n return import('axios').then((r) =>\r\n typeof process !== 'undefined' &&\r\n process.env?.APIA_SERVER &&\r\n process.env?.CONTEXT\r\n ? r.default.create({\r\n baseURL: process?.env?.APIA_SERVER.replaceAll(\r\n process.env.CONTEXT as string,\r\n '',\r\n ),\r\n })\r\n : r.default,\r\n );\r\n}\r\n\r\nconst handleWrongResponse = (execution: Execution, error: Error) => {\r\n if (\r\n error instanceof InvalidSessionException ||\r\n (error instanceof AxiosError && error.status === 403)\r\n ) {\r\n execution.kill();\r\n throw new InvalidSessionException();\r\n }\r\n\r\n let errorMessage: string;\r\n if (typeof error !== 'string') {\r\n if (error.message) errorMessage = error.message;\r\n else errorMessage = error.toString();\r\n } else errorMessage = error;\r\n\r\n execution.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: errorMessage.replaceAll('AxiosError', 'Error'),\r\n }),\r\n );\r\n};\r\n\r\nexport function isJsonResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match('application/json');\r\n}\r\nexport function isXmlResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match(\r\n /(?:application|text)?\\/xml/,\r\n );\r\n}\r\nexport function isHtmlResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match(\r\n /(?:application|text)?\\/html/,\r\n );\r\n}\r\n\r\nexport function parseMessages(\r\n execution: Execution,\r\n response: TApiaSystemMessageObj,\r\n) {\r\n if (!response) return;\r\n const { exceptions, sysMessages, sysExceptions } = response;\r\n arrayOrArray(exceptions?.exception).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'error'),\r\n );\r\n arrayOrArray(sysMessages?.message).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'warning'),\r\n );\r\n arrayOrArray(sysExceptions?.exception).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'error'),\r\n );\r\n}\r\n\r\nasync function handleResponse<\r\n LoadType extends Record<string, unknown>,\r\n DataType = unknown,\r\n>(\r\n execution: Execution,\r\n result: AxiosResponse<string> | void,\r\n behaveConfig?: IApiaApiPostConfig<DataType>,\r\n): Promise<TApiaApiAxiosResponse<LoadType> | null> {\r\n try {\r\n if (!result || result.data === undefined) {\r\n //\r\n } else {\r\n const parsedResponse = await parseSuccessfulResponse<LoadType>(\r\n execution,\r\n result,\r\n behaveConfig,\r\n );\r\n\r\n return {\r\n ...result,\r\n data: parsedResponse,\r\n hasError:\r\n !!parsedResponse?.exceptions || !!parsedResponse?.sysExceptions,\r\n hasMessages: !!parsedResponse?.sysMessages,\r\n };\r\n }\r\n } catch (e: unknown) {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n return null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport class InvalidSessionException extends Error {}\r\n\r\nexport const parseSuccessfulResponse = async <\r\n LoadType extends Record<string, unknown>,\r\n DataType = unknown,\r\n>(\r\n execution: Execution,\r\n response: AxiosResponse<string>,\r\n behaveConfig?: IApiaApiPostConfig<DataType>,\r\n) => {\r\n let parsedObj: TApiaSystemMessageObj<LoadType> | void | undefined = undefined;\r\n if (isJsonResponse(response)) {\r\n if (typeof response.data === 'string')\r\n parsedObj = JSON.parse(\r\n response.data.trim(),\r\n ) as TApiaSystemMessageObj<LoadType> | void;\r\n else if (typeof response.data === 'object' && response.data)\r\n parsedObj = response.data;\r\n } else if (isXmlResponse(response)) {\r\n try {\r\n parsedObj = parseXml<LoadType>(response.data, behaveConfig);\r\n } catch (e) {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n }\r\n } else if (isHtmlResponse(response)) {\r\n console.error(\r\n 'El contenido devuelto es Html, no se esperaba esa respuesta',\r\n );\r\n return null;\r\n }\r\n\r\n if (parsedObj) {\r\n const {\r\n actions,\r\n onClose,\r\n exceptions,\r\n sysExceptions,\r\n sysMessages,\r\n load,\r\n ...rest\r\n } = parsedObj; // Session handling\r\n if (rest.code === '-1' && exceptions) {\r\n throw new InvalidSessionException();\r\n }\r\n\r\n parseMessages(execution, { exceptions, sysExceptions, sysMessages });\r\n\r\n if (load) {\r\n return { ...parsedObj, ...load, ...(rest as LoadType) };\r\n }\r\n return {\r\n actions,\r\n onClose,\r\n exceptions,\r\n sysExceptions,\r\n sysMessages,\r\n ...(rest as LoadType),\r\n };\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* IMPORTANT!! The ApiaApi is programmed under the slogan that\r\n * **should never throw an exception**. **Errors** coming from\r\n * connectivity or exceptions on the server **will be handled\r\n * automatically** by ApiaApi, using the notification system\r\n * of the application. It is possible to determine in what context they should\r\n * be thrown those exceptions (global, main, modal) using the\r\n * alertsCategory configuration properties **(see errorsHandling.md)**.\r\n *\r\n * @param url String, the url you want to call\r\n * @param config interface IApiaApiRequestConfig<DataType>;\r\n *\r\n * @throws Nothing\r\n *\r\n * @example\r\n *\r\n * ApiaApi.post<ResponseType>('url...', {\r\n axiosConfig?: AxiosRequestConfig;\r\n\r\n // Configuración de postData\r\n postData? unknown;\r\n postDataTreatement?: 'stringify' | undefined;\r\n\r\n // Configuración de queryString\r\n queryData?: string | Record<string, unknown>;\r\n stringifyOptions?: QueryString.IStringifyOptions;\r\n\r\n // Response validator,\r\n // If it returns true, everything continues correctly\r\n // If it returns false, the ApiaApi throws a standard error.\r\n // If it returns string, ApiaApi throws the error returned in the string.\r\n validateResponse?: (\r\n response: AxiosResponse<DataType | null>,\r\n ) => boolean | string;\r\n\r\n // Configuración de alertas\r\n alertsImportance?: TAlertImportance;\r\n\r\n // Configuración de ApiaApiHandler, falta documentar\r\n handleLoad?: boolean;\r\n eventsHandler?: IEventsHandler;\r\n\r\n // other configuration\r\n colors?: TColors;\r\n debug?: boolean;\r\n }\r\n * @returns The type of the return value depends on the type passed when calling the function. If there was an error it returns null.\r\n */\r\nexport async function post<\r\n LoadType extends Record<string, unknown> = Record<string, unknown>,\r\n DataType = unknown,\r\n T = unknown,\r\n>(\r\n execution: Execution,\r\n actualUrl: string,\r\n behaveConfig?: IApiaApiPostConfig<DataType>,\r\n): TApiaApiResult<LoadType> {\r\n if (\r\n execution.state.executionState === ExecutionState.FINISHED &&\r\n !behaveConfig?.allowAfterFinish\r\n ) {\r\n throw new Error('Cannot perform requests after execution has finished');\r\n }\r\n\r\n const postData =\r\n behaveConfig?.postDataTreatment === 'stringify'\r\n ? QueryString.stringify(\r\n behaveConfig.postData,\r\n behaveConfig.stringifyOptions,\r\n )\r\n : behaveConfig?.postData;\r\n\r\n const response = await (await getAxios())\r\n .post<\r\n T,\r\n AxiosResponse<string>,\r\n DataType | string\r\n >(actualUrl, postData, { ...behaveConfig?.axiosConfig, headers: { ...behaveConfig?.axiosConfig?.headers, ...execution.environment.headers } })\r\n .catch((e: unknown) => {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n });\r\n\r\n if (response) {\r\n const result = handleResponse<LoadType>(execution, response, behaveConfig);\r\n return result;\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * IMPORTANTE!! El ApiaApi está programado bajo la consigna de que\r\n * **no debe tirar núnca una excepción**. **Los errores** provenientes\r\n * de la conectividad o de excepciones en el servidor **serán manejados\r\n * automáticamente** por el ApiaApi utilizando el sistema de notificaciones\r\n * de la aplicación. Es posible determinar en qué contexto deben\r\n * ser lanzadas esas excepciones (global, main, modal) utilizando las\r\n * propiedades de configuración alertsCategory **(ver errorsHandling.md)**.\r\n *\r\n * @param url String, el url al que se desea llamar\r\n * @param config interface IApiaApiRequestConfig<DataType>;\r\n *\r\n * @throws Nothing\r\n *\r\n * @example\r\n *\r\n * ApiaApi.get<TipoDeRespuesta>('url...', {\r\n axiosConfig?: AxiosRequestConfig;\r\n\r\n // Configuración de queryString\r\n queryData?: string | Record<string, unknown>;\r\n stringifyOptions?: QueryString.IStringifyOptions;\r\n\r\n // Validador de respuesta,\r\n // Si devuelve true, todo sigue correctamente\r\n // Si devuelve false, el ApiaApi tira un error estándar.\r\n // Si devuelve string, el ApiaApi tira el error devuelto en el string.\r\n validateResponse?: (\r\n response: AxiosResponse<DataType | null>,\r\n ) => boolean | string;\r\n\r\n // Configuración de alertas\r\n alertsImportance?: TAlertImportance;\r\n\r\n // Configuración de ApiaApiHandler, falta documentar\r\n handleLoad?: boolean;\r\n eventsHandler?: IEventsHandler;\r\n\r\n // Otra configuración\r\n colors?: TColors;\r\n debug?: boolean;\r\n }\r\n * @returns El tipo del valor devuelto depende del tipo pasado al llamar a la función. Si hubo un error devuelve null\r\n */\r\nexport async function get<\r\n LoadType extends Record<string, unknown> = Record<string, unknown>,\r\n T = unknown,\r\n D = unknown,\r\n>(\r\n execution: Execution,\r\n actualUrl: string,\r\n behaveConfig?: IApiaApiRequestConfig,\r\n): TApiaApiResult<LoadType> {\r\n if (execution.state.executionState === ExecutionState.FINISHED) {\r\n throw new Error('Cannot perform requests after execution has finished');\r\n }\r\n\r\n const response = await (await getAxios())\r\n .get<\r\n T,\r\n AxiosResponse<string>,\r\n D\r\n >(actualUrl, { ...behaveConfig?.axiosConfig, headers: { ...behaveConfig?.axiosConfig?.headers, ...execution.environment.headers } })\r\n .catch((e: unknown) => {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n });\r\n if (response) {\r\n const result = await handleResponse<LoadType>(execution, response);\r\n return result;\r\n }\r\n return null;\r\n}\r\n\r\nexport type MakeApiaUrlProps = {\r\n action?: string;\r\n ajaxUrl?: string;\r\n queryString?: string;\r\n stringifyOptions?: IStringifyOptions;\r\n tabId?: string | number;\r\n preventAsXmlParameter?: boolean;\r\n avoidTabId?: boolean;\r\n [key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Creates an url based on the general requirements of Apia.\r\n * If the ajaxUrl property is not passed, it will use the\r\n * getWindow(execution).URL_REQUEST_AJAX. Its use is very simple, just pass the objects you\r\n * want to appear in the query string.\r\n *\r\n * @example makeApiaUrl({\r\n * ajaxUrl: 'the.endpoint.you.want',\r\n * queryString: 'an=existent&query=string',\r\n * action: 'theAction',\r\n * anotherProp: 15\r\n * })\r\n *\r\n * @returns the well formed url, in the example, the response url is:\r\n * /context/the.endpoint.you.want?an=existent&query=string&anotherProp=15&tabId=...&tokenId=...&action=theAction\r\n */\r\nexport function makeApiaUrl(execution: Execution, props?: MakeApiaUrlProps) {\r\n let actualQueryData: Record<string, unknown> | unknown = {};\r\n\r\n if (props) {\r\n const {\r\n ajaxUrl,\r\n queryString,\r\n stringifyOptions,\r\n shouldAvoidTabId,\r\n preventAsXmlParameter,\r\n avoidTabId,\r\n tabId: outerTabId,\r\n ...rest\r\n } = props;\r\n actualQueryData = { ...rest };\r\n }\r\n\r\n const queryString = QueryString.stringify(\r\n actualQueryData,\r\n props?.stringifyOptions ?? {\r\n arrayFormat: 'repeat',\r\n encodeValuesOnly: false,\r\n },\r\n );\r\n\r\n let actualAjaxUrl = props?.ajaxUrl ?? getWindow(execution).URL_REQUEST_AJAX;\r\n if (actualAjaxUrl.indexOf('?') === actualAjaxUrl.length - 1) {\r\n actualAjaxUrl = actualAjaxUrl.slice(0, actualAjaxUrl.length - 1);\r\n }\r\n if (!actualAjaxUrl.startsWith('/')) {\r\n actualAjaxUrl = `/${actualAjaxUrl}`;\r\n }\r\n\r\n const match = getWindow(execution)?.TAB_ID_REQUEST?.match(/tokenId=(\\w+)/);\r\n const currentTokenId = (match ?? [])[1];\r\n\r\n let tabId = (\r\n props?.tabId\r\n ? `&tabId=${props.tabId}&tokenId=${currentTokenId}`\r\n : getWindow(execution).TAB_ID_REQUEST\r\n ).slice(1);\r\n if (props?.avoidTabId) {\r\n tabId = '';\r\n }\r\n\r\n let { CONTEXT } = getWindow(execution);\r\n if (CONTEXT?.endsWith('/')) {\r\n CONTEXT += CONTEXT.slice(0, CONTEXT.length - 1);\r\n }\r\n\r\n let timestamp = `timestamp=${Date.now()}&`;\r\n if (\r\n (props?.queryString && props.queryString.includes('timestamp=')) ||\r\n queryString?.includes('timestamp=')\r\n ) {\r\n timestamp = '';\r\n }\r\n\r\n const contextWord = CONTEXT.replace(/^\\/?(.+?)\\/?$/, '$1');\r\n actualAjaxUrl = actualAjaxUrl.match(\r\n new RegExp(`^(?:(?:/?${contextWord})?/)?(.+)$`),\r\n )?.[1] as string;\r\n\r\n return `${\r\n contextWord ? '/' : ''\r\n }${contextWord}/${actualAjaxUrl}?${timestamp}${\r\n !props?.preventAsXmlParameter ? 'asXml=true&' : ''\r\n }${props?.queryString ? `${props.queryString}&` : ''}${\r\n queryString ? `${queryString}&` : ''\r\n }${tabId}`;\r\n}\r\n","import { Callback, Callbacks, Map, UnSubscriber } from './types';\r\n\r\nexport type { Callback, Map, UnSubscriber } from './types';\r\n\r\n/**\r\n * @public\r\n *\r\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\r\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\r\n *\r\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class EventEmitter<Events extends Map> {\r\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\r\n on: {} as Callbacks<Events>,\r\n once: {} as Callbacks<Events>,\r\n };\r\n protected enabled = true;\r\n\r\n protected debugMode = false;\r\n debug(enable = true) {\r\n this.debugMode = enable;\r\n }\r\n\r\n /**\r\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\r\n *\r\n * @param event - The event name to emit.\r\n * @param data - The data associated with the event. Its type is dependent on the event name.\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]) {\r\n this.callbacks.on[event]?.forEach((current) => current(data));\r\n\r\n this.callbacks.once[event]?.forEach((current) => current(data));\r\n this.callbacks.once[event] = [];\r\n }\r\n\r\n /**\r\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\r\n */\r\n get isEnabled() {\r\n return this.enabled;\r\n }\r\n\r\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\r\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\r\n *\r\n * @param event - The event name to listen to.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\r\n this.callbacks.on[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.on[event] = this.callbacks.on[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\r\n *\r\n * @param event - The event name to listen to for a single occurrence.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\r\n this.callbacks.once[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.once[event] = this.callbacks.once[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n}\r\n","import { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\r\nimport { SetStateAction } from './types';\r\n\r\ntype Setter<T> = (prevState: T) => T;\r\n\r\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\r\n return typeof data === 'function';\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\ntype EmitterState<Events extends Map> = {\r\n [K in keyof Events]: Events[K];\r\n};\r\n\r\n/**\r\n * Extends EventEmitter to manage and emit events with state persistence.\r\n * This class allows emitting and listening to typed events while also keeping\r\n * a state that can be accessed synchronously for each event.\r\n *\r\n * @param initialState - If given will be passed to subscriptions\r\n *\r\n * @template Events - A mapping of event names to their associated data types.\r\n * @extends EventEmitter<Events>\r\n */\r\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\r\n protected state = {} as EmitterState<Events>;\r\n\r\n constructor(initialState?: Partial<Events>) {\r\n super();\r\n\r\n this.state = Object.assign({}, initialState) as Events;\r\n }\r\n\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n this.state[event] = data;\r\n super.emit(event, data);\r\n }\r\n\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (this.state[event]) cb(this.state[event]);\r\n\r\n return super.on(event, cb);\r\n }\r\n\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (this.state[event]) {\r\n cb(this.state[event]);\r\n\r\n /**\r\n * Given that the information has already been sent, the subscription is not necessary\r\n */\r\n return () => {};\r\n }\r\n\r\n return super.once(event, cb);\r\n }\r\n\r\n /**\r\n * Retrieves the stored state for a given event\r\n */\r\n getState<K extends keyof Events>(event: K): Events[K] {\r\n return this.state[event];\r\n }\r\n\r\n /**\r\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\r\n */\r\n setState<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.emit(event, actualData);\r\n }\r\n}\r\n","import { Map } from './EventEmitter';\r\nimport { StatefulEmitter, isSetter } from './StatefulEmitter';\r\nimport { SetStateAction } from './types';\r\n\r\ntype BouncingMap<Events extends Map> = {\r\n [K in keyof Events]: number;\r\n};\r\n\r\nconst NullObject = Symbol('NullObject');\r\n\r\ntype ThrottlingMap<Events extends Map> = {\r\n [K in keyof Events]: Events[K] | typeof NullObject;\r\n};\r\n\r\ntype ThrottlingMarkers<Events extends Map> = {\r\n [K in keyof Events]: boolean;\r\n};\r\n\r\nexport type DebounceOptions = Partial<{ timing: number }>;\r\n\r\nexport type ThrottleOptions = Partial<{\r\n emitOnStart?: boolean;\r\n timing: number;\r\n}>;\r\n\r\n/**\r\n * @public\r\n *\r\n * The BouncingEmitter class is an extension of EventEmitter which adds debouncing and throttling functionality.\r\n *\r\n * @typeParam — Events - An extension of Map where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class BouncingEmitter<\r\n Events extends Map,\r\n> extends StatefulEmitter<Events> {\r\n protected bouncingTimeouts = {} as BouncingMap<Events>;\r\n\r\n protected defaultTiming = 100;\r\n\r\n /**\r\n * Debounces a event emit with until there is no call to the emit methods by (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * _____________________E\r\n */\r\n debounce<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: DebounceOptions,\r\n ) {\r\n clearTimeout(this.bouncingTimeouts[event]);\r\n this.bouncingTimeouts[event] = setTimeout(() => {\r\n this.emit(event, data);\r\n }, configuration?.timing ?? this.defaultTiming) as unknown as number;\r\n }\r\n\r\n /**\r\n * Throttles a event emit with the warranty that the data will be emitted at most every (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * ____E____E____E______E\r\n *\r\n * @param configuration.emitOnStart - Emits an event on the first call to throttle when no pending throttle is stored. **If emitOnStart is true and an only call to throttle is made, it will emit an only event.**\r\n */\r\n\r\n protected throttleData = {} as ThrottlingMap<Events>;\r\n protected throttleEmittedOnInit = {} as ThrottlingMarkers<Events>;\r\n throttle<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: ThrottleOptions,\r\n ) {\r\n if (!this.throttleEmittedOnInit[event] && configuration?.emitOnStart) {\r\n this.throttleEmittedOnInit[event] = true;\r\n setTimeout(() => {\r\n this.throttleEmittedOnInit[event] = false;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n this.emit(event, data);\r\n } else if (!configuration?.emitOnStart) {\r\n if (\r\n this.throttleData[event] === NullObject ||\r\n !(event in this.throttleData)\r\n ) {\r\n setTimeout(() => {\r\n this.emit(event, this.throttleData[event] as Events[K]);\r\n this.throttleData[event] = NullObject;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n }\r\n this.throttleData[event] = data;\r\n }\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and debounce\r\n */\r\n setStateDebounced<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: DebounceOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.debounce(event, actualData, configuration);\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and throttle\r\n */\r\n setStateThrottled<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: ThrottleOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.throttle(event, actualData, configuration);\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\nexport function getLabel(\r\n execution: Execution,\r\n label: string,\r\n replacers?: Partial<{\r\n text: Record<string, string>;\r\n tooltip: Record<string, string>;\r\n }>,\r\n) {\r\n const original = (getWindow(execution) as any).labels[label] as {\r\n text: string;\r\n tooltip: string;\r\n };\r\n\r\n if (!original) {\r\n return {\r\n text: `LblNotPrealoded: ${label}`,\r\n tooltip: `LblNotPrealoded: ${label}`,\r\n };\r\n }\r\n\r\n const labelObject = { ...original };\r\n\r\n if (replacers?.text) {\r\n Object.entries(replacers.text).forEach(([key, value]) => {\r\n labelObject.text = labelObject.text.replaceAll(`<${key}>`, value);\r\n });\r\n }\r\n if (replacers?.tooltip) {\r\n Object.entries(replacers.tooltip).forEach(([key, value]) => {\r\n labelObject.tooltip = labelObject.tooltip.replaceAll(`<${key}>`, value);\r\n });\r\n }\r\n\r\n return labelObject;\r\n}\r\n\r\nexport const labels = {\r\n errorConfirmationFailed: () => 'Error al confirmar',\r\n errorRegexNotValidated: () => 'La expresión regular no fue validada.',\r\n errorCouldNotSync: () => 'No se pudo sincronizar',\r\n errorFieldRequired: (execution: Execution) =>\r\n getLabel(execution, 'msgReqField').text,\r\n errorTranslateRequired: (execution: Execution, lang: string) =>\r\n getLabel(execution, 'lblReqLang', { text: { TOK1: lang } }).text,\r\n errorLoadForms: () =>\r\n 'Error al inicializar los formularios, contacte al administrador.',\r\n errorOnEvent: (execution: Execution, eventName: string) =>\r\n (window as any).SERVER_MODE\r\n ? 'Error al ejecutar la clase de negocios, contacte al administrador.'\r\n : getLabel(execution, 'msgErrorOnEvent', { text: { TOK1: eventName } })\r\n .text,\r\n};\r\n","// get boolean value from string values\r\nexport const parseBoolean = (val: string | null): boolean => {\r\n if (typeof val === 'string') {\r\n if (/^(?:true|T|t|1|1,00)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0|0,00|null)$/i.test(val)) return false;\r\n }\r\n return false;\r\n};\r\n","import BoolProps from '../../main/Execution/FormsExecution/constants/props/booleanProps';\r\nimport NumProps from '../../main/Execution/FormsExecution/constants/props/numberProps';\r\nimport { parseBoolean } from '../dataTypes/parseBoolean';\r\n\r\nconst valueParsers: ((\r\n key: string,\r\n value: unknown,\r\n next: () => void,\r\n) => void | { key: string; value: any })[] = [\r\n (key, value, next) => {\r\n if (BoolProps.indexOf(key) === -1 && NumProps.indexOf(key) === -1) {\r\n return next();\r\n } else if (typeof value === 'number') {\r\n return next();\r\n } else if (BoolProps.indexOf(key) !== -1) {\r\n return { key, value: parseBoolean(value as string) };\r\n } else if (NumProps.indexOf(key) !== -1) {\r\n return { key, value: parseInt((value as string) || '', 10) };\r\n }\r\n next();\r\n },\r\n];\r\n\r\nexport function parseFakeJSON<T extends Record<string, unknown>>(\r\n str: string,\r\n): T {\r\n if (!str) {\r\n return {} as T;\r\n }\r\n\r\n if (typeof str === 'object') {\r\n return str as T;\r\n }\r\n\r\n const res = new Function(`const form = ${str}; return form;`)() as T;\r\n\r\n const ret: T = {} as T;\r\n\r\n for (const [key, value] of Object.entries(res)) {\r\n for (const p of valueParsers) {\r\n let next = false;\r\n const t = p(key, value, () => {\r\n next = true;\r\n });\r\n if (!next && t) {\r\n (ret as any)[t.key] = t.value;\r\n } else {\r\n (ret as any)[key] = value;\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { SetStateAction } from '../../../util/events/types';\r\nimport type { Grid } from './fields';\r\n\r\nexport class WithProperties<Props extends Record<string, any>> {\r\n properties: Props = {} as Props;\r\n private parentGrid: null | Grid = null;\r\n\r\n constructor(initialState?: Props) {\r\n if (initialState) {\r\n this.properties = initialState;\r\n }\r\n makeObservable(this, { properties: observable, setProperty: action });\r\n }\r\n\r\n getParentGrid() {\r\n return this.parentGrid;\r\n }\r\n\r\n getProperty<K extends keyof Props>(propName: K): Props[K] {\r\n return this.properties[propName];\r\n }\r\n setProperty<K extends keyof Props>(\r\n propName: K,\r\n propValue: SetStateAction<Props[K]>,\r\n ) {\r\n const value =\r\n propValue instanceof Function\r\n ? propValue(this.properties[propName])\r\n : propValue;\r\n\r\n this.properties[propName] = value;\r\n\r\n if (propName === 'visibilityHidden') {\r\n this.parentGrid?.refreshColumnsVisibilities();\r\n }\r\n }\r\n\r\n setParentGrid(grid: Grid) {\r\n this.parentGrid = grid;\r\n return this;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\n\r\nexport function getDocument(execution: Execution) {\r\n return execution.environment.document;\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { getDocument } from '../dom/getDocument';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\nexport function getCurrentTabsString(execution: Execution) {\r\n const tabsList = (getWindow(execution).tabsController as any)?.tabsList as {\r\n id: string;\r\n state: { isOpen: boolean };\r\n }[];\r\n\r\n if (tabsList)\r\n return `${tabsList\r\n .map((c) => (c.state.isOpen ? c.id : -1))\r\n .filter((c) => !(typeof c === 'number'))\r\n .join(',')}~${getDocument(execution).scrollingElement?.scrollTop ?? 0}`;\r\n}\r\n","import type { Execution } from '../..';\r\nimport { getCurrentTabsString } from '../../../../util/app/getCurrentTabsString';\r\nimport { getWindow } from '../../../../util/dom/getWindow';\r\n\r\nexport const actions = {\r\n forms: 'apia.execution.FormAction.run',\r\n formSubmit: (execution: Execution) =>\r\n `${getWindow(execution).CONTEXT}/apia.execution.FormAction.run?action=fireFieldEvent¤tTab=${getCurrentTabsString(execution)}${getWindow(execution).TAB_ID_REQUEST}`,\r\n};\r\n","export const eventTypes = {\r\n EVENT_FLD_ONCHANGE: 1,\r\n EVENT_FLD_ONCLICK: 4,\r\n EVENT_FLD_POPULATE: 5,\r\n EVENT_FLD_ONMODALRETURN: 37,\r\n EVENT_FLD_ONMODALCHANGE: 36,\r\n\r\n // Grid Events\r\n EVENT_FLD_GRID_ADD: 60,\r\n EVENT_FLD_GRID_DEL: 61,\r\n EVENT_FLD_GRID_SORT: 62,\r\n EVENT_FLD_GRID_COLUMN_SELECT: 65,\r\n\r\n // Print Events\r\n EVENT_FRM_ONBEFORE_PRINT: 63,\r\n EVENT_FRM_ONAFTER_PRINT: 64,\r\n};\r\n","import fieldProps from './fieldProps';\r\nimport formProps from './formProps';\r\n\r\nconst IProperty = {\r\n ...fieldProps,\r\n ...formProps,\r\n} as const;\r\n\r\nexport default IProperty;\r\n","import IProperty from '../constants/IProperty';\r\nimport { MessageNotification } from '../../../Notifications/MessageNotification';\r\nimport { TFieldAjaxEventResponsePayload } from '../types';\r\nimport { Field } from '../Field';\r\nimport { File, Grid, Select } from '../fields';\r\nimport { parseMessages } from '../../../../util/api/apiaApi';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { TApiaTreeProperties } from '../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type { Execution } from '../../index';\r\n\r\nexport const setAjaxFormResponse = async (\r\n execution: Execution,\r\n response: TFieldAjaxEventResponsePayload,\r\n) => {\r\n const forms = arrayOrArray(response.form);\r\n for (let i = 0; i < forms.length; i += 1) {\r\n const formId = forms[i].i;\r\n const form = forms[i];\r\n const [frmParent, id] = formId.split('_');\r\n const apiaForm = execution.getFormById(id, frmParent as 'E');\r\n\r\n arrayOrArray(form.cusCmp).forEach((c) => {\r\n apiaForm\r\n ?.getCustomComponentByFldId(Number.parseInt(String(c.id)))\r\n ?.processResult({ processResult: { state: c.state } });\r\n });\r\n\r\n /** Refresh the updated grids */\r\n const changedGrids = arrayOrArray(form.changedGrids.grdId);\r\n changedGrids.forEach(({ id }) => {\r\n (apiaForm?.getFieldById(id) as Grid)?.refresh();\r\n });\r\n\r\n if (!apiaForm) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: `Form with id ${formId} not found`,\r\n }),\r\n );\r\n\r\n continue;\r\n }\r\n\r\n // Iterate each field element in form element\r\n const ajaxFields = arrayOrArray(forms[i].field);\r\n for (let f = 0; f < ajaxFields.length; f += 1) {\r\n // got id of field to alter\r\n const apiField = apiaForm?.getFieldById(ajaxFields[f].i) as Field<any>;\r\n if (apiField) {\r\n // set field possible VALUES for select/multi and radio\r\n if (ajaxFields[f].possibleValues !== undefined) {\r\n const possibleValuesItems = arrayOrArray(\r\n ajaxFields[f].possibleValues,\r\n );\r\n const items = arrayOrArray(possibleValuesItems[0]?.item);\r\n if (items) {\r\n if (\r\n ['multiple', 'radio', 'select'].includes(\r\n apiField.definition.fieldType,\r\n )\r\n ) {\r\n (apiField as Select).setProperty(\r\n 'possibleValue',\r\n items.map((current) => {\r\n const v = current.v;\r\n const l = current.text;\r\n const value = typeof v === 'boolean' ? String(v) : v;\r\n const label = typeof l === 'boolean' ? String(l) : l;\r\n return {\r\n value,\r\n label,\r\n };\r\n }),\r\n );\r\n }\r\n }\r\n }\r\n if (\r\n ['tree'].includes(apiField.definition.fieldType) &&\r\n ajaxFields[f].field\r\n ) {\r\n const propertiesObj: TApiaTreeProperties =\r\n ajaxFields[f]?.field?.properties || ({} as TApiaTreeProperties);\r\n\r\n Object.keys(propertiesObj).forEach((key) => {\r\n let value = propertiesObj[key as keyof TApiaTreeProperties];\r\n\r\n if (typeof value === 'string') {\r\n const lowerValue = value.toLowerCase();\r\n if (lowerValue === 't' || lowerValue === 'true') {\r\n value = true;\r\n } else if (lowerValue === 'f' || lowerValue === 'false') {\r\n value = false;\r\n }\r\n }\r\n\r\n apiField.setProperty(key, value);\r\n });\r\n const possibleValues = arrayOrArray(\r\n ajaxFields[f]?.field?.possibleValue,\r\n );\r\n apiField.setProperty('possibleValue', possibleValues);\r\n }\r\n if (\r\n ['file'].includes(apiField.definition.fieldType) &&\r\n ajaxFields[f].field\r\n ) {\r\n const fileField = apiField as File;\r\n\r\n if (ajaxFields[f]?.field?.file_prp) {\r\n fileField.loadFromDefinition(\r\n ajaxFields[f]?.field?.file_prp as string,\r\n );\r\n }\r\n }\r\n }\r\n // set VALUE to fldId\r\n if (ajaxFields[f].c !== undefined) {\r\n const { c } = ajaxFields[f];\r\n\r\n let value: any = undefined;\r\n if (typeof c !== 'object' || (c as any).k !== 't') {\r\n // <c k=\"t\" Se usa para marcar campo sin cambios ??????\r\n if (typeof c === 'string') {\r\n value = c;\r\n } else {\r\n /**\r\n * Este procedimiento se usa para concatenar los distintos índices de textarea, editor, etc\r\n */\r\n const valuesArray = arrayOrArray(c?.valueAttr);\r\n value = valuesArray.reduce((reduced, current) => {\r\n return reduced + current.v;\r\n }, '');\r\n }\r\n }\r\n\r\n /**\r\n * Si ponemos que apiField es instanceof FieldWithAttribute generamos una dependencia\r\n * circular que rompe la compilación !!!\r\n */\r\n if ((apiField as any).attribute && value !== undefined) {\r\n (apiField as any).setValue(value, {\r\n force: true,\r\n synchronize: false,\r\n });\r\n }\r\n }\r\n // set PROPERTIES to fldId\r\n if (ajaxFields[f].e !== undefined) {\r\n const ajaxProps = arrayOrArray(ajaxFields[f].e);\r\n for (let c = 0; c < ajaxProps.length; c += 1) {\r\n if (ajaxProps[c]?.f) {\r\n const prop = arrayOrArray(ajaxProps[c]?.f);\r\n for (let p = 0; p < prop.length; p += 1) {\r\n if (prop[p]?.i) {\r\n if (prop[p]?.i) {\r\n if (prop[p]?.v.toLowerCase() === 'f') {\r\n apiField.setProperty(prop[p]?.i, false);\r\n } else if (prop[p]?.v.toLowerCase() === 't') {\r\n apiField.setProperty(prop[p]?.i, true);\r\n } else {\r\n apiField.setProperty(prop[p]?.i, prop[p]?.v);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Formulario invisible\r\n if (\r\n form.v === 't' &&\r\n String(apiaForm.properties[IProperty.PROPERTY_FORM_HIDDEN]) !== 'true'\r\n ) {\r\n apiaForm.setProperty(IProperty.PROPERTY_FORM_HIDDEN, true);\r\n } else if (\r\n form.v === 'f' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_HIDDEN)) === 'true'\r\n ) {\r\n apiaForm.setProperty(IProperty.PROPERTY_FORM_HIDDEN, false);\r\n }\r\n\r\n // Formulario cerrado\r\n if (\r\n form.c === 't' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_CLOSED)) !== 'true'\r\n ) {\r\n apiaForm.closeForm();\r\n } else if (\r\n form.c === 'f' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_CLOSED)) === 'true'\r\n ) {\r\n apiaForm.openForm();\r\n }\r\n }\r\n\r\n if (response.proccess?.p) {\r\n execution.getProcess()?.setPriority(response.proccess.p);\r\n }\r\n\r\n if (response.data) {\r\n parseMessages(execution, response.data);\r\n }\r\n};\r\n","import type { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport type { FieldWithAttribute } from '../../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { IApiaField } from '../types';\r\nimport { Field } from '../../main/Execution/FormsExecution/Field';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TCreateNewField = (\r\n execution: Execution,\r\n field: Field | FieldWithAttribute | CustomComponent,\r\n) => IApiaField | null;\r\n\r\nexport type TAsyncCreateNewField = (\r\n execution: Execution,\r\n field: Field | FieldWithAttribute | CustomComponent,\r\n) => Promise<IApiaField | null>;\r\n\r\nlet creator: TCreateNewField | null = null;\r\n\r\nexport const asyncCreateNewField: TAsyncCreateNewField = async (\r\n execution,\r\n fld,\r\n) => {\r\n if (!creator) {\r\n creator = (await import('./createApiaField')).createNewField;\r\n }\r\n\r\n return creator(execution, fld);\r\n};\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { MakeApiaUrlProps } from '../../../util/api/apiaApi';\r\nimport { getLabel, labels } from '../../../util/labels/labels';\r\nimport type {\r\n TApiaFieldBaseDefinition,\r\n TFieldServerEvent,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport type { Form } from './Form';\r\nimport { WithProperties } from './WithProperties';\r\nimport { actions } from './constants/actions';\r\nimport { eventTypes } from './constants/eventTypes';\r\nimport { setAjaxFormResponse } from './events/setAjaxFormResponse';\r\nimport type {\r\n FieldValidationState,\r\n FireEventParameters,\r\n TFieldAjaxEventResponsePayload,\r\n} from './types';\r\nimport type { TApiaFieldCommonProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type { ApiaFunctions, IApiaField } from '../../../programming';\r\nimport { getCurrentTabsString } from '../../../util/app/getCurrentTabsString';\r\nimport { asyncCreateNewField } from '../../../programming/utils/asynCreateApiaField';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport type TFncParams = {\r\n type: 'V' | 'P' | 'E';\r\n value?: string;\r\n attId?: string | number;\r\n};\r\n\r\nlet af: ApiaFunctions | null = null;\r\n\r\nexport async function getApiaFunctions(execution: Execution) {\r\n if (!af) {\r\n await import('../../../programming/ApiaFunctions').then(\r\n ({ ApiaFunctions }) => (af = new ApiaFunctions(execution)),\r\n );\r\n }\r\n return af!;\r\n}\r\n\r\nexport abstract class Field<\r\n FieldProps extends TApiaFieldCommonProperties = TApiaFieldCommonProperties,\r\n FieldDefinition extends\r\n TApiaFieldBaseDefinition<FieldProps> = TApiaFieldBaseDefinition<FieldProps>,\r\n State extends {\r\n definition: Omit<FieldDefinition, 'properties'>;\r\n } = {\r\n definition: Omit<FieldDefinition, 'properties'>;\r\n },\r\n> extends WithProperties<FieldProps> {\r\n protected form: Form = {} as Form;\r\n\r\n definition: State['definition'];\r\n state: Omit<State, 'definition'> & {\r\n validation: FieldValidationState;\r\n } = {\r\n validation: { dirty: false, errorMessage: '', synchronizing: false },\r\n } as Omit<State, 'definition'> & {\r\n validation: FieldValidationState;\r\n };\r\n\r\n constructor({ properties, ...definition }: FieldDefinition) {\r\n super();\r\n\r\n this.properties = properties;\r\n this.definition = definition;\r\n\r\n makeObservable(this, { state: observable, definition: observable });\r\n }\r\n\r\n protected async getScriptEventParams(\r\n fncParams: TFncParams[],\r\n ): Promise<unknown[]> {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n (await getApiaFunctions(this.form.execution))\r\n .getForm(\r\n this.form.definition.formName,\r\n this.form.definition.frmParent,\r\n )!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n\r\n protected getServerEventParams(\r\n evtId: number,\r\n additionalParams?: Record<string, any>,\r\n ): MakeApiaUrlProps {\r\n let idx: any;\r\n if (getWindow(this.form.execution).IS_EDIT_GRID_MODAL) {\r\n idx = getWindow(this.form.execution).MODAL_INDEX;\r\n } else {\r\n idx = this.definition?.index || 0;\r\n }\r\n return {\r\n ajaxUrl: actions.forms,\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n action: 'fireFieldEvent',\r\n frmParent: this.form.definition.frmParent,\r\n frmId: this.form.definition.id,\r\n fldId: this.definition.id,\r\n index: idx,\r\n evtId,\r\n nuevo: true,\r\n preventAsXmlParameter: true,\r\n ...additionalParams,\r\n };\r\n }\r\n\r\n protected async fireScriptEvent(eventName: string): Promise<boolean> {\r\n const events = (this.definition.scriptEvents || []).filter(\r\n (c) => c.evtName === eventName,\r\n );\r\n\r\n let result = true;\r\n\r\n if (events.length > 0) {\r\n for (const event of events) {\r\n try {\r\n const fn = (window as any)[event.fncName] as (\r\n src: IApiaField,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n\r\n if (fn === undefined) {\r\n new MessageNotification({\r\n message: getLabel(this.form.execution, 'msgFunction404', {\r\n text: { TOK1: eventName },\r\n }).text,\r\n type: 'error',\r\n });\r\n throw new Error(\r\n getLabel(this.form.execution, 'msgFunction404', {\r\n text: { TOK1: eventName },\r\n }).text,\r\n );\r\n }\r\n result = await fn(\r\n (await asyncCreateNewField(this.form.execution, this))!,\r\n ...(await this.getScriptEventParams(event.fncParams)),\r\n );\r\n\r\n if (result === false) {\r\n break;\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message:\r\n labels.errorOnEvent(this.form.execution, event.fncName) +\r\n ', ' +\r\n e,\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n protected async fireAjaxServerEvent(\r\n event: TFieldServerEvent,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n try {\r\n const response = await post<TFieldAjaxEventResponsePayload>(\r\n this.form.execution,\r\n await makeApiaUrl(\r\n this.form.execution,\r\n this.getServerEventParams(event.evtId, {\r\n isAjax: true,\r\n }),\r\n ),\r\n {\r\n postData: params,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n\r\n if (response?.data?.success) {\r\n await setAjaxFormResponse(this.form.execution, response.data);\r\n return true;\r\n }\r\n } catch (rejectedValue) {\r\n console.error(rejectedValue);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message: String(rejectedValue),\r\n }),\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n protected async fireNoAjaxServerEvent(\r\n event: TFieldServerEvent,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n const p = this.getServerEventParams(event.evtId, params);\r\n if (\r\n (getWindow(this.form.execution).config as any).execution\r\n .reloadOnNoAjaxEvents\r\n ) {\r\n getWindow(this.form.execution).location.assign(\r\n await makeApiaUrl(this.form.execution, {\r\n ...p,\r\n currentTab: getCurrentTabsString(this.form.execution),\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n }),\r\n );\r\n } else {\r\n getWindow(this.form.execution).location.assign(\r\n await makeApiaUrl(this.form.execution, {\r\n ...p,\r\n currentTab: getCurrentTabsString(this.form.execution),\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n }),\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n protected async fireServerEvent(\r\n eventName: string,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n let event = this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName,\r\n );\r\n const hasBinding = this.definition.entityBind;\r\n if (!event && hasBinding) {\r\n event = {\r\n evtId: eventTypes.EVENT_FLD_ONCHANGE,\r\n isAjax: true,\r\n evtName: 'onChange',\r\n };\r\n }\r\n\r\n if (event) {\r\n const isAjax = event.isAjax;\r\n\r\n if (isAjax) {\r\n return this.fireAjaxServerEvent(event, params);\r\n } else {\r\n return this.fireNoAjaxServerEvent(event, params);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n async fireEvent(\r\n eventName: string,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n const unlock = this.form.execution.lock();\r\n\r\n try {\r\n let result = await this.fireScriptEvent(eventName);\r\n if (result) {\r\n result = await this.fireServerEvent(eventName, params);\r\n }\r\n\r\n /**\r\n * No es necesario mostrar errores ya que cada fireXXXEvent sabe hacerlo por sí mismo.\r\n */\r\n\r\n return result;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n\r\n getForm() {\r\n return this.form;\r\n }\r\n\r\n protected hasEventsOfType(eventName: string) {\r\n return (\r\n this.definition.serverEvents?.find((c) => c.evtName === eventName) ||\r\n this.definition.scriptEvents?.find((c) => c.evtName === eventName)\r\n );\r\n }\r\n\r\n protected hasServerAjaxEventsOfType(eventName: string) {\r\n return this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName && c.isAjax,\r\n );\r\n }\r\n\r\n protected hasServerNoAjaxEventsOfType(eventName: string) {\r\n return this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName && !c.isAjax,\r\n );\r\n }\r\n\r\n #hasInited = false;\r\n async init(form: Form) {\r\n if (this.#hasInited) throw new Error('Cannot init field twice');\r\n this.#hasInited = true;\r\n this.form = form;\r\n }\r\n public async validate(): Promise<boolean | Field> {\r\n return true;\r\n }\r\n\r\n markAsRendered() {\r\n this.getForm().markFieldAsRendered(\r\n this.definition.id,\r\n this.definition.index,\r\n );\r\n }\r\n}\r\n","import { TApiaButtonProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport type ButtonEvents = 'onClick';\r\n\r\nexport class Button extends Field<TApiaButtonProperties> {\r\n fireEvent(eventName: ButtonEvents): Promise<boolean> {\r\n return super.fireEvent(eventName);\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\nimport { TApiaCaptchaProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nimport { Field } from '../../Field';\r\nimport { Form } from '../../Form';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaCaptchaDefinition } from '../../../../InitialData/types/fields/TApiaCaptchaDefinition';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\n\r\nexport class Captcha extends Field<\r\n TApiaCaptchaProperties,\r\n TApiaCaptchaDefinition,\r\n {\r\n definition: Omit<TApiaCaptchaDefinition, 'properties'>;\r\n value: string;\r\n url: string;\r\n }\r\n> {\r\n private static emitter = new EventEmitter<{ confirm: null }>();\r\n public static reload() {\r\n this.emitter.emit('confirm', null);\r\n }\r\n\r\n private id: string = '';\r\n\r\n private static confirmParams: Record<string, string> = {};\r\n public static getConfirmParams() {\r\n return this.confirmParams;\r\n }\r\n\r\n constructor(definition: TApiaCaptchaProperties) {\r\n super(definition as TApiaCaptchaDefinition);\r\n this.state.value = '';\r\n this.properties.name = '__captcha__';\r\n\r\n Captcha.emitter.on('confirm', () => {\r\n this.generateImgUrl();\r\n });\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n this.id = this.getCaptchaId();\r\n this.generateImgUrl();\r\n }\r\n\r\n private getCaptchaId() {\r\n return `${getWindow(this.form.execution).TAB_ID}${this.form.definition.frmParent}_${this.form.definition.id}`;\r\n }\r\n public getUrl() {\r\n return this.state.url;\r\n }\r\n\r\n public generateImgUrl() {\r\n this.state.url = `${getWindow(this.form.execution).CONTEXT}/captchaImg?captchaName=${this.getId()}&t=${new Date().getTime()}`;\r\n }\r\n\r\n public generateVoiceUrl() {\r\n return `${getWindow(this.form.execution).CONTEXT}/captchaAudio?captchaName=${this.getId()}&t=${new Date().getTime()}&langCode=${getWindow(this.form.execution).LANG_CODE}`;\r\n }\r\n\r\n public getId() {\r\n return this.id;\r\n }\r\n\r\n public setValue(value: string) {\r\n this.state.value = value;\r\n this.state.validation.errorMessage = '';\r\n Captcha.confirmParams = { [this.id]: value };\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n this.id = this.getCaptchaId();\r\n if (this.state.value === '' && !this.getForm().definition.readOnly) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n } else {\r\n this.state.validation.errorMessage = '';\r\n return true;\r\n }\r\n }\r\n}\r\n","export type RetryConfiguration = {\r\n retries: number;\r\n timeout: number;\r\n};\r\n\r\nexport class TooMuchRetriesException extends Error {}\r\n\r\nfunction timeout(ms: number) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\n/**\r\n * Ejecuta el callback provisto y verifica el resultado contra el método checkSuccess. En caso de que checkSuccess devuelva false, reintenta en el timeout especificado, siempre que las restricciones de configuration.retries lo permita.\r\n *\r\n * En caso de fallar demasiadas veces, eleva una excepción de tipo TooMuchRetriesException\r\n *\r\n */\r\nexport async function asyncRetry<ReturnType>(\r\n cb: () => Promise<ReturnType>,\r\n checkSuccess: (value: ReturnType) => boolean,\r\n configuration: RetryConfiguration = {\r\n retries: 3,\r\n timeout: 300,\r\n },\r\n): Promise<ReturnType> {\r\n return new Promise<ReturnType>((resolve, reject) => {\r\n (async () => {\r\n const tryIt = async () => {\r\n const res = await cb();\r\n return checkSuccess(res) ? res : null;\r\n };\r\n\r\n for await (const _ of new Array(configuration.retries)) {\r\n const res = await tryIt();\r\n if (res) {\r\n resolve(res);\r\n return;\r\n }\r\n await timeout(configuration.timeout);\r\n }\r\n\r\n reject(new TooMuchRetriesException());\r\n })();\r\n });\r\n}\r\n","export type Comparator<T> = (a: T, b: T) => boolean;\r\n\r\nexport const shallowEqual: Comparator<any> = (a: any, b: any) => {\r\n if (Object.is(a, b)) return true;\r\n\r\n if (!Object.is(a, b) && typeof a !== typeof b) {\r\n return false;\r\n }\r\n\r\n if (typeof a === 'object') {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.length; i++) {\r\n if (!Object.is(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (a && b) {\r\n for (const [key, value] of Object.entries(a)) {\r\n if (!Object.is(value, b[key])) {\r\n return false;\r\n }\r\n }\r\n for (const [key, value] of Object.entries(b)) {\r\n if (!Object.is(value, a[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if ((a && !b) || (!a && b)) {\r\n return false;\r\n }\r\n }\r\n\r\n return a === b;\r\n};\r\n","import { isTrue } from '@apia/util';\r\nimport type { FieldWithAttribute } from '../FieldWithAttribute';\r\n\r\nexport function isFieldShowAsText(\r\n f: Pick<FieldWithAttribute<any, any, any>, 'properties' | 'getForm'>,\r\n): boolean {\r\n return (\r\n isTrue(f.properties.disabled) ||\r\n isTrue(f.getForm().definition.readonly) ||\r\n isTrue(f.getForm().definition.readOnly) ||\r\n isTrue(f.properties.inputAsText)\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { FieldWithAttributeState, SetValueOptions } from './types';\r\nimport { Field } from './Field';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { IApiaApiPostConfig } from '../../../util/api/types';\r\nimport { labels } from '../../../util/labels/labels';\r\nimport {\r\n TooMuchRetriesException,\r\n asyncRetry,\r\n} from '../../../util/other/asyncRetry';\r\nimport {\r\n TApiaFieldValueType,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { actions } from './constants/actions';\r\nimport { shallowEqual } from '../../../util/comparators/shallowEqual';\r\nimport { TApiaFieldWithAttributeProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { MakeApiaUrlProps } from '../../../util/api/apiaApi';\r\nimport { Form } from './Form';\r\nimport { isFieldShowAsText } from './util/isFieldShowAsText';\r\nexport type TFireEventOptions = {\r\n force?: boolean;\r\n};\r\n\r\nexport class Attribute {\r\n constructor(\r\n public readonly id: string,\r\n public readonly name: string,\r\n public readonly title: string,\r\n public readonly valueType: TApiaFieldValueType,\r\n ) {}\r\n}\r\n\r\nexport abstract class FieldWithAttribute<\r\n FieldProps extends\r\n TApiaFieldWithAttributeProperties = TApiaFieldWithAttributeProperties,\r\n ValueType = any,\r\n FieldDefinition extends\r\n TApiaFieldWithAttributeBaseProps<FieldProps> = TApiaFieldWithAttributeBaseProps<FieldProps>,\r\n> extends Field<\r\n FieldProps,\r\n FieldDefinition,\r\n FieldWithAttributeState<FieldDefinition, FieldProps, ValueType>\r\n> {\r\n #lastOnChangeValue: ValueType | null = null;\r\n protected lastSynchronizationValue: ValueType | null = null;\r\n\r\n public readonly attribute: Attribute;\r\n\r\n constructor({\r\n attId,\r\n attName,\r\n attLabel,\r\n valueType,\r\n value,\r\n ...definition\r\n }: TApiaFieldWithAttributeBaseProps<FieldProps>) {\r\n super(definition as FieldDefinition);\r\n\r\n this.attribute = new Attribute(attId, attName, attLabel, valueType);\r\n\r\n this.state.value = value;\r\n\r\n this.state.validation = {\r\n dirty: false,\r\n errorMessage: null,\r\n synchronizing: false,\r\n };\r\n\r\n makeObservable(this, {\r\n attribute: observable,\r\n });\r\n }\r\n\r\n async fireEvent(\r\n eventName: string,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n if (this.getValidationState().dirty) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n if (eventName === 'onChange') {\r\n if (this.getValue() === this.#lastOnChangeValue && !options?.force) {\r\n return true;\r\n } else {\r\n const res = await super.fireEvent(eventName);\r\n if (res) {\r\n this.#lastOnChangeValue = this.getValue();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return super.fireEvent(eventName);\r\n }\r\n protected async getInitialValue({\r\n value,\r\n }: TApiaFieldWithAttributeBaseProps<FieldProps>): Promise<ValueType> {\r\n if (value === undefined || value === null) {\r\n return (this.state.value = '' as any);\r\n } else if (typeof value === 'boolean') {\r\n return (this.state.value = String(value) as any);\r\n } else {\r\n return (this.state.value = value as any);\r\n }\r\n }\r\n public getValidationState() {\r\n return this.state.validation;\r\n }\r\n public getValue() {\r\n return this.state.value;\r\n }\r\n protected canSetValue(newValue: ValueType): boolean {\r\n return isFieldShowAsText(this) || shallowEqual(newValue, this.getValue());\r\n }\r\n public setValue(newValue: ValueType, options?: SetValueOptions) {\r\n if (\r\n !options?.force &&\r\n (isFieldShowAsText(this) || shallowEqual(newValue, this.getValue()))\r\n )\r\n return Promise.resolve(true);\r\n\r\n this.state.value = newValue;\r\n this.state.validation.errorMessage = null;\r\n\r\n if (options?.synchronize === false) {\r\n this.lastSynchronizationValue = newValue;\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.synchronize(newValue).then((res) => {\r\n if (res) {\r\n if (options?.markAsDirty !== false) {\r\n this.form.execution.state.hasChangedAnything = true;\r\n }\r\n return this.fireEvent('onChange', { force: options?.force });\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: ValueType,\r\n ): IApiaApiPostConfig<any> {\r\n return {\r\n postData: {\r\n value,\r\n },\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n };\r\n }\r\n protected getSynchronizeUrl(params?: Record<string, unknown>) {\r\n return makeApiaUrl(this.form.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'processFieldSubmit',\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n attId: this.attribute.id,\r\n index: this.definition.multIdx ?? this.definition.index ?? 0,\r\n timestamp: Date.now(),\r\n isAjax: true,\r\n ...params,\r\n });\r\n }\r\n protected processSynchronizeError(e: unknown) {\r\n if (e instanceof TooMuchRetriesException) {\r\n this.state.validation.dirty = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n protected async synchronize(newValue: ValueType) {\r\n if (newValue === this.lastSynchronizationValue) return true;\r\n\r\n try {\r\n const postData = this.getSynchronizePostConfiguration(newValue);\r\n const result =\r\n (\r\n await asyncRetry(\r\n async () => {\r\n try {\r\n return await post<{ success: boolean }>(\r\n this.form.execution,\r\n await this.getSynchronizeUrl(),\r\n postData,\r\n );\r\n } catch (e) {\r\n this.form.execution.notifications.add(\r\n new MessageNotification({ message: String(e) }),\r\n );\r\n return null;\r\n }\r\n },\r\n (result) => !!result?.data?.success,\r\n { retries: 10, timeout: 500 },\r\n )\r\n )?.data?.success || false;\r\n\r\n if (result) {\r\n this.lastSynchronizationValue = newValue;\r\n this.state.validation.dirty = false;\r\n return true;\r\n }\r\n } catch (e) {\r\n this.processSynchronizeError(e);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected hasValue() {\r\n return this.getValue() !== '';\r\n }\r\n\r\n protected isValidValue() {\r\n return !!this.getValue();\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.dirty) {\r\n if (!(await this.synchronize(this.state.value))) {\r\n this.state.validation.errorMessage = labels.errorCouldNotSync();\r\n return false;\r\n }\r\n }\r\n\r\n const isValid =\r\n isFieldShowAsText(this) ||\r\n this.isValidValue() ||\r\n !this.properties.required ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n this.state.validation.errorMessage = isValid\r\n ? null\r\n : labels.errorFieldRequired(this.form.execution);\r\n\r\n return !this.state.validation.errorMessage;\r\n }\r\n\r\n public setError(err: string) {\r\n this.state.validation.errorMessage = err;\r\n }\r\n\r\n protected getServerEventParams(\r\n evtId: number,\r\n additionalParams?: Record<string, any>,\r\n ): MakeApiaUrlProps {\r\n return {\r\n ...super.getServerEventParams(evtId, additionalParams),\r\n attId: this.attribute.id,\r\n };\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n const initialValue = await this.getInitialValue({\r\n ...this.definition,\r\n properties: this.properties,\r\n attId: this.attribute.id,\r\n attName: this.attribute.name,\r\n attLabel: this.attribute.title,\r\n valueType: this.attribute.valueType,\r\n value: this.state.value,\r\n });\r\n\r\n this.state.value = initialValue ?? ('' as ValueType);\r\n }\r\n}\r\n","import { TApiaCheckboxProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaFieldWithAttributeBaseProps } from '../../../../InitialData/types/TApiaField';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\n\r\ntype CheckboxEvents = 'onClick';\r\n\r\nexport class Checkbox extends FieldWithAttribute<\r\n TApiaCheckboxProperties,\r\n boolean\r\n> {\r\n fireEvent(\r\n eventName: CheckboxEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected getInitialValue({\r\n value,\r\n }: TApiaFieldWithAttributeBaseProps<TApiaCheckboxProperties>): Promise<boolean> {\r\n return value === '' || value === undefined ? Promise.resolve(false) : value;\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { TTranslationState } from './types';\r\nimport { post } from '../../../../util';\r\nimport type { Execution } from '../..';\r\n\r\nexport class Translation {\r\n state: TTranslationState;\r\n\r\n constructor(\r\n public execution: Execution,\r\n state: Pick<TTranslationState, 'id' | 'label' | 'isTranslated'>,\r\n ) {\r\n this.state = {\r\n ...state,\r\n hasChanged: false,\r\n isTranslated: state.isTranslated,\r\n tempValue: '',\r\n };\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n cancelTranslation() {\r\n this.reset();\r\n }\r\n\r\n async readTranslations(url: string) {\r\n if (this.state.remoteValue === undefined) {\r\n const result = await post<{ values: { value: string } }>(\r\n this.execution,\r\n url,\r\n { avoidNormalize: true, avoidTrimXml: true },\r\n );\r\n\r\n const newValue = result?.data?.values?.value;\r\n this.state.tempValue =\r\n newValue !== 'null' ? (result?.data?.values?.value ?? '') : '';\r\n this.state.remoteValue = this.state.tempValue;\r\n }\r\n }\r\n\r\n reset() {\r\n delete this.state.remoteValue;\r\n this.state.tempValue = '';\r\n this.state.hasChanged = false;\r\n }\r\n\r\n deleteTranslation() {\r\n delete this.state.remoteValue;\r\n this.state.tempValue = '';\r\n this.state.hasChanged = false;\r\n this.state.isTranslated = false;\r\n }\r\n\r\n setTempValue(str: string) {\r\n this.state.tempValue = str;\r\n this.state.hasChanged = str !== this.state.remoteValue;\r\n }\r\n\r\n submitTranslation(value: string, url: string) {\r\n if (this.state.hasChanged) {\r\n post(this.execution, url, {\r\n postData: { value },\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n postDataTreatment: 'stringify',\r\n });\r\n }\r\n\r\n this.state.isTranslated = this.value !== '';\r\n this.reset();\r\n }\r\n\r\n get langId() {\r\n return this.state.id;\r\n }\r\n\r\n get value() {\r\n return this.state.tempValue;\r\n }\r\n}\r\n","export function parseFakeJSON(fakeJSON: string) {\r\n return [...fakeJSON.matchAll(/(\\d+): '?([^']+)'?/g)].map(([, k, v]) => ({\r\n id: k,\r\n label: v,\r\n }));\r\n}\r\n","import { TApiaFieldWithAttributeBaseProps } from '../../../InitialData/types/TApiaField';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Form } from '../Form';\r\nimport { TApiaTranslatableFieldProperties } from '../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { makeApiaUrl } from '../../../../util';\r\nimport { Translation } from './Translation';\r\nimport { parseFakeJSON } from './util';\r\nimport { FieldWithAttribute } from '../FieldWithAttribute';\r\nimport { labels } from '../../../../util/labels/labels';\r\nimport { Comparator } from '../../../../util/comparators/shallowEqual';\r\n\r\ninterface InitialTradMap {\r\n [key: string]: boolean;\r\n}\r\n\r\nexport abstract class TranslatableField<\r\n FieldProps extends\r\n TApiaTranslatableFieldProperties = TApiaTranslatableFieldProperties,\r\n ValueType = any,\r\n FieldDefinition extends\r\n TApiaFieldWithAttributeBaseProps<FieldProps> = TApiaFieldWithAttributeBaseProps<FieldProps>,\r\n> extends FieldWithAttribute<FieldProps, ValueType, FieldDefinition> {\r\n translations = new Map<string, Translation>();\r\n selectedLanguageId = this.getLanguages()[0]?.id;\r\n isTradLoading = false;\r\n definitionTradParsed: InitialTradMap = {};\r\n\r\n constructor(props: TApiaFieldWithAttributeBaseProps<FieldProps>) {\r\n super(props);\r\n makeObservable(this, {\r\n translations: observable,\r\n selectedLanguageId: observable,\r\n isTradLoading: observable,\r\n });\r\n }\r\n\r\n private extractTrad() {\r\n const tradMap: InitialTradMap = {};\r\n const regex = /(\\d+)\\s*:\\s*(true|false)/g;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = regex.exec(this.definition.trad ?? '{}')) !== null) {\r\n const key = match[1];\r\n const value = match[2] === 'true';\r\n tradMap[key] = value;\r\n }\r\n\r\n this.definitionTradParsed = tradMap;\r\n }\r\n\r\n private getLanguages() {\r\n return arrayOrArray(parseFakeJSON(this.getForm().definition?.langs ?? ''));\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n if (this.getLanguages().length > 0) {\r\n this.extractTrad();\r\n this.getLanguages().forEach((lang) => {\r\n const isTranslated = this.definitionTradParsed[lang.id] ?? false;\r\n this.translations.set(\r\n lang.id,\r\n new Translation(this.form.execution, {\r\n id: lang.id,\r\n label: lang.label,\r\n isTranslated: isTranslated,\r\n }),\r\n );\r\n });\r\n\r\n this.selectedLanguageId = this.getLanguages()[0].id;\r\n }\r\n }\r\n\r\n public cancelTranslations() {\r\n this.getTranslations().forEach((c) => {\r\n c.reset();\r\n });\r\n }\r\n\r\n public deleteTranslations() {\r\n this.getTranslations().forEach((c) => {\r\n c.deleteTranslation();\r\n });\r\n }\r\n\r\n public async changeLanguage(langId: string) {\r\n this.selectedLanguageId = langId;\r\n this.syncTranslation();\r\n }\r\n\r\n public getTranslation(id: string) {\r\n return this.translations.get(id);\r\n }\r\n\r\n public getCurrentTranslation() {\r\n return this.translations.get(this.selectedLanguageId);\r\n }\r\n\r\n public getTranslations() {\r\n return this.translations;\r\n }\r\n\r\n public submitTranslations() {\r\n [...this.getTranslations().values()]\r\n .filter((c) => c.state.hasChanged)\r\n .forEach((c) => {\r\n c.submitTranslation(\r\n c.value,\r\n this.getSynchronizeUrl({\r\n react: true,\r\n preventAsXmlParameter: true,\r\n langId: c.langId,\r\n }),\r\n );\r\n });\r\n this.state.validation.errorMessage = null;\r\n }\r\n\r\n public async syncTranslation() {\r\n const langId = this.selectedLanguageId;\r\n this.isTradLoading = true;\r\n\r\n await this.getTranslation(langId)?.readTranslations(\r\n await makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n action: 'getFieldTranslations',\r\n frmId: this.getForm().definition.id,\r\n frmParent: this.getForm().definition.frmParent,\r\n fldId: this.definition.id,\r\n attId: this.attribute.id,\r\n langId,\r\n react: true,\r\n }),\r\n );\r\n\r\n this.isTradLoading = false;\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n const isSuperValid = await super.validate();\r\n let isValid = isSuperValid;\r\n const canValidate =\r\n isSuperValid &&\r\n this.properties.reqTrad &&\r\n this.hasValue() &&\r\n (!this.properties.inputAsText ||\r\n !this.properties.visibilityHidden ||\r\n !this.properties.disabled);\r\n\r\n if (canValidate) {\r\n const translations = [...this.getTranslations().values()];\r\n\r\n const tradNotValidated = translations.find((c) => !c.state.isTranslated);\r\n\r\n if (tradNotValidated) {\r\n this.state.validation.errorMessage = labels.errorTranslateRequired(\r\n this.form.execution,\r\n tradNotValidated.state.label,\r\n );\r\n isValid = false;\r\n } else {\r\n this.state.validation.errorMessage = null;\r\n }\r\n }\r\n return isValid;\r\n }\r\n public setValue(\r\n newValue: ValueType,\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n if (newValue === '') {\r\n this.deleteTranslations();\r\n }\r\n return super.setValue(newValue, options);\r\n }\r\n}\r\n","import { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { TApiaEditorProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TFireEventOptions } from '../../FieldWithAttribute';\r\nimport { TranslatableField } from '../../TranslatableField';\r\n\r\nexport type EditorEvents = 'onChange';\r\n\r\nexport class Editor extends TranslatableField<TApiaEditorProperties, string> {\r\n fireEvent(\r\n eventName: EditorEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected isValidValue(): boolean {\r\n return !!new DOMParser().parseFromString(this.getValue(), 'text/html')\r\n .documentElement.textContent;\r\n }\r\n protected getSynchronizePostConfiguration(\r\n value: string,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n conf.postData!.clearValues = 'true';\r\n return conf;\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { UploaderApi } from './UploaderApi';\r\nimport {\r\n IPoolsPermissions,\r\n IUsersPermissions,\r\n TApiaDocumentDefinition,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n TUploadModalOpener,\r\n UploaderModalState,\r\n} from './types';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\nimport { getLabel } from '../../../util';\r\n\r\nfunction getFileExtension(fileName: string): string {\r\n const parts = fileName.split('.');\r\n return parts.length > 1 ? parts.pop()!.toLowerCase() : '';\r\n}\r\n\r\nconst getInitialState: (\r\n execution: Execution,\r\n) => Readonly<UploaderModalState> = (execution: Execution) =>\r\n Object.freeze({\r\n metadata: {\r\n metadataArray: [],\r\n freeMetadataArray: [],\r\n isFreeMetadata: false,\r\n },\r\n fromDirectoryFile: null,\r\n docFolder: undefined,\r\n docPath: undefined,\r\n docExpDate: undefined,\r\n description: '',\r\n isReadonly: false,\r\n permissions: {\r\n pools: [],\r\n users: getWindow(execution).DOCUMENT_OWNER_PRIVILEGES\r\n ? [\r\n {\r\n canUpdate: true,\r\n userId: getWindow(execution).CURRENT_USER_LOGIN,\r\n userLogin: getWindow(execution).CURRENT_USER_LOGIN,\r\n },\r\n ]\r\n : [],\r\n allowAllType: ((getWindow(execution)\r\n .DOCUMENT_EVERYONE_PERMISSION as any as boolean) !== false\r\n ? 'M'\r\n : '') as '',\r\n },\r\n fileReqError: false,\r\n });\r\n\r\nexport class UploaderModalController {\r\n public state: UploaderModalState;\r\n\r\n constructor(\r\n public api: UploaderApi,\r\n public modalConfig: TModalConfig,\r\n public conf?: {\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n versionFile?: TUploaderFileInfo;\r\n },\r\n ) {\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n\r\n this.state = getInitialState(api.execution);\r\n }\r\n\r\n public get allMetadata() {\r\n return [\r\n ...this.state.metadata.metadataArray,\r\n ...this.state.metadata.freeMetadataArray,\r\n ];\r\n }\r\n\r\n public get allowAllType() {\r\n return this.state.permissions.allowAllType;\r\n }\r\n\r\n public get description() {\r\n return this.state.description;\r\n }\r\n\r\n public get docFolder() {\r\n return this.state.docFolder;\r\n }\r\n\r\n public get docExpDate() {\r\n return this.state.docExpDate;\r\n }\r\n\r\n public get docTypes() {\r\n return this.api.getDocTypes();\r\n }\r\n\r\n public get freeMetadata() {\r\n return this.state.metadata.freeMetadataArray;\r\n }\r\n\r\n public get exitingFiles() {\r\n return this.api.getExistingFiles();\r\n }\r\n\r\n public get inProgressFiles() {\r\n return this.api.getInProgressFiles();\r\n }\r\n\r\n public get hiddenFiles() {\r\n return this.api.getHiddenFiles();\r\n }\r\n\r\n public get progress() {\r\n return this.api.getProgress();\r\n }\r\n\r\n public get metadata() {\r\n return this.state.metadata.metadataArray;\r\n }\r\n\r\n public get selectedDocTypeId() {\r\n return this.api.getCurrentDocTypeId();\r\n }\r\n\r\n public get selectedDocType() {\r\n return this.api.getCurrentDocType();\r\n }\r\n\r\n public addMetadata() {\r\n this.state.metadata.freeMetadataArray.push({\r\n free: 'Y',\r\n id: String(Math.random()),\r\n name: '',\r\n required: 'Y',\r\n title: '',\r\n type: 'S',\r\n value: '',\r\n errorMessage: '',\r\n labelErrorMessage: '',\r\n });\r\n }\r\n\r\n public addFiles(files: File[]) {\r\n this.state.fileReqError = false;\r\n this.state.isReadonly = false;\r\n this.api.saveDroppedFiles(files, this.conf);\r\n }\r\n\r\n public addDirectoryFile(file: TApiaDocumentDefinition) {\r\n this.state.fileReqError = false;\r\n this.api.state.inProgressFiles = [];\r\n this.state.fromDirectoryFile = file;\r\n }\r\n public async changeDocType(docTypeId: string) {\r\n this.resetMetadata();\r\n this.api.setCurrentDocTypeId(docTypeId);\r\n this.onChangeExtension();\r\n this.api.reloadMetadata({ docTypeId });\r\n }\r\n\r\n public clearDirectoryFile() {\r\n this.state.fromDirectoryFile = null;\r\n this.state.isReadonly = false;\r\n }\r\n\r\n public clearFile(name: string) {\r\n this.api.clearFile(name);\r\n }\r\n\r\n public clearFiles() {\r\n this.api.clearFiles();\r\n }\r\n\r\n public clearState() {\r\n this.state = getInitialState(this.api.execution);\r\n this.api.clearState();\r\n }\r\n\r\n public clearPartialState() {\r\n if (this.api.state.inProgressFiles.length === 0) {\r\n this.state = getInitialState(this.api.execution);\r\n }\r\n }\r\n\r\n public onCloseModal() {\r\n this.clearState();\r\n }\r\n\r\n public async confirm() {\r\n let isValid = this.validate();\r\n if (isValid) isValid = await this.api.confirmDropModal(this.conf);\r\n return isValid;\r\n }\r\n\r\n public deleteMetadata(indices: number[]) {\r\n const deleteSet = new Set(indices);\r\n const offset = this.state.metadata.metadataArray.length;\r\n\r\n this.state.metadata.freeMetadataArray =\r\n this.state.metadata.freeMetadataArray.filter(\r\n (_, localIndex) =>\r\n // conservamos sólo los que NO estén en deleteSet\r\n !deleteSet.has(localIndex + offset),\r\n );\r\n }\r\n\r\n public deletePermission(item: IPoolsPermissions | IUsersPermissions) {\r\n if (item && 'userId' in item) {\r\n this.state.permissions.users = this.state.permissions.users.filter(\r\n (c) => c.userId !== item.userId,\r\n );\r\n } else {\r\n this.state.permissions.pools = this.state.permissions.pools.filter(\r\n (c) => c.poolId !== item.poolId,\r\n );\r\n }\r\n }\r\n\r\n protected onChangeExtension(): void {\r\n const rawDocExts = this.api.getCurrentDocType()?.docExts || '';\r\n let hideFileNames = '';\r\n const allowedExtensions = rawDocExts\r\n .split(';')\r\n .map((ext) => ext.trim())\r\n .filter((ext) => ext !== '');\r\n\r\n if (rawDocExts === '') {\r\n const allFiles = [...this.inProgressFiles, ...this.hiddenFiles];\r\n const dedupedFiles = Array.from(\r\n new Map(allFiles.map((file: File) => [file.name, file])).values(),\r\n );\r\n this.api.state.inProgressFiles = dedupedFiles;\r\n this.api.state.hiddenFiles = [];\r\n return;\r\n }\r\n\r\n const allowedInProgress: File[] = [];\r\n const toHide: File[] = [];\r\n this.inProgressFiles.forEach((file: File) => {\r\n const ext = getFileExtension(file.name);\r\n if (allowedExtensions.includes(ext)) {\r\n allowedInProgress.push(file);\r\n } else {\r\n toHide.push(file);\r\n hideFileNames += ` ${file.name} `;\r\n }\r\n });\r\n\r\n const allowedHidden: File[] = [];\r\n const stillHidden: File[] = [];\r\n this.api.state.hiddenFiles.forEach((file: File) => {\r\n const ext = getFileExtension(file.name);\r\n if (allowedExtensions.includes(ext)) {\r\n allowedHidden.push(file);\r\n } else {\r\n stillHidden.push(file);\r\n }\r\n });\r\n\r\n const combinedInProgress = [...allowedInProgress, ...allowedHidden];\r\n const dedupedInProgress = Array.from(\r\n new Map(\r\n combinedInProgress.map((file: File) => [file.name, file]),\r\n ).values(),\r\n );\r\n const combinedHidden = [...toHide, ...stillHidden];\r\n const dedupedHidden = Array.from(\r\n new Map(combinedHidden.map((file: File) => [file.name, file])).values(),\r\n );\r\n\r\n this.api.state.inProgressFiles = dedupedInProgress;\r\n this.api.state.hiddenFiles = dedupedHidden;\r\n if (hideFileNames)\r\n this.api.notify({\r\n title: getLabel(this.api.execution, 'msgFileWrngExt').text,\r\n message: hideFileNames,\r\n type: 'warning',\r\n });\r\n }\r\n\r\n public async openModal() {\r\n const a = 'openUploaderModal';\r\n import(\r\n /* webpackInclude: /\\.tsx?$/ */\r\n `/src/static/files/${a}`\r\n ).then((r) => {\r\n (r as { default: TUploadModalOpener }).default(this);\r\n });\r\n }\r\n\r\n public setDescription(desc: string) {\r\n this.state.description = desc;\r\n }\r\n\r\n protected async resetMetadata() {\r\n this.state.metadata = {\r\n freeMetadataArray: [],\r\n metadataArray: [],\r\n isFreeMetadata: false,\r\n };\r\n }\r\n\r\n public validate(): boolean {\r\n let isValid = true;\r\n this.state.fileReqError = false;\r\n if (\r\n this.api.getInProgressFiles().length === 0 &&\r\n !this.state.fromDirectoryFile\r\n ) {\r\n this.state.fileReqError = true;\r\n isValid = false;\r\n }\r\n\r\n this.allMetadata.forEach((c) => {\r\n if (c.required === 'Y') {\r\n if (c.name.trim() === '' && c.free === 'Y') {\r\n c.labelErrorMessage = getLabel(\r\n this.api.execution,\r\n 'msgReqField',\r\n ).text;\r\n isValid = false;\r\n }\r\n if (c.value.trim() === '') {\r\n if (!c.errorMessage)\r\n c.errorMessage = getLabel(this.api.execution, 'msgReqField').text;\r\n isValid = false;\r\n }\r\n }\r\n });\r\n\r\n return isValid;\r\n }\r\n}\r\n","import {\r\n addBoundary,\r\n arrayOrArray,\r\n downloadUrl,\r\n EventEmitter,\r\n formatMessage,\r\n parseAsSize,\r\n TApiaFunction,\r\n TApiaLoad,\r\n toBoolean,\r\n} from '@apia/util';\r\nimport {\r\n IPoolsPermissions,\r\n IUsersPermissions,\r\n TAjaxUploadFileStatus,\r\n TAjaxUploadStart,\r\n TConfirmDropModal,\r\n TDocType,\r\n TDocumentMetadata,\r\n TFileUploaded,\r\n TProcessDroppedFiles,\r\n TSaveDroppedFilesConf,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n TUploaderLoadCurrentFunction,\r\n TUploaderLoadCurrentFunctionMessages,\r\n UploaderState,\r\n TDocumentInformation,\r\n TRequireOnlyOne,\r\n} from './types';\r\nimport { UploaderModalController } from './UploaderModalController';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { NotificationDefinition } from '../../Notifications/Notification';\r\nimport QueryString from 'qs';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Execution } from '..';\r\nimport { get, makeApiaUrl, post } from '../../../util';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\n\r\n/**\r\n * El comportamiento de esta función se explica por su\r\n * nombre.\r\n */\r\nexport function returnExactlyTheSame(\r\n defaultParameters: Record<string, unknown>,\r\n): Record<string, unknown> {\r\n return defaultParameters;\r\n}\r\n\r\nexport function isOneClickUploadEnabled(\r\n execution: Execution,\r\n oneClickUploadProp?: boolean,\r\n) {\r\n return (\r\n !getWindow(execution).avoidOneClickUpload &&\r\n (getWindow(execution).forceOneClickUpload || oneClickUploadProp || false)\r\n );\r\n}\r\n\r\nexport const parseFileDefinition = (\r\n execution: Execution,\r\n fileDefinition: TFileUploaded | TUploaderFileInfo,\r\n isSignRequired: boolean,\r\n): TUploaderFileInfo => {\r\n const { lock, isLocked, lockedBy, userLocking, ...file } =\r\n fileDefinition as TFileUploaded;\r\n\r\n return {\r\n ...file,\r\n isLocked:\r\n isLocked === 'true' ||\r\n isLocked === true ||\r\n toBoolean(lock) ||\r\n file.locked === true,\r\n isLockedByMe:\r\n (lockedBy || userLocking) === getWindow(execution).CURRENT_USER_LOGIN,\r\n isMarkedToSign: file.markedToSign || toBoolean(file.sign) || isSignRequired,\r\n isVirtual: file.virtualDoc ?? false,\r\n lockingUser: lockedBy || userLocking,\r\n };\r\n};\r\n\r\nexport type TOnUploadProgress = (progress: number) => void;\r\nexport class UploaderApi extends EventEmitter<{ fileUploaded: null }> {\r\n maxFiles = Infinity;\r\n modalController: UploaderModalController | null = null;\r\n allowTranslations = false;\r\n langs: Record<number, string> | undefined;\r\n currentConfiguration: TUploaderLoadCurrentFunctionMessages | undefined;\r\n docTypePermittedObjId;\r\n state: UploaderState = {\r\n progress: 0,\r\n allowedTypes: [],\r\n selectedDocTypeId: '1',\r\n versioningFile: null,\r\n inProgressFiles: [],\r\n files: {},\r\n selectedFiles: [],\r\n hiddenFiles: [],\r\n translatedFiles: new Map(),\r\n hasAllDocTypes: false,\r\n };\r\n get filesArray() {\r\n return Object.values(this.state.files);\r\n }\r\n\r\n constructor(\r\n public execution: Execution,\r\n public id: string,\r\n public type: 'E' | 'P',\r\n public modalConfig: TModalConfig,\r\n ) {\r\n super();\r\n if (!(getWindow(this.execution) as any).fileApi) {\r\n (getWindow(this.execution) as any).fileApi = {};\r\n }\r\n (getWindow(this.execution) as any).fileApi[this.id] = this;\r\n\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n this.allowTranslations =\r\n type === 'E' && !!getWindow(this.execution).DOC_LANGS;\r\n this.langs = getWindow(this.execution).DOC_LANGS;\r\n try {\r\n this.docTypePermittedObjId =\r\n type === 'E'\r\n ? getWindow(this.execution).docTypePerEntId\r\n : getWindow(this.execution).docTypePerProId;\r\n } catch (e) {\r\n console.warn(e);\r\n }\r\n }\r\n\r\n async init() {\r\n await this.ajaxUploadStart();\r\n await this.reloadMetadata({\r\n docTypeId: this.state.selectedDocTypeId,\r\n });\r\n await this.loadCurrentDocuments();\r\n }\r\n\r\n async onStartUpload(files?: File[]) {\r\n if (this.modalConfig.oneClickUpload) {\r\n await this.saveDroppedFiles(files ?? []);\r\n } else {\r\n if (files) {\r\n const result = await this.saveDroppedFiles(files ?? []);\r\n if (!result) return;\r\n }\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n );\r\n this.modalController.openModal();\r\n }\r\n }\r\n\r\n async onTranslateUpload(\r\n conf: {\r\n langId: number;\r\n translatingFile: TUploaderFileInfo;\r\n },\r\n files?: File[],\r\n ) {\r\n if (this.modalConfig.oneClickUpload) {\r\n await this.saveDroppedFiles(files ?? [], conf);\r\n } else {\r\n await this.init();\r\n\r\n let mustOpen = true;\r\n\r\n if (files) {\r\n const res = await this.saveDroppedFiles(files ?? [], conf);\r\n if (!res) {\r\n mustOpen = false;\r\n }\r\n }\r\n\r\n if (mustOpen) {\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n conf,\r\n );\r\n this.modalController.openModal();\r\n }\r\n }\r\n }\r\n\r\n async onVersionUpload(\r\n file: TUploaderFileInfo,\r\n conf: {\r\n newFiles?: File[];\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n } = { newFiles: [] },\r\n ) {\r\n this.version(file, conf);\r\n }\r\n\r\n async autoLock(): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n\r\n public notify(notification: NotificationDefinition) {\r\n this.execution.notifications.add(new MessageNotification(notification));\r\n }\r\n\r\n protected getAjaxUrl(): string {\r\n return getWindow(this.execution).URL_REQUEST_AJAX;\r\n }\r\n\r\n public getDocTypes() {\r\n return this.state.allowedTypes;\r\n }\r\n\r\n public getCurrentDocTypeId() {\r\n return this.state.selectedDocTypeId;\r\n }\r\n\r\n public getCurrentDocType() {\r\n return this.state.allowedTypes.find(\r\n (c) => c.id === this.state.selectedDocTypeId,\r\n );\r\n }\r\n\r\n public getInProgressFiles() {\r\n return this.state.inProgressFiles;\r\n }\r\n\r\n public getHiddenFiles() {\r\n return this.state.hiddenFiles;\r\n }\r\n\r\n public getExistingFiles() {\r\n return this.state.files;\r\n }\r\n\r\n public getProgress() {\r\n return this.state.progress;\r\n }\r\n\r\n public getHasAllDocTypes() {\r\n return this.state.hasAllDocTypes;\r\n }\r\n\r\n async getDocumentInfo(\r\n {\r\n docId: apiId,\r\n downloadDocId: docId,\r\n }: TRequireOnlyOne<{ docId: string; downloadDocId: string }>,\r\n newElem?: boolean,\r\n ) {\r\n const id = apiId ? this.getDocument(apiId)!.docId : docId;\r\n const result = await post<TDocumentInformation>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDocumentInfoParameters({\r\n action: 'getDocumentInfo',\r\n isAjax: true,\r\n docId: id,\r\n newElem,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n );\r\n\r\n if (result?.data) {\r\n return result.data;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This method searches for the provided id in several places:\r\n *\r\n * If it's found in the current files, returns it.\r\n * If not, it searches the provided docId in the translations map of each uploaded file.\r\n */\r\n getDocument(docId: string) {\r\n if (this.state.files[docId]) {\r\n return this.state.files[docId];\r\n } else {\r\n for (const map of this.state.translatedFiles.values()) {\r\n for (const file of map.values()) {\r\n if (file.docId === docId) {\r\n return file;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected updateDocument(docId: string, newValue: TUploaderFileInfo) {\r\n if (this.state.files[docId]) {\r\n this.state.files[docId] = { ...this.getDocument(docId), ...newValue };\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === docId) {\r\n innerMap.set(langKey, { ...doc, ...newValue });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected deleteDocument(docId: string) {\r\n if (this.state.files[docId]) {\r\n delete this.state.files[docId];\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === docId) {\r\n innerMap.delete(langKey);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n public clearFile(name: string) {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.inProgressFiles = this.state.inProgressFiles.filter(\r\n (c) => c.name !== name,\r\n );\r\n }\r\n\r\n public clearFiles() {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.inProgressFiles = [];\r\n this.state.hiddenFiles = [];\r\n }\r\n\r\n public clearState() {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.selectedDocTypeId = this.getDocTypes().find(\r\n (c) => String(c.id) === '1',\r\n )\r\n ? '1'\r\n : this.getDocTypes()[0]?.id;\r\n this.state.inProgressFiles = [];\r\n this.state.versioningFile = null;\r\n }\r\n\r\n async checkLockDocument(id: string, shouldNotifyUnlocked = true) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if (Number(file.docId) < 0) return true;\r\n\r\n const result = await post<{\r\n success: 'ok' | 'unlocked';\r\n usr: string;\r\n }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getCheckLockDocumentParameters({\r\n action: 'checkLockDocument',\r\n docId: file.docId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n prefix: this.type,\r\n }),\r\n ),\r\n );\r\n\r\n const isLocked = result?.data?.success === 'ok';\r\n if (\r\n !isLocked &&\r\n result?.data?.usr &&\r\n result.data.usr !== getWindow(this.execution).CURRENT_USER_LOGIN\r\n ) {\r\n this.notify({\r\n message: `${getWindow(this.execution).MSG_DOC_LOCKED_BY_USR.split('.')[0]}: ${\r\n result.data.usr\r\n }.`,\r\n type: 'warning',\r\n });\r\n return result.data.usr;\r\n }\r\n if (!isLocked && shouldNotifyUnlocked && !(await this.autoLock()))\r\n this.notify({\r\n message: getWindow(this.execution).MSG_DOC_MUST_BE_LOCKED,\r\n type: 'warning',\r\n });\r\n\r\n return isLocked;\r\n }\r\n\r\n public setCurrentDocTypeId(docTypeId: string) {\r\n this.state.selectedDocTypeId = docTypeId;\r\n }\r\n\r\n public async ajaxUploadStart(newFiles: File[] = []) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n const versioningFile = this.state.versioningFile;\r\n const res = await post<TAjaxUploadStart>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getAjaxUploadStartParameters({\r\n action: 'ajaxUploadStart',\r\n isAjax: true,\r\n docId: versioningFile?.docId,\r\n prefix: this.type,\r\n docTypeId:\r\n newFiles.length === 1 ? versioningFile?.docTypeId || '1' : '1',\r\n newDoc: !versioningFile,\r\n useDocTypePermitted: true,\r\n docTypePermittedObjType: this.type,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n );\r\n if (res?.data) {\r\n const docTypes = arrayOrArray(res?.data?.function?.docTypes?.docType);\r\n const hasGeneric = !!docTypes.find((c) => String(c.id) === '1');\r\n\r\n this.state.allowedTypes = docTypes;\r\n this.state.selectedDocTypeId = hasGeneric ? '1' : docTypes[0].id;\r\n\r\n if (newFiles.length > 0) {\r\n await this.saveDroppedFiles(newFiles);\r\n }\r\n return res?.data?.function.name === 'fncDocumentLoadInformation'\r\n ? true\r\n : false;\r\n } else {\r\n throw new Error('No files data');\r\n }\r\n }\r\n\r\n public async reloadMetadata(\r\n props?: Partial<{ docId: string; docTypeId: number | string }>,\r\n additionalProps?: Record<string, unknown>,\r\n ) {\r\n if (!this.modalController) return;\r\n const res = await post<{\r\n metadata: TDocumentMetadata | TDocumentMetadata[];\r\n }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getReloadMetadataParameters({\r\n ajaxUrl: this.getAjaxUrl(),\r\n action: 'reloadMetadata',\r\n isAjax: true,\r\n docId: props?.docId,\r\n docTypeId: props?.docTypeId,\r\n metadata: this.getConfirmDropModalMetadataString({\r\n metadata: this.modalController?.allMetadata,\r\n }),\r\n prefix: this.type,\r\n ...additionalProps,\r\n }),\r\n ),\r\n );\r\n\r\n if (res?.data && props?.docTypeId) {\r\n const isFreeMetadata =\r\n this.state.allowedTypes.find(\r\n (current) => current.id === props.docTypeId,\r\n )?.free ?? false;\r\n\r\n this.modalController!.state.metadata.metadataArray = arrayOrArray(\r\n res.data.metadata,\r\n );\r\n this.modalController!.state.metadata.isFreeMetadata = isFreeMetadata;\r\n }\r\n }\r\n\r\n public async saveDroppedFiles(\r\n unprocessedFiles: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): Promise<boolean> {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const {\r\n langId,\r\n strictMode: isConfStrictMode = false,\r\n translatingFile,\r\n } = conf ?? {};\r\n const isStrictMode =\r\n isConfStrictMode ||\r\n !!this.state.versioningFile ||\r\n !!this.modalController?.state.fromDirectoryFile;\r\n\r\n const docType = this.getCurrentDocTypeId();\r\n\r\n if (!isStrictMode && !docType) {\r\n this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_DELETED}: ${unprocessedFiles\r\n .map((current) => current.name)\r\n .join(', ')}.`,\r\n type: 'warning',\r\n });\r\n return false;\r\n }\r\n const allowedFiles = this.filterAlreadyUploadedFiles(\r\n this.filterByFilesAmountLimit(\r\n this.filterAcceptedFiles(\r\n this.filterExistingFiles(\r\n this.filterVersioningFiles(unprocessedFiles, conf),\r\n conf,\r\n ),\r\n true,\r\n docType as string,\r\n ),\r\n ),\r\n conf,\r\n );\r\n if (allowedFiles.length > 0) {\r\n const formData = new FormData();\r\n allowedFiles.forEach((file) =>\r\n formData.append('fileRepository', file, file.name),\r\n );\r\n\r\n await post(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getSaveDroppedFilesParameters({\r\n action: 'saveDroppedFiles',\r\n docId: this.state.versioningFile?.docId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n elemType: this.type,\r\n elemId: `prmDocumentContainter${this.type}`,\r\n frmOut: !this.modalController,\r\n docTypeId: this.state.selectedDocTypeId,\r\n langId,\r\n }),\r\n ),\r\n {\r\n postData: formData,\r\n axiosConfig: {\r\n onUploadProgress: (ev) =>\r\n (this.state.progress =\r\n (ev.loaded * 100) / ((ev.total ?? ev.loaded) * 2)),\r\n },\r\n },\r\n );\r\n const ajaxUploadFileStatusParameters =\r\n this.getAjaxUploadFileStatusParameters({\r\n action: 'ajaxUploadFileStatus',\r\n ajaxUrl: this.getAjaxUrl(),\r\n delayForDrop: true,\r\n isAjax: true,\r\n prefix: this.type,\r\n });\r\n\r\n let tries = 0;\r\n const checkUploadResult = async () => {\r\n // eslint-disable-next-line no-async-promise-executor\r\n return new Promise(async (resolve) => {\r\n tries += 1;\r\n if (tries === 10) {\r\n this.notify({\r\n message:\r\n 'Error while checking for uploadFileStatus, too many tries',\r\n type: 'error',\r\n });\r\n resolve(false);\r\n return;\r\n }\r\n const response = await post<TAjaxUploadFileStatus>(\r\n this.execution,\r\n makeApiaUrl(this.execution, ajaxUploadFileStatusParameters),\r\n );\r\n if (response && response.data) {\r\n const hasMessages =\r\n arrayOrArray<any>(\r\n response.data?.sysMessages?.message ??\r\n response.data?.sysExceptions?.exception ??\r\n response.data?.exceptions?.exception ??\r\n response.data.function.messages?.message,\r\n ).length > 0 || !!response.data.function.dropLastMessage;\r\n\r\n const uploadMessage = arrayOrArray(\r\n response.data.function.messages?.message,\r\n ).find((current) => current.name === 'message');\r\n if (uploadMessage)\r\n this.notify({ message: uploadMessage.label, type: 'warning' });\r\n\r\n const method = response.data?.function.name;\r\n this.state.progress = 44;\r\n if (hasMessages) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n if (method === 'fncProceedDocumentProcessing') {\r\n resolve(true);\r\n return;\r\n }\r\n if (tries === 10) {\r\n resolve(method === 'fncProceedDocumentProcessing');\r\n }\r\n setTimeout(() => {\r\n checkUploadResult()\r\n .then(resolve)\r\n .catch(() => resolve(false));\r\n }, 100);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n };\r\n const hasUploadedCorrectly = await checkUploadResult();\r\n\r\n this.state.progress = 66;\r\n\r\n if (hasUploadedCorrectly) {\r\n const shown = (this.state.inProgressFiles ?? []).map(\r\n (file) => file.name,\r\n );\r\n const postData = QueryString.stringify(\r\n this.getProcessDroppedFilesPostdata({\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId?.toString(),\r\n docTypePermittedObjType: this.type,\r\n dropped: allowedFiles.map((file) => file.name).concat(shown),\r\n shown,\r\n }),\r\n { arrayFormat: 'repeat' },\r\n );\r\n\r\n const secondResult = await post<TProcessDroppedFiles>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getProcessDroppedFilesParameters({\r\n action: 'processDroppedFiles',\r\n elemType: this.type,\r\n docId: this.state.versioningFile?.docId,\r\n frmOut: !this.modalController,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n {\r\n postData: postData.toString(),\r\n },\r\n );\r\n\r\n this.state.progress = 83;\r\n\r\n if (secondResult?.data?.function?.principal?.docInfo) {\r\n const acceptedByServerFiles = arrayOrArray(\r\n secondResult.data.function?.principal?.docInfo,\r\n );\r\n\r\n this.state.inProgressFiles = [\r\n ...(this.state.inProgressFiles ?? []),\r\n ...acceptedByServerFiles\r\n .map((current) =>\r\n [...this.state.inProgressFiles, ...unprocessedFiles].find(\r\n (search) => search.name === current.docInfoName,\r\n ),\r\n )\r\n .filter((current): current is File => !!current),\r\n ];\r\n this.state.progress = 100;\r\n\r\n if (this.modalController)\r\n this.modalController.state.fromDirectoryFile = null;\r\n\r\n this.notify({\r\n type: 'success',\r\n message: getWindow(this.execution).FILE_UPLOADED_SUCCESSFULLY,\r\n });\r\n if (\r\n isOneClickUploadEnabled(\r\n this.execution,\r\n this.modalConfig.oneClickUpload,\r\n )\r\n ) {\r\n if (langId && translatingFile)\r\n void this.confirmDropModal({ langId, translatingFile });\r\n else void this.confirmDropModal();\r\n }\r\n }\r\n }\r\n this.state.progress = 100;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n async checkWebDavLock(docId: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n let tries = 10;\r\n const checkLockAction = async () => {\r\n const isLocked = await post<{ locked: boolean }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getCheckWebDavLockParameters({\r\n action: 'isWebDavDocumentLocked',\r\n docId,\r\n ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX,\r\n }),\r\n ),\r\n );\r\n if (\r\n isLocked?.data?.locked === true ||\r\n isLocked?.data?.locked === undefined\r\n ) {\r\n if (--tries > 0) {\r\n setTimeout(() => void checkLockAction(), 1000);\r\n } else {\r\n this.notify({\r\n message: getWindow(this.execution).MSG_FAIL_SYNC_DOCUMENT,\r\n });\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(true);\r\n }\r\n };\r\n void checkLockAction();\r\n });\r\n }\r\n\r\n async checkSignature(file: TUploaderFileInfo) {\r\n let res = null;\r\n if (Number(file.docId) >= 0)\r\n res = await get<{ markedToSign: boolean }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'viewDocSigns',\r\n docId: file.docId,\r\n lock: false,\r\n isAjax: true,\r\n prefix: this.type,\r\n react: true,\r\n }),\r\n );\r\n return res;\r\n }\r\n\r\n async editDocument(id: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if ((await this.checkLockDocument(file.docId)) === true) {\r\n const result = await post<{ folderId: string }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getEditDocumentParameters({\r\n action: 'updateWebDavDocument',\r\n docId: file.docId,\r\n prefix: this.type,\r\n isAjax: true,\r\n }),\r\n ),\r\n );\r\n if (result?.data?.folderId) {\r\n const sDocumentUrl = `${getWindow(this.execution).WEBDAV_SERVER}${\r\n result?.data?.folderId\r\n }/${file.docId}/${file.name || file.docName || ''}`;\r\n\r\n const ProtocolInstallMessage = () => {\r\n this.notify({\r\n type: 'warning',\r\n message: getWindow(this.execution).MSG_NO_DOC_EDIT_PROTOCOL,\r\n title: getWindow(this.execution).LBL_EDIT,\r\n });\r\n };\r\n\r\n (getWindow(this.execution).avoidLoadEvents as any) = true;\r\n (\r\n getWindow(this.execution).ITHit as any\r\n ).WebDAV.Client.DavConstants.ProtocolTimeoutMs = 10000;\r\n\r\n await (\r\n getWindow(this.execution).ITHit as any\r\n ).WebDAV.Client.DocManager.DavProtocolEditDocument(\r\n sDocumentUrl,\r\n getWindow(this.execution).WEBDAV_SERVER,\r\n ProtocolInstallMessage,\r\n null,\r\n 'Current',\r\n 'ApiaWebDavCookie', // Cookie(s) to copy.\r\n '', // URL to navigate to if any cookie from the list is not found.\r\n 'Edit',\r\n );\r\n }\r\n }\r\n }\r\n\r\n async downloadVersion(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n docId: file.downloadDocId,\r\n version,\r\n }),\r\n );\r\n }\r\n\r\n async downloadDocument(id: string, version?: string) {\r\n const file = this.getDocument(id)!;\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n ) {\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n prefix: this.type,\r\n docId: file.downloadDocId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n version,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n async ajaxDeleteDocument(id: string, langId?: number) {\r\n const file = this.getDocument(id)!;\r\n const isLocked = await this.checkLockDocument(file.docId);\r\n if (isLocked === true) {\r\n const result = await post(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDeleteDocumentParameters({\r\n action: 'ajaxRemoveDocument',\r\n docId: file.docId,\r\n isAjax: true,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n langId,\r\n }),\r\n ),\r\n );\r\n\r\n if (this.evaluateDeleteDocumentResult(result?.data))\r\n this.deleteDocument(id);\r\n }\r\n }\r\n\r\n async version(\r\n file: TUploaderFileInfo,\r\n conf: {\r\n newFiles?: File[];\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n } = { newFiles: [] },\r\n ) {\r\n const checkLock = await this.checkLockDocument(file.docId, true);\r\n const isLocked = await this.checkWebDavLock(file.docId);\r\n\r\n // Si no está bloqueado correctamente, salir (misma lógica que antes)\r\n if (!(checkLock === true && isLocked)) return;\r\n\r\n // Guardamos el file en el state (como se hacía originalmente)\r\n this.state.versioningFile = file;\r\n\r\n const openVersionModal = () => {\r\n if (!this.modalConfig.oneClickUpload) {\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n {\r\n versionFile: file,\r\n },\r\n );\r\n this.modalController.openModal();\r\n }\r\n };\r\n\r\n // Si no vienen newFiles, abrir el modal ahora (igual que el código original)\r\n if (!conf.newFiles || conf.newFiles.length === 0) {\r\n openVersionModal();\r\n }\r\n\r\n await this.ajaxUploadStart();\r\n\r\n if (file.docTypeId) this.state.selectedDocTypeId = file.docTypeId;\r\n\r\n await this.versionFileInfo(file);\r\n\r\n const hasNewFiles = !!(conf.newFiles && conf.newFiles.length > 0);\r\n\r\n if (hasNewFiles) {\r\n const res = await this.saveDroppedFiles(conf.newFiles!, {\r\n langId: conf.langId,\r\n translatingFile: conf.translatingFile,\r\n shouldReset: false,\r\n strictMode: true,\r\n });\r\n\r\n // Si el guardado devuelve éxito, abrir el modal ahora (si aplica).\r\n if (res) {\r\n openVersionModal();\r\n }\r\n } else {\r\n await this.reloadMetadata({\r\n docId: file.docId,\r\n docTypeId: file.docTypeId,\r\n });\r\n }\r\n }\r\n\r\n async versionFileInfo(file: TUploaderFileInfo) {\r\n const documentInfo = await this.getDocumentInfo({ docId: file.docId });\r\n if (documentInfo?.function) {\r\n const {\r\n data: { general },\r\n metadatas,\r\n } = documentInfo.function;\r\n\r\n const isFreeMetadata =\r\n this.state.allowedTypes.find((current) => current.id === file.docTypeId)\r\n ?.free ?? false;\r\n if (this.modalController) {\r\n this.modalController!.state = {\r\n description: general.docDesc,\r\n docFolder:\r\n general.docFolder === '' ? undefined : Number(general.docFolder),\r\n docPath: general.docFolderPath,\r\n permissions: {\r\n allowAllType: general.docAllPoolPerm,\r\n users: arrayOrArray(\r\n documentInfo.function.data.permissions?.user,\r\n ).map((current) => {\r\n const returnObject: IUsersPermissions = {\r\n canUpdate: current.permType === 'M',\r\n userId: current.id,\r\n userLogin: current.name,\r\n };\r\n return returnObject;\r\n }),\r\n pools: arrayOrArray(\r\n documentInfo.function.data.permissions?.pool,\r\n ).map((current) => {\r\n const returnObject: IPoolsPermissions = {\r\n canUpdate: current.permType === 'M',\r\n poolId: current.id,\r\n poolName: current.name,\r\n };\r\n return returnObject;\r\n }),\r\n },\r\n docExpDate: general.docExpDate,\r\n fileReqError: false,\r\n fromDirectoryFile: null,\r\n metadata: {\r\n metadataArray: arrayOrArray(metadatas?.metadata),\r\n freeMetadataArray: [],\r\n isFreeMetadata: isFreeMetadata,\r\n },\r\n };\r\n }\r\n }\r\n }\r\n\r\n public async pickFileById(id: string) {\r\n const documentInfo = await this.getDocumentInfo(\r\n { downloadDocId: id },\r\n true,\r\n );\r\n if (documentInfo) {\r\n const document = documentInfo.function.data.general;\r\n const { permissions } = documentInfo.function.data;\r\n\r\n if (this.modalController) {\r\n this.modalController.addDirectoryFile(document);\r\n this.modalController.state.description = document.docDesc;\r\n this.modalController.state.docExpDate = document.docExpDate;\r\n this.modalController.state.permissions = {\r\n pools: arrayOrArray(permissions?.pool).map((c) => {\r\n return {\r\n poolId: c.id,\r\n poolName: c.name,\r\n canUpdate: c.permType === 'M',\r\n };\r\n }),\r\n users: [\r\n ...arrayOrArray(permissions?.user).map((c) => {\r\n return {\r\n userId: c.id,\r\n userLogin: c.name,\r\n canUpdate: c.permType === 'M',\r\n };\r\n }),\r\n ],\r\n allowAllType: document.docAllPoolPerm as '',\r\n };\r\n this.modalController.changeDocType(document.docTypeId);\r\n this.modalController.state.isReadonly =\r\n !documentInfo.function.currentUsrPems.usrCanModify;\r\n }\r\n\r\n void this.reloadMetadata(\r\n { docId: document.docId, docTypeId: document.docTypeId },\r\n {\r\n docReuse: true,\r\n },\r\n );\r\n }\r\n }\r\n\r\n async markFileToSign(id: string, langId?: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n this.state.files[id];\r\n if ((await this.checkLockDocument(file.docId)) === true) {\r\n const marked = await post<{ markedToSign: boolean }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getMarkFileToSignParameters({\r\n action: 'markDocTosign',\r\n docId: file.docId,\r\n isAjax: true,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n langId,\r\n }),\r\n ),\r\n );\r\n\r\n if (marked?.data?.markedToSign !== undefined) {\r\n if (this.state.files[id]) {\r\n this.state.files[id].markedToSign = marked.data.markedToSign;\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === id) {\r\n innerMap.set(langKey, {\r\n ...doc,\r\n markedToSign: marked?.data?.markedToSign ?? false,\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Por el momento realiza la descarga de todos los archivos\r\n * que estén subidos.\r\n */\r\n downloadMultipleDocuments() {\r\n const files = this.filesArray;\r\n if (files.length === 0) return;\r\n const docIds = this.state.selectedFiles;\r\n\r\n const selectedFiles = files.filter((current) =>\r\n docIds.find((search) => search === current.docId),\r\n );\r\n const ids = (selectedFiles.length > 0 ? selectedFiles : files)\r\n .map((current) => current.downloadDocId)\r\n .join('-');\r\n\r\n void downloadUrl(\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDownloadMultipleDocumentsParameters({\r\n action: 'multipleDownload',\r\n docId: ids,\r\n prefix: this.type,\r\n }),\r\n ),\r\n 'documents.zip',\r\n );\r\n }\r\n\r\n async confirmDropModal(conf?: {\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n }) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const { langId, translatingFile } = conf ?? {};\r\n\r\n const cmbDocType = this.state.selectedDocTypeId;\r\n const fromDirectoryFile = this.modalController?.state.fromDirectoryFile;\r\n const docDesc = this.modalController?.description ?? '';\r\n const docAllowAllType = this.modalConfig.oneClickUpload\r\n ? 'M'\r\n : (this.modalController?.allowAllType ?? '');\r\n const docFolder = this.modalController?.docFolder;\r\n const docExpDate = this.modalController?.docExpDate;\r\n const metadata = this.modalController?.metadata ?? [];\r\n const freeMetadata = this.modalController?.freeMetadata ?? [];\r\n\r\n const poolsPermissions =\r\n this.modalController?.state.permissions.pools ?? [];\r\n\r\n const usersPermissions =\r\n this.modalController?.state.permissions.users ?? [];\r\n\r\n let postData = QueryString.stringify(\r\n this.getConfirmDropModalPostdata({\r\n cmbDocType,\r\n docDesc,\r\n docAllowAllType,\r\n pe: this.docTypePermittedObjId?.toString(),\r\n dropped: this.state.inProgressFiles.map((file) => file.name),\r\n txtLangId: langId,\r\n txtLangGroup: translatingFile?.docLangGroup,\r\n docFolder: docFolder,\r\n }),\r\n { arrayFormat: 'repeat' },\r\n );\r\n\r\n postData = `${postData}${\r\n postData.length > 0 ? '&' : ''\r\n }${this.getConfirmDropModalPermissionsString({\r\n poolsPermissions,\r\n usersPermissions,\r\n })}&txtFreeMetadata=${this.getConfirmDropModalAdditionalMetadataString(\r\n freeMetadata,\r\n )}&txtMetadata=${this.getConfirmDropModalMetadataString({\r\n metadata: Object.values(metadata || {}),\r\n })}&docExpDate=${docExpDate ?? ''}`;\r\n\r\n const result = await post<TConfirmDropModal>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getConfirmDropModalParameters({\r\n ajaxUrl: this.getAjaxUrl(),\r\n docId: fromDirectoryFile\r\n ? fromDirectoryFile.docId\r\n : this.state.versioningFile?.docId,\r\n action: fromDirectoryFile\r\n ? 'associateExistingFile'\r\n : 'confirmDropModal',\r\n elemType: this.type,\r\n fromForm: true,\r\n ...(fromDirectoryFile\r\n ? {\r\n docId: fromDirectoryFile.docId,\r\n fromReuse: true,\r\n uploadDocument: false,\r\n }\r\n : null),\r\n }),\r\n ),\r\n {\r\n postData: postData.toString(),\r\n },\r\n );\r\n\r\n if (result?.data?.function) {\r\n const currentFiles = { ...this.state.files };\r\n const versioningFile = this.state.versioningFile;\r\n\r\n if (versioningFile && versioningFile.name) {\r\n delete currentFiles[versioningFile.name];\r\n }\r\n const newFiles: Record<string, TUploaderFileInfo> = arrayOrArray(\r\n result.data.function.general,\r\n )\r\n .map((current) =>\r\n this.parseFileDefinition({\r\n ...current,\r\n canWrite: true,\r\n canRead: true,\r\n canEdit: true,\r\n }),\r\n )\r\n .filter((current) => !currentFiles[current.docId])\r\n .reduce((acc, current) => ({ ...acc, [current.docId]: current }), {});\r\n\r\n if (langId && translatingFile) {\r\n const firstFile = Object.values(newFiles)[0];\r\n this.setTranslationFile(firstFile, translatingFile.docId, langId);\r\n } else {\r\n this.state.files = { ...currentFiles, ...newFiles };\r\n }\r\n this.state.inProgressFiles = [];\r\n this.emit('fileUploaded', null);\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n async loadCurrentDocuments() {\r\n const result = await post<\r\n TApiaLoad<TApiaFunction<TUploaderLoadCurrentFunction, false>>\r\n >(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: this.getAjaxUrl(),\r\n action: 'ajaxLoadCurrent',\r\n isAjax: true,\r\n readOnly: getWindow(this.execution).IS_READONLY,\r\n allowLock: true,\r\n allowSign: true,\r\n allowMultiple: true,\r\n prefix: this.type,\r\n }),\r\n {},\r\n );\r\n\r\n if (result && result.data) {\r\n const currentConfiguration: TUploaderLoadCurrentFunctionMessages =\r\n arrayOrArray(result.data.function.messages.message).reduce(\r\n (prev, { name, label }) => ({ ...prev, [name]: Boolean(label) }),\r\n {} as TUploaderLoadCurrentFunctionMessages,\r\n );\r\n\r\n const currentFiles: TUploaderFileInfo[] = result.data.function.general\r\n ? arrayOrArray(result.data.function.general).map(\r\n this.parseFileDefinition,\r\n )\r\n : [];\r\n\r\n this.currentConfiguration = currentConfiguration;\r\n const nonTranslationFiles: TUploaderFileInfo[] = [];\r\n const translationFiles: TUploaderFileInfo[] = [];\r\n currentFiles.forEach((current) => {\r\n if (current.docLang === undefined) nonTranslationFiles.push(current);\r\n else translationFiles.push(current);\r\n });\r\n\r\n nonTranslationFiles.forEach((c) => {\r\n this.state.files[c.docId] = c;\r\n });\r\n translationFiles.forEach((current) => {\r\n const originalFile = nonTranslationFiles.find(\r\n (search) => search.docLangGroup === current.docLangGroup,\r\n );\r\n if (originalFile && current.docLang !== undefined) {\r\n this.setTranslationFile(\r\n current,\r\n originalFile.docId,\r\n Number(current.docLang),\r\n );\r\n } else\r\n console.warn(\r\n `The following file is translated but has no orignal file`,\r\n current,\r\n nonTranslationFiles,\r\n );\r\n });\r\n }\r\n }\r\n\r\n async lockDocument(id: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if (file.markedToSign) {\r\n this.notify({\r\n message: getWindow(this.execution).CANT_UNLOCK_MARKED_TO_SIGN,\r\n type: 'warning',\r\n });\r\n return;\r\n }\r\n if (!file.isLocked || !file.isLockedByMe) {\r\n const isLocked = await this.checkLockDocument(file.docId, false);\r\n this.updateDocument(\r\n id,\r\n typeof isLocked === 'string'\r\n ? this.parseFileDefinition({\r\n ...file,\r\n userLocking: isLocked,\r\n lock: true,\r\n isLocked: true,\r\n lockedBy: isLocked,\r\n })\r\n : { ...file, isLocked },\r\n );\r\n }\r\n\r\n const result = await post<\r\n TApiaFunction<\r\n {\r\n data: {\r\n general: {\r\n docId: string;\r\n locked: boolean;\r\n prefix: string;\r\n userLocking: string;\r\n };\r\n };\r\n },\r\n false\r\n >\r\n >(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getLockDocumentParameters({\r\n action: 'lockDocument',\r\n ajaxUrl: this.getAjaxUrl(),\r\n docId: file.docId,\r\n lock: file.isLocked || file.locked,\r\n isAjax: true,\r\n prefix: this.type,\r\n }),\r\n ),\r\n );\r\n\r\n if (result?.data) {\r\n const resultFile = result.data.function?.data?.general;\r\n if (resultFile)\r\n this.updateDocument(\r\n resultFile.docId,\r\n this.parseFileDefinition({\r\n ...file,\r\n ...resultFile,\r\n isLocked: resultFile.locked,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n protected evaluateDeleteDocumentResult(result: unknown) {\r\n return (\r\n (\r\n result as\r\n | undefined\r\n | TApiaLoad<\r\n TApiaFunction<\r\n {\r\n general: {\r\n docId: string;\r\n prefix: string;\r\n };\r\n },\r\n false\r\n >\r\n >\r\n )?.function?.name === 'fncDocumentRemove'\r\n );\r\n }\r\n\r\n public setTranslationFile(\r\n file: TUploaderFileInfo,\r\n docId: string,\r\n langId: number,\r\n ) {\r\n if (!this.state.translatedFiles.has(docId)) {\r\n this.state.translatedFiles.set(docId, new Map());\r\n }\r\n this.state.translatedFiles.get(docId)?.set(langId, file);\r\n }\r\n\r\n protected getAjaxUploadFileStatusParameters = returnExactlyTheSame;\r\n\r\n protected getAjaxUploadStartParameters = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalParameters = returnExactlyTheSame;\r\n\r\n protected getCheckLockDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getCheckWebDavLockParameters = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalPostdata = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalMetadataString = ({\r\n metadata,\r\n }: {\r\n metadata: TDocumentMetadata[];\r\n }) => {\r\n return (\r\n metadata\r\n ?.filter?.((current) => !!current.value)\r\n .map((current) => `${current.id}~${current.type}~${current.value}`)\r\n .join(';') ?? []\r\n );\r\n };\r\n\r\n protected getConfirmDropModalPermissionsString = ({\r\n poolsPermissions,\r\n usersPermissions,\r\n }: {\r\n poolsPermissions: IPoolsPermissions[];\r\n usersPermissions: IUsersPermissions[];\r\n }) => {\r\n let returnString = '';\r\n\r\n poolsPermissions.forEach(\r\n (current) =>\r\n (returnString = `${returnString}${\r\n returnString.length > 0 ? '&' : ''\r\n }docPoolId=${current.poolId}&docPoolName=${\r\n current.poolName\r\n }&docPermType${current.poolId}=${String(current.canUpdate)}`),\r\n );\r\n\r\n usersPermissions.forEach(\r\n (current) =>\r\n (returnString = `${returnString}${\r\n returnString.length > 0 ? '&' : ''\r\n }docUserId=${current.userId}&docUsrLogin=${\r\n current.userLogin\r\n }&docPermType${current.userId}=${String(current.canUpdate)}`),\r\n );\r\n\r\n return returnString;\r\n };\r\n\r\n protected getConfirmDropModalAdditionalMetadataString = (\r\n additionalMetadata: TDocumentMetadata[] | [],\r\n ) => {\r\n return Object.values(additionalMetadata)\r\n .filter((current) => !!current?.value)\r\n .map((current) => `${current.name}~${current.value}`)\r\n .join(';');\r\n };\r\n\r\n protected getDeleteDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getClearTempFilesParameters = returnExactlyTheSame;\r\n\r\n protected getDocumentInfoParameters = returnExactlyTheSame;\r\n\r\n protected getDownloadMultipleDocumentsParameters = returnExactlyTheSame;\r\n\r\n protected getEditDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getLockDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getMarkFileToSignParameters = returnExactlyTheSame;\r\n\r\n protected getProcessDroppedFilesParameters = returnExactlyTheSame;\r\n\r\n protected getProcessDroppedFilesPostdata = returnExactlyTheSame;\r\n\r\n protected getReloadMetadataParameters = returnExactlyTheSame;\r\n\r\n protected getSaveDroppedFilesParameters = returnExactlyTheSame;\r\n\r\n protected filterAlreadyUploadedFiles(\r\n files: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): File[] {\r\n const versioningFile = this.state.versioningFile;\r\n if (versioningFile) return files;\r\n\r\n const uploadedFiles = Object.values(this.state.files).filter(\r\n (file) => Number(file.docId) > 0,\r\n );\r\n const existingFiles: File[] = [];\r\n const nonExistingFiles: File[] = [];\r\n if (conf?.langId) {\r\n const docId = conf.translatingFile?.docId ?? Infinity;\r\n const translationsMap = this.state.translatedFiles.get(String(docId));\r\n const alreadyUploadedToTranslationsFile = translationsMap\r\n ? Array.from(translationsMap.values()).find(\r\n (current) => (current.docName || current.name) === files[0]?.name,\r\n )\r\n : undefined;\r\n if (alreadyUploadedToTranslationsFile) existingFiles.push(files[0]);\r\n } else\r\n files.forEach((file) => {\r\n if (uploadedFiles.find((search) => search.docName === file.name)) {\r\n existingFiles.push(file);\r\n } else nonExistingFiles.push(file);\r\n });\r\n if (existingFiles.length > 0) {\r\n void this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${existingFiles\r\n .map((current) => current.name)\r\n .join(', ')}`,\r\n type: 'warning',\r\n });\r\n return nonExistingFiles;\r\n }\r\n return files;\r\n }\r\n\r\n protected filterByFilesAmountLimit(files: File[]): File[] {\r\n return files.slice(\r\n 0,\r\n addBoundary(this.maxFiles - (this.state.inProgressFiles?.length ?? 0), 0),\r\n );\r\n }\r\n\r\n protected filterAcceptedFiles(\r\n files: File[],\r\n shouldNotify = true,\r\n docTypeId?: string | TDocType,\r\n ): File[] {\r\n const docTypes =\r\n docTypeId !== undefined\r\n ? this.state.allowedTypes.filter((c) => {\r\n return typeof docTypeId === 'string'\r\n ? c.id === docTypeId\r\n : c.id === docTypeId.id;\r\n })\r\n : this.state.allowedTypes;\r\n\r\n if (!docTypes.find((c) => c.docExts === '')) {\r\n const notAllowedFilesBecauseOfExtension: File[] = [];\r\n const notAllowedFilesBecauseOfSize: File[] = [];\r\n let maxSize = Infinity;\r\n const allowedFiles = files.filter((currentFile) => {\r\n const extension = (currentFile.name.match(/\\.(\\w+)$/) ?? [])[1];\r\n\r\n let isAllowed = true;\r\n if (\r\n !docTypes.find((currentDocType) => {\r\n if (\r\n !currentDocType.docExts\r\n .split(';')\r\n .map((current) => current.toLowerCase())\r\n .includes(extension.toLowerCase())\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n ) {\r\n isAllowed = false;\r\n notAllowedFilesBecauseOfExtension.push(currentFile);\r\n }\r\n if (\r\n isAllowed &&\r\n !docTypes.find((currentDocType: any) => {\r\n if (Number(currentDocType.maxSize) < currentFile.size) {\r\n maxSize = Number(currentDocType.maxSize);\r\n return false;\r\n }\r\n return true;\r\n })\r\n ) {\r\n notAllowedFilesBecauseOfSize.push(currentFile);\r\n isAllowed = false;\r\n }\r\n\r\n if (!isAllowed) return false;\r\n\r\n return true;\r\n });\r\n\r\n if (shouldNotify) {\r\n let errorMessage = '';\r\n\r\n if (notAllowedFilesBecauseOfExtension.length > 0) {\r\n const filesNames = notAllowedFilesBecauseOfExtension.reduce(\r\n (accumulated, current) => {\r\n if (accumulated.length === 0) return current.name;\r\n return `${accumulated}, ${current.name}`;\r\n },\r\n '',\r\n );\r\n\r\n errorMessage = `<strong>${getWindow(this.execution).FILES_WRONG_EXT}</strong><br />${filesNames}`;\r\n }\r\n\r\n if (notAllowedFilesBecauseOfSize.length > 0) {\r\n const filesNames = notAllowedFilesBecauseOfSize.reduce(\r\n (accumulated, current) => {\r\n if (accumulated.length === 0) return current.name;\r\n return `${accumulated}, ${current.name}`;\r\n },\r\n '',\r\n );\r\n\r\n if (errorMessage.length > 0)\r\n errorMessage = `${errorMessage} <br /><br />`;\r\n errorMessage = `${errorMessage}${formatMessage(\r\n getWindow(this.execution).FILES_TOO_BIG,\r\n {\r\n TOK1: `<br />${filesNames}`,\r\n TOK2: `${parseAsSize(maxSize)}`,\r\n },\r\n )}`;\r\n }\r\n\r\n if (errorMessage.length > 0)\r\n this.notify({\r\n message: errorMessage,\r\n type: 'warning',\r\n });\r\n }\r\n\r\n return allowedFiles;\r\n }\r\n return files;\r\n }\r\n\r\n protected filterExistingFiles(\r\n files: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): File[] {\r\n if (conf?.langId) return files;\r\n\r\n const currentFiles = this.state.inProgressFiles;\r\n const alreadyUploadedFiles = Object.values(this.state.files).filter(\r\n (current) => Number(current.docId) < 0,\r\n );\r\n let alreadyIncludedFileNames = '';\r\n const filteredFiles = files.filter((current) => {\r\n const isIncluded =\r\n currentFiles.findIndex((search) => search.name === current.name) !==\r\n -1 ||\r\n alreadyUploadedFiles.findIndex(\r\n (search) => search.docName === current.name,\r\n ) !== -1;\r\n\r\n if (isIncluded)\r\n alreadyIncludedFileNames = `${alreadyIncludedFileNames}${\r\n alreadyIncludedFileNames.length > 0 ? ', ' : ''\r\n }${current.name}`;\r\n\r\n return !isIncluded;\r\n });\r\n if (alreadyIncludedFileNames.length > 0)\r\n this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${alreadyIncludedFileNames}`,\r\n type: 'warning',\r\n });\r\n return filteredFiles;\r\n }\r\n\r\n protected filterVersioningFiles(\r\n files: File[],\r\n conf?: {\r\n langId?: number;\r\n strictMode?: boolean;\r\n translatingFile?: TUploaderFileInfo;\r\n shouldReset?: boolean;\r\n },\r\n ): File[] {\r\n conf;\r\n const versioningFile = this.state.versioningFile;\r\n if (versioningFile) {\r\n const newFiles = files.filter(\r\n (current) =>\r\n current.name === versioningFile.docName ||\r\n current.name === versioningFile.name,\r\n );\r\n if (newFiles.length === 0) {\r\n this.notify({\r\n type: 'warning',\r\n message: getWindow(this.execution).LBL_DROP_FILE_NAMES_NOT_MATCH,\r\n });\r\n }\r\n return newFiles;\r\n }\r\n\r\n return files;\r\n }\r\n\r\n public parseFileDefinition = (file: TFileUploaded): TUploaderFileInfo => {\r\n return {\r\n ...parseFileDefinition(this.execution, file, false),\r\n canEdit: file.canEdit || file.canWrite,\r\n canRead: file.canRead,\r\n };\r\n };\r\n\r\n public getLoadFileSystemStructureTree(): Record<string, unknown> {\r\n return {\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n docTypePermittedObjType: this.type,\r\n };\r\n }\r\n\r\n public getLoadFilesForFolderParameters(): Record<string, unknown> {\r\n return {\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n docTypePermittedObjType: this.type,\r\n };\r\n }\r\n}\r\n","import { downloadUrl } from '@apia/util';\r\nimport { makeApiaUrl } from '../../../util';\r\nimport { File as ExeFile } from '../FormsExecution/fields';\r\nimport {\r\n TFileUploaded,\r\n TModalConfig,\r\n TSaveDroppedFilesConf,\r\n TUploaderFileInfo,\r\n} from './types';\r\nimport { parseFileDefinition, UploaderApi } from './UploaderApi';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport class FormsUploader extends UploaderApi {\r\n constructor(\r\n public execution: Execution,\r\n public type: 'E' | 'P',\r\n public modalConfig: TModalConfig,\r\n public field: ExeFile,\r\n ) {\r\n super(\r\n execution,\r\n `${type}_${field.attribute.id}_${field.definition.index ?? ''}`,\r\n type,\r\n modalConfig,\r\n );\r\n this.isEditionMode = getWindow(this.execution).IS_EDIT_GRID_MODAL\r\n ? true\r\n : undefined;\r\n }\r\n isEditionMode;\r\n index() {\r\n return this.field.definition.multIdx ?? this.field.definition.index ?? 0;\r\n }\r\n elemId() {\r\n return `dropUpprDiv${this.field.getForm().definition.frmParent}_${this.field.getForm().definition.id}_${this.field.definition.id}_${this.index()}${\r\n getWindow(this.execution).IS_EDIT_GRID_MODAL ? '_true_Mdl' : ''\r\n }`;\r\n }\r\n\r\n protected filterByFilesAmountLimit(files: File[]): File[] {\r\n const inProgressFiles = this.state.inProgressFiles;\r\n if (inProgressFiles.length === 1 && files.length)\r\n if (inProgressFiles[0].name !== files[0].name) {\r\n this.state.inProgressFiles = [];\r\n } else return [];\r\n return files.slice(0, 1);\r\n }\r\n\r\n protected getFormParameters() {\r\n return {\r\n frmId: this.field.getForm().definition.id,\r\n frmParent: this.field.getForm().definition.frmParent,\r\n attId: this.field.attribute.id,\r\n index: this.index(),\r\n editionMode: this.isEditionMode,\r\n prefix: this.field.getForm().definition.frmParent,\r\n };\r\n }\r\n\r\n evaluateDeleteDocumentResult(\r\n result: undefined | { success: boolean },\r\n ): boolean {\r\n return !!result?.success;\r\n }\r\n\r\n getAjaxUrl(): string {\r\n return '/apia.execution.FormAction.run';\r\n }\r\n\r\n getAllowedTypesData() {\r\n return {\r\n postData: {\r\n docTypeId: this.field.properties.docType,\r\n forDropElem: true,\r\n },\r\n queryData: {\r\n elemType: this.elemId(),\r\n fromFormElem: true,\r\n docTypeId: this.field.properties.docType,\r\n frmOut: true,\r\n ...this.getFormParameters(),\r\n },\r\n };\r\n }\r\n\r\n getAjaxUploadFileStatusParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n forceDocTypeId: this.field.properties.docType,\r\n\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getAjaxUploadStartParameters = ({\r\n useDocTypePermitted,\r\n docTypePermittedObjType,\r\n docTypePermittedObjId,\r\n ...defaultParameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n forceDocTypeId: this.field.properties.docType,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getCheckLockDocumentParameters = ({\r\n prefix,\r\n ...parameters\r\n }: Record<string, unknown>) => {\r\n return {\r\n ...parameters,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getCheckSignatureParameters = (parameters: Record<string, unknown>) => {\r\n const { frmId, frmParent } = this.getFormParameters();\r\n return {\r\n ...parameters,\r\n frmId,\r\n frmParent,\r\n };\r\n };\r\n\r\n getClearTempFilesParameters = ({\r\n elemType,\r\n ...rest\r\n }: Record<string, unknown>) => {\r\n const { frmId, frmParent, index, attId } = this.getFormParameters();\r\n return {\r\n ...rest,\r\n frmParent,\r\n frmId,\r\n attId,\r\n index,\r\n };\r\n };\r\n\r\n getConfirmDropModalParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const { frmParent } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n elemType: frmParent,\r\n forceDocTypeId: this.field.properties.docType,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getConfirmDropModalPostdata = ({\r\n pe,\r\n ...parameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n const { editionMode } = this.getFormParameters();\r\n return {\r\n ...parameters,\r\n editionMode,\r\n };\r\n };\r\n\r\n getDeleteDocumentParameters = ({\r\n prefix,\r\n isAjax,\r\n ...currentParameters\r\n }: Record<string, unknown>) => {\r\n const { prefix: pre, ...rest } = this.getFormParameters();\r\n return {\r\n ...currentParameters,\r\n ...rest,\r\n };\r\n };\r\n\r\n getDocumentInfoParameters = (parameters: Record<string, unknown>) => {\r\n return {\r\n ...parameters,\r\n ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX,\r\n };\r\n };\r\n\r\n getEditDocumentParameters = ({ action, docId }: Record<string, unknown>) => {\r\n const { prefix, editionMode, ...rest } = this.getFormParameters();\r\n return {\r\n action,\r\n ...rest,\r\n docId,\r\n ajaxUrl: 'apia.execution.FormAction.run',\r\n };\r\n };\r\n\r\n getLoadFilesForFolderParameters: () => Record<string, unknown> = () => {\r\n return {\r\n useDocTypePermitted:\r\n this.state.allowedTypes.length === 1 ? true : undefined,\r\n docTypeForcedId:\r\n this.state.allowedTypes.length === 1\r\n ? this.state.allowedTypes[0].id\r\n : undefined,\r\n txtCantDoc: 0,\r\n loadFolders: true,\r\n };\r\n };\r\n\r\n getLoadFileSystemStructureTree = () => ({\r\n useDocTypePermitted: this.state.allowedTypes.length === 1,\r\n docTypeForcedId: this.docTypePermittedObjId,\r\n });\r\n\r\n getLockDocumentParameters = ({\r\n prefix,\r\n isAjax,\r\n ...currentParameters\r\n }: Record<string, unknown>) => {\r\n const { prefix: pre, ...rest } = this.getFormParameters();\r\n return {\r\n ...currentParameters,\r\n ...rest,\r\n };\r\n };\r\n\r\n getMarkFileToSignParameters = ({\r\n docId,\r\n prefix,\r\n ...defaultParameters\r\n }: Record<string, unknown>) => {\r\n return {\r\n ...defaultParameters,\r\n action: 'sign',\r\n\r\n fldId: this.field.definition.id,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getProcessDroppedFilesParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const { prefix, ...rest } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n elemType: this.elemId(),\r\n fromFormElem: true,\r\n ...rest,\r\n };\r\n };\r\n\r\n getProcessDroppedFilesPostdata = ({\r\n useDocTypePermitted,\r\n docTypePermittedObjId,\r\n docTypePermittedObjType,\r\n ...parameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n return { ...parameters, editionMode: this.getFormParameters().editionMode };\r\n };\r\n\r\n getReloadMetadataParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n ...(getWindow(this.execution).IS_EDIT_GRID\r\n ? { editionMode: true }\r\n : null),\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getSaveDroppedFilesParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const elemId = this.elemId();\r\n const { prefix, ...rest } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n fromFormElem: true,\r\n elemType: elemId,\r\n elemId,\r\n ...rest,\r\n };\r\n };\r\n\r\n async downloadVersion(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n docId: file.downloadDocId,\r\n version,\r\n }),\r\n );\r\n }\r\n\r\n async downloadDocument(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n const { prefix, ...rest } = this.getFormParameters();\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'download',\r\n docId: file.downloadDocId,\r\n ajaxUrl: '/page/generic/downloadAttDoc.jsp',\r\n version,\r\n ...rest,\r\n }),\r\n );\r\n }\r\n\r\n loadCurrentDocuments(): Promise<void> {\r\n return null as any as Promise<void>;\r\n }\r\n\r\n public parseFileDefinition = (file: TFileUploaded): TUploaderFileInfo => {\r\n return {\r\n ...parseFileDefinition(\r\n this.execution,\r\n file,\r\n this.field.properties.reqSign || false,\r\n ),\r\n markedToSign: this.field.properties.reqSign || file.markedToSign,\r\n canEdit: file.canEdit ?? true,\r\n canRead: file.canRead ?? true,\r\n };\r\n };\r\n\r\n async saveDroppedFiles(\r\n unprocessedFiles: File[],\r\n conf?: TSaveDroppedFilesConf | undefined,\r\n ): Promise<boolean> {\r\n return await super.saveDroppedFiles(unprocessedFiles, conf);\r\n }\r\n}\r\n","import { labels } from '../../../../../util/labels/labels';\r\nimport { parseFakeJSON } from '../../../../../util/other/parseFakeJSON';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\nimport { TApiaFileProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport {\r\n FormsUploader,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n} from '../../../Uploader';\r\nimport { Form } from '../../Form';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class File extends FieldWithAttribute<TApiaFileProperties> {\r\n uploader: FormsUploader = {} as FormsUploader;\r\n\r\n async init(form: Form) {\r\n await super.init(form);\r\n\r\n this.uploader = new FormsUploader(\r\n this.form.execution,\r\n this.getForm().definition.frmParent,\r\n {\r\n allowDocumentsMonitor: !this.properties.fileNotShowDocMon,\r\n allowPickFromDirectories:\r\n this.properties.fileShwFoldTreeBtn !== undefined,\r\n collapseDirectories: !!this.properties.fileCollapseFldStrc,\r\n collapseMetadata: !!this.properties.fileCollapseMetadata,\r\n collapsePermissions: !!this.properties.fileCollapsePermission,\r\n defaultDirectory: this.properties.fileDefFolder,\r\n monitorId: this.properties.documentMonitorCus,\r\n oneClickUpload: !!this.properties.oneClickUpload,\r\n rootFolder: this.properties.fileRootFolder,\r\n showDirectoriesStructure: this.properties.fileShwFoldTreeStr === false,\r\n showExpDate: this.properties.fileExpDate === true,\r\n showMetadata: !this.properties.hideDocMetadata,\r\n showPermissions: !this.properties.hideDocPermissions,\r\n } as TModalConfig,\r\n this,\r\n );\r\n\r\n this.uploader.on('fileUploaded', () => {\r\n this.setError('');\r\n });\r\n\r\n this.uploader.init();\r\n if (this.definition.file_prp) {\r\n const files = parseFakeJSON(this.definition.file_prp) as Record<\r\n number,\r\n TUploaderFileInfo\r\n >;\r\n const mainFile = files[0];\r\n if (mainFile) {\r\n this.uploader.state.files = {\r\n [mainFile.docId]: { ...mainFile, docName: mainFile.name },\r\n };\r\n const otherEntries = Object.entries(files).filter(([k]) => k !== '0');\r\n if (otherEntries.length) {\r\n otherEntries.forEach(([k, file]) => {\r\n this.uploader.setTranslationFile(\r\n { ...file, docName: file.name },\r\n mainFile.docId,\r\n Number(k),\r\n );\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (\r\n this.properties.disabled ||\r\n this.properties.noModify ||\r\n this.properties.visibilityHidden\r\n ) {\r\n return true;\r\n } else if (\r\n this.properties.required &&\r\n Object.values(this.uploader.state.files).length == 0\r\n ) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n } else if (this.getForm().definition.frmParent !== 'P') {\r\n const langEntries: [number, string][] = Object.entries(\r\n parseFakeJSON(this.form.definition.langs || '{}') as Record<\r\n number,\r\n string\r\n >,\r\n ).map(([key, value]) => [Number(key), value]);\r\n\r\n const innerMap = [...this.uploader.state.translatedFiles.values()][0];\r\n\r\n const translationValid =\r\n !this.properties.required ||\r\n !this.getForm().definition.langs ||\r\n langEntries.every(([langId, langLabel]) => {\r\n const hasTranslation = innerMap?.has(langId);\r\n if (!hasTranslation) {\r\n this.state.validation.errorMessage = labels.errorTranslateRequired(\r\n this.form.execution,\r\n langLabel,\r\n );\r\n }\r\n return hasTranslation;\r\n });\r\n return translationValid;\r\n }\r\n return true;\r\n }\r\n\r\n public async setValue(\r\n _newValue: any,\r\n _options?:\r\n | Partial<{ comparator: Comparator<any>; synchronize: boolean }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n return true;\r\n }\r\n\r\n public loadFromDefinition(def: string) {\r\n if (def) {\r\n const uploadedFile = parseFakeJSON(def ?? '')[0] as TUploaderFileInfo;\r\n\r\n if (uploadedFile) {\r\n this.uploader.state.files = {\r\n [uploadedFile.docId]: {\r\n ...uploadedFile,\r\n docName: uploadedFile.name,\r\n },\r\n };\r\n } else {\r\n this.uploader.state.files = {};\r\n }\r\n }\r\n }\r\n}\r\n","export function noNaN(number: unknown, defaultReturn = 0) {\r\n const returnNumber = Number(number);\r\n if (number === null || Number.isNaN(returnNumber)) return defaultReturn;\r\n return returnNumber;\r\n}\r\n","import { makeObservable, observable, runInAction } from 'mobx';\r\nimport { Grid } from '.';\r\n\r\ntype GridFooterHandlerState = {\r\n isSortUpDisabled: boolean;\r\n isSortDownDisabled: boolean;\r\n};\r\n\r\nexport class GridFooterHandler {\r\n state: GridFooterHandlerState = {\r\n isSortUpDisabled: true,\r\n isSortDownDisabled: true,\r\n };\r\n\r\n constructor(private grid: Grid) {\r\n makeObservable(this, { state: observable });\r\n this.init();\r\n }\r\n\r\n #unsubscribeTableEvents = () => {};\r\n private init() {\r\n this.#unsubscribeTableEvents();\r\n\r\n const controller = this.grid.controller;\r\n\r\n const u2 = controller.on('selectionChange', (selection) => {\r\n const { paged, currentPage, pages } = this.grid.properties;\r\n const isFirstPage = paged ? String(currentPage) === '1' : false;\r\n const isLastPage = paged ? String(currentPage) === String(pages) : false;\r\n\r\n runInAction(() => {\r\n this.state.isSortUpDisabled =\r\n selection.length === 0 ||\r\n !!(paged\r\n ? selection.find((c) => c.getContainer()?.getRowIndex(c) === 0) &&\r\n isFirstPage\r\n : selection.find((c) => c.getContainer()?.getRowIndex(c) === 0));\r\n this.state.isSortDownDisabled =\r\n selection.length === 0 ||\r\n !!(paged\r\n ? selection.find(\r\n (c) =>\r\n c.getContainer()?.getRowIndex(c) ===\r\n controller.body.rows.length - 1,\r\n ) && isLastPage\r\n : selection.find(\r\n (c) =>\r\n c.getContainer()?.getRowIndex(c) ===\r\n controller.body.rows.length - 1,\r\n ));\r\n });\r\n });\r\n this.#unsubscribeTableEvents = () => {\r\n u2();\r\n };\r\n }\r\n\r\n get showAddButton() {\r\n const { gridQuery, hideGridButtons, hideAddButton, hideIncludeButton } =\r\n this.grid.properties;\r\n return (\r\n !gridQuery && !hideGridButtons && !hideAddButton && !hideIncludeButton\r\n );\r\n }\r\n get showDelButton() {\r\n const { gridQuery, hideGridButtons, hideDelButton, hideIncludeButton } =\r\n this.grid.properties;\r\n return (\r\n !gridQuery && !hideGridButtons && !hideDelButton && !hideIncludeButton\r\n );\r\n }\r\n get showSortButtons() {\r\n const { gridQuery, hideGridButtons, hideOrderButton } =\r\n this.grid.properties;\r\n return !gridQuery && !hideGridButtons && !hideOrderButton;\r\n }\r\n get isSortUpDisabled() {\r\n return this.state.isSortUpDisabled || this.grid.state.isLoading;\r\n }\r\n get isSortDownDisabled() {\r\n return this.state.isSortDownDisabled || this.grid.state.isLoading;\r\n }\r\n get isAddDisabled() {\r\n return this.grid.state.isLoading;\r\n }\r\n get isDeleteDisabled() {\r\n return (\r\n this.grid.controller.getState('selection').size === 0 ||\r\n this.grid.state.isLoading\r\n );\r\n }\r\n\r\n async sortUp() {\r\n this.grid.sortUp();\r\n }\r\n\r\n async sortDown() {\r\n this.grid.sortDown();\r\n }\r\n\r\n async addRow() {\r\n await this.grid.addRow();\r\n }\r\n\r\n async deleteSelectedRows() {\r\n this.grid.deleteRows();\r\n }\r\n}\r\n","import { Cell } from '@apia/table2-controller';\r\nimport type { Field } from '../../Field';\r\n\r\nexport class GridCell extends Cell {\r\n getField() {\r\n return this.getState('properties')?.field as Field;\r\n }\r\n}\r\n","import { Cell } from '@apia/table2-controller';\r\nimport type { GridEditionModal } from './GridEditionModal';\r\nimport type { Grid } from '.';\r\n\r\nexport class AdditionalCell extends Cell {\r\n constructor(\r\n public grid: Grid,\r\n public getIndex: () => number,\r\n public remove: () => unknown,\r\n public openEditionModal?: (handler: GridEditionModal) => unknown,\r\n ) {\r\n super({ colName: 'additional' });\r\n }\r\n\r\n public get hasEditionModal() {\r\n return this.openEditionModal !== undefined;\r\n }\r\n}\r\n","import { Cell, type CellState } from '@apia/table2-controller';\r\nimport type { Grid } from '.';\r\nimport { Field } from '../../Field';\r\n\r\ntype HeaderCellState = CellState;\r\n\r\nexport class HeaderCell extends Cell<HeaderCellState> {\r\n constructor(\r\n public grid: Grid,\r\n state: CellState,\r\n ) {\r\n super(state);\r\n }\r\n\r\n sort() {\r\n this.grid.fireEvent('gridSort');\r\n }\r\n\r\n getField() {\r\n return this.getState('properties')?.field as Field;\r\n }\r\n}\r\n","import type { Field } from '../../Field';\r\n\r\n/**\r\n * Esta clase se encarga de recordar los campos que ya fueron accedidos,\r\n * optimizando el tiempo de acceso en grillas de gran tamaño.\r\n */\r\nexport class FieldsCache {\r\n private cached: Record<number, Record<number | string, Field<any>>> = {};\r\n\r\n private getIndex(index: number) {\r\n if (!this.cached[index]) this.cached[index] = {};\r\n return this.cached[index];\r\n }\r\n\r\n clear() {\r\n this.cached = {};\r\n }\r\n\r\n clearIndex(index: number) {\r\n delete this.cached[index];\r\n }\r\n\r\n get(index: number, id: number | string) {\r\n return this.getIndex(index)[id];\r\n }\r\n\r\n set(index: number, id: number | string, field: Field<any>) {\r\n this.getIndex(index)[id] = field;\r\n }\r\n\r\n swap(index1: number, index2: number) {\r\n const row1 = this.getIndex(index1);\r\n this.cached[index1] = this.getIndex(index2);\r\n this.cached[index2] = row1;\r\n }\r\n\r\n truncate(index: number) {\r\n Object.keys(this.cached).forEach((c) => {\r\n if (Number.parseInt(c) >= index) {\r\n delete this.cached[Number.parseInt(c)];\r\n }\r\n });\r\n }\r\n}\r\n","import { shallowEqual } from '@apia/util';\r\nimport { makeApiaUrl, post } from '../../../../../util';\r\nimport { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaInputProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaModalInputDefinition } from '../../../../InitialData/types/fields/TApiaModalInputDefinition';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { isFieldShowAsText } from '../../util/isFieldShowAsText';\r\nimport { SetValueOptions } from '../../types';\r\nimport { makeObservable, observable } from 'mobx';\r\n\r\ntype InputEvents = 'onChange' | 'onModalReturn';\r\ntype ModalInputValue = { showValue: string; storeValue?: string };\r\n\r\nexport class ModalInput extends FieldWithAttribute<\r\n TApiaInputProperties,\r\n ModalInputValue\r\n> {\r\n isLoading = false;\r\n\r\n constructor({ value, ...definition }: TApiaModalInputDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n ...definition.properties,\r\n },\r\n value: { storeValue: value, showValue: definition.qry_show_value },\r\n });\r\n\r\n makeObservable(this, { isLoading: observable });\r\n }\r\n\r\n fireEvent(\r\n eventName: InputEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n return (\r\n this.getValue().showValue !== '' && this.getValue().storeValue !== ''\r\n );\r\n }\r\n\r\n public async setValueFromInputWrite(value: string) {\r\n this.isLoading = true;\r\n try {\r\n if (\r\n isFieldShowAsText(this) ||\r\n shallowEqual(value, this.getValue().showValue) ||\r\n value === ''\r\n )\r\n return;\r\n if (value !== this.getValue().showValue) {\r\n const result = await post<{\r\n ret_value: { show_value: string; value: string };\r\n }>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n action: 'checkModalValue',\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n }),\r\n {\r\n postData: {\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n fldId: this.definition.id,\r\n attId: this.attribute.id,\r\n qryId: this.definition.qryId,\r\n index: this.definition.index,\r\n value,\r\n },\r\n postDataTreatment: 'stringify',\r\n },\r\n );\r\n\r\n if (result?.data?.ret_value) {\r\n const setValueResult = await this.setValue({\r\n storeValue: result?.data?.ret_value.value,\r\n showValue: result?.data?.ret_value.show_value,\r\n });\r\n if (setValueResult) {\r\n this.fireEvent('onChange');\r\n }\r\n this.setError('');\r\n } else {\r\n this.setValue({ showValue: '', storeValue: '' });\r\n this.setError(getWindow(this.form.execution).MSG_VAL_NOT_FOUND);\r\n }\r\n }\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n public async setValueFromModalSelection(rowId: string) {\r\n this.isLoading = true;\r\n\r\n try {\r\n const result = await post<{ row: { cell: string[] } }>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.query.ModalAction.run',\r\n action: 'getValues',\r\n }),\r\n { postData: { id: rowId }, postDataTreatment: 'stringify' },\r\n );\r\n\r\n if (result?.data?.row?.cell) {\r\n const setValueResult = await this.setValue({\r\n storeValue: result.data.row.cell[0],\r\n showValue: result.data.row.cell[1],\r\n });\r\n this.form.execution.setLastModalReturn(result.data.row.cell);\r\n\r\n if (setValueResult) {\r\n this.fireEvent('onModalReturn');\r\n this.fireEvent('onChange');\r\n }\r\n }\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.errorMessage) return false;\r\n\r\n const isValid =\r\n !!this.getValue().storeValue ||\r\n !this.properties.required ||\r\n this.properties.inputAsText ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n if (!isValid) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n public setValue(newValue: any, options?: SetValueOptions) {\r\n if (\r\n !options?.force &&\r\n (isFieldShowAsText(this) || shallowEqual(newValue, this.getValue()))\r\n )\r\n return Promise.resolve(true);\r\n\r\n this.state.value = newValue;\r\n this.state.validation.errorMessage = null;\r\n\r\n if (options?.synchronize === false) {\r\n this.lastSynchronizationValue = newValue;\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.synchronize(newValue).then((res) => {\r\n if (res) {\r\n if (options?.markAsDirty !== false) {\r\n this.form.execution.state.hasChangedAnything = true;\r\n }\r\n return true;\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: ModalInputValue,\r\n ): IApiaApiPostConfig<any> {\r\n const storeIdValue = this.properties.storeMdlQryResult;\r\n\r\n return {\r\n ...super.getSynchronizePostConfiguration(value),\r\n postData: {\r\n value: storeIdValue\r\n ? [this.getValue().storeValue!, this.getValue().showValue]\r\n : this.getValue().storeValue,\r\n },\r\n };\r\n }\r\n}\r\n","import { TApiaHiddenProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class Hidden extends FieldWithAttribute<TApiaHiddenProperties> {}\r\n","import { makeApiaUrl, parseXml, post } from '../../../../../util';\r\n\r\nimport type { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { noNaN } from '../../../../../util/number/noNaN';\r\nimport type {\r\n IApiaDataGridColumn,\r\n TApiaGridDefinition,\r\n TApiaGridField,\r\n} from '../../../../InitialData/types/fields/TApiaGridDefinition';\r\nimport { actions } from '../../constants/actions';\r\nimport type {\r\n FieldState,\r\n GridActionResponse,\r\n GridColumn,\r\n GridDefinition,\r\n GridEvents,\r\n GridProps,\r\n GridState,\r\n} from './types';\r\nimport { GridEditionModal } from './GridEditionModal';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport {\r\n FocusControllerPlugin,\r\n Row,\r\n TableController,\r\n} from '@apia/table2-controller';\r\nimport type { TApiaFieldBaseDefinition } from '../../../../InitialData/types/TApiaField';\r\nimport { Field } from '../../Field';\r\nimport type { Form } from '../../Form';\r\nimport { parseFakeJSON } from '../../../../../util/other/parseFakeJSON';\r\nimport { GridFooterHandler } from './GridFooterHandler';\r\nimport { GridCell } from './GridCell';\r\nimport { arrayOrArray, Mutex } from '@apia/util';\r\nimport type { FireEventParameters } from '../../types';\r\nimport { AdditionalCell } from './AdditionalCell';\r\nimport { setAjaxFormResponse } from '../../events/setAjaxFormResponse';\r\nimport { File } from '../File';\r\nimport { HeaderCell } from './HeaderCell';\r\nimport { TApiaFieldCommonProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldsCache } from './FieldsCache';\r\nimport { ModalInput } from '../ModalInput';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\nimport { getDocument } from '../../../../../util/dom/getDocument';\r\nimport { Hidden } from '../Hidden';\r\nimport type { Select } from '../Select';\r\n\r\nasync function inlineCaller<T>(cb: () => T, _t: number): Promise<T> {\r\n return cb();\r\n}\r\n\r\nasync function inlineTimeout(cb: () => unknown, _t: number): Promise<true> {\r\n setTimeout(cb, _t);\r\n\r\n return Promise.resolve(true);\r\n}\r\n\r\nexport class Grid extends Field<GridProps, GridDefinition, GridState> {\r\n private rowId = 0;\r\n\r\n protected cache = new FieldsCache();\r\n protected mutex = new Mutex();\r\n protected newRowStates: FieldState[][] = [];\r\n protected initialStates: FieldState[][];\r\n protected fieldsDefinitions: TApiaFieldBaseDefinition<Record<string, any>>[];\r\n\r\n protected readonly managedAttIds = new Set<string | number>();\r\n protected readonly managedAttNames = new Set<string>();\r\n protected readonly managedFieldIds = new Set<string | number>();\r\n protected readonly managedFieldsNames = new Set<string>();\r\n\r\n protected _editionModalHandler: GridEditionModal | null = null;\r\n protected readonly _footerController: GridFooterHandler;\r\n protected readonly tableController: TableController = new TableController({\r\n allowEdition: true,\r\n allowSelection: true,\r\n isSelectionMultiple: true,\r\n });\r\n\r\n public get controller() {\r\n return this.tableController;\r\n }\r\n\r\n public get currentPage() {\r\n return this.properties.currentPage;\r\n }\r\n\r\n public get editionModalHandler() {\r\n return this._editionModalHandler;\r\n }\r\n\r\n /**\r\n * Returns the final index of the current page\r\n */\r\n public get finalIndex() {\r\n return (\r\n this.controller.body.rows\r\n .at(-1)\r\n ?.cells.find((c) => c instanceof GridCell) as GridCell\r\n ).getField().definition.index!;\r\n }\r\n\r\n public get footerController() {\r\n return this._footerController;\r\n }\r\n\r\n public get header() {\r\n return this.state.header;\r\n }\r\n\r\n public get isPaged() {\r\n return this.properties.paged;\r\n }\r\n\r\n public get length() {\r\n return this.tableController.body.rows.length;\r\n }\r\n\r\n public get minIndex() {\r\n return Number.isFinite(this.properties.pageSize)\r\n ? (this.properties.currentPage - 1) * this.properties.pageSize\r\n : 0;\r\n }\r\n\r\n public get pageCount() {\r\n return this.properties.pages;\r\n }\r\n\r\n public get pageSize() {\r\n return this.properties.pageSize;\r\n }\r\n\r\n public get selectedIndices() {\r\n return [...this.tableController.getState('selection').values()].map(\r\n (c) => c.index,\r\n );\r\n }\r\n\r\n public get selectedItems() {\r\n return this.selectedIndices.map((current) => this.getRow(current)!);\r\n }\r\n\r\n public get startIndex() {\r\n const pageSize = this.properties.pageSize;\r\n return noNaN((this.properties.currentPage - 1) * pageSize, 0);\r\n }\r\n\r\n constructor({ properties, field, ...definition }: TApiaGridDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n currentPage: noNaN(definition.curPage, 1),\r\n maxRows: properties.maxRecords || Infinity,\r\n paged: false,\r\n pages: noNaN(definition.pages, 1),\r\n pageSize: noNaN(\r\n properties.pagedGridSize,\r\n properties.paged ? 5 : Infinity,\r\n ),\r\n\r\n shownDeleteButtons: new Map(),\r\n shownEditionButtons: new Map(),\r\n ...properties,\r\n hideDocInfoButton: String(properties.hideDocInfoButton) === 'true',\r\n },\r\n });\r\n\r\n this._footerController = new GridFooterHandler(this);\r\n\r\n const fieldsArray = arrayOrArray(field);\r\n this.initialStates = fieldsArray\r\n .map((current) =>\r\n current.fieldValue || current.row\r\n ? arrayOrArray(current.fieldValue || current.row)\r\n : undefined,\r\n )\r\n .filter(Boolean) as FieldState[][];\r\n this.fieldsDefinitions = fieldsArray.map(\r\n ({ fieldValue, properties, ...current }) => {\r\n return { ...current, properties: parseFakeJSON(properties) };\r\n },\r\n );\r\n\r\n this.state.header = arrayOrArray(definition.gridHeader.col).map((c) => ({\r\n fldId: c.fldId,\r\n label: c.colTitle,\r\n title: c.title,\r\n width: c.colWidth || this.resolveHeaderWidth(c),\r\n hidden: false,\r\n required: false,\r\n fldType: c.fldType,\r\n }));\r\n this.state.isLoading = false;\r\n this.state.isMaximized = false;\r\n\r\n this.controller.on('columnClick', (col) => {\r\n this.sortColumn((col.getState('properties')!.col as GridColumn).fldId);\r\n });\r\n }\r\n\r\n private resolveHeaderWidth(c: IApiaDataGridColumn) {\r\n if (\r\n c.fldType === '9' ||\r\n (c.fldType === '1' && c.dataType === 'D') ||\r\n (c.fldType === '1' && c.hasQuery)\r\n ) {\r\n return '200px';\r\n }\r\n\r\n return '150px';\r\n }\r\n\r\n protected getGridActionFromEventName(eventName: GridEvents) {\r\n switch (eventName) {\r\n case 'gridAdd':\r\n return 'add';\r\n case 'gridColumnSelect':\r\n return undefined;\r\n case 'gridDelete':\r\n return 'delete';\r\n case 'gridSort':\r\n return undefined;\r\n }\r\n }\r\n\r\n protected fireServerEvent(\r\n eventName: GridEvents,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n return super.fireServerEvent(eventName, {\r\n gridAction: this.getGridActionFromEventName(eventName),\r\n ...params,\r\n });\r\n }\r\n\r\n /**\r\n * Grid methods\r\n */\r\n public async addRow(): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridAdd')) {\r\n if (this.hasServerNoAjaxEventsOfType('gridAdd')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridAdd', {});\r\n } else {\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'add',\r\n addRowsCount: 1,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridAdd'),\r\n },\r\n });\r\n\r\n /**\r\n * Cuando no tengo la definición de la nueva fila, debo obtenerla.\r\n */\r\n const response = await res;\r\n if (response?.data?.gridXml) {\r\n /**\r\n * Si la definición vuelve del server, la establezco en una variable\r\n * local y la uso en el futuro, cada vez que se crea una nueva fila.\r\n */\r\n const xml = parseXml(response.data.gridXml) as TApiaGridDefinition;\r\n\r\n const fieldsArray = arrayOrArray(xml.field);\r\n this.newRowStates = fieldsArray\r\n .map((current) =>\r\n current.fieldValue || current.row\r\n ? arrayOrArray(current.fieldValue || current.row)\r\n : undefined,\r\n )\r\n .filter(Boolean) as FieldState[][];\r\n } else {\r\n /**\r\n * En caso de error, tiro excepción con o sin mensaje, pero la excepción\r\n * es necesaria para detener el flujo actual.\r\n */\r\n throw new Error(\r\n !getWindow(this.form.execution).SERVER_MODE\r\n ? 'Something went wrong on the add row action.'\r\n : '',\r\n );\r\n }\r\n\r\n const addedRow = await this.addRowFromDefinitions(\r\n true,\r\n this.fieldsDefinitions.map((c, i) => ({\r\n ...c,\r\n ...this.newRowStates[i][0],\r\n })),\r\n );\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de agregar la fila en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridAdd')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(async () => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n (await addedRow).remove();\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }, !this.hasServerAjaxEventsOfType('gridAdd'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public closeEditionModal() {\r\n this._editionModalHandler?.close();\r\n this._editionModalHandler = null;\r\n this.refresh();\r\n }\r\n\r\n public async deleteAllRows() {\r\n this.cache.clear();\r\n\r\n return this.asyncAction(async () => {\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'delete',\r\n fireEvents: this.hasServerAjaxEventsOfType('gridDelete'),\r\n },\r\n });\r\n\r\n /**\r\n * Me copio el array de filas y la selección actual para poder restaurarlo\r\n * en caso de error.\r\n */\r\n const currentRows = [...this.tableController.body.rows];\r\n const currentSelection = new Set(\r\n this.tableController.getState('selection'),\r\n );\r\n\r\n this.controller.body.clear();\r\n this.tableController.clearSelection();\r\n\r\n if (\r\n this.tableController.body.rows.length === 0 &&\r\n this.getProperty('includeFirstRow')\r\n ) {\r\n /**\r\n * La propiedad includeFirstRow obliga a un comportamiento diferente.\r\n * Con el llamado a actualRefreshAction nos aseguramos de establecer\r\n * sincronía con el servidor. Además, esta acción debería ser relativamente\r\n * económica debido a que no debería traer más que una fila.\r\n */\r\n await res;\r\n await this.actualRefreshAction();\r\n }\r\n\r\n /**\r\n * Restauro la selección a un nuevo índice. Este índice se corresponde con el\r\n * mínimo índice eliminado si es que este aún existe, sino se intenta con el\r\n * índice inmediatamente anterior. Si no existe, no hay ninguna fila para seleccionar.\r\n *\r\n * El foco sin embargo se restaura siempre, en caso de no haber filas seleccionables,\r\n * se restablece en el cabezal de la tabla.\r\n */\r\n (\r\n this.tableController.body.getRowByIndex(0) ||\r\n this.tableController.body.getRowByIndex(0 - 1)\r\n )?.toggleSelection(true);\r\n (\r\n this.tableController.body.getRowByIndex(0) ||\r\n this.tableController.body.getRowByIndex(0 - 1) ||\r\n this.tableController.head.getRowByIndex(0)\r\n ).scrollIntoView();\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de eliminar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n /**\r\n * En caso de error, restauro la selección y las filas eliminadas.\r\n */\r\n this.tableController.body.setState('rows', currentRows);\r\n this.tableController.setState('selection', currentSelection);\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * @param index Si se pasa, se borran el o los índices provistos. Sino, se borran las filas seleccionadas, si es que hay alguna.\r\n */\r\n public async deleteRows(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridDelete')) {\r\n /**\r\n * Debo igualar la selección de la tabla con los índices a eliminar.\r\n * De esta manera garantizo su correcto acceso desde los eventos script.\r\n */\r\n if (undefined === index) {\r\n index = [...this.controller.getState('selection')].map((c) => {\r\n return c.index;\r\n });\r\n } else {\r\n this.controller.setSelection(arrayOrArray(index));\r\n }\r\n\r\n const deletingIndices = arrayOrArray(index).sort((a, b) => b - a);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridDelete')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridDelete', {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n });\r\n } else {\r\n let minIndex = Infinity;\r\n\r\n /**\r\n * Busco el mínimo índice de forma de poder restablecer la selección\r\n * luego de eliminar las filas.\r\n */\r\n deletingIndices.forEach((i) => {\r\n if (i < minIndex) {\r\n minIndex = i;\r\n }\r\n });\r\n\r\n this.cache.truncate(minIndex);\r\n\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridDelete'),\r\n },\r\n });\r\n\r\n /**\r\n * Me copio el array de filas y la selección actual para poder restaurarlo\r\n * en caso de error.\r\n */\r\n const currentRows = [...this.tableController.body.rows];\r\n const currentSelection = new Set(\r\n this.tableController.getState('selection'),\r\n );\r\n\r\n deletingIndices.forEach((c) =>\r\n this.controller.body.getRowByIndex(c).remove(),\r\n );\r\n for (let i = minIndex; i < this.controller.body.rows.length; i++) {\r\n this.controller.body.getRowByIndex(i).cells.forEach((c) => {\r\n if (c instanceof GridCell) {\r\n c.getField().definition.index = i;\r\n }\r\n });\r\n }\r\n this.tableController.clearSelection();\r\n\r\n if (\r\n this.tableController.body.rows.length === 0 &&\r\n this.getProperty('includeFirstRow')\r\n ) {\r\n /**\r\n * La propiedad includeFirstRow obliga a un comportamiento diferente.\r\n * Con el llamado a actualRefreshAction nos aseguramos de establecer\r\n * sincronía con el servidor. Además, esta acción debería ser relativamente\r\n * económica debido a que no debería traer más que una fila.\r\n */\r\n await res;\r\n await this.actualRefreshAction();\r\n }\r\n\r\n /**\r\n * Restauro la selección a un nuevo índice. Este índice se corresponde con el\r\n * mínimo índice eliminado si es que este aún existe, sino se intenta con el\r\n * índice inmediatamente anterior. Si no existe, no hay ninguna fila para seleccionar.\r\n *\r\n * El foco sin embargo se restaura siempre, en caso de no haber filas seleccionables,\r\n * se restablece en el cabezal de la tabla.\r\n */\r\n (\r\n this.tableController.body.getRowByIndex(minIndex) ||\r\n this.tableController.body.getRowByIndex(minIndex - 1)\r\n )?.toggleSelection(true);\r\n (\r\n this.tableController.body.getRowByIndex(minIndex) ||\r\n this.tableController.body.getRowByIndex(minIndex - 1) ||\r\n this.tableController.head.getRowByIndex(0)\r\n ).scrollIntoView();\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de eliminar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridDelete')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(async () => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n /**\r\n * En caso de error, restauro la selección y las filas eliminadas.\r\n */\r\n this.tableController.body.setState('rows', currentRows);\r\n this.tableController.setState('selection', currentSelection);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridDelete'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async fireScriptEvent(eventName: GridEvents): Promise<boolean> {\r\n return super.fireScriptEvent(eventName);\r\n }\r\n\r\n public async fireEvent(\r\n eventName: GridEvents,\r\n params?: FireEventParameters & { mutex: boolean },\r\n ): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n return super.fireEvent(eventName, params);\r\n }, params?.mutex);\r\n }\r\n\r\n public getAllColumns() {\r\n return [...Object.values(this.fieldsDefinitions)].map((f) =>\r\n this.tableController.body.rows.map((c) =>\r\n (c.getCellByColumnName(f.id) as GridCell).getField(),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * @param field - Nombre del campo o del atributo\r\n */\r\n public getColumn(field: string) {\r\n return this.getField(field);\r\n }\r\n\r\n public getCurrentPage() {\r\n return 0;\r\n }\r\n\r\n /**\r\n * @param field - Nombre del campo o del atributo\r\n */\r\n public getField(field: string, index?: number): Field | Field[] | undefined {\r\n return (\r\n this.getFieldByName(field, index) ||\r\n this.getFieldByAttributeName(field, index)\r\n );\r\n }\r\n\r\n public getFieldByAttributeId(\r\n attId: string | number,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedAttIds.has(attId)) {\r\n if (index !== undefined) {\r\n return this.getRowByFieldIndex(index)?.find(\r\n (c) => (c as FieldWithAttribute).attribute.id === attId,\r\n );\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as FieldWithAttribute)\r\n ?.attribute.id === attId,\r\n )\r\n ?.getState('properties')!.field as FieldWithAttribute,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldByAttributeName(\r\n attName: string,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedAttNames.has(attName)) {\r\n if (index !== undefined) {\r\n return this.getRowByFieldIndex(index)?.find(\r\n (c) => (c as FieldWithAttribute).attribute.name === attName,\r\n );\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as FieldWithAttribute)\r\n ?.attribute.name === attName,\r\n )\r\n ?.getState('properties')!.field as FieldWithAttribute,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldById(\r\n id: string | number,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedFieldIds.has(String(id))) {\r\n if (index !== undefined) {\r\n const found =\r\n this.cache.get(index, id) ||\r\n this.getRow(index)?.find((c) => c.definition.id === id);\r\n\r\n this.cache.set(index, id, found);\r\n\r\n return found;\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as Field)?.definition.id ===\r\n id,\r\n )\r\n ?.getState('properties')!.field as Field,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldByName(\r\n name: string,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedFieldsNames.has(name)) {\r\n if (index !== undefined) {\r\n return this.getRow(index)?.find((c) => c.properties.name === name);\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as Field)?.properties\r\n .name === name,\r\n )\r\n ?.getState('properties')!.field as Field,\r\n );\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public getRowByFieldIndex(index: number) {\r\n const row = this.tableController.body.rows.find(\r\n (c) =>\r\n (\r\n c.cells.find((current) => current instanceof GridCell) as GridCell\r\n )?.getField().definition.index === index,\r\n );\r\n if (row) {\r\n return row?.cells\r\n .filter((c) => c instanceof GridCell)\r\n .map((c) => (c as GridCell).getField());\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getSelectedRows() {\r\n return this.tableController\r\n .getSelectedRows()\r\n .map((c) => this.getRow(c.index));\r\n }\r\n\r\n refreshColumnsVisibilities() {\r\n const shownColumns = new Set<string>();\r\n\r\n for (\r\n let i = 0;\r\n i < this.tableController.body.rows[0]?.cells.length || 0;\r\n i++\r\n ) {\r\n for (const row of this.tableController.body.rows) {\r\n const cell = row.cells[i] as GridCell;\r\n\r\n const field = cell.getState('properties')?.field as Field;\r\n if (\r\n !(\r\n field &&\r\n (field.properties.visibilityHidden || field instanceof Hidden)\r\n ) ||\r\n cell instanceof AdditionalCell\r\n ) {\r\n shownColumns.add(cell.getState('colName'));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.tableController.setHiddenColumns(\r\n new Set(\r\n this.tableController.head.rows[0].cells\r\n .filter(\r\n (c) =>\r\n !(\r\n c instanceof AdditionalCell ||\r\n shownColumns.has(c.getState('colName'))\r\n ),\r\n )\r\n .map((c) => c.getState('colName')),\r\n ),\r\n );\r\n }\r\n\r\n public async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n const headerRow = new Row('header');\r\n if (\r\n this.properties.gridForm ||\r\n (!this.properties.hideDelButton &&\r\n !this.properties.readonly &&\r\n !this.properties.inputAsText &&\r\n !this.getForm().definition.readOnly &&\r\n !this.getForm().definition.readonly)\r\n )\r\n headerRow.addCell(\r\n new AdditionalCell(\r\n this,\r\n () => -1,\r\n () => {},\r\n ),\r\n );\r\n\r\n const hiddenColumns = new Set<string>();\r\n\r\n this.header.forEach((c) => {\r\n hiddenColumns.add(c.fldId);\r\n });\r\n\r\n for (const def of this.fieldsDefinitions) {\r\n if (!def.properties.visibilityHidden && def.fieldType !== 'hidden') {\r\n hiddenColumns.delete(def.id);\r\n }\r\n }\r\n\r\n for (let index = 0; index < this.initialStates[0]?.length || 0; index++) {\r\n await this.addRowFromDefinitions(\r\n false,\r\n this.fieldsDefinitions.map((c, i) => {\r\n return {\r\n ...c,\r\n ...this.initialStates[i][index],\r\n };\r\n }),\r\n );\r\n }\r\n\r\n this.header.forEach((col, i) => {\r\n let width = String(col.width || 200);\r\n if (!width.endsWith('px')) {\r\n width = `${width}px`;\r\n }\r\n\r\n headerRow.addCell(\r\n new HeaderCell(this, {\r\n colName: col.fldId || String(i),\r\n content: col.label,\r\n domProperties: {\r\n style: { width, maxWidth: width },\r\n title: col.title,\r\n },\r\n properties: { col },\r\n }),\r\n );\r\n });\r\n this.controller.setHiddenColumns(hiddenColumns);\r\n this.controller.head.addRow(headerRow);\r\n\r\n getDocument(this.form.execution).addEventListener?.('keydown', (ev) => {\r\n if (ev.code === 'Escape') {\r\n this.state.isMaximized = false;\r\n }\r\n });\r\n }\r\n\r\n public openEditionModal(handler: GridEditionModal) {\r\n this._editionModalHandler = handler;\r\n handler.open();\r\n }\r\n\r\n public async refresh() {\r\n return this.asyncAction(this.actualRefreshAction.bind(this));\r\n }\r\n\r\n public async sortColumn(fldId: string) {\r\n await this.fireEvent('gridColumnSelect', {\r\n firingField: fldId,\r\n mutex: true,\r\n });\r\n return true;\r\n }\r\n\r\n public async sortDown(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices).sort(\r\n (a, b) => b - a,\r\n );\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const currentRows = [...this.tableController.body.rows];\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'down',\r\n rowId: indices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridSort'),\r\n },\r\n });\r\n\r\n this.swapRows(indices, 'down');\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de ordenar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridSort')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(() => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (\r\n !(await res)?.data?.success ||\r\n !(await this.fireEvent('gridSort', { mutex: false }))\r\n ) {\r\n this.tableController.body.setState('rows', currentRows);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridSort'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async sortUp(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices).sort(\r\n (a, b) => a - b,\r\n );\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const currentRows = [...this.tableController.body.rows];\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'up',\r\n rowId: indices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridSort'),\r\n },\r\n });\r\n\r\n this.swapRows(indices, 'up');\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de ordenar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridSort')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(() => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (\r\n !(await res)?.data?.success ||\r\n !(await this.fireEvent('gridSort', { mutex: false }))\r\n ) {\r\n this.tableController.body.setState('rows', currentRows);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridSort'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public toggleColumnVisibility(fieldName: string, isShown?: boolean) {\r\n this.controller.toggleColumnVisibility(fieldName, isShown);\r\n }\r\n\r\n public toggleDeleteButton(rowIndex: number, isShown?: boolean) {\r\n const currentValue = this.properties.shownDeleteButtons.get(rowIndex);\r\n this.properties.shownDeleteButtons.set(rowIndex, isShown ?? !currentValue);\r\n this.calculateMustShowAdditionalColumn();\r\n }\r\n\r\n public toggleEditFormButton(rowIndex: number, isShown?: boolean) {\r\n const currentValue = this.properties.shownEditionButtons.get(rowIndex);\r\n this.properties.shownEditionButtons.set(rowIndex, isShown ?? !currentValue);\r\n this.calculateMustShowAdditionalColumn();\r\n }\r\n\r\n public async validate(): Promise<true | Field> {\r\n let isValid = true;\r\n let firstInvalid: Field | null = null;\r\n\r\n for await (const row of this.tableController.body.rows) {\r\n for await (const cell of row.cells) {\r\n const field = cell.getState('properties')?.field;\r\n if (field instanceof Field) {\r\n const result = await field.validate();\r\n if (!result && isValid && !firstInvalid) {\r\n isValid = false;\r\n firstInvalid = field;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid || firstInvalid!;\r\n }\r\n\r\n protected async actualRefreshAction() {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'refresh',\r\n },\r\n });\r\n\r\n if (res?.data?.gridXml) {\r\n await this.rebuildGrid(res.data.gridXml);\r\n } else {\r\n throw new Error(\"The server didn't return a valid XML response.\");\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected async addRowFromDefinitions(\r\n select: boolean,\r\n definitions?: TApiaFieldBaseDefinition<Record<string, any>>[],\r\n ) {\r\n const pageSize = this.properties.pageSize;\r\n const offset = Number.isFinite(pageSize)\r\n ? (this.properties.currentPage - 1) * pageSize\r\n : 0; // When pageSize is Infinity, we treat it as a single page\r\n const index = this.tableController.body.rows.length + offset;\r\n\r\n if (!definitions) {\r\n definitions = this.fieldsDefinitions.map((current, columnIndex) => {\r\n this.getForm().addFieldToRender(current.id, index);\r\n\r\n return {\r\n ...current,\r\n ...this.initialStates[columnIndex][0],\r\n };\r\n });\r\n }\r\n\r\n // Check if pageSize is finite\r\n\r\n const newRow = new Row(String(this.rowId++));\r\n if (\r\n this.properties.gridForm ||\r\n (!this.properties.hideDelButton &&\r\n !this.properties.readonly &&\r\n !this.properties.inputAsText &&\r\n !this.getForm().definition.readOnly &&\r\n !this.getForm().definition.readonly)\r\n )\r\n newRow.addCell(\r\n new AdditionalCell(\r\n this,\r\n () => newRow.index,\r\n () => {\r\n this.deleteRows(newRow.index);\r\n },\r\n this.properties.gridForm\r\n ? (handler) => {\r\n this.openEditionModal(handler);\r\n }\r\n : undefined,\r\n ),\r\n );\r\n this.tableController.body.addRow(newRow);\r\n\r\n for await (const field of definitions) {\r\n /**\r\n * Esto es necesario ya que desde el server llega un objeto js en el properties.\r\n */\r\n const fieldProps = parseFakeJSON<TApiaFieldCommonProperties>(\r\n field.properties as any,\r\n );\r\n field.properties = fieldProps;\r\n\r\n const fieldConstructor =\r\n this.form.execution.fieldsMapping[field.fieldType](field);\r\n\r\n if (fieldConstructor) {\r\n const newField = new fieldConstructor({\r\n ...field,\r\n ...(field as any).fieldValue,\r\n index,\r\n });\r\n await newField.init(this.getForm());\r\n newField.setParentGrid(this);\r\n\r\n if (newField instanceof FieldWithAttribute) {\r\n this.managedAttIds.add(newField.attribute.id);\r\n this.managedAttNames.add(newField.attribute.name);\r\n }\r\n this.managedFieldIds.add(newField.definition.id);\r\n this.managedFieldsNames.add(newField.properties.name);\r\n\r\n if (!(newField instanceof Hidden)) {\r\n this.cache.set(index, newField.definition.id, newField);\r\n\r\n let width = String(\r\n this.header.find((c) => c.fldId === field.id)?.width || 250,\r\n );\r\n if (!width.endsWith('px')) {\r\n width = `${width}px`;\r\n }\r\n\r\n newRow.addCell(\r\n new GridCell({\r\n colName: newField.definition.id,\r\n properties: { field: newField },\r\n }),\r\n );\r\n }\r\n } else {\r\n throw new Error(\r\n `Cannot build field of type ${field.fieldType}. There is no mapping for such type.`,\r\n );\r\n }\r\n }\r\n\r\n if (select) {\r\n this.tableController.clearSelection();\r\n this.tableController.toggleRowSelection(newRow, true);\r\n }\r\n\r\n return newRow;\r\n }\r\n\r\n protected async asyncAction<T>(\r\n cb: () => Promise<T>,\r\n mutex = true,\r\n ): Promise<T> {\r\n if (mutex) {\r\n await this.mutex.acquire();\r\n }\r\n try {\r\n this.state.isLoading = true;\r\n const res = await cb();\r\n return res;\r\n } finally {\r\n this.state.isLoading = false;\r\n if (mutex) {\r\n this.mutex.release();\r\n }\r\n }\r\n }\r\n\r\n protected calculateMustShowAdditionalColumn() {\r\n const { hideDelButton, shownDeleteButtons, shownEditionButtons, gridForm } =\r\n this.properties;\r\n const mustShowAdditionalColumn =\r\n (!hideDelButton &&\r\n [...shownDeleteButtons.values()].some((c) => c !== false)) ||\r\n (!!gridForm &&\r\n [...shownEditionButtons.values()].some((c) => c !== false));\r\n\r\n this.controller.toggleColumnVisibility(\r\n 'additional',\r\n mustShowAdditionalColumn,\r\n );\r\n }\r\n\r\n protected getRow(index: number) {\r\n return this.tableController.body\r\n .getRowByIndex(index)\r\n ?.cells.filter((c) => c instanceof GridCell)\r\n .map((c) => (c as GridCell).getField());\r\n }\r\n\r\n protected async rebuildGrid(\r\n xmlString: string | TApiaGridDefinition,\r\n ): Promise<void> {\r\n const xml =\r\n typeof xmlString === 'string'\r\n ? (parseXml(xmlString) as TApiaGridDefinition)\r\n : (xmlString as TApiaGridDefinition);\r\n\r\n const fieldsArray = arrayOrArray(xml.field);\r\n const statesArray: (\r\n | NonNullable<TApiaGridField['row']>\r\n | NonNullable<TApiaGridField['fieldValue']>\r\n )[][] = fieldsArray.map((field) =>\r\n arrayOrArray((field.fieldValue || field.row)!),\r\n );\r\n\r\n this.properties.pages = xml.pages || this.properties.pages;\r\n this.properties.currentPage = xml.curPage || this.properties.currentPage;\r\n\r\n if (statesArray[0].length > this.controller.body.rows.length) {\r\n for (\r\n let i = this.controller.body.rows.length;\r\n i < statesArray[0].length;\r\n i++\r\n ) {\r\n const parsedFieldGroups = fieldsArray.map((field, columnIndex) => {\r\n if (field.fieldType === 'radio' || field.fieldType === 'select') {\r\n const parsedField = {\r\n ...field,\r\n ...arrayOrArray(field.row)[i],\r\n };\r\n return parsedField;\r\n }\r\n return {\r\n ...field,\r\n index: i,\r\n fieldValue: {\r\n properties: statesArray[columnIndex][i]?.properties,\r\n value: statesArray[columnIndex][i]?.value,\r\n },\r\n };\r\n });\r\n\r\n await this.addRowFromDefinitions(false, parsedFieldGroups);\r\n }\r\n } else if (statesArray[0].length < this.controller.body.rows.length) {\r\n const removeIndices = new Array(\r\n this.controller.body.rows.length - statesArray[0].length,\r\n )\r\n .fill(0)\r\n .map((_, i) => i + statesArray[0].length);\r\n\r\n removeIndices\r\n .sort((a, b) => b - a)\r\n .forEach((i) => {\r\n this.controller.body.getRowByIndex(i)?.remove();\r\n });\r\n }\r\n\r\n statesArray.forEach((fieldStates, fieldIndex) => {\r\n fieldStates.forEach((state, rowIndex) => {\r\n const fieldDefinition = fieldsArray[fieldIndex];\r\n const id = fieldDefinition.id;\r\n\r\n const field = this.getFieldById(id, rowIndex) as Field | undefined;\r\n\r\n if (field) {\r\n const possibleValues = (state as TApiaGridField['row'])\r\n ?.possibleValue;\r\n if (possibleValues) {\r\n (field as Select).setProperty(\r\n 'possibleValue',\r\n arrayOrArray(possibleValues),\r\n );\r\n }\r\n\r\n Object.assign(\r\n field.properties,\r\n parseFakeJSON(state.properties as any),\r\n );\r\n field.definition.index = this.startIndex + rowIndex;\r\n if (field instanceof File) {\r\n field.loadFromDefinition((state as any).file_prp); // Apia trae esta prop para los files\r\n } else if (field instanceof ModalInput) {\r\n (field as ModalInput).setValue(\r\n {\r\n showValue:\r\n (state as TApiaGridField['fieldValue'])!.qry_show_value || '',\r\n storeValue: state.value || '',\r\n },\r\n { force: true },\r\n );\r\n } else if (field instanceof FieldWithAttribute) {\r\n field.setValue(state.value, { synchronize: false, force: true });\r\n }\r\n }\r\n });\r\n });\r\n\r\n this.refreshColumnsVisibilities();\r\n }\r\n\r\n protected async runAction<T extends Record<string, any>>(\r\n postData: IApiaApiPostConfig<Record<string, any>>,\r\n ) {\r\n return post<T>(\r\n this.form.execution,\r\n await makeApiaUrl(this.form.execution, {\r\n action: 'gridAction',\r\n ajaxUrl: actions.forms,\r\n fldId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n ...postData,\r\n },\r\n );\r\n }\r\n\r\n private swapRows(rows: number[], direction: 'up' | 'down') {\r\n let min = Infinity;\r\n\r\n for (const i of rows) {\r\n min = Math.min(min, i);\r\n\r\n const swapIndex = direction === 'up' ? i - 1 : i + 1;\r\n\r\n const aRow = this.tableController.body.getRowByIndex(i);\r\n const bRow = this.tableController.body.getRowByIndex(swapIndex);\r\n\r\n // Solamente se ejecuta el swap si ambas filas existen\r\n if (aRow && bRow) {\r\n this.getRow(i).forEach((c) => {\r\n this.cache.clearIndex(c.definition.index!);\r\n this.cache.clearIndex(swapIndex);\r\n c.definition.index = swapIndex;\r\n });\r\n this.getRow(swapIndex).forEach((c) => (c.definition.index = i));\r\n\r\n this.tableController.body.swapRows(aRow, bRow);\r\n\r\n // Forzamos el estado de selección a refrescarse para que se actualicen los botones de subir y bajar\r\n const selection = this.tableController.getState('selection');\r\n selection.forEach((c) => c.toggleSelection(true));\r\n }\r\n }\r\n\r\n if (min < Infinity) {\r\n this.tableController\r\n .getPluginOfType(FocusControllerPlugin)\r\n ?.scrollIntoView(\r\n this.tableController.body.getRowByIndex(min)!.getState('id'),\r\n );\r\n }\r\n }\r\n\r\n public toggleMaximize() {\r\n this.state.isMaximized = !this.state.isMaximized;\r\n }\r\n}\r\n","import { arrayOrArray, noNaN } from '@apia/util';\r\nimport { parseXml } from '../../../../../util';\r\nimport { setAjaxFormResponse } from '../../events/setAjaxFormResponse';\r\nimport { Grid } from '../Grid';\r\nimport type { GridActionResponse } from '../Grid/types';\r\nimport { Row } from '@apia/table2-controller';\r\n\r\nexport class GridPaginated extends Grid {\r\n /**\r\n * Returns the final index of the current page\r\n */\r\n public get finalIndex() {\r\n const pageSize = this.properties.pageSize;\r\n return noNaN(this.properties.currentPage * pageSize - 1, 0);\r\n }\r\n\r\n public addRow(): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridAdd')) {\r\n if (this.hasServerNoAjaxEventsOfType('gridAdd')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridAdd', {});\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'add',\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n await this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n this.controller.body.rows.at(-1)?.scrollIntoView();\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async deleteRows(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridDelete')) {\r\n /**\r\n * Debo igualar la selección de la tabla con los índices a eliminar.\r\n * De esta manera garantizo su correcto acceso desde los eventos script.\r\n */\r\n if (undefined === index) {\r\n index = [...this.controller.getState('selection')].map((c) => {\r\n return c.index;\r\n });\r\n } else {\r\n this.controller.setSelection(arrayOrArray(index));\r\n }\r\n\r\n const deletingIndices = arrayOrArray(index)\r\n .sort((a, b) => b - a)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridDelete')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridDelete', {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const minIndex = Math.min(...arrayOrArray(index));\r\n const currentPage = this.currentPage;\r\n\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n\r\n let newSelectedRow: Row | undefined;\r\n\r\n if (currentPage === this.currentPage) {\r\n newSelectedRow =\r\n this.controller.body.rows[minIndex] ||\r\n this.controller.body.rows[minIndex - 1];\r\n } else {\r\n newSelectedRow = this.controller.body.rows.at(-1);\r\n }\r\n\r\n newSelectedRow?.toggleSelection(true);\r\n newSelectedRow?.scrollIntoView();\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async gotoPage(page: number): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'gotopage',\r\n page: page - 1,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n public async sortDown(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices)\r\n .sort((a, b) => b - a)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'down',\r\n rowId: indices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const currentSelectionIndices = this.controller\r\n .getSelectedRows()\r\n .map((c) => c.index);\r\n const currentPage = this.currentPage;\r\n\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n\r\n this.controller.clearSelection();\r\n if (currentPage === this.currentPage) {\r\n this.controller.setSelection(\r\n currentSelectionIndices.map((c) => c + 1),\r\n );\r\n this.controller.getSelectedRows()[0]?.scrollIntoView();\r\n } else {\r\n this.controller.body.rows[0]?.scrollIntoView();\r\n this.controller.body.rows[0]?.toggleSelection(true);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async sortUp(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices)\r\n .sort((a, b) => a - b)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'up',\r\n rowId: indices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'up',\r\n rowId: indices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const currentSelectionIndices = this.controller\r\n .getSelectedRows()\r\n .map((c) => c.index);\r\n\r\n const currentPage = this.currentPage;\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n\r\n this.controller.clearSelection();\r\n if (currentPage === this.currentPage) {\r\n this.controller.setSelection(\r\n currentSelectionIndices.map((c) => c - 1),\r\n );\r\n this.controller.getSelectedRows()[0]?.scrollIntoView();\r\n } else {\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n this.controller.body.rows.at(-1)?.scrollIntoView();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","import { TApiaImageProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Image extends Field<TApiaImageProperties> {}\r\n","import dayjs from 'dayjs';\r\nimport { getLabel, labels } from '../../../../../util/labels/labels';\r\nimport { TApiaInputProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaInputDefinition } from '../../../../InitialData/types/fields/TApiaInputDefinition';\r\nimport { TranslatableField } from '../../TranslatableField';\r\nimport { SetValueOptions } from '../../types';\r\nimport { getDateFormat } from '@apia/util';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { TFireEventOptions } from '../../FieldWithAttribute';\r\n\r\n// Enable format-aware strict parsing so invalid dates (e.g., \"31/02/2025\") are rejected instead of auto-rolling to \"03/03/2025\".\r\ndayjs.extend(customParseFormat);\r\n\r\ntype InputEvents = 'onChange' | 'onModalReturn';\r\n\r\nexport class Input extends TranslatableField<\r\n TApiaInputProperties,\r\n string,\r\n TApiaInputDefinition\r\n> {\r\n private validDate = true;\r\n\r\n fireEvent(\r\n eventName: InputEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n public async setValue(\r\n newValue: string | Date | number,\r\n options?: SetValueOptions,\r\n ): Promise<boolean> {\r\n if (this.attribute.valueType === 'S') {\r\n if (!this.definition.regExp || this.validateRegex(String(newValue))) {\r\n if (String(newValue) !== '') this.state.validation.errorMessage = null;\r\n\r\n return super.setValue(String(newValue), options);\r\n }\r\n } else if (this.attribute.valueType === 'N') {\r\n super.setValue(String(newValue), options);\r\n } else if (this.attribute.valueType === 'D') {\r\n this.validDate = true;\r\n const inFmt = getDateFormat(options?.format);\r\n const outFmt = getDateFormat();\r\n\r\n if (typeof newValue === 'string') {\r\n const d = dayjs(newValue.trim(), inFmt, true);\r\n if (!d.isValid() && newValue.trim() !== '') {\r\n this.state.validation.errorMessage = getLabel(\r\n this.getForm().execution,\r\n 'msgInvalidDate',\r\n ).text;\r\n this.validDate = false;\r\n }\r\n return super.setValue(d.isValid() ? d.format(outFmt) : '', options);\r\n }\r\n\r\n if (newValue instanceof Date) {\r\n const d = dayjs(newValue);\r\n if (!d.isValid()) {\r\n this.state.validation.errorMessage = getLabel(\r\n this.getForm().execution,\r\n 'msgInvalidDate',\r\n ).text;\r\n this.validDate = false;\r\n }\r\n return super.setValue(d.isValid() ? d.format(outFmt) : '', options);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private validateRegex(value: string): boolean {\r\n if (!value) {\r\n this.state.validation.errorMessage = '';\r\n return true;\r\n }\r\n\r\n const regex = new RegExp(this.definition.regExp ?? '');\r\n\r\n if (!regex.test(String(value)) && value !== '') {\r\n this.state.validation.errorMessage =\r\n this.properties.regExpMessage || labels.errorRegexNotValidated();\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.errorMessage && !this.validDate) return false;\r\n\r\n return super.validate();\r\n }\r\n\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n}\r\n","import { TApiaLabelProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaLabelDefinition } from '../../../../InitialData/types/fields/TApiaLabelDefinition';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Label extends Field<TApiaLabelProperties, TApiaLabelDefinition> {}\r\n","import { TApiaLinkProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Link extends Field<TApiaLinkProperties> {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaMultipleProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaMultipleDefinition } from '../../../../InitialData/types/fields/TApiaMultipleDefinition';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\n\r\nexport class Multiple extends FieldWithAttribute<\r\n TApiaMultipleProperties,\r\n string[]\r\n> {\r\n constructor({\r\n possibleValue,\r\n value,\r\n ...definition\r\n }: TApiaMultipleDefinition) {\r\n super({\r\n ...{\r\n ...definition,\r\n value: arrayOrArray(possibleValue)\r\n .filter((c) => c.selected)\r\n .map((c) => c.value),\r\n },\r\n properties: {\r\n ...definition.properties,\r\n possibleValue: arrayOrArray(possibleValue),\r\n },\r\n });\r\n }\r\n\r\n protected hasValue() {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n public setValue(\r\n newValue: string[],\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n return super.setValue(arrayOrArray(newValue), options);\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.dirty) {\r\n if (!(await this.synchronize(this.state.value))) {\r\n this.state.validation.errorMessage = labels.errorCouldNotSync();\r\n return false;\r\n }\r\n }\r\n\r\n const isValid =\r\n !!this.getValue()[0] ||\r\n !this.properties.required ||\r\n this.properties.inputAsText ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n this.state.validation.errorMessage = isValid\r\n ? null\r\n : labels.errorFieldRequired(this.form.execution);\r\n\r\n return !this.state.validation.errorMessage;\r\n }\r\n}\r\n","import { TApiaPasswordProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class Password extends FieldWithAttribute<\r\n TApiaPasswordProperties,\r\n string\r\n> {\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n}\r\n","import { TApiaRadioProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaRadioButtonDefinition } from '../../../../InitialData/types/fields/TApiaRadioButtonDefinition';\r\nimport { Form } from '../../Form';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { arrayOrArray } from '@apia/util';\r\n\r\ntype RadioEvents = 'onPopulate' | 'onChange' | 'onClick';\r\n\r\nexport class Radio extends FieldWithAttribute<\r\n TApiaRadioProperties,\r\n number | string,\r\n TApiaRadioButtonDefinition\r\n> {\r\n constructor({ possibleValue, ...definition }: TApiaRadioButtonDefinition) {\r\n super({\r\n ...definition,\r\n properties: { ...definition.properties, possibleValue },\r\n });\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n await this.fireEvent('onPopulate');\r\n }\r\n\r\n fireEvent(\r\n eventName: RadioEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n public getTextValue(value: any) {\r\n return this.properties.possibleValue\r\n ? arrayOrArray(this.properties.possibleValue).find(\r\n (c) => c.value === value,\r\n )?.label\r\n : value;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { TApiaSelectProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaSelectDefinition } from '../../../../InitialData/types/fields/TApiaSelectDefinition';\r\nimport { TApiaFieldWithAttributeBaseProps } from '../../../../InitialData/types/TApiaField';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport { IApiaApiPostConfig } from '../../../../../util/api/types';\r\n\r\nexport class Select extends FieldWithAttribute<\r\n TApiaSelectProperties,\r\n string,\r\n TApiaSelectDefinition\r\n> {\r\n constructor({ possibleValue, ...definition }: TApiaSelectDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n ...definition.properties,\r\n possibleValue: arrayOrArray(possibleValue),\r\n },\r\n });\r\n }\r\n\r\n protected getInitialValue({\r\n properties: { possibleValue },\r\n }: TApiaFieldWithAttributeBaseProps<TApiaSelectProperties>): Promise<string> {\r\n return Promise.resolve(\r\n String(\r\n this.state.value !== ''\r\n ? this.state.value\r\n : (possibleValue?.find((c) => c.selected)?.value ??\r\n (possibleValue?.[0]?.value || '')),\r\n ),\r\n );\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: any,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(String(value));\r\n return conf;\r\n }\r\n\r\n public getTextValue(value: any) {\r\n return this.properties.possibleValue\r\n ? arrayOrArray(this.properties.possibleValue).find(\r\n (c) => c.value === value,\r\n )?.label\r\n : value;\r\n }\r\n}\r\n","import { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { TApiaTextareaProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TranslatableField } from '../../TranslatableField';\r\n\r\nexport class Textarea extends TranslatableField<\r\n TApiaTextareaProperties,\r\n string\r\n> {\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: string,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n conf.postData!.clearValues = 'true';\r\n return conf;\r\n }\r\n}\r\n","import { TApiaTitleProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Title extends Field<TApiaTitleProperties> {}\r\n","import type { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport type { TApiaTreeProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type {\r\n TApiaTreeDefinition,\r\n TApiaTreePossibleValue,\r\n} from '../../../../InitialData/types/fields/TApiaTreeDefinition';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { IMobXChildKeeper, MobXTree } from '@apia/tree2-controller';\r\nimport { Form } from '../../Form';\r\nimport { isFieldShowAsText } from '../../util/isFieldShowAsText';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\n\r\nexport type TTreeValue = string | number;\r\ntype TreeEvents = 'onPopulate' | 'onChange' | 'onClick';\r\n\r\nfunction getValuesArray(tree: TApiaTreePossibleValue[]) {\r\n return tree.reduce((acc, curr) => {\r\n if (curr.selected) {\r\n acc.push(curr.value);\r\n }\r\n if (curr.possibleValue) {\r\n acc.push(...getValuesArray(arrayOrArray(curr.possibleValue)));\r\n }\r\n return acc;\r\n }, [] as TTreeValue[]);\r\n}\r\n\r\nexport class Tree extends FieldWithAttribute<\r\n TApiaTreeProperties,\r\n TTreeValue[],\r\n TApiaTreeDefinition\r\n> {\r\n controller: MobXTree = {} as MobXTree;\r\n\r\n private parseTreeValues(\r\n parent: IMobXChildKeeper,\r\n pv: TApiaTreePossibleValue | TApiaTreePossibleValue[] | undefined,\r\n ) {\r\n arrayOrArray(pv).forEach((c) => {\r\n const node = parent.create({\r\n id: String(c.value),\r\n initialState: {\r\n label: c.text,\r\n isSelected: this.state.value.find((s) => s === c.value) !== undefined,\r\n isSelectable:\r\n arrayOrArray(c.possibleValue).length === 0 ||\r\n this.properties.selParent,\r\n isExpanded: true,\r\n icon: () => {\r\n if (\r\n (this.properties.parentIcon && c.possibleValue) ||\r\n (this.properties.leafIcon && !c.possibleValue)\r\n ) {\r\n return null;\r\n }\r\n return null;\r\n },\r\n },\r\n });\r\n\r\n this.parseTreeValues(node, c.possibleValue);\r\n });\r\n }\r\n\r\n constructor({ possibleValue, ...props }: TApiaTreeDefinition) {\r\n super(props);\r\n this.properties.possibleValue = arrayOrArray(possibleValue);\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: TTreeValue[],\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n return {\r\n ...conf,\r\n postData: {\r\n ...conf.postData,\r\n clearValues: true,\r\n },\r\n };\r\n }\r\n\r\n fireEvent(\r\n eventName: TreeEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n setProperty<K extends keyof TApiaTreeProperties>(\r\n propName: K,\r\n propValue: TApiaTreeProperties[K],\r\n ) {\r\n if (propName === 'possibleValue') {\r\n this.controller.removeAllChildren();\r\n this.state.value = getValuesArray(\r\n arrayOrArray(propValue as any) as TApiaTreePossibleValue[],\r\n );\r\n this.parseTreeValues(\r\n this.controller,\r\n propValue as TApiaTreeProperties['possibleValue'],\r\n );\r\n }\r\n super.setProperty(propName, propValue);\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n this.state.value = getValuesArray(this.properties.possibleValue);\r\n\r\n this.controller = new MobXTree({\r\n onSelect: (ev) => {\r\n if (isFieldShowAsText(this) || this.properties.disabled) {\r\n return false;\r\n } else {\r\n const selection = [...ev.values()].map((c) => c.id);\r\n this.setValue(selection, { markAsDirty: false });\r\n if (selection.length === 0) {\r\n this.setValue([], { markAsDirty: false });\r\n }\r\n return true;\r\n }\r\n },\r\n isMultiple: this.properties.multiselect,\r\n toggleNodesOnLabelClick: !this.properties.selParent,\r\n });\r\n\r\n this.setProperty(\r\n 'possibleValue',\r\n arrayOrArray(this.properties.possibleValue),\r\n );\r\n }\r\n\r\n protected isValidValue() {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n public async setValue(\r\n newValue: TTreeValue[],\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n const res = await super.setValue(newValue, options);\r\n\r\n if (res) {\r\n this.controller.setSelectedNodes(new Set(newValue.map((c) => String(c))));\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import {\r\n Scheduler,\r\n TScheduleResult,\r\n TSchInfoResult,\r\n} from '@apia/scheduler-controller';\r\nimport { TApiaSchedulerProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaFieldBaseDefinition } from '../../../../InitialData/types/TApiaField';\r\nimport { Field } from '../../Field';\r\nimport { Form } from '../../Form';\r\nimport { get, makeApiaUrl, post } from '../../../../../util';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\n\r\nexport class SchedulerField extends Field<TApiaSchedulerProperties> {\r\n private _schedController: Scheduler | undefined = undefined;\r\n constructor(definition: TApiaFieldBaseDefinition<TApiaSchedulerProperties>) {\r\n super(definition);\r\n }\r\n\r\n async deleteDate() {\r\n const res = await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'clearExecutionSchedulerSelectedDay',\r\n }),\r\n );\r\n\r\n if (res?.data?.success) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get parsedInitialProperties() {\r\n const value = String(this.properties.value);\r\n let start = 0;\r\n let end = 0;\r\n start = value?.indexOf('loadSchedExec');\r\n start += 14;\r\n\r\n end = value?.indexOf(';</div>');\r\n end -= 1;\r\n\r\n const strParts = value\r\n ?.slice(start, end)\r\n .replaceAll(`'`, ``)\r\n .replaceAll(' ', '');\r\n const arrParts = strParts.split(',');\r\n\r\n return {\r\n schId: arrParts[1],\r\n proId: arrParts[2],\r\n proVerId: arrParts[3],\r\n tskId: arrParts[4],\r\n showDisponibility: arrParts[5],\r\n showAttributes: arrParts[6],\r\n };\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n this._schedController = new Scheduler(\r\n this.parsedInitialProperties,\r\n {\r\n loadWeek: this.loadWeek.bind(this),\r\n deleteDate: this.deleteDate.bind(this),\r\n markDay: this.markDay.bind(this),\r\n loadInfo: this.loadInfo.bind(this),\r\n },\r\n 'Scheduler',\r\n getWindow(this.getForm().execution),\r\n );\r\n if (this._schedController) this._schedController.loadWeek();\r\n }\r\n\r\n async loadWeek(\r\n weekDay: string,\r\n schId: string,\r\n proId: string,\r\n proVerId: string,\r\n tskId: string,\r\n ) {\r\n const res = await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'getExecutionSchedulerWeek',\r\n weekDay,\r\n schId,\r\n proId,\r\n proVerId,\r\n tskId,\r\n }),\r\n );\r\n return res?.data ?? null;\r\n }\r\n\r\n async loadInfo(\r\n schId: string,\r\n weekDay: string,\r\n dayNumber: number,\r\n hour: string,\r\n ) {\r\n const res = await post<TSchInfoResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'getExecutionSchedulerDayInfo',\r\n schId,\r\n weekDay,\r\n dayNumber,\r\n hour,\r\n }),\r\n );\r\n return res?.data?.pro_instances?.pro_instance ?? [];\r\n }\r\n\r\n async markDay(weekDay: string, hour: string, dayNumber: number) {\r\n await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'setExecutionSchedulerSelectedDay',\r\n weekDay,\r\n hour,\r\n dayNumber,\r\n }),\r\n );\r\n }\r\n\r\n get schedController() {\r\n return this._schedController;\r\n }\r\n}\r\n","const FieldConstants = Object.freeze({\r\n // field types\r\n TYPE_INPUT: 'input',\r\n TYPE_SELECT: 'select',\r\n TYPE_RADIO: 'radio',\r\n TYPE_CHECK: 'check',\r\n TYPE_BUTTON: 'button',\r\n TYPE_AREA: 'area',\r\n TYPE_LABEL: 'label',\r\n TYPE_TITLE: 'title',\r\n TYPE_FILE: 'file',\r\n TYPE_MULTIPLE: 'multiple',\r\n TYPE_HIDDEN: 'hidden',\r\n TYPE_PASSWORD: 'password',\r\n TYPE_GRID: 'grid',\r\n TYPE_IMAGE: 'image',\r\n TYPE_HREF: 'href',\r\n TYPE_EDITOR: 'editor',\r\n TYPE_TREE: 'tree',\r\n TYPE_CAPTCHA: 'captcha',\r\n\r\n // Field properties\r\n PROPERTY_NAME: 'name',\r\n PROPERTY_SIZE: 'size',\r\n PROPERTY_READONLY: 'readonly',\r\n PROPERTY_DISABLED: 'disabled',\r\n PROPERTY_MODAL_DISABLED: 'modalDisabled',\r\n PROPERTY_FONT_COLOR: 'fontColor',\r\n PROPERTY_VALUE: 'value',\r\n PROPERTY_REQUIRED: 'required',\r\n PROPERTY_COLSPAN: 'colspan',\r\n PROPERTY_ROWSPAN: 'rowspan',\r\n PROPERTY_MODAL: 'modal',\r\n PROPERTY_ROWS: 'thisRows',\r\n PROPERTY_BOLD: 'bold',\r\n PROPERTY_UNDERLINED: 'underlined',\r\n PROPERTY_ALIGNMENT: 'alignment',\r\n PROPERTY_IMAGE: 'imageUrl',\r\n PROPERTY_COL_WIDTH: 'colWidth',\r\n PROPERTY_GRID_HEIGHT: 'gridHeight',\r\n PROPERTY_HIDE_GRID_BTN: 'hideGridButtons',\r\n PROPERTY_VISIBILITY_HIDDEN: 'visibilityHidden',\r\n PROPERTY_TRANSIENT: 'transient',\r\n PROPERTY_GRID_TITLE: 'gridTitle',\r\n PROPERTY_GRID_FORM: 'gridForm',\r\n PROPERTY_TOOLTIP: 'tooltip',\r\n PROPERTY_VALUE_COLOR: 'valueColor',\r\n PROPERTY_INPUT_AS_TEXT: 'inputAsText',\r\n PROPERTY_NO_DOWNLOAD: 'noDownload',\r\n PROPERTY_NO_ERASE: 'noErase',\r\n PROPERTY_NO_LOCK: 'noLock',\r\n PROPERTY_NO_HISTORY: 'noHistory',\r\n PROPERTY_NO_MODIFY: 'noModify',\r\n PROPERTY_ALLOW_EDITION: 'allowEdition',\r\n PROPERTY_HIDE_SIGN_ICONS: 'hideSignButtons',\r\n PROPERTY_URL: 'url',\r\n PROPERTY_GRID_HIDE_BTN_ORDER: 'hideOrderButton',\r\n PROPERTY_GRID_HIDE_BTN_INCLUDE: 'hideIncludeButton',\r\n PROPERTY_REGEXP_MESSAGE: 'regExpMessage',\r\n PROPERTY_PAGED_GRID: 'paged',\r\n PROPERTY_PAGED_GRID_SIZE: 'pagedGridSize',\r\n PROPERTY_GRID_ALTER_IN_LAST_PAGE: 'alterOnlyLastPage',\r\n PROPERTY_GRID_PRINT_HORIZONTAL: 'printHorizontal',\r\n PROPERTY_STORE_MODAL_QUERY_RESULT: 'storeMdlQryResult',\r\n PROPERTY_INCLUDE_FIRST_ROW: 'includeFirstRow',\r\n PROPERTY_MAX_REG_GRID: 'maxRecords',\r\n PROPERTY_GRID_LABEL: 'gridColTitle',\r\n PROPERTY_GRID_QUERY: 'gridQuery',\r\n PROPERTY_HIDE_DOC_PERMISSIONS: 'hideDocPermissions',\r\n PROPERTY_VERIFY_SIGNATURE_ONLY: 'verifySignatureOnly',\r\n PROPERTY_GRID_HIDE_BTN_ADD: 'hideAddButton',\r\n PROPERTY_GRID_HIDE_BTN_DEL: 'hideDelButton',\r\n PROPERTY_HIDE_DOC_UPLOAD: 'hideDocUpload',\r\n PROPERTY_HIDE_DOC_DOWNLOAD: 'hideDocDownload',\r\n PROPERTY_HIDE_DOC_ERASE: 'hideDocErase',\r\n PROPERTY_HIDE_DOC_LOCK: 'hideDocLock',\r\n PROPERTY_HIDE_DOC_HISTORY: 'hideDocHistory',\r\n PROPERTY_HIDE_DOC_SIGN: 'hideSignButtons',\r\n PROPERTY_DISPLAY_NONE: 'displayNone',\r\n PROPERTY_DONT_BREAK_RADIO: 'dontBreakRadio',\r\n PROPERTY_CHECKED: 'checked',\r\n PROPERTY_FILE_PREVIEW: 'filePreview',\r\n PROPERTY_NOT_PRINT: 'noPrint',\r\n // tree component\r\n PROPERTY_SELECT_PARENT: 'selParent',\r\n PROPERTY_HEIGHT: 'height',\r\n PROPERTY_MULTISELECT: 'multiselect',\r\n PROPERTY_SEL_PARENT: 'selParent',\r\n PROPERTY_PARENT_ICON: 'parentIcon',\r\n PROPERTY_LEAF_ICON: 'leafIcon',\r\n PROPERTY_CSS_CLASS: 'cssClass',\r\n PROPERTY_DOC_TYPE: 'docType',\r\n // file component\r\n PROPERTY_HIDE_DOC_METADATA: 'hideDocMetadata',\r\n PROPERTY_TRANSLATION_REQUIRED: 'reqTrad',\r\n PROPERTY_SIGNATURE_REQUIRED: 'reqSign',\r\n PROPERTY_SHOW_TOOLTIP_AS_HELP: 'tooltipHelp',\r\n PROPERTY_DOCUMENT_MONITOR_DEF: 'documentMonitorDef',\r\n PROPERTY_DOCUMENT_MONITOR_CUS: 'documentMonitorCus',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN: 'fileShwFoldTreeBtn',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR: 'fileShwFoldTreeStr',\r\n PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP: 'fileNoAllwDnD',\r\n PROPERTY_DOCUMENT_NO_SHOW_MODAL: 'fileDntShwDocMdlOnDrop',\r\n PROPERTY_DOCUMENT_SHOW_DESC: 'fileShowDesc',\r\n PROPERTY_DOCUMENT_DEFAULT_FOLDER: 'fileDefFolder',\r\n PROPERTY_DOCUMENT_ROOT_FOLDER: 'fileRootFolder',\r\n PROPERTY_DOCUMENT_EXP_DATE: 'fileExpDate',\r\n PROPERTY_DOCUMENT_DNT_SHW_DOC_MON: 'fileNotShowDocMon',\r\n PROPERTY_DOCUMENT_COLLAPSE_PERM: 'fileCollapsePermission',\r\n PROPERTY_DOCUMENT_COLLAPSE_META: 'fileCollapseMetadata',\r\n PROPERTY_DOCUMENT_COLLAPSE_FLD_STC: 'fileCollapseFldStrc',\r\n\r\n // Mensajes de error\r\n WRONG_ATT_TYPE_ERROR:\r\n 'Component does not support attributes of type <TOK>. Contact system administrator',\r\n\r\n // Keys almacenadas en los campos\r\n STORE_KEY_FIELD: 'field',\r\n STORE_KEY_FORM: 'form',\r\n\r\n PROPERTY_ARIA_DESCRIPTION: 'ariaDescription',\r\n PROPERTY_ARIA_LABEL: 'ariaLabel',\r\n PROPERTY_ALT: 'alt',\r\n PROPERTY_AUTO_COMPLETE: 'autoComplete',\r\n PROPERTY_AUTO_FOCUS: 'autoFocus',\r\n PROPERTY_INPUT_TYPE: 'inputType',\r\n PROPERTY_PLACE_HOLDER: 'placeHolder',\r\n PROPERTY_TITLE: 'title',\r\n});\r\n\r\nexport default FieldConstants;\r\n","const FormConstants = Object.freeze({\r\n PROPERTY_FORM_HIDDEN: 'frmHidden',\r\n PROPERTY_FORM_HIGHLIGHT: 'frmHighlight',\r\n PROPERTY_FORM_CLOSED: 'prpFrmClosed',\r\n PROPERTY_FORM_TAB: 'frmTab',\r\n PROPERTY_FORM_DONT_FIRE: 'frmDontFire',\r\n PROPERTY_FORM_READONLY: 'readOnly',\r\n});\r\n\r\nexport default FormConstants;\r\n","import FieldConstants from './FieldConstants';\r\nimport FormConstants from './FormConstants';\r\n\r\nexport const IProperty = {\r\n ...FieldConstants,\r\n ...FormConstants,\r\n} as const;\r\n","import { makeAutoObservable } from 'mobx';\r\n\r\nexport class ActionsController {\r\n static CONFIRM = 0;\r\n static NEXT = 1;\r\n static PREVIOUS = 2;\r\n static SIGN = 3;\r\n static SAVE = 4;\r\n static RELEASE = 5;\r\n static DELEGATE = 6;\r\n static SHARE = 7;\r\n static PRINT = 8;\r\n static VIEW_DOCS = 9;\r\n static CLOSE = 10;\r\n static SEND_TO_DESK = 11;\r\n\r\n static BTN_CONFIRM = ActionsController.CONFIRM;\r\n static BTN_DELEGATE = ActionsController.DELEGATE;\r\n static BTN_NEXT = ActionsController.NEXT;\r\n static BTN_PERV = ActionsController.PREVIOUS;\r\n static BTN_RELEASE = ActionsController.RELEASE;\r\n static BTN_SAVE = ActionsController.SAVE;\r\n static BTN_SHARE = ActionsController.SHARE;\r\n static BTN_SIGN = ActionsController.SIGN;\r\n\r\n private static _instance: ActionsController;\r\n public static get instance(): ActionsController {\r\n if (!ActionsController._instance) {\r\n ActionsController._instance = new ActionsController();\r\n }\r\n return ActionsController._instance;\r\n }\r\n private constructor() {\r\n makeAutoObservable(this);\r\n }\r\n\r\n private buttons = new Map<number, { disabled?: boolean; hidden?: boolean }>();\r\n\r\n private get(id: number) {\r\n if (!this.buttons.has(id)) {\r\n this.buttons.set(id, {});\r\n }\r\n return this.buttons.get(id)!;\r\n }\r\n\r\n public disable(id: number) {\r\n this.get(id).disabled = true;\r\n }\r\n public enable(id: number) {\r\n this.get(id).disabled = false;\r\n }\r\n public hide(id: number) {\r\n this.get(id).hidden = true;\r\n }\r\n public isDisabled(id: number) {\r\n return !!this.get(id).disabled;\r\n }\r\n public isHidden(id: number) {\r\n return !!this.get(id).hidden;\r\n }\r\n public show(id: number) {\r\n this.get(id).hidden = false;\r\n }\r\n}\r\n","import type { Execution } from '../main/Execution';\r\nimport { Field } from '../main/Execution/FormsExecution/Field';\r\nimport { ApiaForm } from './ApiaForm';\r\nimport FieldConstants from './constants/FieldConstants';\r\nimport type { IApiaField } from './types';\r\n\r\nexport abstract class ApiaField<\r\n Props extends typeof FieldConstants = typeof FieldConstants,\r\n> implements IApiaField<Props>\r\n{\r\n #execution: Execution;\r\n #field: Field<any>;\r\n\r\n constructor(execution: Execution, field: Field<any>) {\r\n this.#execution = execution;\r\n this.#field = field;\r\n }\r\n\r\n get fldType() {\r\n return this.#field.definition.fieldType;\r\n }\r\n\r\n get fldId() {\r\n return this.#field.definition.id;\r\n }\r\n\r\n get form() {\r\n return new ApiaForm(this.#execution, this.#field.getForm());\r\n }\r\n\r\n get index() {\r\n return this.#field.definition.index || 0;\r\n }\r\n\r\n setProperty<K extends keyof Props>(name: Props[K], value: unknown) {\r\n this.#field.setProperty(name as any, value);\r\n }\r\n\r\n getProperty<K extends keyof Props>(name: Props[K]): unknown {\r\n return this.#field.getProperty(name as any);\r\n }\r\n\r\n setFocus(): IApiaField | null {\r\n throw new Error('Method not implemented. ');\r\n }\r\n isInGrid(): boolean {\r\n return !!this.#field.properties.inGrid;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Button } from '../../main/Execution/FormsExecution/fields';\r\nimport { TApiaFieldCommonProperties } from '../../main/InitialData/types/fields/TApiaFieldProperties';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface TTextFieldProperties extends TApiaFieldCommonProperties {\r\n value?: string;\r\n}\r\nexport interface IButtonField extends IApiaField {\r\n fireClickEvent(): void;\r\n getValue(): string | null;\r\n}\r\n\r\nexport default class ButtonField extends ApiaField implements IButtonField {\r\n #field: Button;\r\n\r\n constructor(execution: Execution, field: Button) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n fireClickEvent(): void {\r\n if (this.#field.definition.id) {\r\n this.#field.fireEvent('onClick');\r\n }\r\n }\r\n\r\n getValue(): string | null {\r\n if (this.#field.definition.id) {\r\n return this.#field.properties.value ?? '';\r\n }\r\n return null;\r\n }\r\n\r\n clearValue(): void {\r\n this.#field.properties.value = '';\r\n }\r\n\r\n setValue(value: string): void {\r\n this.setProperty('value', value);\r\n }\r\n}\r\n","import type { Execution } from '../main/Execution';\r\nimport type {\r\n Attribute,\r\n FieldWithAttribute,\r\n} from '../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { TApiaFieldWithAttributeProperties } from '../main/InitialData/types/fields/TApiaFieldProperties';\r\nimport { ApiaField } from './ApiaField';\r\n\r\nexport class ApiaAttribute {\r\n #attribute: Attribute;\r\n constructor(attribute: Attribute) {\r\n this.#attribute = attribute;\r\n }\r\n\r\n get attLabel() {\r\n return this.#attribute.title;\r\n }\r\n\r\n get name() {\r\n return this.#attribute.name;\r\n }\r\n get id() {\r\n return this.#attribute.id;\r\n }\r\n get valueType() {\r\n return this.#attribute.valueType;\r\n }\r\n}\r\n\r\nexport class ApiaFieldWithAttribute<T = string | boolean> extends ApiaField {\r\n #field: FieldWithAttribute;\r\n\r\n constructor(execution: Execution, field: FieldWithAttribute) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n get attribute() {\r\n return new ApiaAttribute(this.#field.attribute);\r\n }\r\n\r\n clearValue() {\r\n this.#field.setValue('');\r\n }\r\n\r\n getValue() {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: T) {\r\n this.#field.setValue(v);\r\n }\r\n\r\n getLabel(): string | null | void {\r\n return this.#field.attribute.title;\r\n }\r\n\r\n getProperty<K extends keyof TApiaFieldWithAttributeProperties>(\r\n name: TApiaFieldWithAttributeProperties[K],\r\n ): unknown {\r\n return super.getProperty(name as any);\r\n }\r\n}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class EditorField extends ApiaFieldWithAttribute {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { PossibleValue } from '../types';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Select } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport type TOptionsAsArray = PossibleValue[];\r\n\r\nexport default class SelectField extends ApiaFieldWithAttribute<\r\n string | number | (string | number)[]\r\n> {\r\n #field: Select;\r\n constructor(execution: Execution, field: Select) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n // get all select options either as array[] or object\r\n getOptions(asObject: boolean): TOptionsMap | TOptionsAsArray | null {\r\n if (this.#field.definition.id) {\r\n const options = arrayOrArray(this.#field.properties.possibleValue);\r\n const obj = new Map<string, PossibleValue>();\r\n if (asObject) {\r\n options.forEach((c) => obj.set(String(c.value), c));\r\n return obj;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // adds a option to the select field\r\n addOption(\r\n optionValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n let isValueRepeated = false;\r\n if (this.#field.definition.id !== null) {\r\n if (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.value === optionValue,\r\n ) &&\r\n allowRepeatedValue\r\n ) {\r\n isValueRepeated = true;\r\n } else {\r\n isValueRepeated = false;\r\n }\r\n\r\n if (allowRepeatedValue || (!isValueRepeated && !allowRepeatedValue))\r\n arrayOrArray(this.#field.properties.possibleValue).push({\r\n value: optionValue,\r\n label: showValue,\r\n });\r\n }\r\n }\r\n\r\n // overwrite all options in select field\r\n setOptions(optionsArray: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = arrayOrArray(optionsArray);\r\n }\r\n }\r\n\r\n removeOption(optionValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== optionValue,\r\n );\r\n }\r\n }\r\n\r\n // get selected option either as array or object key/value\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n const arr = arrayOrArray(this.#field.properties.possibleValue);\r\n if (this.#field.definition.id) {\r\n if (asObject) {\r\n let obj = null;\r\n arr.forEach((c) => {\r\n if (c.selected) {\r\n obj = c;\r\n }\r\n });\r\n return obj;\r\n } else {\r\n return arrayOrArray(arr.find((c) => c.selected));\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedText(): string | null {\r\n if (this.#field.definition.id) {\r\n return (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.selected,\r\n )?.label ?? 'Not option selected'\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // // remove all select options\r\n clearOptions(): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).forEach(\r\n (c) => (c.selected = false),\r\n );\r\n }\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Input } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class InputField extends ApiaFieldWithAttribute {\r\n #field: Input;\r\n constructor(execution: Execution, field: Input) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getObjectValue(): number | string | boolean | null {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: string): void {\r\n if (this.#field.attribute.valueType === 'D') {\r\n this.#field.setValue(v, { format: 'd/m/Y' });\r\n } else {\r\n this.#field.setValue(v);\r\n }\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { Tree } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport default class TreeField extends ApiaFieldWithAttribute<\r\n string | number | (string | number)[]\r\n> {\r\n #field: Tree;\r\n constructor(execution: Execution, field: Tree) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n setValue(v: string | number | (string | number)[]): void {\r\n this.#field.setValue(arrayOrArray(v));\r\n }\r\n}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { isTrue } from '@apia/util';\r\n\r\nexport default class CheckField extends ApiaFieldWithAttribute {\r\n clearValue(): void {\r\n this.setValue(false);\r\n }\r\n\r\n setValue(value: string | boolean | number): void {\r\n // accepts 1/0 or true/false as values\r\n let val;\r\n const isBool = isTrue(value as unknown as string);\r\n if (isBool === true || isBool === false) {\r\n val = isBool;\r\n } else {\r\n throw new Error(\r\n 'Apia JSApi Error: The function setValue for a Checkbox field only accepts boolean or string type for value parameter.',\r\n );\r\n }\r\n super.setValue(val);\r\n }\r\n}\r\n","import { PossibleValue } from '../types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Radio } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport default class RadioField extends ApiaFieldWithAttribute {\r\n #field: Radio;\r\n constructor(execution: Execution, field: Radio) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getOptions(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n radioValues.forEach((c) => options.set(String(c.value), c));\r\n\r\n return options;\r\n }\r\n\r\n return radioValues;\r\n }\r\n return null;\r\n }\r\n\r\n clearOptions(): void | null {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = [];\r\n }\r\n }\r\n\r\n addOption(\r\n radioValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n if (this.#field.definition.id) {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n const isValueIsRepeated = radioValues.some((c) => {\r\n return c.value === radioValue.toString();\r\n });\r\n\r\n if (allowRepeatedValue || !isValueIsRepeated) {\r\n radioValues.push({\r\n value: radioValue.toString(),\r\n label: showValue,\r\n });\r\n }\r\n }\r\n }\r\n\r\n setOptions(options: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = options;\r\n }\r\n }\r\n\r\n removeOption(radioValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== radioValue,\r\n );\r\n }\r\n }\r\n\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue | null {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n\r\n const selected = radioValues.find((c) => c.selected);\r\n if (!selected) return null;\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n options.set(String(selected?.value), selected);\r\n return options;\r\n } else {\r\n return selected;\r\n }\r\n }\r\n\r\n getSelectedText(): string | undefined | null {\r\n if (this.#field.definition.id) {\r\n const possibleValue = arrayOrArray(this.#field.properties.possibleValue);\r\n if (possibleValue) {\r\n return possibleValue.find((c) => c.selected)?.label;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { PossibleValue } from '../types';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Multiple } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport default class MultipleField extends ApiaFieldWithAttribute<string[]> {\r\n #field: Multiple;\r\n constructor(execution: Execution, field: Multiple) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n addOption(\r\n optionValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n let isValueRepeated = false;\r\n if (this.#field.definition.id !== null) {\r\n if (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.value === optionValue,\r\n ) &&\r\n allowRepeatedValue\r\n ) {\r\n isValueRepeated = true;\r\n } else {\r\n isValueRepeated = false;\r\n }\r\n\r\n if (allowRepeatedValue || (!isValueRepeated && !allowRepeatedValue))\r\n arrayOrArray(this.#field.properties.possibleValue).push({\r\n value: optionValue,\r\n label: showValue,\r\n });\r\n }\r\n }\r\n setValue(value: string[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.setValue(value);\r\n }\r\n }\r\n clearOptions(): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).forEach(\r\n (c) => (c.selected = false),\r\n );\r\n }\r\n }\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const selected = arrayOrArray(\r\n this.#field.properties.possibleValue,\r\n ).filter((c) => c.selected);\r\n\r\n if (selected) {\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n selected.forEach((c) => options.set(String(c.value), c));\r\n return options;\r\n }\r\n\r\n return selected;\r\n }\r\n }\r\n return null;\r\n }\r\n getOptions(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const options = arrayOrArray(this.#field.properties.possibleValue);\r\n const obj = new Map<string, PossibleValue>();\r\n if (asObject) {\r\n options.forEach((c) => obj.set(String(c.value), c));\r\n return obj;\r\n }\r\n\r\n return options;\r\n }\r\n return null;\r\n }\r\n setOptions(optionsArray: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = arrayOrArray(optionsArray);\r\n }\r\n }\r\n removeOption(optionValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== optionValue,\r\n );\r\n }\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\n\r\nexport default class HiddenField extends ApiaField {}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class AreaField extends ApiaFieldWithAttribute {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Image } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface IImageField extends IApiaField {\r\n getValue(): null;\r\n setValue(): null;\r\n getLabel(): void;\r\n clearValue(): null;\r\n}\r\n\r\nexport default class ImageField extends ApiaField implements IImageField {\r\n #field: Image;\r\n constructor(execution: Execution, field: Image) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n clearValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n getLabel(): void {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n\r\n getValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n setValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Link } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface ILinkField extends IApiaField {\r\n getLabel(): void;\r\n}\r\n\r\nexport default class LinkField extends ApiaField implements ILinkField {\r\n #field: Link;\r\n constructor(execution: Execution, field: Link) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getLabel(): void {\r\n if (this.#field.definition.fieldType) {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Field } from '../../main/Execution/FormsExecution/Field';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface ITextField extends IApiaField {\r\n getLabel(): void;\r\n}\r\n\r\nexport default class TextField extends ApiaField implements ITextField {\r\n #field: Field;\r\n constructor(execution: Execution, field: Field) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getLabel(): void {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n setValue(value: string): void {\r\n this.setProperty('value', value);\r\n }\r\n}\r\n","import { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport { TApiaFieldCommonProperties } from '../../main/InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport class CustomComponentField {\r\n #field: CustomComponent;\r\n constructor(field: CustomComponent) {\r\n this.#field = field;\r\n }\r\n\r\n fireEvent(name: string) {\r\n this.#field.fireEvent(name);\r\n }\r\n getProperty(name: string): any {\r\n return this.#field.getProperty(name);\r\n }\r\n setFocus(): void {\r\n throw new Error('Method not implemented.');\r\n }\r\n isInGrid(): boolean {\r\n return false;\r\n }\r\n getStringValue(attName: string) {\r\n return this.#field.getStringValue(attName);\r\n }\r\n getValue(attName: string, index = 0) {\r\n return this.#field.getValue(attName, index);\r\n }\r\n setProperty<K extends keyof TApiaFieldCommonProperties>(\r\n name: K,\r\n value: any,\r\n ): void {\r\n this.#field.setProperty(name, value);\r\n }\r\n setStringValue(attName: string, value: string) {\r\n return this.#field.setStringValue(attName, value);\r\n }\r\n setValue(attName: string, value: any, index = 0) {\r\n return this.#field.setValue(attName, value, index);\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport { ModalInput } from '../../main/Execution/FormsExecution/fields';\r\nimport type {\r\n Button,\r\n Captcha,\r\n Checkbox,\r\n Editor,\r\n File,\r\n Grid,\r\n Hidden,\r\n Image,\r\n Input,\r\n Label,\r\n Link,\r\n Multiple,\r\n Password,\r\n Radio,\r\n Select,\r\n Textarea,\r\n Title,\r\n Tree,\r\n} from '../../main/Execution/FormsExecution/fields';\r\nimport FieldConstants from '../constants/FieldConstants';\r\nimport {\r\n ButtonField,\r\n CaptchaField,\r\n CheckField,\r\n EditorField,\r\n FileUploaderField,\r\n HiddenField,\r\n ImageField,\r\n InputField,\r\n LinkField,\r\n ModalInputField,\r\n MultipleField,\r\n PasswordField,\r\n RadioField,\r\n SelectField,\r\n TextAreaField,\r\n TextField,\r\n TreeField,\r\n} from '../fields';\r\nimport { CustomComponentField } from '../fields/CustomComponentField';\r\nimport GridField from '../fields/GridField';\r\nimport type { IApiaField } from '../types';\r\nimport type { TCreateNewField } from './asynCreateApiaField';\r\n\r\nexport const createNewField: TCreateNewField = (\r\n execution: Execution,\r\n field,\r\n) => {\r\n if (field instanceof CustomComponent) {\r\n return new CustomComponentField(field) as any;\r\n } else {\r\n const { fieldType } = field.definition;\r\n let newField: IApiaField<any> | null = null;\r\n\r\n if (field instanceof ModalInput) {\r\n return new ModalInputField(execution, field as ModalInput);\r\n }\r\n\r\n switch (fieldType) {\r\n case FieldConstants.TYPE_INPUT:\r\n newField = new InputField(execution, field as Input);\r\n break;\r\n case FieldConstants.TYPE_PASSWORD:\r\n newField = new PasswordField(execution, field as Password);\r\n break;\r\n case FieldConstants.TYPE_SELECT:\r\n newField = new SelectField(execution, field as Select);\r\n break;\r\n case FieldConstants.TYPE_RADIO:\r\n newField = new RadioField(execution, field as Radio);\r\n break;\r\n case FieldConstants.TYPE_CHECK:\r\n newField = new CheckField(execution, field as Checkbox);\r\n break;\r\n case FieldConstants.TYPE_BUTTON:\r\n newField = new ButtonField(execution, field as Button);\r\n break;\r\n case FieldConstants.TYPE_MULTIPLE:\r\n newField = new MultipleField(execution, field as Multiple);\r\n break;\r\n case FieldConstants.TYPE_HIDDEN:\r\n newField = new HiddenField(execution, field as Hidden);\r\n break;\r\n case FieldConstants.TYPE_AREA:\r\n newField = new TextAreaField(execution, field as Textarea);\r\n break;\r\n case FieldConstants.TYPE_GRID:\r\n newField = new GridField(execution, field as Grid);\r\n break;\r\n case FieldConstants.TYPE_IMAGE:\r\n newField = new ImageField(execution, field as Image);\r\n break;\r\n case FieldConstants.TYPE_HREF:\r\n newField = new LinkField(execution, field as Link);\r\n break;\r\n case FieldConstants.TYPE_LABEL:\r\n newField = new TextField(execution, field as Label);\r\n break;\r\n case FieldConstants.TYPE_TITLE:\r\n newField = new TextField(execution, field as Title);\r\n break;\r\n case FieldConstants.TYPE_FILE:\r\n newField = new FileUploaderField(execution, field as File);\r\n break;\r\n case FieldConstants.TYPE_CAPTCHA:\r\n newField = new CaptchaField(execution, field as Captcha);\r\n break;\r\n case FieldConstants.TYPE_TREE:\r\n newField = new TreeField(execution, field as Tree);\r\n break;\r\n case FieldConstants.TYPE_EDITOR:\r\n newField = new EditorField(execution, field as Editor);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return newField;\r\n }\r\n};\r\n","import { ApiaField } from '../ApiaField';\r\nimport { arrayOrArray, Mutex } from '@apia/util';\r\nimport { createNewField } from '../utils/createApiaField';\r\nimport { Grid } from '../../main/Execution/FormsExecution/fields';\r\nimport { FieldWithAttribute } from '../../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { IApiaField } from '../types';\r\nimport { getWindow } from '../../util/dom/getWindow';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport default class GridField extends ApiaField {\r\n #execution: Execution;\r\n #field: Grid;\r\n\r\n constructor(execution: Execution, field: Grid) {\r\n super(execution, field);\r\n this.#execution = execution;\r\n this.#field = field;\r\n }\r\n\r\n #mutex = new Mutex();\r\n\r\n async addRow(): Promise<IApiaField[]> {\r\n try {\r\n await this.#mutex.acquire();\r\n const result = await this.#field.addRow();\r\n\r\n if (result) {\r\n return this.getRow(this.#field.finalIndex)!;\r\n }\r\n\r\n return [];\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n clearGrid() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n clearPage() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n async clearRow(index: number) {\r\n try {\r\n await this.#mutex.acquire();\r\n\r\n const row = this.#field.getRowByFieldIndex(index);\r\n\r\n if (!row) {\r\n throw new Error(`Row ${index} not found`);\r\n }\r\n\r\n row.forEach((c) => {\r\n if (c instanceof FieldWithAttribute) c.state.value = '';\r\n });\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n closeForm(): GridField {\r\n this.#field.closeEditionModal();\r\n return this;\r\n }\r\n\r\n async deleteAllRows() {\r\n try {\r\n await this.#mutex.acquire();\r\n await this.#field.deleteAllRows();\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n async deleteGrid() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n deletePage() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n async deleteRow(index: number) {\r\n try {\r\n await this.#mutex.acquire();\r\n this.#field.deleteRows(index);\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n editRow(index: number) {\r\n getWindow(this.#execution).dispatchEvent(\r\n new CustomEvent('openGridEdition', {\r\n detail: { index, grid: this.#field },\r\n }),\r\n );\r\n }\r\n\r\n getAllColumns() {\r\n return this.#field\r\n .getAllColumns()\r\n .map((c) =>\r\n c.map((f) => createNewField(this.#field.getForm().execution, f)),\r\n );\r\n }\r\n\r\n getColumn(fieldName: string) {\r\n const fields = this.#field.getColumn(fieldName);\r\n if (fields) {\r\n return arrayOrArray(fields).map((c) =>\r\n createNewField(this.#field.getForm().execution, c!),\r\n );\r\n }\r\n return [];\r\n }\r\n\r\n getCurrentPage() {\r\n return this.#field.getCurrentPage();\r\n }\r\n\r\n getField(fieldName: string, fieldIndex?: number) {\r\n const fields = this.#field.getField(fieldName, fieldIndex);\r\n\r\n if (fields) {\r\n return fieldIndex !== undefined\r\n ? createNewField(\r\n this.#field.getForm().execution,\r\n arrayOrArray(fields)[0]!,\r\n )\r\n : arrayOrArray(fields)\r\n .map((c) => createNewField(this.#field.getForm().execution, c))\r\n .filter((c): c is IApiaField => Boolean(c));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getPageCount() {\r\n return this.#field.pageCount;\r\n }\r\n\r\n getPageSize() {\r\n return this.#field.pageSize;\r\n }\r\n\r\n getRow(index: number) {\r\n return this.#field\r\n .getRowByFieldIndex(index)\r\n ?.map((c) => createNewField(this.#field.getForm().execution, c)!);\r\n }\r\n\r\n getSelection(): IApiaField[][] {\r\n const selected = this.#field.getSelectedRows();\r\n const returnObj: IApiaField[][] = [];\r\n selected.forEach((r) => {\r\n const row: IApiaField[] = [];\r\n r.forEach((c) => {\r\n const fld = createNewField(this.#field.getForm().execution, c);\r\n if (fld) {\r\n row.push(fld);\r\n }\r\n });\r\n returnObj.push(row);\r\n });\r\n return returnObj;\r\n }\r\n\r\n get id() {\r\n return this.#field.definition.id;\r\n }\r\n\r\n isPaged() {\r\n return this.#field.properties.paged;\r\n }\r\n\r\n get rowsCount() {\r\n return this.#field.length;\r\n }\r\n\r\n toggleColumnVisibility(fieldName: string, isShown?: boolean) {\r\n this.#field.toggleColumnVisibility(fieldName, isShown);\r\n }\r\n\r\n toggleDeleteButton(index: number, isShown?: boolean) {\r\n this.#field.toggleDeleteButton(index, isShown);\r\n }\r\n\r\n toggleEditFormButton(rowIndex: number, isShown?: boolean) {\r\n this.#field.toggleEditFormButton(rowIndex, isShown);\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport type TCaptchaField = IApiaField;\r\n\r\nexport default class CaptchaField extends ApiaField implements TCaptchaField {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { File } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { reaction } from 'mobx';\r\n\r\nexport default class FileUploaderField extends ApiaFieldWithAttribute {\r\n #field: File;\r\n constructor(execution: Execution, field: File) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n onChange(cb: (newValue: unknown) => unknown) {\r\n reaction(\r\n () => {\r\n this.#field.getValue();\r\n },\r\n () => {\r\n cb(this.#field.getValue());\r\n },\r\n { fireImmediately: false },\r\n );\r\n }\r\n\r\n setValue(): null {\r\n if (this.#field.definition.id && this.#field.definition.fieldType) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\n\r\nexport default class PasswordField extends ApiaField {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { ModalInput } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class ModalInputField extends ApiaFieldWithAttribute {\r\n #field: ModalInput;\r\n constructor(execution: Execution, field: ModalInput) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getObjectValue(): any | null {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: any): void {\r\n this.#field.setValue(v);\r\n }\r\n public async setValueFromInputWrite(value: string) {\r\n await this.#field.setValueFromInputWrite(value);\r\n }\r\n}\r\n","import { DataGridField as GridField } from './fields';\r\nimport type { IApiaField, IApiaForm } from './types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaFieldWithAttribute } from './ApiaFieldWithAttribute';\r\nimport { createNewField } from './utils/createApiaField';\r\nimport type { Form } from '../main/Execution/FormsExecution/Form';\r\nimport type { FieldWithAttribute } from '../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { Field } from '../main/Execution/FormsExecution/Field';\r\nimport type { Execution, TModalSize } from '../main/Execution';\r\nimport FormConstants from './constants/FormConstants';\r\n\r\nexport class ApiaForm implements IApiaForm {\r\n #form: Form;\r\n #execution: Execution;\r\n constructor(execution: Execution, form: Form) {\r\n this.#form = form;\r\n this.#execution = execution;\r\n }\r\n\r\n getFrmParent(): string {\r\n return this.#form.definition.frmParent;\r\n }\r\n\r\n getFrmId(): string | null {\r\n return this.#form.definition.id;\r\n }\r\n\r\n getFormName(): string {\r\n return this.#form.definition.formName;\r\n }\r\n getFormTitle(): string {\r\n return this.#form.definition.formTitle;\r\n }\r\n openForm(): void {\r\n this.#form.setProperty('prpFrmClosed', false);\r\n }\r\n closeForm(): void {\r\n this.#form.setProperty('prpFrmClosed', true);\r\n }\r\n getProperty<K extends keyof typeof FormConstants>(\r\n name: (typeof FormConstants)[K],\r\n ): unknown {\r\n return this.#form.getProperty(name as any);\r\n }\r\n setProperty<K extends keyof typeof FormConstants>(\r\n name: (typeof FormConstants)[K],\r\n value: unknown,\r\n ): void {\r\n if (name === 'readOnly') {\r\n throw new Error('Cannot update readonly property on forms');\r\n }\r\n this.#form.setProperty(name, value as any);\r\n }\r\n getCustomComponent(attName: string) {\r\n return this.#form.getCustomComponentByAttName(attName);\r\n }\r\n getField(fld: string | number, index?: number): IApiaField | undefined {\r\n const field = this.#form.getField(fld as string, index);\r\n\r\n if (field) {\r\n return createNewField(this.#execution, field as FieldWithAttribute)!;\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldById(fldId: string) {\r\n const field = this.#form.getFieldById(fldId);\r\n\r\n if (field) {\r\n return createNewField(this.#execution, field as Field);\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldColumn(name: string): IApiaField[] {\r\n return arrayOrArray(this.#form.getFieldByName(name))\r\n .map((c) => createNewField(this.#execution, c))\r\n .filter((f): f is IApiaField => Boolean(f));\r\n }\r\n getAllFields(): IApiaField[] {\r\n return this.#form.allFields\r\n .map((c) => createNewField(this.#execution, c))\r\n .filter((f): f is IApiaField => Boolean(f));\r\n }\r\n clearForm(clearReadonlyFields: boolean, deleteGridsRows: boolean): void {\r\n this.getAllFields().forEach((c) => {\r\n if (deleteGridsRows && c instanceof GridField) {\r\n c.clearGrid();\r\n }\r\n\r\n if (c instanceof ApiaFieldWithAttribute) {\r\n if (!c.getProperty('readonly') || clearReadonlyFields) {\r\n c.setValue('');\r\n }\r\n }\r\n });\r\n }\r\n\r\n hideModal() {\r\n this.#execution.emit('hideFormModal', this.#form);\r\n }\r\n\r\n showAsModal(size?: TModalSize) {\r\n this.#execution.emit('showFormAsModal', { form: this.#form, size });\r\n }\r\n}\r\n","import { ActionsController } from './ActionController';\r\nimport type { IApiaField, IApiaForm, IApiaFunctions } from './types';\r\nimport { ApiaForm } from './ApiaForm';\r\nimport type { TFrmParent } from '../main/InitialData/types/TApiaForm';\r\nimport { Execution } from '../main/Execution';\r\nimport { getWindow } from '../util/dom/getWindow';\r\n\r\ndeclare global {\r\n interface Window {\r\n lastModalReturn: string[];\r\n }\r\n}\r\n\r\nexport class ApiaFunctions implements IApiaFunctions {\r\n #execution: Execution;\r\n\r\n constructor(execution: Execution) {\r\n this.#execution = execution;\r\n }\r\n\r\n toJSNumber(_value: string): number | string {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n toApiaNumber(_value: number): number | string {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n openTab(_title: string, _url: string): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n showMessage(_text: string): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n showConfirm(\r\n _text: string,\r\n _title: string,\r\n _callbackFn: (win: boolean) => unknown,\r\n ): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n\r\n getFormByType(frmName: string, frmType: TFrmParent): IApiaForm | null {\r\n const form = this.#execution.getFormByName(frmName, frmType);\r\n if (form) return new ApiaForm(this.#execution, form);\r\n return null;\r\n }\r\n\r\n admEntity(\r\n entName: string,\r\n entNum?: number,\r\n parameters?: string,\r\n width?: number,\r\n height?: number,\r\n ) {\r\n entName;\r\n entNum;\r\n parameters;\r\n width;\r\n height;\r\n }\r\n\r\n clearMessages() {}\r\n\r\n clickActionButton(button: number) {\r\n const id = Number(button);\r\n\r\n switch (id) {\r\n case ActionsController.CONFIRM:\r\n this.#execution.flow.confirm();\r\n break;\r\n case ActionsController.NEXT:\r\n this.#execution.flow.next();\r\n break;\r\n case ActionsController.PREVIOUS:\r\n this.#execution.flow.back();\r\n break;\r\n case ActionsController.SAVE:\r\n this.#execution.flow.save();\r\n break;\r\n case ActionsController.RELEASE:\r\n this.#execution.flow.release();\r\n break;\r\n case ActionsController.DELEGATE:\r\n this.#execution.flow.delegate();\r\n break;\r\n case ActionsController.SHARE:\r\n this.#execution.flow.share();\r\n break;\r\n case ActionsController.VIEW_DOCS:\r\n this.#execution.flow.viewDocs();\r\n break;\r\n case ActionsController.PRINT:\r\n this.#execution.flow.print();\r\n break;\r\n case ActionsController.SEND_TO_DESK:\r\n this.#execution.sendToDesktop();\r\n break;\r\n }\r\n }\r\n\r\n disableActionButton(id: number): void {\r\n ActionsController.instance.disable(id);\r\n }\r\n\r\n enableActionButton(id: number): void {\r\n ActionsController.instance.enable(id);\r\n }\r\n\r\n getAllForms(): IApiaForm[] {\r\n return this.#execution\r\n .getAllForms()\r\n .map((c) => new ApiaForm(this.#execution, c));\r\n }\r\n getAllFormsByType(type: 'P' | 'E'): IApiaForm[] {\r\n return this.#execution.getAllForms().reduce<ApiaForm[]>((acc, c) => {\r\n if (c.definition.frmParent === type) {\r\n acc.push(new ApiaForm(this.#execution, c));\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n getAttField(\r\n attType: 'P' | 'E',\r\n attId: string,\r\n ): IApiaField | IApiaField[] | undefined {\r\n const fields: IApiaField[] = [];\r\n this.getAllFormsByType(attType).forEach((c) =>\r\n fields.push(c.getField(attId) as IApiaField),\r\n );\r\n return fields;\r\n }\r\n\r\n getCurrentLanguageCode(): string | null {\r\n return getWindow(this.#execution).LANG_CODE;\r\n }\r\n\r\n getCurrentProcessName(): string | null {\r\n return this.#execution.environment.properties?.processName ?? '';\r\n }\r\n getCurrentStep(): number | null {\r\n return this.#execution.currentStep;\r\n }\r\n\r\n getCurrentTaskName(): string | null {\r\n return this.#execution.environment.properties?.taskName ?? '';\r\n }\r\n\r\n getEntityForm(frmName: string): IApiaForm | null {\r\n const frm = this.getForm(frmName, 'E');\r\n if (frm) return frm;\r\n return null;\r\n }\r\n\r\n getForm(frmName: string, frmType?: string): IApiaForm | null {\r\n if (frmType === 'E') return this.getFormByType(frmName, frmType);\r\n if (frmType === 'P') return this.getFormByType(frmName, frmType);\r\n const eFrm = this.getFormByType(frmName, 'E');\r\n if (eFrm) {\r\n return eFrm;\r\n }\r\n const pForm = this.getFormByType(frmName, 'P');\r\n return pForm;\r\n }\r\n\r\n getLastModalReturn() {\r\n return this.#execution.getLastModalReturn();\r\n }\r\n\r\n getModalReturn() {\r\n return this.getLastModalReturn();\r\n }\r\n\r\n getModalSelectedRow() {\r\n return this.#execution.getLastModalReturn()?.slice(2);\r\n }\r\n\r\n getModalShowValue() {\r\n return this.#execution.getLastModalReturn()[1];\r\n }\r\n\r\n getModalValue() {\r\n return this.#execution.getLastModalReturn()[0];\r\n }\r\n\r\n getProcessForm(frmName: string): IApiaForm | null {\r\n const frm = this.getForm(frmName, 'P');\r\n if (frm) return frm;\r\n return null;\r\n }\r\n\r\n getRootPath(): string | null {\r\n try {\r\n return getWindow(this.#execution).APIA_ROOT_CONTEXT;\r\n } catch (e: unknown) {\r\n if (e instanceof Error) {\r\n console.error(`Apia JSApi Error: ${e.message}`);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n hideActionButton(id: number): void {\r\n ActionsController.instance.hide(id);\r\n }\r\n\r\n isActionButtonDisabled(id: number) {\r\n return ActionsController.instance.isDisabled(id);\r\n }\r\n isActionButtonHidden(id: number) {\r\n return ActionsController.instance.isHidden(id);\r\n }\r\n\r\n saveTask() {\r\n this.#execution.flow.save();\r\n }\r\n\r\n setLastModalReturn(value: string[]) {\r\n getWindow(this.#execution).lastModalReturn = value;\r\n }\r\n\r\n setStepTitle(stepNumber: number, stepTitle: string): void {\r\n this.#execution.setStepTitle(stepNumber, stepTitle);\r\n }\r\n\r\n showActionButton(id: number): void {\r\n ActionsController.instance.show(id);\r\n }\r\n\r\n viewAdmEntity(entName: string, entNum?: number) {\r\n this.admEntity(entName, entNum);\r\n }\r\n}\r\n","import { computed, makeObservable, observable, toJS } from 'mobx';\r\nimport { makeApiaUrl } from '../../../../util';\r\nimport { actions } from '../constants/actions';\r\nimport { parseXml, post } from '../../../../util';\r\nimport type { Form } from '../Form';\r\nimport { setAjaxFormResponse } from '../events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../types';\r\nimport { ResponseSysMessages } from '../../../../util/api/types';\r\nimport {\r\n ComponentEvent,\r\n TCusCmpStateRequest,\r\n TCustomComponentDefaultResponse,\r\n TCustomComponentDefinition,\r\n} from '../../../InitialData/types/TApiaForm';\r\nimport {\r\n arrayOrArray,\r\n decodeBase64ToUtf8,\r\n DeepReadonly,\r\n encodeStrToBase64Utf8,\r\n} from '@apia/util';\r\nimport { TFncParams } from '../Field';\r\nimport { MessageNotification } from '../../../Notifications/MessageNotification';\r\nimport { labels } from '../../../../util/labels/labels';\r\nimport { ApiaForm, ApiaFunctions } from '../../../../programming';\r\nimport { getWindow } from '../../../../util/dom/getWindow';\r\nimport type { Execution } from '../..';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\nimport { parseSuccessfulResponse } from '../../../../util/api/apiaApi';\r\n\r\nexport type TCustomComponentState = {\r\n isLoading: boolean;\r\n\r\n attributes: Record<string, any[]>;\r\n properties: Record<string, any>;\r\n additional: any;\r\n\r\n component: any;\r\n};\r\n\r\nexport class CustomComponent {\r\n #hasInited = false;\r\n private form: Form = {} as Form;\r\n private _state: TCustomComponentState = {\r\n isLoading: false,\r\n attributes: {},\r\n properties: {},\r\n additional: {},\r\n component: null,\r\n };\r\n\r\n constructor(\r\n public execution: Execution,\r\n public readonly definition: TCustomComponentDefinition,\r\n ) {\r\n if (definition.error_while_processing) {\r\n throw new Error(\r\n `Cannot initialize custom component ${definition.name}: ${definition.error_while_processing}`,\r\n );\r\n }\r\n\r\n makeObservable<CustomComponent, '_state'>(this, {\r\n _state: observable,\r\n state: computed,\r\n });\r\n this.parseStateObject(definition.state.state);\r\n }\r\n\r\n public get state(): DeepReadonly<TCustomComponentState> {\r\n return toJS(this._state);\r\n }\r\n\r\n public getAdditional<T>() {\r\n return this.state.additional as DeepReadonly<T>;\r\n }\r\n\r\n public getCurrentForm() {\r\n return new ApiaForm(this.execution!, this.form);\r\n }\r\n\r\n async init(form: Form) {\r\n if (this.#hasInited) throw new Error('Cannot init field twice');\r\n this.#hasInited = true;\r\n this.form = form;\r\n }\r\n\r\n private parseStateObject(o: TCusCmpStateRequest) {\r\n if (o.additional) {\r\n try {\r\n this._state.additional = JSON.parse(o.additional);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n arrayOrArray(o.attribute).forEach((c) => {\r\n this._state.attributes[c.name] = arrayOrArray(\r\n JSON.parse(decodeBase64ToUtf8(c.values)),\r\n );\r\n });\r\n arrayOrArray(o.property).forEach((c) => {\r\n this._state.properties[c.name] = c.value;\r\n });\r\n }\r\n\r\n public async processResult<\r\n Result extends Record<string, unknown> = Record<string, unknown>,\r\n >(res?: TCustomComponentDefaultResponse | null) {\r\n let proceed = true;\r\n const scheduledEvents: string[] = [];\r\n\r\n const newState = res?.processResult?.state;\r\n\r\n if (newState) {\r\n for (const directive of arrayOrArray(newState.directive)) {\r\n if (directive.type === 'RELOAD') {\r\n proceed = false;\r\n getWindow(this.execution).location.assign(\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'reload',\r\n nuevo: true,\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n );\r\n } else if (directive.type === 'FIRE') {\r\n scheduledEvents.push(directive.content);\r\n }\r\n }\r\n }\r\n\r\n if (proceed) {\r\n if (res!.ajaxUpdated) {\r\n const result = parseXml(res!.ajaxUpdated);\r\n\r\n setAjaxFormResponse(\r\n this.execution,\r\n result as TFieldAjaxEventResponsePayload & ResponseSysMessages,\r\n );\r\n }\r\n\r\n if (newState) {\r\n this.parseStateObject(newState);\r\n }\r\n\r\n for await (const event of scheduledEvents) {\r\n await this.fireEvent(event);\r\n }\r\n\r\n this._state.isLoading = false;\r\n\r\n return res!.processResult?.state?.result as Result & { success: boolean };\r\n }\r\n }\r\n\r\n protected getScriptEventParams(fncParams: TFncParams[]): unknown[] {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n new ApiaFunctions(this.execution)\r\n .getForm(\r\n this.form.definition.formName,\r\n this.form.definition.frmParent,\r\n )!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n protected async fireScriptEvents(event: ComponentEvent): Promise<boolean> {\r\n let result = true;\r\n\r\n for await (const script of arrayOrArray(event.script)) {\r\n const def = JSON.parse(script.text) as {\r\n fncName: string;\r\n fncParams: {\r\n type: 'P' | 'E';\r\n attId: number;\r\n }[];\r\n };\r\n\r\n try {\r\n const fn = (window as any)[def.fncName] as (\r\n src: CustomComponent | Form,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n result =\r\n result &&\r\n (await fn(\r\n this,\r\n ...this.getScriptEventParams(arrayOrArray(def.fncParams)),\r\n ));\r\n } catch (e) {\r\n console.error(e);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message: labels.errorOnEvent(this.execution, def.fncName),\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async fireEvent(evtName: string) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const event = arrayOrArray(this.definition.event).find(\r\n (c) => c.name === evtName,\r\n );\r\n if (!event) {\r\n throw new Error('Unknown event ' + evtName);\r\n }\r\n\r\n const scriptsResult =\r\n !event.script || (await this.fireScriptEvents(event));\r\n\r\n if (scriptsResult && event.serverEvents) {\r\n return (\r\n (\r\n await this.processResult(\r\n (await this.postMessage('fireEvent', evtName))?.data,\r\n )\r\n )?.success || false\r\n );\r\n }\r\n\r\n return scriptsResult && !event.serverEvents;\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n getProperty(prpName: string) {\r\n return this._state.properties[prpName];\r\n }\r\n\r\n private async postMessage(method: string, body: any) {\r\n return post<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method,\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postData:\r\n typeof body === 'string'\r\n ? {\r\n payload: encodeStrToBase64Utf8(body),\r\n }\r\n : body,\r\n postDataTreatment: 'stringify',\r\n },\r\n );\r\n }\r\n\r\n async setStringValue(attName: string, value: string) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setValue',\r\n JSON.stringify({\r\n attName,\r\n clear: true,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n getStringValue(attName: string) {\r\n return this._state.attributes[attName]?.join('');\r\n }\r\n\r\n getValue(attName: string, index: number = 0) {\r\n return this._state.attributes[attName]?.[index];\r\n }\r\n\r\n getValues(attName: string) {\r\n return this._state.attributes[attName];\r\n }\r\n\r\n async removeIndex(attName: string, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await post<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method: 'removeIndex',\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postData: {\r\n attName,\r\n index,\r\n },\r\n postDataTreatment: 'stringify',\r\n },\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async setValue(attName: string, value: any, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setValue',\r\n JSON.stringify({\r\n index,\r\n attName,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async setProperty(prpName: string, value: any) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setProperty',\r\n JSON.stringify({\r\n prpName,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async sendMessage<\r\n T extends Record<string, unknown> = Record<string, unknown>,\r\n >(payload: any) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return await this.processResult<T>(\r\n (\r\n await this.postMessage(\r\n 'message',\r\n typeof payload === 'object' && payload\r\n ? JSON.stringify(payload)\r\n : payload,\r\n )\r\n )?.data,\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async download(attName: string, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const data = await this.processResult<{ url: string }>(\r\n (await this.postMessage('download', { attName, index }))?.data,\r\n );\r\n\r\n if (data?.url) {\r\n window.open(data.url, '_blank');\r\n }\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async upload(\r\n attName: string,\r\n file: File,\r\n options?: {\r\n onUploadProgress?: (percent: number) => unknown;\r\n params?: Record<string, any>;\r\n } & Pick<AxiosRequestConfig<any>, 'signal'>,\r\n ) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n Object.entries(options?.params || {}).forEach(([key, value]) =>\r\n formData.append(key, value),\r\n );\r\n\r\n const response = await axios.post<string>(\r\n await makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method: 'upload',\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n attName,\r\n originalName: file.name,\r\n }),\r\n formData,\r\n {\r\n signal: options?.signal,\r\n onUploadProgress({ total, progress }) {\r\n const percent =\r\n Math.round(((progress || 0) / (total || 1)) * 100 * 100) / 100;\r\n options?.onUploadProgress?.(percent);\r\n },\r\n },\r\n );\r\n\r\n const result =\r\n await parseSuccessfulResponse<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n response,\r\n );\r\n\r\n return await this.processResult<{ index: number; fileName: string }>(\r\n result,\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n public setState<K extends keyof TCustomComponentState>(\r\n prop: K,\r\n value: TCustomComponentState[K],\r\n ) {\r\n this._state[prop] = value;\r\n }\r\n}\r\n","import { Notification, NotificationDefinition } from './Notification';\r\n\r\nexport class StatusNotification extends Notification<\r\n NotificationDefinition & { blocking: boolean }\r\n> {\r\n constructor(\r\n public readonly props: NotificationDefinition & { blocking: boolean },\r\n ) {\r\n super(props);\r\n }\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { Notification } from './Notification';\r\nimport { EventEmitter } from '../../util';\r\nimport type { CustomComponent } from '../Execution/FormsExecution/customComponents/CustomComponent';\r\nimport type { Field } from '../Execution/FormsExecution/Field';\r\nimport type { Execution } from '../Execution';\r\n\r\nexport type FocusTarget = {\r\n element: Field | CustomComponent;\r\n};\r\n\r\nexport class Notifications {\r\n private emitter = new EventEmitter<{\r\n closeTab: null;\r\n kill: null;\r\n notification: Notification;\r\n }>();\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable<Notifications, 'notifications'>(this, {\r\n notifications: observable,\r\n add: action,\r\n remove: action,\r\n });\r\n }\r\n\r\n protected notifications: Notification[] = [];\r\n\r\n add(notification: Notification) {\r\n this.notifications.push(notification);\r\n this.emitter.emit('notification', notification);\r\n }\r\n\r\n closeTab() {\r\n this.emitter.emit('closeTab', null);\r\n }\r\n\r\n getAll() {\r\n return this.notifications;\r\n }\r\n\r\n getById(id: string | number) {\r\n return this.notifications.find((c) => c.id === id);\r\n }\r\n\r\n kill() {\r\n this.emitter.emit('kill', null);\r\n }\r\n\r\n remove(notification: string | number | Notification) {\r\n this.notifications = this.notifications.filter((c) => {\r\n if (typeof notification === 'string' || typeof notification === 'number')\r\n return c.id !== notification;\r\n return c !== notification;\r\n });\r\n }\r\n\r\n on = this.emitter.on.bind(this.emitter);\r\n}\r\n","import type {\r\n TApiaForm,\r\n TApiaFormProperties,\r\n TFormEventName,\r\n} from '../../InitialData/types/TApiaForm';\r\nimport type { Execution } from '..';\r\nimport type { TSignaturesData } from './types';\r\nimport { Field, getApiaFunctions, TFncParams } from './Field';\r\nimport type {\r\n TApiaFieldBaseDefinition,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { parseFakeJSON } from '../../../util/other/parseFakeJSON';\r\nimport { WithProperties } from './WithProperties';\r\nimport { makeApiaUrl, post, get } from '../../../util';\r\nimport { computed, makeObservable, observable } from 'mobx';\r\nimport type { FieldWithAttribute } from './FieldWithAttribute';\r\nimport { CustomComponent } from './customComponents/CustomComponent';\r\nimport { Grid } from './fields';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaForm } from '../../../programming/ApiaForm';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { labels } from '../../../util/labels/labels';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport { TApiaFieldCommonProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport class Form extends WithProperties<TApiaFormProperties> {\r\n fields: TApiaFieldBaseDefinition<Record<string, any>>[];\r\n state = { isMarkedToSign: false };\r\n protected _customComponents: Map<string, CustomComponent> = new Map();\r\n protected fieldsById = new Map<\r\n string,\r\n Field<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n {\r\n definition: Omit<\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n 'properties'\r\n >;\r\n }\r\n >\r\n >();\r\n protected fieldsByName = new Map<\r\n string,\r\n Field<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n {\r\n definition: Omit<\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n 'properties'\r\n >;\r\n }\r\n >\r\n >();\r\n protected fieldsByAttributeId = new Map<\r\n string | number,\r\n FieldWithAttribute<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n TApiaFieldWithAttributeBaseProps<Record<string, any>>\r\n >\r\n >();\r\n protected fieldsByAttributeName = new Map<\r\n string,\r\n FieldWithAttribute<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n TApiaFieldWithAttributeBaseProps<Record<string, any>>\r\n >\r\n >();\r\n protected fieldsGroups = new Map<string, Grid>();\r\n definition: TApiaForm = {} as TApiaForm;\r\n\r\n constructor(\r\n public execution: Execution,\r\n definition: TApiaForm,\r\n ) {\r\n const props = parseFakeJSON<TApiaFormProperties>(definition.properties);\r\n super(props);\r\n makeObservable<Form, 'state'>(this, {\r\n state: observable,\r\n allFields: computed,\r\n customComponents: computed,\r\n });\r\n\r\n this.definition = definition;\r\n\r\n this.fields = arrayOrArray(definition.field).sort((a, b) => {\r\n if (a.y < b.y) return -1;\r\n if (a.y > b.y) return 1;\r\n\r\n if (a.x < b.x) return -1;\r\n if (a.x > b.x) return 1;\r\n\r\n return 0;\r\n });\r\n\r\n this.state.isMarkedToSign = this.definition.markedToSign;\r\n }\r\n\r\n get allFields() {\r\n return [...this.fieldsById.values()];\r\n }\r\n\r\n get customComponents() {\r\n return this._customComponents;\r\n }\r\n\r\n closeForm() {\r\n this.properties.prpFrmClosed = true;\r\n }\r\n openForm() {\r\n this.properties.prpFrmClosed = false;\r\n }\r\n\r\n getField(field: string, index?: number) {\r\n const found =\r\n this.getFieldById(field, index) ||\r\n this.getFieldByName(field, index) ||\r\n this.getFieldByAttributeId(field, index) ||\r\n this.getFieldByAttributeName(field, index);\r\n\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getField(field, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldByAttributeId(attId: string | number, index?: number) {\r\n const found = this.fieldsByAttributeId.get(String(attId));\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByAttributeId(attId, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldByAttributeName(attName: string, index?: number) {\r\n const found = this.fieldsByAttributeName.get(attName);\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByAttributeName(attName, index);\r\n return res;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getFieldById(id: string | number, index?: number) {\r\n const found = this.fieldsById.get(String(id));\r\n if (found) return found;\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldById(id, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getFieldByName(name: string, index?: number): Field | Field[] | undefined {\r\n const found = this.fieldsByName.get(String(name));\r\n if (found) return found;\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByName(name, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected getHiddenFields() {\r\n return this.allFields.filter((c) => c.getProperty('visibilityHidden'));\r\n }\r\n async markFormToSign() {\r\n void post<{ success: boolean }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'markFormToSign',\r\n frmId: this.definition.id,\r\n frmParent: this.definition.frmParent,\r\n sign: !this.state.isMarkedToSign,\r\n react: true,\r\n }),\r\n ).then((res) => {\r\n if (res?.data && res.data.success) {\r\n this.state.isMarkedToSign = !this.state.isMarkedToSign;\r\n }\r\n });\r\n }\r\n\r\n async viewSigns(): Promise<TSignaturesData | undefined> {\r\n const res = await get<TSignaturesData>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n action: 'viewSigns',\r\n frmId: this.definition.id,\r\n frmParent: this.definition.frmParent,\r\n react: true,\r\n }),\r\n );\r\n if (res?.data) {\r\n return res.data;\r\n }\r\n }\r\n\r\n private cucCmpByAttId = new Map<number, CustomComponent>();\r\n private cucCmpByFldId = new Map<number, CustomComponent>();\r\n private cucCmpByAttName = new Map<string, CustomComponent>();\r\n private mustRenderFields: string[] = [];\r\n\r\n getCustomComponentByFldId(fldId: number) {\r\n return this.cucCmpByFldId.get(fldId);\r\n }\r\n\r\n getCustomComponentByAttId(attId: number) {\r\n return this.cucCmpByAttId.get(attId);\r\n }\r\n\r\n getCustomComponentByAttName(attName: string) {\r\n return this.cucCmpByAttName.get(attName);\r\n }\r\n\r\n public addFieldToRender(fldId: string, fldIndex: number = 0) {\r\n this.mustRenderFields.push(fldId + '_' + fldIndex);\r\n }\r\n\r\n public markFieldAsRendered(fldId: string, fldIndex: number = 0) {\r\n this.mustRenderFields = this.mustRenderFields.filter(\r\n (c) => c !== fldId + '_' + fldIndex,\r\n );\r\n if (this.mustRenderFields.length - this.getHiddenFields().length === 0) {\r\n this.execution.markFormAsRendered(\r\n this.definition.frmParent,\r\n this.definition.formName,\r\n );\r\n }\r\n }\r\n\r\n async init() {\r\n const cusFields = arrayOrArray(this.definition.customField);\r\n\r\n for await (const field of arrayOrArray(this.fields)) {\r\n this.mustRenderFields.push(field.id + '_' + (field.index ?? 0));\r\n }\r\n for await (const customComponent of cusFields) {\r\n this.mustRenderFields.push(customComponent.id + '_' + 0);\r\n }\r\n for await (const customComponent of cusFields) {\r\n const cc = new CustomComponent(this.execution, customComponent);\r\n await cc.init(this);\r\n this._customComponents.set(customComponent.id, cc);\r\n arrayOrArray(customComponent.state.state.attribute).forEach((a) => {\r\n this.cucCmpByAttId.set(Number.parseInt(String(a.attId)), cc);\r\n this.cucCmpByAttName.set(a.attName, cc);\r\n this.cucCmpByFldId.set(Number.parseInt(String(customComponent.id)), cc);\r\n });\r\n }\r\n\r\n for await (const field of arrayOrArray(this.fields)) {\r\n /**\r\n * Esto es necesario ya que desde el server llega un objeto js en el properties.\r\n */\r\n field.properties = parseFakeJSON(field.properties as any);\r\n\r\n const fieldConstructor =\r\n this.execution.fieldsMapping[field.fieldType](field);\r\n\r\n if (fieldConstructor) {\r\n const newField = new fieldConstructor(field);\r\n await newField.init(this);\r\n\r\n this.fieldsById.set(\r\n String(newField.definition.id),\r\n newField as Field<any>,\r\n );\r\n if (newField.properties?.name) {\r\n this.fieldsByName.set(\r\n String(newField.properties?.name),\r\n newField as Field<any>,\r\n );\r\n }\r\n if ((field as TApiaFieldWithAttributeBaseProps<any>).attName) {\r\n this.fieldsByAttributeId.set(\r\n String((field as TApiaFieldWithAttributeBaseProps<any>).attId),\r\n newField as FieldWithAttribute<any>,\r\n );\r\n this.fieldsByAttributeName.set(\r\n (field as TApiaFieldWithAttributeBaseProps<any>).attName,\r\n newField as FieldWithAttribute<any>,\r\n );\r\n }\r\n\r\n if (newField instanceof Grid) {\r\n this.fieldsGroups.set(String(newField.definition.id), newField);\r\n }\r\n } else {\r\n throw new Error(\r\n `Cannot build field of type ${field.fieldType}. There is no mapping for such type.`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n protected async getScriptEventParams(\r\n fncParams: TFncParams[],\r\n ): Promise<unknown[]> {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n (await getApiaFunctions(this.execution))\r\n .getForm(this.definition.formName, this.definition.frmParent)!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n\r\n public async fireScriptEvent(eventName: TFormEventName): Promise<boolean> {\r\n if (eventName === 'onLoad') {\r\n const mapEvent = getWindow(this.execution)[\r\n `LOAD_RELOAD_MAP_${this.definition.frmParent}`\r\n ] as any as Record<string, string>;\r\n const mappedEvent = mapEvent\r\n ? mapEvent[this.definition.formName]\r\n : undefined;\r\n const actualMapEvent =\r\n mapEvent &&\r\n (!mappedEvent || mappedEvent === 'load' ? 'onLoad' : 'onReload');\r\n eventName =\r\n actualMapEvent ||\r\n (getWindow(this.execution).IS_RELOAD ? 'onReload' : 'onLoad');\r\n }\r\n\r\n const events = (this.definition.scriptEvents || []).filter(\r\n (c) => c.evtName === eventName,\r\n );\r\n if (events.length > 0) {\r\n const unlock = this.execution.lock();\r\n\r\n try {\r\n for (const event of events) {\r\n try {\r\n const fn = (getWindow(this.execution) as any)[event.fncName] as (\r\n src: ApiaForm,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n const result = await fn(\r\n new ApiaForm(this.execution, this)!,\r\n ...(await this.getScriptEventParams(event.fncParams)),\r\n );\r\n if (!result) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this.execution.notifications.add(\r\n new MessageNotification({\r\n message: labels.errorOnEvent(this.execution, event.fncName) + e,\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n async validate(): Promise<true | Field> {\r\n let isValid = true;\r\n let firstInvalid: Field | null = null;\r\n\r\n if (this.properties.frmHidden) {\r\n return true;\r\n }\r\n\r\n for await (const field of this.allFields) {\r\n if (field.definition.fieldType === 'grid') {\r\n const result = await (field as Grid).validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n isValid = false;\r\n } else {\r\n isValid = isValid && result === true;\r\n }\r\n } else if (field instanceof Field) {\r\n isValid = (await field.validate()) && isValid;\r\n if (!isValid && !firstInvalid) {\r\n firstInvalid = field;\r\n }\r\n }\r\n }\r\n\r\n return isValid || firstInvalid!;\r\n }\r\n\r\n getProperty<K extends keyof TApiaFormProperties>(\r\n propName: K | 'readOnly',\r\n ): TApiaFormProperties[K] {\r\n if (propName === 'readOnly') {\r\n return this.definition.readOnly || this.definition.readonly;\r\n }\r\n return super.getProperty(propName);\r\n }\r\n}\r\n","import { getDocument } from '../../../util/dom/getDocument';\r\nimport { parseXml } from '../../../util/xml/parseXml';\r\nimport type { Execution } from '../../Execution';\r\nimport { TApiaForm } from '../types/TApiaForm';\r\n\r\nfunction decodeBase64ToUtf8(base64String: string) {\r\n const binaryString = atob(base64String);\r\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\r\n return new TextDecoder('utf-8').decode(bytes);\r\n}\r\n\r\nasync function getFormXMLDataAsObj(\r\n formDiv: HTMLElement,\r\n): Promise<TApiaForm | null> {\r\n if (formDiv.dataset.xml) {\r\n const formData = (await parseXml(\r\n decodeBase64ToUtf8(formDiv.dataset.xml),\r\n )) as TApiaForm;\r\n return formData;\r\n }\r\n return null;\r\n}\r\n\r\nexport async function readFormsDefinition(execution: Execution) {\r\n const elements = [\r\n ...getDocument(execution).querySelectorAll('.formContainer'),\r\n ];\r\n const forms: TApiaForm[] = [];\r\n\r\n for await (const form of elements) {\r\n const def = await getFormXMLDataAsObj(form as HTMLElement);\r\n if (def) forms.push(def);\r\n }\r\n\r\n return forms;\r\n}\r\n","import type { Execution } from '../Execution';\r\nimport { readFormsDefinition } from './bootstrap/readFormsDefinition';\r\n\r\nexport class InitialData {\r\n public static getFormsDefinition(execution: Execution) {\r\n return readFormsDefinition(execution);\r\n }\r\n}\r\n","import {\r\n TApiaFieldBaseDefinition,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { Field } from './Field';\r\nimport { TranslatableField } from './TranslatableField';\r\nimport { Button } from './fields/Button';\r\nimport { Captcha } from './fields/Captcha';\r\nimport { Checkbox } from './fields/Checkbox';\r\nimport { Editor } from './fields/Editor';\r\nimport { File } from './fields/File';\r\nimport { Grid } from './fields/Grid';\r\nimport { GridPaginated } from './fields/GridPaginated';\r\nimport { Hidden } from './fields/Hidden';\r\nimport { Image } from './fields/Image';\r\nimport { Input } from './fields/Input';\r\nimport { Label } from './fields/Label';\r\nimport { Link } from './fields/Link';\r\nimport { ModalInput } from './fields/ModalInput';\r\nimport { Multiple } from './fields/Multiple';\r\nimport { Password } from './fields/Password';\r\nimport { Radio } from './fields/Radio';\r\nimport { Select } from './fields/Select';\r\nimport { Textarea } from './fields/Textarea';\r\nimport { Title } from './fields/Title';\r\nimport { Tree } from './fields/Tree';\r\nimport { FieldWithAttribute } from './FieldWithAttribute';\r\nimport { GridProps } from './fields/Grid/types';\r\nimport { SchedulerField } from './fields/Scheduler';\r\nimport { TApiaLabelProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport type FieldConstructor = new (\r\n definition: any,\r\n) =>\r\n | Field<any, any, any>\r\n | FieldWithAttribute<any, any, any>\r\n | TranslatableField<any, any, any>;\r\n\r\nexport type FieldsMapping = Record<\r\n string,\r\n (definition: any) => FieldConstructor\r\n>;\r\n\r\nexport const defaultFieldsMap: FieldsMapping = Object.freeze({\r\n area: () => Textarea,\r\n button: () => Button,\r\n captcha: () => Captcha,\r\n check: () => Checkbox,\r\n editor: () => Editor,\r\n file: () => File,\r\n grid: (def) => {\r\n const definition = def as TApiaFieldBaseDefinition<GridProps>;\r\n\r\n if (definition?.properties?.paged) {\r\n return GridPaginated;\r\n }\r\n\r\n return Grid;\r\n },\r\n hidden: () => Hidden,\r\n href: () => Link,\r\n image: () => Image,\r\n input: (def) => {\r\n const definition = def as TApiaFieldWithAttributeBaseProps<any>;\r\n\r\n if (definition.qryId) {\r\n return ModalInput;\r\n }\r\n\r\n return Input;\r\n },\r\n label: (def) => {\r\n const definition =\r\n def as TApiaFieldWithAttributeBaseProps<TApiaLabelProperties>;\r\n const value = definition.properties?.value;\r\n if (value && String(value).indexOf('schedContainer') !== -1) {\r\n return SchedulerField;\r\n }\r\n\r\n return Label;\r\n },\r\n multiple: () => Multiple,\r\n password: () => Password,\r\n radio: () => Radio,\r\n select: () => Select,\r\n title: () => Title,\r\n tree: () =>\r\n Tree as new (definition: any) => FieldWithAttribute<any, any, any>,\r\n});\r\n","import { action, computed, makeObservable, observable } from 'mobx';\r\nimport { TProcess } from './types';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { TModalConfig, UploaderApi } from '../Uploader';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport class Process {\r\n state: TProcess | null = null;\r\n\r\n uploader: UploaderApi;\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n setPriority: action,\r\n name: computed,\r\n });\r\n\r\n this.uploader = new UploaderApi(\r\n this.execution,\r\n 'ProcessUploader',\r\n 'P',\r\n getWindow(this.execution)\r\n .processDocumentsModalConfiguration as any as TModalConfig,\r\n );\r\n }\r\n\r\n get name() {\r\n if (this.state) return this.state.identifier.label;\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n const res = await post<{ processData: string }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getProcessData',\r\n isAjax: true,\r\n }),\r\n );\r\n if (!res?.data?.processData) {\r\n throw new Error('Cannot retrieve the process data');\r\n }\r\n\r\n this.uploader.init();\r\n this.uploader.on('fileUploaded', () => {\r\n this.execution.state.hasChangedAnything = true;\r\n });\r\n\r\n const parsedData: TProcess = JSON.parse(res?.data?.processData);\r\n const calValue = arrayOrArray(parsedData.calendar?.options).find(\r\n (c) => c.selected,\r\n )?.value;\r\n const priorityValue =\r\n arrayOrArray(parsedData.priority.options).find((c) => c.selected)\r\n ?.value ?? arrayOrArray(parsedData?.priority?.options)[0]?.value;\r\n\r\n this.state = parsedData;\r\n if (calValue) this.state.calendar.value = calValue;\r\n if (priorityValue) this.state.priority.value = priorityValue;\r\n }\r\n }\r\n\r\n getConfirmParams() {\r\n return {\r\n cmbProPri: this.state?.priority?.value,\r\n selCal: this.state?.calendar?.value,\r\n };\r\n }\r\n\r\n setPriority(newPriority: string) {\r\n if (this.state?.priority) this.state.priority.value = newPriority;\r\n }\r\n}\r\n","export class Task {\r\n #name: string;\r\n constructor(task: any) {\r\n this.#name = task.name;\r\n }\r\n setPriority(newPriority: string) {\r\n newPriority;\r\n }\r\n get name() {\r\n return this.#name;\r\n }\r\n}\r\n","import { computed, makeObservable, observable } from 'mobx';\r\nimport { Association, PoolId, TCategory, TEntity } from './type';\r\nimport { getLabel, makeApiaUrl, post } from '../../../util';\r\nimport { arrayOrArray, uniqueId } from '@apia/util';\r\nimport { TModalConfig, UploaderApi } from '../Uploader';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\nimport {\r\n Row,\r\n TableController,\r\n TBuildRow,\r\n TBuildTable,\r\n} from '@apia/table2-controller';\r\nimport { labels } from '../../../util/labels/labels';\r\n\r\nexport class Entity {\r\n state: TEntity | null = null;\r\n\r\n uploader: UploaderApi;\r\n controller: TableController = new TableController({\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n });\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n name: computed,\r\n });\r\n\r\n this.uploader = new UploaderApi(\r\n execution,\r\n 'EntityUploader',\r\n 'E',\r\n getWindow(this.execution)\r\n .entityDocumentsModalConfiguration as any as TModalConfig,\r\n );\r\n }\r\n\r\n get name() {\r\n if (this.state) return this.state.identifier.label;\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n const res = await post<{ entityData: string }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getEntityData',\r\n isAjax: true,\r\n }),\r\n );\r\n if (!res?.data?.entityData) {\r\n throw new Error('Cannot retrieve the entity data');\r\n }\r\n this.uploader.init();\r\n this.uploader.on('fileUploaded', () => {\r\n this.execution.state.hasChangedAnything = true;\r\n });\r\n\r\n const parsedData: TEntity = JSON.parse(res?.data?.entityData);\r\n const statusValue = arrayOrArray(parsedData.status.options).find(\r\n (c) => c.selected,\r\n )?.value;\r\n this.state = parsedData;\r\n this.state.visibilities = [];\r\n this.state.categories = [];\r\n this.state.image.file = null;\r\n\r\n if (statusValue && this.state.status)\r\n this.state.status.value = statusValue;\r\n\r\n if (getWindow(this.execution).LBL_CATEGORIES_LABEL) {\r\n await this.loadCategories();\r\n }\r\n if (getWindow(this.execution).LBL_VISIBILITIES_LABEL) {\r\n await this.loadPools();\r\n }\r\n if (getWindow(this.execution).LBL_ENTITIES_ASSOCIATIONS) {\r\n await this.loadAssociations();\r\n }\r\n }\r\n }\r\n\r\n public addAssociation() {\r\n const id = String(uniqueId());\r\n this.state!.associations.push({\r\n asocId: id,\r\n asocName: '',\r\n asocRelName: '',\r\n });\r\n const row = new Row(id);\r\n row.build({\r\n id: String(uniqueId()),\r\n cells: [{ colName: 'name' }, { colName: 'relName' }],\r\n isSelected: true,\r\n });\r\n this.controller.body.addRow(row);\r\n this.controller.setSelection([\r\n this.controller.body.getState('rows').length,\r\n ]);\r\n }\r\n\r\n public getConfirmParams() {\r\n const result: any = {\r\n busEntSta: this.state?.status.value ?? '',\r\n };\r\n\r\n if (this.state?.identifier?.body?.value) {\r\n result.txtEntNum = this.state?.identifier.body.value ?? '';\r\n }\r\n\r\n if (this.state?.categories) {\r\n result.catId = this.state?.categories.map((c) => c.id);\r\n\r\n this.state?.categories\r\n .filter((c) => c.checked)\r\n .forEach((c) => {\r\n result[`chkCat_${c.id}`] = 'on';\r\n });\r\n\r\n result['hidTemplateWithCategories'] = 'true';\r\n }\r\n\r\n if (this.state?.visibilities) {\r\n result['hidTemplateWithVisibilities'] = 'true';\r\n result.poolId = this.state?.visibilities.map((c) => c.poolId);\r\n\r\n this.state?.visibilities\r\n .filter((c) => c.canUpdate)\r\n .forEach((v) => {\r\n result[`chkVisPoolUpdate${v.poolId}`] = 'on';\r\n });\r\n }\r\n\r\n if (this.state?.associations) {\r\n result['hidTemplateWithAsociation'] = 'true';\r\n result.asocId = this.state?.associations.map((c) => c.asocId);\r\n result.asocName = this.state?.associations.map((c) => c.asocName);\r\n result.asocRelName = this.state?.associations.map((c) => c.asocRelName);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected loadCategories = async () => {\r\n const res = await post<{ category: TCategory[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadCategories',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state)\r\n if (res?.data?.category) {\r\n this.state.categories = arrayOrArray(res.data.category);\r\n } else {\r\n this.state.categories = [];\r\n }\r\n };\r\n\r\n protected loadPools = async () => {\r\n const res = await post<{ pool: PoolId[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadPools',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state?.visibilities) {\r\n if (res?.data?.pool) {\r\n this.state.visibilities = arrayOrArray(res.data.pool);\r\n } else {\r\n this.state.visibilities = [];\r\n }\r\n }\r\n };\r\n\r\n protected loadAssociations = async () => {\r\n const res = await post<{ asociation: Association[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadAsociations',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state) {\r\n this.state.associations = arrayOrArray(res?.data?.asociation);\r\n const rows = this.parseRows(arrayOrArray(res?.data?.asociation));\r\n const tableJson = {\r\n columns: [\r\n {\r\n colName: 'name',\r\n content: getLabel(this.execution, 'lblBusEntInst').text,\r\n className: 'header',\r\n },\r\n {\r\n colName: 'relName',\r\n content: getLabel(this.execution, 'lblBusEntInstAsocName').text,\r\n className: 'header',\r\n },\r\n ],\r\n rows,\r\n filters: [],\r\n } as TBuildTable;\r\n this.controller.build(tableJson);\r\n }\r\n };\r\n\r\n private parseRows(row: Association[]) {\r\n return row.map((r) => {\r\n const newRow: TBuildRow = {\r\n id: r.asocId,\r\n cells: [\r\n {\r\n colName: 'name',\r\n content: r.asocName,\r\n },\r\n {\r\n colName: 'relName',\r\n content: r.asocRelName,\r\n },\r\n ],\r\n };\r\n return newRow;\r\n });\r\n }\r\n\r\n public deleteAssociation() {\r\n const selectedRows = this.controller.getState('selection');\r\n const lastIdx = Array.from(selectedRows).pop()?.index;\r\n\r\n [...selectedRows.values()].forEach((row) => {\r\n this.state!.associations =\r\n this.state?.associations.filter((_, idx) => row.index !== idx) ?? [];\r\n this.controller.body.removeRow(row);\r\n });\r\n if (lastIdx) this.controller.setSelection([lastIdx - 1]);\r\n }\r\n\r\n public deleteVisibility(id: string) {\r\n if (this.state) {\r\n this.state.visibilities = this.state.visibilities.filter(\r\n (c) => c.poolId !== id,\r\n );\r\n }\r\n }\r\n\r\n public validateAssociations() {\r\n if (this.state?.associations.length === 0) return true;\r\n if (this.state) {\r\n const invalidAssociations = this.state.associations.filter(\r\n (c) => !c.asocName || !c.asocRelName,\r\n );\r\n if (invalidAssociations.length > 0) {\r\n invalidAssociations.forEach((c, idx) => {\r\n c.errorRelNameMessage = '';\r\n c.errorNameMessage = '';\r\n c.focusTarget = undefined;\r\n\r\n if (idx === 0) c.focusTarget = true;\r\n\r\n if (c.asocName === '')\r\n c.errorNameMessage = labels.errorFieldRequired(this.execution);\r\n\r\n if (c.asocRelName === '')\r\n c.errorRelNameMessage = labels.errorFieldRequired(this.execution);\r\n });\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { TObservation, TObservations } from './types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport type { Execution } from '..';\r\n\r\nexport class Observations {\r\n state: TObservations = {\r\n newObservation: {\r\n commentValue: '',\r\n chkAddAlert: false,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n },\r\n observations: [],\r\n };\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n setPriority: action,\r\n });\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n this.state = {\r\n newObservation: {\r\n commentValue: '',\r\n chkAddAlert: false,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n },\r\n observations: [],\r\n };\r\n\r\n const res = await post<{\r\n obData: string;\r\n }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getObservationsData',\r\n isAjax: true,\r\n }),\r\n );\r\n if (!res?.data?.obData) {\r\n throw new Error('Cannot retrieve the entity data');\r\n }\r\n\r\n const parsedData: {\r\n observations: TObservation[];\r\n newCommentData: { comment: string; isChecked: boolean };\r\n } = JSON.parse(res?.data?.obData);\r\n\r\n this.state.observations = arrayOrArray(parsedData.observations);\r\n\r\n const newObservation = {\r\n commentValue: parsedData.newCommentData?.comment,\r\n chkAddAlert: parsedData.newCommentData?.isChecked,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n };\r\n this.state.newObservation = newObservation;\r\n }\r\n }\r\n\r\n getConfirmParams() {\r\n return {\r\n txtComment: this.state.newObservation?.commentValue,\r\n chkAddAlert:\r\n this.state.newObservation?.chkAddAlert === true ? 'on' : undefined,\r\n chkAddAllAlert:\r\n this.state.newObservation?.chkAddAllAlert === true ? 'on' : undefined,\r\n chkRemAlert:\r\n this.state.newObservation?.chkRemAlert === true ? 'on' : undefined,\r\n };\r\n }\r\n setPriority(newPriority: string) {\r\n newPriority;\r\n }\r\n}\r\n","import type { Execution } from '..';\r\n\r\nexport type ConfirmChecker = (\r\n execution: Execution,\r\n status: Status,\r\n) => Promise<Status | FlowModal<any>>;\r\nexport type ConfirmStep =\r\n | 'CHECK_LOCK'\r\n | 'CONFIRM'\r\n | 'CHECK_SIGN'\r\n | 'CHECK_WIZARD'\r\n | 'SIGN';\r\n\r\nexport type Status = {\r\n step?: ConfirmStep;\r\n error?: string;\r\n finishedWithError?: boolean;\r\n};\r\n\r\nexport abstract class FlowModal<T extends { confirmed?: boolean }> {\r\n abstract confirm(result: T): Promise<Status | FlowModal<any>>;\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\nimport { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowPoolSelection extends FlowModal<{\r\n confirmed: boolean;\r\n group: string;\r\n}> {\r\n constructor(\r\n public fetchResult: TApiaLoadForm['form'],\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n group: string;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\nimport { FlowModal, Status } from './FlowModal';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { TFetchConfirmPathResponse, TItemTreeObj } from './types';\r\nconst initialState = {\r\n disabledParents: [],\r\n groupSelectionObj: null,\r\n};\r\n\r\nexport class ShowPathSelection extends FlowModal<{\r\n confirmed: boolean;\r\n path: string;\r\n}> {\r\n public state: {\r\n disabledParents: TItemTreeObj | TItemTreeObj[] | null;\r\n groupSelectionObj: TFetchConfirmPathResponse | null;\r\n };\r\n\r\n constructor(\r\n public fetchResult: TApiaLoadForm['form'],\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n path: string;\r\n }) => Promise<Status | FlowModal<any>>,\r\n ) {\r\n super();\r\n makeObservable<ShowPathSelection, 'state'>(this, { state: observable });\r\n this.state = initialState;\r\n }\r\n setDisabledParent(treeItem: TItemTreeObj) {\r\n this.state.disabledParents = this.updateDisabledList(\r\n treeItem,\r\n this.state.disabledParents as TItemTreeObj[],\r\n );\r\n }\r\n clearPaths() {\r\n this.state.disabledParents = [];\r\n }\r\n showGroupsSelection(fetchConfirmPathResponse: TFetchConfirmPathResponse) {\r\n this.state.groupSelectionObj = fetchConfirmPathResponse;\r\n }\r\n updateDisabledList(\r\n itemObj: TItemTreeObj,\r\n itemArr: TItemTreeObj[],\r\n ): TItemTreeObj[] {\r\n let filteredArr = [] as TItemTreeObj[];\r\n if (Array.isArray(itemArr)) {\r\n filteredArr = itemArr.filter(\r\n (el) =>\r\n el.id !== itemObj.id && el.name !== itemObj.name && el.isOn !== false,\r\n );\r\n }\r\n if (itemObj.isOn === true) {\r\n filteredArr.push(itemObj);\r\n }\r\n return filteredArr || [];\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSignSelection extends FlowModal<{\r\n confirmed: boolean;\r\n signed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n signed: boolean;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowConfirmMessage extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSign extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { ConfirmChecker, ConfirmStep, FlowModal, Status } from './FlowModal';\r\nimport { ShowPoolSelection } from './ShowPoolSelection';\r\nimport { ShowPathSelection } from './ShowPathSelection';\r\nimport { ShowSignSelection } from './ShowSignSelection';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { Execution } from '..';\r\nimport { TCheckWizardResponse, TFetchConfirmPathResponse } from './types';\r\nimport { parseXMLRequestResponse, TApiaLoadForm } from '@apia/util';\r\nimport axios from 'axios';\r\nimport { setAjaxFormResponse } from '../FormsExecution/events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../FormsExecution/types';\r\nimport { ShowConfirmMessage } from './ShowConfirmMessage';\r\nimport { ShowSign } from './ShowSign';\r\nimport { Captcha } from '../FormsExecution/fields';\r\nimport { ExecutionState, TConfirmResponse } from '../types';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport { parseMessages } from '../../../util/api/apiaApi';\r\n\r\nfunction buildPoolSelection(\r\n execution: Execution,\r\n status: Status,\r\n poolForm: TApiaLoadForm['form'],\r\n) {\r\n return new ShowPoolSelection(poolForm, async (result) => {\r\n if (result.confirmed) {\r\n const confirmPoolResult = await axios.post<{\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: [number, string];\r\n };\r\n };\r\n }>(\r\n makeApiaUrl(execution, {\r\n action: 'confirmPool',\r\n isAjax: true,\r\n appletToken: 'null',\r\n }),\r\n result.group,\r\n );\r\n const parsedRes = parseXMLRequestResponse(\r\n confirmPoolResult,\r\n ) as TFetchConfirmPathResponse;\r\n if (\r\n parsedRes?.actions?.action?.param[1] === 'confirmOkOnClose' ||\r\n parsedRes?.onClose === 'confirmOkOnClose'\r\n ) {\r\n if (parsedRes?.load?.text?.content) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: parsedRes?.load?.text?.content,\r\n type: 'success',\r\n }),\r\n );\r\n }\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n } else {\r\n throw Error('Failed to confirm pool');\r\n }\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n });\r\n}\r\n\r\nfunction buildPathSelection(\r\n execution: Execution,\r\n status: Status,\r\n form: TApiaLoadForm['form'],\r\n) {\r\n const modal = new ShowPathSelection(form, async function (result) {\r\n if (result.confirmed) {\r\n const pathSelectionResult = await axios.post<TFetchConfirmPathResponse>(\r\n makeApiaUrl(execution, {\r\n action: 'confirmPath',\r\n isAjax: true,\r\n asXML: true,\r\n }),\r\n result.path,\r\n );\r\n const parsedRes = parseXMLRequestResponse(\r\n pathSelectionResult,\r\n ) as TFetchConfirmPathResponse;\r\n if (parsedRes?.groupSelection) {\r\n return buildPoolSelection(execution, status, parsedRes.load!.form!);\r\n } else if (parsedRes?.actions?.action?.toDo === 'functionTimedCall') {\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n } else if (parsedRes.sysMessages?.message?.text) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: parsedRes.sysMessages.message.text,\r\n type: 'warning',\r\n }),\r\n );\r\n return { ...status, step: undefined, finishedWithError: true };\r\n } else if (parsedRes.load?.canClose) {\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n return buildConfirmMessage(status, parsedRes.load?.text?.content ?? '');\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n } else {\r\n return { ...status, step: undefined, finishedWithError: true };\r\n }\r\n });\r\n return modal;\r\n}\r\n\r\nasync function checkSign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const checkSignableFormsResponse = await post<{\r\n form: { i: string; p: string; t: string };\r\n sign: boolean;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n prevSteps: true,\r\n appletToken: '',\r\n preventAsXmlParameter: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal = checkSignableFormsResponse?.data?.sign;\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSignSelection(\r\n checkSignableFormsResponse?.data,\r\n async (result) => {\r\n if (result.confirmed && result.signed) {\r\n return { ...status, step: 'SIGN' };\r\n } else if (result.confirmed && !result.signed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n },\r\n );\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\nasync function sign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const signResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n }[];\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'sign',\r\n // isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal =\r\n signResponse?.data?.actions.action[1].param[1] === 'showAppletModal';\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSign(signResponse?.data, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n });\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\n\r\nasync function checkLock(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkLocksResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n };\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksResponse?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n return {\r\n ...status,\r\n step: undefined,\r\n error: 'Failed to check WebDAV document locks',\r\n };\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_SIGN',\r\n };\r\n}\r\n\r\nasync function defaultConfirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | FlowModal<any>> {\r\n const getConfirmParams = {\r\n ...execution.getEntity().getConfirmParams(),\r\n ...execution.getProcess().getConfirmParams(),\r\n ...execution.getObservations().getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const confirmResponse = await post<TConfirmResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'confirm',\r\n asXML: true,\r\n asXml: true,\r\n appletToken: getWindow(execution).appletToken,\r\n }),\r\n {\r\n postData: getConfirmParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n confirmResponse?.data?.sysMessages?.message ||\r\n confirmResponse?.data?.sysExceptions?.exception ||\r\n confirmResponse?.data?.exceptions?.exception\r\n ) {\r\n Captcha.reload();\r\n\r\n return {\r\n step: undefined,\r\n finishedWithError: true,\r\n };\r\n }\r\n if (confirmResponse?.data?.onClose === 'confirmOkOnClose') {\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n return buildConfirmMessage(\r\n status,\r\n confirmResponse.data.load?.text?.label ?? '',\r\n );\r\n }\r\n const checkConfirmEntity = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'E',\r\n currentTab: 0,\r\n }),\r\n );\r\n const checkConfirmProcess = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'P',\r\n currentTab: 0,\r\n }),\r\n );\r\n parseMessages(execution, (checkConfirmEntity?.data as any).data);\r\n parseMessages(execution, (checkConfirmProcess?.data as any).data);\r\n\r\n if (checkConfirmEntity?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmEntity.data?.form);\r\n }\r\n if (checkConfirmProcess?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmProcess.data?.form);\r\n }\r\n if (confirmResponse?.data?.pathSelection) {\r\n return buildPathSelection(\r\n execution,\r\n status,\r\n confirmResponse.data.load!.form!,\r\n );\r\n }\r\n\r\n if (confirmResponse?.data?.groupSelection === true) {\r\n return buildPoolSelection(\r\n execution,\r\n status,\r\n confirmResponse.data.load!.form!,\r\n );\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_WIZARD',\r\n };\r\n}\r\nasync function buildConfirmMessage(\r\n status: Status,\r\n message: string,\r\n): Promise<Status | FlowModal<any>> {\r\n return new ShowConfirmMessage(message, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n });\r\n}\r\nasync function checkWizard(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkWizardResponse = await post<TCheckWizardResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWizzard',\r\n }),\r\n {\r\n postData: {},\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n allowAfterFinish: true,\r\n },\r\n );\r\n\r\n if (checkWizardResponse?.data?.url) {\r\n getWindow(execution).location.assign(checkWizardResponse?.data?.url);\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n finishedWithError: false,\r\n };\r\n } else {\r\n const { location } = getWindow(execution).parent;\r\n if (getWindow(execution).ON_FINISH === '1') {\r\n getWindow(execution).parent?.parent?.close();\r\n } else if (getWindow(execution).ON_FINISH === '2') {\r\n location.reload();\r\n } else if (\r\n (getWindow(execution).frameElement as HTMLIFrameElement)?.src.match(\r\n /frompanel/i,\r\n )\r\n ) {\r\n (getWindow(execution).frameElement as HTMLIFrameElement).src = (\r\n getWindow(execution).frameElement as HTMLIFrameElement\r\n ).src;\r\n } else if (getWindow(execution).ON_FINISH === '5') {\r\n getWindow(execution).location.assign(getWindow(execution).ON_FINISH_URL);\r\n } else {\r\n let tabContainer =\r\n getWindow(execution).parent.document.getElementById('tabContainer');\r\n if (tabContainer == null) {\r\n tabContainer =\r\n getWindow(execution).top!.document.getElementById('tabContainer');\r\n }\r\n\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n\r\n if (tabContainer) {\r\n (tabContainer as any).removeActiveTab();\r\n } else {\r\n execution.notifications.closeTab();\r\n }\r\n }\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n finishedWithError: false,\r\n };\r\n }\r\n}\r\n\r\nconst checkers: Record<ConfirmStep, ConfirmChecker> = {\r\n CHECK_LOCK: checkLock,\r\n CHECK_SIGN: checkSign,\r\n CHECK_WIZARD: checkWizard,\r\n CONFIRM: defaultConfirm,\r\n SIGN: sign,\r\n};\r\n\r\nexport async function confirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<boolean | FlowModal<any>> {\r\n let result: Status = status;\r\n\r\n while (result.step) {\r\n const checker = checkers[result.step];\r\n\r\n const checkerResult = await checker(execution, result);\r\n if (checkerResult instanceof FlowModal) {\r\n return checkerResult;\r\n }\r\n\r\n result = checkerResult;\r\n\r\n if (result.error) {\r\n execution.notifications.add(\r\n new MessageNotification({ message: result.error, type: 'error' }),\r\n );\r\n }\r\n\r\n if (result.error || result.finishedWithError) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import type { Execution } from '..';\r\n\r\nexport type ConfirmChecker = (\r\n execution: Execution,\r\n status: Status,\r\n) => Promise<Status | FlowModal<any>>;\r\nexport type ConfirmStep = 'CHECK_LOCK' | 'CONFIRM' | 'CHECK_SIGN' | 'SIGN';\r\n\r\nexport type Status = {\r\n step?: ConfirmStep;\r\n error?: string;\r\n finishedWithError?: boolean;\r\n};\r\n\r\nexport abstract class FlowModal<T extends { confirmed?: boolean }> {\r\n abstract confirm(result: T): Promise<Status | FlowModal<any>>;\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSignSelection extends FlowModal<{\r\n confirmed: boolean;\r\n signed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n signed: boolean;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSign extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { ConfirmChecker, ConfirmStep, FlowModal, Status } from './FlowModal';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { Execution } from '..';\r\nimport { setAjaxFormResponse } from '../FormsExecution/events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../FormsExecution/types';\r\nimport { ShowSignSelection } from './ShowSignSelection';\r\nimport { ShowSign } from './ShowSign';\r\nimport { Captcha } from '../FormsExecution/fields';\r\nimport { TConfirmEntityResponse } from '../types';\r\nimport { arrayOrArray, Url } from '@apia/util';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\n\r\nasync function checkSign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const checkSignableFormsResponse = await post<{\r\n form: { i: string; p: string; t: string };\r\n sign: boolean;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n prevSteps: true,\r\n appletToken: '',\r\n preventAsXmlParameter: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal = checkSignableFormsResponse?.data?.sign;\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSignSelection(\r\n checkSignableFormsResponse?.data,\r\n async (result) => {\r\n if (result.confirmed && result.signed) {\r\n return { ...status, step: 'SIGN' };\r\n } else if (result.confirmed && !result.signed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n },\r\n );\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\nasync function sign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const signResponse = await post<{\r\n actions: {\r\n action: {\r\n param: { text: string }[];\r\n }[];\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'sign',\r\n // isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal =\r\n signResponse?.data?.actions.action[1].param[1].text === 'showAppletModal';\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSign(signResponse?.data, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n });\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\n\r\nasync function checkLock(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkLocksResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n };\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksResponse?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n return {\r\n ...status,\r\n step: undefined,\r\n error: 'Failed to check WebDAV document locks',\r\n };\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_SIGN',\r\n };\r\n}\r\n\r\nasync function defaultConfirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | FlowModal<any>> {\r\n const getConfirmParams = {\r\n ...execution.getEntity().getConfirmParams(),\r\n ...execution.getObservations().getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const confirmResponse = await post<TConfirmEntityResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'confirm',\r\n asXML: true,\r\n asXml: true,\r\n appletToken: getWindow(execution).appletToken,\r\n }),\r\n {\r\n postData: getConfirmParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (confirmResponse?.data?.sysMessages?.message) {\r\n Captcha.reload();\r\n\r\n return {\r\n step: undefined,\r\n };\r\n }\r\n if (confirmResponse?.data?.load?.text?.label) {\r\n const checkConfirmEntity = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'E',\r\n currentTab: 0,\r\n }),\r\n );\r\n if (checkConfirmEntity?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmEntity.data?.form);\r\n }\r\n\r\n const url = arrayOrArray(confirmResponse.data.actions?.action.param)[1];\r\n\r\n if (url === 'callNavigateClose') {\r\n (getWindow(execution)?.top?.ApiaUtil as any).tabs.currentTab.close(true);\r\n } else {\r\n const c = new Url(url);\r\n\r\n getWindow(execution).location.assign(\r\n makeApiaUrl(execution, {\r\n ajaxUrl: c.base,\r\n action: c.getParameter('action') as string,\r\n }),\r\n );\r\n (getWindow(execution)?.top?.ApiaUtil as any).notifications.notify({\r\n message: confirmResponse?.data?.load?.text?.label,\r\n type: 'success',\r\n });\r\n }\r\n }\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n };\r\n}\r\n\r\nconst checkers: Record<ConfirmStep, ConfirmChecker> = {\r\n CHECK_LOCK: checkLock,\r\n CHECK_SIGN: checkSign,\r\n CONFIRM: defaultConfirm,\r\n SIGN: sign,\r\n};\r\n\r\nexport async function confirmEntity(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<boolean | FlowModal<any>> {\r\n let result: Status = status;\r\n\r\n while (result.step) {\r\n const checker = checkers[result.step];\r\n\r\n const checkerResult = await checker(execution, result);\r\n if (checkerResult instanceof FlowModal) {\r\n return checkerResult;\r\n }\r\n\r\n result = checkerResult;\r\n\r\n if (result.error) {\r\n execution.notifications.add(\r\n new MessageNotification({ message: result.error, type: 'error' }),\r\n );\r\n }\r\n\r\n if (result.error || result.finishedWithError) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import { InitialData } from '../InitialData';\r\nimport { labels } from '../../util/labels/labels';\r\nimport { Form } from './FormsExecution/Form';\r\nimport { TFormEventName, TFrmParent } from '../InitialData/types/TApiaForm';\r\nimport { FieldsMapping, defaultFieldsMap } from './FormsExecution/fieldsMap';\r\nimport { Notifications } from '../Notifications';\r\nimport { MessageNotification } from '../Notifications/MessageNotification';\r\nimport { Process } from './Process';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Field } from './FormsExecution/Field';\r\nimport { makeApiaUrl, post, get, parseXml } from '../../util';\r\nimport { Task } from './Task';\r\nimport { Entity } from './Entity';\r\nimport { arrayOrArray, EventEmitter, noNaN, postNavigation } from '@apia/util';\r\nimport { Observations } from './Observations';\r\nimport { FlowModal, Status } from './FlowModals/FlowModal';\r\nimport { Captcha } from './FormsExecution/fields';\r\nimport { getCurrentTabsString } from '../../util/app/getCurrentTabsString';\r\nimport { ExecutionState, TFetchTaskActionResponse } from './types';\r\nimport { parseFakeJSON } from '../../util/other/parseFakeJSON';\r\nimport { confirm } from './FlowModals/confirmFlow';\r\nimport { confirmEntity } from './EntityFlowModals/confirmFlow';\r\nimport { getWindow } from '../../util/dom/getWindow';\r\nimport { ShowSignSelection } from './FlowModals';\r\n\r\ninterface TExecutionErrors {\r\n onClose: string;\r\n sysMessages: {\r\n message: {\r\n text: string;\r\n }[];\r\n };\r\n sysExceptions: {\r\n exception: {\r\n label: string;\r\n text: string;\r\n }[];\r\n };\r\n exceptions: {\r\n exception: {\r\n label: string;\r\n text: string;\r\n }[];\r\n };\r\n}\r\n\r\nexport type TExecutionConfig = {\r\n canConfirm: boolean;\r\n canGoBack: boolean;\r\n canGoForward: boolean;\r\n canSave: boolean;\r\n canFree: boolean;\r\n canDelegate: boolean;\r\n canClose: boolean;\r\n canShare: boolean;\r\n isEntity?: boolean;\r\n};\r\nexport type TModalSize =\r\n | 'editGrid'\r\n | 'sm'\r\n | 'md'\r\n | 'md-fixed'\r\n | 'lg'\r\n | 'lg-fixed'\r\n | 'xl'\r\n | 'xl-fixed'\r\n | 'xxl'\r\n | 'xxxl'\r\n | 'xxxl-fixed'\r\n | 'flex'\r\n | 'cal'\r\n | 'finder'\r\n | 'fileModal';\r\nexport const unescapeMarkup = (str: string): string => {\r\n if (str !== undefined && str.length > 0) {\r\n return str\r\n .replace(/'/g, \"'\")\r\n .replace(/"/g, '\"')\r\n .replace(/>/g, '>')\r\n .replace(/</g, '<')\r\n .replace(/&/g, '&');\r\n }\r\n return '';\r\n};\r\n\r\nexport type TExecutionEnvironment = {\r\n fieldsMapping?: FieldsMapping;\r\n window: Window;\r\n document: Document;\r\n headers: any;\r\n properties?: {\r\n taskName: string;\r\n processName: string;\r\n };\r\n};\r\n\r\nexport class Execution extends EventEmitter<{\r\n flow:\r\n | 'previous'\r\n | 'confirm'\r\n | 'next'\r\n | 'save'\r\n | 'release'\r\n | 'share'\r\n | 'viewDocs'\r\n | 'print'\r\n | 'delegate';\r\n sendToDesktop: null;\r\n hideFormModal: Form;\r\n showFormAsModal: { form: Form; size?: TModalSize };\r\n}> {\r\n public fieldsMapping: FieldsMapping;\r\n private entity = new Entity(this);\r\n private process = new Process(this);\r\n private observations = new Observations(this);\r\n private executedOnLoadEvents = false;\r\n public executionConfig: TExecutionConfig | null = null;\r\n private _steps: {\r\n title: string;\r\n stepNumber: number;\r\n status: 'completed' | 'pending' | 'current';\r\n }[] = [];\r\n private _currentStep: number = 1;\r\n private _stepCount: number = 1;\r\n public readonly notifications: Notifications;\r\n private lastModalReturn: string[] = [];\r\n\r\n constructor(public environment: TExecutionEnvironment) {\r\n super();\r\n\r\n this.fieldsMapping = { ...defaultFieldsMap, ...environment.fieldsMapping };\r\n\r\n this.notifications = new Notifications(this);\r\n\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n protected formsById = {\r\n E: new Map<string, Form>(),\r\n P: new Map<string, Form>(),\r\n };\r\n protected forms = {\r\n E: new Map<string, Form>(),\r\n P: new Map<string, Form>(),\r\n };\r\n\r\n state: {\r\n executionState: ExecutionState;\r\n locked: number;\r\n hasChangedAnything: boolean;\r\n } = {\r\n executionState: ExecutionState.LOADING,\r\n locked: 0,\r\n hasChangedAnything: false,\r\n };\r\n\r\n getAllForms() {\r\n return [...this.forms.E.values(), ...this.forms.P.values()];\r\n }\r\n\r\n private hasInitializedFormsTabs: Record<TFrmParent, boolean> = {} as Record<\r\n TFrmParent,\r\n boolean\r\n >;\r\n\r\n initializeFormsTabs(frmParent: TFrmParent, cb: () => unknown) {\r\n if (!this.hasInitializedFormsTabs[frmParent]) {\r\n this.hasInitializedFormsTabs[frmParent] = true;\r\n cb();\r\n }\r\n }\r\n\r\n getFormsByType(type: TFrmParent) {\r\n return [...this.forms[type].values()];\r\n }\r\n getFormByName(formName: string, frmParent?: TFrmParent) {\r\n if (frmParent) {\r\n return this.forms[frmParent].get(formName);\r\n } else {\r\n return this.forms.E.get(formName) || this.forms.P.get(formName);\r\n }\r\n }\r\n getFormById(formId: string | number, frmParent?: TFrmParent) {\r\n if (frmParent) return this.formsById[frmParent].get(String(formId));\r\n return (\r\n this.formsById.E.get(String(formId)) ||\r\n this.formsById.P.get(String(formId))\r\n );\r\n }\r\n get currentStep() {\r\n return this._currentStep;\r\n }\r\n get steps() {\r\n return this._steps;\r\n }\r\n public getEntity() {\r\n this.entity.init();\r\n\r\n return this.entity;\r\n }\r\n public getProcess() {\r\n this.process.init();\r\n\r\n return this.process;\r\n }\r\n public getObservations() {\r\n this.observations.init();\r\n\r\n return this.observations;\r\n }\r\n public getCurrentTask() {\r\n return new Task({ task: { name: 'TODO' } });\r\n }\r\n\r\n private mustRenderForms: string[] = [];\r\n\r\n public get locked() {\r\n return this.state.locked > 0;\r\n }\r\n\r\n public lock() {\r\n this.state.locked++;\r\n let unlocked = false;\r\n return () => {\r\n if (!unlocked) {\r\n unlocked = true;\r\n this.state.locked--;\r\n }\r\n };\r\n }\r\n\r\n public async run(executionConfig: TExecutionConfig) {\r\n const unlock = this.lock();\r\n try {\r\n this._stepCount = noNaN(getWindow(this).STEP_QTY);\r\n this._currentStep = noNaN(getWindow(this).CURRENT_STEP);\r\n this.executionConfig = executionConfig;\r\n this.environment.properties = {\r\n taskName: getWindow(this).CURRENT_TASK_NAME || '',\r\n processName: getWindow(this).CURRENT_PROCESS_NAME || '',\r\n };\r\n\r\n const errXML = unescapeMarkup(getWindow(this).EXEC_ERRORS);\r\n\r\n if (errXML) {\r\n const obj: TExecutionErrors = parseXml(errXML);\r\n arrayOrArray(obj.sysMessages?.message).forEach((c) =>\r\n this.notifications.add(\r\n new MessageNotification({\r\n message: c.text,\r\n type: 'warning',\r\n }),\r\n ),\r\n );\r\n [\r\n ...arrayOrArray(obj.exceptions?.exception),\r\n ...arrayOrArray(obj.sysExceptions?.exception),\r\n ].forEach((c) =>\r\n this.notifications.add(\r\n new MessageNotification({\r\n message: c.text,\r\n type: 'error',\r\n stackTrace: c.label,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n for (let i = 1; i < Number(getWindow(this).STEP_QTY) + 1; i++) {\r\n if (i < this._currentStep) {\r\n this._steps.push({\r\n title: `Step ${i}`,\r\n stepNumber: i,\r\n status: 'completed',\r\n });\r\n }\r\n if (i > this._currentStep && i <= this._stepCount) {\r\n this._steps.push({\r\n title: `Step ${i}`,\r\n stepNumber: i,\r\n status: 'pending',\r\n });\r\n }\r\n if (i === this._currentStep) {\r\n this._steps.push({\r\n title: `Step ${i}`,\r\n stepNumber: i,\r\n status: 'current',\r\n });\r\n }\r\n }\r\n const res = await InitialData.getFormsDefinition(this);\r\n\r\n try {\r\n for await (const formDefinition of res) {\r\n const props = parseFakeJSON(formDefinition.properties);\r\n if (\r\n !props.frmTab &&\r\n !props.frmHidden &&\r\n arrayOrArray(formDefinition.field).every(\r\n (c) => !c.properties?.visibilityHidden,\r\n ) &&\r\n (arrayOrArray(formDefinition.field).length > 0 ||\r\n arrayOrArray(formDefinition.customField).length > 0)\r\n ) {\r\n this.mustRenderForms.push(\r\n formDefinition.frmParent + '_' + formDefinition.formName,\r\n );\r\n }\r\n }\r\n for await (const formDefinition of res) {\r\n const newForm = new Form(this, formDefinition);\r\n await newForm.init();\r\n\r\n if (formDefinition.frmParent === 'E') {\r\n this.forms.E.set(formDefinition.formName, newForm);\r\n this.formsById.E.set(String(formDefinition.id), newForm);\r\n } else {\r\n this.forms.P.set(formDefinition.formName, newForm);\r\n this.formsById.P.set(String(formDefinition.id), newForm);\r\n }\r\n }\r\n\r\n this.state.executionState =\r\n this.mustRenderForms.length === 0\r\n ? ExecutionState.RUNNING\r\n : ExecutionState.RENDERING;\r\n\r\n await this.fireEvents('onLoad');\r\n this.executedOnLoadEvents = true;\r\n if (\r\n this.mustRenderForms.length === 0 &&\r\n this.state.executionState === ExecutionState.RENDERING\r\n ) {\r\n this.state.executionState = ExecutionState.RUNNING;\r\n }\r\n } catch (e) {\r\n this.state.executionState = ExecutionState.FINISHED_WITH_ERROR;\r\n throw e;\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n\r\n protected getHiddenForms() {\r\n const hiddenForms = this.getAllForms().filter((form) => {\r\n return form.properties.frmHidden;\r\n });\r\n return hiddenForms;\r\n }\r\n\r\n public markFormAsRendered(frmParent: string, frmName: string) {\r\n this.mustRenderForms = this.mustRenderForms.filter(\r\n (c) => c !== frmParent + '_' + frmName,\r\n );\r\n if (this.mustRenderForms.length === 0 && this.executedOnLoadEvents) {\r\n this.state.executionState = ExecutionState.RUNNING;\r\n }\r\n }\r\n\r\n public async delegate() {\r\n console.warn('Delegate not implemented yet');\r\n }\r\n public async shareSocial() {\r\n console.warn('shareSocial not implemented yet');\r\n }\r\n\r\n flow = {\r\n back: () => {\r\n this.emit('flow', 'previous');\r\n },\r\n confirm: () => {\r\n this.emit('flow', 'confirm');\r\n },\r\n next: () => {\r\n this.emit('flow', 'next');\r\n },\r\n previous: () => {\r\n this.emit('flow', 'previous');\r\n },\r\n save: () => {\r\n this.emit('flow', 'save');\r\n },\r\n release: () => {\r\n this.emit('flow', 'release');\r\n },\r\n delegate: () => {\r\n this.emit('flow', 'delegate');\r\n },\r\n share: () => {\r\n this.emit('flow', 'share');\r\n },\r\n viewDocs: () => {\r\n this.emit('flow', 'viewDocs');\r\n },\r\n print: () => {\r\n this.emit('flow', 'print');\r\n },\r\n };\r\n\r\n sendToDesktop() {\r\n this.emit('sendToDesktop', null);\r\n }\r\n\r\n public async doBack() {\r\n const canGoBack = this.executionConfig?.canGoBack;\r\n if (canGoBack) {\r\n try {\r\n const nextUrl = makeApiaUrl(this, {\r\n action: 'gotoPrevStep',\r\n asXML: true,\r\n react: true,\r\n currentTab: getCurrentTabsString(this),\r\n fromPanel: null,\r\n });\r\n\r\n const serverParams = {\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n };\r\n postNavigation(nextUrl, serverParams);\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n public async doConfirm(\r\n status?: Status,\r\n ): Promise<boolean | FlowModal<any> | Field> {\r\n if (status && !status?.step && !status?.finishedWithError) {\r\n return false;\r\n } else {\r\n const validationResult = status !== undefined || (await this.validate());\r\n if (validationResult !== true) {\r\n return validationResult;\r\n }\r\n\r\n if (\r\n this.executionConfig?.isEntity &&\r\n !this.entity.validateAssociations()\r\n ) {\r\n return false;\r\n }\r\n\r\n const isValid =\r\n status !== undefined || (await this.fireEvents('onSubmit'));\r\n const canConfirm = this.executionConfig?.canConfirm && isValid === true;\r\n\r\n if (canConfirm) {\r\n const unlock = this.lock();\r\n try {\r\n const result = await (\r\n this.executionConfig?.isEntity ? confirmEntity : confirm\r\n )(\r\n this,\r\n (status || {\r\n step: 'CHECK_LOCK',\r\n }) as any,\r\n );\r\n\r\n if (result instanceof FlowModal) {\r\n return result;\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n } finally {\r\n unlock();\r\n }\r\n } else {\r\n return isValid;\r\n }\r\n }\r\n }\r\n\r\n public async doFree() {\r\n const serverParams = {\r\n ...this.entity.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const data = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'release',\r\n currentTab: getCurrentTabsString(this),\r\n }),\r\n {\r\n postData: serverParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n if (data?.data?.text) {\r\n this.state.executionState = ExecutionState.FINISHED;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n public async doNext(result?: { confirmed: boolean; signed: boolean }) {\r\n const isValid = await this.validate();\r\n if (isValid === true) {\r\n if (!(await this.fireEvents('onSubmit'))) {\r\n return false;\r\n }\r\n }\r\n if (isValid !== true) return isValid;\r\n\r\n const canGoNext = this.executionConfig?.canGoForward && isValid === true;\r\n\r\n if (canGoNext) {\r\n const unlock = this.lock();\r\n try {\r\n const checkLocksRes = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksRes?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n throw new Error('Failed to check WebDAV document locks.');\r\n }\r\n\r\n // Check signable forms\r\n const checkSignableFormsRes = await post<{\r\n hasForms: boolean;\r\n sign: boolean;\r\n }>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n appletToken: getWindow(this).appletToken,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (checkSignableFormsRes?.status !== 200) {\r\n throw new Error('No signable forms available.');\r\n }\r\n const mustShowSignModal = checkSignableFormsRes?.data?.sign;\r\n\r\n if (mustShowSignModal && !result?.signed) {\r\n return new ShowSignSelection(\r\n checkSignableFormsRes?.data,\r\n async () => {\r\n return '' as Status;\r\n },\r\n );\r\n }\r\n\r\n if (mustShowSignModal && (!result?.confirmed || !result?.signed))\r\n return;\r\n\r\n const nextUrl = makeApiaUrl(this, {\r\n action: 'gotoNextStep',\r\n asXML: true,\r\n react: true,\r\n currentTab: getCurrentTabsString(this),\r\n fromPanel: null,\r\n });\r\n\r\n const serverParams = {\r\n ...this.entity.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n postNavigation(nextUrl, serverParams);\r\n return true;\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n }\r\n\r\n public async doPrint() {\r\n getWindow(this).print();\r\n }\r\n\r\n public async doSave() {\r\n const unlock = this.lock();\r\n\r\n try {\r\n const response = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'saveTask',\r\n asXML: true,\r\n react: true,\r\n }),\r\n {\r\n postData: {\r\n ...this.observations.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n },\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const canClose = response?.data?.load?.canClose;\r\n if (canClose) {\r\n return response;\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getStepTitle(step: number) {\r\n if (this._steps) return this._steps[step];\r\n }\r\n\r\n /**\r\n * Ends the current session\r\n */\r\n public kill() {\r\n ((frameElement as any)?.handleDeadSession as any)?.();\r\n this.state.executionState = ExecutionState.FINISHED;\r\n this.notifications.kill();\r\n }\r\n\r\n public async viewDocs() {\r\n const url = `${\r\n getWindow(this).CONTEXT\r\n }/react/generic/docExecutionModal.jsp?isProcessMonitor=${\r\n getWindow(this).IN_MONITOR_PROCESS ?? 'false'\r\n }&isTaskMonitor=${getWindow(this).IN_MONITOR_TASK ?? 'false'}&isTask=true${\r\n getWindow(this).TAB_ID_REQUEST\r\n }&react=true`;\r\n\r\n const result = await get(this, url);\r\n\r\n if (result && result.data !== null) {\r\n const { data } = result;\r\n return data;\r\n }\r\n }\r\n\r\n public setStepTitle(stepNumber: number, stepTitle: string) {\r\n if (this._steps && this._steps[stepNumber - 1])\r\n this._steps[stepNumber - 1].title = stepTitle;\r\n }\r\n\r\n public async validate(): Promise<true | Field> {\r\n let firstInvalid: Field | null = null;\r\n\r\n for await (const [, c] of this.forms.E) {\r\n const result = await c.validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n }\r\n }\r\n for await (const [, c] of this.forms.P) {\r\n const result = await c.validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n }\r\n }\r\n\r\n return firstInvalid ?? true;\r\n }\r\n\r\n public setLastModalReturn(value: string[]) {\r\n this.lastModalReturn = value;\r\n }\r\n\r\n public getLastModalReturn() {\r\n return this.lastModalReturn;\r\n }\r\n\r\n private async fireEvents(evt: TFormEventName) {\r\n const unlock = this.lock();\r\n let result = true;\r\n\r\n try {\r\n for await (const f of this.forms.E.values()) {\r\n result = result && (await f.fireScriptEvent(evt));\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n for await (const f of this.forms.P.values()) {\r\n result = result && (await f.fireScriptEvent(evt));\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n}\r\n"],"names":["__publicField","ExecutionState","queryString","parseFakeJSON","IProperty","id","_hasInited","__privateAdd","__privateGet","__privateSet","EventEmitter","result","shallowEqual","properties","noNaN","_execution","_field","TextAreaField","decodeBase64ToUtf8","FlowModal","checkSign","ShowSignSelection","sign","ShowSign","checkLock","defaultConfirm","checkers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/util/comparators/deepEqual.ts","../src/main/Notifications/Notification.ts","../src/main/Notifications/MessageNotification.ts","../src/main/Execution/FormsExecution/constants/fieldProps.ts","../src/main/Execution/FormsExecution/constants/formProps.ts","../src/main/Execution/FormsExecution/constants/props/booleanProps.ts","../src/main/Execution/FormsExecution/constants/props/numberProps.ts","../src/util/xml/parseXml.ts","../src/util/dom/getWindow.ts","../src/main/Execution/types.ts","../src/util/api/apiaApi.ts","../src/util/events/EventEmitter.ts","../src/util/events/StatefulEmitter.ts","../src/util/events/BouncingEmitter.ts","../src/util/labels/labels.ts","../src/util/dataTypes/parseBoolean.ts","../src/util/other/parseFakeJSON.ts","../src/main/Execution/FormsExecution/WithProperties.ts","../src/util/dom/getDocument.ts","../src/util/app/getCurrentTabsString.ts","../src/main/Execution/FormsExecution/constants/actions.ts","../src/main/Execution/FormsExecution/constants/eventTypes.ts","../src/main/Execution/FormsExecution/constants/IProperty.ts","../src/main/Execution/FormsExecution/events/setAjaxFormResponse.ts","../src/programming/utils/asynCreateApiaField.ts","../src/main/Execution/FormsExecution/Field.ts","../src/main/Execution/FormsExecution/fields/Button/index.ts","../src/main/Execution/FormsExecution/fields/Captcha/index.ts","../src/util/other/asyncRetry.ts","../src/util/comparators/shallowEqual.ts","../src/main/Execution/FormsExecution/util/isFieldShowAsText.ts","../src/main/Execution/FormsExecution/FieldWithAttribute.ts","../src/main/Execution/FormsExecution/fields/Checkbox/index.ts","../src/main/Execution/FormsExecution/TranslatableField/Translation.ts","../src/main/Execution/FormsExecution/TranslatableField/util.ts","../src/main/Execution/FormsExecution/TranslatableField/index.ts","../src/main/Execution/FormsExecution/fields/Editor/index.ts","../src/main/Execution/Uploader/UploaderModalController.ts","../src/main/Execution/Uploader/UploaderApi.ts","../src/main/Execution/Uploader/FormsUploader.ts","../src/main/Execution/FormsExecution/fields/File/index.ts","../src/util/number/noNaN.ts","../src/main/Execution/FormsExecution/fields/Grid/GridFooterHandler.ts","../src/main/Execution/FormsExecution/fields/Grid/GridCell.ts","../src/main/Execution/FormsExecution/fields/Grid/AdditionalCell.ts","../src/main/Execution/FormsExecution/fields/Grid/HeaderCell.ts","../src/main/Execution/FormsExecution/fields/Grid/FieldsCache.ts","../src/main/Execution/FormsExecution/fields/ModalInput/index.ts","../src/main/Execution/FormsExecution/fields/Hidden/index.ts","../src/main/Execution/FormsExecution/fields/Grid/index.ts","../src/main/Execution/FormsExecution/fields/GridPaginated/index.ts","../src/main/Execution/FormsExecution/fields/Image/index.ts","../src/main/Execution/FormsExecution/fields/Input/index.ts","../src/main/Execution/FormsExecution/fields/Label/index.ts","../src/main/Execution/FormsExecution/fields/Link/index.ts","../src/main/Execution/FormsExecution/fields/Multiple/index.ts","../src/main/Execution/FormsExecution/fields/Password/index.ts","../src/main/Execution/FormsExecution/fields/Radio/index.ts","../src/main/Execution/FormsExecution/fields/Select/index.ts","../src/main/Execution/FormsExecution/fields/Textarea/index.ts","../src/main/Execution/FormsExecution/fields/Title/index.ts","../src/main/Execution/FormsExecution/fields/Tree/index.ts","../src/main/Execution/FormsExecution/fields/Scheduler/index.ts","../src/programming/constants/FieldConstants.ts","../src/programming/constants/FormConstants.ts","../src/programming/constants/IProperty.ts","../src/programming/ActionController/index.ts","../src/programming/ApiaField.ts","../src/programming/fields/ButtonField.ts","../src/programming/ApiaFieldWithAttribute.ts","../src/programming/fields/EditorField.ts","../src/programming/fields/SelectField.ts","../src/programming/fields/InputField.ts","../src/programming/fields/TreeField.ts","../src/programming/fields/CheckField.ts","../src/programming/fields/RadioField.ts","../src/programming/fields/MultipleField.ts","../src/programming/fields/HiddenField.ts","../src/programming/fields/AreaField.ts","../src/programming/fields/ImageField.ts","../src/programming/fields/LinkField.ts","../src/programming/fields/TextField.ts","../src/programming/fields/CustomComponentField.ts","../src/programming/utils/createApiaField.ts","../src/programming/fields/GridField.ts","../src/programming/fields/CaptchaField.ts","../src/programming/fields/FileUploaderField.ts","../src/programming/fields/PasswordField.ts","../src/programming/fields/ModalInput.ts","../src/programming/ApiaForm.ts","../src/programming/ApiaFunctions.ts","../src/main/Execution/FormsExecution/customComponents/CustomComponent.ts","../src/main/Notifications/StatusNotification.ts","../src/main/Notifications/index.ts","../src/main/Execution/FormsExecution/Form.ts","../src/main/InitialData/bootstrap/readFormsDefinition.ts","../src/main/InitialData/index.ts","../src/main/Execution/FormsExecution/fieldsMap.ts","../src/main/Execution/Process/index.ts","../src/main/Execution/Task.ts","../src/main/Execution/Entity/index.ts","../src/main/Execution/Observations/index.ts","../src/main/Execution/FlowModals/FlowModal.ts","../src/main/Execution/FlowModals/ShowPoolSelection.ts","../src/main/Execution/FlowModals/ShowPathSelection.ts","../src/main/Execution/FlowModals/ShowSignSelection.ts","../src/main/Execution/FlowModals/ShowConfirmMessage.ts","../src/main/Execution/FlowModals/ShowSign.ts","../src/main/Execution/FlowModals/confirmFlow.ts","../src/main/Execution/EntityFlowModals/FlowModal.ts","../src/main/Execution/EntityFlowModals/ShowSignSelection.ts","../src/main/Execution/EntityFlowModals/ShowSign.ts","../src/main/Execution/EntityFlowModals/confirmFlow.ts","../src/main/Execution/index.ts"],"sourcesContent":["export type Comparator<T> = (a: T, b: T) => boolean;\r\n\r\nexport const deepEqual: Comparator<any> = (a: any, b: any) => {\r\n if (Object.is(a, b)) return true;\r\n\r\n if (!Object.is(a, b) && typeof a !== typeof b) {\r\n return false;\r\n }\r\n\r\n if (typeof a === 'object') {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (a && b) {\r\n for (const [key, value] of Object.entries(a)) {\r\n if (!deepEqual(value, b[key])) {\r\n return false;\r\n }\r\n }\r\n for (const [key, value] of Object.entries(b)) {\r\n if (!deepEqual(value, a[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if ((a && !b) || (!a && b)) {\r\n return false;\r\n }\r\n }\r\n\r\n return a === b;\r\n};\r\n","import { makeObservable, observable } from 'mobx';\r\n\r\nexport type NotificationIcon = string;\r\n\r\nexport type NotificationType = 'info' | 'error' | 'success' | 'warning';\r\n\r\nexport type NotificationDefinition = {\r\n icon?: NotificationIcon;\r\n id?: string | number;\r\n isOpen?: boolean;\r\n message: string;\r\n stackTrace?: string;\r\n title?: string;\r\n type?: NotificationType;\r\n};\r\n\r\nexport abstract class Notification<\r\n State extends NotificationDefinition = NotificationDefinition,\r\n> {\r\n protected state: State;\r\n\r\n constructor(public readonly props: State) {\r\n this.state = props;\r\n\r\n makeObservable<Notification, 'state'>(this, { state: observable });\r\n }\r\n\r\n get icon() {\r\n return this.state.icon;\r\n }\r\n get id() {\r\n return this.state.id;\r\n }\r\n get isOpen() {\r\n return this.state.isOpen;\r\n }\r\n get message() {\r\n return this.state.message;\r\n }\r\n get stackTrace() {\r\n return this.state.stackTrace;\r\n }\r\n get title() {\r\n return this.state.title;\r\n }\r\n get type() {\r\n return this.state.type;\r\n }\r\n}\r\n","import { Notification } from './Notification';\r\n\r\nexport class MessageNotification extends Notification {\r\n close() {\r\n this.state.isOpen = false;\r\n }\r\n}\r\n","const fieldProps = {\r\n // field types\r\n TYPE_INPUT: 'input',\r\n TYPE_SELECT: 'select',\r\n TYPE_RADIO: 'radio',\r\n TYPE_CHECK: 'check',\r\n TYPE_BUTTON: 'button',\r\n TYPE_AREA: 'area',\r\n TYPE_LABEL: 'label',\r\n TYPE_TITLE: 'title',\r\n TYPE_FILE: 'file',\r\n TYPE_MULTIPLE: 'multiple',\r\n TYPE_HIDDEN: 'hidden',\r\n TYPE_PASSWORD: 'password',\r\n TYPE_GRID: 'grid',\r\n TYPE_IMAGE: 'image',\r\n TYPE_HREF: 'href',\r\n TYPE_EDITOR: 'editor',\r\n TYPE_TREE: 'tree',\r\n TYPE_CAPTCHA: 'captcha',\r\n\r\n // field functions\r\n FUNC_CLICK: 'onclick',\r\n FUNC_CHANGE: 'onchange',\r\n FUNC_MODAL_RETURN: 'onmodalreturn',\r\n\r\n FUNC_ROW_ADD: 'onrowadd',\r\n FUNC_ROW_DELETE: 'onrowdelete',\r\n FUNC_ROW_SORT: 'onrowsort',\r\n FUNC_COL_SELECT: 'oncolselect',\r\n\r\n // Attribute w/ props json for fields\r\n FIELD_PROPERTIES: 'properties',\r\n\r\n // Field properties\r\n PROPERTY_NAME: 'name',\r\n PROPERTY_SIZE: 'size',\r\n PROPERTY_READONLY: 'readonly',\r\n PROPERTY_DISABLED: 'disabled',\r\n PROPERTY_MODAL_DISABLED: 'modalDisabled',\r\n PROPERTY_FONT_COLOR: 'fontColor',\r\n PROPERTY_VALUE: 'value',\r\n PROPERTY_REQUIRED: 'required',\r\n PROPERTY_COLSPAN: 'colspan',\r\n PROPERTY_ROWSPAN: 'rowspan',\r\n PROPERTY_MODAL: 'modal',\r\n PROPERTY_ROWS: 'thisRows',\r\n PROPERTY_BOLD: 'bold',\r\n PROPERTY_UNDERLINED: 'underlined',\r\n PROPERTY_ALIGNMENT: 'alignment',\r\n PROPERTY_IMAGE: 'imageUrl',\r\n PROPERTY_COL_WIDTH: 'colWidth',\r\n PROPERTY_GRID_HEIGHT: 'gridHeight',\r\n PROPERTY_HIDE_GRID_BTN: 'hideGridButtons',\r\n PROPERTY_VISIBILITY_HIDDEN: 'visibilityHidden',\r\n PROPERTY_TRANSIENT: 'transient',\r\n PROPERTY_GRID_TITLE: 'gridTitle',\r\n PROPERTY_GRID_FORM: 'gridForm',\r\n PROPERTY_TOOLTIP: 'tooltip',\r\n PROPERTY_VALUE_COLOR: 'valueColor',\r\n PROPERTY_INPUT_AS_TEXT: 'inputAsText',\r\n PROPERTY_NO_DOWNLOAD: 'noDownload',\r\n PROPERTY_NO_ERASE: 'noErase',\r\n PROPERTY_NO_LOCK: 'noLock',\r\n PROPERTY_NO_HISTORY: 'noHistory',\r\n PROPERTY_NO_MODIFY: 'noModify',\r\n PROPERTY_ALLOW_EDITION: 'allowEdition',\r\n PROPERTY_HIDE_SIGN_ICONS: 'hideSignButtons',\r\n PROPERTY_URL: 'url',\r\n PROPERTY_GRID_HIDE_BTN_ORDER: 'hideOrderButton',\r\n PROPERTY_GRID_HIDE_BTN_INCLUDE: 'hideIncludeButton',\r\n PROPERTY_REGEXP_MESSAGE: 'regExpMessage',\r\n PROPERTY_PAGED_GRID: 'paged',\r\n PROPERTY_PAGED_GRID_SIZE: 'pagedGridSize',\r\n PROPERTY_GRID_ALTER_IN_LAST_PAGE: 'alterOnlyLastPage',\r\n PROPERTY_GRID_PRINT_HORIZONTAL: 'printHorizontal',\r\n PROPERTY_STORE_MODAL_QUERY_RESULT: 'storeMdlQryResult',\r\n PROPERTY_INCLUDE_FIRST_ROW: 'includeFirstRow',\r\n PROPERTY_MAX_REG_GRID: 'maxRecords',\r\n PROPERTY_GRID_LABEL: 'gridColTitle',\r\n PROPERTY_GRID_QUERY: 'gridQuery',\r\n PROPERTY_HIDE_DOC_PERMISSIONS: 'hideDocPermissions',\r\n PROPERTY_VERIFY_SIGNATURE_ONLY: 'verifySignatureOnly',\r\n PROPERTY_GRID_HIDE_BTN_ADD: 'hideAddButton',\r\n PROPERTY_GRID_HIDE_BTN_DEL: 'hideDelButton',\r\n PROPERTY_HIDE_DOC_UPLOAD: 'hideDocUpload',\r\n PROPERTY_HIDE_DOC_DOWNLOAD: 'hideDocDownload',\r\n PROPERTY_HIDE_DOC_ERASE: 'hideDocErase',\r\n PROPERTY_HIDE_DOC_LOCK: 'hideDocLock',\r\n PROPERTY_HIDE_DOC_HISTORY: 'hideDocHistory',\r\n PROPERTY_HIDE_DOC_SIGN: 'hideSignButtons',\r\n PROPERTY_DISPLAY_NONE: 'displayNone',\r\n PROPERTY_DONT_BREAK_RADIO: 'dontBreakRadio',\r\n PROPERTY_CHECKED: 'checked',\r\n PROPERTY_FILE_PREVIEW: 'filePreview',\r\n PROPERTY_NOT_PRINT: 'noPrint',\r\n // tree component\r\n PROPERTY_SELECT_PARENT: 'selParent',\r\n PROPERTY_HEIGHT: 'height',\r\n PROPERTY_MULTISELECT: 'multiselect',\r\n PROPERTY_SEL_PARENT: 'selParent',\r\n PROPERTY_PARENT_ICON: 'parentIcon',\r\n PROPERTY_LEAF_ICON: 'leafIcon',\r\n PROPERTY_CSS_CLASS: 'cssClass',\r\n PROPERTY_DOC_TYPE: 'docType',\r\n // file component\r\n PROPERTY_HIDE_DOC_METADATA: 'hideDocMetadata',\r\n PROPERTY_TRANSLATION_REQUIRED: 'reqTrad',\r\n PROPERTY_SIGNATURE_REQUIRED: 'reqSign',\r\n PROPERTY_SHOW_TOOLTIP_AS_HELP: 'tooltipHelp',\r\n PROPERTY_DOCUMENT_MONITOR_DEF: 'documentMonitorDef',\r\n PROPERTY_DOCUMENT_MONITOR_CUS: 'documentMonitorCus',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN: 'fileShwFoldTreeBtn',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR: 'fileShwFoldTreeStr',\r\n PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP: 'fileNoAllwDnD',\r\n PROPERTY_DOCUMENT_NO_SHOW_MODAL: 'fileDntShwDocMdlOnDrop',\r\n PROPERTY_DOCUMENT_SHOW_DESC: 'fileShowDesc',\r\n PROPERTY_DOCUMENT_DEFAULT_FOLDER: 'fileDefFolder',\r\n PROPERTY_DOCUMENT_ROOT_FOLDER: 'fileRootFolder',\r\n PROPERTY_DOCUMENT_EXP_DATE: 'fileExpDate',\r\n PROPERTY_DOCUMENT_DNT_SHW_DOC_MON: 'fileNotShowDocMon',\r\n PROPERTY_DOCUMENT_COLLAPSE_PERM: 'fileCollapsePermission',\r\n PROPERTY_DOCUMENT_COLLAPSE_META: 'fileCollapseMetadata',\r\n PROPERTY_DOCUMENT_COLLAPSE_FLD_STC: 'fileCollapseFldStrc',\r\n} as const;\r\n\r\nexport default fieldProps;\r\n","const formProps = {\r\n FUNC_LOAD: 'onload',\r\n FUNC_RELOAD: 'onreload',\r\n PROPERTY_FORM_INVISIBLE: 'frmInvisible',\r\n PROPERTY_FORM_HIDDEN: 'frmHidden',\r\n PROPERTY_FORM_CLOSED: 'prpFrmClosed',\r\n PROPERTY_FORM_TAB: 'frmTab',\r\n PROPERTY_FORM_HIGHLIGHT: 'frmHighlight',\r\n PROPERTY_FORM_DONT_FIRE: 'frmDontFire',\r\n PROPERTY_FORM_READONLY: 'readOnly',\r\n SIGNABLE_FORM: 'signableForm',\r\n MARKED_TO_SIGN: 'markedToSign',\r\n REQUIRED_SIGN: 'requiredSignableForm',\r\n LANGUAGES: 'langs',\r\n} as const;\r\n\r\nexport default formProps;\r\n","import fieldProps from '../fieldProps';\r\nimport formProps from '../formProps';\r\n\r\nconst FormBoolProps = [\r\n formProps.PROPERTY_FORM_INVISIBLE,\r\n formProps.PROPERTY_FORM_HIDDEN,\r\n formProps.PROPERTY_FORM_CLOSED,\r\n formProps.PROPERTY_FORM_TAB,\r\n formProps.PROPERTY_FORM_HIGHLIGHT,\r\n formProps.PROPERTY_FORM_DONT_FIRE,\r\n formProps.PROPERTY_FORM_READONLY,\r\n formProps.SIGNABLE_FORM,\r\n formProps.MARKED_TO_SIGN,\r\n formProps.REQUIRED_SIGN,\r\n];\r\n\r\nconst FieldBoolProps = [\r\n fieldProps.PROPERTY_ALLOW_EDITION,\r\n fieldProps.PROPERTY_CHECKED,\r\n fieldProps.PROPERTY_DISABLED,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_FLD_STC,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_META,\r\n fieldProps.PROPERTY_DOCUMENT_COLLAPSE_PERM,\r\n fieldProps.PROPERTY_DOCUMENT_DNT_SHW_DOC_MON,\r\n fieldProps.PROPERTY_DOCUMENT_EXP_DATE,\r\n fieldProps.PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP,\r\n fieldProps.PROPERTY_DOCUMENT_NO_SHOW_MODAL,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_DESC,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN,\r\n fieldProps.PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR,\r\n fieldProps.PROPERTY_FILE_PREVIEW,\r\n fieldProps.PROPERTY_GRID_ALTER_IN_LAST_PAGE,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_ADD,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_DEL,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_INCLUDE,\r\n fieldProps.PROPERTY_GRID_HIDE_BTN_ORDER,\r\n fieldProps.PROPERTY_HIDE_DOC_DOWNLOAD,\r\n fieldProps.PROPERTY_HIDE_DOC_ERASE,\r\n fieldProps.PROPERTY_HIDE_DOC_LOCK,\r\n fieldProps.PROPERTY_HIDE_DOC_METADATA,\r\n fieldProps.PROPERTY_HIDE_DOC_PERMISSIONS,\r\n fieldProps.PROPERTY_HIDE_DOC_SIGN,\r\n fieldProps.PROPERTY_HIDE_DOC_UPLOAD,\r\n fieldProps.PROPERTY_HIDE_GRID_BTN,\r\n fieldProps.PROPERTY_INCLUDE_FIRST_ROW,\r\n fieldProps.PROPERTY_INPUT_AS_TEXT,\r\n fieldProps.PROPERTY_MODAL_DISABLED,\r\n fieldProps.PROPERTY_MULTISELECT,\r\n fieldProps.PROPERTY_NO_DOWNLOAD,\r\n fieldProps.PROPERTY_NO_ERASE,\r\n fieldProps.PROPERTY_NO_LOCK,\r\n fieldProps.PROPERTY_NO_MODIFY,\r\n fieldProps.PROPERTY_NOT_PRINT,\r\n fieldProps.PROPERTY_PAGED_GRID,\r\n fieldProps.PROPERTY_READONLY,\r\n fieldProps.PROPERTY_REQUIRED,\r\n fieldProps.PROPERTY_SEL_PARENT,\r\n fieldProps.PROPERTY_SHOW_TOOLTIP_AS_HELP,\r\n fieldProps.PROPERTY_SIGNATURE_REQUIRED,\r\n fieldProps.PROPERTY_STORE_MODAL_QUERY_RESULT,\r\n fieldProps.PROPERTY_TRANSIENT,\r\n fieldProps.PROPERTY_TRANSLATION_REQUIRED,\r\n fieldProps.PROPERTY_VISIBILITY_HIDDEN,\r\n];\r\n\r\nconst BoolProps: string[] = [...FieldBoolProps, ...FormBoolProps];\r\nexport default BoolProps;\r\n","import fieldProps from '../fieldProps';\r\n\r\nconst NumProps: string[] = [\r\n fieldProps.PROPERTY_SIZE,\r\n fieldProps.PROPERTY_ROWS,\r\n fieldProps.PROPERTY_COLSPAN,\r\n fieldProps.PROPERTY_ROWSPAN,\r\n fieldProps.PROPERTY_PAGED_GRID_SIZE,\r\n fieldProps.PROPERTY_GRID_HEIGHT,\r\n fieldProps.PROPERTY_MAX_REG_GRID,\r\n];\r\n\r\nexport default NumProps;\r\n","import xml2js, { ParserOptions } from 'xml2js';\r\nimport he from 'he';\r\nimport { parseBooleans, parseNumbers } from 'xml2js/lib/processors';\r\nimport {\r\n TApiaFieldPropsObj,\r\n TFieldScriptEvents,\r\n TFieldServerEvents,\r\n TMap,\r\n} from '@apia/util';\r\nimport BoolProps from '../../main/Execution/FormsExecution/constants/props/booleanProps';\r\nimport NumProps from '../../main/Execution/FormsExecution/constants/props/numberProps';\r\nimport { InvalidSessionException } from '../api/apiaApi';\r\n\r\n// get JS object from string\r\nconst jsonDecode = (string: string): TMap<string | boolean | number> => {\r\n if (!string || typeof string !== 'string') return {};\r\n // remove eol enters\r\n const str = string.replace(/\\n|\\r/g, '');\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return eval(`(${str})`);\r\n};\r\n\r\n// get boolean value from string values\r\nconst parseBool = (val: string | null): boolean => {\r\n if (typeof val === 'string') {\r\n if (/^(?:true|T|t|1|1,00)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0|0,00|null)$/i.test(val)) return false;\r\n }\r\n return false;\r\n};\r\n\r\ntype TFieldProps = TMap<string | boolean | number>;\r\ntype TFieldValueProps = (string | boolean | number)[];\r\ntype TFieldParsedProps = TMap<string | boolean | number>;\r\n\r\ntype XMLParser<T = Record<string, unknown>> = (\r\n xml: XMLDocument | string,\r\n behaveConfig?: TParseXmlBehavior<T>,\r\n) => T;\r\n\r\nexport type TParseXmlBehavior<T> = {\r\n avoidTrimXml?: boolean;\r\n avoidNormalize?: boolean;\r\n xmlParser?: XMLParser<T>;\r\n};\r\n\r\n// parse XML properties of Field element\r\nexport const parseFieldPropertiesObj = (\r\n props: TFieldProps,\r\n): TFieldParsedProps => {\r\n // default values for missing props can go here below in response.\r\n const response: TFieldParsedProps = {};\r\n const objKeys: string[] = Object.keys(props);\r\n const objVal: TFieldValueProps = Object.values(props);\r\n for (let i = 0; i < objKeys.length; i += 1) {\r\n const key = objKeys[i];\r\n if (BoolProps.indexOf(key) === -1 && NumProps.indexOf(key) === -1) {\r\n response[key] = objVal[i] || '';\r\n } else if (typeof objVal[i] === 'number') {\r\n response[key] = objVal[i];\r\n } else if (BoolProps.indexOf(key) !== -1) {\r\n response[key] = parseBool(objVal[i] as string);\r\n } else if (NumProps.indexOf(key) !== -1) {\r\n response[key] = parseInt((objVal[i] as string) || '', 10);\r\n }\r\n }\r\n return response;\r\n};\r\n\r\nexport const processAjaxEventTagNames = (name: string): string => {\r\n if (name === 'a') return 'form';\r\n if (name === 'b') return 'field';\r\n if (name === 'g') return 'possibleValues';\r\n if (name === 'h') return 'item';\r\n if (name === 'z') return 'focusTo';\r\n if (name === 'r') return 'reload';\r\n if (name === 'p') return 'proccess';\r\n if (name === 'd') return 'valueAttr';\r\n return name;\r\n};\r\n\r\nexport const processAjaxEventAttrNames = (name: string): string => {\r\n if (name === 't') return 'text';\r\n if (name === 'label') return 'LABEL';\r\n return name;\r\n};\r\n\r\nexport const processAjaxEventResponse = <T>(\r\n value: T,\r\n _name: string,\r\n): boolean | T => {\r\n return value;\r\n};\r\nexport function htmlToText(html: string) {\r\n const safe = html.replace(/</g, '<');\r\n return he.decode(safe);\r\n}\r\n\r\nexport const processStringObj = (\r\n value: string,\r\n key: string,\r\n):\r\n | TApiaFieldPropsObj\r\n | string\r\n | number\r\n | TFieldScriptEvents\r\n | TFieldServerEvents => {\r\n if (key === 'properties') {\r\n return parseFieldPropertiesObj(jsonDecode(value)) as TApiaFieldPropsObj;\r\n }\r\n if (key === 'scriptEvents') {\r\n return JSON.parse(value) as TFieldScriptEvents;\r\n }\r\n if (key === 'serverEvents') {\r\n return JSON.parse(value) as TFieldServerEvents;\r\n }\r\n if (key === 'gridXml') {\r\n return parseXml(he.decode(value).replaceAll('&', '&'));\r\n }\r\n if (key === 'value' && typeof value === 'number' && Number.isNaN(value)) {\r\n return '';\r\n }\r\n if (key === 'valueType' && typeof value === 'string' && value === 'null') {\r\n return '';\r\n }\r\n if (\r\n (key === 'cols' ||\r\n key === 'rows' ||\r\n key === 'x' ||\r\n key === 'y' ||\r\n key === 'length') &&\r\n typeof value === 'string'\r\n ) {\r\n return parseNumbers(value);\r\n }\r\n\r\n return value.match?.(/[&]/) ? htmlToText(value) : value;\r\n};\r\n\r\nexport function replaceLabelHtmlValues(o: object) {\r\n for (const [key, value] of Object.entries(o)) {\r\n if (typeof value === 'object' && value) {\r\n (o as any)[key] = replaceLabelHtmlValues(value);\r\n } else if (typeof value === 'string' && value.match(/&/)) {\r\n if ((o as any).fieldType === 'editor') {\r\n (o as any)[key] = htmlToText(value);\r\n } else {\r\n (o as any)[key] = htmlToText(value);\r\n }\r\n }\r\n }\r\n return o;\r\n}\r\nexport const asyncGetJSObjfromXML = async <T>(xml: string): Promise<T> => {\r\n const parser = new xml2js.Parser({\r\n trim: true,\r\n normalize: true,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'label',\r\n attrValueProcessors: [\r\n parseBooleans,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions);\r\n\r\n const result = await new Promise<T>((resolve, reject) => {\r\n parser.parseString(xml, (err: Error | null, innerResult: T) => {\r\n if (err) reject(err);\r\n else {\r\n resolve(\r\n typeof innerResult === 'object' && innerResult\r\n ? (replaceLabelHtmlValues(innerResult) as any)\r\n : innerResult,\r\n );\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n\r\n// Wrapper que respeta parseBooleans salvo para el atributo 'value'\r\nexport function customBooleanProcessor(value: string, name?: string) {\r\n // si el atributo es 'value', devolvemos el string tal cual\r\n if (name === 'value') return value;\r\n\r\n // para todos los demás atributos, seguimos usando parseBooleans\r\n return parseBooleans(value);\r\n}\r\n\r\nexport function getDefaultXmlParserOptions(\r\n behaveConfig?: TParseXmlBehavior<any>,\r\n) {\r\n return {\r\n trim: !behaveConfig?.avoidTrimXml,\r\n normalize: !behaveConfig?.avoidNormalize,\r\n explicitRoot: false,\r\n mergeAttrs: true,\r\n explicitArray: false,\r\n charkey: 'label',\r\n attrValueProcessors: [\r\n customBooleanProcessor,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n ],\r\n tagNameProcessors: [processAjaxEventTagNames],\r\n attrNameProcessors: [processAjaxEventAttrNames],\r\n } as ParserOptions;\r\n}\r\n\r\nexport function getDefaultXmlPostProcessor<T>() {\r\n return (xml: string, parser: xml2js.Parser) => {\r\n let objJS;\r\n\r\n parser.parseString(\r\n xml,\r\n (err: Error | null, result: Record<string, unknown>) => {\r\n if (err) {\r\n console.warn('Error Parsing XML data', err);\r\n objJS = err;\r\n } else {\r\n if (result?.code === '-1' && result.exceptions) {\r\n throw new InvalidSessionException();\r\n }\r\n objJS = result;\r\n }\r\n },\r\n ) as T;\r\n\r\n if (objJS) {\r\n return typeof objJS === 'object' && objJS\r\n ? (replaceLabelHtmlValues(objJS) as any)\r\n : objJS;\r\n }\r\n return {} as T;\r\n };\r\n}\r\n\r\nfunction getDefaultXmlParser<T>(\r\n behaveConfig?: TParseXmlBehavior<T>,\r\n): XMLParser<T> {\r\n return (xml, _behaveConfig) => {\r\n const parser = new xml2js.Parser(getDefaultXmlParserOptions(behaveConfig));\r\n return getDefaultXmlPostProcessor<T>()(xml as string, parser);\r\n };\r\n}\r\n\r\nexport const parseXml = <T = Record<string, unknown>>(\r\n xml: XMLDocument | string,\r\n behaveConfig?: TParseXmlBehavior<T>,\r\n): T => {\r\n if (typeof xml === 'object' && !(xml instanceof XMLDocument)) {\r\n return xml;\r\n }\r\n\r\n const parser: XMLParser<T> =\r\n behaveConfig?.xmlParser ?? getDefaultXmlParser<T>();\r\n\r\n return parser(xml, behaveConfig);\r\n};\r\n","import type { Execution } from '../../main/Execution';\r\n\r\nexport function getWindow(execution: Execution) {\r\n return execution.environment.window;\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\n\r\nexport enum ExecutionState {\r\n RUNNING,\r\n LOADING,\r\n FINISHED,\r\n RENDERING,\r\n CONFIRMING,\r\n FINISHED_WITH_ERROR,\r\n}\r\n\r\nexport type TOnClose =\r\n | 'clearEvalPath'\r\n | 'confirmOkOnClose'\r\n | 'confirmOkOnCloseSplash'\r\n | 'confirmOkOnSaveSplash'\r\n | 'releaseOkOnClose'\r\n | null;\r\n\r\nexport type TErrMessage = {\r\n message: {\r\n text: string;\r\n label?: string;\r\n };\r\n};\r\nexport type TFetchTaskActionResponse = {\r\n onClose?: TOnClose;\r\n sysMessages?: TErrMessage;\r\n sysExceptions?: TErrMessage;\r\n type?: string;\r\n actions?: {\r\n action: {\r\n param: string[];\r\n toDo: string;\r\n };\r\n };\r\n load?: {\r\n canClose: boolean;\r\n type: string;\r\n text: {\r\n label: string;\r\n closeAll: boolean;\r\n addClass?: string;\r\n title?: string;\r\n };\r\n };\r\n text?: {\r\n title?: string;\r\n label?: string;\r\n };\r\n};\r\n\r\nexport type TConfirmResponse = {\r\n onClose: string;\r\n pathSelection?: boolean | null;\r\n groupSelection?: boolean | null;\r\n load?: TApiaLoadForm & {\r\n type: 'form' | 'text' | 'table' | 'function';\r\n canClose: boolean;\r\n text?: {\r\n closeAll: string;\r\n title: string;\r\n addClass: string;\r\n label: string;\r\n };\r\n };\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: [number, string];\r\n };\r\n };\r\n};\r\n\r\n/*\r\n{\r\n \"onClose\": \"\",\r\n \"load\": {\r\n \"canClose\": false,\r\n \"type\": \"text\",\r\n \"text\": {\r\n \"closeAll\": false,\r\n \"title\": \"\",\r\n \"addClass\": \"success\",\r\n \"text\": \"Operación completa. Cargando el listado.\"\r\n }\r\n },\r\n \"actions\": {\r\n \"action\": {\r\n \"toDo\": \"linkTimed\",\r\n \"param\": [\r\n {\r\n \"text\": \"1000\"\r\n },\r\n {\r\n \"text\": \"/apia.execution.EntInstanceListAction.run?action=list&tabId=174949147885442422&tokenId=1749490825179\"\r\n }\r\n ]\r\n }\r\n },\r\n \"canClose\": false,\r\n \"type\": \"text\",\r\n \"text\": {\r\n \"closeAll\": false,\r\n \"title\": \"\",\r\n \"addClass\": \"success\",\r\n \"text\": \"Operación completa. Cargando el listado.\"\r\n }\r\n}\r\n*/\r\n\r\nexport type TConfirmEntityResponse = {\r\n onClose: string;\r\n load?: TApiaLoadForm & {\r\n type: 'form' | 'text' | 'table' | 'function';\r\n canClose: boolean;\r\n text?: {\r\n closeAll: string;\r\n title: string;\r\n addClass: string;\r\n label?: string;\r\n };\r\n };\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: string[];\r\n };\r\n };\r\n};\r\n","import { AxiosError, type AxiosResponse } from 'axios';\r\nimport { MessageNotification } from '../../main/Notifications/MessageNotification';\r\nimport {\r\n IApiaApiPostConfig,\r\n IApiaApiRequestConfig,\r\n TApiaApiAxiosResponse,\r\n TApiaApiResult,\r\n TApiaMessage,\r\n TApiaSystemMessageObj,\r\n} from './types';\r\nimport { NotificationType } from '../../main/Notifications/Notification';\r\nimport { parseXml } from '../xml/parseXml';\r\nimport type { IStringifyOptions } from 'qs';\r\nimport QueryString from 'qs';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { getWindow } from '../dom/getWindow';\r\nimport { type Execution } from '../../main/Execution';\r\nimport { ExecutionState } from '../../main/Execution/types';\r\n\r\ndeclare global {\r\n interface Window {\r\n [key: string]: string;\r\n }\r\n\r\n interface Document {\r\n headers: any;\r\n }\r\n}\r\n\r\nfunction dispatchMessage(\r\n execution: Execution,\r\n type: NotificationType,\r\n message: TApiaMessage,\r\n) {\r\n const definedType = message.type;\r\n const actualType = [null, 'success', 'warning', 'error'][\r\n definedType || 0\r\n ] as NotificationType;\r\n\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: message.text!,\r\n stackTrace: message.label,\r\n title: message.title,\r\n type: actualType || type,\r\n }),\r\n );\r\n}\r\n\r\nfunction getAxios() {\r\n return import('axios').then((r) =>\r\n typeof process !== 'undefined' &&\r\n process.env?.APIA_SERVER &&\r\n process.env?.CONTEXT\r\n ? r.default.create({\r\n baseURL: process?.env?.APIA_SERVER.replaceAll(\r\n process.env.CONTEXT as string,\r\n '',\r\n ),\r\n })\r\n : r.default,\r\n );\r\n}\r\n\r\nconst handleWrongResponse = (execution: Execution, error: Error) => {\r\n if (\r\n error instanceof InvalidSessionException ||\r\n (error instanceof AxiosError && error.status === 403)\r\n ) {\r\n execution.kill();\r\n throw new InvalidSessionException();\r\n }\r\n\r\n let errorMessage: string;\r\n if (typeof error !== 'string') {\r\n if (error.message) errorMessage = error.message;\r\n else errorMessage = error.toString();\r\n } else errorMessage = error;\r\n\r\n execution.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: errorMessage.replaceAll('AxiosError', 'Error'),\r\n }),\r\n );\r\n};\r\n\r\nexport function isJsonResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match('application/json');\r\n}\r\nexport function isXmlResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match(\r\n /(?:application|text)?\\/xml/,\r\n );\r\n}\r\nexport function isHtmlResponse(response: AxiosResponse<unknown>) {\r\n return (response.headers['content-type'] as string).match(\r\n /(?:application|text)?\\/html/,\r\n );\r\n}\r\n\r\nexport function parseMessages(\r\n execution: Execution,\r\n response: TApiaSystemMessageObj,\r\n) {\r\n if (!response) return;\r\n const { exceptions, sysMessages, sysExceptions } = response;\r\n arrayOrArray(exceptions?.exception).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'error'),\r\n );\r\n arrayOrArray(sysMessages?.message).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'warning'),\r\n );\r\n arrayOrArray(sysExceptions?.exception).forEach(\r\n dispatchMessage.bind(dispatchMessage, execution, 'error'),\r\n );\r\n}\r\n\r\nasync function handleResponse<\r\n ResponseType extends Record<string, unknown>,\r\n PostDataType = unknown,\r\n>(\r\n execution: Execution,\r\n result: AxiosResponse<string> | void,\r\n behaveConfig?: IApiaApiPostConfig<PostDataType, ResponseType>,\r\n): Promise<TApiaApiAxiosResponse<ResponseType> | null> {\r\n try {\r\n if (!result || result.data === undefined) {\r\n //\r\n } else {\r\n const parsedResponse = await parseSuccessfulResponse<ResponseType>(\r\n execution,\r\n result,\r\n behaveConfig,\r\n );\r\n\r\n return {\r\n ...result,\r\n data: parsedResponse,\r\n hasError:\r\n !!parsedResponse?.exceptions || !!parsedResponse?.sysExceptions,\r\n hasMessages: !!parsedResponse?.sysMessages,\r\n };\r\n }\r\n } catch (e: unknown) {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n return null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport class InvalidSessionException extends Error {}\r\n\r\nexport const parseSuccessfulResponse = async <\r\n ResponseType extends Record<string, unknown>,\r\n PostDataType = unknown,\r\n>(\r\n execution: Execution,\r\n response: AxiosResponse<string>,\r\n behaveConfig?: IApiaApiPostConfig<PostDataType, ResponseType>,\r\n) => {\r\n let parsedObj: TApiaSystemMessageObj<ResponseType> | void | undefined =\r\n undefined;\r\n if (isJsonResponse(response)) {\r\n if (typeof response.data === 'string')\r\n parsedObj = JSON.parse(\r\n response.data.trim(),\r\n ) as TApiaSystemMessageObj<ResponseType> | void;\r\n else if (typeof response.data === 'object' && response.data)\r\n parsedObj = response.data;\r\n } else if (isXmlResponse(response)) {\r\n try {\r\n parsedObj = parseXml<ResponseType>(response.data, behaveConfig);\r\n } catch (e) {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n }\r\n } else if (isHtmlResponse(response)) {\r\n console.error(\r\n 'El contenido devuelto es Html, no se esperaba esa respuesta',\r\n );\r\n return null;\r\n }\r\n\r\n if (parsedObj) {\r\n const {\r\n actions,\r\n onClose,\r\n exceptions,\r\n sysExceptions,\r\n sysMessages,\r\n load,\r\n ...rest\r\n } = parsedObj; // Session handling\r\n if (rest.code === '-1' && exceptions) {\r\n throw new InvalidSessionException();\r\n }\r\n\r\n parseMessages(execution, { exceptions, sysExceptions, sysMessages });\r\n\r\n if (load) {\r\n return { ...parsedObj, ...load, ...(rest as ResponseType) };\r\n }\r\n return {\r\n actions,\r\n onClose,\r\n exceptions,\r\n sysExceptions,\r\n sysMessages,\r\n ...(rest as ResponseType),\r\n };\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* IMPORTANT!! The ApiaApi is programmed under the slogan that\r\n * **should never throw an exception**. **Errors** coming from\r\n * connectivity or exceptions on the server **will be handled\r\n * automatically** by ApiaApi, using the notification system\r\n * of the application. It is possible to determine in what context they should\r\n * be thrown those exceptions (global, main, modal) using the\r\n * alertsCategory configuration properties **(see errorsHandling.md)**.\r\n *\r\n * @param url String, the url you want to call\r\n * @param config interface IApiaApiRequestConfig<DataType>;\r\n *\r\n * @throws Nothing\r\n *\r\n * @example\r\n *\r\n * ApiaApi.post<ResponseType>('url...', {\r\n axiosConfig?: AxiosRequestConfig;\r\n\r\n // Configuración de postData\r\n postData? unknown;\r\n postDataTreatement?: 'stringify' | undefined;\r\n\r\n // Configuración de queryString\r\n queryData?: string | Record<string, unknown>;\r\n stringifyOptions?: QueryString.IStringifyOptions;\r\n\r\n // Response validator,\r\n // If it returns true, everything continues correctly\r\n // If it returns false, the ApiaApi throws a standard error.\r\n // If it returns string, ApiaApi throws the error returned in the string.\r\n validateResponse?: (\r\n response: AxiosResponse<DataType | null>,\r\n ) => boolean | string;\r\n\r\n // Configuración de alertas\r\n alertsImportance?: TAlertImportance;\r\n\r\n // Configuración de ApiaApiHandler, falta documentar\r\n handleLoad?: boolean;\r\n eventsHandler?: IEventsHandler;\r\n\r\n // other configuration\r\n colors?: TColors;\r\n debug?: boolean;\r\n }\r\n * @returns The type of the return value depends on the type passed when calling the function. If there was an error it returns null.\r\n */\r\nexport async function post<\r\n LoadType extends Record<string, unknown> = Record<string, unknown>,\r\n DataType = unknown,\r\n T = unknown,\r\n>(\r\n execution: Execution,\r\n actualUrl: string,\r\n behaveConfig?: IApiaApiPostConfig<DataType, LoadType>,\r\n): TApiaApiResult<LoadType> {\r\n if (\r\n execution.state.executionState === ExecutionState.FINISHED &&\r\n !behaveConfig?.allowAfterFinish\r\n ) {\r\n throw new Error('Cannot perform requests after execution has finished');\r\n }\r\n\r\n const postData =\r\n behaveConfig?.postDataTreatment === 'stringify'\r\n ? QueryString.stringify(\r\n behaveConfig.postData,\r\n behaveConfig.stringifyOptions,\r\n )\r\n : behaveConfig?.postData;\r\n\r\n const response = await (await getAxios())\r\n .post<\r\n T,\r\n AxiosResponse<string>,\r\n DataType | string\r\n >(actualUrl, postData, { ...behaveConfig?.axiosConfig, headers: { ...behaveConfig?.axiosConfig?.headers, ...execution.environment.headers } })\r\n .catch((e: unknown) => {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n });\r\n\r\n if (response) {\r\n const result = handleResponse<LoadType>(execution, response, behaveConfig);\r\n return result;\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * IMPORTANTE!! El ApiaApi está programado bajo la consigna de que\r\n * **no debe tirar núnca una excepción**. **Los errores** provenientes\r\n * de la conectividad o de excepciones en el servidor **serán manejados\r\n * automáticamente** por el ApiaApi utilizando el sistema de notificaciones\r\n * de la aplicación. Es posible determinar en qué contexto deben\r\n * ser lanzadas esas excepciones (global, main, modal) utilizando las\r\n * propiedades de configuración alertsCategory **(ver errorsHandling.md)**.\r\n *\r\n * @param url String, el url al que se desea llamar\r\n * @param config interface IApiaApiRequestConfig<DataType>;\r\n *\r\n * @throws Nothing\r\n *\r\n * @example\r\n *\r\n * ApiaApi.get<TipoDeRespuesta>('url...', {\r\n axiosConfig?: AxiosRequestConfig;\r\n\r\n // Configuración de queryString\r\n queryData?: string | Record<string, unknown>;\r\n stringifyOptions?: QueryString.IStringifyOptions;\r\n\r\n // Validador de respuesta,\r\n // Si devuelve true, todo sigue correctamente\r\n // Si devuelve false, el ApiaApi tira un error estándar.\r\n // Si devuelve string, el ApiaApi tira el error devuelto en el string.\r\n validateResponse?: (\r\n response: AxiosResponse<DataType | null>,\r\n ) => boolean | string;\r\n\r\n // Configuración de alertas\r\n alertsImportance?: TAlertImportance;\r\n\r\n // Configuración de ApiaApiHandler, falta documentar\r\n handleLoad?: boolean;\r\n eventsHandler?: IEventsHandler;\r\n\r\n // Otra configuración\r\n colors?: TColors;\r\n debug?: boolean;\r\n }\r\n * @returns El tipo del valor devuelto depende del tipo pasado al llamar a la función. Si hubo un error devuelve null\r\n */\r\nexport async function get<\r\n LoadType extends Record<string, unknown> = Record<string, unknown>,\r\n T = unknown,\r\n D = unknown,\r\n>(\r\n execution: Execution,\r\n actualUrl: string,\r\n behaveConfig?: IApiaApiRequestConfig,\r\n): TApiaApiResult<LoadType> {\r\n if (execution.state.executionState === ExecutionState.FINISHED) {\r\n throw new Error('Cannot perform requests after execution has finished');\r\n }\r\n\r\n const response = await (await getAxios())\r\n .get<\r\n T,\r\n AxiosResponse<string>,\r\n D\r\n >(actualUrl, { ...behaveConfig?.axiosConfig, headers: { ...behaveConfig?.axiosConfig?.headers, ...execution.environment.headers } })\r\n .catch((e: unknown) => {\r\n handleWrongResponse(\r\n execution,\r\n e instanceof Error ? e : new Error(e as string),\r\n );\r\n });\r\n if (response) {\r\n const result = await handleResponse<LoadType>(execution, response);\r\n return result;\r\n }\r\n return null;\r\n}\r\n\r\nexport type MakeApiaUrlProps = {\r\n action?: string;\r\n ajaxUrl?: string;\r\n queryString?: string;\r\n stringifyOptions?: IStringifyOptions;\r\n tabId?: string | number;\r\n preventAsXmlParameter?: boolean;\r\n avoidTabId?: boolean;\r\n [key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Creates an url based on the general requirements of Apia.\r\n * If the ajaxUrl property is not passed, it will use the\r\n * getWindow(execution).URL_REQUEST_AJAX. Its use is very simple, just pass the objects you\r\n * want to appear in the query string.\r\n *\r\n * @example makeApiaUrl({\r\n * ajaxUrl: 'the.endpoint.you.want',\r\n * queryString: 'an=existent&query=string',\r\n * action: 'theAction',\r\n * anotherProp: 15\r\n * })\r\n *\r\n * @returns the well formed url, in the example, the response url is:\r\n * /context/the.endpoint.you.want?an=existent&query=string&anotherProp=15&tabId=...&tokenId=...&action=theAction\r\n */\r\nexport function makeApiaUrl(execution: Execution, props?: MakeApiaUrlProps) {\r\n let actualQueryData: Record<string, unknown> | unknown = {};\r\n\r\n if (props) {\r\n const {\r\n ajaxUrl,\r\n queryString,\r\n stringifyOptions,\r\n shouldAvoidTabId,\r\n preventAsXmlParameter,\r\n avoidTabId,\r\n tabId: outerTabId,\r\n ...rest\r\n } = props;\r\n actualQueryData = { ...rest };\r\n }\r\n\r\n const queryString = QueryString.stringify(\r\n actualQueryData,\r\n props?.stringifyOptions ?? {\r\n arrayFormat: 'repeat',\r\n encodeValuesOnly: false,\r\n },\r\n );\r\n\r\n let actualAjaxUrl = props?.ajaxUrl ?? getWindow(execution).URL_REQUEST_AJAX;\r\n if (actualAjaxUrl.indexOf('?') === actualAjaxUrl.length - 1) {\r\n actualAjaxUrl = actualAjaxUrl.slice(0, actualAjaxUrl.length - 1);\r\n }\r\n if (!actualAjaxUrl.startsWith('/')) {\r\n actualAjaxUrl = `/${actualAjaxUrl}`;\r\n }\r\n\r\n const match = getWindow(execution)?.TAB_ID_REQUEST?.match(/tokenId=(\\w+)/);\r\n const currentTokenId = (match ?? [])[1];\r\n\r\n let tabId = (\r\n props?.tabId\r\n ? `&tabId=${props.tabId}&tokenId=${currentTokenId}`\r\n : getWindow(execution).TAB_ID_REQUEST\r\n ).slice(1);\r\n if (props?.avoidTabId) {\r\n tabId = '';\r\n }\r\n\r\n let { CONTEXT } = getWindow(execution);\r\n if (CONTEXT?.endsWith('/')) {\r\n CONTEXT += CONTEXT.slice(0, CONTEXT.length - 1);\r\n }\r\n\r\n let timestamp = `timestamp=${Date.now()}&`;\r\n if (\r\n (props?.queryString && props.queryString.includes('timestamp=')) ||\r\n queryString?.includes('timestamp=')\r\n ) {\r\n timestamp = '';\r\n }\r\n\r\n const contextWord = CONTEXT.replace(/^\\/?(.+?)\\/?$/, '$1');\r\n actualAjaxUrl = actualAjaxUrl.match(\r\n new RegExp(`^(?:(?:/?${contextWord})?/)?(.+)$`),\r\n )?.[1] as string;\r\n\r\n return `${\r\n contextWord ? '/' : ''\r\n }${contextWord}/${actualAjaxUrl}?${timestamp}${\r\n !props?.preventAsXmlParameter ? 'asXml=true&' : ''\r\n }${props?.queryString ? `${props.queryString}&` : ''}${\r\n queryString ? `${queryString}&` : ''\r\n }${tabId}`;\r\n}\r\n","import { Callback, Callbacks, Map, UnSubscriber } from './types';\r\n\r\nexport type { Callback, Map, UnSubscriber } from './types';\r\n\r\n/**\r\n * @public\r\n *\r\n * The `EventEmitter` class is a generic utility for handling events. It allows subscribing to and emitting events.\r\n * This class is generic and works with a `Map` where keys are event names and values are the types associated with those events.\r\n *\r\n * @typeParam Events - An extension of `Map` where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class EventEmitter<Events extends Map> {\r\n protected callbacks: Record<'on' | 'once', Callbacks<Events>> = {\r\n on: {} as Callbacks<Events>,\r\n once: {} as Callbacks<Events>,\r\n };\r\n protected enabled = true;\r\n\r\n protected debugMode = false;\r\n debug(enable = true) {\r\n this.debugMode = enable;\r\n }\r\n\r\n /**\r\n * Emits an event with the given data. Any listeners subscribed to this event will be invoked with the passed data.\r\n *\r\n * @param event - The event name to emit.\r\n * @param data - The data associated with the event. Its type is dependent on the event name.\r\n */\r\n emit<K extends keyof Events>(event: K, data: Events[K]) {\r\n this.callbacks.on[event]?.forEach((current) => current(data));\r\n\r\n this.callbacks.once[event]?.forEach((current) => current(data));\r\n this.callbacks.once[event] = [];\r\n }\r\n\r\n /**\r\n * Reflects the current emitter state. A disabled state indicates that the emitter wont call listeners until its functionality gets enabled again.\r\n */\r\n get isEnabled() {\r\n return this.enabled;\r\n }\r\n\r\n off<K extends keyof Events>(event: K, cb: Callback<Events, K>): void {\r\n this.callbacks.on[event] = this.callbacks.on[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n this.callbacks.once[event] = this.callbacks.once[event]?.filter(\r\n (c) => c !== cb,\r\n );\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event. The callback is invoked each time the event is emitted.\r\n *\r\n * @param event - The event name to listen to.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (!this.callbacks.on[event]) this.callbacks.on[event] = [];\r\n this.callbacks.on[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.on[event] = this.callbacks.on[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Subscribes a callback function to an event for a single occurrence. After the event is emitted once, the listener is automatically removed.\r\n *\r\n * @param event - The event name to listen to for a single occurrence.\r\n * @param cb - The callback function to be invoked when the event is emitted.\r\n * @returns A function to unsubscribe the event listener.\r\n */\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (!this.callbacks.once[event]) this.callbacks.once[event] = [];\r\n this.callbacks.once[event].push(cb);\r\n\r\n return () => {\r\n this.callbacks.once[event] = this.callbacks.once[event].filter(\r\n (c) => c !== cb,\r\n );\r\n };\r\n }\r\n}\r\n","import { Callback, EventEmitter, Map, UnSubscriber } from './EventEmitter';\r\nimport { SetStateAction } from './types';\r\n\r\ntype Setter<T> = (prevState: T) => T;\r\n\r\nexport function isSetter<T>(data: SetStateAction<T>): data is Setter<T> {\r\n return typeof data === 'function';\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\ntype EmitterState<Events extends Map> = {\r\n [K in keyof Events]: Events[K];\r\n};\r\n\r\n/**\r\n * Extends EventEmitter to manage and emit events with state persistence.\r\n * This class allows emitting and listening to typed events while also keeping\r\n * a state that can be accessed synchronously for each event.\r\n *\r\n * @param initialState - If given will be passed to subscriptions\r\n *\r\n * @template Events - A mapping of event names to their associated data types.\r\n * @extends EventEmitter<Events>\r\n */\r\nexport class StatefulEmitter<Events extends Map> extends EventEmitter<Events> {\r\n protected state = {} as EmitterState<Events>;\r\n\r\n constructor(initialState?: Partial<Events>) {\r\n super();\r\n\r\n this.state = Object.assign({}, initialState) as Events;\r\n }\r\n\r\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\r\n this.state[event] = data;\r\n super.emit(event, data);\r\n }\r\n\r\n on<K extends keyof Events>(event: K, cb: Callback<Events, K>): UnSubscriber {\r\n if (this.state[event]) cb(this.state[event]);\r\n\r\n return super.on(event, cb);\r\n }\r\n\r\n once<K extends keyof Events>(\r\n event: K,\r\n cb: Callback<Events, K>,\r\n ): UnSubscriber {\r\n if (this.state[event]) {\r\n cb(this.state[event]);\r\n\r\n /**\r\n * Given that the information has already been sent, the subscription is not necessary\r\n */\r\n return () => {};\r\n }\r\n\r\n return super.once(event, cb);\r\n }\r\n\r\n /**\r\n * Retrieves the stored state for a given event\r\n */\r\n getState<K extends keyof Events>(event: K): Events[K] {\r\n return this.state[event];\r\n }\r\n\r\n /**\r\n * Just an alias for emit, with the advantage that can be called with a callback as second parameter in which case behaves exactly as react's setState.\r\n */\r\n setState<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.emit(event, actualData);\r\n }\r\n}\r\n","import { Map } from './EventEmitter';\r\nimport { StatefulEmitter, isSetter } from './StatefulEmitter';\r\nimport { SetStateAction } from './types';\r\n\r\ntype BouncingMap<Events extends Map> = {\r\n [K in keyof Events]: number;\r\n};\r\n\r\nconst NullObject = Symbol('NullObject');\r\n\r\ntype ThrottlingMap<Events extends Map> = {\r\n [K in keyof Events]: Events[K] | typeof NullObject;\r\n};\r\n\r\ntype ThrottlingMarkers<Events extends Map> = {\r\n [K in keyof Events]: boolean;\r\n};\r\n\r\nexport type DebounceOptions = Partial<{ timing: number }>;\r\n\r\nexport type ThrottleOptions = Partial<{\r\n emitOnStart?: boolean;\r\n timing: number;\r\n}>;\r\n\r\n/**\r\n * @public\r\n *\r\n * The BouncingEmitter class is an extension of EventEmitter which adds debouncing and throttling functionality.\r\n *\r\n * @typeParam — Events - An extension of Map where the key is the event name and the value is the type of data associated with that event.\r\n */\r\nexport class BouncingEmitter<\r\n Events extends Map,\r\n> extends StatefulEmitter<Events> {\r\n protected bouncingTimeouts = {} as BouncingMap<Events>;\r\n\r\n protected defaultTiming = 100;\r\n\r\n /**\r\n * Debounces a event emit with until there is no call to the emit methods by (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * _____________________E\r\n */\r\n debounce<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: DebounceOptions,\r\n ) {\r\n clearTimeout(this.bouncingTimeouts[event]);\r\n this.bouncingTimeouts[event] = setTimeout(() => {\r\n this.emit(event, data);\r\n }, configuration?.timing ?? this.defaultTiming) as unknown as number;\r\n }\r\n\r\n /**\r\n * Throttles a event emit with the warranty that the data will be emitted at most every (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:\r\n *\r\n * E_E_E_E_E_E_E_E_E\r\n *\r\n * If timing is configured to 100ms, which is the default, the emission will occur as follows:\r\n *\r\n * ____E____E____E______E\r\n *\r\n * @param configuration.emitOnStart - Emits an event on the first call to throttle when no pending throttle is stored. **If emitOnStart is true and an only call to throttle is made, it will emit an only event.**\r\n */\r\n\r\n protected throttleData = {} as ThrottlingMap<Events>;\r\n protected throttleEmittedOnInit = {} as ThrottlingMarkers<Events>;\r\n throttle<K extends keyof Events>(\r\n event: K,\r\n data: Events[K],\r\n configuration?: ThrottleOptions,\r\n ) {\r\n if (!this.throttleEmittedOnInit[event] && configuration?.emitOnStart) {\r\n this.throttleEmittedOnInit[event] = true;\r\n setTimeout(() => {\r\n this.throttleEmittedOnInit[event] = false;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n this.emit(event, data);\r\n } else if (!configuration?.emitOnStart) {\r\n if (\r\n this.throttleData[event] === NullObject ||\r\n !(event in this.throttleData)\r\n ) {\r\n setTimeout(() => {\r\n this.emit(event, this.throttleData[event] as Events[K]);\r\n this.throttleData[event] = NullObject;\r\n }, configuration?.timing ?? this.defaultTiming);\r\n }\r\n this.throttleData[event] = data;\r\n }\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and debounce\r\n */\r\n setStateDebounced<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: DebounceOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.debounce(event, actualData, configuration);\r\n }\r\n\r\n /**\r\n * This method is a mix between setState and throttle\r\n */\r\n setStateThrottled<K extends keyof Events>(\r\n event: K,\r\n data: SetStateAction<Events[K]>,\r\n configuration?: ThrottleOptions,\r\n ): void {\r\n const actualData = isSetter(data) ? data(this.getState(event)) : data;\r\n\r\n this.throttle(event, actualData, configuration);\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\nexport function getLabel(\r\n execution: Execution,\r\n label: string,\r\n replacers?: Partial<{\r\n text: Record<string, string>;\r\n tooltip: Record<string, string>;\r\n }>,\r\n) {\r\n const original = (getWindow(execution) as any).labels[label] as {\r\n text: string;\r\n tooltip: string;\r\n };\r\n\r\n if (!original) {\r\n return {\r\n text: `LblNotPrealoded: ${label}`,\r\n tooltip: `LblNotPrealoded: ${label}`,\r\n };\r\n }\r\n\r\n const labelObject = { ...original };\r\n\r\n if (replacers?.text) {\r\n Object.entries(replacers.text).forEach(([key, value]) => {\r\n labelObject.text = labelObject.text.replaceAll(`<${key}>`, value);\r\n });\r\n }\r\n if (replacers?.tooltip) {\r\n Object.entries(replacers.tooltip).forEach(([key, value]) => {\r\n labelObject.tooltip = labelObject.tooltip.replaceAll(`<${key}>`, value);\r\n });\r\n }\r\n\r\n return labelObject;\r\n}\r\n\r\nexport const labels = {\r\n errorConfirmationFailed: () => 'Error al confirmar',\r\n errorRegexNotValidated: () => 'La expresión regular no fue validada.',\r\n errorCouldNotSync: () => 'No se pudo sincronizar',\r\n errorFieldRequired: (execution: Execution) =>\r\n getLabel(execution, 'msgReqField').text,\r\n errorTranslateRequired: (execution: Execution, lang: string) =>\r\n getLabel(execution, 'lblReqLang', { text: { TOK1: lang } }).text,\r\n errorLoadForms: () =>\r\n 'Error al inicializar los formularios, contacte al administrador.',\r\n errorOnEvent: (execution: Execution, eventName: string) =>\r\n (window as any).SERVER_MODE\r\n ? 'Error al ejecutar la clase de negocios, contacte al administrador.'\r\n : getLabel(execution, 'msgErrorOnEvent', { text: { TOK1: eventName } })\r\n .text,\r\n};\r\n","// get boolean value from string values\r\nexport const parseBoolean = (val: string | null): boolean => {\r\n if (typeof val === 'string') {\r\n if (/^(?:true|T|t|1|1,00)$/i.test(val)) return true;\r\n if (/^(?:false|F|f|0|0,00|null)$/i.test(val)) return false;\r\n }\r\n return false;\r\n};\r\n","import BoolProps from '../../main/Execution/FormsExecution/constants/props/booleanProps';\r\nimport NumProps from '../../main/Execution/FormsExecution/constants/props/numberProps';\r\nimport { parseBoolean } from '../dataTypes/parseBoolean';\r\n\r\nconst valueParsers: ((\r\n key: string,\r\n value: unknown,\r\n next: () => void,\r\n) => void | { key: string; value: any })[] = [\r\n (key, value, next) => {\r\n if (BoolProps.indexOf(key) === -1 && NumProps.indexOf(key) === -1) {\r\n return next();\r\n } else if (typeof value === 'number') {\r\n return next();\r\n } else if (BoolProps.indexOf(key) !== -1) {\r\n return { key, value: parseBoolean(value as string) };\r\n } else if (NumProps.indexOf(key) !== -1) {\r\n return { key, value: parseInt((value as string) || '', 10) };\r\n }\r\n next();\r\n },\r\n];\r\n\r\nexport function parseFakeJSON<T extends Record<string, unknown>>(\r\n str: string,\r\n): T {\r\n if (!str) {\r\n return {} as T;\r\n }\r\n\r\n if (typeof str === 'object') {\r\n return str as T;\r\n }\r\n\r\n const res = new Function(`const form = ${str}; return form;`)() as T;\r\n\r\n const ret: T = {} as T;\r\n\r\n for (const [key, value] of Object.entries(res)) {\r\n for (const p of valueParsers) {\r\n let next = false;\r\n const t = p(key, value, () => {\r\n next = true;\r\n });\r\n if (!next && t) {\r\n (ret as any)[t.key] = t.value;\r\n } else {\r\n (ret as any)[key] = value;\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { SetStateAction } from '../../../util/events/types';\r\nimport type { Grid } from './fields';\r\n\r\nexport class WithProperties<Props extends Record<string, any>> {\r\n properties: Props = {} as Props;\r\n private parentGrid: null | Grid = null;\r\n\r\n constructor(initialState?: Props) {\r\n if (initialState) {\r\n this.properties = initialState;\r\n }\r\n makeObservable(this, { properties: observable, setProperty: action });\r\n }\r\n\r\n getParentGrid() {\r\n return this.parentGrid;\r\n }\r\n\r\n getProperty<K extends keyof Props>(propName: K): Props[K] {\r\n return this.properties[propName];\r\n }\r\n setProperty<K extends keyof Props>(\r\n propName: K,\r\n propValue: SetStateAction<Props[K]>,\r\n ) {\r\n const value =\r\n propValue instanceof Function\r\n ? propValue(this.properties[propName])\r\n : propValue;\r\n\r\n this.properties[propName] = value;\r\n\r\n if (propName === 'visibilityHidden') {\r\n this.parentGrid?.refreshColumnsVisibilities();\r\n }\r\n }\r\n\r\n setParentGrid(grid: Grid) {\r\n this.parentGrid = grid;\r\n return this;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\n\r\nexport function getDocument(execution: Execution) {\r\n return execution.environment.document;\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { getDocument } from '../dom/getDocument';\r\nimport { getWindow } from '../dom/getWindow';\r\n\r\nexport function getCurrentTabsString(execution: Execution) {\r\n const tabsList = (getWindow(execution).tabsController as any)?.tabsList as {\r\n id: string;\r\n state: { isOpen: boolean };\r\n }[];\r\n\r\n if (tabsList)\r\n return `${tabsList\r\n .map((c) => (c.state.isOpen ? c.id : -1))\r\n .filter((c) => !(typeof c === 'number'))\r\n .join(',')}~${getDocument(execution).scrollingElement?.scrollTop ?? 0}`;\r\n}\r\n","import type { Execution } from '../..';\r\nimport { getCurrentTabsString } from '../../../../util/app/getCurrentTabsString';\r\nimport { getWindow } from '../../../../util/dom/getWindow';\r\n\r\nexport const actions = {\r\n forms: 'apia.execution.FormAction.run',\r\n formSubmit: (execution: Execution) =>\r\n `${getWindow(execution).CONTEXT}/apia.execution.FormAction.run?action=fireFieldEvent¤tTab=${getCurrentTabsString(execution)}${getWindow(execution).TAB_ID_REQUEST}`,\r\n};\r\n","export const eventTypes = {\r\n EVENT_FLD_ONCHANGE: 1,\r\n EVENT_FLD_ONCLICK: 4,\r\n EVENT_FLD_POPULATE: 5,\r\n EVENT_FLD_ONMODALRETURN: 37,\r\n EVENT_FLD_ONMODALCHANGE: 36,\r\n\r\n // Grid Events\r\n EVENT_FLD_GRID_ADD: 60,\r\n EVENT_FLD_GRID_DEL: 61,\r\n EVENT_FLD_GRID_SORT: 62,\r\n EVENT_FLD_GRID_COLUMN_SELECT: 65,\r\n\r\n // Print Events\r\n EVENT_FRM_ONBEFORE_PRINT: 63,\r\n EVENT_FRM_ONAFTER_PRINT: 64,\r\n};\r\n","import fieldProps from './fieldProps';\r\nimport formProps from './formProps';\r\n\r\nconst IProperty = {\r\n ...fieldProps,\r\n ...formProps,\r\n} as const;\r\n\r\nexport default IProperty;\r\n","import IProperty from '../constants/IProperty';\r\nimport { MessageNotification } from '../../../Notifications/MessageNotification';\r\nimport { TFieldAjaxEventResponsePayload } from '../types';\r\nimport { Field } from '../Field';\r\nimport { File, Grid, Select } from '../fields';\r\nimport { parseMessages } from '../../../../util/api/apiaApi';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { TApiaTreeProperties } from '../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type { Execution } from '../../index';\r\n\r\nexport const setAjaxFormResponse = async (\r\n execution: Execution,\r\n response: TFieldAjaxEventResponsePayload,\r\n) => {\r\n const forms = arrayOrArray(response.form);\r\n for (let i = 0; i < forms.length; i += 1) {\r\n const formId = forms[i].i;\r\n const form = forms[i];\r\n const [frmParent, id] = formId.split('_');\r\n const apiaForm = execution.getFormById(id, frmParent as 'E');\r\n\r\n arrayOrArray(form.cusCmp).forEach((c) => {\r\n apiaForm\r\n ?.getCustomComponentByFldId(Number.parseInt(String(c.id)))\r\n ?.processResult({ processResult: { state: c.state } });\r\n });\r\n\r\n /** Refresh the updated grids */\r\n const changedGrids = arrayOrArray(form.changedGrids.grdId);\r\n changedGrids.forEach(({ id }) => {\r\n (apiaForm?.getFieldById(id) as Grid)?.refresh();\r\n });\r\n\r\n if (!apiaForm) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: `Form with id ${formId} not found`,\r\n }),\r\n );\r\n\r\n continue;\r\n }\r\n\r\n // Iterate each field element in form element\r\n const ajaxFields = arrayOrArray(forms[i].field);\r\n for (let f = 0; f < ajaxFields.length; f += 1) {\r\n // got id of field to alter\r\n const apiField = apiaForm?.getFieldById(ajaxFields[f].i) as Field<any>;\r\n if (apiField) {\r\n // set field possible VALUES for select/multi and radio\r\n if (ajaxFields[f].possibleValues !== undefined) {\r\n const possibleValuesItems = arrayOrArray(\r\n ajaxFields[f].possibleValues,\r\n );\r\n const items = arrayOrArray(possibleValuesItems[0]?.item);\r\n if (items) {\r\n if (\r\n ['multiple', 'radio', 'select'].includes(\r\n apiField.definition.fieldType,\r\n )\r\n ) {\r\n (apiField as Select).setProperty(\r\n 'possibleValue',\r\n items.map((current) => {\r\n const v = current.v;\r\n const l = current.text;\r\n const value = typeof v === 'boolean' ? String(v) : v;\r\n const label = typeof l === 'boolean' ? String(l) : l;\r\n return {\r\n value,\r\n label,\r\n };\r\n }),\r\n );\r\n }\r\n }\r\n }\r\n if (\r\n ['tree'].includes(apiField.definition.fieldType) &&\r\n ajaxFields[f].field\r\n ) {\r\n const propertiesObj: TApiaTreeProperties =\r\n ajaxFields[f]?.field?.properties || ({} as TApiaTreeProperties);\r\n\r\n Object.keys(propertiesObj).forEach((key) => {\r\n let value = propertiesObj[key as keyof TApiaTreeProperties];\r\n\r\n if (typeof value === 'string') {\r\n const lowerValue = value.toLowerCase();\r\n if (lowerValue === 't' || lowerValue === 'true') {\r\n value = true;\r\n } else if (lowerValue === 'f' || lowerValue === 'false') {\r\n value = false;\r\n }\r\n }\r\n\r\n apiField.setProperty(key, value);\r\n });\r\n const possibleValues = arrayOrArray(\r\n ajaxFields[f]?.field?.possibleValue,\r\n );\r\n apiField.setProperty('possibleValue', possibleValues);\r\n }\r\n if (\r\n ['file'].includes(apiField.definition.fieldType) &&\r\n ajaxFields[f].field\r\n ) {\r\n const fileField = apiField as File;\r\n\r\n if (ajaxFields[f]?.field?.file_prp) {\r\n fileField.loadFromDefinition(\r\n ajaxFields[f]?.field?.file_prp as string,\r\n );\r\n }\r\n }\r\n }\r\n // set VALUE to fldId\r\n if (ajaxFields[f].c !== undefined) {\r\n const { c } = ajaxFields[f];\r\n\r\n let value: any = undefined;\r\n if (typeof c !== 'object' || (c as any).k !== 't') {\r\n // <c k=\"t\" Se usa para marcar campo sin cambios ??????\r\n if (typeof c === 'string') {\r\n value = c;\r\n } else {\r\n /**\r\n * Este procedimiento se usa para concatenar los distintos índices de textarea, editor, etc\r\n */\r\n const valuesArray = arrayOrArray(c?.valueAttr);\r\n value = valuesArray.reduce((reduced, current) => {\r\n return reduced + current.v;\r\n }, '');\r\n }\r\n }\r\n\r\n /**\r\n * Si ponemos que apiField es instanceof FieldWithAttribute generamos una dependencia\r\n * circular que rompe la compilación !!!\r\n */\r\n if ((apiField as any).attribute && value !== undefined) {\r\n (apiField as any).setValue(value, {\r\n force: true,\r\n synchronize: false,\r\n });\r\n }\r\n }\r\n // set PROPERTIES to fldId\r\n if (ajaxFields[f].e !== undefined) {\r\n const ajaxProps = arrayOrArray(ajaxFields[f].e);\r\n for (let c = 0; c < ajaxProps.length; c += 1) {\r\n if (ajaxProps[c]?.f) {\r\n const prop = arrayOrArray(ajaxProps[c]?.f);\r\n for (let p = 0; p < prop.length; p += 1) {\r\n if (prop[p]?.i) {\r\n if (prop[p]?.i) {\r\n if (prop[p]?.v.toLowerCase() === 'f') {\r\n apiField.setProperty(prop[p]?.i, false);\r\n } else if (prop[p]?.v.toLowerCase() === 't') {\r\n apiField.setProperty(prop[p]?.i, true);\r\n } else {\r\n apiField.setProperty(prop[p]?.i, prop[p]?.v);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Formulario invisible\r\n if (\r\n form.v === 't' &&\r\n String(apiaForm.properties[IProperty.PROPERTY_FORM_HIDDEN]) !== 'true'\r\n ) {\r\n apiaForm.setProperty(IProperty.PROPERTY_FORM_HIDDEN, true);\r\n } else if (\r\n form.v === 'f' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_HIDDEN)) === 'true'\r\n ) {\r\n apiaForm.setProperty(IProperty.PROPERTY_FORM_HIDDEN, false);\r\n }\r\n\r\n // Formulario cerrado\r\n if (\r\n form.c === 't' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_CLOSED)) !== 'true'\r\n ) {\r\n apiaForm.closeForm();\r\n } else if (\r\n form.c === 'f' &&\r\n String(apiaForm.getProperty(IProperty.PROPERTY_FORM_CLOSED)) === 'true'\r\n ) {\r\n apiaForm.openForm();\r\n }\r\n }\r\n\r\n if (response.proccess?.p) {\r\n execution.getProcess()?.setPriority(response.proccess.p);\r\n }\r\n\r\n if (response.data) {\r\n parseMessages(execution, response.data);\r\n }\r\n};\r\n","import type { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport type { FieldWithAttribute } from '../../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { IApiaField } from '../types';\r\nimport { Field } from '../../main/Execution/FormsExecution/Field';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TCreateNewField = (\r\n execution: Execution,\r\n field: Field | FieldWithAttribute | CustomComponent,\r\n) => IApiaField | null;\r\n\r\nexport type TAsyncCreateNewField = (\r\n execution: Execution,\r\n field: Field | FieldWithAttribute | CustomComponent,\r\n) => Promise<IApiaField | null>;\r\n\r\nlet creator: TCreateNewField | null = null;\r\n\r\nexport const asyncCreateNewField: TAsyncCreateNewField = async (\r\n execution,\r\n fld,\r\n) => {\r\n if (!creator) {\r\n creator = (await import('./createApiaField')).createNewField;\r\n }\r\n\r\n return creator(execution, fld);\r\n};\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { MakeApiaUrlProps } from '../../../util/api/apiaApi';\r\nimport { getLabel, labels } from '../../../util/labels/labels';\r\nimport type {\r\n TApiaFieldBaseDefinition,\r\n TFieldServerEvent,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport type { Form } from './Form';\r\nimport { WithProperties } from './WithProperties';\r\nimport { actions } from './constants/actions';\r\nimport { eventTypes } from './constants/eventTypes';\r\nimport { setAjaxFormResponse } from './events/setAjaxFormResponse';\r\nimport type {\r\n FieldValidationState,\r\n FireEventParameters,\r\n TFieldAjaxEventResponsePayload,\r\n} from './types';\r\nimport type { TApiaFieldCommonProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type { ApiaFunctions, IApiaField } from '../../../programming';\r\nimport { getCurrentTabsString } from '../../../util/app/getCurrentTabsString';\r\nimport { asyncCreateNewField } from '../../../programming/utils/asynCreateApiaField';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport type TFncParams = {\r\n type: 'V' | 'P' | 'E';\r\n value?: string;\r\n attId?: string | number;\r\n};\r\n\r\nlet af: ApiaFunctions | null = null;\r\n\r\nexport async function getApiaFunctions(execution: Execution) {\r\n if (!af) {\r\n await import('../../../programming/ApiaFunctions').then(\r\n ({ ApiaFunctions }) => (af = new ApiaFunctions(execution)),\r\n );\r\n }\r\n return af!;\r\n}\r\n\r\nexport abstract class Field<\r\n FieldProps extends TApiaFieldCommonProperties = TApiaFieldCommonProperties,\r\n FieldDefinition extends\r\n TApiaFieldBaseDefinition<FieldProps> = TApiaFieldBaseDefinition<FieldProps>,\r\n State extends {\r\n definition: Omit<FieldDefinition, 'properties'>;\r\n } = {\r\n definition: Omit<FieldDefinition, 'properties'>;\r\n },\r\n> extends WithProperties<FieldProps> {\r\n protected form: Form = {} as Form;\r\n\r\n definition: State['definition'];\r\n state: Omit<State, 'definition'> & {\r\n validation: FieldValidationState;\r\n } = {\r\n validation: { dirty: false, errorMessage: '', synchronizing: false },\r\n } as Omit<State, 'definition'> & {\r\n validation: FieldValidationState;\r\n };\r\n\r\n constructor({ properties, ...definition }: FieldDefinition) {\r\n super();\r\n\r\n this.properties = properties;\r\n this.definition = definition;\r\n\r\n makeObservable(this, { state: observable, definition: observable });\r\n }\r\n\r\n protected async getScriptEventParams(\r\n fncParams: TFncParams[],\r\n ): Promise<unknown[]> {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n (await getApiaFunctions(this.form.execution))\r\n .getForm(\r\n this.form.definition.formName,\r\n this.form.definition.frmParent,\r\n )!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n\r\n protected getServerEventParams(\r\n evtId: number,\r\n additionalParams?: Record<string, any>,\r\n ): MakeApiaUrlProps {\r\n let idx: any;\r\n if (getWindow(this.form.execution).IS_EDIT_GRID_MODAL) {\r\n idx = getWindow(this.form.execution).MODAL_INDEX;\r\n } else {\r\n idx = this.definition?.index || 0;\r\n }\r\n return {\r\n ajaxUrl: actions.forms,\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n action: 'fireFieldEvent',\r\n frmParent: this.form.definition.frmParent,\r\n frmId: this.form.definition.id,\r\n fldId: this.definition.id,\r\n index: idx,\r\n evtId,\r\n nuevo: true,\r\n preventAsXmlParameter: true,\r\n ...additionalParams,\r\n };\r\n }\r\n\r\n protected async fireScriptEvent(eventName: string): Promise<boolean> {\r\n const events = (this.definition.scriptEvents || []).filter(\r\n (c) => c.evtName === eventName,\r\n );\r\n\r\n let result = true;\r\n\r\n if (events.length > 0) {\r\n for (const event of events) {\r\n try {\r\n const fn = (window as any)[event.fncName] as (\r\n src: IApiaField,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n\r\n if (fn === undefined) {\r\n new MessageNotification({\r\n message: getLabel(this.form.execution, 'msgFunction404', {\r\n text: { TOK1: eventName },\r\n }).text,\r\n type: 'error',\r\n });\r\n throw new Error(\r\n getLabel(this.form.execution, 'msgFunction404', {\r\n text: { TOK1: eventName },\r\n }).text,\r\n );\r\n }\r\n\r\n const evtSrc = (await asyncCreateNewField(\r\n this.form.execution,\r\n this,\r\n ))!;\r\n\r\n if ((evtSrc as any).setValue) {\r\n (evtSrc as any).setValue = (value: any) =>\r\n (evtSrc as any)._setValue(value, { fireEvents: false });\r\n }\r\n\r\n result = await fn(\r\n evtSrc,\r\n ...(await this.getScriptEventParams(event.fncParams)),\r\n );\r\n\r\n if (result === false) {\r\n break;\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message:\r\n labels.errorOnEvent(this.form.execution, event.fncName) +\r\n ', ' +\r\n e,\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n protected async fireAjaxServerEvent(\r\n event: TFieldServerEvent,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n try {\r\n const response = await post<TFieldAjaxEventResponsePayload>(\r\n this.form.execution,\r\n await makeApiaUrl(\r\n this.form.execution,\r\n this.getServerEventParams(event.evtId, {\r\n isAjax: true,\r\n }),\r\n ),\r\n {\r\n postData: params,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n\r\n if (response?.data?.success) {\r\n await setAjaxFormResponse(this.form.execution, response.data);\r\n return true;\r\n }\r\n } catch (rejectedValue) {\r\n console.error(rejectedValue);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message: String(rejectedValue),\r\n }),\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n protected async fireNoAjaxServerEvent(\r\n event: TFieldServerEvent,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n const p = this.getServerEventParams(event.evtId, params);\r\n if (\r\n (getWindow(this.form.execution).config as any).execution\r\n .reloadOnNoAjaxEvents\r\n ) {\r\n getWindow(this.form.execution).location.assign(\r\n await makeApiaUrl(this.form.execution, {\r\n ...p,\r\n currentTab: getCurrentTabsString(this.form.execution),\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n }),\r\n );\r\n } else {\r\n getWindow(this.form.execution).location.assign(\r\n await makeApiaUrl(this.form.execution, {\r\n ...p,\r\n currentTab: getCurrentTabsString(this.form.execution),\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n }),\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n protected async fireServerEvent(\r\n eventName: string,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n let event = this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName,\r\n );\r\n const hasBinding = this.definition.entityBind;\r\n if (!event && hasBinding) {\r\n event = {\r\n evtId: eventTypes.EVENT_FLD_ONCHANGE,\r\n isAjax: true,\r\n evtName: 'onChange',\r\n };\r\n }\r\n\r\n if (event) {\r\n const isAjax = event.isAjax;\r\n\r\n if (isAjax) {\r\n return this.fireAjaxServerEvent(event, params);\r\n } else {\r\n return this.fireNoAjaxServerEvent(event, params);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n async fireEvent(\r\n eventName: string,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n const unlock = this.form.execution.lock();\r\n\r\n try {\r\n let result = await this.fireScriptEvent(eventName);\r\n if (result) {\r\n try {\r\n await this.form.execution.waitForPendingSyncs();\r\n } catch (e) {\r\n console.warn('waitForPendingSyncs failed or timed out', e);\r\n }\r\n\r\n result = await this.fireServerEvent(eventName, params);\r\n }\r\n\r\n return result;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n\r\n getForm() {\r\n return this.form;\r\n }\r\n\r\n protected hasEventsOfType(eventName: string) {\r\n return (\r\n this.definition.serverEvents?.find((c) => c.evtName === eventName) ||\r\n this.definition.scriptEvents?.find((c) => c.evtName === eventName)\r\n );\r\n }\r\n\r\n protected hasServerAjaxEventsOfType(eventName: string) {\r\n return this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName && c.isAjax,\r\n );\r\n }\r\n\r\n protected hasServerNoAjaxEventsOfType(eventName: string) {\r\n return this.definition.serverEvents?.find(\r\n (c) => c.evtName === eventName && !c.isAjax,\r\n );\r\n }\r\n\r\n #hasInited = false;\r\n async init(form: Form) {\r\n if (this.#hasInited) throw new Error('Cannot init field twice');\r\n this.#hasInited = true;\r\n this.form = form;\r\n }\r\n public async validate(): Promise<boolean | Field> {\r\n return true;\r\n }\r\n\r\n markAsRendered() {\r\n this.getForm().markFieldAsRendered(\r\n this.definition.id,\r\n this.definition.index,\r\n );\r\n }\r\n}\r\n","import { TApiaButtonProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport type ButtonEvents = 'onClick';\r\n\r\nexport class Button extends Field<TApiaButtonProperties> {\r\n fireEvent(eventName: ButtonEvents): Promise<boolean> {\r\n return super.fireEvent(eventName);\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\nimport { TApiaCaptchaProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nimport { Field } from '../../Field';\r\nimport { Form } from '../../Form';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaCaptchaDefinition } from '../../../../InitialData/types/fields/TApiaCaptchaDefinition';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\n\r\nexport class Captcha extends Field<\r\n TApiaCaptchaProperties,\r\n TApiaCaptchaDefinition,\r\n {\r\n definition: Omit<TApiaCaptchaDefinition, 'properties'>;\r\n value: string;\r\n url: string;\r\n }\r\n> {\r\n private static emitter = new EventEmitter<{ confirm: null }>();\r\n public static reload() {\r\n this.emitter.emit('confirm', null);\r\n }\r\n\r\n private id: string = '';\r\n\r\n private static confirmParams: Record<string, string> = {};\r\n public static getConfirmParams() {\r\n return this.confirmParams;\r\n }\r\n\r\n constructor(definition: TApiaCaptchaProperties) {\r\n super(definition as TApiaCaptchaDefinition);\r\n this.state.value = '';\r\n this.properties.name = '__captcha__';\r\n\r\n Captcha.emitter.on('confirm', () => {\r\n this.generateImgUrl();\r\n });\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n this.id = this.getCaptchaId();\r\n this.generateImgUrl();\r\n }\r\n\r\n private getCaptchaId() {\r\n return `${getWindow(this.form.execution).TAB_ID}${this.form.definition.frmParent}_${this.form.definition.id}`;\r\n }\r\n public getUrl() {\r\n return this.state.url;\r\n }\r\n\r\n public generateImgUrl() {\r\n this.state.url = `${getWindow(this.form.execution).CONTEXT}/captchaImg?captchaName=${this.getId()}&t=${new Date().getTime()}`;\r\n }\r\n\r\n public generateVoiceUrl() {\r\n return `${getWindow(this.form.execution).CONTEXT}/captchaAudio?captchaName=${this.getId()}&t=${new Date().getTime()}&langCode=${getWindow(this.form.execution).LANG_CODE}`;\r\n }\r\n\r\n public getId() {\r\n return this.id;\r\n }\r\n\r\n public setValue(value: string) {\r\n this.state.value = value;\r\n this.state.validation.errorMessage = '';\r\n Captcha.confirmParams = { [this.id]: value };\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n this.id = this.getCaptchaId();\r\n if (this.state.value === '' && !this.getForm().definition.readOnly) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n } else {\r\n this.state.validation.errorMessage = '';\r\n return true;\r\n }\r\n }\r\n}\r\n","export type RetryConfiguration = {\r\n retries: number;\r\n timeout: number;\r\n};\r\n\r\nexport class TooMuchRetriesException extends Error {}\r\n\r\nfunction timeout(ms: number) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\n/**\r\n * Ejecuta el callback provisto y verifica el resultado contra el método checkSuccess. En caso de que checkSuccess devuelva false, reintenta en el timeout especificado, siempre que las restricciones de configuration.retries lo permita.\r\n *\r\n * En caso de fallar demasiadas veces, eleva una excepción de tipo TooMuchRetriesException\r\n *\r\n */\r\nexport async function asyncRetry<ReturnType>(\r\n cb: () => Promise<ReturnType>,\r\n checkSuccess: (value: ReturnType) => boolean,\r\n configuration: RetryConfiguration = {\r\n retries: 3,\r\n timeout: 300,\r\n },\r\n): Promise<ReturnType> {\r\n return new Promise<ReturnType>((resolve, reject) => {\r\n (async () => {\r\n const tryIt = async () => {\r\n const res = await cb();\r\n return checkSuccess(res) ? res : null;\r\n };\r\n\r\n for await (const _ of new Array(configuration.retries)) {\r\n const res = await tryIt();\r\n if (res) {\r\n resolve(res);\r\n return;\r\n }\r\n await timeout(configuration.timeout);\r\n }\r\n\r\n reject(new TooMuchRetriesException());\r\n })();\r\n });\r\n}\r\n","export type Comparator<T> = (a: T, b: T) => boolean;\r\n\r\nexport const shallowEqual: Comparator<any> = (a: any, b: any) => {\r\n if (Object.is(a, b)) return true;\r\n\r\n if (!Object.is(a, b) && typeof a !== typeof b) {\r\n return false;\r\n }\r\n\r\n if (typeof a === 'object') {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.length; i++) {\r\n if (!Object.is(a[i], b[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (a && b) {\r\n for (const [key, value] of Object.entries(a)) {\r\n if (!Object.is(value, b[key])) {\r\n return false;\r\n }\r\n }\r\n for (const [key, value] of Object.entries(b)) {\r\n if (!Object.is(value, a[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if ((a && !b) || (!a && b)) {\r\n return false;\r\n }\r\n }\r\n\r\n return a === b;\r\n};\r\n","import { isTrue } from '@apia/util';\r\nimport type { FieldWithAttribute } from '../FieldWithAttribute';\r\n\r\nexport function isFieldShowAsText(\r\n f: Pick<FieldWithAttribute<any, any, any>, 'properties' | 'getForm'>,\r\n): boolean {\r\n return (\r\n isTrue(f.properties.disabled) ||\r\n isTrue(f.getForm().definition.readonly) ||\r\n isTrue(f.getForm().definition.readOnly) ||\r\n isTrue(f.properties.inputAsText)\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { FieldWithAttributeState, SetValueOptions } from './types';\r\nimport { Field } from './Field';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { IApiaApiPostConfig } from '../../../util/api/types';\r\nimport { labels } from '../../../util/labels/labels';\r\nimport {\r\n TooMuchRetriesException,\r\n asyncRetry,\r\n} from '../../../util/other/asyncRetry';\r\nimport {\r\n TApiaFieldValueType,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { actions } from './constants/actions';\r\nimport { shallowEqual } from '../../../util/comparators/shallowEqual';\r\nimport { TApiaFieldWithAttributeProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { MakeApiaUrlProps } from '../../../util/api/apiaApi';\r\nimport { Form } from './Form';\r\nimport { isFieldShowAsText } from './util/isFieldShowAsText';\r\nexport type TFireEventOptions = {\r\n force?: boolean;\r\n};\r\n\r\nexport class Attribute {\r\n constructor(\r\n public readonly id: string,\r\n public readonly name: string,\r\n public readonly title: string,\r\n public readonly valueType: TApiaFieldValueType,\r\n ) {}\r\n}\r\n\r\nexport abstract class FieldWithAttribute<\r\n FieldProps extends\r\n TApiaFieldWithAttributeProperties = TApiaFieldWithAttributeProperties,\r\n ValueType = any,\r\n FieldDefinition extends\r\n TApiaFieldWithAttributeBaseProps<FieldProps> = TApiaFieldWithAttributeBaseProps<FieldProps>,\r\n> extends Field<\r\n FieldProps,\r\n FieldDefinition,\r\n FieldWithAttributeState<FieldDefinition, FieldProps, ValueType>\r\n> {\r\n #lastOnChangeValue: ValueType | null = null;\r\n protected lastSynchronizationValue: ValueType | null = null;\r\n\r\n public readonly attribute: Attribute;\r\n\r\n constructor({\r\n attId,\r\n attName,\r\n attLabel,\r\n valueType,\r\n value,\r\n ...definition\r\n }: TApiaFieldWithAttributeBaseProps<FieldProps>) {\r\n super(definition as FieldDefinition);\r\n\r\n this.attribute = new Attribute(attId, attName, attLabel, valueType);\r\n\r\n this.state.value = value;\r\n\r\n this.state.validation = {\r\n dirty: false,\r\n errorMessage: null,\r\n synchronizing: false,\r\n };\r\n\r\n makeObservable(this, {\r\n attribute: observable,\r\n });\r\n }\r\n\r\n async fireEvent(\r\n eventName: string,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n if (this.getValidationState().dirty) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n if (eventName === 'onChange') {\r\n if (this.getValue() === this.#lastOnChangeValue && !options?.force) {\r\n return true;\r\n } else {\r\n const res = await super.fireEvent(eventName);\r\n if (res) {\r\n this.#lastOnChangeValue = this.getValue();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return super.fireEvent(eventName);\r\n }\r\n protected async getInitialValue({\r\n value,\r\n }: TApiaFieldWithAttributeBaseProps<FieldProps>): Promise<ValueType> {\r\n return value;\r\n }\r\n public getValidationState() {\r\n return this.state.validation;\r\n }\r\n public getValue() {\r\n return this.state.value;\r\n }\r\n protected canSetValue(newValue: ValueType): boolean {\r\n return isFieldShowAsText(this) || shallowEqual(newValue, this.getValue());\r\n }\r\n public setValue(newValue: ValueType, options?: SetValueOptions) {\r\n if (\r\n !options?.force &&\r\n (isFieldShowAsText(this) || shallowEqual(newValue, this.getValue()))\r\n )\r\n return Promise.resolve(true);\r\n\r\n this.state.value = newValue;\r\n this.state.validation.errorMessage = null;\r\n\r\n if (options?.synchronize === false) {\r\n this.lastSynchronizationValue = newValue;\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.synchronize(newValue).then((res) => {\r\n if (res) {\r\n if (options?.markAsDirty !== false) {\r\n this.form.execution.state.hasChangedAnything = true;\r\n }\r\n if (options?.fireEvents !== false) {\r\n return this.fireEvent('onChange', { force: options?.force });\r\n }\r\n return true;\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: ValueType,\r\n ): IApiaApiPostConfig<any> {\r\n return {\r\n postData: {\r\n value,\r\n },\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n };\r\n }\r\n protected getSynchronizeUrl(params?: Record<string, unknown>) {\r\n return makeApiaUrl(this.form.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'processFieldSubmit',\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n attId: this.attribute.id,\r\n index: this.definition.multIdx ?? this.definition.index ?? 0,\r\n timestamp: Date.now(),\r\n isAjax: true,\r\n ...params,\r\n });\r\n }\r\n protected processSynchronizeError(e: unknown) {\r\n if (e instanceof TooMuchRetriesException) {\r\n this.state.validation.dirty = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n protected async synchronize(newValue: ValueType) {\r\n if (newValue === this.lastSynchronizationValue) return true;\r\n\r\n const syncPromise = (async () => {\r\n try {\r\n const postData = this.getSynchronizePostConfiguration(newValue);\r\n const response = await asyncRetry(\r\n async () => {\r\n try {\r\n const res = await post<{ success: boolean }>(\r\n this.form.execution,\r\n await this.getSynchronizeUrl(),\r\n postData,\r\n );\r\n return res;\r\n } catch (e) {\r\n this.form.execution.notifications.add(\r\n new MessageNotification({ message: String(e) }),\r\n );\r\n return null;\r\n }\r\n },\r\n (result) => {\r\n const success = !!result?.data?.success;\r\n return success;\r\n },\r\n { retries: 10, timeout: 500 },\r\n );\r\n\r\n const result = response?.data?.success || false;\r\n\r\n if (result) {\r\n this.lastSynchronizationValue = newValue;\r\n this.state.validation.dirty = false;\r\n return true;\r\n }\r\n } catch (e) {\r\n console.error('synchronize error:', e);\r\n this.processSynchronizeError(e);\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n try {\r\n this.form.execution.addPendingPromise(syncPromise);\r\n } catch {\r\n //\r\n }\r\n\r\n // esperamos el resultado real de la sincronización\r\n return await syncPromise;\r\n }\r\n\r\n protected hasValue() {\r\n return this.getValue() !== '';\r\n }\r\n\r\n protected isValidValue() {\r\n return !!this.getValue();\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.dirty) {\r\n if (!(await this.synchronize(this.state.value))) {\r\n this.state.validation.errorMessage = labels.errorCouldNotSync();\r\n return false;\r\n }\r\n }\r\n\r\n const isValid =\r\n isFieldShowAsText(this) ||\r\n this.isValidValue() ||\r\n !this.properties.required ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n this.state.validation.errorMessage = isValid\r\n ? null\r\n : labels.errorFieldRequired(this.form.execution);\r\n\r\n return !this.state.validation.errorMessage;\r\n }\r\n\r\n public setError(err: string) {\r\n this.state.validation.errorMessage = err;\r\n }\r\n\r\n protected getServerEventParams(\r\n evtId: number,\r\n additionalParams?: Record<string, any>,\r\n ): MakeApiaUrlProps {\r\n return {\r\n ...super.getServerEventParams(evtId, additionalParams),\r\n attId: this.attribute.id,\r\n };\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n const initialValue = await this.getInitialValue({\r\n ...this.definition,\r\n properties: this.properties,\r\n attId: this.attribute.id,\r\n attName: this.attribute.name,\r\n attLabel: this.attribute.title,\r\n valueType: this.attribute.valueType,\r\n value: this.state.value,\r\n });\r\n\r\n this.state.value = initialValue ?? ('' as ValueType);\r\n }\r\n}\r\n","import { toBoolean } from '@apia/util';\r\nimport { TApiaCheckboxProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaFieldWithAttributeBaseProps } from '../../../../InitialData/types/TApiaField';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\n\r\ntype CheckboxEvents = 'onClick';\r\n\r\nexport class Checkbox extends FieldWithAttribute<\r\n TApiaCheckboxProperties,\r\n boolean\r\n> {\r\n fireEvent(\r\n eventName: CheckboxEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected getInitialValue({\r\n value,\r\n }: TApiaFieldWithAttributeBaseProps<TApiaCheckboxProperties>): Promise<boolean> {\r\n if (value === '' || value === undefined) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n return Promise.resolve(toBoolean(value));\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { TTranslationState } from './types';\r\nimport { post } from '../../../../util';\r\nimport type { Execution } from '../..';\r\n\r\nexport class Translation {\r\n state: TTranslationState;\r\n\r\n constructor(\r\n public execution: Execution,\r\n state: Pick<TTranslationState, 'id' | 'label' | 'isTranslated'>,\r\n ) {\r\n this.state = {\r\n ...state,\r\n hasChanged: false,\r\n isTranslated: state.isTranslated,\r\n tempValue: '',\r\n };\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n cancelTranslation() {\r\n this.reset();\r\n }\r\n\r\n async readTranslations(url: string) {\r\n if (this.state.remoteValue === undefined) {\r\n const result = await post<{ values: { value: string } }>(\r\n this.execution,\r\n url,\r\n { avoidNormalize: true, avoidTrimXml: true },\r\n );\r\n\r\n const newValue = result?.data?.values?.value;\r\n this.state.tempValue =\r\n newValue !== 'null' ? (result?.data?.values?.value ?? '') : '';\r\n this.state.remoteValue = this.state.tempValue;\r\n }\r\n }\r\n\r\n reset() {\r\n delete this.state.remoteValue;\r\n this.state.tempValue = '';\r\n this.state.hasChanged = false;\r\n }\r\n\r\n deleteTranslation() {\r\n delete this.state.remoteValue;\r\n this.state.tempValue = '';\r\n this.state.hasChanged = false;\r\n this.state.isTranslated = false;\r\n }\r\n\r\n setTempValue(str: string) {\r\n this.state.tempValue = str;\r\n this.state.hasChanged = str !== this.state.remoteValue;\r\n }\r\n\r\n submitTranslation(value: string, url: string) {\r\n if (this.state.hasChanged) {\r\n post(this.execution, url, {\r\n postData: { value },\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n postDataTreatment: 'stringify',\r\n });\r\n }\r\n\r\n this.state.isTranslated = this.value !== '';\r\n this.reset();\r\n }\r\n\r\n get langId() {\r\n return this.state.id;\r\n }\r\n\r\n get value() {\r\n return this.state.tempValue;\r\n }\r\n}\r\n","export function parseFakeJSON(fakeJSON: string) {\r\n return [...fakeJSON.matchAll(/(\\d+): '?([^']+)'?/g)].map(([, k, v]) => ({\r\n id: k,\r\n label: v,\r\n }));\r\n}\r\n","import { TApiaFieldWithAttributeBaseProps } from '../../../InitialData/types/TApiaField';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Form } from '../Form';\r\nimport { TApiaTranslatableFieldProperties } from '../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { makeApiaUrl } from '../../../../util';\r\nimport { Translation } from './Translation';\r\nimport { parseFakeJSON } from './util';\r\nimport { FieldWithAttribute } from '../FieldWithAttribute';\r\nimport { labels } from '../../../../util/labels/labels';\r\nimport { Comparator } from '../../../../util/comparators/shallowEqual';\r\n\r\ninterface InitialTradMap {\r\n [key: string]: boolean;\r\n}\r\n\r\nexport abstract class TranslatableField<\r\n FieldProps extends\r\n TApiaTranslatableFieldProperties = TApiaTranslatableFieldProperties,\r\n ValueType = any,\r\n FieldDefinition extends\r\n TApiaFieldWithAttributeBaseProps<FieldProps> = TApiaFieldWithAttributeBaseProps<FieldProps>,\r\n> extends FieldWithAttribute<FieldProps, ValueType, FieldDefinition> {\r\n translations = new Map<string, Translation>();\r\n selectedLanguageId = this.getLanguages()[0]?.id;\r\n isTradLoading = false;\r\n definitionTradParsed: InitialTradMap = {};\r\n\r\n constructor(props: TApiaFieldWithAttributeBaseProps<FieldProps>) {\r\n super(props);\r\n makeObservable(this, {\r\n translations: observable,\r\n selectedLanguageId: observable,\r\n isTradLoading: observable,\r\n });\r\n }\r\n\r\n private extractTrad() {\r\n const tradMap: InitialTradMap = {};\r\n const regex = /(\\d+)\\s*:\\s*(true|false)/g;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = regex.exec(this.definition.trad ?? '{}')) !== null) {\r\n const key = match[1];\r\n const value = match[2] === 'true';\r\n tradMap[key] = value;\r\n }\r\n\r\n this.definitionTradParsed = tradMap;\r\n }\r\n\r\n private getLanguages() {\r\n return arrayOrArray(parseFakeJSON(this.getForm().definition?.langs ?? ''));\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n if (this.getLanguages().length > 0) {\r\n this.extractTrad();\r\n this.getLanguages().forEach((lang) => {\r\n const isTranslated = this.definitionTradParsed[lang.id] ?? false;\r\n this.translations.set(\r\n lang.id,\r\n new Translation(this.form.execution, {\r\n id: lang.id,\r\n label: lang.label,\r\n isTranslated: isTranslated,\r\n }),\r\n );\r\n });\r\n\r\n this.selectedLanguageId = this.getLanguages()[0].id;\r\n }\r\n }\r\n\r\n public cancelTranslations() {\r\n this.getTranslations().forEach((c) => {\r\n c.reset();\r\n });\r\n }\r\n\r\n public deleteTranslations() {\r\n this.getTranslations().forEach((c) => {\r\n c.deleteTranslation();\r\n });\r\n }\r\n\r\n public async changeLanguage(langId: string) {\r\n this.selectedLanguageId = langId;\r\n this.syncTranslation();\r\n }\r\n\r\n public getTranslation(id: string) {\r\n return this.translations.get(id);\r\n }\r\n\r\n public getCurrentTranslation() {\r\n return this.translations.get(this.selectedLanguageId);\r\n }\r\n\r\n public getTranslations() {\r\n return this.translations;\r\n }\r\n\r\n public submitTranslations() {\r\n [...this.getTranslations().values()]\r\n .filter((c) => c.state.hasChanged)\r\n .forEach((c) => {\r\n c.submitTranslation(\r\n c.value,\r\n this.getSynchronizeUrl({\r\n react: true,\r\n preventAsXmlParameter: true,\r\n langId: c.langId,\r\n }),\r\n );\r\n });\r\n this.state.validation.errorMessage = null;\r\n }\r\n\r\n public async syncTranslation() {\r\n const langId = this.selectedLanguageId;\r\n this.isTradLoading = true;\r\n\r\n await this.getTranslation(langId)?.readTranslations(\r\n await makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n action: 'getFieldTranslations',\r\n frmId: this.getForm().definition.id,\r\n frmParent: this.getForm().definition.frmParent,\r\n fldId: this.definition.id,\r\n attId: this.attribute.id,\r\n langId,\r\n react: true,\r\n }),\r\n );\r\n\r\n this.isTradLoading = false;\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n const isSuperValid = await super.validate();\r\n let isValid = isSuperValid;\r\n const canValidate =\r\n isSuperValid &&\r\n this.properties.reqTrad &&\r\n this.hasValue() &&\r\n (!this.properties.inputAsText ||\r\n !this.properties.visibilityHidden ||\r\n !this.properties.disabled);\r\n\r\n if (canValidate) {\r\n const translations = [...this.getTranslations().values()];\r\n\r\n const tradNotValidated = translations.find((c) => !c.state.isTranslated);\r\n\r\n if (tradNotValidated) {\r\n this.state.validation.errorMessage = labels.errorTranslateRequired(\r\n this.form.execution,\r\n tradNotValidated.state.label,\r\n );\r\n isValid = false;\r\n } else {\r\n this.state.validation.errorMessage = null;\r\n }\r\n }\r\n return isValid;\r\n }\r\n public setValue(\r\n newValue: ValueType,\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n if (newValue === '') {\r\n this.deleteTranslations();\r\n }\r\n return super.setValue(newValue, options);\r\n }\r\n}\r\n","import { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { TApiaEditorProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TFireEventOptions } from '../../FieldWithAttribute';\r\nimport { TranslatableField } from '../../TranslatableField';\r\n\r\nexport type EditorEvents = 'onChange';\r\n\r\nexport class Editor extends TranslatableField<TApiaEditorProperties, string> {\r\n fireEvent(\r\n eventName: EditorEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected isValidValue(): boolean {\r\n return !!new DOMParser().parseFromString(this.getValue(), 'text/html')\r\n .documentElement.textContent;\r\n }\r\n protected getSynchronizePostConfiguration(\r\n value: string,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n conf.postData!.clearValues = 'true';\r\n return conf;\r\n }\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { UploaderApi } from './UploaderApi';\r\nimport {\r\n IPoolsPermissions,\r\n IUsersPermissions,\r\n TApiaDocumentDefinition,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n TUploadModalOpener,\r\n UploaderModalState,\r\n} from './types';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\nimport { getLabel } from '../../../util';\r\n\r\nfunction getFileExtension(fileName: string): string {\r\n const parts = fileName.split('.');\r\n return parts.length > 1 ? parts.pop()!.toLowerCase() : '';\r\n}\r\n\r\nconst getInitialState: (\r\n execution: Execution,\r\n) => Readonly<UploaderModalState> = (execution: Execution) =>\r\n Object.freeze({\r\n metadata: {\r\n metadataArray: [],\r\n freeMetadataArray: [],\r\n isFreeMetadata: false,\r\n },\r\n fromDirectoryFile: null,\r\n docFolder: undefined,\r\n docPath: undefined,\r\n docExpDate: undefined,\r\n description: '',\r\n isReadonly: false,\r\n permissions: {\r\n pools: [],\r\n users: getWindow(execution).DOCUMENT_OWNER_PRIVILEGES\r\n ? [\r\n {\r\n canUpdate: true,\r\n userId: getWindow(execution).CURRENT_USER_LOGIN,\r\n userLogin: getWindow(execution).CURRENT_USER_LOGIN,\r\n },\r\n ]\r\n : [],\r\n allowAllType: ((getWindow(execution)\r\n .DOCUMENT_EVERYONE_PERMISSION as any as boolean) !== false\r\n ? 'M'\r\n : '') as '',\r\n },\r\n fileReqError: false,\r\n });\r\n\r\nexport class UploaderModalController {\r\n public state: UploaderModalState;\r\n\r\n constructor(\r\n public api: UploaderApi,\r\n public modalConfig: TModalConfig,\r\n public conf?: {\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n versionFile?: TUploaderFileInfo;\r\n },\r\n ) {\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n\r\n this.state = getInitialState(api.execution);\r\n }\r\n\r\n public get allMetadata() {\r\n return [\r\n ...this.state.metadata.metadataArray,\r\n ...this.state.metadata.freeMetadataArray,\r\n ];\r\n }\r\n\r\n public get allowAllType() {\r\n return this.state.permissions.allowAllType;\r\n }\r\n\r\n public get description() {\r\n return this.state.description;\r\n }\r\n\r\n public get docFolder() {\r\n return this.state.docFolder;\r\n }\r\n\r\n public get docExpDate() {\r\n return this.state.docExpDate;\r\n }\r\n\r\n public get docTypes() {\r\n return this.api.getDocTypes();\r\n }\r\n\r\n public get freeMetadata() {\r\n return this.state.metadata.freeMetadataArray;\r\n }\r\n\r\n public get exitingFiles() {\r\n return this.api.getExistingFiles();\r\n }\r\n\r\n public get inProgressFiles() {\r\n return this.api.getInProgressFiles();\r\n }\r\n\r\n public get hiddenFiles() {\r\n return this.api.getHiddenFiles();\r\n }\r\n\r\n public get progress() {\r\n return this.api.getProgress();\r\n }\r\n\r\n public get metadata() {\r\n return this.state.metadata.metadataArray;\r\n }\r\n\r\n public get selectedDocTypeId() {\r\n return this.api.getCurrentDocTypeId();\r\n }\r\n\r\n public get selectedDocType() {\r\n return this.api.getCurrentDocType();\r\n }\r\n\r\n public addMetadata() {\r\n this.state.metadata.freeMetadataArray.push({\r\n free: 'Y',\r\n id: String(Math.random()),\r\n name: '',\r\n required: 'Y',\r\n title: '',\r\n type: 'S',\r\n value: '',\r\n errorMessage: '',\r\n labelErrorMessage: '',\r\n });\r\n }\r\n\r\n public addFiles(files: File[]) {\r\n this.state.fileReqError = false;\r\n this.state.isReadonly = false;\r\n this.api.saveDroppedFiles(files, this.conf);\r\n }\r\n\r\n public addDirectoryFile(file: TApiaDocumentDefinition) {\r\n this.state.fileReqError = false;\r\n this.api.state.inProgressFiles = [];\r\n this.state.fromDirectoryFile = file;\r\n }\r\n public async changeDocType(docTypeId: string) {\r\n this.resetMetadata();\r\n this.api.setCurrentDocTypeId(docTypeId);\r\n this.onChangeExtension();\r\n this.api.reloadMetadata({ docTypeId });\r\n }\r\n\r\n public clearDirectoryFile() {\r\n this.state.fromDirectoryFile = null;\r\n this.state.isReadonly = false;\r\n }\r\n\r\n public clearFile(name: string) {\r\n this.api.clearFile(name);\r\n }\r\n\r\n public clearFiles() {\r\n this.api.clearFiles();\r\n }\r\n\r\n public clearState() {\r\n this.state = getInitialState(this.api.execution);\r\n this.api.clearState();\r\n }\r\n\r\n public clearPartialState() {\r\n if (this.api.state.inProgressFiles.length === 0) {\r\n this.state = getInitialState(this.api.execution);\r\n }\r\n }\r\n\r\n public onCloseModal() {\r\n this.clearState();\r\n }\r\n\r\n public async confirm() {\r\n let isValid = this.validate();\r\n if (isValid) isValid = await this.api.confirmDropModal(this.conf);\r\n return isValid;\r\n }\r\n\r\n public deleteMetadata(indices: number[]) {\r\n const deleteSet = new Set(indices);\r\n const offset = this.state.metadata.metadataArray.length;\r\n\r\n this.state.metadata.freeMetadataArray =\r\n this.state.metadata.freeMetadataArray.filter(\r\n (_, localIndex) =>\r\n // conservamos sólo los que NO estén en deleteSet\r\n !deleteSet.has(localIndex + offset),\r\n );\r\n }\r\n\r\n public deletePermission(item: IPoolsPermissions | IUsersPermissions) {\r\n if (item && 'userId' in item) {\r\n this.state.permissions.users = this.state.permissions.users.filter(\r\n (c) => c.userId !== item.userId,\r\n );\r\n } else {\r\n this.state.permissions.pools = this.state.permissions.pools.filter(\r\n (c) => c.poolId !== item.poolId,\r\n );\r\n }\r\n }\r\n\r\n protected onChangeExtension(): void {\r\n const rawDocExts = this.api.getCurrentDocType()?.docExts || '';\r\n let hideFileNames = '';\r\n const allowedExtensions = rawDocExts\r\n .split(';')\r\n .map((ext) => ext.trim())\r\n .filter((ext) => ext !== '');\r\n\r\n if (rawDocExts === '') {\r\n const allFiles = [...this.inProgressFiles, ...this.hiddenFiles];\r\n const dedupedFiles = Array.from(\r\n new Map(allFiles.map((file: File) => [file.name, file])).values(),\r\n );\r\n this.api.state.inProgressFiles = dedupedFiles;\r\n this.api.state.hiddenFiles = [];\r\n return;\r\n }\r\n\r\n const allowedInProgress: File[] = [];\r\n const toHide: File[] = [];\r\n this.inProgressFiles.forEach((file: File) => {\r\n const ext = getFileExtension(file.name);\r\n if (allowedExtensions.includes(ext)) {\r\n allowedInProgress.push(file);\r\n } else {\r\n toHide.push(file);\r\n hideFileNames += ` ${file.name} `;\r\n }\r\n });\r\n\r\n const allowedHidden: File[] = [];\r\n const stillHidden: File[] = [];\r\n this.api.state.hiddenFiles.forEach((file: File) => {\r\n const ext = getFileExtension(file.name);\r\n if (allowedExtensions.includes(ext)) {\r\n allowedHidden.push(file);\r\n } else {\r\n stillHidden.push(file);\r\n }\r\n });\r\n\r\n const combinedInProgress = [...allowedInProgress, ...allowedHidden];\r\n const dedupedInProgress = Array.from(\r\n new Map(\r\n combinedInProgress.map((file: File) => [file.name, file]),\r\n ).values(),\r\n );\r\n const combinedHidden = [...toHide, ...stillHidden];\r\n const dedupedHidden = Array.from(\r\n new Map(combinedHidden.map((file: File) => [file.name, file])).values(),\r\n );\r\n\r\n this.api.state.inProgressFiles = dedupedInProgress;\r\n this.api.state.hiddenFiles = dedupedHidden;\r\n if (hideFileNames)\r\n this.api.notify({\r\n title: getLabel(this.api.execution, 'msgFileWrngExt').text,\r\n message: hideFileNames,\r\n type: 'warning',\r\n });\r\n }\r\n\r\n public async openModal() {\r\n const a = 'openUploaderModal';\r\n import(\r\n /* webpackInclude: /\\.tsx?$/ */\r\n `/src/static/files/${a}`\r\n ).then((r) => {\r\n (r as { default: TUploadModalOpener }).default(this);\r\n });\r\n }\r\n\r\n public setDescription(desc: string) {\r\n this.state.description = desc;\r\n }\r\n\r\n protected async resetMetadata() {\r\n this.state.metadata = {\r\n freeMetadataArray: [],\r\n metadataArray: [],\r\n isFreeMetadata: false,\r\n };\r\n }\r\n\r\n public validate(): boolean {\r\n let isValid = true;\r\n this.state.fileReqError = false;\r\n if (\r\n this.api.getInProgressFiles().length === 0 &&\r\n !this.state.fromDirectoryFile\r\n ) {\r\n this.state.fileReqError = true;\r\n isValid = false;\r\n }\r\n\r\n this.allMetadata.forEach((c) => {\r\n if (c.required === 'Y') {\r\n if (c.name.trim() === '' && c.free === 'Y') {\r\n c.labelErrorMessage = getLabel(\r\n this.api.execution,\r\n 'msgReqField',\r\n ).text;\r\n isValid = false;\r\n }\r\n if (c.value.trim() === '') {\r\n if (!c.errorMessage)\r\n c.errorMessage = getLabel(this.api.execution, 'msgReqField').text;\r\n isValid = false;\r\n }\r\n }\r\n });\r\n\r\n return isValid;\r\n }\r\n}\r\n","import {\r\n addBoundary,\r\n arrayOrArray,\r\n downloadUrl,\r\n EventEmitter,\r\n formatMessage,\r\n parseAsSize,\r\n TApiaFunction,\r\n TApiaLoad,\r\n toBoolean,\r\n} from '@apia/util';\r\nimport {\r\n IPoolsPermissions,\r\n IUsersPermissions,\r\n TAjaxUploadFileStatus,\r\n TAjaxUploadStart,\r\n TConfirmDropModal,\r\n TDocType,\r\n TDocumentMetadata,\r\n TFileUploaded,\r\n TProcessDroppedFiles,\r\n TSaveDroppedFilesConf,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n TUploaderLoadCurrentFunction,\r\n TUploaderLoadCurrentFunctionMessages,\r\n UploaderState,\r\n TDocumentInformation,\r\n TRequireOnlyOne,\r\n} from './types';\r\nimport { UploaderModalController } from './UploaderModalController';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { NotificationDefinition } from '../../Notifications/Notification';\r\nimport QueryString from 'qs';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Execution } from '..';\r\nimport { get, makeApiaUrl, post } from '../../../util';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\n\r\n/**\r\n * El comportamiento de esta función se explica por su\r\n * nombre.\r\n */\r\nexport function returnExactlyTheSame(\r\n defaultParameters: Record<string, unknown>,\r\n): Record<string, unknown> {\r\n return defaultParameters;\r\n}\r\n\r\nexport function isOneClickUploadEnabled(\r\n execution: Execution,\r\n oneClickUploadProp?: boolean,\r\n) {\r\n return (\r\n !getWindow(execution).avoidOneClickUpload &&\r\n (getWindow(execution).forceOneClickUpload || oneClickUploadProp || false)\r\n );\r\n}\r\n\r\nexport const parseFileDefinition = (\r\n execution: Execution,\r\n fileDefinition: TFileUploaded | TUploaderFileInfo,\r\n isSignRequired: boolean,\r\n): TUploaderFileInfo => {\r\n const { lock, isLocked, lockedBy, userLocking, ...file } =\r\n fileDefinition as TFileUploaded;\r\n\r\n return {\r\n ...file,\r\n isLocked:\r\n isLocked === 'true' ||\r\n isLocked === true ||\r\n toBoolean(lock) ||\r\n file.locked === true,\r\n isLockedByMe:\r\n (lockedBy || userLocking) === getWindow(execution).CURRENT_USER_LOGIN,\r\n isMarkedToSign: file.markedToSign || toBoolean(file.sign) || isSignRequired,\r\n isVirtual: file.virtualDoc ?? false,\r\n lockingUser: lockedBy || userLocking,\r\n };\r\n};\r\n\r\nexport type TOnUploadProgress = (progress: number) => void;\r\nexport class UploaderApi extends EventEmitter<{ fileUploaded: null }> {\r\n maxFiles = Infinity;\r\n modalController: UploaderModalController | null = null;\r\n allowTranslations = false;\r\n langs: Record<number, string> | undefined;\r\n currentConfiguration: TUploaderLoadCurrentFunctionMessages | undefined;\r\n docTypePermittedObjId;\r\n state: UploaderState = {\r\n progress: 0,\r\n allowedTypes: [],\r\n selectedDocTypeId: '1',\r\n versioningFile: null,\r\n inProgressFiles: [],\r\n files: {},\r\n selectedFiles: [],\r\n hiddenFiles: [],\r\n translatedFiles: new Map(),\r\n hasAllDocTypes: false,\r\n };\r\n get filesArray() {\r\n return Object.values(this.state.files);\r\n }\r\n\r\n constructor(\r\n public execution: Execution,\r\n public id: string,\r\n public type: 'E' | 'P',\r\n public modalConfig: TModalConfig,\r\n ) {\r\n super();\r\n if (!(getWindow(this.execution) as any).fileApi) {\r\n (getWindow(this.execution) as any).fileApi = {};\r\n }\r\n (getWindow(this.execution) as any).fileApi[this.id] = this;\r\n\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n this.allowTranslations =\r\n type === 'E' && !!getWindow(this.execution).DOC_LANGS;\r\n this.langs = getWindow(this.execution).DOC_LANGS;\r\n try {\r\n this.docTypePermittedObjId =\r\n type === 'E'\r\n ? getWindow(this.execution).docTypePerEntId\r\n : getWindow(this.execution).docTypePerProId;\r\n } catch (e) {\r\n console.warn(e);\r\n }\r\n }\r\n\r\n async init() {\r\n await this.ajaxUploadStart();\r\n await this.reloadMetadata({\r\n docTypeId: this.state.selectedDocTypeId,\r\n });\r\n await this.loadCurrentDocuments();\r\n }\r\n\r\n async onStartUpload(files?: File[]) {\r\n if (this.modalConfig.oneClickUpload) {\r\n await this.saveDroppedFiles(files ?? []);\r\n } else {\r\n if (files) {\r\n const result = await this.saveDroppedFiles(files ?? []);\r\n if (!result) return;\r\n }\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n );\r\n this.modalController.openModal();\r\n }\r\n }\r\n\r\n async onTranslateUpload(\r\n conf: {\r\n langId: number;\r\n translatingFile: TUploaderFileInfo;\r\n },\r\n files?: File[],\r\n ) {\r\n if (this.modalConfig.oneClickUpload) {\r\n await this.saveDroppedFiles(files ?? [], conf);\r\n } else {\r\n await this.init();\r\n\r\n let mustOpen = true;\r\n\r\n if (files) {\r\n const res = await this.saveDroppedFiles(files ?? [], conf);\r\n if (!res) {\r\n mustOpen = false;\r\n }\r\n }\r\n\r\n if (mustOpen) {\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n conf,\r\n );\r\n this.modalController.openModal();\r\n }\r\n }\r\n }\r\n\r\n async onVersionUpload(\r\n file: TUploaderFileInfo,\r\n conf: {\r\n newFiles?: File[];\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n } = { newFiles: [] },\r\n ) {\r\n this.version(file, conf);\r\n }\r\n\r\n async autoLock(): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n\r\n public notify(notification: NotificationDefinition) {\r\n this.execution.notifications.add(new MessageNotification(notification));\r\n }\r\n\r\n protected getAjaxUrl(): string {\r\n return getWindow(this.execution).URL_REQUEST_AJAX;\r\n }\r\n\r\n public getDocTypes() {\r\n return this.state.allowedTypes;\r\n }\r\n\r\n public getCurrentDocTypeId() {\r\n return this.state.selectedDocTypeId;\r\n }\r\n\r\n public getCurrentDocType() {\r\n return this.state.allowedTypes.find(\r\n (c) => c.id === this.state.selectedDocTypeId,\r\n );\r\n }\r\n\r\n public getInProgressFiles() {\r\n return this.state.inProgressFiles;\r\n }\r\n\r\n public getHiddenFiles() {\r\n return this.state.hiddenFiles;\r\n }\r\n\r\n public getExistingFiles() {\r\n return this.state.files;\r\n }\r\n\r\n public getProgress() {\r\n return this.state.progress;\r\n }\r\n\r\n public getHasAllDocTypes() {\r\n return this.state.hasAllDocTypes;\r\n }\r\n\r\n async getDocumentInfo(\r\n {\r\n docId: apiId,\r\n downloadDocId: docId,\r\n }: TRequireOnlyOne<{ docId: string; downloadDocId: string }>,\r\n newElem?: boolean,\r\n ) {\r\n const id = apiId ? this.getDocument(apiId)!.docId : docId;\r\n const result = await post<TDocumentInformation>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDocumentInfoParameters({\r\n action: 'getDocumentInfo',\r\n isAjax: true,\r\n docId: id,\r\n newElem,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n );\r\n\r\n if (result?.data) {\r\n return result.data;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * This method searches for the provided id in several places:\r\n *\r\n * If it's found in the current files, returns it.\r\n * If not, it searches the provided docId in the translations map of each uploaded file.\r\n */\r\n getDocument(docId: string) {\r\n if (this.state.files[docId]) {\r\n return this.state.files[docId];\r\n } else {\r\n for (const map of this.state.translatedFiles.values()) {\r\n for (const file of map.values()) {\r\n if (file.docId === docId) {\r\n return file;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected updateDocument(docId: string, newValue: TUploaderFileInfo) {\r\n if (this.state.files[docId]) {\r\n this.state.files[docId] = { ...this.getDocument(docId), ...newValue };\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === docId) {\r\n innerMap.set(langKey, { ...doc, ...newValue });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected deleteDocument(docId: string) {\r\n if (this.state.files[docId]) {\r\n delete this.state.files[docId];\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === docId) {\r\n innerMap.delete(langKey);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n public clearFile(name: string) {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.inProgressFiles = this.state.inProgressFiles.filter(\r\n (c) => c.name !== name,\r\n );\r\n }\r\n\r\n public clearFiles() {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.inProgressFiles = [];\r\n this.state.versioningFile = null;\r\n this.state.hiddenFiles = [];\r\n }\r\n\r\n public clearState() {\r\n if (this.modalController) {\r\n this.modalController.state.isReadonly = false;\r\n }\r\n\r\n this.state.selectedDocTypeId = this.getDocTypes().find(\r\n (c) => String(c.id) === '1',\r\n )\r\n ? '1'\r\n : this.getDocTypes()[0]?.id;\r\n this.state.inProgressFiles = [];\r\n this.state.versioningFile = null;\r\n }\r\n\r\n async checkLockDocument(id: string, shouldNotifyUnlocked = true) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if (Number(file.docId) < 0) return true;\r\n\r\n const result = await post<{\r\n success: 'ok' | 'unlocked';\r\n usr: string;\r\n }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getCheckLockDocumentParameters({\r\n action: 'checkLockDocument',\r\n docId: file.docId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n prefix: this.type,\r\n }),\r\n ),\r\n );\r\n\r\n const isLocked = result?.data?.success === 'ok';\r\n if (\r\n !isLocked &&\r\n result?.data?.usr &&\r\n result.data.usr !== getWindow(this.execution).CURRENT_USER_LOGIN\r\n ) {\r\n this.notify({\r\n message: `${getWindow(this.execution).MSG_DOC_LOCKED_BY_USR.split('.')[0]}: ${\r\n result.data.usr\r\n }.`,\r\n type: 'warning',\r\n });\r\n return result.data.usr;\r\n }\r\n if (!isLocked && shouldNotifyUnlocked && !(await this.autoLock()))\r\n this.notify({\r\n message: getWindow(this.execution).MSG_DOC_MUST_BE_LOCKED,\r\n type: 'warning',\r\n });\r\n\r\n return isLocked;\r\n }\r\n\r\n public setCurrentDocTypeId(docTypeId: string) {\r\n this.state.selectedDocTypeId = docTypeId;\r\n }\r\n\r\n public async ajaxUploadStart(newFiles: File[] = []) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n const versioningFile = this.state.versioningFile;\r\n const res = await post<TAjaxUploadStart>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getAjaxUploadStartParameters({\r\n action: 'ajaxUploadStart',\r\n isAjax: true,\r\n docId: versioningFile?.docId,\r\n prefix: this.type,\r\n docTypeId:\r\n newFiles.length === 1 ? versioningFile?.docTypeId || '1' : '1',\r\n newDoc: !versioningFile,\r\n useDocTypePermitted: true,\r\n docTypePermittedObjType: this.type,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n );\r\n if (res?.data) {\r\n const docTypes = arrayOrArray(res?.data?.function?.docTypes?.docType);\r\n const hasGeneric = !!docTypes.find((c) => String(c.id) === '1');\r\n\r\n this.state.allowedTypes = docTypes;\r\n this.state.selectedDocTypeId = hasGeneric ? '1' : docTypes[0].id;\r\n\r\n if (newFiles.length > 0) {\r\n await this.saveDroppedFiles(newFiles);\r\n }\r\n return res?.data?.function.name === 'fncDocumentLoadInformation'\r\n ? true\r\n : false;\r\n } else {\r\n throw new Error('No files data');\r\n }\r\n }\r\n\r\n public async reloadMetadata(\r\n props?: Partial<{ docId: string; docTypeId: number | string }>,\r\n additionalProps?: Record<string, unknown>,\r\n ) {\r\n if (!this.modalController) return;\r\n const res = await post<{\r\n metadata: TDocumentMetadata | TDocumentMetadata[];\r\n }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getReloadMetadataParameters({\r\n ajaxUrl: this.getAjaxUrl(),\r\n action: 'reloadMetadata',\r\n isAjax: true,\r\n docId: props?.docId,\r\n docTypeId: props?.docTypeId,\r\n metadata: this.getConfirmDropModalMetadataString({\r\n metadata: this.modalController?.allMetadata,\r\n }),\r\n prefix: this.type,\r\n ...additionalProps,\r\n }),\r\n ),\r\n );\r\n\r\n if (res?.data && props?.docTypeId) {\r\n const isFreeMetadata =\r\n this.state.allowedTypes.find(\r\n (current) => current.id === props.docTypeId,\r\n )?.free ?? false;\r\n\r\n this.modalController!.state.metadata.metadataArray = arrayOrArray(\r\n res.data.metadata,\r\n );\r\n this.modalController!.state.metadata.isFreeMetadata = isFreeMetadata;\r\n }\r\n }\r\n\r\n public async saveDroppedFiles(\r\n unprocessedFiles: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): Promise<boolean> {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const {\r\n langId,\r\n strictMode: isConfStrictMode = false,\r\n translatingFile,\r\n } = conf ?? {};\r\n const isStrictMode =\r\n isConfStrictMode ||\r\n !!this.state.versioningFile ||\r\n !!this.modalController?.state.fromDirectoryFile;\r\n\r\n const docType = this.getCurrentDocTypeId();\r\n\r\n if (!isStrictMode && !docType) {\r\n this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_DELETED}: ${unprocessedFiles\r\n .map((current) => current.name)\r\n .join(', ')}.`,\r\n type: 'warning',\r\n });\r\n return false;\r\n }\r\n const allowedFiles = this.filterAlreadyUploadedFiles(\r\n this.filterByFilesAmountLimit(\r\n this.filterAcceptedFiles(\r\n this.filterExistingFiles(\r\n this.filterVersioningFiles(unprocessedFiles, conf),\r\n conf,\r\n ),\r\n true,\r\n docType as string,\r\n ),\r\n ),\r\n conf,\r\n );\r\n if (allowedFiles.length > 0) {\r\n const formData = new FormData();\r\n allowedFiles.forEach((file) =>\r\n formData.append('fileRepository', file, file.name),\r\n );\r\n\r\n await post(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getSaveDroppedFilesParameters({\r\n action: 'saveDroppedFiles',\r\n docId: this.state.versioningFile?.docId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n elemType: this.type,\r\n elemId: `prmDocumentContainter${this.type}`,\r\n frmOut: !this.modalController,\r\n docTypeId: this.state.selectedDocTypeId,\r\n langId,\r\n }),\r\n ),\r\n {\r\n postData: formData,\r\n axiosConfig: {\r\n onUploadProgress: (ev) =>\r\n (this.state.progress =\r\n (ev.loaded * 100) / ((ev.total ?? ev.loaded) * 2)),\r\n },\r\n },\r\n );\r\n const ajaxUploadFileStatusParameters =\r\n this.getAjaxUploadFileStatusParameters({\r\n action: 'ajaxUploadFileStatus',\r\n ajaxUrl: this.getAjaxUrl(),\r\n delayForDrop: true,\r\n isAjax: true,\r\n prefix: this.type,\r\n });\r\n\r\n let tries = 0;\r\n const checkUploadResult = async () => {\r\n // eslint-disable-next-line no-async-promise-executor\r\n return new Promise(async (resolve) => {\r\n tries += 1;\r\n if (tries === 10) {\r\n this.notify({\r\n message:\r\n 'Error while checking for uploadFileStatus, too many tries',\r\n type: 'error',\r\n });\r\n resolve(false);\r\n return;\r\n }\r\n const response = await post<TAjaxUploadFileStatus>(\r\n this.execution,\r\n makeApiaUrl(this.execution, ajaxUploadFileStatusParameters),\r\n );\r\n if (response && response.data) {\r\n const hasMessages =\r\n arrayOrArray<any>(\r\n response.data?.sysMessages?.message ??\r\n response.data?.sysExceptions?.exception ??\r\n response.data?.exceptions?.exception ??\r\n response.data.function.messages?.message,\r\n ).length > 0 || !!response.data.function.dropLastMessage;\r\n\r\n const uploadMessage = arrayOrArray(\r\n response.data.function.messages?.message,\r\n ).find((current) => current.name === 'message');\r\n if (uploadMessage)\r\n this.notify({ message: uploadMessage.label, type: 'warning' });\r\n\r\n const method = response.data?.function.name;\r\n this.state.progress = 44;\r\n if (hasMessages) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n if (method === 'fncProceedDocumentProcessing') {\r\n resolve(true);\r\n return;\r\n }\r\n if (tries === 10) {\r\n resolve(method === 'fncProceedDocumentProcessing');\r\n }\r\n setTimeout(() => {\r\n checkUploadResult()\r\n .then(resolve)\r\n .catch(() => resolve(false));\r\n }, 100);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n };\r\n const hasUploadedCorrectly = await checkUploadResult();\r\n\r\n this.state.progress = 66;\r\n\r\n if (hasUploadedCorrectly) {\r\n const shown = (this.state.inProgressFiles ?? []).map(\r\n (file) => file.name,\r\n );\r\n const postData = QueryString.stringify(\r\n this.getProcessDroppedFilesPostdata({\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId?.toString(),\r\n docTypePermittedObjType: this.type,\r\n dropped: allowedFiles.map((file) => file.name).concat(shown),\r\n shown,\r\n }),\r\n { arrayFormat: 'repeat' },\r\n );\r\n\r\n const secondResult = await post<TProcessDroppedFiles>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getProcessDroppedFilesParameters({\r\n action: 'processDroppedFiles',\r\n elemType: this.type,\r\n docId: this.state.versioningFile?.docId,\r\n frmOut: !this.modalController,\r\n ajaxUrl: this.getAjaxUrl(),\r\n }),\r\n ),\r\n {\r\n postData: postData.toString(),\r\n },\r\n );\r\n\r\n this.state.progress = 83;\r\n\r\n if (secondResult?.data?.function?.principal?.docInfo) {\r\n const acceptedByServerFiles = arrayOrArray(\r\n secondResult.data.function?.principal?.docInfo,\r\n );\r\n\r\n this.state.inProgressFiles = [\r\n ...(this.state.inProgressFiles ?? []),\r\n ...acceptedByServerFiles\r\n .map((current) =>\r\n [...this.state.inProgressFiles, ...unprocessedFiles].find(\r\n (search) => search.name === current.docInfoName,\r\n ),\r\n )\r\n .filter((current): current is File => !!current),\r\n ];\r\n this.state.progress = 100;\r\n\r\n if (this.modalController)\r\n this.modalController.state.fromDirectoryFile = null;\r\n\r\n this.notify({\r\n type: 'success',\r\n message: getWindow(this.execution).FILE_UPLOADED_SUCCESSFULLY,\r\n });\r\n if (\r\n isOneClickUploadEnabled(\r\n this.execution,\r\n this.modalConfig.oneClickUpload,\r\n )\r\n ) {\r\n if (langId && translatingFile)\r\n void this.confirmDropModal({ langId, translatingFile });\r\n else void this.confirmDropModal();\r\n }\r\n }\r\n }\r\n this.state.progress = 100;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n async checkWebDavLock(docId: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n let tries = 10;\r\n const checkLockAction = async () => {\r\n const isLocked = await post<{ locked: boolean }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getCheckWebDavLockParameters({\r\n action: 'isWebDavDocumentLocked',\r\n docId,\r\n ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX,\r\n }),\r\n ),\r\n );\r\n if (\r\n isLocked?.data?.locked === true ||\r\n isLocked?.data?.locked === undefined\r\n ) {\r\n if (--tries > 0) {\r\n setTimeout(() => void checkLockAction(), 1000);\r\n } else {\r\n this.notify({\r\n message: getWindow(this.execution).MSG_FAIL_SYNC_DOCUMENT,\r\n });\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(true);\r\n }\r\n };\r\n void checkLockAction();\r\n });\r\n }\r\n\r\n async checkSignature(file: TUploaderFileInfo) {\r\n let res = null;\r\n if (Number(file.docId) >= 0)\r\n res = await get<{ markedToSign: boolean }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getCheckSignatureParameters({\r\n action: 'viewDocSigns',\r\n docId: file.docId,\r\n lock: false,\r\n isAjax: true,\r\n prefix: this.type,\r\n react: true,\r\n }),\r\n ),\r\n );\r\n return res;\r\n }\r\n\r\n async editDocument(id: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if ((await this.checkLockDocument(file.docId)) === true) {\r\n const result = await post<{ folderId: string }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getEditDocumentParameters({\r\n action: 'updateWebDavDocument',\r\n docId: file.docId,\r\n prefix: this.type,\r\n isAjax: true,\r\n }),\r\n ),\r\n );\r\n if (result?.data?.folderId) {\r\n const sDocumentUrl = `${getWindow(this.execution).WEBDAV_SERVER}${\r\n result?.data?.folderId\r\n }/${file.docId}/${file.name || file.docName || ''}`;\r\n\r\n const ProtocolInstallMessage = () => {\r\n this.notify({\r\n type: 'warning',\r\n message: getWindow(this.execution).MSG_NO_DOC_EDIT_PROTOCOL,\r\n title: getWindow(this.execution).LBL_EDIT,\r\n });\r\n };\r\n\r\n (getWindow(this.execution).avoidLoadEvents as any) = true;\r\n (\r\n getWindow(this.execution).ITHit as any\r\n ).WebDAV.Client.DavConstants.ProtocolTimeoutMs = 10000;\r\n\r\n await (\r\n getWindow(this.execution).ITHit as any\r\n ).WebDAV.Client.DocManager.DavProtocolEditDocument(\r\n sDocumentUrl,\r\n getWindow(this.execution).WEBDAV_SERVER,\r\n ProtocolInstallMessage,\r\n null,\r\n 'Current',\r\n 'ApiaWebDavCookie', // Cookie(s) to copy.\r\n '', // URL to navigate to if any cookie from the list is not found.\r\n 'Edit',\r\n );\r\n }\r\n }\r\n }\r\n\r\n async downloadVersion(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n docId: file.downloadDocId,\r\n version,\r\n }),\r\n );\r\n }\r\n\r\n async downloadDocument(id: string, version?: string) {\r\n const file = this.getDocument(id)!;\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n ) {\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n prefix: this.type,\r\n docId: file.downloadDocId,\r\n ajaxUrl: this.getAjaxUrl(),\r\n version,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n async ajaxDeleteDocument(id: string, langId?: number) {\r\n const file = this.getDocument(id)!;\r\n const isLocked = await this.checkLockDocument(file.docId);\r\n if (isLocked === true) {\r\n const result = await post(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDeleteDocumentParameters({\r\n action: 'ajaxRemoveDocument',\r\n docId: file.docId,\r\n isAjax: true,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n langId,\r\n }),\r\n ),\r\n );\r\n\r\n if (this.evaluateDeleteDocumentResult(result?.data))\r\n this.deleteDocument(id);\r\n }\r\n }\r\n\r\n async version(\r\n file: TUploaderFileInfo,\r\n conf: {\r\n newFiles?: File[];\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n } = { newFiles: [] },\r\n ) {\r\n const checkLock = await this.checkLockDocument(file.docId, true);\r\n const isLocked = await this.checkWebDavLock(file.docId);\r\n\r\n // Si no está bloqueado correctamente, salir (misma lógica que antes)\r\n if (!(checkLock === true && isLocked)) return;\r\n\r\n // Guardamos el file en el state (como se hacía originalmente)\r\n this.state.versioningFile = file;\r\n\r\n const openVersionModal = () => {\r\n if (!this.modalConfig.oneClickUpload) {\r\n this.modalController = new UploaderModalController(\r\n this,\r\n this.modalConfig,\r\n {\r\n versionFile: file,\r\n },\r\n );\r\n this.modalController.openModal();\r\n }\r\n };\r\n\r\n // Si no vienen newFiles, abrir el modal ahora (igual que el código original)\r\n if (!conf.newFiles || conf.newFiles.length === 0) {\r\n openVersionModal();\r\n }\r\n\r\n await this.ajaxUploadStart();\r\n\r\n if (file.docTypeId) this.state.selectedDocTypeId = file.docTypeId;\r\n\r\n await this.versionFileInfo(file);\r\n\r\n const hasNewFiles = !!(conf.newFiles && conf.newFiles.length > 0);\r\n\r\n if (hasNewFiles) {\r\n const res = await this.saveDroppedFiles(conf.newFiles!, {\r\n langId: conf.langId,\r\n translatingFile: conf.translatingFile,\r\n shouldReset: false,\r\n strictMode: true,\r\n });\r\n\r\n // Si el guardado devuelve éxito, abrir el modal ahora (si aplica).\r\n if (res) {\r\n openVersionModal();\r\n }\r\n } else {\r\n await this.reloadMetadata({\r\n docId: file.docId,\r\n docTypeId: file.docTypeId,\r\n });\r\n }\r\n }\r\n\r\n async versionFileInfo(file: TUploaderFileInfo) {\r\n const documentInfo = await this.getDocumentInfo({ docId: file.docId });\r\n if (documentInfo?.function) {\r\n const {\r\n data: { general },\r\n metadatas,\r\n } = documentInfo.function;\r\n\r\n const isFreeMetadata =\r\n this.state.allowedTypes.find((current) => current.id === file.docTypeId)\r\n ?.free ?? false;\r\n if (this.modalController) {\r\n this.modalController!.state = {\r\n description: general.docDesc,\r\n docFolder:\r\n general.docFolder === '' ? undefined : Number(general.docFolder),\r\n docPath: general.docFolderPath,\r\n permissions: {\r\n allowAllType: general.docAllPoolPerm,\r\n users: arrayOrArray(\r\n documentInfo.function.data.permissions?.user,\r\n ).map((current) => {\r\n const returnObject: IUsersPermissions = {\r\n canUpdate: current.permType === 'M',\r\n userId: current.id,\r\n userLogin: current.name,\r\n };\r\n return returnObject;\r\n }),\r\n pools: arrayOrArray(\r\n documentInfo.function.data.permissions?.pool,\r\n ).map((current) => {\r\n const returnObject: IPoolsPermissions = {\r\n canUpdate: current.permType === 'M',\r\n poolId: current.id,\r\n poolName: current.name,\r\n };\r\n return returnObject;\r\n }),\r\n },\r\n docExpDate: general.docExpDate,\r\n fileReqError: false,\r\n fromDirectoryFile: null,\r\n metadata: {\r\n metadataArray: arrayOrArray(metadatas?.metadata),\r\n freeMetadataArray: [],\r\n isFreeMetadata: isFreeMetadata,\r\n },\r\n };\r\n }\r\n }\r\n }\r\n\r\n public async pickFileById(id: string) {\r\n const documentInfo = await this.getDocumentInfo(\r\n { downloadDocId: id },\r\n true,\r\n );\r\n if (documentInfo) {\r\n const document = documentInfo.function.data.general;\r\n const { permissions } = documentInfo.function.data;\r\n\r\n if (this.modalController) {\r\n this.setCurrentDocTypeId(document.docTypeId);\r\n this.modalController.addDirectoryFile(document);\r\n this.modalController.state.description = document.docDesc;\r\n this.modalController.state.docExpDate = document.docExpDate;\r\n this.modalController.state.permissions = {\r\n pools: arrayOrArray(permissions?.pool).map((c) => {\r\n return {\r\n poolId: c.id,\r\n poolName: c.name,\r\n canUpdate: c.permType === 'M',\r\n };\r\n }),\r\n users: [\r\n ...arrayOrArray(permissions?.user).map((c) => {\r\n return {\r\n userId: c.id,\r\n userLogin: c.name,\r\n canUpdate: c.permType === 'M',\r\n };\r\n }),\r\n ],\r\n allowAllType: document.docAllPoolPerm as '',\r\n };\r\n this.modalController.changeDocType(document.docTypeId);\r\n this.modalController.state.isReadonly =\r\n !documentInfo.function.currentUsrPems.usrCanModify;\r\n }\r\n\r\n void this.reloadMetadata(\r\n { docId: document.docId, docTypeId: document.docTypeId },\r\n {\r\n docReuse: true,\r\n },\r\n );\r\n }\r\n }\r\n\r\n async markFileToSign(id: string, langId?: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n this.state.files[id];\r\n if ((await this.checkLockDocument(file.docId)) === true) {\r\n const marked = await post<{ markedToSign: boolean }>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getMarkFileToSignParameters({\r\n action: 'markDocTosign',\r\n docId: file.docId,\r\n isAjax: true,\r\n prefix: this.type,\r\n ajaxUrl: this.getAjaxUrl(),\r\n langId,\r\n }),\r\n ),\r\n );\r\n\r\n if (marked?.data?.markedToSign !== undefined) {\r\n if (this.state.files[id]) {\r\n this.state.files[id].markedToSign = marked.data.markedToSign;\r\n } else {\r\n this.state.translatedFiles.forEach((innerMap) => {\r\n innerMap.forEach((doc, langKey) => {\r\n if (doc.docId === id) {\r\n innerMap.set(langKey, {\r\n ...doc,\r\n markedToSign: marked?.data?.markedToSign ?? false,\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Por el momento realiza la descarga de todos los archivos\r\n * que estén subidos.\r\n */\r\n downloadMultipleDocuments() {\r\n const files = this.filesArray;\r\n if (files.length === 0) return;\r\n const docIds = this.state.selectedFiles;\r\n\r\n const selectedFiles = files.filter((current) =>\r\n docIds.find((search) => search === current.docId),\r\n );\r\n const ids = (selectedFiles.length > 0 ? selectedFiles : files)\r\n .map((current) => current.downloadDocId)\r\n .join('-');\r\n\r\n void downloadUrl(\r\n makeApiaUrl(\r\n this.execution,\r\n this.getDownloadMultipleDocumentsParameters({\r\n action: 'multipleDownload',\r\n docId: ids,\r\n prefix: this.type,\r\n }),\r\n ),\r\n 'documents.zip',\r\n );\r\n }\r\n\r\n async confirmDropModal(conf?: {\r\n langId?: number;\r\n translatingFile?: TUploaderFileInfo;\r\n }) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return false;\r\n }\r\n\r\n const { langId, translatingFile } = conf ?? {};\r\n\r\n const cmbDocType = this.state.selectedDocTypeId;\r\n const fromDirectoryFile = this.modalController?.state.fromDirectoryFile;\r\n const docDesc = this.modalController?.description ?? '';\r\n const docAllowAllType = this.modalConfig.oneClickUpload\r\n ? 'M'\r\n : (this.modalController?.allowAllType ?? '');\r\n const docFolder = this.modalController?.docFolder;\r\n const docExpDate = this.modalController?.docExpDate;\r\n const metadata = this.modalController?.metadata ?? [];\r\n const freeMetadata = this.modalController?.freeMetadata ?? [];\r\n\r\n const poolsPermissions =\r\n this.modalController?.state.permissions.pools ?? [];\r\n\r\n const usersPermissions =\r\n this.modalController?.state.permissions.users ?? [];\r\n\r\n let postData = QueryString.stringify(\r\n this.getConfirmDropModalPostdata({\r\n cmbDocType,\r\n docDesc,\r\n docAllowAllType,\r\n pe: this.docTypePermittedObjId?.toString(),\r\n dropped: this.state.inProgressFiles.map((file) => file.name),\r\n txtLangId: langId,\r\n txtLangGroup: translatingFile?.docLangGroup,\r\n docFolder: docFolder,\r\n }),\r\n { arrayFormat: 'repeat' },\r\n );\r\n\r\n postData = `${postData}${\r\n postData.length > 0 ? '&' : ''\r\n }${this.getConfirmDropModalPermissionsString({\r\n poolsPermissions,\r\n usersPermissions,\r\n })}&txtFreeMetadata=${this.getConfirmDropModalAdditionalMetadataString(\r\n freeMetadata,\r\n )}&txtMetadata=${this.getConfirmDropModalMetadataString({\r\n metadata: Object.values(metadata || {}),\r\n })}&docExpDate=${docExpDate ?? ''}`;\r\n\r\n const result = await post<TConfirmDropModal>(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getConfirmDropModalParameters({\r\n ajaxUrl: this.getAjaxUrl(),\r\n docId: fromDirectoryFile\r\n ? fromDirectoryFile.docId\r\n : this.state.versioningFile?.docId,\r\n action: fromDirectoryFile\r\n ? 'associateExistingFile'\r\n : 'confirmDropModal',\r\n elemType: this.type,\r\n fromForm: true,\r\n ...(fromDirectoryFile\r\n ? {\r\n docId: fromDirectoryFile.docId,\r\n fromReuse: true,\r\n uploadDocument: false,\r\n }\r\n : null),\r\n }),\r\n ),\r\n {\r\n postData: postData.toString(),\r\n },\r\n );\r\n\r\n if (result?.data?.function) {\r\n const currentFiles = { ...this.state.files };\r\n const versioningFile = this.state.versioningFile;\r\n\r\n if (versioningFile && versioningFile.name) {\r\n delete currentFiles[versioningFile.name];\r\n }\r\n const newFiles: Record<string, TUploaderFileInfo> = arrayOrArray(\r\n result.data.function.general,\r\n )\r\n .map((current) =>\r\n this.parseFileDefinition({\r\n ...current,\r\n canWrite: true,\r\n canRead: true,\r\n canEdit: true,\r\n }),\r\n )\r\n .filter((current) => !currentFiles[current.docId])\r\n .reduce((acc, current) => ({ ...acc, [current.docId]: current }), {});\r\n\r\n if (langId && translatingFile) {\r\n const firstFile = Object.values(newFiles)[0];\r\n this.setTranslationFile(firstFile, translatingFile.docId, langId);\r\n } else {\r\n this.state.files = { ...currentFiles, ...newFiles };\r\n }\r\n this.clearFiles();\r\n this.emit('fileUploaded', null);\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n async loadCurrentDocuments() {\r\n const result = await post<\r\n TApiaLoad<TApiaFunction<TUploaderLoadCurrentFunction, false>>\r\n >(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: this.getAjaxUrl(),\r\n action: 'ajaxLoadCurrent',\r\n isAjax: true,\r\n readOnly: getWindow(this.execution).IS_READONLY,\r\n allowLock: true,\r\n allowSign: true,\r\n allowMultiple: true,\r\n prefix: this.type,\r\n }),\r\n {},\r\n );\r\n\r\n if (result && result.data) {\r\n const currentConfiguration: TUploaderLoadCurrentFunctionMessages =\r\n arrayOrArray(result.data.function.messages.message).reduce(\r\n (prev, { name, label }) => ({ ...prev, [name]: Boolean(label) }),\r\n {} as TUploaderLoadCurrentFunctionMessages,\r\n );\r\n\r\n const currentFiles: TUploaderFileInfo[] = result.data.function.general\r\n ? arrayOrArray(result.data.function.general).map(\r\n this.parseFileDefinition,\r\n )\r\n : [];\r\n\r\n this.currentConfiguration = currentConfiguration;\r\n const nonTranslationFiles: TUploaderFileInfo[] = [];\r\n const translationFiles: TUploaderFileInfo[] = [];\r\n currentFiles.forEach((current) => {\r\n if (current.docLang === undefined) nonTranslationFiles.push(current);\r\n else translationFiles.push(current);\r\n });\r\n\r\n nonTranslationFiles.forEach((c) => {\r\n this.state.files[c.docId] = c;\r\n });\r\n translationFiles.forEach((current) => {\r\n const originalFile = nonTranslationFiles.find(\r\n (search) => search.docLangGroup === current.docLangGroup,\r\n );\r\n if (originalFile && current.docLang !== undefined) {\r\n this.setTranslationFile(\r\n current,\r\n originalFile.docId,\r\n Number(current.docLang),\r\n );\r\n } else\r\n console.warn(\r\n `The following file is translated but has no orignal file`,\r\n current,\r\n nonTranslationFiles,\r\n );\r\n });\r\n }\r\n }\r\n\r\n async lockDocument(id: string) {\r\n if (getWindow(this.execution).IN_MONITOR) {\r\n return;\r\n }\r\n\r\n const file = this.getDocument(id)!;\r\n if (file.markedToSign) {\r\n this.notify({\r\n message: getWindow(this.execution).CANT_UNLOCK_MARKED_TO_SIGN,\r\n type: 'warning',\r\n });\r\n return;\r\n }\r\n if (!file.isLocked || !file.isLockedByMe) {\r\n const isLocked = await this.checkLockDocument(file.docId, false);\r\n this.updateDocument(\r\n id,\r\n typeof isLocked === 'string'\r\n ? this.parseFileDefinition({\r\n ...file,\r\n userLocking: isLocked,\r\n lock: true,\r\n isLocked: true,\r\n lockedBy: isLocked,\r\n })\r\n : { ...file, isLocked },\r\n );\r\n }\r\n\r\n const result = await post<\r\n TApiaFunction<\r\n {\r\n data: {\r\n general: {\r\n docId: string;\r\n locked: boolean;\r\n prefix: string;\r\n userLocking: string;\r\n };\r\n };\r\n },\r\n false\r\n >\r\n >(\r\n this.execution,\r\n makeApiaUrl(\r\n this.execution,\r\n this.getLockDocumentParameters({\r\n action: 'lockDocument',\r\n ajaxUrl: this.getAjaxUrl(),\r\n docId: file.docId,\r\n lock: file.isLocked || file.locked,\r\n isAjax: true,\r\n prefix: this.type,\r\n }),\r\n ),\r\n );\r\n\r\n if (result?.data) {\r\n const resultFile = result.data.function?.data?.general;\r\n if (resultFile)\r\n this.updateDocument(\r\n resultFile.docId,\r\n this.parseFileDefinition({\r\n ...file,\r\n ...resultFile,\r\n isLocked: resultFile.locked,\r\n }),\r\n );\r\n }\r\n }\r\n\r\n protected evaluateDeleteDocumentResult(result: unknown) {\r\n return (\r\n (\r\n result as\r\n | undefined\r\n | TApiaLoad<\r\n TApiaFunction<\r\n {\r\n general: {\r\n docId: string;\r\n prefix: string;\r\n };\r\n },\r\n false\r\n >\r\n >\r\n )?.function?.name === 'fncDocumentRemove'\r\n );\r\n }\r\n\r\n public setTranslationFile(\r\n file: TUploaderFileInfo,\r\n docId: string,\r\n langId: number,\r\n ) {\r\n if (!this.state.translatedFiles.has(docId)) {\r\n this.state.translatedFiles.set(docId, new Map());\r\n }\r\n this.state.translatedFiles.get(docId)?.set(langId, file);\r\n }\r\n\r\n protected getCheckSignatureParameters = returnExactlyTheSame;\r\n\r\n protected getAjaxUploadFileStatusParameters = returnExactlyTheSame;\r\n\r\n protected getAjaxUploadStartParameters = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalParameters = returnExactlyTheSame;\r\n\r\n protected getCheckLockDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getCheckWebDavLockParameters = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalPostdata = returnExactlyTheSame;\r\n\r\n protected getConfirmDropModalMetadataString = ({\r\n metadata,\r\n }: {\r\n metadata: TDocumentMetadata[];\r\n }) => {\r\n return (\r\n metadata\r\n ?.filter?.((current) => !!current.value)\r\n .map((current) => `${current.id}~${current.type}~${current.value}`)\r\n .join(';') ?? []\r\n );\r\n };\r\n\r\n protected getConfirmDropModalPermissionsString = ({\r\n poolsPermissions,\r\n usersPermissions,\r\n }: {\r\n poolsPermissions: IPoolsPermissions[];\r\n usersPermissions: IUsersPermissions[];\r\n }) => {\r\n let returnString = '';\r\n\r\n poolsPermissions.forEach(\r\n (current) =>\r\n (returnString = `${returnString}${\r\n returnString.length > 0 ? '&' : ''\r\n }docPoolId=${current.poolId}&docPoolName=${\r\n current.poolName\r\n }&docPermType${current.poolId}=${String(current.canUpdate)}`),\r\n );\r\n\r\n usersPermissions.forEach(\r\n (current) =>\r\n (returnString = `${returnString}${\r\n returnString.length > 0 ? '&' : ''\r\n }docUserId=${current.userId}&docUsrLogin=${\r\n current.userLogin\r\n }&docPermType${current.userId}=${String(current.canUpdate)}`),\r\n );\r\n\r\n return returnString;\r\n };\r\n\r\n protected getConfirmDropModalAdditionalMetadataString = (\r\n additionalMetadata: TDocumentMetadata[] | [],\r\n ) => {\r\n return Object.values(additionalMetadata)\r\n .filter((current) => !!current?.value)\r\n .map((current) => `${current.name}~${current.value}`)\r\n .join(';');\r\n };\r\n\r\n protected getDeleteDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getClearTempFilesParameters = returnExactlyTheSame;\r\n\r\n protected getDocumentInfoParameters = returnExactlyTheSame;\r\n\r\n protected getDownloadMultipleDocumentsParameters = returnExactlyTheSame;\r\n\r\n protected getEditDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getLockDocumentParameters = returnExactlyTheSame;\r\n\r\n protected getMarkFileToSignParameters = returnExactlyTheSame;\r\n\r\n protected getProcessDroppedFilesParameters = returnExactlyTheSame;\r\n\r\n protected getProcessDroppedFilesPostdata = returnExactlyTheSame;\r\n\r\n protected getReloadMetadataParameters = returnExactlyTheSame;\r\n\r\n protected getSaveDroppedFilesParameters = returnExactlyTheSame;\r\n\r\n protected filterAlreadyUploadedFiles(\r\n files: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): File[] {\r\n const versioningFile = this.state.versioningFile;\r\n if (versioningFile) return files;\r\n\r\n const uploadedFiles = Object.values(this.state.files).filter(\r\n (file) => Number(file.docId) > 0,\r\n );\r\n const existingFiles: File[] = [];\r\n const nonExistingFiles: File[] = [];\r\n if (conf?.langId) {\r\n const docId = conf.translatingFile?.docId ?? Infinity;\r\n const translationsMap = this.state.translatedFiles.get(String(docId));\r\n const alreadyUploadedToTranslationsFile = translationsMap\r\n ? Array.from(translationsMap.values()).find(\r\n (current) => (current.docName || current.name) === files[0]?.name,\r\n )\r\n : undefined;\r\n if (alreadyUploadedToTranslationsFile) existingFiles.push(files[0]);\r\n } else\r\n files.forEach((file) => {\r\n if (uploadedFiles.find((search) => search.docName === file.name)) {\r\n existingFiles.push(file);\r\n } else nonExistingFiles.push(file);\r\n });\r\n if (existingFiles.length > 0) {\r\n void this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${existingFiles\r\n .map((current) => current.name)\r\n .join(', ')}`,\r\n type: 'warning',\r\n });\r\n return nonExistingFiles;\r\n }\r\n return files;\r\n }\r\n\r\n protected filterByFilesAmountLimit(files: File[]): File[] {\r\n return files.slice(\r\n 0,\r\n addBoundary(this.maxFiles - (this.state.inProgressFiles?.length ?? 0), 0),\r\n );\r\n }\r\n\r\n protected filterAcceptedFiles(\r\n files: File[],\r\n shouldNotify = true,\r\n docTypeId?: string | TDocType,\r\n ): File[] {\r\n const docTypes =\r\n docTypeId !== undefined\r\n ? this.state.allowedTypes.filter((c) => {\r\n return typeof docTypeId === 'string'\r\n ? c.id === docTypeId\r\n : c.id === docTypeId.id;\r\n })\r\n : this.state.allowedTypes;\r\n\r\n if (!docTypes.find((c) => c.docExts === '')) {\r\n const notAllowedFilesBecauseOfExtension: File[] = [];\r\n const notAllowedFilesBecauseOfSize: File[] = [];\r\n let maxSize = Infinity;\r\n const allowedFiles = files.filter((currentFile) => {\r\n const extension = (currentFile.name.match(/\\.(\\w+)$/) ?? [])[1];\r\n\r\n let isAllowed = true;\r\n if (\r\n !docTypes.find((currentDocType) => {\r\n if (\r\n !currentDocType.docExts\r\n .split(';')\r\n .map((current) => current.toLowerCase())\r\n .includes(extension.toLowerCase())\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n ) {\r\n isAllowed = false;\r\n notAllowedFilesBecauseOfExtension.push(currentFile);\r\n }\r\n if (\r\n isAllowed &&\r\n !docTypes.find((currentDocType: any) => {\r\n if (Number(currentDocType.maxSize) < currentFile.size) {\r\n maxSize = Number(currentDocType.maxSize);\r\n return false;\r\n }\r\n return true;\r\n })\r\n ) {\r\n notAllowedFilesBecauseOfSize.push(currentFile);\r\n isAllowed = false;\r\n }\r\n\r\n if (!isAllowed) return false;\r\n\r\n return true;\r\n });\r\n\r\n if (shouldNotify) {\r\n let errorMessage = '';\r\n\r\n if (notAllowedFilesBecauseOfExtension.length > 0) {\r\n const filesNames = notAllowedFilesBecauseOfExtension.reduce(\r\n (accumulated, current) => {\r\n if (accumulated.length === 0) return current.name;\r\n return `${accumulated}, ${current.name}`;\r\n },\r\n '',\r\n );\r\n\r\n errorMessage = `<strong>${getWindow(this.execution).FILES_WRONG_EXT}</strong><br />${filesNames}`;\r\n }\r\n\r\n if (notAllowedFilesBecauseOfSize.length > 0) {\r\n const filesNames = notAllowedFilesBecauseOfSize.reduce(\r\n (accumulated, current) => {\r\n if (accumulated.length === 0) return current.name;\r\n return `${accumulated}, ${current.name}`;\r\n },\r\n '',\r\n );\r\n\r\n if (errorMessage.length > 0)\r\n errorMessage = `${errorMessage} <br /><br />`;\r\n errorMessage = `${errorMessage}${formatMessage(\r\n getWindow(this.execution).FILES_TOO_BIG,\r\n {\r\n TOK1: `<br />${filesNames}`,\r\n TOK2: `${parseAsSize(maxSize)}`,\r\n },\r\n )}`;\r\n }\r\n\r\n if (errorMessage.length > 0)\r\n this.notify({\r\n message: errorMessage,\r\n type: 'warning',\r\n });\r\n }\r\n\r\n return allowedFiles;\r\n }\r\n return files;\r\n }\r\n\r\n protected filterExistingFiles(\r\n files: File[],\r\n conf?: TSaveDroppedFilesConf,\r\n ): File[] {\r\n if (conf?.langId) return files;\r\n\r\n const currentFiles = this.state.inProgressFiles;\r\n const alreadyUploadedFiles = Object.values(this.state.files).filter(\r\n (current) => Number(current.docId) < 0,\r\n );\r\n let alreadyIncludedFileNames = '';\r\n const filteredFiles = files.filter((current) => {\r\n const isIncluded =\r\n currentFiles.findIndex((search) => search.name === current.name) !==\r\n -1 ||\r\n alreadyUploadedFiles.findIndex(\r\n (search) => search.docName === current.name,\r\n ) !== -1;\r\n\r\n if (isIncluded)\r\n alreadyIncludedFileNames = `${alreadyIncludedFileNames}${\r\n alreadyIncludedFileNames.length > 0 ? ', ' : ''\r\n }${current.name}`;\r\n\r\n return !isIncluded;\r\n });\r\n if (alreadyIncludedFileNames.length > 0)\r\n this.notify({\r\n message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${alreadyIncludedFileNames}`,\r\n type: 'warning',\r\n });\r\n return filteredFiles;\r\n }\r\n\r\n protected filterVersioningFiles(\r\n files: File[],\r\n conf?: {\r\n langId?: number;\r\n strictMode?: boolean;\r\n translatingFile?: TUploaderFileInfo;\r\n shouldReset?: boolean;\r\n },\r\n ): File[] {\r\n conf;\r\n const versioningFile = this.state.versioningFile;\r\n if (versioningFile) {\r\n const newFiles = files.filter(\r\n (current) =>\r\n current.name === versioningFile.docName ||\r\n current.name === versioningFile.name,\r\n );\r\n if (newFiles.length === 0) {\r\n this.notify({\r\n type: 'warning',\r\n message: getWindow(this.execution).LBL_DROP_FILE_NAMES_NOT_MATCH,\r\n });\r\n }\r\n return newFiles;\r\n }\r\n\r\n return files;\r\n }\r\n\r\n public parseFileDefinition = (file: TFileUploaded): TUploaderFileInfo => {\r\n return {\r\n ...parseFileDefinition(this.execution, file, false),\r\n canEdit: file.canEdit || file.canWrite,\r\n canRead: file.canRead,\r\n };\r\n };\r\n\r\n public getLoadFileSystemStructureTree(): Record<string, unknown> {\r\n return {\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n docTypePermittedObjType: this.type,\r\n };\r\n }\r\n\r\n public getLoadFilesForFolderParameters(): Record<string, unknown> {\r\n return {\r\n useDocTypePermitted: true,\r\n docTypePermittedObjId: this.docTypePermittedObjId,\r\n docTypePermittedObjType: this.type,\r\n };\r\n }\r\n}\r\n","import { downloadUrl } from '@apia/util';\r\nimport { makeApiaUrl } from '../../../util';\r\nimport { File as ExeFile } from '../FormsExecution/fields';\r\nimport {\r\n TFileUploaded,\r\n TModalConfig,\r\n TSaveDroppedFilesConf,\r\n TUploaderFileInfo,\r\n} from './types';\r\nimport { parseFileDefinition, UploaderApi } from './UploaderApi';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport class FormsUploader extends UploaderApi {\r\n constructor(\r\n public execution: Execution,\r\n public type: 'E' | 'P',\r\n public modalConfig: TModalConfig,\r\n public field: ExeFile,\r\n ) {\r\n super(\r\n execution,\r\n `${type}_${field.attribute.id}_${field.definition.index ?? ''}`,\r\n type,\r\n modalConfig,\r\n );\r\n this.isEditionMode = getWindow(this.execution).IS_EDIT_GRID_MODAL\r\n ? true\r\n : undefined;\r\n }\r\n isEditionMode;\r\n index() {\r\n return this.field.definition.multIdx ?? this.field.definition.index ?? 0;\r\n }\r\n elemId() {\r\n return `dropUpprDiv${this.field.getForm().definition.frmParent}_${this.field.getForm().definition.id}_${this.field.definition.id}_${this.index()}${\r\n getWindow(this.execution).IS_EDIT_GRID_MODAL ? '_true_Mdl' : ''\r\n }`;\r\n }\r\n\r\n protected filterByFilesAmountLimit(files: File[]): File[] {\r\n const inProgressFiles = this.state.inProgressFiles;\r\n if (inProgressFiles.length === 1 && files.length)\r\n if (inProgressFiles[0].name !== files[0].name) {\r\n this.state.inProgressFiles = [];\r\n } else return [];\r\n return files.slice(0, 1);\r\n }\r\n\r\n protected getFormParameters() {\r\n return {\r\n frmId: this.field.getForm().definition.id,\r\n frmParent: this.field.getForm().definition.frmParent,\r\n attId: this.field.attribute.id,\r\n index: this.index(),\r\n editionMode: this.isEditionMode,\r\n prefix: this.field.getForm().definition.frmParent,\r\n };\r\n }\r\n\r\n evaluateDeleteDocumentResult(\r\n result: undefined | { success: boolean },\r\n ): boolean {\r\n return !!result?.success;\r\n }\r\n\r\n getAjaxUrl(): string {\r\n return '/apia.execution.FormAction.run';\r\n }\r\n\r\n getAllowedTypesData() {\r\n return {\r\n postData: {\r\n docTypeId: this.field.properties.docType,\r\n forDropElem: true,\r\n },\r\n queryData: {\r\n elemType: this.elemId(),\r\n fromFormElem: true,\r\n docTypeId: this.field.properties.docType,\r\n frmOut: true,\r\n ...this.getFormParameters(),\r\n },\r\n };\r\n }\r\n\r\n getAjaxUploadFileStatusParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n forceDocTypeId: this.field.properties.docType,\r\n\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getAjaxUploadStartParameters = ({\r\n useDocTypePermitted,\r\n docTypePermittedObjType,\r\n docTypePermittedObjId,\r\n ...defaultParameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n forceDocTypeId: this.field.properties.docType,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getCheckLockDocumentParameters = ({\r\n prefix,\r\n ...parameters\r\n }: Record<string, unknown>) => {\r\n return {\r\n ...parameters,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getCheckSignatureParameters = (parameters: Record<string, unknown>) => {\r\n const { frmId, frmParent } = this.getFormParameters();\r\n return {\r\n ...parameters,\r\n frmId,\r\n frmParent,\r\n };\r\n };\r\n\r\n getClearTempFilesParameters = ({\r\n elemType,\r\n ...rest\r\n }: Record<string, unknown>) => {\r\n const { frmId, frmParent, index, attId } = this.getFormParameters();\r\n return {\r\n ...rest,\r\n frmParent,\r\n frmId,\r\n attId,\r\n index,\r\n };\r\n };\r\n\r\n getConfirmDropModalParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const { frmParent } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n elemType: frmParent,\r\n forceDocTypeId: this.field.properties.docType,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getConfirmDropModalPostdata = ({\r\n pe,\r\n ...parameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n const { editionMode } = this.getFormParameters();\r\n return {\r\n ...parameters,\r\n editionMode,\r\n };\r\n };\r\n\r\n getDeleteDocumentParameters = ({\r\n prefix,\r\n isAjax,\r\n ...currentParameters\r\n }: Record<string, unknown>) => {\r\n const { prefix: pre, ...rest } = this.getFormParameters();\r\n return {\r\n ...currentParameters,\r\n ...rest,\r\n };\r\n };\r\n\r\n getDocumentInfoParameters = (parameters: Record<string, unknown>) => {\r\n return {\r\n ...parameters,\r\n ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX,\r\n };\r\n };\r\n\r\n getEditDocumentParameters = ({ action, docId }: Record<string, unknown>) => {\r\n const { prefix, editionMode, ...rest } = this.getFormParameters();\r\n return {\r\n action,\r\n ...rest,\r\n docId,\r\n ajaxUrl: 'apia.execution.FormAction.run',\r\n };\r\n };\r\n\r\n getLoadFilesForFolderParameters: () => Record<string, unknown> = () => {\r\n return {\r\n useDocTypePermitted:\r\n this.state.allowedTypes.length === 1 ? true : undefined,\r\n docTypeForcedId:\r\n this.state.allowedTypes.length === 1\r\n ? this.state.allowedTypes[0].id\r\n : undefined,\r\n txtCantDoc: 0,\r\n loadFolders: true,\r\n };\r\n };\r\n\r\n getLoadFileSystemStructureTree = () => ({\r\n useDocTypePermitted: this.state.allowedTypes.length === 1,\r\n docTypeForcedId: this.docTypePermittedObjId,\r\n });\r\n\r\n getLockDocumentParameters = ({\r\n prefix,\r\n isAjax,\r\n ...currentParameters\r\n }: Record<string, unknown>) => {\r\n const { prefix: pre, ...rest } = this.getFormParameters();\r\n return {\r\n ...currentParameters,\r\n ...rest,\r\n };\r\n };\r\n\r\n getMarkFileToSignParameters = ({\r\n docId,\r\n prefix,\r\n ...defaultParameters\r\n }: Record<string, unknown>) => {\r\n return {\r\n ...defaultParameters,\r\n action: 'sign',\r\n\r\n fldId: this.field.definition.id,\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getProcessDroppedFilesParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const { prefix, ...rest } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n elemType: this.elemId(),\r\n fromFormElem: true,\r\n ...rest,\r\n };\r\n };\r\n\r\n getProcessDroppedFilesPostdata = ({\r\n useDocTypePermitted,\r\n docTypePermittedObjId,\r\n docTypePermittedObjType,\r\n ...parameters\r\n }: Record<string, unknown>): Record<string, unknown> => {\r\n return { ...parameters, editionMode: this.getFormParameters().editionMode };\r\n };\r\n\r\n getReloadMetadataParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n return {\r\n ...defaultParameters,\r\n ...(getWindow(this.execution).IS_EDIT_GRID\r\n ? { editionMode: true }\r\n : null),\r\n ...this.getFormParameters(),\r\n };\r\n };\r\n\r\n getSaveDroppedFilesParameters = (\r\n defaultParameters: Record<string, unknown>,\r\n ): Record<string, unknown> => {\r\n const elemId = this.elemId();\r\n const { prefix, ...rest } = this.getFormParameters();\r\n return {\r\n ...defaultParameters,\r\n fromFormElem: true,\r\n elemType: elemId,\r\n elemId,\r\n ...rest,\r\n };\r\n };\r\n\r\n async downloadVersion(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'downloadDocument',\r\n docId: file.downloadDocId,\r\n version,\r\n }),\r\n );\r\n }\r\n\r\n async downloadDocument(fileId: string, version?: string): Promise<void> {\r\n const file = this.getDocument(fileId);\r\n const { prefix, ...rest } = this.getFormParameters();\r\n if (!file) return;\r\n\r\n if (\r\n getWindow(this.execution).IN_MONITOR ||\r\n (await this.checkWebDavLock(file.docId))\r\n )\r\n await downloadUrl(\r\n makeApiaUrl(this.execution, {\r\n action: 'download',\r\n docId: file.downloadDocId,\r\n ajaxUrl: '/page/generic/downloadAttDoc.jsp',\r\n version,\r\n ...rest,\r\n }),\r\n );\r\n }\r\n\r\n loadCurrentDocuments(): Promise<void> {\r\n return null as any as Promise<void>;\r\n }\r\n\r\n public parseFileDefinition = (file: TFileUploaded): TUploaderFileInfo => {\r\n return {\r\n ...parseFileDefinition(\r\n this.execution,\r\n file,\r\n this.field.properties.reqSign || false,\r\n ),\r\n markedToSign: this.field.properties.reqSign || file.markedToSign,\r\n canEdit: file.canEdit ?? true,\r\n canRead: file.canRead ?? true,\r\n };\r\n };\r\n\r\n async saveDroppedFiles(\r\n unprocessedFiles: File[],\r\n conf?: TSaveDroppedFilesConf | undefined,\r\n ): Promise<boolean> {\r\n return await super.saveDroppedFiles(unprocessedFiles, conf);\r\n }\r\n}\r\n","import { labels } from '../../../../../util/labels/labels';\r\nimport { parseFakeJSON } from '../../../../../util/other/parseFakeJSON';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\nimport { TApiaFileProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport {\r\n FormsUploader,\r\n TModalConfig,\r\n TUploaderFileInfo,\r\n} from '../../../Uploader';\r\nimport { Form } from '../../Form';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class File extends FieldWithAttribute<TApiaFileProperties> {\r\n uploader: FormsUploader = {} as FormsUploader;\r\n\r\n async init(form: Form) {\r\n await super.init(form);\r\n\r\n this.uploader = new FormsUploader(\r\n this.form.execution,\r\n this.getForm().definition.frmParent,\r\n {\r\n allowDocumentsMonitor: !this.properties.fileNotShowDocMon,\r\n allowPickFromDirectories:\r\n this.properties.fileShwFoldTreeBtn !== undefined,\r\n collapseDirectories: !!this.properties.fileCollapseFldStrc,\r\n collapseMetadata: !!this.properties.fileCollapseMetadata,\r\n collapsePermissions: !!this.properties.fileCollapsePermission,\r\n defaultDirectory: this.properties.fileDefFolder,\r\n monitorId: this.properties.documentMonitorCus,\r\n oneClickUpload: !!this.properties.oneClickUpload,\r\n rootFolder: this.properties.fileRootFolder,\r\n showDirectoriesStructure: this.properties.fileShwFoldTreeStr === false,\r\n showExpDate: this.properties.fileExpDate === true,\r\n showMetadata: !this.properties.hideDocMetadata,\r\n showPermissions: !this.properties.hideDocPermissions,\r\n } as TModalConfig,\r\n this,\r\n );\r\n\r\n this.uploader.on('fileUploaded', () => {\r\n this.setError('');\r\n });\r\n\r\n this.uploader.init();\r\n if (this.definition.file_prp) {\r\n const files = parseFakeJSON(this.definition.file_prp) as Record<\r\n number,\r\n TUploaderFileInfo\r\n >;\r\n const mainFile = files[0];\r\n if (mainFile) {\r\n this.uploader.state.files = {\r\n [mainFile.docId]: { ...mainFile, docName: mainFile.name },\r\n };\r\n const otherEntries = Object.entries(files).filter(([k]) => k !== '0');\r\n if (otherEntries.length) {\r\n otherEntries.forEach(([k, file]) => {\r\n this.uploader.setTranslationFile(\r\n { ...file, docName: file.name },\r\n mainFile.docId,\r\n Number(k),\r\n );\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (\r\n this.properties.disabled ||\r\n this.properties.noModify ||\r\n this.properties.visibilityHidden\r\n ) {\r\n return true;\r\n } else if (\r\n this.properties.required &&\r\n Object.values(this.uploader.state.files).length == 0\r\n ) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n } else if (this.getForm().definition.frmParent !== 'P') {\r\n const langEntries: [number, string][] = Object.entries(\r\n parseFakeJSON(this.form.definition.langs || '{}') as Record<\r\n number,\r\n string\r\n >,\r\n ).map(([key, value]) => [Number(key), value]);\r\n\r\n const innerMap = [...this.uploader.state.translatedFiles.values()][0];\r\n\r\n const translationValid =\r\n !this.properties.required ||\r\n !this.getForm().definition.langs ||\r\n langEntries.every(([langId, langLabel]) => {\r\n const hasTranslation = innerMap?.has(langId);\r\n if (!hasTranslation) {\r\n this.state.validation.errorMessage = labels.errorTranslateRequired(\r\n this.form.execution,\r\n langLabel,\r\n );\r\n }\r\n return hasTranslation;\r\n });\r\n return translationValid;\r\n }\r\n return true;\r\n }\r\n\r\n public async setValue(\r\n _newValue: any,\r\n _options?:\r\n | Partial<{ comparator: Comparator<any>; synchronize: boolean }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n return true;\r\n }\r\n\r\n public loadFromDefinition(def: string) {\r\n if (def) {\r\n const uploadedFile = parseFakeJSON(def ?? '')[0] as TUploaderFileInfo;\r\n\r\n if (uploadedFile) {\r\n this.uploader.state.files = {\r\n [uploadedFile.docId]: {\r\n ...uploadedFile,\r\n docName: uploadedFile.name,\r\n },\r\n };\r\n } else {\r\n this.uploader.state.files = {};\r\n }\r\n }\r\n }\r\n\r\n public async downloadDocument(): Promise<void> {\r\n await this.uploader.downloadDocument(\r\n Object.values(this.uploader.state.files)[0].docId,\r\n );\r\n }\r\n}\r\n","export function noNaN(number: unknown, defaultReturn = 0) {\r\n const returnNumber = Number(number);\r\n if (number === null || Number.isNaN(returnNumber)) return defaultReturn;\r\n return returnNumber;\r\n}\r\n","import { makeObservable, observable, runInAction } from 'mobx';\r\nimport { Grid } from '.';\r\n\r\ntype GridFooterHandlerState = {\r\n isSortUpDisabled: boolean;\r\n isSortDownDisabled: boolean;\r\n};\r\n\r\nexport class GridFooterHandler {\r\n state: GridFooterHandlerState = {\r\n isSortUpDisabled: true,\r\n isSortDownDisabled: true,\r\n };\r\n\r\n constructor(private grid: Grid) {\r\n makeObservable(this, { state: observable });\r\n this.init();\r\n }\r\n\r\n #unsubscribeTableEvents = () => {};\r\n private init() {\r\n this.#unsubscribeTableEvents();\r\n\r\n const controller = this.grid.controller;\r\n\r\n const u2 = controller.on('selectionChange', (selection) => {\r\n const { paged, currentPage, pages } = this.grid.properties;\r\n const isFirstPage = paged ? String(currentPage) === '1' : false;\r\n const isLastPage = paged ? String(currentPage) === String(pages) : false;\r\n\r\n runInAction(() => {\r\n this.state.isSortUpDisabled =\r\n selection.length === 0 ||\r\n !!(paged\r\n ? selection.find((c) => c.getContainer()?.getRowIndex(c) === 0) &&\r\n isFirstPage\r\n : selection.find((c) => c.getContainer()?.getRowIndex(c) === 0));\r\n this.state.isSortDownDisabled =\r\n selection.length === 0 ||\r\n !!(paged\r\n ? selection.find(\r\n (c) =>\r\n c.getContainer()?.getRowIndex(c) ===\r\n controller.body.rows.length - 1,\r\n ) && isLastPage\r\n : selection.find(\r\n (c) =>\r\n c.getContainer()?.getRowIndex(c) ===\r\n controller.body.rows.length - 1,\r\n ));\r\n });\r\n });\r\n this.#unsubscribeTableEvents = () => {\r\n u2();\r\n };\r\n }\r\n\r\n get showAddButton() {\r\n const { gridQuery, hideGridButtons, hideAddButton, hideIncludeButton } =\r\n this.grid.properties;\r\n return (\r\n !gridQuery && !hideGridButtons && !hideAddButton && !hideIncludeButton\r\n );\r\n }\r\n get showDelButton() {\r\n const { gridQuery, hideGridButtons, hideDelButton, hideIncludeButton } =\r\n this.grid.properties;\r\n return (\r\n !gridQuery && !hideGridButtons && !hideDelButton && !hideIncludeButton\r\n );\r\n }\r\n get showSortButtons() {\r\n const { gridQuery, hideGridButtons, hideOrderButton } =\r\n this.grid.properties;\r\n return !gridQuery && !hideGridButtons && !hideOrderButton;\r\n }\r\n get isSortUpDisabled() {\r\n return this.state.isSortUpDisabled || this.grid.state.isLoading;\r\n }\r\n get isSortDownDisabled() {\r\n return this.state.isSortDownDisabled || this.grid.state.isLoading;\r\n }\r\n get isAddDisabled() {\r\n return this.grid.state.isLoading;\r\n }\r\n get isDeleteDisabled() {\r\n return (\r\n this.grid.controller.getState('selection').size === 0 ||\r\n this.grid.state.isLoading\r\n );\r\n }\r\n\r\n async sortUp() {\r\n this.grid.sortUp();\r\n }\r\n\r\n async sortDown() {\r\n this.grid.sortDown();\r\n }\r\n\r\n async addRow() {\r\n await this.grid.addRow();\r\n }\r\n\r\n async deleteSelectedRows() {\r\n this.grid.deleteRows();\r\n }\r\n}\r\n","import { Cell } from '@apia/table2-controller';\r\nimport type { Field } from '../../Field';\r\n\r\nexport class GridCell extends Cell {\r\n getField() {\r\n return this.getState('properties')?.field as Field;\r\n }\r\n}\r\n","import { Cell } from '@apia/table2-controller';\r\nimport type { GridEditionModal } from './GridEditionModal';\r\nimport type { Grid } from '.';\r\n\r\nexport class AdditionalCell extends Cell {\r\n constructor(\r\n public grid: Grid,\r\n public getIndex: () => number,\r\n public remove: () => unknown,\r\n public openEditionModal?: (handler: GridEditionModal) => unknown,\r\n ) {\r\n super({ colName: 'additional' });\r\n }\r\n\r\n public get hasEditionModal() {\r\n return this.openEditionModal !== undefined;\r\n }\r\n}\r\n","import { Cell, type CellState } from '@apia/table2-controller';\r\nimport type { Grid } from '.';\r\nimport { Field } from '../../Field';\r\n\r\ntype HeaderCellState = CellState;\r\n\r\nexport class HeaderCell extends Cell<HeaderCellState> {\r\n constructor(\r\n public grid: Grid,\r\n state: CellState,\r\n ) {\r\n super(state);\r\n }\r\n\r\n sort() {\r\n this.grid.fireEvent('gridSort');\r\n }\r\n\r\n getField() {\r\n return this.getState('properties')?.field as Field;\r\n }\r\n}\r\n","import type { Field } from '../../Field';\r\n\r\n/**\r\n * Esta clase se encarga de recordar los campos que ya fueron accedidos,\r\n * optimizando el tiempo de acceso en grillas de gran tamaño.\r\n */\r\nexport class FieldsCache {\r\n private cached: Record<number, Record<number | string, Field<any>>> = {};\r\n\r\n private getIndex(index: number) {\r\n if (!this.cached[index]) this.cached[index] = {};\r\n return this.cached[index];\r\n }\r\n\r\n clear() {\r\n this.cached = {};\r\n }\r\n\r\n clearIndex(index: number) {\r\n delete this.cached[index];\r\n }\r\n\r\n get(index: number, id: number | string) {\r\n return this.getIndex(index)[id];\r\n }\r\n\r\n set(index: number, id: number | string, field: Field<any>) {\r\n this.getIndex(index)[id] = field;\r\n }\r\n\r\n swap(index1: number, index2: number) {\r\n const row1 = this.getIndex(index1);\r\n this.cached[index1] = this.getIndex(index2);\r\n this.cached[index2] = row1;\r\n }\r\n\r\n truncate(index: number) {\r\n Object.keys(this.cached).forEach((c) => {\r\n if (Number.parseInt(c) >= index) {\r\n delete this.cached[Number.parseInt(c)];\r\n }\r\n });\r\n }\r\n}\r\n","import { shallowEqual } from '@apia/util';\r\nimport { makeApiaUrl, post } from '../../../../../util';\r\nimport { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaInputProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaModalInputDefinition } from '../../../../InitialData/types/fields/TApiaModalInputDefinition';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { isFieldShowAsText } from '../../util/isFieldShowAsText';\r\nimport { SetValueOptions } from '../../types';\r\nimport { makeObservable, observable } from 'mobx';\r\n\r\ntype InputEvents = 'onChange' | 'onModalReturn';\r\ntype ModalInputValue = { showValue: string; storeValue?: string };\r\n\r\nexport class ModalInput extends FieldWithAttribute<\r\n TApiaInputProperties,\r\n ModalInputValue\r\n> {\r\n isLoading = false;\r\n\r\n constructor({ value, ...definition }: TApiaModalInputDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n ...definition.properties,\r\n },\r\n value: { storeValue: value, showValue: definition.qry_show_value },\r\n });\r\n\r\n makeObservable(this, { isLoading: observable });\r\n }\r\n\r\n fireEvent(\r\n eventName: InputEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n return (\r\n this.getValue().showValue !== '' && this.getValue().storeValue !== ''\r\n );\r\n }\r\n\r\n public async setValueFromInputWrite(value: string) {\r\n this.isLoading = true;\r\n try {\r\n if (\r\n isFieldShowAsText(this) ||\r\n shallowEqual(value, this.getValue().showValue) ||\r\n value === ''\r\n )\r\n return;\r\n if (value !== this.getValue().showValue) {\r\n const result = await post<{\r\n ret_value: { show_value: string; value: string };\r\n }>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n action: 'checkModalValue',\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n }),\r\n {\r\n postData: {\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n fldId: this.definition.id,\r\n attId: this.attribute.id,\r\n qryId: this.definition.qryId,\r\n index: this.definition.index,\r\n value,\r\n },\r\n postDataTreatment: 'stringify',\r\n },\r\n );\r\n\r\n if (result?.data?.ret_value) {\r\n const setValueResult = await this.setValue({\r\n storeValue: result?.data?.ret_value.value,\r\n showValue: result?.data?.ret_value.show_value,\r\n });\r\n if (setValueResult) {\r\n this.fireEvent('onChange');\r\n }\r\n this.setError('');\r\n } else {\r\n this.setValue({ showValue: '', storeValue: '' });\r\n this.setError(getWindow(this.form.execution).MSG_VAL_NOT_FOUND);\r\n }\r\n }\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n public async setValueFromModalSelection(rowId: string) {\r\n this.isLoading = true;\r\n\r\n try {\r\n const result = await post<{ row: { cell: string[] } }>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.query.ModalAction.run',\r\n action: 'getValues',\r\n }),\r\n { postData: { id: rowId }, postDataTreatment: 'stringify' },\r\n );\r\n\r\n if (result?.data?.row?.cell) {\r\n const setValueResult = await this.setValue({\r\n storeValue: result.data.row.cell[0],\r\n showValue: result.data.row.cell[1],\r\n });\r\n this.form.execution.setLastModalReturn(result.data.row.cell);\r\n\r\n if (setValueResult) {\r\n this.fireEvent('onModalReturn');\r\n this.fireEvent('onChange');\r\n }\r\n }\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.errorMessage) return false;\r\n\r\n const isValid =\r\n !!this.getValue().storeValue ||\r\n !this.properties.required ||\r\n this.properties.inputAsText ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n if (!isValid) {\r\n this.state.validation.errorMessage = labels.errorFieldRequired(\r\n this.form.execution,\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n public setValue(newValue: any, options?: SetValueOptions) {\r\n if (\r\n !options?.force &&\r\n (isFieldShowAsText(this) || shallowEqual(newValue, this.getValue()))\r\n )\r\n return Promise.resolve(true);\r\n\r\n this.state.value = newValue;\r\n this.state.validation.errorMessage = null;\r\n\r\n if (options?.synchronize === false) {\r\n this.lastSynchronizationValue = newValue;\r\n return Promise.resolve(true);\r\n }\r\n\r\n return this.synchronize(newValue).then((res) => {\r\n if (res) {\r\n if (options?.markAsDirty !== false) {\r\n this.form.execution.state.hasChangedAnything = true;\r\n }\r\n return true;\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: ModalInputValue,\r\n ): IApiaApiPostConfig<any> {\r\n const storeIdValue = this.properties.storeMdlQryResult;\r\n\r\n return {\r\n ...super.getSynchronizePostConfiguration(value),\r\n postData: {\r\n value: storeIdValue\r\n ? [this.getValue().storeValue!, this.getValue().showValue]\r\n : this.getValue().storeValue,\r\n },\r\n };\r\n }\r\n}\r\n","import { TApiaHiddenProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class Hidden extends FieldWithAttribute<TApiaHiddenProperties> {}\r\n","import { makeApiaUrl, parseXml, post } from '../../../../../util';\r\n\r\nimport type { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { noNaN } from '../../../../../util/number/noNaN';\r\nimport type {\r\n IApiaDataGridColumn,\r\n TApiaGridDefinition,\r\n TApiaGridField,\r\n} from '../../../../InitialData/types/fields/TApiaGridDefinition';\r\nimport { actions } from '../../constants/actions';\r\nimport type {\r\n FieldState,\r\n GridActionResponse,\r\n GridColumn,\r\n GridDefinition,\r\n GridEvents,\r\n GridProps,\r\n GridState,\r\n} from './types';\r\nimport { GridEditionModal } from './GridEditionModal';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport {\r\n FocusControllerPlugin,\r\n Row,\r\n TableController,\r\n} from '@apia/table2-controller';\r\nimport type { TApiaFieldBaseDefinition } from '../../../../InitialData/types/TApiaField';\r\nimport { Field } from '../../Field';\r\nimport type { Form } from '../../Form';\r\nimport { parseFakeJSON } from '../../../../../util/other/parseFakeJSON';\r\nimport { GridFooterHandler } from './GridFooterHandler';\r\nimport { GridCell } from './GridCell';\r\nimport { arrayOrArray, Mutex } from '@apia/util';\r\nimport type { FireEventParameters } from '../../types';\r\nimport { AdditionalCell } from './AdditionalCell';\r\nimport { setAjaxFormResponse } from '../../events/setAjaxFormResponse';\r\nimport { File } from '../File';\r\nimport { HeaderCell } from './HeaderCell';\r\nimport { TApiaFieldCommonProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldsCache } from './FieldsCache';\r\nimport { ModalInput } from '../ModalInput';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\nimport { getDocument } from '../../../../../util/dom/getDocument';\r\nimport { Hidden } from '../Hidden';\r\nimport type { Select } from '../Select';\r\n\r\nasync function inlineCaller<T>(cb: () => T, _t: number): Promise<T> {\r\n return cb();\r\n}\r\n\r\nasync function inlineTimeout(cb: () => unknown, _t: number): Promise<true> {\r\n setTimeout(cb, _t);\r\n\r\n return Promise.resolve(true);\r\n}\r\n\r\nexport class Grid extends Field<GridProps, GridDefinition, GridState> {\r\n private rowId = 0;\r\n\r\n protected cache = new FieldsCache();\r\n protected mutex = new Mutex();\r\n protected newRowStates: FieldState[][] = [];\r\n protected initialStates: FieldState[][];\r\n protected fieldsDefinitions: TApiaFieldBaseDefinition<Record<string, any>>[];\r\n\r\n protected readonly managedAttIds = new Set<string | number>();\r\n protected readonly managedAttNames = new Set<string>();\r\n protected readonly managedFieldIds = new Set<string | number>();\r\n protected readonly managedFieldsNames = new Set<string>();\r\n\r\n protected _editionModalHandler: GridEditionModal | null = null;\r\n protected readonly _footerController: GridFooterHandler;\r\n protected readonly tableController: TableController = new TableController({\r\n allowEdition: true,\r\n allowSelection: true,\r\n isSelectionMultiple: true,\r\n });\r\n\r\n public get controller() {\r\n return this.tableController;\r\n }\r\n\r\n public get currentPage() {\r\n return this.properties.currentPage;\r\n }\r\n\r\n public get editionModalHandler() {\r\n return this._editionModalHandler;\r\n }\r\n\r\n /**\r\n * Returns the final index of the current page\r\n */\r\n public get finalIndex() {\r\n return (\r\n this.controller.body.rows\r\n .at(-1)\r\n ?.cells.find((c) => c instanceof GridCell) as GridCell\r\n ).getField().definition.index!;\r\n }\r\n\r\n public get footerController() {\r\n return this._footerController;\r\n }\r\n\r\n public get header() {\r\n return this.state.header;\r\n }\r\n\r\n public get isPaged() {\r\n return this.properties.paged;\r\n }\r\n\r\n public get length() {\r\n return this.tableController.body.rows.length;\r\n }\r\n\r\n public get minIndex() {\r\n return Number.isFinite(this.properties.pageSize)\r\n ? (this.properties.currentPage - 1) * this.properties.pageSize\r\n : 0;\r\n }\r\n\r\n public get pageCount() {\r\n return this.properties.pages;\r\n }\r\n\r\n public get pageSize() {\r\n return this.properties.pageSize;\r\n }\r\n\r\n public get selectedIndices() {\r\n return [...this.tableController.getState('selection').values()].map((c) =>\r\n c.getIndex(),\r\n );\r\n }\r\n\r\n public get selectedItems() {\r\n return this.selectedIndices.map((current) => this.getRow(current)!);\r\n }\r\n\r\n public get startIndex() {\r\n const pageSize = this.properties.pageSize;\r\n return noNaN((this.properties.currentPage - 1) * pageSize, 0);\r\n }\r\n\r\n constructor({ properties, field, ...definition }: TApiaGridDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n currentPage: noNaN(definition.curPage, 1),\r\n maxRows: properties.maxRecords || Infinity,\r\n paged: false,\r\n pages: noNaN(definition.pages, 1),\r\n pageSize: noNaN(\r\n properties.pagedGridSize,\r\n properties.paged ? 5 : Infinity,\r\n ),\r\n\r\n shownDeleteButtons: new Map(),\r\n shownEditionButtons: new Map(),\r\n ...properties,\r\n hideDocInfoButton: String(properties.hideDocInfoButton) === 'true',\r\n },\r\n });\r\n\r\n this._footerController = new GridFooterHandler(this);\r\n\r\n const fieldsArray = arrayOrArray(field);\r\n this.initialStates = fieldsArray\r\n .map((current) =>\r\n current.fieldValue || current.row\r\n ? arrayOrArray(current.fieldValue || current.row)\r\n : undefined,\r\n )\r\n .filter(Boolean) as FieldState[][];\r\n this.fieldsDefinitions = fieldsArray.map(\r\n ({ fieldValue, properties, ...current }) => {\r\n return { ...current, properties: parseFakeJSON(properties) };\r\n },\r\n );\r\n\r\n this.state.header = arrayOrArray(definition.gridHeader.col).map((c) => ({\r\n fldId: c.fldId,\r\n label: c.colTitle,\r\n title: c.title,\r\n width: c.colWidth || this.resolveHeaderWidth(c),\r\n hidden: false,\r\n required: false,\r\n fldType: c.fldType,\r\n }));\r\n this.state.isLoading = false;\r\n this.state.isMaximized = false;\r\n\r\n this.controller.on('columnClick', (col) => {\r\n this.sortColumn((col.getState('properties')!.col as GridColumn).fldId);\r\n });\r\n }\r\n\r\n private resolveHeaderWidth(c: IApiaDataGridColumn) {\r\n if (\r\n c.fldType === '9' ||\r\n (c.fldType === '1' && c.dataType === 'D') ||\r\n (c.fldType === '1' && c.hasQuery)\r\n ) {\r\n return '200px';\r\n }\r\n\r\n return '150px';\r\n }\r\n\r\n protected getGridActionFromEventName(eventName: GridEvents) {\r\n switch (eventName) {\r\n case 'gridAdd':\r\n return 'add';\r\n case 'gridColumnSelect':\r\n return undefined;\r\n case 'gridDelete':\r\n return 'delete';\r\n case 'gridSort':\r\n return undefined;\r\n }\r\n }\r\n\r\n protected fireServerEvent(\r\n eventName: GridEvents,\r\n params?: FireEventParameters,\r\n ): Promise<boolean> {\r\n return super.fireServerEvent(eventName, {\r\n gridAction: this.getGridActionFromEventName(eventName),\r\n ...params,\r\n });\r\n }\r\n\r\n /**\r\n * Grid methods\r\n */\r\n public async addRow(): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridAdd')) {\r\n if (this.hasServerNoAjaxEventsOfType('gridAdd')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridAdd', {});\r\n } else {\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'add',\r\n addRowsCount: 1,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridAdd'),\r\n },\r\n });\r\n\r\n /**\r\n * Cuando no tengo la definición de la nueva fila, debo obtenerla.\r\n */\r\n const response = await res;\r\n if (response?.data?.gridXml) {\r\n /**\r\n * Si la definición vuelve del server, la establezco en una variable\r\n * local y la uso en el futuro, cada vez que se crea una nueva fila.\r\n */\r\n const xml = parseXml(response.data.gridXml) as TApiaGridDefinition;\r\n\r\n const fieldsArray = arrayOrArray(xml.field);\r\n this.newRowStates = fieldsArray\r\n .map((current) =>\r\n current.fieldValue || current.row\r\n ? arrayOrArray(current.fieldValue || current.row)\r\n : undefined,\r\n )\r\n .filter(Boolean) as FieldState[][];\r\n } else {\r\n /**\r\n * En caso de error, tiro excepción con o sin mensaje, pero la excepción\r\n * es necesaria para detener el flujo actual.\r\n */\r\n throw new Error(\r\n !getWindow(this.form.execution).SERVER_MODE\r\n ? 'Something went wrong on the add row action.'\r\n : '',\r\n );\r\n }\r\n\r\n const addedRow = await this.addRowFromDefinitions(\r\n true,\r\n this.fieldsDefinitions.map((c, i) => ({\r\n ...c,\r\n ...this.newRowStates[i][0],\r\n })),\r\n );\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de agregar la fila en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridAdd')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(async () => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n (await addedRow).remove();\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }, !this.hasServerAjaxEventsOfType('gridAdd'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public closeEditionModal() {\r\n this._editionModalHandler?.close();\r\n this._editionModalHandler = null;\r\n this.refresh();\r\n }\r\n\r\n public async deleteAllRows() {\r\n this.cache.clear();\r\n\r\n return this.asyncAction(async () => {\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'delete',\r\n fireEvents: this.hasServerAjaxEventsOfType('gridDelete'),\r\n },\r\n });\r\n\r\n /**\r\n * Me copio el array de filas y la selección actual para poder restaurarlo\r\n * en caso de error.\r\n */\r\n const currentRows = [...this.tableController.body.rows];\r\n const currentSelection = new Set(\r\n this.tableController.getState('selection'),\r\n );\r\n\r\n this.controller.body.clear();\r\n this.tableController.clearSelection();\r\n\r\n if (\r\n this.tableController.body.rows.length === 0 &&\r\n this.getProperty('includeFirstRow')\r\n ) {\r\n /**\r\n * La propiedad includeFirstRow obliga a un comportamiento diferente.\r\n * Con el llamado a actualRefreshAction nos aseguramos de establecer\r\n * sincronía con el servidor. Además, esta acción debería ser relativamente\r\n * económica debido a que no debería traer más que una fila.\r\n */\r\n await res;\r\n await this.actualRefreshAction();\r\n }\r\n\r\n /**\r\n * Restauro la selección a un nuevo índice. Este índice se corresponde con el\r\n * mínimo índice eliminado si es que este aún existe, sino se intenta con el\r\n * índice inmediatamente anterior. Si no existe, no hay ninguna fila para seleccionar.\r\n *\r\n * El foco sin embargo se restaura siempre, en caso de no haber filas seleccionables,\r\n * se restablece en el cabezal de la tabla.\r\n */\r\n (\r\n this.tableController.body.getRowByIndex(0) ||\r\n this.tableController.body.getRowByIndex(0 - 1)\r\n )?.toggleSelection(true);\r\n (\r\n this.tableController.body.getRowByIndex(0) ||\r\n this.tableController.body.getRowByIndex(0 - 1) ||\r\n this.tableController.head.getRowByIndex(0)\r\n ).scrollIntoView();\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de eliminar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n /**\r\n * En caso de error, restauro la selección y las filas eliminadas.\r\n */\r\n this.tableController.body.setState('rows', currentRows);\r\n this.tableController.setState('selection', currentSelection);\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * @param index Si se pasa, se borran el o los índices provistos. Sino, se borran las filas seleccionadas, si es que hay alguna.\r\n */\r\n public async deleteRows(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridDelete')) {\r\n /**\r\n * Debo igualar la selección de la tabla con los índices a eliminar.\r\n * De esta manera garantizo su correcto acceso desde los eventos script.\r\n */\r\n if (undefined === index) {\r\n index = [...this.controller.getState('selection')].map((c) => {\r\n return c.getIndex();\r\n });\r\n } else {\r\n this.controller.setSelection(arrayOrArray(index));\r\n }\r\n\r\n const deletingIndices = arrayOrArray(index).sort((a, b) => b - a);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridDelete')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridDelete', {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n });\r\n } else {\r\n let minIndex = Infinity;\r\n\r\n /**\r\n * Busco el mínimo índice de forma de poder restablecer la selección\r\n * luego de eliminar las filas.\r\n */\r\n deletingIndices.forEach((i) => {\r\n if (i < minIndex) {\r\n minIndex = i;\r\n }\r\n });\r\n\r\n this.cache.truncate(minIndex);\r\n\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'delete',\r\n rowId: deletingIndices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridDelete'),\r\n },\r\n });\r\n\r\n /**\r\n * Me copio el array de filas y la selección actual para poder restaurarlo\r\n * en caso de error.\r\n */\r\n const currentRows = [...this.tableController.body.rows];\r\n const currentSelection = new Set(\r\n this.tableController.getState('selection'),\r\n );\r\n\r\n deletingIndices.forEach((c) =>\r\n this.controller.body.getRowByIndex(c).remove(),\r\n );\r\n for (let i = minIndex; i < this.controller.body.rows.length; i++) {\r\n this.controller.body.getRowByIndex(i).cells.forEach((c) => {\r\n if (c instanceof GridCell) {\r\n c.getField().definition.index = i;\r\n }\r\n });\r\n }\r\n this.tableController.clearSelection();\r\n\r\n if (\r\n this.tableController.body.rows.length === 0 &&\r\n this.getProperty('includeFirstRow')\r\n ) {\r\n /**\r\n * La propiedad includeFirstRow obliga a un comportamiento diferente.\r\n * Con el llamado a actualRefreshAction nos aseguramos de establecer\r\n * sincronía con el servidor. Además, esta acción debería ser relativamente\r\n * económica debido a que no debería traer más que una fila.\r\n */\r\n await res;\r\n await this.actualRefreshAction();\r\n }\r\n\r\n /**\r\n * Restauro la selección a un nuevo índice. Este índice se corresponde con el\r\n * mínimo índice eliminado si es que este aún existe, sino se intenta con el\r\n * índice inmediatamente anterior. Si no existe, no hay ninguna fila para seleccionar.\r\n *\r\n * El foco sin embargo se restaura siempre, en caso de no haber filas seleccionables,\r\n * se restablece en el cabezal de la tabla.\r\n */\r\n (\r\n this.tableController.body.getRowByIndex(minIndex) ||\r\n this.tableController.body.getRowByIndex(minIndex - 1)\r\n )?.toggleSelection(true);\r\n (\r\n this.tableController.body.getRowByIndex(minIndex) ||\r\n this.tableController.body.getRowByIndex(minIndex - 1) ||\r\n this.tableController.head.getRowByIndex(0)\r\n ).scrollIntoView();\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de eliminar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridDelete')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(async () => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (!(await res)?.data?.success) {\r\n /**\r\n * En caso de error, restauro la selección y las filas eliminadas.\r\n */\r\n this.tableController.body.setState('rows', currentRows);\r\n this.tableController.setState('selection', currentSelection);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridDelete'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async fireScriptEvent(eventName: GridEvents): Promise<boolean> {\r\n return super.fireScriptEvent(eventName);\r\n }\r\n\r\n public async fireEvent(\r\n eventName: GridEvents,\r\n params?: FireEventParameters & { mutex: boolean },\r\n ): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n return super.fireEvent(eventName, params);\r\n }, params?.mutex);\r\n }\r\n\r\n public getAllColumns() {\r\n return [...Object.values(this.fieldsDefinitions)].map((f) =>\r\n this.tableController.body.rows.map((c) =>\r\n (c.getCellByColumnName(f.id) as GridCell).getField(),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * @param field - Nombre del campo o del atributo\r\n */\r\n public getColumn(field: string) {\r\n return this.getField(field);\r\n }\r\n\r\n public getCurrentPage() {\r\n return 0;\r\n }\r\n\r\n /**\r\n * @param field - Nombre del campo o del atributo\r\n */\r\n public getField(field: string, index?: number): Field | Field[] | undefined {\r\n return (\r\n this.getFieldByName(field, index) ||\r\n this.getFieldByAttributeName(field, index)\r\n );\r\n }\r\n\r\n public getFieldByAttributeId(\r\n attId: string | number,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedAttIds.has(attId)) {\r\n if (index !== undefined) {\r\n return this.getRowByFieldIndex(index)?.find(\r\n (c) => (c as FieldWithAttribute).attribute.id === attId,\r\n );\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as FieldWithAttribute)\r\n ?.attribute.id === attId,\r\n )\r\n ?.getState('properties')!.field as FieldWithAttribute,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldByAttributeName(\r\n attName: string,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedAttNames.has(attName)) {\r\n if (index !== undefined) {\r\n return this.getRowByFieldIndex(index)?.find(\r\n (c) => (c as FieldWithAttribute).attribute.name === attName,\r\n );\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as FieldWithAttribute)\r\n ?.attribute.name === attName,\r\n )\r\n ?.getState('properties')!.field as FieldWithAttribute,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldById(\r\n id: string | number,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedFieldIds.has(String(id))) {\r\n if (index !== undefined) {\r\n const found =\r\n this.cache.get(index, id) ||\r\n this.getRow(index)?.find((c) => c.definition.id === id);\r\n\r\n this.cache.set(index, id, found);\r\n\r\n return found;\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as Field)?.definition.id ===\r\n id,\r\n )\r\n ?.getState('properties')!.field as Field,\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getFieldByName(\r\n name: string,\r\n index?: number,\r\n ): Field | Field[] | undefined {\r\n if (this.managedFieldsNames.has(name)) {\r\n if (index !== undefined) {\r\n return this.getRow(index)?.find((c) => c.properties.name === name);\r\n } else {\r\n return this.tableController.body.rows.map(\r\n (current) =>\r\n current.cells\r\n .find(\r\n (c) =>\r\n (c.getState('properties')?.field as Field)?.properties\r\n .name === name,\r\n )\r\n ?.getState('properties')!.field as Field,\r\n );\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public getRowByFieldIndex(index: number) {\r\n const row = this.tableController.body.rows.find(\r\n (c) =>\r\n (\r\n c.cells.find((current) => current instanceof GridCell) as GridCell\r\n )?.getField().definition.index === index,\r\n );\r\n if (row) {\r\n return row?.cells\r\n .filter((c) => c instanceof GridCell)\r\n .map((c) => (c as GridCell).getField());\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getSelectedRows() {\r\n return this.tableController\r\n .getSelectedRows()\r\n .map((c) => this.getRow(c.getIndex()));\r\n }\r\n\r\n refreshColumnsVisibilities() {\r\n const shownColumns = new Set<string>();\r\n\r\n for (\r\n let i = 0;\r\n i < this.tableController.body.rows[0]?.cells.length || 0;\r\n i++\r\n ) {\r\n for (const row of this.tableController.body.rows) {\r\n const cell = row.cells[i] as GridCell;\r\n\r\n const field = cell.getState('properties')?.field as Field;\r\n if (\r\n !(\r\n field &&\r\n (field.properties.visibilityHidden || field instanceof Hidden)\r\n )\r\n ) {\r\n shownColumns.add(cell.getState('colName'));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (const column of new Set(\r\n this.tableController.head.rows[0].cells.map((c) => c.getState('colName')),\r\n )) {\r\n this.tableController.toggleColumnVisibility(\r\n column,\r\n shownColumns.has(column),\r\n );\r\n }\r\n }\r\n\r\n public async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n const headerRow = new Row('header');\r\n if (\r\n this.properties.gridForm ||\r\n (!this.properties.hideDelButton &&\r\n !this.properties.readonly &&\r\n !this.properties.inputAsText &&\r\n !this.getForm().definition.readOnly &&\r\n !this.getForm().definition.readonly)\r\n )\r\n headerRow.addCell(\r\n new AdditionalCell(\r\n this,\r\n () => -1,\r\n () => {},\r\n ),\r\n );\r\n\r\n const hiddenColumns = new Set<string>();\r\n\r\n this.header.forEach((c) => {\r\n hiddenColumns.add(c.fldId);\r\n });\r\n\r\n for (const def of this.fieldsDefinitions) {\r\n if (!def.properties.visibilityHidden && def.fieldType !== 'hidden') {\r\n hiddenColumns.delete(def.id);\r\n }\r\n }\r\n\r\n for (let index = 0; index < this.initialStates[0]?.length || 0; index++) {\r\n await this.addRowFromDefinitions(\r\n false,\r\n this.fieldsDefinitions.map((c, i) => {\r\n return {\r\n ...c,\r\n ...this.initialStates[i][index],\r\n };\r\n }),\r\n );\r\n }\r\n\r\n this.header.forEach((col, i) => {\r\n let width = String(col.width || 200);\r\n if (!width.endsWith('px')) {\r\n width = `${width}px`;\r\n }\r\n // if (hiddenColumns.has(col.fldId)) {\r\n // return;\r\n // }\r\n headerRow.addCell(\r\n new HeaderCell(this, {\r\n colName: col.fldId || String(i),\r\n content: col.label,\r\n domProperties: {\r\n style: { width, maxWidth: width },\r\n title: col.title,\r\n },\r\n properties: { col },\r\n isHidden: hiddenColumns.has(col.fldId),\r\n }),\r\n );\r\n });\r\n\r\n for (const column of hiddenColumns) {\r\n this.tableController.toggleColumnVisibility(column, false);\r\n }\r\n this.controller.head.addRow(headerRow);\r\n\r\n getDocument(this.form.execution).addEventListener?.('keydown', (ev) => {\r\n if (ev.code === 'Escape') {\r\n this.state.isMaximized = false;\r\n }\r\n });\r\n }\r\n\r\n public openEditionModal(handler: GridEditionModal) {\r\n this._editionModalHandler = handler;\r\n handler.open();\r\n }\r\n\r\n public async refresh() {\r\n return this.asyncAction(this.actualRefreshAction.bind(this));\r\n }\r\n\r\n public async sortColumn(fldId: string) {\r\n await this.fireEvent('gridColumnSelect', {\r\n firingField: fldId,\r\n mutex: true,\r\n });\r\n return true;\r\n }\r\n\r\n public async sortDown(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices).sort(\r\n (a, b) => b - a,\r\n );\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const currentRows = [...this.tableController.body.rows];\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'down',\r\n rowId: indices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridSort'),\r\n },\r\n });\r\n\r\n this.swapRows(indices, 'down');\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de ordenar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridSort')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(() => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (\r\n !(await res)?.data?.success ||\r\n !(await this.fireEvent('gridSort', { mutex: false }))\r\n ) {\r\n this.tableController.body.setState('rows', currentRows);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridSort'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async sortUp(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices).sort(\r\n (a, b) => a - b,\r\n );\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const currentRows = [...this.tableController.body.rows];\r\n const res = this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'up',\r\n rowId: indices,\r\n fireEvents: this.hasServerAjaxEventsOfType('gridSort'),\r\n },\r\n });\r\n\r\n this.swapRows(indices, 'up');\r\n\r\n /**\r\n * Cuando hay eventos ejecuto el callback inline, sino lo ejecuto con setTimeout.\r\n * De esta forma evito que la llamada al server demore la ejecución de la UI, es\r\n * una forma de ordenar las filas en forma optimista.\r\n *\r\n * Ese comportamiento no es aceptable en caso de que haya eventos.\r\n */\r\n return await (\r\n this.hasServerAjaxEventsOfType('gridSort')\r\n ? inlineCaller\r\n : inlineTimeout\r\n )(() => {\r\n return this.asyncAction(async () => {\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n /**\r\n * Se debe procesar el resultado de los eventos ajax.\r\n */\r\n setAjaxFormResponse(this.form.execution, parseXml(evs) as any);\r\n }\r\n\r\n if (\r\n !(await res)?.data?.success ||\r\n !(await this.fireEvent('gridSort', { mutex: false }))\r\n ) {\r\n this.tableController.body.setState('rows', currentRows);\r\n return false;\r\n }\r\n\r\n return true;\r\n }, !this.hasServerAjaxEventsOfType('gridSort'));\r\n }, 0);\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public toggleColumnVisibility(fieldName: string, isShown?: boolean) {\r\n this.controller.toggleColumnVisibility(fieldName, isShown);\r\n }\r\n\r\n public toggleDeleteButton(rowIndex: number, isShown?: boolean) {\r\n const currentValue = this.properties.shownDeleteButtons.get(rowIndex);\r\n this.properties.shownDeleteButtons.set(rowIndex, isShown ?? !currentValue);\r\n this.calculateMustShowAdditionalColumn();\r\n }\r\n\r\n public toggleEditFormButton(rowIndex: number, isShown?: boolean) {\r\n const currentValue = this.properties.shownEditionButtons.get(rowIndex);\r\n this.properties.shownEditionButtons.set(rowIndex, isShown ?? !currentValue);\r\n this.calculateMustShowAdditionalColumn();\r\n }\r\n\r\n public async validate(): Promise<true | Field> {\r\n let isValid = true;\r\n let firstInvalid: Field | null = null;\r\n\r\n for await (const row of this.tableController.body.rows) {\r\n for await (const cell of row.cells) {\r\n const field = cell.getState('properties')?.field;\r\n if (field instanceof Field) {\r\n const result = await field.validate();\r\n if (!result && isValid && !firstInvalid) {\r\n isValid = false;\r\n firstInvalid = field;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid || firstInvalid!;\r\n }\r\n\r\n protected async actualRefreshAction() {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'refresh',\r\n },\r\n });\r\n\r\n if (res?.data?.gridXml) {\r\n await this.rebuildGrid(res.data.gridXml);\r\n } else {\r\n throw new Error(\"The server didn't return a valid XML response.\");\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected async addRowFromDefinitions(\r\n select: boolean,\r\n definitions?: TApiaFieldBaseDefinition<Record<string, any>>[],\r\n ) {\r\n const pageSize = this.properties.pageSize;\r\n const offset = Number.isFinite(pageSize)\r\n ? (this.properties.currentPage - 1) * pageSize\r\n : 0; // When pageSize is Infinity, we treat it as a single page\r\n const index = this.tableController.body.rows.length + offset;\r\n\r\n if (!definitions) {\r\n definitions = this.fieldsDefinitions.map((current, columnIndex) => {\r\n this.getForm().addFieldToRender(current.id, index);\r\n\r\n return {\r\n ...current,\r\n ...this.initialStates[columnIndex][0],\r\n };\r\n });\r\n }\r\n\r\n // Check if pageSize is finite\r\n\r\n const newRow = new Row(String(this.rowId++));\r\n if (\r\n this.properties.gridForm ||\r\n (!this.properties.hideDelButton &&\r\n !this.properties.readonly &&\r\n !this.properties.inputAsText &&\r\n !this.getForm().definition.readOnly &&\r\n !this.getForm().definition.readonly)\r\n )\r\n newRow.addCell(\r\n new AdditionalCell(\r\n this,\r\n () => newRow.getIndex(),\r\n () => {\r\n this.deleteRows(newRow.getIndex());\r\n },\r\n this.properties.gridForm\r\n ? (handler) => {\r\n this.openEditionModal(handler);\r\n }\r\n : undefined,\r\n ),\r\n );\r\n this.tableController.body.addRow(newRow);\r\n\r\n for await (const field of definitions) {\r\n /**\r\n * Esto es necesario ya que desde el server llega un objeto js en el properties.\r\n */\r\n const fieldProps = parseFakeJSON<TApiaFieldCommonProperties>(\r\n field.properties as any,\r\n );\r\n field.properties = fieldProps;\r\n\r\n const fieldConstructor =\r\n this.form.execution.fieldsMapping[field.fieldType](field);\r\n\r\n if (fieldConstructor) {\r\n const newField = new fieldConstructor({\r\n ...field,\r\n ...(field as any).fieldValue,\r\n index,\r\n });\r\n await newField.init(this.getForm());\r\n newField.setParentGrid(this);\r\n\r\n if (newField instanceof FieldWithAttribute) {\r\n this.managedAttIds.add(newField.attribute.id);\r\n this.managedAttNames.add(newField.attribute.name);\r\n }\r\n this.managedFieldIds.add(newField.definition.id);\r\n this.managedFieldsNames.add(newField.properties.name);\r\n\r\n if (!(newField instanceof Hidden)) {\r\n this.cache.set(index, newField.definition.id, newField);\r\n\r\n let width = String(\r\n this.header.find((c) => c.fldId === field.id)?.width || 250,\r\n );\r\n if (!width.endsWith('px')) {\r\n width = `${width}px`;\r\n }\r\n\r\n newRow.addCell(\r\n new GridCell({\r\n colName: newField.definition.id,\r\n properties: { field: newField },\r\n }),\r\n );\r\n }\r\n } else {\r\n throw new Error(\r\n `Cannot build field of type ${field.fieldType}. There is no mapping for such type.`,\r\n );\r\n }\r\n }\r\n\r\n if (select) {\r\n this.tableController.clearSelection();\r\n this.tableController.toggleRowSelection(newRow, true);\r\n }\r\n\r\n return newRow;\r\n }\r\n\r\n protected async asyncAction<T>(\r\n cb: () => Promise<T>,\r\n mutex = true,\r\n ): Promise<T> {\r\n if (mutex) {\r\n await this.mutex.acquire();\r\n }\r\n try {\r\n this.state.isLoading = true;\r\n const res = await cb();\r\n return res;\r\n } finally {\r\n this.state.isLoading = false;\r\n if (mutex) {\r\n this.mutex.release();\r\n }\r\n }\r\n }\r\n\r\n protected calculateMustShowAdditionalColumn() {\r\n const { hideDelButton, shownDeleteButtons, shownEditionButtons, gridForm } =\r\n this.properties;\r\n const mustShowAdditionalColumn =\r\n (!hideDelButton &&\r\n [...shownDeleteButtons.values()].some((c) => c !== false)) ||\r\n (!!gridForm &&\r\n [...shownEditionButtons.values()].some((c) => c !== false));\r\n\r\n this.controller.toggleColumnVisibility(\r\n 'additional',\r\n mustShowAdditionalColumn,\r\n );\r\n }\r\n\r\n protected getRow(index: number) {\r\n return this.tableController.body\r\n .getRowByIndex(index)\r\n ?.cells.filter((c) => c instanceof GridCell)\r\n .map((c) => (c as GridCell).getField());\r\n }\r\n\r\n protected async rebuildGrid(\r\n xmlString: string | TApiaGridDefinition,\r\n ): Promise<void> {\r\n const xml =\r\n typeof xmlString === 'string'\r\n ? (parseXml(xmlString) as TApiaGridDefinition)\r\n : (xmlString as TApiaGridDefinition);\r\n\r\n const fieldsArray = arrayOrArray(xml.field);\r\n const statesArray: (\r\n | NonNullable<TApiaGridField['row']>\r\n | NonNullable<TApiaGridField['fieldValue']>\r\n )[][] = fieldsArray.map((field) =>\r\n arrayOrArray((field.fieldValue || field.row)!),\r\n );\r\n\r\n this.properties.pages = xml.pages || this.properties.pages;\r\n this.properties.currentPage = xml.curPage || this.properties.currentPage;\r\n this.properties.visibilityHidden =\r\n xml.properties.visibilityHidden ?? this.properties.visibilityHidden;\r\n\r\n if (statesArray[0].length > this.controller.body.rows.length) {\r\n for (\r\n let i = this.controller.body.rows.length;\r\n i < statesArray[0].length;\r\n i++\r\n ) {\r\n const parsedFieldGroups = fieldsArray.map((field, columnIndex) => {\r\n if (field.fieldType === 'radio' || field.fieldType === 'select') {\r\n const parsedField = {\r\n ...field,\r\n ...arrayOrArray(field.row)[i],\r\n };\r\n return parsedField;\r\n }\r\n return {\r\n ...field,\r\n index: i,\r\n fieldValue: {\r\n properties: statesArray[columnIndex][i]?.properties,\r\n value: statesArray[columnIndex][i]?.value,\r\n },\r\n };\r\n });\r\n\r\n await this.addRowFromDefinitions(false, parsedFieldGroups);\r\n }\r\n } else if (statesArray[0].length < this.controller.body.rows.length) {\r\n const removeIndices = new Array(\r\n this.controller.body.rows.length - statesArray[0].length,\r\n )\r\n .fill(0)\r\n .map((_, i) => i + statesArray[0].length);\r\n\r\n removeIndices\r\n .sort((a, b) => b - a)\r\n .forEach((i) => {\r\n this.controller.body.getRowByIndex(i)?.remove();\r\n });\r\n }\r\n\r\n statesArray.forEach((fieldStates, fieldIndex) => {\r\n fieldStates.forEach((state, rowIndex) => {\r\n const fieldDefinition = fieldsArray[fieldIndex];\r\n const id = fieldDefinition.id;\r\n\r\n const field = this.getFieldById(id, rowIndex) as Field | undefined;\r\n\r\n if (field) {\r\n const possibleValues = (state as TApiaGridField['row'])\r\n ?.possibleValue;\r\n if (possibleValues) {\r\n (field as Select).setProperty(\r\n 'possibleValue',\r\n arrayOrArray(possibleValues),\r\n );\r\n }\r\n\r\n Object.assign(\r\n field.properties,\r\n parseFakeJSON(state.properties as any),\r\n );\r\n field.definition.index = this.startIndex + rowIndex;\r\n if (field instanceof File) {\r\n field.loadFromDefinition((state as any).file_prp); // Apia trae esta prop para los files\r\n } else if (field instanceof ModalInput) {\r\n (field as ModalInput).setValue(\r\n {\r\n showValue:\r\n (state as TApiaGridField['fieldValue'])!.qry_show_value || '',\r\n storeValue: state.value || '',\r\n },\r\n { force: true },\r\n );\r\n } else if (field instanceof FieldWithAttribute) {\r\n field.setValue(state.value, { synchronize: false, force: true });\r\n }\r\n }\r\n });\r\n });\r\n\r\n this.refreshColumnsVisibilities();\r\n }\r\n\r\n protected async runAction<T extends Record<string, any>>(\r\n postData: IApiaApiPostConfig<Record<string, any>>,\r\n ) {\r\n return post<T>(\r\n this.form.execution,\r\n await makeApiaUrl(this.form.execution, {\r\n action: 'gridAction',\r\n ajaxUrl: actions.forms,\r\n fldId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n ...postData,\r\n },\r\n );\r\n }\r\n\r\n private swapRows(rows: number[], direction: 'up' | 'down') {\r\n let min = Infinity;\r\n\r\n for (const i of rows) {\r\n min = Math.min(min, i);\r\n\r\n const swapIndex = direction === 'up' ? i - 1 : i + 1;\r\n\r\n const aRow = this.tableController.body.getRowByIndex(i);\r\n const bRow = this.tableController.body.getRowByIndex(swapIndex);\r\n\r\n // Solamente se ejecuta el swap si ambas filas existen\r\n if (aRow && bRow) {\r\n this.getRow(i).forEach((c) => {\r\n this.cache.clearIndex(c.definition.index!);\r\n this.cache.clearIndex(swapIndex);\r\n c.definition.index = swapIndex;\r\n });\r\n this.getRow(swapIndex).forEach((c) => (c.definition.index = i));\r\n\r\n this.tableController.body.swapRows(aRow, bRow);\r\n\r\n // Forzamos el estado de selección a refrescarse para que se actualicen los botones de subir y bajar\r\n const selection = this.tableController.getState('selection');\r\n selection.forEach((c) => c.toggleSelection(true));\r\n }\r\n }\r\n\r\n if (min < Infinity) {\r\n this.tableController\r\n .getPluginOfType(FocusControllerPlugin)\r\n ?.scrollIntoView(\r\n this.tableController.body.getRowByIndex(min)!.getState('id'),\r\n );\r\n }\r\n }\r\n\r\n public toggleMaximize() {\r\n this.state.isMaximized = !this.state.isMaximized;\r\n }\r\n}\r\n","import { arrayOrArray, noNaN } from '@apia/util';\r\nimport { parseXml } from '../../../../../util';\r\nimport { setAjaxFormResponse } from '../../events/setAjaxFormResponse';\r\nimport { Grid } from '../Grid';\r\nimport type { GridActionResponse } from '../Grid/types';\r\nimport { Row } from '@apia/table2-controller';\r\n\r\nexport class GridPaginated extends Grid {\r\n /**\r\n * Returns the final index of the current page\r\n */\r\n public get finalIndex() {\r\n const pageSize = this.properties.pageSize;\r\n return noNaN(\r\n (this.properties.currentPage - 1) * pageSize -\r\n 1 +\r\n this.controller.body.rows.length,\r\n 0,\r\n );\r\n }\r\n\r\n public addRow(): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridAdd')) {\r\n if (this.hasServerNoAjaxEventsOfType('gridAdd')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridAdd', {});\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'add',\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n await this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n this.controller.body.rows.at(-1)?.scrollIntoView();\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n protected actualDeleteRows(props: {\r\n index?: number | number[];\r\n action?: string;\r\n }) {\r\n let index = props.index;\r\n const action = props.action ?? 'delete';\r\n\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridDelete')) {\r\n /**\r\n * Debo igualar la selección de la tabla con los índices a eliminar.\r\n * De esta manera garantizo su correcto acceso desde los eventos script.\r\n */\r\n if (undefined === index) {\r\n index = [...this.controller.getState('selection')].map((c) => {\r\n return c.getIndex();\r\n });\r\n } else {\r\n this.controller.setSelection(arrayOrArray(index));\r\n }\r\n\r\n const deletingIndices = arrayOrArray(index)\r\n .sort((a, b) => b - a)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridDelete')) {\r\n /**\r\n * En caso de que haya eventos no ajax, simplemente se recarga la página.\r\n */\r\n await this.fireServerEvent('gridDelete', {\r\n gridAction: action,\r\n rowId: deletingIndices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: action,\r\n rowId: deletingIndices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const minIndex = Math.min(...arrayOrArray(index));\r\n const currentPage = this.currentPage;\r\n\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n\r\n let newSelectedRow: Row | undefined;\r\n\r\n if (currentPage === this.currentPage) {\r\n newSelectedRow =\r\n this.controller.body.rows[minIndex] ||\r\n this.controller.body.rows[minIndex - 1];\r\n } else {\r\n newSelectedRow = this.controller.body.rows.at(-1);\r\n }\r\n\r\n newSelectedRow?.toggleSelection(true);\r\n newSelectedRow?.scrollIntoView();\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async deleteAllRows() {\r\n return this.actualDeleteRows({ action: 'deleteAllRows' });\r\n }\r\n\r\n public async deleteRows(index?: number | number[]): Promise<boolean> {\r\n return this.actualDeleteRows({ index });\r\n }\r\n\r\n public async gotoPage(page: number): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'gotopage',\r\n page: page - 1,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n this.controller.clearSelection();\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n public async sortDown(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices)\r\n .sort((a, b) => b - a)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'down',\r\n rowId: indices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'down',\r\n rowId: indices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const currentSelectionIndices = this.controller\r\n .getSelectedRows()\r\n .map((c) => c.getIndex());\r\n const currentPage = this.currentPage;\r\n\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n\r\n this.controller.clearSelection();\r\n if (currentPage === this.currentPage) {\r\n this.controller.setSelection(\r\n currentSelectionIndices.map((c) => c + 1),\r\n );\r\n this.controller.getSelectedRows()[0]?.scrollIntoView();\r\n } else {\r\n this.controller.body.rows[0]?.scrollIntoView();\r\n this.controller.body.rows[0]?.toggleSelection(true);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public async sortUp(index?: number | number[]): Promise<boolean> {\r\n return this.asyncAction(async () => {\r\n if (await this.fireScriptEvent('gridSort')) {\r\n const indices = arrayOrArray(index || this.selectedIndices)\r\n .sort((a, b) => a - b)\r\n .map((c) => c + this.startIndex);\r\n\r\n if (this.hasServerNoAjaxEventsOfType('gridSort')) {\r\n await this.fireServerEvent('gridSort', {\r\n gridAction: 'up',\r\n rowId: indices,\r\n });\r\n } else {\r\n const res = await this.runAction<GridActionResponse>({\r\n postData: {\r\n gridAction: 'up',\r\n rowId: indices,\r\n },\r\n });\r\n\r\n const evs = (await res)?.data?.eventsXml;\r\n if (evs) {\r\n await setAjaxFormResponse(this.form.execution, parseXml(evs));\r\n }\r\n\r\n if (res?.data?.success) {\r\n const currentSelectionIndices = this.controller\r\n .getSelectedRows()\r\n .map((c) => c.getIndex());\r\n\r\n const currentPage = this.currentPage;\r\n this.rebuildGrid(res!.data!.gridXml!);\r\n\r\n this.controller.clearSelection();\r\n if (currentPage === this.currentPage) {\r\n this.controller.setSelection(\r\n currentSelectionIndices.map((c) => c - 1),\r\n );\r\n this.controller.getSelectedRows()[0]?.scrollIntoView();\r\n } else {\r\n this.controller.body.rows.at(-1)?.toggleSelection(true);\r\n this.controller.body.rows.at(-1)?.scrollIntoView();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n}\r\n","import { TApiaImageProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Image extends Field<TApiaImageProperties> {}\r\n","import dayjs from 'dayjs';\r\nimport { getLabel, labels } from '../../../../../util/labels/labels';\r\nimport { TApiaInputProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaInputDefinition } from '../../../../InitialData/types/fields/TApiaInputDefinition';\r\nimport { TranslatableField } from '../../TranslatableField';\r\nimport { SetValueOptions } from '../../types';\r\nimport { getDateFormat } from '@apia/util';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { TFireEventOptions } from '../../FieldWithAttribute';\r\n\r\n// Enable format-aware strict parsing so invalid dates (e.g., \"31/02/2025\") are rejected instead of auto-rolling to \"03/03/2025\".\r\ndayjs.extend(customParseFormat);\r\n\r\ntype InputEvents = 'onChange' | 'onModalReturn';\r\n\r\nexport class Input extends TranslatableField<\r\n TApiaInputProperties,\r\n string,\r\n TApiaInputDefinition\r\n> {\r\n private validDate = true;\r\n\r\n fireEvent(\r\n eventName: InputEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n public async setValue(\r\n newValue: string | Date | number,\r\n options?: SetValueOptions,\r\n ): Promise<boolean> {\r\n if (this.attribute.valueType === 'S') {\r\n if (!this.definition.regExp || this.validateRegex(String(newValue))) {\r\n if (String(newValue) !== '') this.state.validation.errorMessage = null;\r\n\r\n return super.setValue(String(newValue), options);\r\n }\r\n } else if (this.attribute.valueType === 'N') {\r\n super.setValue(String(newValue), options);\r\n } else if (this.attribute.valueType === 'D') {\r\n this.validDate = true;\r\n const inFmt = getDateFormat(options?.format);\r\n const outFmt = getDateFormat();\r\n\r\n if (typeof newValue === 'string') {\r\n const d = dayjs(newValue.trim(), inFmt, true);\r\n if (!d.isValid() && newValue.trim() !== '') {\r\n this.state.validation.errorMessage = getLabel(\r\n this.getForm().execution,\r\n 'msgInvalidDate',\r\n ).text;\r\n this.validDate = false;\r\n }\r\n return super.setValue(d.isValid() ? d.format(outFmt) : '', options);\r\n }\r\n\r\n if (newValue instanceof Date) {\r\n const d = dayjs(newValue);\r\n if (!d.isValid()) {\r\n this.state.validation.errorMessage = getLabel(\r\n this.getForm().execution,\r\n 'msgInvalidDate',\r\n ).text;\r\n this.validDate = false;\r\n }\r\n return super.setValue(d.isValid() ? d.format(outFmt) : '', options);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private validateRegex(value: string): boolean {\r\n if (!value) {\r\n this.state.validation.errorMessage = '';\r\n return true;\r\n }\r\n\r\n const regex = new RegExp(this.definition.regExp ?? '');\r\n\r\n if (!regex.test(String(value)) && value !== '') {\r\n this.state.validation.errorMessage =\r\n this.properties.regExpMessage || labels.errorRegexNotValidated();\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.errorMessage && !this.validDate) return false;\r\n\r\n return super.validate();\r\n }\r\n\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n}\r\n","import { TApiaLabelProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaLabelDefinition } from '../../../../InitialData/types/fields/TApiaLabelDefinition';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Label extends Field<TApiaLabelProperties, TApiaLabelDefinition> {}\r\n","import { TApiaLinkProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Link extends Field<TApiaLinkProperties> {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { labels } from '../../../../../util/labels/labels';\r\nimport { TApiaMultipleProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaMultipleDefinition } from '../../../../InitialData/types/fields/TApiaMultipleDefinition';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\n\r\nexport class Multiple extends FieldWithAttribute<\r\n TApiaMultipleProperties,\r\n string[]\r\n> {\r\n constructor({\r\n possibleValue,\r\n value,\r\n ...definition\r\n }: TApiaMultipleDefinition) {\r\n super({\r\n ...{\r\n ...definition,\r\n value: arrayOrArray(possibleValue)\r\n .filter((c) => c.selected)\r\n .map((c) => c.value),\r\n },\r\n properties: {\r\n ...definition.properties,\r\n possibleValue: arrayOrArray(possibleValue),\r\n },\r\n });\r\n }\r\n\r\n protected hasValue() {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n public setValue(\r\n newValue: string[],\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n return super.setValue(arrayOrArray(newValue), options);\r\n }\r\n\r\n public async validate(): Promise<boolean> {\r\n if (this.state.validation.dirty) {\r\n if (!(await this.synchronize(this.state.value))) {\r\n this.state.validation.errorMessage = labels.errorCouldNotSync();\r\n return false;\r\n }\r\n }\r\n\r\n const isValid =\r\n !!this.getValue()[0] ||\r\n !this.properties.required ||\r\n this.properties.inputAsText ||\r\n this.properties.visibilityHidden ||\r\n this.properties.disabled;\r\n\r\n this.state.validation.errorMessage = isValid\r\n ? null\r\n : labels.errorFieldRequired(this.form.execution);\r\n\r\n return !this.state.validation.errorMessage;\r\n }\r\n}\r\n","import { TApiaPasswordProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\n\r\nexport class Password extends FieldWithAttribute<\r\n TApiaPasswordProperties,\r\n string\r\n> {\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n}\r\n","import { TApiaRadioProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaRadioButtonDefinition } from '../../../../InitialData/types/fields/TApiaRadioButtonDefinition';\r\nimport { Form } from '../../Form';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { arrayOrArray } from '@apia/util';\r\n\r\ntype RadioEvents = 'onPopulate' | 'onChange' | 'onClick';\r\n\r\nexport class Radio extends FieldWithAttribute<\r\n TApiaRadioProperties,\r\n number | string,\r\n TApiaRadioButtonDefinition\r\n> {\r\n constructor({ possibleValue, ...definition }: TApiaRadioButtonDefinition) {\r\n super({\r\n ...definition,\r\n properties: { ...definition.properties, possibleValue },\r\n });\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n await this.fireEvent('onPopulate');\r\n }\r\n\r\n fireEvent(\r\n eventName: RadioEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n public getTextValue(value: any) {\r\n return this.properties.possibleValue\r\n ? arrayOrArray(this.properties.possibleValue).find(\r\n (c) => c.value === value,\r\n )?.label\r\n : value;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { TApiaSelectProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaSelectDefinition } from '../../../../InitialData/types/fields/TApiaSelectDefinition';\r\nimport { TApiaFieldWithAttributeBaseProps } from '../../../../InitialData/types/TApiaField';\r\nimport { FieldWithAttribute } from '../../FieldWithAttribute';\r\nimport { IApiaApiPostConfig } from '../../../../../util/api/types';\r\n\r\nexport class Select extends FieldWithAttribute<\r\n TApiaSelectProperties,\r\n string,\r\n TApiaSelectDefinition\r\n> {\r\n constructor({ possibleValue, ...definition }: TApiaSelectDefinition) {\r\n super({\r\n ...definition,\r\n properties: {\r\n ...definition.properties,\r\n possibleValue: arrayOrArray(possibleValue),\r\n },\r\n });\r\n }\r\n\r\n protected getInitialValue({\r\n properties: { possibleValue },\r\n }: TApiaFieldWithAttributeBaseProps<TApiaSelectProperties>): Promise<string> {\r\n return Promise.resolve(\r\n String(\r\n this.state.value !== ''\r\n ? this.state.value\r\n : (possibleValue?.find((c) => c.selected)?.value ??\r\n (possibleValue?.[0]?.value || '')),\r\n ),\r\n );\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: any,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(String(value));\r\n return conf;\r\n }\r\n\r\n public getTextValue(value: any) {\r\n return this.properties.possibleValue\r\n ? arrayOrArray(this.properties.possibleValue).find(\r\n (c) => c.value === value,\r\n )?.label\r\n : value;\r\n }\r\n}\r\n","import { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport { TApiaTextareaProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TranslatableField } from '../../TranslatableField';\r\n\r\nexport class Textarea extends TranslatableField<\r\n TApiaTextareaProperties,\r\n string\r\n> {\r\n protected isValidValue(): boolean {\r\n return !!String(this.getValue()).trim();\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: string,\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n conf.postData!.clearValues = 'true';\r\n return conf;\r\n }\r\n}\r\n","import { TApiaTitleProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { Field } from '../../Field';\r\n\r\nexport class Title extends Field<TApiaTitleProperties> {}\r\n","import type { IApiaApiPostConfig } from '../../../../../util/api/types';\r\nimport type { TApiaTreeProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport type {\r\n TApiaTreeDefinition,\r\n TApiaTreePossibleValue,\r\n} from '../../../../InitialData/types/fields/TApiaTreeDefinition';\r\nimport {\r\n FieldWithAttribute,\r\n TFireEventOptions,\r\n} from '../../FieldWithAttribute';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { IMobXChildKeeper, MobXTree } from '@apia/tree2-controller';\r\nimport { Form } from '../../Form';\r\nimport { isFieldShowAsText } from '../../util/isFieldShowAsText';\r\nimport { Comparator } from '../../../../../util/comparators/shallowEqual';\r\n\r\nexport type TTreeValue = string | number;\r\ntype TreeEvents = 'onPopulate' | 'onChange' | 'onClick';\r\n\r\nfunction getValuesArray(tree: TApiaTreePossibleValue[]) {\r\n return tree.reduce((acc, curr) => {\r\n if (curr.selected) {\r\n acc.push(curr.value);\r\n }\r\n if (curr.possibleValue) {\r\n acc.push(...getValuesArray(arrayOrArray(curr.possibleValue)));\r\n }\r\n return acc;\r\n }, [] as TTreeValue[]);\r\n}\r\n\r\nexport class Tree extends FieldWithAttribute<\r\n TApiaTreeProperties,\r\n TTreeValue[],\r\n TApiaTreeDefinition\r\n> {\r\n controller: MobXTree = {} as MobXTree;\r\n\r\n private parseTreeValues(\r\n parent: IMobXChildKeeper,\r\n pv: TApiaTreePossibleValue | TApiaTreePossibleValue[] | undefined,\r\n ) {\r\n arrayOrArray(pv).forEach((c) => {\r\n const node = parent.create({\r\n id: String(c.value),\r\n initialState: {\r\n label: c.text,\r\n isSelected: this.state.value.find((s) => s === c.value) !== undefined,\r\n isSelectable:\r\n arrayOrArray(c.possibleValue).length === 0 ||\r\n this.properties.selParent,\r\n isExpanded: true,\r\n icon: () => {\r\n if (\r\n (this.properties.parentIcon && c.possibleValue) ||\r\n (this.properties.leafIcon && !c.possibleValue)\r\n ) {\r\n return null;\r\n }\r\n return null;\r\n },\r\n },\r\n });\r\n\r\n this.parseTreeValues(node, c.possibleValue);\r\n });\r\n }\r\n\r\n constructor({ possibleValue, ...props }: TApiaTreeDefinition) {\r\n super(props);\r\n this.properties.possibleValue = arrayOrArray(possibleValue);\r\n }\r\n\r\n protected getSynchronizePostConfiguration(\r\n value: TTreeValue[],\r\n ): IApiaApiPostConfig<any> {\r\n const conf = super.getSynchronizePostConfiguration(value);\r\n return {\r\n ...conf,\r\n postData: {\r\n ...conf.postData,\r\n clearValues: true,\r\n },\r\n };\r\n }\r\n\r\n fireEvent(\r\n eventName: TreeEvents,\r\n options?: TFireEventOptions,\r\n ): Promise<boolean> {\r\n return super.fireEvent(eventName, options);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n setProperty<K extends keyof TApiaTreeProperties>(\r\n propName: K,\r\n propValue: TApiaTreeProperties[K],\r\n ) {\r\n if (propName === 'possibleValue') {\r\n this.controller.removeAllChildren();\r\n this.state.value = getValuesArray(\r\n arrayOrArray(propValue as any) as TApiaTreePossibleValue[],\r\n );\r\n this.parseTreeValues(\r\n this.controller,\r\n propValue as TApiaTreeProperties['possibleValue'],\r\n );\r\n }\r\n super.setProperty(propName, propValue);\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n\r\n this.state.value = getValuesArray(this.properties.possibleValue);\r\n\r\n this.controller = new MobXTree({\r\n onSelect: (ev) => {\r\n if (\r\n isFieldShowAsText(this) ||\r\n this.properties.disabled ||\r\n this.properties.readOnly ||\r\n this.properties.readonly ||\r\n this.getParentGrid()?.properties.readonly\r\n ) {\r\n return false;\r\n } else {\r\n const selection = [...ev.values()].map((c) => c.id);\r\n this.setValue(selection, { markAsDirty: false });\r\n if (selection.length === 0) {\r\n this.setValue([], { markAsDirty: false });\r\n }\r\n return true;\r\n }\r\n },\r\n isMultiple: this.properties.multiselect,\r\n toggleNodesOnLabelClick: !this.properties.selParent,\r\n });\r\n\r\n this.setProperty(\r\n 'possibleValue',\r\n arrayOrArray(this.properties.possibleValue),\r\n );\r\n }\r\n\r\n protected isValidValue() {\r\n return this.state.value.length > 0;\r\n }\r\n\r\n public async setValue(\r\n newValue: TTreeValue[],\r\n options?:\r\n | Partial<{\r\n comparator: Comparator<any>;\r\n format: 'd/m/Y' | 'apia';\r\n markAsDirty: boolean;\r\n synchronize: boolean;\r\n }>\r\n | undefined,\r\n ): Promise<boolean> {\r\n const res = await super.setValue(newValue, options);\r\n\r\n if (res) {\r\n this.controller.setSelectedNodes(new Set(newValue.map((c) => String(c))));\r\n }\r\n\r\n return res;\r\n }\r\n}\r\n","import {\r\n Scheduler,\r\n TScheduleResult,\r\n TSchInfoResult,\r\n} from '@apia/scheduler-controller';\r\nimport { TApiaSchedulerProperties } from '../../../../InitialData/types/fields/TApiaFieldProperties';\r\nimport { TApiaFieldBaseDefinition } from '../../../../InitialData/types/TApiaField';\r\nimport { Field } from '../../Field';\r\nimport { Form } from '../../Form';\r\nimport { get, makeApiaUrl, post } from '../../../../../util';\r\nimport { getWindow } from '../../../../../util/dom/getWindow';\r\n\r\nexport class SchedulerField extends Field<TApiaSchedulerProperties> {\r\n private _schedController: Scheduler | undefined = undefined;\r\n constructor(definition: TApiaFieldBaseDefinition<TApiaSchedulerProperties>) {\r\n super(definition);\r\n }\r\n\r\n async deleteDate() {\r\n const res = await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'clearExecutionSchedulerSelectedDay',\r\n }),\r\n );\r\n\r\n if (res?.data?.success) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get parsedInitialProperties() {\r\n const value = String(this.properties.value);\r\n let start = 0;\r\n let end = 0;\r\n start = value?.indexOf('loadSchedExec');\r\n start += 14;\r\n\r\n end = value?.indexOf(';</div>');\r\n end -= 1;\r\n\r\n const strParts = value\r\n ?.slice(start, end)\r\n .replaceAll(`'`, ``)\r\n .replaceAll(' ', '');\r\n const arrParts = strParts.split(',');\r\n\r\n return {\r\n schId: arrParts[1],\r\n proId: arrParts[2],\r\n proVerId: arrParts[3],\r\n tskId: arrParts[4],\r\n showDisponibility: arrParts[5],\r\n showAttributes: arrParts[6],\r\n };\r\n }\r\n\r\n async init(form: Form): Promise<void> {\r\n await super.init(form);\r\n this._schedController = new Scheduler(\r\n this.parsedInitialProperties,\r\n {\r\n loadWeek: this.loadWeek.bind(this),\r\n deleteDate: this.deleteDate.bind(this),\r\n markDay: this.markDay.bind(this),\r\n loadInfo: this.loadInfo.bind(this),\r\n },\r\n 'Scheduler',\r\n getWindow(this.getForm().execution),\r\n );\r\n if (this._schedController) this._schedController.loadWeek();\r\n }\r\n\r\n async loadWeek(\r\n weekDay: string,\r\n schId: string,\r\n proId: string,\r\n proVerId: string,\r\n tskId: string,\r\n ) {\r\n const res = await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'getExecutionSchedulerWeek',\r\n weekDay,\r\n schId,\r\n proId,\r\n proVerId,\r\n tskId,\r\n }),\r\n );\r\n return res?.data ?? null;\r\n }\r\n\r\n async loadInfo(\r\n schId: string,\r\n weekDay: string,\r\n dayNumber: number,\r\n hour: string,\r\n ) {\r\n const res = await post<TSchInfoResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'getExecutionSchedulerDayInfo',\r\n schId,\r\n weekDay,\r\n dayNumber,\r\n hour,\r\n }),\r\n );\r\n return res?.data?.pro_instances?.pro_instance ?? [];\r\n }\r\n\r\n async markDay(weekDay: string, hour: string, dayNumber: number) {\r\n await get<TScheduleResult>(\r\n this.form.execution,\r\n makeApiaUrl(this.form.execution, {\r\n ajaxUrl: '/apia.design.TaskSchedulerAction.run',\r\n action: 'setExecutionSchedulerSelectedDay',\r\n weekDay,\r\n hour,\r\n dayNumber,\r\n }),\r\n );\r\n }\r\n\r\n get schedController() {\r\n return this._schedController;\r\n }\r\n}\r\n","const FieldConstants = Object.freeze({\r\n // field types\r\n TYPE_INPUT: 'input',\r\n TYPE_SELECT: 'select',\r\n TYPE_RADIO: 'radio',\r\n TYPE_CHECK: 'check',\r\n TYPE_BUTTON: 'button',\r\n TYPE_AREA: 'area',\r\n TYPE_LABEL: 'label',\r\n TYPE_TITLE: 'title',\r\n TYPE_FILE: 'file',\r\n TYPE_MULTIPLE: 'multiple',\r\n TYPE_HIDDEN: 'hidden',\r\n TYPE_PASSWORD: 'password',\r\n TYPE_GRID: 'grid',\r\n TYPE_IMAGE: 'image',\r\n TYPE_HREF: 'href',\r\n TYPE_EDITOR: 'editor',\r\n TYPE_TREE: 'tree',\r\n TYPE_CAPTCHA: 'captcha',\r\n\r\n // Field properties\r\n PROPERTY_NAME: 'name',\r\n PROPERTY_SIZE: 'size',\r\n PROPERTY_READONLY: 'readonly',\r\n PROPERTY_DISABLED: 'disabled',\r\n PROPERTY_MODAL_DISABLED: 'modalDisabled',\r\n PROPERTY_FONT_COLOR: 'fontColor',\r\n PROPERTY_VALUE: 'value',\r\n PROPERTY_REQUIRED: 'required',\r\n PROPERTY_COLSPAN: 'colspan',\r\n PROPERTY_ROWSPAN: 'rowspan',\r\n PROPERTY_MODAL: 'modal',\r\n PROPERTY_ROWS: 'thisRows',\r\n PROPERTY_BOLD: 'bold',\r\n PROPERTY_UNDERLINED: 'underlined',\r\n PROPERTY_ALIGNMENT: 'alignment',\r\n PROPERTY_IMAGE: 'imageUrl',\r\n PROPERTY_COL_WIDTH: 'colWidth',\r\n PROPERTY_GRID_HEIGHT: 'gridHeight',\r\n PROPERTY_HIDE_GRID_BTN: 'hideGridButtons',\r\n PROPERTY_VISIBILITY_HIDDEN: 'visibilityHidden',\r\n PROPERTY_TRANSIENT: 'transient',\r\n PROPERTY_GRID_TITLE: 'gridTitle',\r\n PROPERTY_GRID_FORM: 'gridForm',\r\n PROPERTY_TOOLTIP: 'tooltip',\r\n PROPERTY_VALUE_COLOR: 'valueColor',\r\n PROPERTY_INPUT_AS_TEXT: 'inputAsText',\r\n PROPERTY_NO_DOWNLOAD: 'noDownload',\r\n PROPERTY_NO_ERASE: 'noErase',\r\n PROPERTY_NO_LOCK: 'noLock',\r\n PROPERTY_NO_HISTORY: 'noHistory',\r\n PROPERTY_NO_MODIFY: 'noModify',\r\n PROPERTY_ALLOW_EDITION: 'allowEdition',\r\n PROPERTY_HIDE_SIGN_ICONS: 'hideSignButtons',\r\n PROPERTY_URL: 'url',\r\n PROPERTY_GRID_HIDE_BTN_ORDER: 'hideOrderButton',\r\n PROPERTY_GRID_HIDE_BTN_INCLUDE: 'hideIncludeButton',\r\n PROPERTY_REGEXP_MESSAGE: 'regExpMessage',\r\n PROPERTY_PAGED_GRID: 'paged',\r\n PROPERTY_PAGED_GRID_SIZE: 'pagedGridSize',\r\n PROPERTY_GRID_ALTER_IN_LAST_PAGE: 'alterOnlyLastPage',\r\n PROPERTY_GRID_PRINT_HORIZONTAL: 'printHorizontal',\r\n PROPERTY_STORE_MODAL_QUERY_RESULT: 'storeMdlQryResult',\r\n PROPERTY_INCLUDE_FIRST_ROW: 'includeFirstRow',\r\n PROPERTY_MAX_REG_GRID: 'maxRecords',\r\n PROPERTY_GRID_LABEL: 'gridColTitle',\r\n PROPERTY_GRID_QUERY: 'gridQuery',\r\n PROPERTY_HIDE_DOC_PERMISSIONS: 'hideDocPermissions',\r\n PROPERTY_VERIFY_SIGNATURE_ONLY: 'verifySignatureOnly',\r\n PROPERTY_GRID_HIDE_BTN_ADD: 'hideAddButton',\r\n PROPERTY_GRID_HIDE_BTN_DEL: 'hideDelButton',\r\n PROPERTY_HIDE_DOC_UPLOAD: 'hideDocUpload',\r\n PROPERTY_HIDE_DOC_DOWNLOAD: 'hideDocDownload',\r\n PROPERTY_HIDE_DOC_ERASE: 'hideDocErase',\r\n PROPERTY_HIDE_DOC_LOCK: 'hideDocLock',\r\n PROPERTY_HIDE_DOC_HISTORY: 'hideDocHistory',\r\n PROPERTY_HIDE_DOC_SIGN: 'hideSignButtons',\r\n PROPERTY_DISPLAY_NONE: 'displayNone',\r\n PROPERTY_DONT_BREAK_RADIO: 'dontBreakRadio',\r\n PROPERTY_CHECKED: 'checked',\r\n PROPERTY_FILE_PREVIEW: 'filePreview',\r\n PROPERTY_NOT_PRINT: 'noPrint',\r\n // tree component\r\n PROPERTY_SELECT_PARENT: 'selParent',\r\n PROPERTY_HEIGHT: 'height',\r\n PROPERTY_MULTISELECT: 'multiselect',\r\n PROPERTY_SEL_PARENT: 'selParent',\r\n PROPERTY_PARENT_ICON: 'parentIcon',\r\n PROPERTY_LEAF_ICON: 'leafIcon',\r\n PROPERTY_CSS_CLASS: 'cssClass',\r\n PROPERTY_DOC_TYPE: 'docType',\r\n // file component\r\n PROPERTY_HIDE_DOC_METADATA: 'hideDocMetadata',\r\n PROPERTY_TRANSLATION_REQUIRED: 'reqTrad',\r\n PROPERTY_SIGNATURE_REQUIRED: 'reqSign',\r\n PROPERTY_SHOW_TOOLTIP_AS_HELP: 'tooltipHelp',\r\n PROPERTY_DOCUMENT_MONITOR_DEF: 'documentMonitorDef',\r\n PROPERTY_DOCUMENT_MONITOR_CUS: 'documentMonitorCus',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_BTN: 'fileShwFoldTreeBtn',\r\n PROPERTY_DOCUMENT_SHOW_FOLD_TREE_STR: 'fileShwFoldTreeStr',\r\n PROPERTY_DOCUMENT_NO_ALLOW_DRAG_DROP: 'fileNoAllwDnD',\r\n PROPERTY_DOCUMENT_NO_SHOW_MODAL: 'fileDntShwDocMdlOnDrop',\r\n PROPERTY_DOCUMENT_SHOW_DESC: 'fileShowDesc',\r\n PROPERTY_DOCUMENT_DEFAULT_FOLDER: 'fileDefFolder',\r\n PROPERTY_DOCUMENT_ROOT_FOLDER: 'fileRootFolder',\r\n PROPERTY_DOCUMENT_EXP_DATE: 'fileExpDate',\r\n PROPERTY_DOCUMENT_DNT_SHW_DOC_MON: 'fileNotShowDocMon',\r\n PROPERTY_DOCUMENT_COLLAPSE_PERM: 'fileCollapsePermission',\r\n PROPERTY_DOCUMENT_COLLAPSE_META: 'fileCollapseMetadata',\r\n PROPERTY_DOCUMENT_COLLAPSE_FLD_STC: 'fileCollapseFldStrc',\r\n\r\n // Mensajes de error\r\n WRONG_ATT_TYPE_ERROR:\r\n 'Component does not support attributes of type <TOK>. Contact system administrator',\r\n\r\n // Keys almacenadas en los campos\r\n STORE_KEY_FIELD: 'field',\r\n STORE_KEY_FORM: 'form',\r\n\r\n PROPERTY_ARIA_DESCRIPTION: 'ariaDescription',\r\n PROPERTY_ARIA_LABEL: 'ariaLabel',\r\n PROPERTY_ALT: 'alt',\r\n PROPERTY_AUTO_COMPLETE: 'autoComplete',\r\n PROPERTY_AUTO_FOCUS: 'autoFocus',\r\n PROPERTY_INPUT_TYPE: 'inputType',\r\n PROPERTY_PLACE_HOLDER: 'placeHolder',\r\n PROPERTY_TITLE: 'title',\r\n});\r\n\r\nexport default FieldConstants;\r\n","const FormConstants = Object.freeze({\r\n PROPERTY_FORM_HIDDEN: 'frmHidden',\r\n PROPERTY_FORM_HIGHLIGHT: 'frmHighlight',\r\n PROPERTY_FORM_CLOSED: 'prpFrmClosed',\r\n PROPERTY_FORM_TAB: 'frmTab',\r\n PROPERTY_FORM_DONT_FIRE: 'frmDontFire',\r\n PROPERTY_FORM_READONLY: 'readOnly',\r\n});\r\n\r\nexport default FormConstants;\r\n","import FieldConstants from './FieldConstants';\r\nimport FormConstants from './FormConstants';\r\n\r\nexport const IProperty = {\r\n ...FieldConstants,\r\n ...FormConstants,\r\n} as const;\r\n","import { makeAutoObservable } from 'mobx';\r\n\r\nexport class ActionsController {\r\n static CONFIRM = 0;\r\n static NEXT = 1;\r\n static PREVIOUS = 2;\r\n static SIGN = 3;\r\n static SAVE = 4;\r\n static RELEASE = 5;\r\n static DELEGATE = 6;\r\n static SHARE = 7;\r\n static PRINT = 8;\r\n static VIEW_DOCS = 9;\r\n static CLOSE = 10;\r\n static SEND_TO_DESK = 11;\r\n\r\n static BTN_CONFIRM = ActionsController.CONFIRM;\r\n static BTN_DELEGATE = ActionsController.DELEGATE;\r\n static BTN_NEXT = ActionsController.NEXT;\r\n static BTN_PERV = ActionsController.PREVIOUS;\r\n static BTN_RELEASE = ActionsController.RELEASE;\r\n static BTN_SAVE = ActionsController.SAVE;\r\n static BTN_SHARE = ActionsController.SHARE;\r\n static BTN_SIGN = ActionsController.SIGN;\r\n\r\n private static _instance: ActionsController;\r\n public static get instance(): ActionsController {\r\n if (!ActionsController._instance) {\r\n ActionsController._instance = new ActionsController();\r\n }\r\n return ActionsController._instance;\r\n }\r\n private constructor() {\r\n makeAutoObservable(this);\r\n }\r\n\r\n private buttons = new Map<number, { disabled?: boolean; hidden?: boolean }>();\r\n\r\n private get(id: number) {\r\n if (!this.buttons.has(id)) {\r\n this.buttons.set(id, {});\r\n }\r\n return this.buttons.get(id)!;\r\n }\r\n\r\n public disable(id: number) {\r\n this.get(id).disabled = true;\r\n }\r\n public enable(id: number) {\r\n this.get(id).disabled = false;\r\n }\r\n public hide(id: number) {\r\n this.get(id).hidden = true;\r\n }\r\n public isDisabled(id: number) {\r\n return !!this.get(id).disabled;\r\n }\r\n public isHidden(id: number) {\r\n return !!this.get(id).hidden;\r\n }\r\n public show(id: number) {\r\n this.get(id).hidden = false;\r\n }\r\n}\r\n","import type { Execution } from '../main/Execution';\r\nimport { Field } from '../main/Execution/FormsExecution/Field';\r\nimport { ApiaForm } from './ApiaForm';\r\nimport FieldConstants from './constants/FieldConstants';\r\nimport type { IApiaField } from './types';\r\n\r\nexport abstract class ApiaField<\r\n Props extends typeof FieldConstants = typeof FieldConstants,\r\n> implements IApiaField<Props>\r\n{\r\n #execution: Execution;\r\n #field: Field<any>;\r\n\r\n constructor(execution: Execution, field: Field<any>) {\r\n this.#execution = execution;\r\n this.#field = field;\r\n }\r\n\r\n get fldType() {\r\n return this.#field.definition.fieldType;\r\n }\r\n\r\n get fldId() {\r\n return this.#field.definition.id;\r\n }\r\n\r\n get form() {\r\n return new ApiaForm(this.#execution, this.#field.getForm());\r\n }\r\n\r\n get index() {\r\n return this.#field.definition.index || 0;\r\n }\r\n\r\n setProperty<K extends keyof Props>(name: Props[K], value: unknown) {\r\n this.#field.setProperty(name as any, value);\r\n }\r\n\r\n getProperty<K extends keyof Props>(name: Props[K]): unknown {\r\n return this.#field.getProperty(name as any);\r\n }\r\n\r\n setFocus(): IApiaField | null {\r\n throw new Error('Method not implemented. ');\r\n }\r\n isInGrid(): boolean {\r\n return !!this.#field.properties.inGrid;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Button } from '../../main/Execution/FormsExecution/fields';\r\nimport { TApiaFieldCommonProperties } from '../../main/InitialData/types/fields/TApiaFieldProperties';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface TTextFieldProperties extends TApiaFieldCommonProperties {\r\n value?: string;\r\n}\r\nexport interface IButtonField extends IApiaField {\r\n fireClickEvent(): void;\r\n getValue(): string | null;\r\n}\r\n\r\nexport default class ButtonField extends ApiaField implements IButtonField {\r\n #field: Button;\r\n\r\n constructor(execution: Execution, field: Button) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n fireClickEvent(): void {\r\n if (this.#field.definition.id) {\r\n this.#field.fireEvent('onClick');\r\n }\r\n }\r\n\r\n getValue(): string | null {\r\n if (this.#field.definition.id) {\r\n return this.#field.properties.value ?? '';\r\n }\r\n return null;\r\n }\r\n\r\n clearValue(): void {\r\n this.#field.properties.value = '';\r\n }\r\n\r\n setValue(value: string): void {\r\n this.setProperty('value', value);\r\n }\r\n}\r\n","import type { Execution } from '../main/Execution';\r\nimport type {\r\n Attribute,\r\n FieldWithAttribute,\r\n} from '../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { SetValueOptions } from '../main/Execution/FormsExecution/types';\r\nimport type { TApiaFieldWithAttributeProperties } from '../main/InitialData/types/fields/TApiaFieldProperties';\r\nimport { ApiaField } from './ApiaField';\r\n\r\nexport class ApiaAttribute {\r\n #attribute: Attribute;\r\n constructor(attribute: Attribute) {\r\n this.#attribute = attribute;\r\n }\r\n\r\n get attLabel() {\r\n return this.#attribute.title;\r\n }\r\n\r\n get name() {\r\n return this.#attribute.name;\r\n }\r\n get id() {\r\n return this.#attribute.id;\r\n }\r\n get valueType() {\r\n return this.#attribute.valueType;\r\n }\r\n}\r\n\r\nexport class ApiaFieldWithAttribute<T = string | boolean> extends ApiaField {\r\n #field: FieldWithAttribute;\r\n\r\n constructor(execution: Execution, field: FieldWithAttribute) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n get attribute() {\r\n return new ApiaAttribute(this.#field.attribute);\r\n }\r\n\r\n clearValue() {\r\n this.#field.setValue('');\r\n }\r\n\r\n getValue() {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: T) {\r\n this.#field.setValue(v);\r\n }\r\n protected _setValue(v: T, options: SetValueOptions) {\r\n this.#field.setValue(v, options);\r\n }\r\n\r\n getLabel(): string | null | void {\r\n return this.#field.attribute.title;\r\n }\r\n\r\n getProperty<K extends keyof TApiaFieldWithAttributeProperties>(\r\n name: TApiaFieldWithAttributeProperties[K],\r\n ): unknown {\r\n return super.getProperty(name as any);\r\n }\r\n}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class EditorField extends ApiaFieldWithAttribute {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { PossibleValue } from '../types';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Select } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport type TOptionsAsArray = PossibleValue[];\r\n\r\nexport default class SelectField extends ApiaFieldWithAttribute<\r\n string | number | (string | number)[]\r\n> {\r\n #field: Select;\r\n constructor(execution: Execution, field: Select) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n // get all select options either as array[] or object\r\n getOptions(asObject: boolean): TOptionsMap | TOptionsAsArray | null {\r\n if (this.#field.definition.id) {\r\n const options = arrayOrArray(this.#field.properties.possibleValue);\r\n const obj = new Map<string, PossibleValue>();\r\n if (asObject) {\r\n options.forEach((c) => obj.set(String(c.value), c));\r\n return obj;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // adds a option to the select field\r\n addOption(\r\n optionValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n let isValueRepeated = false;\r\n if (this.#field.definition.id !== null) {\r\n if (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.value === optionValue,\r\n ) &&\r\n allowRepeatedValue\r\n ) {\r\n isValueRepeated = true;\r\n } else {\r\n isValueRepeated = false;\r\n }\r\n\r\n if (allowRepeatedValue || (!isValueRepeated && !allowRepeatedValue))\r\n arrayOrArray(this.#field.properties.possibleValue).push({\r\n value: optionValue,\r\n label: showValue,\r\n });\r\n }\r\n }\r\n\r\n // overwrite all options in select field\r\n setOptions(optionsArray: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = arrayOrArray(optionsArray);\r\n }\r\n }\r\n\r\n removeOption(optionValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== optionValue,\r\n );\r\n }\r\n }\r\n\r\n // get selected option either as array or object key/value\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n const arr = arrayOrArray(this.#field.properties.possibleValue);\r\n if (this.#field.definition.id) {\r\n if (asObject) {\r\n let obj = null;\r\n arr.forEach((c) => {\r\n if (c.selected) {\r\n obj = c;\r\n }\r\n });\r\n return obj;\r\n } else {\r\n return arrayOrArray(arr.find((c) => c.selected));\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedText(): string | null {\r\n if (this.#field.definition.id) {\r\n return (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.selected,\r\n )?.label ?? 'Not option selected'\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // // remove all select options\r\n clearOptions(): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).forEach(\r\n (c) => (c.selected = false),\r\n );\r\n }\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Input } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class InputField extends ApiaFieldWithAttribute {\r\n #field: Input;\r\n constructor(execution: Execution, field: Input) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getObjectValue(): number | string | boolean | null {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: string): void {\r\n if (this.#field.attribute.valueType === 'D') {\r\n this.#field.setValue(v, { format: 'd/m/Y' });\r\n } else {\r\n this.#field.setValue(v);\r\n }\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { Tree } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport default class TreeField extends ApiaFieldWithAttribute<\r\n string | number | (string | number)[]\r\n> {\r\n #field: Tree;\r\n constructor(execution: Execution, field: Tree) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n setValue(v: string | number | (string | number)[]): void {\r\n this.#field.setValue(arrayOrArray(v));\r\n }\r\n}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { isTrue } from '@apia/util';\r\n\r\nexport default class CheckField extends ApiaFieldWithAttribute {\r\n clearValue(): void {\r\n this.setValue(false);\r\n }\r\n\r\n setValue(value: string | boolean | number): void {\r\n // accepts 1/0 or true/false as values\r\n let val;\r\n const isBool = isTrue(value as unknown as string);\r\n if (isBool === true || isBool === false) {\r\n val = isBool;\r\n } else {\r\n throw new Error(\r\n 'Apia JSApi Error: The function setValue for a Checkbox field only accepts boolean or string type for value parameter.',\r\n );\r\n }\r\n super.setValue(val);\r\n }\r\n}\r\n","import { PossibleValue } from '../types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Radio } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport default class RadioField extends ApiaFieldWithAttribute {\r\n #field: Radio;\r\n constructor(execution: Execution, field: Radio) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getOptions(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n radioValues.forEach((c) => options.set(String(c.value), c));\r\n\r\n return options;\r\n }\r\n\r\n return radioValues;\r\n }\r\n return null;\r\n }\r\n\r\n clearOptions(): void | null {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = [];\r\n }\r\n }\r\n\r\n addOption(\r\n radioValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n if (this.#field.definition.id) {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n const isValueIsRepeated = radioValues.some((c) => {\r\n return c.value === radioValue.toString();\r\n });\r\n\r\n if (allowRepeatedValue || !isValueIsRepeated) {\r\n radioValues.push({\r\n value: radioValue.toString(),\r\n label: showValue,\r\n });\r\n }\r\n }\r\n }\r\n\r\n setOptions(options: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = options;\r\n }\r\n }\r\n\r\n removeOption(radioValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== radioValue,\r\n );\r\n }\r\n }\r\n\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue | null {\r\n const radioValues = arrayOrArray(this.#field.properties.possibleValue);\r\n\r\n const selected = radioValues.find((c) => c.selected);\r\n if (!selected) return null;\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n options.set(String(selected?.value), selected);\r\n return options;\r\n } else {\r\n return selected;\r\n }\r\n }\r\n\r\n getSelectedText(): string | undefined | null {\r\n if (this.#field.definition.id) {\r\n const possibleValue = arrayOrArray(this.#field.properties.possibleValue);\r\n if (possibleValue) {\r\n return possibleValue.find((c) => c.selected)?.label;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { PossibleValue } from '../types';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { Multiple } from '../../main/Execution/FormsExecution/fields';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport type TOptionsMap = Map<string, PossibleValue>;\r\n\r\nexport default class MultipleField extends ApiaFieldWithAttribute<string[]> {\r\n #field: Multiple;\r\n constructor(execution: Execution, field: Multiple) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n addOption(\r\n optionValue: string | number,\r\n showValue: string,\r\n allowRepeatedValue: boolean,\r\n ): void {\r\n let isValueRepeated = false;\r\n if (this.#field.definition.id !== null) {\r\n if (\r\n arrayOrArray(this.#field.properties.possibleValue).find(\r\n (c) => c.value === optionValue,\r\n ) &&\r\n allowRepeatedValue\r\n ) {\r\n isValueRepeated = true;\r\n } else {\r\n isValueRepeated = false;\r\n }\r\n\r\n if (allowRepeatedValue || (!isValueRepeated && !allowRepeatedValue))\r\n arrayOrArray(this.#field.properties.possibleValue).push({\r\n value: optionValue,\r\n label: showValue,\r\n });\r\n }\r\n }\r\n setValue(value: string[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.setValue(value);\r\n }\r\n }\r\n clearOptions(): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).forEach(\r\n (c) => (c.selected = false),\r\n );\r\n }\r\n }\r\n getSelectedOption(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const selected = arrayOrArray(\r\n this.#field.properties.possibleValue,\r\n ).filter((c) => c.selected);\r\n\r\n if (selected) {\r\n if (asObject) {\r\n const options = new Map<string, PossibleValue>();\r\n selected.forEach((c) => options.set(String(c.value), c));\r\n return options;\r\n }\r\n\r\n return selected;\r\n }\r\n }\r\n return null;\r\n }\r\n getOptions(asObject: boolean): TOptionsMap | PossibleValue[] | null {\r\n if (this.#field.definition.id) {\r\n const options = arrayOrArray(this.#field.properties.possibleValue);\r\n const obj = new Map<string, PossibleValue>();\r\n if (asObject) {\r\n options.forEach((c) => obj.set(String(c.value), c));\r\n return obj;\r\n }\r\n\r\n return options;\r\n }\r\n return null;\r\n }\r\n setOptions(optionsArray: PossibleValue[]): void {\r\n if (this.#field.definition.id) {\r\n this.#field.properties.possibleValue = arrayOrArray(optionsArray);\r\n }\r\n }\r\n removeOption(optionValue: string | number): void {\r\n if (this.#field.definition.id) {\r\n arrayOrArray(this.#field.properties.possibleValue).filter(\r\n (c) => c.value !== optionValue,\r\n );\r\n }\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\n\r\nexport default class HiddenField extends ApiaField {}\r\n","import { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class AreaField extends ApiaFieldWithAttribute {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Image } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface IImageField extends IApiaField {\r\n getValue(): null;\r\n setValue(): null;\r\n getLabel(): void;\r\n clearValue(): null;\r\n}\r\n\r\nexport default class ImageField extends ApiaField implements IImageField {\r\n #field: Image;\r\n constructor(execution: Execution, field: Image) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n clearValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n getLabel(): void {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n\r\n getValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n setValue(): null {\r\n if (this.#field.definition.id) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Link } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface ILinkField extends IApiaField {\r\n getLabel(): void;\r\n}\r\n\r\nexport default class LinkField extends ApiaField implements ILinkField {\r\n #field: Link;\r\n constructor(execution: Execution, field: Link) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getLabel(): void {\r\n if (this.#field.definition.fieldType) {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { Field } from '../../main/Execution/FormsExecution/Field';\r\nimport { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport interface ITextField extends IApiaField {\r\n getLabel(): void;\r\n}\r\n\r\nexport default class TextField extends ApiaField implements ITextField {\r\n #field: Field;\r\n constructor(execution: Execution, field: Field) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getLabel(): void {\r\n throw new Error(\r\n `Apia JSApi Error: The field ${this.#field.definition.fieldType} does not use a label`,\r\n );\r\n }\r\n setValue(value: string): void {\r\n this.setProperty('value', value);\r\n }\r\n}\r\n","import { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport { TApiaFieldCommonProperties } from '../../main/InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport class CustomComponentField {\r\n #field: CustomComponent;\r\n constructor(field: CustomComponent) {\r\n this.#field = field;\r\n }\r\n\r\n fireEvent(name: string) {\r\n this.#field.fireEvent(name);\r\n }\r\n getProperty(name: string): any {\r\n return this.#field.getProperty(name);\r\n }\r\n setFocus(): void {\r\n throw new Error('Method not implemented.');\r\n }\r\n isInGrid(): boolean {\r\n return false;\r\n }\r\n getStringValue(attName: string) {\r\n return this.#field.getStringValue(attName);\r\n }\r\n getValue(attName: string, index = 0) {\r\n return this.#field.getValue(attName, index);\r\n }\r\n setProperty<K extends keyof TApiaFieldCommonProperties>(\r\n name: K,\r\n value: any,\r\n ): void {\r\n this.#field.setProperty(name, value);\r\n }\r\n setStringValue(attName: string, value: string) {\r\n return this.#field.setStringValue(attName, value);\r\n }\r\n setValue(attName: string, value: any, index = 0) {\r\n return this.#field.setValue(attName, value, index);\r\n }\r\n}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { CustomComponent } from '../../main/Execution/FormsExecution/customComponents/CustomComponent';\r\nimport { ModalInput } from '../../main/Execution/FormsExecution/fields';\r\nimport type {\r\n Button,\r\n Captcha,\r\n Checkbox,\r\n Editor,\r\n File,\r\n Grid,\r\n Hidden,\r\n Image,\r\n Input,\r\n Label,\r\n Link,\r\n Multiple,\r\n Password,\r\n Radio,\r\n Select,\r\n Textarea,\r\n Title,\r\n Tree,\r\n} from '../../main/Execution/FormsExecution/fields';\r\nimport FieldConstants from '../constants/FieldConstants';\r\nimport {\r\n ButtonField,\r\n CaptchaField,\r\n CheckField,\r\n EditorField,\r\n FileUploaderField,\r\n HiddenField,\r\n ImageField,\r\n InputField,\r\n LinkField,\r\n ModalInputField,\r\n MultipleField,\r\n PasswordField,\r\n RadioField,\r\n SelectField,\r\n TextAreaField,\r\n TextField,\r\n TreeField,\r\n} from '../fields';\r\nimport { CustomComponentField } from '../fields/CustomComponentField';\r\nimport GridField from '../fields/GridField';\r\nimport type { IApiaField } from '../types';\r\nimport type { TCreateNewField } from './asynCreateApiaField';\r\n\r\nexport const createNewField: TCreateNewField = (\r\n execution: Execution,\r\n field,\r\n) => {\r\n if (field instanceof CustomComponent) {\r\n return new CustomComponentField(field) as any;\r\n } else {\r\n const { fieldType } = field.definition;\r\n let newField: IApiaField<any> | null = null;\r\n\r\n if (field instanceof ModalInput) {\r\n return new ModalInputField(execution, field as ModalInput);\r\n }\r\n\r\n switch (fieldType) {\r\n case FieldConstants.TYPE_INPUT:\r\n newField = new InputField(execution, field as Input);\r\n break;\r\n case FieldConstants.TYPE_PASSWORD:\r\n newField = new PasswordField(execution, field as Password);\r\n break;\r\n case FieldConstants.TYPE_SELECT:\r\n newField = new SelectField(execution, field as Select);\r\n break;\r\n case FieldConstants.TYPE_RADIO:\r\n newField = new RadioField(execution, field as Radio);\r\n break;\r\n case FieldConstants.TYPE_CHECK:\r\n newField = new CheckField(execution, field as Checkbox);\r\n break;\r\n case FieldConstants.TYPE_BUTTON:\r\n newField = new ButtonField(execution, field as Button);\r\n break;\r\n case FieldConstants.TYPE_MULTIPLE:\r\n newField = new MultipleField(execution, field as Multiple);\r\n break;\r\n case FieldConstants.TYPE_HIDDEN:\r\n newField = new HiddenField(execution, field as Hidden);\r\n break;\r\n case FieldConstants.TYPE_AREA:\r\n newField = new TextAreaField(execution, field as Textarea);\r\n break;\r\n case FieldConstants.TYPE_GRID:\r\n newField = new GridField(execution, field as Grid);\r\n break;\r\n case FieldConstants.TYPE_IMAGE:\r\n newField = new ImageField(execution, field as Image);\r\n break;\r\n case FieldConstants.TYPE_HREF:\r\n newField = new LinkField(execution, field as Link);\r\n break;\r\n case FieldConstants.TYPE_LABEL:\r\n newField = new TextField(execution, field as Label);\r\n break;\r\n case FieldConstants.TYPE_TITLE:\r\n newField = new TextField(execution, field as Title);\r\n break;\r\n case FieldConstants.TYPE_FILE:\r\n newField = new FileUploaderField(execution, field as File);\r\n break;\r\n case FieldConstants.TYPE_CAPTCHA:\r\n newField = new CaptchaField(execution, field as Captcha);\r\n break;\r\n case FieldConstants.TYPE_TREE:\r\n newField = new TreeField(execution, field as Tree);\r\n break;\r\n case FieldConstants.TYPE_EDITOR:\r\n newField = new EditorField(execution, field as Editor);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return newField;\r\n }\r\n};\r\n","import { ApiaField } from '../ApiaField';\r\nimport { arrayOrArray, Mutex, noNaN } from '@apia/util';\r\nimport { createNewField } from '../utils/createApiaField';\r\nimport { Grid } from '../../main/Execution/FormsExecution/fields';\r\nimport { FieldWithAttribute } from '../../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { IApiaField } from '../types';\r\nimport { getWindow } from '../../util/dom/getWindow';\r\nimport type { Execution } from '../../main/Execution';\r\n\r\nexport default class GridField extends ApiaField {\r\n #execution: Execution;\r\n #field: Grid;\r\n\r\n constructor(execution: Execution, field: Grid) {\r\n super(execution, field);\r\n this.#execution = execution;\r\n this.#field = field;\r\n }\r\n\r\n #mutex = new Mutex();\r\n\r\n async addRow(): Promise<IApiaField[]> {\r\n try {\r\n await this.#mutex.acquire();\r\n const result = await this.#field.addRow();\r\n\r\n if (result) {\r\n return this.getRow(this.#field.finalIndex)!;\r\n }\r\n\r\n return [];\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n clearGrid() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n clearPage() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n async clearRow(index: number) {\r\n try {\r\n await this.#mutex.acquire();\r\n\r\n const row = this.#field.getRowByFieldIndex(index);\r\n\r\n if (!row) {\r\n throw new Error(`Row ${index} not found`);\r\n }\r\n\r\n row.forEach((c) => {\r\n if (c instanceof FieldWithAttribute) c.state.value = '';\r\n });\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n closeForm(): GridField {\r\n this.#field.closeEditionModal();\r\n return this;\r\n }\r\n\r\n async deleteAllRows() {\r\n try {\r\n await this.#mutex.acquire();\r\n await this.#field.deleteAllRows();\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n async deleteGrid() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n deletePage() {\r\n throw new Error('Method deprecated');\r\n }\r\n\r\n async deleteRow(index: number) {\r\n try {\r\n await this.#mutex.acquire();\r\n this.#field.deleteRows(index);\r\n } finally {\r\n this.#mutex.release();\r\n }\r\n }\r\n\r\n editRow(index: number) {\r\n getWindow(this.#execution).dispatchEvent(\r\n new CustomEvent('openGridEdition', {\r\n detail: { index, grid: this.#field },\r\n }),\r\n );\r\n }\r\n\r\n getSelectedIndexes(useAbsoluteIndex?: boolean) {\r\n return this.#field.controller\r\n .getSelectedRows()\r\n .map(\r\n (row) =>\r\n row.getIndex() +\r\n (useAbsoluteIndex ? +noNaN(this.#field.startIndex) : 0),\r\n );\r\n }\r\n\r\n getAllColumns() {\r\n return this.#field\r\n .getAllColumns()\r\n .map((c) =>\r\n c.map((f) => createNewField(this.#field.getForm().execution, f)),\r\n );\r\n }\r\n\r\n getColumn(fieldName: string) {\r\n const fields = this.#field.getColumn(fieldName);\r\n if (fields) {\r\n return arrayOrArray(fields).map((c) =>\r\n createNewField(this.#field.getForm().execution, c!),\r\n );\r\n }\r\n return [];\r\n }\r\n\r\n getCurrentPage() {\r\n return this.#field.getCurrentPage();\r\n }\r\n\r\n getField(fieldName: string, fieldIndex?: number) {\r\n const fields = this.#field.getField(fieldName, fieldIndex);\r\n\r\n if (fields) {\r\n return fieldIndex !== undefined\r\n ? createNewField(\r\n this.#field.getForm().execution,\r\n arrayOrArray(fields)[0]!,\r\n )\r\n : arrayOrArray(fields)\r\n .map((c) => createNewField(this.#field.getForm().execution, c))\r\n .filter((c): c is IApiaField => Boolean(c));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getPageCount() {\r\n return this.#field.pageCount;\r\n }\r\n\r\n getPageSize() {\r\n return this.#field.pageSize;\r\n }\r\n\r\n getRow(index: number) {\r\n return this.#field\r\n .getRowByFieldIndex(index)\r\n ?.map((c) => createNewField(this.#field.getForm().execution, c)!);\r\n }\r\n\r\n getSelection(): IApiaField[][] {\r\n const selected = this.#field.getSelectedRows();\r\n const returnObj: IApiaField[][] = [];\r\n selected.forEach((r) => {\r\n const row: IApiaField[] = [];\r\n r.forEach((c) => {\r\n const fld = createNewField(this.#field.getForm().execution, c);\r\n if (fld) {\r\n row.push(fld);\r\n }\r\n });\r\n returnObj.push(row);\r\n });\r\n return returnObj;\r\n }\r\n\r\n get id() {\r\n return this.#field.definition.id;\r\n }\r\n\r\n isPaged() {\r\n return this.#field.properties.paged;\r\n }\r\n\r\n get rowsCount() {\r\n return this.#field.length;\r\n }\r\n\r\n toggleColumnVisibility(fieldName: string, isShown?: boolean) {\r\n this.#field.toggleColumnVisibility(fieldName, isShown);\r\n }\r\n\r\n toggleDeleteButton(index: number, isShown?: boolean) {\r\n this.#field.toggleDeleteButton(index, isShown);\r\n }\r\n\r\n toggleEditFormButton(rowIndex: number, isShown?: boolean) {\r\n this.#field.toggleEditFormButton(rowIndex, isShown);\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\nimport { IApiaField } from '../types';\r\n\r\nexport type TCaptchaField = IApiaField;\r\n\r\nexport default class CaptchaField extends ApiaField implements TCaptchaField {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { File } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\nimport { reaction } from 'mobx';\r\n\r\nexport default class FileUploaderField extends ApiaFieldWithAttribute {\r\n #field: File;\r\n constructor(execution: Execution, field: File) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n onChange(cb: (newValue: unknown) => unknown) {\r\n reaction(\r\n () => {\r\n this.#field.getValue();\r\n },\r\n () => {\r\n cb(this.#field.getValue());\r\n },\r\n { fireImmediately: false },\r\n );\r\n }\r\n\r\n setValue(): null {\r\n if (this.#field.definition.id && this.#field.definition.fieldType) {\r\n throw new Error(\r\n `Apia JSApi Error: The Field ${this.#field.definition.fieldType} does not support this function`,\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n async downloadDocument(): Promise<void> {\r\n await this.#field.downloadDocument();\r\n }\r\n}\r\n","import { ApiaField } from '../ApiaField';\r\n\r\nexport default class PasswordField extends ApiaField {}\r\n","import type { Execution } from '../../main/Execution';\r\nimport { ModalInput } from '../../main/Execution/FormsExecution/fields';\r\nimport { ApiaFieldWithAttribute } from '../ApiaFieldWithAttribute';\r\n\r\nexport default class ModalInputField extends ApiaFieldWithAttribute {\r\n #field: ModalInput;\r\n constructor(execution: Execution, field: ModalInput) {\r\n super(execution, field);\r\n this.#field = field;\r\n }\r\n\r\n getObjectValue(): any | null {\r\n return this.#field.getValue();\r\n }\r\n\r\n setValue(v: any): void {\r\n this.#field.setValue(v);\r\n }\r\n public async setValueFromInputWrite(value: string) {\r\n await this.#field.setValueFromInputWrite(value);\r\n }\r\n}\r\n","import { DataGridField as GridField } from './fields';\r\nimport type { IApiaField, IApiaForm } from './types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaFieldWithAttribute } from './ApiaFieldWithAttribute';\r\nimport { createNewField } from './utils/createApiaField';\r\nimport type { Form } from '../main/Execution/FormsExecution/Form';\r\nimport type { FieldWithAttribute } from '../main/Execution/FormsExecution/FieldWithAttribute';\r\nimport type { Field } from '../main/Execution/FormsExecution/Field';\r\nimport type { Execution, TModalSize } from '../main/Execution';\r\nimport FormConstants from './constants/FormConstants';\r\n\r\nexport class ApiaForm implements IApiaForm {\r\n #form: Form;\r\n #execution: Execution;\r\n constructor(execution: Execution, form: Form) {\r\n this.#form = form;\r\n this.#execution = execution;\r\n }\r\n\r\n getFrmParent(): string {\r\n return this.#form.definition.frmParent;\r\n }\r\n\r\n getFrmId(): string | null {\r\n return this.#form.definition.id;\r\n }\r\n\r\n getFormName(): string {\r\n return this.#form.definition.formName;\r\n }\r\n getFormTitle(): string {\r\n return this.#form.definition.formTitle;\r\n }\r\n openForm(): void {\r\n this.#form.setProperty('prpFrmClosed', false);\r\n }\r\n closeForm(): void {\r\n this.#form.setProperty('prpFrmClosed', true);\r\n }\r\n getProperty<K extends keyof typeof FormConstants>(\r\n name: (typeof FormConstants)[K],\r\n ): unknown {\r\n return this.#form.getProperty(name as any);\r\n }\r\n setProperty<K extends keyof typeof FormConstants>(\r\n name: (typeof FormConstants)[K],\r\n value: unknown,\r\n ): void {\r\n if (name === 'readOnly') {\r\n throw new Error('Cannot update readonly property on forms');\r\n }\r\n this.#form.setProperty(name, value as any);\r\n }\r\n getCustomComponent(attName: string) {\r\n return this.#form.getCustomComponentByAttName(attName);\r\n }\r\n getField(fld: string | number, index?: number): IApiaField | undefined {\r\n const field = this.#form.getField(fld as string, index);\r\n\r\n if (field) {\r\n return createNewField(this.#execution, field as FieldWithAttribute)!;\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldById(fldId: string) {\r\n const field = this.#form.getFieldById(fldId);\r\n\r\n if (field) {\r\n return createNewField(this.#execution, field as Field);\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldColumn(name: string): IApiaField[] {\r\n return arrayOrArray(this.#form.getFieldByName(name))\r\n .map((c) => createNewField(this.#execution, c))\r\n .filter((f): f is IApiaField => Boolean(f));\r\n }\r\n getAllFields(): IApiaField[] {\r\n return this.#form.allFields\r\n .map((c) => createNewField(this.#execution, c))\r\n .filter((f): f is IApiaField => Boolean(f));\r\n }\r\n clearForm(clearReadonlyFields: boolean, deleteGridsRows: boolean): void {\r\n this.getAllFields().forEach((c) => {\r\n if (deleteGridsRows && c instanceof GridField) {\r\n c.clearGrid();\r\n }\r\n\r\n if (c instanceof ApiaFieldWithAttribute) {\r\n if (!c.getProperty('readonly') || clearReadonlyFields) {\r\n c.setValue('');\r\n }\r\n }\r\n });\r\n }\r\n\r\n hideModal() {\r\n this.#execution.emit('hideFormModal', this.#form);\r\n }\r\n\r\n showAsModal(size?: TModalSize) {\r\n this.#execution.emit('showFormAsModal', { form: this.#form, size });\r\n }\r\n}\r\n","import { ActionsController } from './ActionController';\r\nimport type { IApiaField, IApiaForm, IApiaFunctions } from './types';\r\nimport { ApiaForm } from './ApiaForm';\r\nimport type { TFrmParent } from '../main/InitialData/types/TApiaForm';\r\nimport { Execution } from '../main/Execution';\r\nimport { getWindow } from '../util/dom/getWindow';\r\nimport { arrayOrArray } from '@apia/util';\r\n\r\ndeclare global {\r\n interface Window {\r\n lastModalReturn: string[];\r\n }\r\n}\r\n\r\nexport class ApiaFunctions implements IApiaFunctions {\r\n #execution: Execution;\r\n\r\n constructor(execution: Execution) {\r\n this.#execution = execution;\r\n }\r\n\r\n toJSNumber(_value: string): number | string {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n toApiaNumber(_value: number): number | string {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n openTab(_title: string, _url: string): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n showMessage(_text: string): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n showConfirm(\r\n _text: string,\r\n _title: string,\r\n _callbackFn: (win: boolean) => unknown,\r\n ): void {\r\n throw new Error('Deprecated, use ApiaUtil instead.');\r\n }\r\n\r\n getFormByType(frmName: string, frmType: TFrmParent): IApiaForm | null {\r\n const form = this.#execution.getFormByName(frmName, frmType);\r\n if (form) return new ApiaForm(this.#execution, form);\r\n return null;\r\n }\r\n\r\n admEntity(\r\n entName: string,\r\n entNum?: number,\r\n parameters?: string,\r\n width?: number,\r\n height?: number,\r\n ) {\r\n entName;\r\n entNum;\r\n parameters;\r\n width;\r\n height;\r\n }\r\n\r\n clearMessages() {}\r\n\r\n clickActionButton(button: number) {\r\n const id = Number(button);\r\n\r\n switch (id) {\r\n case ActionsController.CONFIRM:\r\n this.#execution.flow.confirm();\r\n break;\r\n case ActionsController.NEXT:\r\n this.#execution.flow.next();\r\n break;\r\n case ActionsController.PREVIOUS:\r\n this.#execution.flow.back();\r\n break;\r\n case ActionsController.SAVE:\r\n this.#execution.flow.save();\r\n break;\r\n case ActionsController.RELEASE:\r\n this.#execution.flow.release();\r\n break;\r\n case ActionsController.DELEGATE:\r\n this.#execution.flow.delegate();\r\n break;\r\n case ActionsController.SHARE:\r\n this.#execution.flow.share();\r\n break;\r\n case ActionsController.VIEW_DOCS:\r\n this.#execution.flow.viewDocs();\r\n break;\r\n case ActionsController.PRINT:\r\n this.#execution.flow.print();\r\n break;\r\n case ActionsController.SEND_TO_DESK:\r\n this.#execution.sendToDesktop();\r\n break;\r\n }\r\n }\r\n\r\n disableActionButton(id: number): void {\r\n ActionsController.instance.disable(id);\r\n }\r\n\r\n enableActionButton(id: number): void {\r\n ActionsController.instance.enable(id);\r\n }\r\n\r\n getAllForms(): IApiaForm[] {\r\n return this.#execution\r\n .getAllForms()\r\n .map((c) => new ApiaForm(this.#execution, c));\r\n }\r\n getAllFormsByType(type: 'P' | 'E'): IApiaForm[] {\r\n return this.#execution.getAllForms().reduce<ApiaForm[]>((acc, c) => {\r\n if (c.definition.frmParent === type) {\r\n acc.push(new ApiaForm(this.#execution, c));\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n getAttField(\r\n attType: 'P' | 'E',\r\n attId: string,\r\n ): IApiaField | IApiaField[] | undefined {\r\n const fields: IApiaField[] = [];\r\n this.getAllFormsByType(attType).forEach((c) =>\r\n fields.push(c.getField(attId) as IApiaField),\r\n );\r\n return fields;\r\n }\r\n\r\n getCurrentLanguageCode(): string | null {\r\n return getWindow(this.#execution).LANG_CODE;\r\n }\r\n\r\n getCurrentProcessName(): string | null {\r\n return this.#execution.environment.properties?.processName ?? '';\r\n }\r\n getCurrentStep(): number | null {\r\n return this.#execution.currentStep;\r\n }\r\n\r\n getCurrentTaskName(): string | null {\r\n return this.#execution.environment.properties?.taskName ?? '';\r\n }\r\n\r\n getEntityForm(frmName: string): IApiaForm | null {\r\n const frm = this.getForm(frmName, 'E');\r\n if (frm) return frm;\r\n return null;\r\n }\r\n\r\n getForm(frmName: string, frmType?: string): IApiaForm | null {\r\n if (frmType === 'E') return this.getFormByType(frmName, frmType);\r\n if (frmType === 'P') return this.getFormByType(frmName, frmType);\r\n const eFrm = this.getFormByType(frmName, 'E');\r\n if (eFrm) {\r\n return eFrm;\r\n }\r\n const pForm = this.getFormByType(frmName, 'P');\r\n return pForm;\r\n }\r\n\r\n getLastModalReturn() {\r\n return this.#execution.getLastModalReturn();\r\n }\r\n\r\n getModalReturn() {\r\n return this.getLastModalReturn();\r\n }\r\n\r\n getModalSelectedRow() {\r\n return this.#execution.getLastModalReturn()?.slice(2);\r\n }\r\n\r\n getModalShowValue() {\r\n return this.#execution.getLastModalReturn()[1];\r\n }\r\n\r\n getModalValue() {\r\n return this.#execution.getLastModalReturn()[0];\r\n }\r\n\r\n getProcessForm(frmName: string): IApiaForm | null {\r\n const frm = this.getForm(frmName, 'P');\r\n if (frm) return frm;\r\n return null;\r\n }\r\n\r\n getRootPath(): string | null {\r\n try {\r\n return getWindow(this.#execution).APIA_ROOT_CONTEXT;\r\n } catch (e: unknown) {\r\n if (e instanceof Error) {\r\n console.error(`Apia JSApi Error: ${e.message}`);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n hideActionButton(id: number): void {\r\n ActionsController.instance.hide(id);\r\n }\r\n\r\n isActionButtonDisabled(id: number) {\r\n return ActionsController.instance.isDisabled(id);\r\n }\r\n isActionButtonHidden(id: number) {\r\n return ActionsController.instance.isHidden(id);\r\n }\r\n\r\n saveTask() {\r\n this.#execution.flow.save();\r\n }\r\n\r\n setLastModalReturn(value: string[]) {\r\n getWindow(this.#execution).lastModalReturn = value;\r\n }\r\n\r\n setStepTitle(stepNumber: number, stepTitle: string): void {\r\n this.#execution.setStepTitle(stepNumber, stepTitle);\r\n }\r\n\r\n showActionButton(id: number): void {\r\n ActionsController.instance.show(id);\r\n }\r\n\r\n viewAdmEntity(entName: string, entNum?: number) {\r\n this.admEntity(entName, entNum);\r\n }\r\n changeTab(index: number[]): void {\r\n if (window.tabsController)\r\n (window.tabsController as any).tabsList.forEach((tab: any, i: number) => {\r\n if (arrayOrArray(index).includes(i)) tab.open();\r\n });\r\n }\r\n}\r\n","import { computed, makeObservable, observable, toJS } from 'mobx';\r\nimport { makeApiaUrl } from '../../../../util';\r\nimport { actions } from '../constants/actions';\r\nimport { parseXml, post } from '../../../../util';\r\nimport type { Form } from '../Form';\r\nimport { setAjaxFormResponse } from '../events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../types';\r\nimport { ResponseSysMessages } from '../../../../util/api/types';\r\nimport {\r\n ComponentEvent,\r\n TCusCmpStateRequest,\r\n TCustomComponentDefaultResponse,\r\n TCustomComponentDefinition,\r\n} from '../../../InitialData/types/TApiaForm';\r\nimport {\r\n arrayOrArray,\r\n decodeBase64ToUtf8,\r\n DeepReadonly,\r\n encodeStrToBase64Utf8,\r\n} from '@apia/util';\r\nimport { TFncParams } from '../Field';\r\nimport { MessageNotification } from '../../../Notifications/MessageNotification';\r\nimport { labels } from '../../../../util/labels/labels';\r\nimport { ApiaForm, ApiaFunctions } from '../../../../programming';\r\nimport { getWindow } from '../../../../util/dom/getWindow';\r\nimport type { Execution } from '../..';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\nimport { parseSuccessfulResponse } from '../../../../util/api/apiaApi';\r\n\r\nexport type TCustomComponentState = {\r\n isLoading: boolean;\r\n\r\n attributes: Record<string, any[]>;\r\n properties: Record<string, any>;\r\n additional: any;\r\n\r\n component: any;\r\n};\r\n\r\nexport class CustomComponent {\r\n #hasInited = false;\r\n private form: Form = {} as Form;\r\n private _state: TCustomComponentState = {\r\n isLoading: false,\r\n attributes: {},\r\n properties: {},\r\n additional: {},\r\n component: null,\r\n };\r\n\r\n constructor(\r\n public execution: Execution,\r\n public readonly definition: TCustomComponentDefinition,\r\n ) {\r\n if (definition.error_while_processing) {\r\n throw new Error(\r\n `Cannot initialize custom component ${definition.name}: ${definition.error_while_processing}`,\r\n );\r\n }\r\n\r\n makeObservable<CustomComponent, '_state'>(this, {\r\n _state: observable,\r\n state: computed,\r\n });\r\n this.parseStateObject(definition.state.state);\r\n }\r\n\r\n public get state(): DeepReadonly<TCustomComponentState> {\r\n return toJS(this._state);\r\n }\r\n\r\n public getAdditional<T>() {\r\n return this.state.additional as DeepReadonly<T>;\r\n }\r\n\r\n public getCurrentForm() {\r\n return new ApiaForm(this.execution!, this.form);\r\n }\r\n\r\n async init(form: Form) {\r\n if (this.#hasInited) throw new Error('Cannot init field twice');\r\n this.#hasInited = true;\r\n this.form = form;\r\n }\r\n\r\n private parseStateObject(o: TCusCmpStateRequest) {\r\n if (o.additional) {\r\n try {\r\n this._state.additional = JSON.parse(o.additional);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n arrayOrArray(o.attribute).forEach((c) => {\r\n this._state.attributes[c.name] = arrayOrArray(\r\n JSON.parse(decodeBase64ToUtf8(c.values)),\r\n );\r\n });\r\n arrayOrArray(o.property).forEach((c) => {\r\n this._state.properties[c.name] = c.value;\r\n });\r\n }\r\n\r\n public async processResult<\r\n Result extends Record<string, unknown> = Record<string, unknown>,\r\n >(res?: TCustomComponentDefaultResponse | null) {\r\n let proceed = true;\r\n const scheduledEvents: string[] = [];\r\n\r\n const newState = res?.processResult?.state;\r\n\r\n if (newState) {\r\n for (const directive of arrayOrArray(newState.directive)) {\r\n if (directive.type === 'RELOAD') {\r\n proceed = false;\r\n getWindow(this.execution).location.assign(\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'reload',\r\n nuevo: true,\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n );\r\n } else if (directive.type === 'FIRE') {\r\n scheduledEvents.push(directive.content);\r\n }\r\n }\r\n }\r\n\r\n if (proceed) {\r\n if (res!.ajaxUpdated) {\r\n const result = parseXml(res!.ajaxUpdated);\r\n\r\n setAjaxFormResponse(\r\n this.execution,\r\n result as TFieldAjaxEventResponsePayload & ResponseSysMessages,\r\n );\r\n }\r\n\r\n if (newState) {\r\n this.parseStateObject(newState);\r\n }\r\n\r\n for await (const event of scheduledEvents) {\r\n await this.fireEvent(event);\r\n }\r\n\r\n this._state.isLoading = false;\r\n\r\n return res!.processResult?.state?.result as Result & { success: boolean };\r\n }\r\n }\r\n\r\n protected getScriptEventParams(fncParams: TFncParams[]): unknown[] {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n new ApiaFunctions(this.execution)\r\n .getForm(\r\n this.form.definition.formName,\r\n this.form.definition.frmParent,\r\n )!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n protected async fireScriptEvents(event: ComponentEvent): Promise<boolean> {\r\n let result = true;\r\n\r\n for await (const script of arrayOrArray(event.script)) {\r\n const def = JSON.parse(script.text) as {\r\n fncName: string;\r\n fncParams: {\r\n type: 'P' | 'E';\r\n attId: number;\r\n }[];\r\n };\r\n\r\n try {\r\n const fn = (window as any)[def.fncName] as (\r\n src: CustomComponent | Form,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n result =\r\n result &&\r\n (await fn(\r\n this,\r\n ...this.getScriptEventParams(arrayOrArray(def.fncParams)),\r\n ));\r\n } catch (e) {\r\n console.error(e);\r\n this.form.execution.notifications.add(\r\n new MessageNotification({\r\n message: labels.errorOnEvent(this.execution, def.fncName),\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async fireEvent(evtName: string) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const event = arrayOrArray(this.definition.event).find(\r\n (c) => c.name === evtName,\r\n );\r\n if (!event) {\r\n throw new Error('Unknown event ' + evtName);\r\n }\r\n\r\n const scriptsResult =\r\n !event.script || (await this.fireScriptEvents(event));\r\n\r\n if (scriptsResult && event.serverEvents) {\r\n return (\r\n (\r\n await this.processResult(\r\n (await this.postMessage('fireEvent', evtName))?.data,\r\n )\r\n )?.success || false\r\n );\r\n }\r\n\r\n return scriptsResult && !event.serverEvents;\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n getProperty(prpName: string) {\r\n return this._state.properties[prpName];\r\n }\r\n\r\n private async postMessage(method: string, body: any) {\r\n return post<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method,\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postData:\r\n typeof body === 'string'\r\n ? {\r\n payload: encodeStrToBase64Utf8(body),\r\n }\r\n : body,\r\n postDataTreatment: 'stringify',\r\n },\r\n );\r\n }\r\n\r\n async setStringValue(attName: string, value: string) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setValue',\r\n JSON.stringify({\r\n attName,\r\n clear: true,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n getStringValue(attName: string) {\r\n return this._state.attributes[attName]?.join('');\r\n }\r\n\r\n getValue(attName: string, index: number = 0) {\r\n return this._state.attributes[attName]?.[index];\r\n }\r\n\r\n getValues(attName: string) {\r\n return this._state.attributes[attName];\r\n }\r\n\r\n async removeIndex(attName: string, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await post<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method: 'removeIndex',\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n }),\r\n {\r\n postData: {\r\n attName,\r\n index,\r\n },\r\n postDataTreatment: 'stringify',\r\n },\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async setValue(attName: string, value: any, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setValue',\r\n JSON.stringify({\r\n index,\r\n attName,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async setProperty(prpName: string, value: any) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return (\r\n (\r\n await this.processResult(\r\n (\r\n await this.postMessage(\r\n 'setProperty',\r\n JSON.stringify({\r\n prpName,\r\n value,\r\n }),\r\n )\r\n )?.data,\r\n )\r\n )?.success || false\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async sendMessage<\r\n T extends Record<string, unknown> = Record<string, unknown>,\r\n >(payload: any) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n return await this.processResult<T>(\r\n (\r\n await this.postMessage(\r\n 'message',\r\n typeof payload === 'object' && payload\r\n ? JSON.stringify(payload)\r\n : payload,\r\n )\r\n )?.data,\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async download(attName: string, index: number) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const data = await this.processResult<{ url: string }>(\r\n (await this.postMessage('download', { attName, index }))?.data,\r\n );\r\n\r\n if (data?.url) {\r\n window.open(data.url, '_blank');\r\n }\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n async upload(\r\n attName: string,\r\n file: File,\r\n options?: {\r\n onUploadProgress?: (percent: number) => unknown;\r\n params?: Record<string, any>;\r\n } & Pick<AxiosRequestConfig<any>, 'signal'>,\r\n ) {\r\n this._state.isLoading = true;\r\n\r\n try {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n Object.entries(options?.params || {}).forEach(([key, value]) =>\r\n formData.append(key, value),\r\n );\r\n\r\n const response = await axios.post<string>(\r\n await makeApiaUrl(this.execution, {\r\n ajaxUrl: actions.forms,\r\n action: 'cusCmpProcess',\r\n method: 'upload',\r\n\r\n cmpId: this.definition.id,\r\n frmId: this.form.definition.id,\r\n frmParent: this.form.definition.frmParent,\r\n attName,\r\n originalName: file.name,\r\n }),\r\n formData,\r\n {\r\n signal: options?.signal,\r\n onUploadProgress({ total, progress }) {\r\n const percent =\r\n Math.round(((progress || 0) / (total || 1)) * 100 * 100) / 100;\r\n options?.onUploadProgress?.(percent);\r\n },\r\n },\r\n );\r\n\r\n const result =\r\n await parseSuccessfulResponse<TCustomComponentDefaultResponse>(\r\n this.execution,\r\n response,\r\n );\r\n\r\n return await this.processResult<{ index: number; fileName: string }>(\r\n result,\r\n );\r\n } finally {\r\n this._state.isLoading = false;\r\n }\r\n }\r\n\r\n public setState<K extends keyof TCustomComponentState>(\r\n prop: K,\r\n value: TCustomComponentState[K],\r\n ) {\r\n this._state[prop] = value;\r\n }\r\n}\r\n","import { Notification, NotificationDefinition } from './Notification';\r\n\r\nexport class StatusNotification extends Notification<\r\n NotificationDefinition & { blocking: boolean }\r\n> {\r\n constructor(\r\n public readonly props: NotificationDefinition & { blocking: boolean },\r\n ) {\r\n super(props);\r\n }\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { Notification } from './Notification';\r\nimport { EventEmitter } from '../../util';\r\nimport type { CustomComponent } from '../Execution/FormsExecution/customComponents/CustomComponent';\r\nimport type { Field } from '../Execution/FormsExecution/Field';\r\nimport type { Execution } from '../Execution';\r\n\r\nexport type FocusTarget = {\r\n element: Field | CustomComponent;\r\n};\r\n\r\nexport class Notifications {\r\n private emitter = new EventEmitter<{\r\n closeTab: null;\r\n kill: null;\r\n notification: Notification;\r\n }>();\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable<Notifications, 'notifications'>(this, {\r\n notifications: observable,\r\n add: action,\r\n remove: action,\r\n });\r\n }\r\n\r\n protected notifications: Notification[] = [];\r\n\r\n add(notification: Notification) {\r\n this.notifications.push(notification);\r\n this.emitter.emit('notification', notification);\r\n }\r\n\r\n closeTab() {\r\n this.emitter.emit('closeTab', null);\r\n }\r\n\r\n getAll() {\r\n return this.notifications;\r\n }\r\n\r\n getById(id: string | number) {\r\n return this.notifications.find((c) => c.id === id);\r\n }\r\n\r\n kill() {\r\n this.emitter.emit('kill', null);\r\n }\r\n\r\n remove(notification: string | number | Notification) {\r\n this.notifications = this.notifications.filter((c) => {\r\n if (typeof notification === 'string' || typeof notification === 'number')\r\n return c.id !== notification;\r\n return c !== notification;\r\n });\r\n }\r\n\r\n on = this.emitter.on.bind(this.emitter);\r\n}\r\n","import type {\r\n TApiaForm,\r\n TApiaFormProperties,\r\n TFormEventName,\r\n} from '../../InitialData/types/TApiaForm';\r\nimport type { Execution } from '..';\r\nimport type { TSignaturesData } from './types';\r\nimport { Field, getApiaFunctions, TFncParams } from './Field';\r\nimport type {\r\n TApiaFieldBaseDefinition,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { parseFakeJSON } from '../../../util/other/parseFakeJSON';\r\nimport { WithProperties } from './WithProperties';\r\nimport { makeApiaUrl, post, get } from '../../../util';\r\nimport { computed, makeObservable, observable } from 'mobx';\r\nimport type { FieldWithAttribute } from './FieldWithAttribute';\r\nimport { CustomComponent } from './customComponents/CustomComponent';\r\nimport { Grid } from './fields';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { ApiaForm } from '../../../programming/ApiaForm';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { labels } from '../../../util/labels/labels';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport { TApiaFieldCommonProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport class Form extends WithProperties<TApiaFormProperties> {\r\n fields: TApiaFieldBaseDefinition<Record<string, any>>[];\r\n state = { isMarkedToSign: false };\r\n protected _customComponents: Map<string, CustomComponent> = new Map();\r\n protected fieldsById = new Map<\r\n string,\r\n Field<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n {\r\n definition: Omit<\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n 'properties'\r\n >;\r\n }\r\n >\r\n >();\r\n protected fieldsByName = new Map<\r\n string,\r\n Field<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n {\r\n definition: Omit<\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n 'properties'\r\n >;\r\n }\r\n >\r\n >();\r\n protected fieldsByAttributeId = new Map<\r\n string | number,\r\n FieldWithAttribute<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n TApiaFieldWithAttributeBaseProps<Record<string, any>>\r\n >\r\n >();\r\n protected fieldsByAttributeName = new Map<\r\n string,\r\n FieldWithAttribute<\r\n TApiaFieldCommonProperties,\r\n TApiaFieldBaseDefinition<Record<string, any>>,\r\n TApiaFieldWithAttributeBaseProps<Record<string, any>>\r\n >\r\n >();\r\n protected fieldsGroups = new Map<string, Grid>();\r\n definition: TApiaForm = {} as TApiaForm;\r\n\r\n constructor(\r\n public execution: Execution,\r\n definition: TApiaForm,\r\n ) {\r\n const props = parseFakeJSON<TApiaFormProperties>(definition.properties);\r\n super(props);\r\n makeObservable<Form, 'state'>(this, {\r\n state: observable,\r\n allFields: computed,\r\n customComponents: computed,\r\n });\r\n\r\n this.definition = definition;\r\n\r\n this.fields = arrayOrArray(definition.field).sort((a, b) => {\r\n if (a.y < b.y) return -1;\r\n if (a.y > b.y) return 1;\r\n\r\n if (a.x < b.x) return -1;\r\n if (a.x > b.x) return 1;\r\n\r\n return 0;\r\n });\r\n\r\n this.state.isMarkedToSign = this.definition.markedToSign;\r\n }\r\n\r\n get allFields() {\r\n return [...this.fieldsById.values()];\r\n }\r\n\r\n get customComponents() {\r\n return this._customComponents;\r\n }\r\n\r\n closeForm() {\r\n this.properties.prpFrmClosed = true;\r\n }\r\n openForm() {\r\n this.properties.prpFrmClosed = false;\r\n }\r\n\r\n getField(field: string, index?: number) {\r\n const found =\r\n this.getFieldById(field, index) ||\r\n this.getFieldByName(field, index) ||\r\n this.getFieldByAttributeId(field, index) ||\r\n this.getFieldByAttributeName(field, index);\r\n\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getField(field, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldByAttributeId(attId: string | number, index?: number) {\r\n const found = this.fieldsByAttributeId.get(String(attId));\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByAttributeId(attId, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n getFieldByAttributeName(attName: string, index?: number) {\r\n const found = this.fieldsByAttributeName.get(attName);\r\n if (found) {\r\n return found;\r\n }\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByAttributeName(attName, index);\r\n return res;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getFieldById(id: string | number, index?: number) {\r\n const found = this.fieldsById.get(String(id));\r\n if (found) return found;\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldById(id, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getFieldByName(name: string, index?: number): Field | Field[] | undefined {\r\n const found = this.fieldsByName.get(String(name));\r\n if (found) return found;\r\n\r\n for (const group of this.fieldsGroups.values()) {\r\n const res = group.getFieldByName(name, index);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected getHiddenFields() {\r\n return this.allFields.filter((c) => c.getProperty('visibilityHidden'));\r\n }\r\n async markFormToSign() {\r\n void post<{ success: boolean }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'markFormToSign',\r\n frmId: this.definition.id,\r\n frmParent: this.definition.frmParent,\r\n sign: !this.state.isMarkedToSign,\r\n react: true,\r\n }),\r\n ).then((res) => {\r\n if (res?.data && res.data.success) {\r\n this.state.isMarkedToSign = !this.state.isMarkedToSign;\r\n }\r\n });\r\n }\r\n\r\n async viewSigns(): Promise<TSignaturesData | undefined> {\r\n const res = await get<TSignaturesData>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n ajaxUrl: '/apia.execution.FormAction.run',\r\n action: 'viewSigns',\r\n frmId: this.definition.id,\r\n frmParent: this.definition.frmParent,\r\n react: true,\r\n }),\r\n );\r\n if (res?.data) {\r\n return res.data;\r\n }\r\n }\r\n\r\n private cucCmpByAttId = new Map<number, CustomComponent>();\r\n private cucCmpByFldId = new Map<number, CustomComponent>();\r\n private cucCmpByAttName = new Map<string, CustomComponent>();\r\n private mustRenderFields: string[] = [];\r\n\r\n getCustomComponentByFldId(fldId: number) {\r\n return this.cucCmpByFldId.get(fldId);\r\n }\r\n\r\n getCustomComponentByAttId(attId: number) {\r\n return this.cucCmpByAttId.get(attId);\r\n }\r\n\r\n getCustomComponentByAttName(attName: string) {\r\n return this.cucCmpByAttName.get(attName);\r\n }\r\n\r\n public addFieldToRender(fldId: string, fldIndex: number = 0) {\r\n this.mustRenderFields.push(fldId + '_' + fldIndex);\r\n }\r\n\r\n public markFieldAsRendered(fldId: string, fldIndex: number = 0) {\r\n this.mustRenderFields = this.mustRenderFields.filter(\r\n (c) => c !== fldId + '_' + fldIndex,\r\n );\r\n if (this.mustRenderFields.length - this.getHiddenFields().length === 0) {\r\n this.execution.markFormAsRendered(\r\n this.definition.frmParent,\r\n this.definition.formName,\r\n );\r\n }\r\n }\r\n\r\n async init() {\r\n const cusFields = arrayOrArray(this.definition.customField);\r\n\r\n for await (const field of arrayOrArray(this.fields)) {\r\n this.mustRenderFields.push(field.id + '_' + (field.index ?? 0));\r\n }\r\n for await (const customComponent of cusFields) {\r\n this.mustRenderFields.push(customComponent.id + '_' + 0);\r\n }\r\n for await (const customComponent of cusFields) {\r\n const cc = new CustomComponent(this.execution, customComponent);\r\n await cc.init(this);\r\n this._customComponents.set(customComponent.id, cc);\r\n arrayOrArray(customComponent.state.state.attribute).forEach((a) => {\r\n this.cucCmpByAttId.set(Number.parseInt(String(a.attId)), cc);\r\n this.cucCmpByAttName.set(a.attName, cc);\r\n this.cucCmpByFldId.set(Number.parseInt(String(customComponent.id)), cc);\r\n });\r\n }\r\n\r\n for await (const field of arrayOrArray(this.fields)) {\r\n /**\r\n * Esto es necesario ya que desde el server llega un objeto js en el properties.\r\n */\r\n field.properties = parseFakeJSON(field.properties as any);\r\n\r\n const fieldConstructor =\r\n this.execution.fieldsMapping[field.fieldType](field);\r\n\r\n if (fieldConstructor) {\r\n const newField = new fieldConstructor(field);\r\n await newField.init(this);\r\n\r\n this.fieldsById.set(\r\n String(newField.definition.id),\r\n newField as Field<any>,\r\n );\r\n if (newField.properties?.name) {\r\n this.fieldsByName.set(\r\n String(newField.properties?.name),\r\n newField as Field<any>,\r\n );\r\n }\r\n if ((field as TApiaFieldWithAttributeBaseProps<any>).attName) {\r\n this.fieldsByAttributeId.set(\r\n String((field as TApiaFieldWithAttributeBaseProps<any>).attId),\r\n newField as FieldWithAttribute<any>,\r\n );\r\n this.fieldsByAttributeName.set(\r\n (field as TApiaFieldWithAttributeBaseProps<any>).attName,\r\n newField as FieldWithAttribute<any>,\r\n );\r\n }\r\n\r\n if (newField instanceof Grid) {\r\n this.fieldsGroups.set(String(newField.definition.id), newField);\r\n }\r\n } else {\r\n throw new Error(\r\n `Cannot build field of type ${field.fieldType}. There is no mapping for such type.`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n protected async getScriptEventParams(\r\n fncParams: TFncParams[],\r\n ): Promise<unknown[]> {\r\n const fncParamsArray = [];\r\n for (let e = 0; e < fncParams.length; e += 1) {\r\n if (fncParams[e].type === 'V') {\r\n fncParamsArray.push(fncParams[e].value);\r\n } else if (fncParams[e].type === 'E' || fncParams[e].type === 'P') {\r\n const paraAttId = fncParams[e].attId;\r\n if (paraAttId) {\r\n fncParamsArray.push(\r\n (await getApiaFunctions(this.execution))\r\n .getForm(this.definition.formName, this.definition.frmParent)!\r\n .getField(paraAttId),\r\n );\r\n }\r\n }\r\n }\r\n return fncParamsArray;\r\n }\r\n\r\n public async fireScriptEvent(eventName: TFormEventName): Promise<boolean> {\r\n if (eventName === 'onLoad') {\r\n const mapEvent = getWindow(this.execution)[\r\n `LOAD_RELOAD_MAP_${this.definition.frmParent}`\r\n ] as any as Record<string, string>;\r\n const mappedEvent = mapEvent\r\n ? mapEvent[this.definition.formName]\r\n : undefined;\r\n const actualMapEvent =\r\n mapEvent &&\r\n (!mappedEvent || mappedEvent === 'load' ? 'onLoad' : 'onReload');\r\n eventName =\r\n actualMapEvent ||\r\n (getWindow(this.execution).IS_RELOAD ? 'onReload' : 'onLoad');\r\n }\r\n\r\n const events = (this.definition.scriptEvents || []).filter(\r\n (c) => c.evtName === eventName,\r\n );\r\n if (events.length > 0) {\r\n const unlock = this.execution.lock();\r\n\r\n try {\r\n for (const event of events) {\r\n try {\r\n const fn = (getWindow(this.execution) as any)[event.fncName] as (\r\n src: ApiaForm,\r\n ...parameters: unknown[]\r\n ) => Promise<boolean>;\r\n const result = await fn(\r\n new ApiaForm(this.execution, this)!,\r\n ...(await this.getScriptEventParams(event.fncParams)),\r\n );\r\n if (!result) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this.execution.notifications.add(\r\n new MessageNotification({\r\n message: labels.errorOnEvent(this.execution, event.fncName) + e,\r\n type: 'error',\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n async validate(): Promise<true | Field> {\r\n let isValid = true;\r\n let firstInvalid: Field | null = null;\r\n\r\n if (this.properties.frmHidden) {\r\n return true;\r\n }\r\n\r\n for await (const field of this.allFields) {\r\n if (field.definition.fieldType === 'grid') {\r\n const result = await (field as Grid).validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n isValid = false;\r\n } else {\r\n isValid = isValid && result === true;\r\n }\r\n } else if (field instanceof Field) {\r\n isValid = (await field.validate()) && isValid;\r\n if (!isValid && !firstInvalid) {\r\n firstInvalid = field;\r\n }\r\n }\r\n }\r\n\r\n return isValid || firstInvalid!;\r\n }\r\n\r\n getProperty<K extends keyof TApiaFormProperties>(\r\n propName: K | 'readOnly',\r\n ): TApiaFormProperties[K] {\r\n if (propName === 'readOnly') {\r\n return this.definition.readOnly || this.definition.readonly;\r\n }\r\n return super.getProperty(propName);\r\n }\r\n}\r\n","import { getDocument } from '../../../util/dom/getDocument';\r\nimport { parseXml } from '../../../util/xml/parseXml';\r\nimport type { Execution } from '../../Execution';\r\nimport { TApiaForm } from '../types/TApiaForm';\r\n\r\nfunction decodeBase64ToUtf8(base64String: string) {\r\n const binaryString = atob(base64String);\r\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\r\n return new TextDecoder('utf-8').decode(bytes);\r\n}\r\n\r\nasync function getFormXMLDataAsObj(\r\n formDiv: HTMLElement,\r\n): Promise<TApiaForm | null> {\r\n if (formDiv.dataset.xml) {\r\n const formData = (await parseXml(\r\n decodeBase64ToUtf8(formDiv.dataset.xml),\r\n )) as TApiaForm;\r\n return formData;\r\n }\r\n return null;\r\n}\r\n\r\nexport async function readFormsDefinition(execution: Execution) {\r\n const elements = [\r\n ...getDocument(execution).querySelectorAll('.formContainer'),\r\n ];\r\n const forms: TApiaForm[] = [];\r\n\r\n for await (const form of elements) {\r\n const def = await getFormXMLDataAsObj(form as HTMLElement);\r\n if (def) forms.push(def);\r\n }\r\n\r\n return forms;\r\n}\r\n","import type { Execution } from '../Execution';\r\nimport { readFormsDefinition } from './bootstrap/readFormsDefinition';\r\n\r\nexport class InitialData {\r\n public static getFormsDefinition(execution: Execution) {\r\n return readFormsDefinition(execution);\r\n }\r\n}\r\n","import {\r\n TApiaFieldBaseDefinition,\r\n TApiaFieldWithAttributeBaseProps,\r\n} from '../../InitialData/types/TApiaField';\r\nimport { Field } from './Field';\r\nimport { TranslatableField } from './TranslatableField';\r\nimport { Button } from './fields/Button';\r\nimport { Captcha } from './fields/Captcha';\r\nimport { Checkbox } from './fields/Checkbox';\r\nimport { Editor } from './fields/Editor';\r\nimport { File } from './fields/File';\r\nimport { Grid } from './fields/Grid';\r\nimport { GridPaginated } from './fields/GridPaginated';\r\nimport { Hidden } from './fields/Hidden';\r\nimport { Image } from './fields/Image';\r\nimport { Input } from './fields/Input';\r\nimport { Label } from './fields/Label';\r\nimport { Link } from './fields/Link';\r\nimport { ModalInput } from './fields/ModalInput';\r\nimport { Multiple } from './fields/Multiple';\r\nimport { Password } from './fields/Password';\r\nimport { Radio } from './fields/Radio';\r\nimport { Select } from './fields/Select';\r\nimport { Textarea } from './fields/Textarea';\r\nimport { Title } from './fields/Title';\r\nimport { Tree } from './fields/Tree';\r\nimport { FieldWithAttribute } from './FieldWithAttribute';\r\nimport { GridProps } from './fields/Grid/types';\r\nimport { SchedulerField } from './fields/Scheduler';\r\nimport { TApiaLabelProperties } from '../../InitialData/types/fields/TApiaFieldProperties';\r\n\r\nexport type FieldConstructor = new (\r\n definition: any,\r\n) =>\r\n | Field<any, any, any>\r\n | FieldWithAttribute<any, any, any>\r\n | TranslatableField<any, any, any>;\r\n\r\nexport type FieldsMapping = Record<\r\n string,\r\n (definition: any) => FieldConstructor\r\n>;\r\n\r\nexport const defaultFieldsMap: FieldsMapping = Object.freeze({\r\n area: () => Textarea,\r\n button: () => Button,\r\n captcha: () => Captcha,\r\n check: () => Checkbox,\r\n editor: () => Editor,\r\n file: () => File,\r\n grid: (def) => {\r\n const definition = def as TApiaFieldBaseDefinition<GridProps>;\r\n\r\n if (definition?.properties?.paged) {\r\n return GridPaginated;\r\n }\r\n\r\n return Grid;\r\n },\r\n hidden: () => Hidden,\r\n href: () => Link,\r\n image: () => Image,\r\n input: (def) => {\r\n const definition = def as TApiaFieldWithAttributeBaseProps<any>;\r\n\r\n if (definition.qryId) {\r\n return ModalInput;\r\n }\r\n\r\n return Input;\r\n },\r\n label: (def) => {\r\n const definition =\r\n def as TApiaFieldWithAttributeBaseProps<TApiaLabelProperties>;\r\n const value = definition.properties?.value;\r\n if (value && String(value).indexOf('schedContainer') !== -1) {\r\n return SchedulerField;\r\n }\r\n\r\n return Label;\r\n },\r\n multiple: () => Multiple,\r\n password: () => Password,\r\n radio: () => Radio,\r\n select: () => Select,\r\n title: () => Title,\r\n tree: () =>\r\n Tree as new (definition: any) => FieldWithAttribute<any, any, any>,\r\n});\r\n","import { action, computed, makeObservable, observable } from 'mobx';\r\nimport { TProcess } from './types';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport { TModalConfig, UploaderApi } from '../Uploader';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\n\r\nexport class Process {\r\n state: TProcess | null = null;\r\n\r\n uploader: UploaderApi;\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n setPriority: action,\r\n name: computed,\r\n });\r\n\r\n this.uploader = new UploaderApi(\r\n this.execution,\r\n 'ProcessUploader',\r\n 'P',\r\n getWindow(this.execution)\r\n .processDocumentsModalConfiguration as any as TModalConfig,\r\n );\r\n }\r\n\r\n get name() {\r\n if (this.state) return this.state.identifier.label;\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n const res = await post<{ processData: string }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getProcessData',\r\n isAjax: true,\r\n }),\r\n );\r\n if (!res?.data?.processData) {\r\n throw new Error('Cannot retrieve the process data');\r\n }\r\n\r\n this.uploader.init();\r\n this.uploader.on('fileUploaded', () => {\r\n this.execution.state.hasChangedAnything = true;\r\n });\r\n\r\n const parsedData: TProcess = JSON.parse(res?.data?.processData);\r\n const calValue = arrayOrArray(parsedData.calendar?.options).find(\r\n (c) => c.selected,\r\n )?.value;\r\n const priorityValue =\r\n arrayOrArray(parsedData.priority.options).find((c) => c.selected)\r\n ?.value ?? arrayOrArray(parsedData?.priority?.options)[0]?.value;\r\n\r\n this.state = parsedData;\r\n if (calValue) this.state.calendar.value = calValue;\r\n if (priorityValue) this.state.priority.value = priorityValue;\r\n }\r\n }\r\n\r\n getConfirmParams() {\r\n return {\r\n cmbProPri: this.state?.priority?.value,\r\n selCal: this.state?.calendar?.value,\r\n };\r\n }\r\n\r\n setPriority(newPriority: string) {\r\n if (this.state?.priority) this.state.priority.value = newPriority;\r\n }\r\n}\r\n","export class Task {\r\n #name: string;\r\n constructor(task: any) {\r\n this.#name = task.name;\r\n }\r\n setPriority(newPriority: string) {\r\n newPriority;\r\n }\r\n get name() {\r\n return this.#name;\r\n }\r\n}\r\n","import { computed, makeObservable, observable } from 'mobx';\r\nimport { Association, PoolId, TCategory, TEntity } from './type';\r\nimport { getLabel, makeApiaUrl, post } from '../../../util';\r\nimport { arrayOrArray, uniqueId } from '@apia/util';\r\nimport { TModalConfig, UploaderApi } from '../Uploader';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport type { Execution } from '..';\r\nimport {\r\n Row,\r\n TableController,\r\n TBuildRow,\r\n TBuildTable,\r\n} from '@apia/table2-controller';\r\nimport { labels } from '../../../util/labels/labels';\r\n\r\nexport class Entity {\r\n state: TEntity | null = null;\r\n\r\n uploader: UploaderApi;\r\n controller: TableController = new TableController({\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n });\r\n\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n name: computed,\r\n });\r\n\r\n this.uploader = new UploaderApi(\r\n execution,\r\n 'EntityUploader',\r\n 'E',\r\n getWindow(this.execution)\r\n .entityDocumentsModalConfiguration as any as TModalConfig,\r\n );\r\n }\r\n\r\n get name() {\r\n if (this.state) return this.state.identifier.label;\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n const res = await post<{ entityData: string }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getEntityData',\r\n isAjax: true,\r\n }),\r\n );\r\n if (!res?.data?.entityData) {\r\n throw new Error('Cannot retrieve the entity data');\r\n }\r\n this.uploader.init();\r\n this.uploader.on('fileUploaded', () => {\r\n this.execution.state.hasChangedAnything = true;\r\n });\r\n\r\n const parsedData: TEntity = JSON.parse(res?.data?.entityData);\r\n const statusValue = arrayOrArray(parsedData.status.options).find(\r\n (c) => c.selected,\r\n )?.value;\r\n this.state = parsedData;\r\n this.state.visibilities = [];\r\n this.state.categories = [];\r\n this.state.image.file = null;\r\n\r\n if (statusValue && this.state.status)\r\n this.state.status.value = statusValue;\r\n\r\n if (getWindow(this.execution).LBL_CATEGORIES_LABEL) {\r\n await this.loadCategories();\r\n }\r\n if (getWindow(this.execution).LBL_VISIBILITIES_LABEL) {\r\n await this.loadPools();\r\n }\r\n if (getWindow(this.execution).LBL_ENTITIES_ASSOCIATIONS) {\r\n await this.loadAssociations();\r\n }\r\n }\r\n }\r\n\r\n public addAssociation() {\r\n const id = String(uniqueId());\r\n this.state!.associations.push({\r\n asocId: id,\r\n asocName: '',\r\n asocRelName: '',\r\n });\r\n const row = new Row(id);\r\n row.build({\r\n id: String(uniqueId()),\r\n cells: [{ colName: 'name' }, { colName: 'relName' }],\r\n isSelected: true,\r\n });\r\n this.controller.body.addRow(row);\r\n this.controller.setSelection([\r\n this.controller.body.getState('rows').length,\r\n ]);\r\n }\r\n\r\n public getConfirmParams() {\r\n const result: any = {\r\n busEntSta: this.state?.status.value ?? '',\r\n };\r\n\r\n if (this.state?.identifier?.body?.value) {\r\n result.txtEntNum = this.state?.identifier.body.value ?? '';\r\n }\r\n\r\n if (this.state?.categories) {\r\n result.catId = this.state?.categories.map((c) => c.id);\r\n\r\n this.state?.categories\r\n .filter((c) => c.checked)\r\n .forEach((c) => {\r\n result[`chkCat_${c.id}`] = 'on';\r\n });\r\n\r\n result['hidTemplateWithCategories'] = 'true';\r\n }\r\n\r\n if (this.state?.visibilities) {\r\n result['hidTemplateWithVisibilities'] = 'true';\r\n result.poolId = this.state?.visibilities.map((c) => c.poolId);\r\n\r\n this.state?.visibilities\r\n .filter((c) => c.canUpdate)\r\n .forEach((v) => {\r\n result[`chkVisPoolUpdate${v.poolId}`] = 'on';\r\n });\r\n }\r\n\r\n if (this.state?.associations) {\r\n result['hidTemplateWithAsociation'] = 'true';\r\n result.asocId = this.state?.associations.map((c) => c.asocId);\r\n result.asocName = this.state?.associations.map((c) => c.asocName);\r\n result.asocRelName = this.state?.associations.map((c) => c.asocRelName);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected loadCategories = async () => {\r\n const res = await post<{ category: TCategory[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadCategories',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state)\r\n if (res?.data?.category) {\r\n this.state.categories = arrayOrArray(res.data.category);\r\n } else {\r\n this.state.categories = [];\r\n }\r\n };\r\n\r\n protected loadPools = async () => {\r\n const res = await post<{ pool: PoolId[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadPools',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state?.visibilities) {\r\n if (res?.data?.pool) {\r\n this.state.visibilities = arrayOrArray(res.data.pool);\r\n } else {\r\n this.state.visibilities = [];\r\n }\r\n }\r\n };\r\n\r\n protected loadAssociations = async () => {\r\n const res = await post<{ asociation: Association[] }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'loadAsociations',\r\n isAjax: true,\r\n isMonitor: false,\r\n }),\r\n );\r\n if (this.state) {\r\n this.state.associations = arrayOrArray(res?.data?.asociation);\r\n const rows = this.parseRows(arrayOrArray(res?.data?.asociation));\r\n const tableJson = {\r\n columns: [\r\n {\r\n colName: 'name',\r\n content: getLabel(this.execution, 'lblBusEntInst').text,\r\n className: 'header',\r\n },\r\n {\r\n colName: 'relName',\r\n content: getLabel(this.execution, 'lblBusEntInstAsocName').text,\r\n className: 'header',\r\n },\r\n ],\r\n rows,\r\n filters: [],\r\n } as TBuildTable;\r\n this.controller.build(tableJson);\r\n }\r\n };\r\n\r\n private parseRows(row: Association[]) {\r\n return row.map((r) => {\r\n const newRow: TBuildRow = {\r\n id: r.asocId,\r\n cells: [\r\n {\r\n colName: 'name',\r\n content: r.asocName,\r\n },\r\n {\r\n colName: 'relName',\r\n content: r.asocRelName,\r\n },\r\n ],\r\n };\r\n return newRow;\r\n });\r\n }\r\n\r\n public deleteAssociation() {\r\n const selectedRows = this.controller.getState('selection');\r\n const lastIdx = Array.from(selectedRows).pop()?.getIndex();\r\n\r\n [...selectedRows.values()].forEach((row) => {\r\n this.state!.associations =\r\n this.state?.associations.filter((_, idx) => row.getIndex() !== idx) ??\r\n [];\r\n this.controller.body.removeRow(row);\r\n });\r\n if (lastIdx) this.controller.setSelection([lastIdx - 1]);\r\n }\r\n\r\n public deleteVisibility(id: string) {\r\n if (this.state) {\r\n this.state.visibilities = this.state.visibilities.filter(\r\n (c) => c.poolId !== id,\r\n );\r\n }\r\n }\r\n\r\n public validateAssociations() {\r\n if (this.state?.associations.length === 0) return true;\r\n if (this.state) {\r\n const invalidAssociations = this.state.associations.filter(\r\n (c) => !c.asocName || !c.asocRelName,\r\n );\r\n if (invalidAssociations.length > 0) {\r\n invalidAssociations.forEach((c, idx) => {\r\n c.errorRelNameMessage = '';\r\n c.errorNameMessage = '';\r\n c.focusTarget = undefined;\r\n\r\n if (idx === 0) c.focusTarget = true;\r\n\r\n if (c.asocName === '')\r\n c.errorNameMessage = labels.errorFieldRequired(this.execution);\r\n\r\n if (c.asocRelName === '')\r\n c.errorRelNameMessage = labels.errorFieldRequired(this.execution);\r\n });\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { action, makeObservable, observable } from 'mobx';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { TObservation, TObservations } from './types';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport type { Execution } from '..';\r\n\r\nexport class Observations {\r\n state: TObservations = {\r\n newObservation: {\r\n commentValue: '',\r\n chkAddAlert: false,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n },\r\n observations: [],\r\n };\r\n constructor(public execution: Execution) {\r\n makeObservable(this, {\r\n state: observable,\r\n setPriority: action,\r\n });\r\n }\r\n\r\n private hasInited = false;\r\n\r\n async init() {\r\n if (!this.hasInited) {\r\n this.hasInited = true;\r\n this.state = {\r\n newObservation: {\r\n commentValue: '',\r\n chkAddAlert: false,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n },\r\n observations: [],\r\n };\r\n\r\n const res = await post<{\r\n obData: string;\r\n }>(\r\n this.execution,\r\n makeApiaUrl(this.execution, {\r\n action: 'getObservationsData',\r\n isAjax: true,\r\n isTask: !window.isMonitor ? true : false,\r\n }),\r\n );\r\n if (!res?.data?.obData) {\r\n throw new Error('Cannot retrieve the entity data');\r\n }\r\n\r\n const parsedData: {\r\n observations: TObservation[];\r\n newCommentData: { comment: string; isChecked: boolean };\r\n } = JSON.parse(res?.data?.obData);\r\n\r\n this.state.observations = arrayOrArray(parsedData.observations);\r\n\r\n const newObservation = {\r\n commentValue: parsedData.newCommentData?.comment,\r\n chkAddAlert: parsedData.newCommentData?.isChecked,\r\n chkAddAllAlert: false,\r\n chkRemAlert: false,\r\n };\r\n this.state.newObservation = newObservation;\r\n this.areObservationsChecked();\r\n }\r\n }\r\n\r\n getConfirmParams() {\r\n const params: Record<string, unknown> = {\r\n txtComment: this.state.newObservation?.commentValue,\r\n chkAddAlert:\r\n this.state.newObservation?.chkAddAlert === true ? 'on' : undefined,\r\n chkAddAllAlert:\r\n this.state.newObservation?.chkAddAllAlert === true ? 'on' : undefined,\r\n chkRemAlert:\r\n this.state.newObservation?.chkRemAlert === true ? 'on' : undefined,\r\n };\r\n\r\n const obs = this.state.observations ?? [];\r\n for (const o of obs) {\r\n if (!o || !o.name) continue;\r\n params[o.name] = o.checked === true ? 'on' : undefined;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n setPriority(newPriority: string) {\r\n newPriority;\r\n }\r\n\r\n public areObservationsChecked() {\r\n const isChecked = this.state.observations?.some((o) => o.checked === true);\r\n return isChecked;\r\n }\r\n}\r\n","import type { Execution } from '..';\r\n\r\nexport type ConfirmChecker = (\r\n execution: Execution,\r\n status: Status,\r\n) => Promise<Status | FlowModal<any>>;\r\nexport type ConfirmStep =\r\n | 'CHECK_LOCK'\r\n | 'CONFIRM'\r\n | 'CHECK_SIGN'\r\n | 'CHECK_WIZARD'\r\n | 'SIGN';\r\n\r\nexport type Status = {\r\n step?: ConfirmStep;\r\n error?: string;\r\n finishedWithError?: boolean;\r\n};\r\n\r\nexport abstract class FlowModal<T extends { confirmed?: boolean }> {\r\n abstract confirm(result: T): Promise<Status | FlowModal<any>>;\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\nimport { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowPoolSelection extends FlowModal<{\r\n confirmed: boolean;\r\n group: string;\r\n}> {\r\n constructor(\r\n public fetchResult: TApiaLoadForm['form'],\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n group: string;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { TApiaLoadForm } from '@apia/util';\r\nimport { FlowModal, Status } from './FlowModal';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { TFetchConfirmPathResponse, TItemTreeObj } from './types';\r\nconst initialState = {\r\n disabledParents: [],\r\n groupSelectionObj: null,\r\n};\r\n\r\nexport class ShowPathSelection extends FlowModal<{\r\n confirmed: boolean;\r\n path: string;\r\n}> {\r\n public state: {\r\n disabledParents: TItemTreeObj | TItemTreeObj[] | null;\r\n groupSelectionObj: TFetchConfirmPathResponse | null;\r\n };\r\n\r\n constructor(\r\n public fetchResult: TApiaLoadForm['form'],\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n path: string;\r\n }) => Promise<Status | FlowModal<any>>,\r\n ) {\r\n super();\r\n makeObservable<ShowPathSelection, 'state'>(this, { state: observable });\r\n this.state = initialState;\r\n }\r\n setDisabledParent(treeItem: TItemTreeObj) {\r\n this.state.disabledParents = this.updateDisabledList(\r\n treeItem,\r\n this.state.disabledParents as TItemTreeObj[],\r\n );\r\n }\r\n clearPaths() {\r\n this.state.disabledParents = [];\r\n }\r\n showGroupsSelection(fetchConfirmPathResponse: TFetchConfirmPathResponse) {\r\n this.state.groupSelectionObj = fetchConfirmPathResponse;\r\n }\r\n updateDisabledList(\r\n itemObj: TItemTreeObj,\r\n itemArr: TItemTreeObj[],\r\n ): TItemTreeObj[] {\r\n let filteredArr = [] as TItemTreeObj[];\r\n if (Array.isArray(itemArr)) {\r\n filteredArr = itemArr.filter(\r\n (el) =>\r\n el.id !== itemObj.id && el.name !== itemObj.name && el.isOn !== false,\r\n );\r\n }\r\n if (itemObj.isOn === true) {\r\n filteredArr.push(itemObj);\r\n }\r\n return filteredArr || [];\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSignSelection extends FlowModal<{\r\n confirmed: boolean;\r\n signed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n signed: boolean;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowConfirmMessage extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSign extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import xml2js from 'xml2js';\r\nimport { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { ConfirmChecker, ConfirmStep, FlowModal, Status } from './FlowModal';\r\nimport { ShowPoolSelection } from './ShowPoolSelection';\r\nimport { ShowPathSelection } from './ShowPathSelection';\r\nimport { ShowSignSelection } from './ShowSignSelection';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { Execution } from '..';\r\nimport { TCheckWizardResponse, TFetchConfirmPathResponse } from './types';\r\nimport {\r\n parseXMLRequestResponse,\r\n TApiaFieldPropsObj,\r\n TApiaLoadForm,\r\n TFieldScriptEvents,\r\n TFieldServerEvents,\r\n} from '@apia/util';\r\nimport axios from 'axios';\r\nimport { setAjaxFormResponse } from '../FormsExecution/events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../FormsExecution/types';\r\nimport { ShowConfirmMessage } from './ShowConfirmMessage';\r\nimport { ShowSign } from './ShowSign';\r\nimport { Captcha } from '../FormsExecution/fields';\r\nimport { ExecutionState, TConfirmResponse } from '../types';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\nimport { parseMessages } from '../../../util/api/apiaApi';\r\nimport {\r\n customBooleanProcessor,\r\n processStringObj,\r\n processAjaxEventResponse,\r\n getDefaultXmlPostProcessor,\r\n getDefaultXmlParserOptions,\r\n} from '../../../util/xml/parseXml';\r\n\r\nfunction buildPoolSelection(\r\n execution: Execution,\r\n status: Status,\r\n poolForm: TApiaLoadForm['form'],\r\n) {\r\n return new ShowPoolSelection(poolForm, async (result) => {\r\n if (result.confirmed) {\r\n const confirmPoolResult = await axios.post<{\r\n actions?: {\r\n action: {\r\n toDo: 'functionTimedCall';\r\n param: [number, string];\r\n };\r\n };\r\n }>(\r\n makeApiaUrl(execution, {\r\n action: 'confirmPool',\r\n isAjax: true,\r\n appletToken: 'null',\r\n }),\r\n result.group,\r\n );\r\n const parsedRes = parseXMLRequestResponse(\r\n confirmPoolResult,\r\n ) as TFetchConfirmPathResponse;\r\n if (\r\n parsedRes?.actions?.action?.param[1] === 'confirmOkOnClose' ||\r\n parsedRes?.onClose === 'confirmOkOnClose'\r\n ) {\r\n if (parsedRes?.load?.text?.content) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: parsedRes?.load?.text?.content,\r\n type: 'success',\r\n }),\r\n );\r\n }\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n } else {\r\n throw Error('Failed to confirm pool');\r\n }\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n });\r\n}\r\n\r\nfunction buildPathSelection(\r\n execution: Execution,\r\n status: Status,\r\n form: TApiaLoadForm['form'],\r\n) {\r\n const modal = new ShowPathSelection(form, async function (result) {\r\n if (result.confirmed) {\r\n const pathSelectionResult = await axios.post<TFetchConfirmPathResponse>(\r\n makeApiaUrl(execution, {\r\n action: 'confirmPath',\r\n isAjax: true,\r\n asXML: true,\r\n }),\r\n result.path,\r\n );\r\n const parsedRes = parseXMLRequestResponse(\r\n pathSelectionResult,\r\n ) as TFetchConfirmPathResponse;\r\n if (parsedRes?.groupSelection) {\r\n return buildPoolSelection(execution, status, parsedRes.load!.form!);\r\n } else if (parsedRes?.actions?.action?.toDo === 'functionTimedCall') {\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n } else if (parsedRes.sysMessages?.message?.text) {\r\n execution.notifications.add(\r\n new MessageNotification({\r\n message: parsedRes.sysMessages.message.text,\r\n type: 'warning',\r\n }),\r\n );\r\n return { ...status, step: undefined, finishedWithError: true };\r\n } else if (parsedRes.load?.canClose) {\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n return buildConfirmMessage(status, parsedRes.load?.text?.content ?? '');\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n } else {\r\n return { ...status, step: undefined, finishedWithError: true };\r\n }\r\n });\r\n return modal;\r\n}\r\n\r\nasync function checkSign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const checkSignableFormsResponse = await post<{\r\n form: { i: string; p: string; t: string };\r\n sign: boolean;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n prevSteps: true,\r\n appletToken: '',\r\n preventAsXmlParameter: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal = checkSignableFormsResponse?.data?.sign;\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSignSelection(\r\n checkSignableFormsResponse?.data,\r\n async (result) => {\r\n if (result.confirmed && result.signed) {\r\n return { ...status, step: 'SIGN' };\r\n } else if (result.confirmed && !result.signed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n },\r\n );\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\nasync function sign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const signResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n }[];\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'sign',\r\n // isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal =\r\n signResponse?.data?.actions.action[1].param[1] === 'showAppletModal';\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSign(signResponse?.data, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n });\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\n\r\nasync function checkLock(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkLocksResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n };\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksResponse?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n return {\r\n ...status,\r\n step: undefined,\r\n error: 'Failed to check WebDAV document locks',\r\n };\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_SIGN',\r\n };\r\n}\r\n\r\nasync function defaultConfirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | FlowModal<any>> {\r\n const getConfirmParams = {\r\n ...execution.getEntity().getConfirmParams(),\r\n ...execution.getProcess().getConfirmParams(),\r\n ...execution.getObservations().getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const confirmResponse = await post<TConfirmResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'confirm',\r\n asXML: true,\r\n asXml: true,\r\n appletToken: getWindow(execution).appletToken,\r\n }),\r\n {\r\n postData: getConfirmParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n xmlParser: (xml) => {\r\n // procesador que preserva 'value' (lo que ya tenías)\r\n const processStringObjPreserveValue = (\r\n value: string,\r\n key: string,\r\n ):\r\n | TApiaFieldPropsObj\r\n | string\r\n | number\r\n | TFieldScriptEvents\r\n | TFieldServerEvents => {\r\n if (key === 'value' && typeof value === 'string') {\r\n return value;\r\n }\r\n return processStringObj(value as any, key);\r\n };\r\n\r\n // Tomar las opciones por defecto del parser\r\n const baseOptions = getDefaultXmlParserOptions();\r\n\r\n // Reemplazar el procesador de strings por nuestra variante\r\n baseOptions.attrValueProcessors = [\r\n customBooleanProcessor,\r\n processStringObjPreserveValue,\r\n processAjaxEventResponse,\r\n ];\r\n\r\n // Crear el parser con las opciones correctas\r\n const parser = new xml2js.Parser(baseOptions);\r\n\r\n // Usar el post-processor por defecto (realiza el parse y replaceLabelHtmlValues)\r\n return getDefaultXmlPostProcessor<TConfirmResponse>()(\r\n xml as string,\r\n parser,\r\n );\r\n },\r\n },\r\n );\r\n if (\r\n confirmResponse?.data?.sysMessages?.message ||\r\n confirmResponse?.data?.sysExceptions?.exception ||\r\n confirmResponse?.data?.exceptions?.exception\r\n ) {\r\n Captcha.reload();\r\n\r\n return {\r\n step: undefined,\r\n finishedWithError: true,\r\n };\r\n }\r\n if (confirmResponse?.data?.onClose === 'confirmOkOnClose') {\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n return buildConfirmMessage(\r\n status,\r\n confirmResponse.data.load?.text?.label ?? '',\r\n );\r\n }\r\n const checkConfirmEntity = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'E',\r\n currentTab: 0,\r\n }),\r\n );\r\n const checkConfirmProcess = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'P',\r\n currentTab: 0,\r\n }),\r\n );\r\n parseMessages(execution, (checkConfirmEntity?.data as any).data);\r\n parseMessages(execution, (checkConfirmProcess?.data as any).data);\r\n\r\n if (checkConfirmEntity?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmEntity.data?.form);\r\n }\r\n if (checkConfirmProcess?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmProcess.data?.form);\r\n }\r\n if (confirmResponse?.data?.pathSelection) {\r\n return buildPathSelection(\r\n execution,\r\n status,\r\n confirmResponse.data.load!.form!,\r\n );\r\n }\r\n\r\n if (confirmResponse?.data?.groupSelection === true) {\r\n return buildPoolSelection(\r\n execution,\r\n status,\r\n confirmResponse.data.load!.form!,\r\n );\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_WIZARD',\r\n };\r\n}\r\nasync function buildConfirmMessage(\r\n status: Status,\r\n message: string,\r\n): Promise<Status | FlowModal<any>> {\r\n return new ShowConfirmMessage(message, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CHECK_WIZARD' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: true };\r\n });\r\n}\r\nasync function checkWizard(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkWizardResponse = await post<TCheckWizardResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWizzard',\r\n }),\r\n {\r\n postData: {},\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n allowAfterFinish: true,\r\n },\r\n );\r\n\r\n if (checkWizardResponse?.data?.url) {\r\n getWindow(execution).location.assign(checkWizardResponse?.data?.url);\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n finishedWithError: false,\r\n };\r\n } else {\r\n const { location } = getWindow(execution).parent;\r\n if (getWindow(execution).ON_FINISH === '1') {\r\n getWindow(execution).parent?.parent?.close();\r\n } else if (getWindow(execution).ON_FINISH === '2') {\r\n location.reload();\r\n } else if (\r\n (getWindow(execution).frameElement as HTMLIFrameElement)?.src.match(\r\n /frompanel/i,\r\n )\r\n ) {\r\n (getWindow(execution).frameElement as HTMLIFrameElement).src = (\r\n getWindow(execution).frameElement as HTMLIFrameElement\r\n ).src;\r\n } else if (getWindow(execution).ON_FINISH === '5') {\r\n getWindow(execution).location.assign(getWindow(execution).ON_FINISH_URL);\r\n } else {\r\n let tabContainer =\r\n getWindow(execution).parent.document.getElementById('tabContainer');\r\n if (tabContainer == null) {\r\n tabContainer =\r\n getWindow(execution).top!.document.getElementById('tabContainer');\r\n }\r\n\r\n execution.state.executionState = ExecutionState.FINISHED;\r\n\r\n if (tabContainer) {\r\n (tabContainer as any).removeActiveTab();\r\n } else {\r\n execution.notifications.closeTab();\r\n }\r\n }\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n finishedWithError: false,\r\n };\r\n }\r\n}\r\n\r\nconst checkers: Record<ConfirmStep, ConfirmChecker> = {\r\n CHECK_LOCK: checkLock,\r\n CHECK_SIGN: checkSign,\r\n CHECK_WIZARD: checkWizard,\r\n CONFIRM: defaultConfirm,\r\n SIGN: sign,\r\n};\r\n\r\nexport async function confirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<boolean | FlowModal<any>> {\r\n let result: Status = status;\r\n\r\n while (result.step) {\r\n const checker = checkers[result.step];\r\n\r\n const checkerResult = await checker(execution, result);\r\n if (checkerResult instanceof FlowModal) {\r\n return checkerResult;\r\n }\r\n\r\n result = checkerResult;\r\n\r\n if (result.error) {\r\n execution.notifications.add(\r\n new MessageNotification({ message: result.error, type: 'error' }),\r\n );\r\n }\r\n\r\n if (result.error || result.finishedWithError) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import type { Execution } from '..';\r\n\r\nexport type ConfirmChecker = (\r\n execution: Execution,\r\n status: Status,\r\n) => Promise<Status | FlowModal<any>>;\r\nexport type ConfirmStep = 'CHECK_LOCK' | 'CONFIRM' | 'CHECK_SIGN' | 'SIGN';\r\n\r\nexport type Status = {\r\n step?: ConfirmStep;\r\n error?: string;\r\n finishedWithError?: boolean;\r\n};\r\n\r\nexport abstract class FlowModal<T extends { confirmed?: boolean }> {\r\n abstract confirm(result: T): Promise<Status | FlowModal<any>>;\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSignSelection extends FlowModal<{\r\n confirmed: boolean;\r\n signed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: {\r\n confirmed: boolean;\r\n signed: boolean;\r\n }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { FlowModal, Status } from './FlowModal';\r\n\r\nexport class ShowSign extends FlowModal<{\r\n confirmed: boolean;\r\n}> {\r\n constructor(\r\n public fetchResult: any,\r\n public confirm: (result: { confirmed: boolean }) => Promise<Status>,\r\n ) {\r\n super();\r\n }\r\n}\r\n","import { MessageNotification } from '../../Notifications/MessageNotification';\r\nimport { ConfirmChecker, ConfirmStep, FlowModal, Status } from './FlowModal';\r\nimport { makeApiaUrl, post } from '../../../util';\r\nimport { Execution } from '..';\r\nimport { setAjaxFormResponse } from '../FormsExecution/events/setAjaxFormResponse';\r\nimport { TFieldAjaxEventResponsePayload } from '../FormsExecution/types';\r\nimport { ShowSignSelection } from './ShowSignSelection';\r\nimport { ShowSign } from './ShowSign';\r\nimport { Captcha } from '../FormsExecution/fields';\r\nimport { TConfirmEntityResponse } from '../types';\r\nimport { arrayOrArray, Url } from '@apia/util';\r\nimport { getWindow } from '../../../util/dom/getWindow';\r\n\r\nasync function checkSign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const checkSignableFormsResponse = await post<{\r\n form: { i: string; p: string; t: string };\r\n sign: boolean;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n prevSteps: true,\r\n appletToken: '',\r\n preventAsXmlParameter: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal = checkSignableFormsResponse?.data?.sign;\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSignSelection(\r\n checkSignableFormsResponse?.data,\r\n async (result) => {\r\n if (result.confirmed && result.signed) {\r\n return { ...status, step: 'SIGN' };\r\n } else if (result.confirmed && !result.signed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n },\r\n );\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\nasync function sign(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | ShowSignSelection> {\r\n const signResponse = await post<{\r\n actions: {\r\n action: {\r\n param: { text: string }[];\r\n }[];\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'sign',\r\n // isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const mustShowSignModal =\r\n signResponse?.data?.actions.action[1].param[1].text === 'showAppletModal';\r\n\r\n if (mustShowSignModal) {\r\n return new ShowSign(signResponse?.data, async (result) => {\r\n if (result.confirmed) {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n return { ...status, step: undefined, finishedWithError: false };\r\n });\r\n } else {\r\n return { ...status, step: 'CONFIRM' };\r\n }\r\n}\r\n\r\nasync function checkLock(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status> {\r\n const checkLocksResponse = await post<{\r\n actions: {\r\n action: {\r\n param: string[];\r\n };\r\n };\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksResponse?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n return {\r\n ...status,\r\n step: undefined,\r\n error: 'Failed to check WebDAV document locks',\r\n };\r\n }\r\n\r\n return {\r\n ...status,\r\n step: 'CHECK_SIGN',\r\n };\r\n}\r\n\r\nasync function defaultConfirm(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<Status | FlowModal<any>> {\r\n const getConfirmParams = {\r\n ...execution.getEntity().getConfirmParams(),\r\n ...execution.getObservations().getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const confirmResponse = await post<TConfirmEntityResponse>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n action: 'confirm',\r\n asXML: true,\r\n asXml: true,\r\n appletToken: getWindow(execution).appletToken,\r\n }),\r\n {\r\n postData: getConfirmParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (confirmResponse?.data?.sysMessages?.message) {\r\n Captcha.reload();\r\n\r\n return {\r\n step: undefined,\r\n };\r\n }\r\n if (confirmResponse?.data?.load?.text?.label) {\r\n const checkConfirmEntity = await post<{\r\n form: TFieldAjaxEventResponsePayload;\r\n }>(\r\n execution,\r\n makeApiaUrl(execution, {\r\n ajaxUrl: 'apia.execution.FormAction.run?',\r\n action: 'checkAfterConfirmAjax',\r\n frmParent: 'E',\r\n currentTab: 0,\r\n }),\r\n );\r\n if (checkConfirmEntity?.data?.form) {\r\n setAjaxFormResponse(execution, checkConfirmEntity.data?.form);\r\n }\r\n\r\n const url = arrayOrArray(confirmResponse.data.actions?.action.param)[1];\r\n\r\n if (url === 'callNavigateClose') {\r\n (getWindow(execution)?.top?.ApiaUtil as any).tabs.currentTab.close(true);\r\n } else {\r\n const c = new Url(url);\r\n\r\n getWindow(execution).location.assign(\r\n makeApiaUrl(execution, {\r\n ajaxUrl: c.base,\r\n action: c.getParameter('action') as string,\r\n }),\r\n );\r\n (getWindow(execution)?.top?.ApiaUtil as any).notifications.notify({\r\n message: confirmResponse?.data?.load?.text?.label,\r\n type: 'success',\r\n });\r\n }\r\n }\r\n\r\n return {\r\n ...status,\r\n step: undefined,\r\n };\r\n}\r\n\r\nconst checkers: Record<ConfirmStep, ConfirmChecker> = {\r\n CHECK_LOCK: checkLock,\r\n CHECK_SIGN: checkSign,\r\n CONFIRM: defaultConfirm,\r\n SIGN: sign,\r\n};\r\n\r\nexport async function confirmEntity(\r\n execution: Execution,\r\n status: Status,\r\n): Promise<boolean | FlowModal<any>> {\r\n let result: Status = status;\r\n\r\n while (result.step) {\r\n const checker = checkers[result.step];\r\n\r\n const checkerResult = await checker(execution, result);\r\n if (checkerResult instanceof FlowModal) {\r\n return checkerResult;\r\n }\r\n\r\n result = checkerResult;\r\n\r\n if (result.error) {\r\n execution.notifications.add(\r\n new MessageNotification({ message: result.error, type: 'error' }),\r\n );\r\n }\r\n\r\n if (result.error || result.finishedWithError) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import { InitialData } from '../InitialData';\r\nimport { getLabel, labels } from '../../util/labels/labels';\r\nimport { Form } from './FormsExecution/Form';\r\nimport { TFormEventName, TFrmParent } from '../InitialData/types/TApiaForm';\r\nimport { FieldsMapping, defaultFieldsMap } from './FormsExecution/fieldsMap';\r\nimport { Notifications } from '../Notifications';\r\nimport { MessageNotification } from '../Notifications/MessageNotification';\r\nimport { Process } from './Process';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Field } from './FormsExecution/Field';\r\nimport { makeApiaUrl, post, get, parseXml } from '../../util';\r\nimport { Task } from './Task';\r\nimport { Entity } from './Entity';\r\nimport { arrayOrArray, EventEmitter, noNaN, postNavigation } from '@apia/util';\r\nimport { Observations } from './Observations';\r\nimport { FlowModal, Status } from './FlowModals/FlowModal';\r\nimport { Captcha } from './FormsExecution/fields';\r\nimport { getCurrentTabsString } from '../../util/app/getCurrentTabsString';\r\nimport { ExecutionState, TFetchTaskActionResponse } from './types';\r\nimport { parseFakeJSON } from '../../util/other/parseFakeJSON';\r\nimport { confirm } from './FlowModals/confirmFlow';\r\nimport { confirmEntity } from './EntityFlowModals/confirmFlow';\r\nimport { getWindow } from '../../util/dom/getWindow';\r\nimport { ShowSignSelection } from './FlowModals';\r\n\r\ninterface TExecutionErrors {\r\n onClose: string;\r\n sysMessages: {\r\n message: {\r\n text: string;\r\n }[];\r\n };\r\n sysExceptions: {\r\n exception: {\r\n label: string;\r\n text: string;\r\n }[];\r\n };\r\n exceptions: {\r\n exception: {\r\n label: string;\r\n text: string;\r\n }[];\r\n };\r\n}\r\n\r\nexport type TExecutionConfig = {\r\n canConfirm: boolean;\r\n canGoBack: boolean;\r\n canGoForward: boolean;\r\n canSave: boolean;\r\n canFree: boolean;\r\n canDelegate: boolean;\r\n canClose: boolean;\r\n canShare: boolean;\r\n isEntity?: boolean;\r\n};\r\nexport type TModalSize =\r\n | 'editGrid'\r\n | 'sm'\r\n | 'md'\r\n | 'md-fixed'\r\n | 'lg'\r\n | 'lg-fixed'\r\n | 'xl'\r\n | 'xl-fixed'\r\n | 'xxl'\r\n | 'xxxl'\r\n | 'xxxl-fixed'\r\n | 'flex'\r\n | 'cal'\r\n | 'finder'\r\n | 'fileModal';\r\nexport const unescapeMarkup = (str: string): string => {\r\n if (str !== undefined && str.length > 0) {\r\n return str\r\n .replace(/'/g, \"'\")\r\n .replace(/"/g, '\"')\r\n .replace(/>/g, '>')\r\n .replace(/</g, '<')\r\n .replace(/&/g, '&');\r\n }\r\n return '';\r\n};\r\n\r\nexport type TExecutionEnvironment = {\r\n fieldsMapping?: FieldsMapping;\r\n window: Window;\r\n document: Document;\r\n headers: any;\r\n properties?: {\r\n taskName: string;\r\n processName: string;\r\n };\r\n};\r\n\r\nexport class Execution extends EventEmitter<{\r\n flow:\r\n | 'previous'\r\n | 'confirm'\r\n | 'next'\r\n | 'save'\r\n | 'release'\r\n | 'share'\r\n | 'viewDocs'\r\n | 'print'\r\n | 'delegate';\r\n sendToDesktop: null;\r\n hideFormModal: Form;\r\n showFormAsModal: { form: Form; size?: TModalSize };\r\n}> {\r\n public fieldsMapping: FieldsMapping;\r\n private entity = new Entity(this);\r\n private process = new Process(this);\r\n private observations = new Observations(this);\r\n private executedOnLoadEvents = false;\r\n public executionConfig: TExecutionConfig | null = null;\r\n private _steps: {\r\n title: string;\r\n stepNumber: number;\r\n status: 'completed' | 'pending' | 'current';\r\n }[] = [];\r\n private _currentStep: number = 1;\r\n private _stepCount: number = 1;\r\n public readonly notifications: Notifications;\r\n private lastModalReturn: string[] = [];\r\n private _pendingPromises = new Set<Promise<boolean>>();\r\n\r\n constructor(public environment: TExecutionEnvironment) {\r\n super();\r\n\r\n this.fieldsMapping = { ...defaultFieldsMap, ...environment.fieldsMapping };\r\n\r\n this.notifications = new Notifications(this);\r\n\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n protected formsById = {\r\n E: new Map<string, Form>(),\r\n P: new Map<string, Form>(),\r\n };\r\n protected forms = {\r\n E: new Map<string, Form>(),\r\n P: new Map<string, Form>(),\r\n };\r\n\r\n state: {\r\n executionState: ExecutionState;\r\n locked: number;\r\n hasChangedAnything: boolean;\r\n } = {\r\n executionState: ExecutionState.LOADING,\r\n locked: 0,\r\n hasChangedAnything: false,\r\n };\r\n\r\n addPendingPromise(promise: Promise<boolean>) {\r\n this._pendingPromises.add(promise);\r\n promise.finally(() => {\r\n this._pendingPromises.delete(promise);\r\n });\r\n }\r\n\r\n getAllForms() {\r\n return [...this.forms.E.values(), ...this.forms.P.values()];\r\n }\r\n\r\n private hasInitializedFormsTabs: Record<TFrmParent, boolean> = {} as Record<\r\n TFrmParent,\r\n boolean\r\n >;\r\n\r\n initializeFormsTabs(frmParent: TFrmParent, cb: () => unknown) {\r\n if (!this.hasInitializedFormsTabs[frmParent]) {\r\n this.hasInitializedFormsTabs[frmParent] = true;\r\n cb();\r\n }\r\n }\r\n\r\n getFormsByType(type: TFrmParent) {\r\n return [...this.forms[type].values()];\r\n }\r\n getFormByName(formName: string, frmParent?: TFrmParent) {\r\n if (frmParent) {\r\n return this.forms[frmParent].get(formName);\r\n } else {\r\n return this.forms.E.get(formName) || this.forms.P.get(formName);\r\n }\r\n }\r\n getFormById(formId: string | number, frmParent?: TFrmParent) {\r\n if (frmParent) return this.formsById[frmParent].get(String(formId));\r\n return (\r\n this.formsById.E.get(String(formId)) ||\r\n this.formsById.P.get(String(formId))\r\n );\r\n }\r\n get currentStep() {\r\n return this._currentStep;\r\n }\r\n get steps() {\r\n return this._steps;\r\n }\r\n public getEntity() {\r\n this.entity.init();\r\n\r\n return this.entity;\r\n }\r\n public getProcess() {\r\n this.process.init();\r\n\r\n return this.process;\r\n }\r\n public getObservations() {\r\n this.observations.init();\r\n\r\n return this.observations;\r\n }\r\n public getCurrentTask() {\r\n return new Task({ task: { name: 'TODO' } });\r\n }\r\n\r\n private mustRenderForms: string[] = [];\r\n\r\n public get locked() {\r\n return this.state.locked > 0;\r\n }\r\n\r\n public lock() {\r\n this.state.locked++;\r\n let unlocked = false;\r\n return () => {\r\n if (!unlocked) {\r\n unlocked = true;\r\n this.state.locked--;\r\n }\r\n };\r\n }\r\n\r\n public async run(executionConfig: TExecutionConfig) {\r\n const unlock = this.lock();\r\n try {\r\n this._stepCount = noNaN(getWindow(this).STEP_QTY);\r\n this._currentStep = noNaN(getWindow(this).CURRENT_STEP);\r\n this.executionConfig = executionConfig;\r\n this.environment.properties = {\r\n taskName: getWindow(this).CURRENT_TASK_NAME || '',\r\n processName: getWindow(this).CURRENT_PROCESS_NAME || '',\r\n };\r\n\r\n const errXML = unescapeMarkup(getWindow(this).EXEC_ERRORS);\r\n\r\n if (errXML) {\r\n const obj: TExecutionErrors = parseXml(errXML);\r\n arrayOrArray(obj.sysMessages?.message).forEach((c) =>\r\n this.notifications.add(\r\n new MessageNotification({\r\n message: c.text,\r\n type: 'warning',\r\n }),\r\n ),\r\n );\r\n [\r\n ...arrayOrArray(obj.exceptions?.exception),\r\n ...arrayOrArray(obj.sysExceptions?.exception),\r\n ].forEach((c) =>\r\n this.notifications.add(\r\n new MessageNotification({\r\n message: c.text,\r\n type: 'error',\r\n stackTrace: c.label,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n for (let i = 1; i < Number(getWindow(this).STEP_QTY) + 1; i++) {\r\n if (i < this._currentStep) {\r\n this._steps.push({\r\n title: `${getLabel(this, 'lblTraStep').text} ${i}`,\r\n stepNumber: i,\r\n status: 'completed',\r\n });\r\n }\r\n if (i > this._currentStep && i <= this._stepCount) {\r\n this._steps.push({\r\n title: `${getLabel(this, 'lblTraStep').text} ${i}`,\r\n stepNumber: i,\r\n status: 'pending',\r\n });\r\n }\r\n if (i === this._currentStep) {\r\n this._steps.push({\r\n title: `${getLabel(this, 'lblTraStep').text} ${i}`,\r\n stepNumber: i,\r\n status: 'current',\r\n });\r\n }\r\n }\r\n const res = await InitialData.getFormsDefinition(this);\r\n\r\n try {\r\n for await (const formDefinition of res) {\r\n const props = parseFakeJSON(formDefinition.properties);\r\n if (\r\n !props.frmTab &&\r\n !props.frmHidden &&\r\n arrayOrArray(formDefinition.field).every(\r\n (c) => !c.properties?.visibilityHidden,\r\n ) &&\r\n (arrayOrArray(formDefinition.field).length > 0 ||\r\n arrayOrArray(formDefinition.customField).length > 0)\r\n ) {\r\n this.mustRenderForms.push(\r\n formDefinition.frmParent + '_' + formDefinition.formName,\r\n );\r\n }\r\n }\r\n for await (const formDefinition of res) {\r\n const newForm = new Form(this, formDefinition);\r\n await newForm.init();\r\n\r\n if (formDefinition.frmParent === 'E') {\r\n this.forms.E.set(formDefinition.formName, newForm);\r\n this.formsById.E.set(String(formDefinition.id), newForm);\r\n } else {\r\n this.forms.P.set(formDefinition.formName, newForm);\r\n this.formsById.P.set(String(formDefinition.id), newForm);\r\n }\r\n }\r\n\r\n this.state.executionState =\r\n this.mustRenderForms.length === 0\r\n ? ExecutionState.RUNNING\r\n : ExecutionState.RENDERING;\r\n\r\n await this.fireEvents('onLoad');\r\n this.executedOnLoadEvents = true;\r\n if (\r\n this.mustRenderForms.length === 0 &&\r\n this.state.executionState === ExecutionState.RENDERING\r\n ) {\r\n this.state.executionState = ExecutionState.RUNNING;\r\n }\r\n } catch (e) {\r\n this.state.executionState = ExecutionState.FINISHED_WITH_ERROR;\r\n throw e;\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n\r\n protected getHiddenForms() {\r\n const hiddenForms = this.getAllForms().filter((form) => {\r\n return form.properties.frmHidden;\r\n });\r\n return hiddenForms;\r\n }\r\n\r\n public markFormAsRendered(frmParent: string, frmName: string) {\r\n this.mustRenderForms = this.mustRenderForms.filter(\r\n (c) => c !== frmParent + '_' + frmName,\r\n );\r\n if (this.mustRenderForms.length === 0 && this.executedOnLoadEvents) {\r\n this.state.executionState = ExecutionState.RUNNING;\r\n }\r\n }\r\n\r\n public async delegate() {\r\n console.warn('Delegate not implemented yet');\r\n }\r\n public async shareSocial() {\r\n console.warn('shareSocial not implemented yet');\r\n }\r\n\r\n flow = {\r\n back: () => {\r\n this.emit('flow', 'previous');\r\n },\r\n confirm: () => {\r\n this.emit('flow', 'confirm');\r\n },\r\n next: () => {\r\n this.emit('flow', 'next');\r\n },\r\n previous: () => {\r\n this.emit('flow', 'previous');\r\n },\r\n save: () => {\r\n this.emit('flow', 'save');\r\n },\r\n release: () => {\r\n this.emit('flow', 'release');\r\n },\r\n delegate: () => {\r\n this.emit('flow', 'delegate');\r\n },\r\n share: () => {\r\n this.emit('flow', 'share');\r\n },\r\n viewDocs: () => {\r\n this.emit('flow', 'viewDocs');\r\n },\r\n print: () => {\r\n this.emit('flow', 'print');\r\n },\r\n };\r\n\r\n sendToDesktop() {\r\n this.emit('sendToDesktop', null);\r\n }\r\n\r\n public async doBack() {\r\n const canGoBack = this.executionConfig?.canGoBack;\r\n if (canGoBack) {\r\n try {\r\n const nextUrl = makeApiaUrl(this, {\r\n action: 'gotoPrevStep',\r\n asXML: true,\r\n react: true,\r\n currentTab: getCurrentTabsString(this),\r\n fromPanel: null,\r\n });\r\n\r\n const serverParams = {\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n };\r\n postNavigation(nextUrl, serverParams);\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n public async doConfirm(\r\n status?: Status,\r\n ): Promise<boolean | FlowModal<any> | Field> {\r\n if (status && !status?.step && !status?.finishedWithError) {\r\n return false;\r\n } else {\r\n const validationResult = status !== undefined || (await this.validate());\r\n if (validationResult !== true) {\r\n return validationResult;\r\n }\r\n\r\n if (\r\n this.executionConfig?.isEntity &&\r\n !this.entity.validateAssociations()\r\n ) {\r\n return false;\r\n }\r\n\r\n const isValid =\r\n status !== undefined || (await this.fireEvents('onSubmit'));\r\n const canConfirm = this.executionConfig?.canConfirm && isValid === true;\r\n\r\n if (canConfirm) {\r\n const unlock = this.lock();\r\n try {\r\n const result = await (\r\n this.executionConfig?.isEntity ? confirmEntity : confirm\r\n )(\r\n this,\r\n (status || {\r\n step: 'CHECK_LOCK',\r\n }) as any,\r\n );\r\n\r\n if (result instanceof FlowModal) {\r\n return result;\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n } finally {\r\n unlock();\r\n }\r\n } else {\r\n return isValid;\r\n }\r\n }\r\n }\r\n\r\n public async doFree() {\r\n const serverParams = {\r\n ...this.entity.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n const data = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'release',\r\n currentTab: getCurrentTabsString(this),\r\n }),\r\n {\r\n postData: serverParams,\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n if (data?.data?.text) {\r\n this.state.executionState = ExecutionState.FINISHED;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n public async doNext(result?: { confirmed: boolean; signed: boolean }) {\r\n const isValid = await this.validate();\r\n if (isValid === true) {\r\n if (!(await this.fireEvents('onSubmit'))) {\r\n return false;\r\n }\r\n }\r\n if (isValid !== true) return isValid;\r\n\r\n const canGoNext = this.executionConfig?.canGoForward && isValid === true;\r\n\r\n if (canGoNext) {\r\n const unlock = this.lock();\r\n try {\r\n const checkLocksRes = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'checkWebDavDocumentsLocks',\r\n isAjax: true,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (\r\n checkLocksRes?.data?.actions?.action?.param[1] !==\r\n 'successWebDavLockFunction'\r\n ) {\r\n throw new Error('Failed to check WebDAV document locks.');\r\n }\r\n\r\n // Check signable forms\r\n const checkSignableFormsRes = await post<{\r\n hasForms: boolean;\r\n sign: boolean;\r\n }>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'hasSignableForms',\r\n isAjax: true,\r\n appletToken: getWindow(this).appletToken,\r\n }),\r\n {\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n if (checkSignableFormsRes?.status !== 200) {\r\n throw new Error('No signable forms available.');\r\n }\r\n const mustShowSignModal = checkSignableFormsRes?.data?.sign;\r\n\r\n if (mustShowSignModal && !result?.signed) {\r\n return new ShowSignSelection(\r\n checkSignableFormsRes?.data,\r\n async () => {\r\n return '' as Status;\r\n },\r\n );\r\n }\r\n\r\n if (mustShowSignModal && (!result?.confirmed || !result?.signed))\r\n return;\r\n\r\n const nextUrl = makeApiaUrl(this, {\r\n action: 'gotoNextStep',\r\n asXML: true,\r\n react: true,\r\n currentTab: getCurrentTabsString(this),\r\n fromPanel: null,\r\n });\r\n\r\n const serverParams = {\r\n ...this.entity.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n ...this.observations.getConfirmParams(),\r\n ...Captcha.getConfirmParams(),\r\n };\r\n postNavigation(nextUrl, serverParams);\r\n return true;\r\n } catch (error) {\r\n console.error('Confirmation process failed:', error);\r\n this.notifications.add(\r\n new MessageNotification({\r\n type: 'error',\r\n message: labels.errorConfirmationFailed(),\r\n }),\r\n );\r\n return false;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n }\r\n\r\n public async doPrint() {\r\n getWindow(this).print();\r\n }\r\n\r\n public async doSave() {\r\n const unlock = this.lock();\r\n\r\n try {\r\n const response = await post<TFetchTaskActionResponse>(\r\n this,\r\n makeApiaUrl(this, {\r\n action: 'saveTask',\r\n asXML: true,\r\n react: true,\r\n currentTab: getCurrentTabsString(this),\r\n }),\r\n {\r\n postData: {\r\n ...this.observations.getConfirmParams(),\r\n ...this.process.getConfirmParams(),\r\n },\r\n postDataTreatment: 'stringify',\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n },\r\n );\r\n\r\n const canClose = response?.data?.load?.canClose;\r\n if (canClose) {\r\n return response;\r\n }\r\n } finally {\r\n unlock();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getStepTitle(step: number) {\r\n if (this._steps) return this._steps[step];\r\n }\r\n\r\n /**\r\n * Ends the current session\r\n */\r\n public kill() {\r\n ((frameElement as any)?.handleDeadSession as any)?.();\r\n this.state.executionState = ExecutionState.FINISHED;\r\n this.notifications.kill();\r\n }\r\n\r\n public async viewDocs() {\r\n const url = `${\r\n getWindow(this).CONTEXT\r\n }/react/generic/docExecutionModal.jsp?isProcessMonitor=${\r\n getWindow(this).IN_MONITOR_PROCESS ?? 'false'\r\n }&isTaskMonitor=${getWindow(this).IN_MONITOR_TASK ?? 'false'}&isTask=true${\r\n getWindow(this).TAB_ID_REQUEST\r\n }&react=true`;\r\n\r\n const result = await get(this, url);\r\n\r\n if (result && result.data !== null) {\r\n const { data } = result;\r\n return data;\r\n }\r\n }\r\n\r\n public setStepTitle(stepNumber: number, stepTitle: string) {\r\n if (this._steps && this._steps[stepNumber - 1])\r\n this._steps[stepNumber - 1].title = stepTitle;\r\n }\r\n\r\n public async validate(): Promise<true | Field> {\r\n let firstInvalid: Field | null = null;\r\n\r\n for await (const [, c] of this.forms.E) {\r\n const result = await c.validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n }\r\n }\r\n for await (const [, c] of this.forms.P) {\r\n const result = await c.validate();\r\n if (result !== true && !firstInvalid) {\r\n firstInvalid = result;\r\n }\r\n }\r\n\r\n return firstInvalid ?? true;\r\n }\r\n\r\n public setLastModalReturn(value: string[]) {\r\n this.lastModalReturn = value;\r\n }\r\n\r\n public getLastModalReturn() {\r\n return this.lastModalReturn;\r\n }\r\n\r\n private async fireEvents(evt: TFormEventName) {\r\n const unlock = this.lock();\r\n let result = true;\r\n\r\n try {\r\n for await (const f of this.forms.E.values()) {\r\n result = result && (await f.fireScriptEvent(evt));\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n for await (const f of this.forms.P.values()) {\r\n result = result && (await f.fireScriptEvent(evt));\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } finally {\r\n unlock();\r\n }\r\n }\r\n public async waitForPendingSyncs(): Promise<void> {\r\n if (this._pendingPromises.size === 0) return;\r\n\r\n const pending = Array.from(this._pendingPromises);\r\n\r\n await Promise.allSettled(pending);\r\n }\r\n}\r\n"],"names":["__publicField","ExecutionState","queryString","parseFakeJSON","IProperty","id","_hasInited","__privateAdd","__privateGet","__privateSet","EventEmitter","result","shallowEqual","properties","noNaN","_execution","_field","TextAreaField","decodeBase64ToUtf8","FlowModal","checkSign","ShowSignSelection","sign","ShowSign","checkLock","defaultConfirm","checkers"],"mappings":";;;;;;;;;;;;;AAEO,MAAM,SAAA,GAA6B,CAAC,CAAA,EAAQ,CAAA,KAAW;AAC5D,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA;AAAG,IAAA,OAAO,IAAA;AAE5B,EAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG;AAC7C,IAAA,OAAO,KAAA;AAAA;AAGT,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,MAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,EAAE,MAAA,EAAQ;AAC9C,QAAA,OAAO,KAAA;AAAA;AAET,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,QAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;AAC1B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,OAAO,IAAA;AAAA,KACT,MAAA,IAAW,KAAK,CAAA,EAAG;AACjB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,QAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC7B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,QAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC7B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,OAAO,IAAA;AAAA,eACG,CAAA,IAAK,CAAC,CAAA,IAAO,CAAC,KAAK,CAAA,EAAI;AACjC,MAAA,OAAO,KAAA;AAAA;AACT;AAGF,EAAA,OAAO,CAAA,KAAM,CAAA;AACf;;;;;;;;ACtBO,MAAe,YAAA,CAEpB;AAAA,EAGA,YAA4B,KAAA,EAAc;AAAd,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAF5B,IAAAA,eAAA,CAAA,IAAA,EAAU,OAAA,CAAA;AAGR,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAEb,IAAA,cAAA,CAAsC,IAAA,EAAM,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA;AACnE,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA;AACpB,EACA,IAAI,EAAA,GAAK;AACP,IAAA,OAAO,KAAK,KAAA,CAAM,EAAA;AAAA;AACpB,EACA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,KAAA,CAAM,MAAA;AAAA;AACpB,EACA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA;AAAA;AACpB,EACA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA;AACpB,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EACA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA;AAEtB;;AC9CO,MAAM,4BAA4B,YAAA,CAAa;AAAA,EACpD,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,KAAA;AAAA;AAExB;;ACNA,MAAM,UAAA,GAAa;AAAA;AAAA,EAEjB,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,aAAA,EAAe,UAAA;AAAA,EACf,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,UAAA;AAAA,EACf,SAAA,EAAW,MAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA;AAAA,EAGd,UAAA,EAAY,SAAA;AAAA,EACZ,WAAA,EAAa,UAAA;AAAA,EACb,iBAAA,EAAmB,eAAA;AAAA,EAEnB,YAAA,EAAc,UAAA;AAAA,EACd,eAAA,EAAiB,aAAA;AAAA,EACjB,aAAA,EAAe,WAAA;AAAA,EACf,eAAA,EAAiB,aAAA;AAAA;AAAA,EAGjB,gBAAA,EAAkB,YAAA;AAAA;AAAA,EAGlB,aAAA,EAAe,MAAA;AAAA,EACf,aAAA,EAAe,MAAA;AAAA,EACf,iBAAA,EAAmB,UAAA;AAAA,EACnB,iBAAA,EAAmB,UAAA;AAAA,EACnB,uBAAA,EAAyB,eAAA;AAAA,EACzB,mBAAA,EAAqB,WAAA;AAAA,EACrB,cAAA,EAAgB,OAAA;AAAA,EAChB,iBAAA,EAAmB,UAAA;AAAA,EACnB,gBAAA,EAAkB,SAAA;AAAA,EAClB,gBAAA,EAAkB,SAAA;AAAA,EAClB,cAAA,EAAgB,OAAA;AAAA,EAChB,aAAA,EAAe,UAAA;AAAA,EACf,aAAA,EAAe,MAAA;AAAA,EACf,mBAAA,EAAqB,YAAA;AAAA,EACrB,kBAAA,EAAoB,WAAA;AAAA,EACpB,cAAA,EAAgB,UAAA;AAAA,EAChB,kBAAA,EAAoB,UAAA;AAAA,EACpB,oBAAA,EAAsB,YAAA;AAAA,EACtB,sBAAA,EAAwB,iBAAA;AAAA,EACxB,0BAAA,EAA4B,kBAAA;AAAA,EAC5B,kBAAA,EAAoB,WAAA;AAAA,EACpB,mBAAA,EAAqB,WAAA;AAAA,EACrB,kBAAA,EAAoB,UAAA;AAAA,EACpB,gBAAA,EAAkB,SAAA;AAAA,EAClB,oBAAA,EAAsB,YAAA;AAAA,EACtB,sBAAA,EAAwB,aAAA;AAAA,EACxB,oBAAA,EAAsB,YAAA;AAAA,EACtB,iBAAA,EAAmB,SAAA;AAAA,EACnB,gBAAA,EAAkB,QAAA;AAAA,EAClB,mBAAA,EAAqB,WAAA;AAAA,EACrB,kBAAA,EAAoB,UAAA;AAAA,EACpB,sBAAA,EAAwB,cAAA;AAAA,EACxB,wBAAA,EAA0B,iBAAA;AAAA,EAC1B,YAAA,EAAc,KAAA;AAAA,EACd,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,8BAAA,EAAgC,mBAAA;AAAA,EAChC,uBAAA,EAAyB,eAAA;AAAA,EACzB,mBAAA,EAAqB,OAAA;AAAA,EACrB,wBAAA,EAA0B,eAAA;AAAA,EAC1B,gCAAA,EAAkC,mBAAA;AAAA,EAClC,8BAAA,EAAgC,iBAAA;AAAA,EAChC,iCAAA,EAAmC,mBAAA;AAAA,EACnC,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,qBAAA,EAAuB,YAAA;AAAA,EACvB,mBAAA,EAAqB,cAAA;AAAA,EACrB,mBAAA,EAAqB,WAAA;AAAA,EACrB,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,8BAAA,EAAgC,qBAAA;AAAA,EAChC,0BAAA,EAA4B,eAAA;AAAA,EAC5B,0BAAA,EAA4B,eAAA;AAAA,EAC5B,wBAAA,EAA0B,eAAA;AAAA,EAC1B,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,uBAAA,EAAyB,cAAA;AAAA,EACzB,sBAAA,EAAwB,aAAA;AAAA,EACxB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,sBAAA,EAAwB,iBAAA;AAAA,EACxB,qBAAA,EAAuB,aAAA;AAAA,EACvB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,gBAAA,EAAkB,SAAA;AAAA,EAClB,qBAAA,EAAuB,aAAA;AAAA,EACvB,kBAAA,EAAoB,SAAA;AAAA;AAAA,EAEpB,sBAAA,EAAwB,WAAA;AAAA,EACxB,eAAA,EAAiB,QAAA;AAAA,EACjB,oBAAA,EAAsB,aAAA;AAAA,EACtB,mBAAA,EAAqB,WAAA;AAAA,EACrB,oBAAA,EAAsB,YAAA;AAAA,EACtB,kBAAA,EAAoB,UAAA;AAAA,EACpB,kBAAA,EAAoB,UAAA;AAAA,EACpB,iBAAA,EAAmB,SAAA;AAAA;AAAA,EAEnB,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,6BAAA,EAA+B,SAAA;AAAA,EAC/B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,6BAAA,EAA+B,aAAA;AAAA,EAC/B,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,oCAAA,EAAsC,oBAAA;AAAA,EACtC,oCAAA,EAAsC,oBAAA;AAAA,EACtC,oCAAA,EAAsC,eAAA;AAAA,EACtC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,2BAAA,EAA6B,cAAA;AAAA,EAC7B,gCAAA,EAAkC,eAAA;AAAA,EAClC,6BAAA,EAA+B,gBAAA;AAAA,EAC/B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,iCAAA,EAAmC,mBAAA;AAAA,EACnC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,+BAAA,EAAiC,sBAAA;AAAA,EACjC,kCAAA,EAAoC;AACtC,CAAA;;AC5HA,MAAM,SAAA,GAAY;AAAA,EAChB,SAAA,EAAW,QAAA;AAAA,EACX,WAAA,EAAa,UAAA;AAAA,EACb,uBAAA,EAAyB,cAAA;AAAA,EACzB,oBAAA,EAAsB,WAAA;AAAA,EACtB,oBAAA,EAAsB,cAAA;AAAA,EACtB,iBAAA,EAAmB,QAAA;AAAA,EACnB,uBAAA,EAAyB,cAAA;AAAA,EACzB,uBAAA,EAAyB,aAAA;AAAA,EACzB,sBAAA,EAAwB,UAAA;AAAA,EACxB,aAAA,EAAe,cAAA;AAAA,EACf,cAAA,EAAgB,cAAA;AAAA,EAChB,aAAA,EAAe,sBAAA;AAAA,EACf,SAAA,EAAW;AACb,CAAA;;ACXA,MAAM,aAAA,GAAgB;AAAA,EACpB,SAAA,CAAU,uBAAA;AAAA,EACV,SAAA,CAAU,oBAAA;AAAA,EACV,SAAA,CAAU,oBAAA;AAAA,EACV,SAAA,CAAU,iBAAA;AAAA,EACV,SAAA,CAAU,uBAAA;AAAA,EACV,SAAA,CAAU,uBAAA;AAAA,EACV,SAAA,CAAU,sBAAA;AAAA,EACV,SAAA,CAAU,aAAA;AAAA,EACV,SAAA,CAAU,cAAA;AAAA,EACV,SAAA,CAAU;AACZ,CAAA;AAEA,MAAM,cAAA,GAAiB;AAAA,EACrB,UAAA,CAAW,sBAAA;AAAA,EACX,UAAA,CAAW,gBAAA;AAAA,EACX,UAAA,CAAW,iBAAA;AAAA,EACX,UAAA,CAAW,kCAAA;AAAA,EACX,UAAA,CAAW,+BAAA;AAAA,EACX,UAAA,CAAW,+BAAA;AAAA,EACX,UAAA,CAAW,iCAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,oCAAA;AAAA,EACX,UAAA,CAAW,+BAAA;AAAA,EACX,UAAA,CAAW,2BAAA;AAAA,EACX,UAAA,CAAW,oCAAA;AAAA,EACX,UAAA,CAAW,oCAAA;AAAA,EACX,UAAA,CAAW,qBAAA;AAAA,EACX,UAAA,CAAW,gCAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,8BAAA;AAAA,EACX,UAAA,CAAW,4BAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,uBAAA;AAAA,EACX,UAAA,CAAW,sBAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,6BAAA;AAAA,EACX,UAAA,CAAW,sBAAA;AAAA,EACX,UAAA,CAAW,wBAAA;AAAA,EACX,UAAA,CAAW,sBAAA;AAAA,EACX,UAAA,CAAW,0BAAA;AAAA,EACX,UAAA,CAAW,sBAAA;AAAA,EACX,UAAA,CAAW,uBAAA;AAAA,EACX,UAAA,CAAW,oBAAA;AAAA,EACX,UAAA,CAAW,oBAAA;AAAA,EACX,UAAA,CAAW,iBAAA;AAAA,EACX,UAAA,CAAW,gBAAA;AAAA,EACX,UAAA,CAAW,kBAAA;AAAA,EACX,UAAA,CAAW,kBAAA;AAAA,EACX,UAAA,CAAW,mBAAA;AAAA,EACX,UAAA,CAAW,iBAAA;AAAA,EACX,UAAA,CAAW,iBAAA;AAAA,EACX,UAAA,CAAW,mBAAA;AAAA,EACX,UAAA,CAAW,6BAAA;AAAA,EACX,UAAA,CAAW,2BAAA;AAAA,EACX,UAAA,CAAW,iCAAA;AAAA,EACX,UAAA,CAAW,kBAAA;AAAA,EACX,UAAA,CAAW,6BAAA;AAAA,EACX,UAAA,CAAW;AACb,CAAA;AAEA,MAAM,SAAA,GAAsB,CAAC,GAAG,cAAA,EAAgB,GAAG,aAAa,CAAA;;AC/DhE,MAAM,QAAA,GAAqB;AAAA,EACzB,UAAA,CAAW,aAAA;AAAA,EACX,UAAA,CAAW,aAAA;AAAA,EACX,UAAA,CAAW,gBAAA;AAAA,EACX,UAAA,CAAW,gBAAA;AAAA,EACX,UAAA,CAAW,wBAAA;AAAA,EACX,UAAA,CAAW,oBAAA;AAAA,EACX,UAAA,CAAW;AACb,CAAA;;ACIA,MAAM,UAAA,GAAa,CAAC,MAAA,KAAoD;AACtE,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA;AAAU,IAAA,OAAO,EAAC;AAEnD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAEvC,EAAA,OAAO,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AACxB,CAAA;AAGA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgC;AACjD,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,wBAAA,CAAyB,KAAK,GAAG,CAAA;AAAG,MAAA,OAAO,IAAA;AAC/C,IAAA,IAAI,8BAAA,CAA+B,KAAK,GAAG,CAAA;AAAG,MAAA,OAAO,KAAA;AAAA;AAEvD,EAAA,OAAO,KAAA;AACT,CAAA;AAkBO,MAAM,uBAAA,GAA0B,CACrC,KAAA,KACsB;AAEtB,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,MAAM,OAAA,GAAoB,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC3C,EAAA,MAAM,MAAA,GAA2B,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AACpD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC1C,IAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA;AACrB,IAAA,IAAI,SAAA,CAAU,QAAQ,GAAG,CAAA,KAAM,MAAM,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA,EAAI;AACjE,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,EAAA;AAAA,KAC/B,MAAA,IAAW,OAAO,MAAA,CAAO,CAAC,MAAM,QAAA,EAAU;AACxC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAAA,KAC1B,MAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,GAAG,MAAM,EAAA,EAAI;AACxC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,CAAC,CAAW,CAAA;AAAA,KAC/C,MAAA,IAAW,QAAA,CAAS,OAAA,CAAQ,GAAG,MAAM,EAAA,EAAI;AACvC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,QAAA,CAAU,OAAO,CAAC,CAAA,IAAgB,IAAI,EAAE,CAAA;AAAA;AAC1D;AAEF,EAAA,OAAO,QAAA;AACT,CAAA;AAEO,MAAM,wBAAA,GAA2B,CAAC,IAAA,KAAyB;AAChE,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,MAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,OAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,gBAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,MAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,SAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,QAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,UAAA;AACzB,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,WAAA;AACzB,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,MAAM,yBAAA,GAA4B,CAAC,IAAA,KAAyB;AACjE,EAAA,IAAI,IAAA,KAAS,GAAA;AAAK,IAAA,OAAO,MAAA;AACzB,EAAA,IAAI,IAAA,KAAS,OAAA;AAAS,IAAA,OAAO,OAAA;AAC7B,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,MAAM,wBAAA,GAA2B,CACtC,KAAA,EACA,KAAA,KACgB;AAChB,EAAA,OAAO,KAAA;AACT,CAAA;AACO,SAAS,WAAW,IAAA,EAAc;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AACtC,EAAA,OAAO,EAAA,CAAG,OAAO,IAAI,CAAA;AACvB;AAEO,MAAM,gBAAA,GAAmB,CAC9B,KAAA,EACA,GAAA,KAMwB;AACxB,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,OAAO,uBAAA,CAAwB,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA;AAElD,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AAEzB,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AAEzB,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,OAAO,QAAA,CAAS,GAAG,MAAA,CAAO,KAAK,EAAE,UAAA,CAAW,GAAA,EAAK,OAAO,CAAC,CAAA;AAAA;AAE3D,EAAA,IAAI,GAAA,KAAQ,WAAW,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACvE,IAAA,OAAO,EAAA;AAAA;AAET,EAAA,IAAI,QAAQ,WAAA,IAAe,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,MAAA,EAAQ;AACxE,IAAA,OAAO,EAAA;AAAA;AAET,EAAA,IAAA,CACG,GAAA,KAAQ,MAAA,IACP,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,GAAA,IACR,GAAA,KAAQ,GAAA,IACR,GAAA,KAAQ,QAAA,KACV,OAAO,KAAA,KAAU,QAAA,EACjB;AACA,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA;AAG3B,EAAA,OAAO,MAAM,KAAA,GAAQ,KAAK,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA,GAAI,KAAA;AACpD,CAAA;AAEO,SAAS,uBAAuB,CAAA,EAAW;AAChD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,EAAO;AACtC,MAAC,CAAA,CAAU,GAAG,CAAA,GAAI,sBAAA,CAAuB,KAAK,CAAA;AAAA,eACrC,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,EAAG;AACxD,MAAA,IAAK,CAAA,CAAU,cAAc,QAAA,EAAU;AACrC,QAAC,CAAA,CAAU,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA;AAAA,OACpC,MAAO;AACL,QAAC,CAAA,CAAU,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA;AAAA;AACpC;AACF;AAEF,EAAA,OAAO,CAAA;AACT;AAmCO,SAAS,sBAAA,CAAuB,OAAe,IAAA,EAAe;AAEnE,EAAA,IAAI,IAAA,KAAS,OAAA;AAAS,IAAA,OAAO,KAAA;AAG7B,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEO,SAAS,2BACd,YAAA,EACA;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAe;AAAA,IACrB,SAAA,EAAW,IAAe;AAAA,IAC1B,YAAA,EAAc,KAAA;AAAA,IACd,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe,KAAA;AAAA,IACf,OAAA,EAAS,OAAA;AAAA,IACT,mBAAA,EAAqB;AAAA,MACnB,sBAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,iBAAA,EAAmB,CAAC,wBAAwB,CAAA;AAAA,IAC5C,kBAAA,EAAoB,CAAC,yBAAyB;AAAA,GAChD;AACF;AAEO,SAAS,0BAAA,GAAgC;AAC9C,EAAA,OAAO,CAAC,KAAa,MAAA,KAA0B;AAC7C,IAAA,IAAI,KAAA;AAEJ,IAAA,MAAA,CAAO,WAAA;AAAA,MACL,GAAA;AAAA,MACA,CAAC,KAAmB,MAAA,KAAoC;AACtD,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,OAAA,CAAQ,IAAA,CAAK,0BAA0B,GAAG,CAAA;AAC1C,UAAA,KAAA,GAAQ,GAAA;AAAA,SACV,MAAO;AACL,UAAA,IAAI,MAAA,EAAQ,IAAA,KAAS,IAAA,IAAQ,MAAA,CAAO,UAAA,EAAY;AAC9C,YAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA;AAEpC,UAAA,KAAA,GAAQ,MAAA;AAAA;AACV;AACF,KACF;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,GAC/B,sBAAA,CAAuB,KAAK,CAAA,GAC7B,KAAA;AAAA;AAEN,IAAA,OAAO,EAAC;AAAA,GACV;AACF;AAEA,SAAS,oBACP,YAAA,EACc;AACd,EAAA,OAAO,CAAC,KAAK,aAAA,KAAkB;AAC7B,IAAA,MAAM,SAAS,IAAI,MAAA,CAAO,MAAA,CAAO,0BAAA,CAAuC,CAAC,CAAA;AACzE,IAAA,OAAO,0BAAA,EAA8B,CAAE,GAAA,EAAe,MAAM,CAAA;AAAA,GAC9D;AACF;AAEO,MAAM,QAAA,GAAW,CACtB,GAAA,EACA,YAAA,KACM;AACN,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,EAAE,eAAe,WAAA,CAAA,EAAc;AAC5D,IAAA,OAAO,GAAA;AAAA;AAGT,EAAA,MAAM,MAAA,GACJ,YAAA,EAAc,SAAA,IAAa,mBAAA,EAAuB;AAEpD,EAAA,OAAO,MAAA,CAAO,KAAK,YAAY,CAAA;AACjC;;ACtQO,SAAS,UAAU,SAAA,EAAsB;AAC9C,EAAA,OAAO,UAAU,WAAA,CAAY,MAAA;AAC/B;;ACFO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAA;AANU,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;AC2BZ,SAAS,eAAA,CACP,SAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,cAAc,OAAA,CAAQ,IAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAM,SAAA,EAAW,WAAW,OAAO,CAAA,CACrD,eAAe,CACjB,CAAA;AAEA,EAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,IACtB,IAAI,mBAAA,CAAoB;AAAA,MACtB,SAAS,OAAA,CAAQ,IAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,KAAA;AAAA,MACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,UAAA,IAAc;AAAA,KACrB;AAAA,GACH;AACF;AAEA,SAAS,QAAA,GAAW;AAClB,EAAA,OAAO,OAAO,OAAO,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,CAAA,KAC3B,OAAO,OAAA,KAAY,WAAA,IACnB,OAAA,CAAQ,GAAA,EAAK,WAAA,IACb,OAAA,CAAQ,GAAA,EAAK,OAAA,GACT,CAAA,CAAE,QAAQ,MAAA,CAAO;AAAA,MACf,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,WAAA,CAAY,UAAA;AAAA,QACjC,QAAQ,GAAA,CAAI,OAAA;AAAA,QACZ;AAAA;AACF,KACD,IACD,CAAA,CAAE;AAAA,GACR;AACF;AAEA,MAAM,mBAAA,GAAsB,CAAC,SAAA,EAAsB,KAAA,KAAiB;AAClE,EAAA,IACE,iBAAiB,uBAAA,IAChB,KAAA,YAAiB,UAAA,IAAc,KAAA,CAAM,WAAW,GAAA,EACjD;AACA,IAAA,SAAA,CAAU,IAAA,EAAK;AACf,IAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA;AAGpC,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,KAAA,CAAM,OAAA;AAAS,MAAA,YAAA,GAAe,KAAA,CAAM,OAAA;AAAA;AACnC,MAAA,YAAA,GAAe,MAAM,QAAA,EAAS;AAAA,GACrC;AAAO,IAAA,YAAA,GAAe,KAAA;AAEtB,EAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,IACtB,IAAI,mBAAA,CAAoB;AAAA,MACtB,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,YAAA,CAAa,UAAA,CAAW,YAAA,EAAc,OAAO;AAAA,KACvD;AAAA,GACH;AACF,CAAA;AAEO,SAAS,eAAe,QAAA,EAAkC;AAC/D,EAAA,OAAQ,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA,CAAa,MAAM,kBAAkB,CAAA;AAC9E;AACO,SAAS,cAAc,QAAA,EAAkC;AAC9D,EAAA,OAAQ,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA,CAAa,KAAA;AAAA,IAClD;AAAA,GACF;AACF;AACO,SAAS,eAAe,QAAA,EAAkC;AAC/D,EAAA,OAAQ,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA,CAAa,KAAA;AAAA,IAClD;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,WACA,QAAA,EACA;AACA,EAAA,IAAI,CAAC,QAAA;AAAU,IAAA;AACf,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAa,aAAA,EAAc,GAAI,QAAA;AACnD,EAAA,YAAA,CAAa,UAAA,EAAY,SAAS,CAAA,CAAE,OAAA;AAAA,IAClC,eAAA,CAAgB,IAAA,CAAK,eAAA,EAAiB,SAAA,EAAW,OAAO;AAAA,GAC1D;AACA,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,CAAA,CAAE,OAAA;AAAA,IACjC,eAAA,CAAgB,IAAA,CAAK,eAAA,EAAiB,SAAA,EAAW,SAAS;AAAA,GAC5D;AACA,EAAA,YAAA,CAAa,aAAA,EAAe,SAAS,CAAA,CAAE,OAAA;AAAA,IACrC,eAAA,CAAgB,IAAA,CAAK,eAAA,EAAiB,SAAA,EAAW,OAAO;AAAA,GAC1D;AACF;AAEA,eAAe,cAAA,CAIb,SAAA,EACA,MAAA,EACA,YAAA,EACqD;AACrD,EAAA,IAAI;AACF,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,CAE1C,MAAO;AACL,MAAA,MAAM,iBAAiB,MAAM,uBAAA;AAAA,QAC3B,SAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA;AAAA,QACH,IAAA,EAAM,cAAA;AAAA,QACN,UACE,CAAC,CAAC,gBAAgB,UAAA,IAAc,CAAC,CAAC,cAAA,EAAgB,aAAA;AAAA,QACpD,WAAA,EAAa,CAAC,CAAC,cAAA,EAAgB;AAAA,OACjC;AAAA;AACF,WACO,CAAA,EAAY;AACnB,IAAA,mBAAA;AAAA,MACE,SAAA;AAAA,MACA,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,MAAM,CAAW;AAAA,KAChD;AACA,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,OAAO,IAAA;AACT;AAEO,MAAM,gCAAgC,KAAA,CAAM;AAAC;AAE7C,MAAM,uBAAA,GAA0B,OAIrC,SAAA,EACA,QAAA,EACA,YAAA,KACG;AACH,EAAA,IAAI,SAAA,GACF,MAAA;AACF,EAAA,IAAI,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC5B,IAAA,IAAI,OAAO,SAAS,IAAA,KAAS,QAAA;AAC3B,MAAA,SAAA,GAAY,IAAA,CAAK,KAAA;AAAA,QACf,QAAA,CAAS,KAAK,IAAA;AAAK,OACrB;AAAA,SAAA,IACO,OAAO,QAAA,CAAS,IAAA,KAAS,QAAA,IAAY,QAAA,CAAS,IAAA;AACrD,MAAA,SAAA,GAAY,QAAA,CAAS,IAAA;AAAA,GACzB,MAAA,IAAW,aAAA,CAAc,QAAQ,CAAA,EAAG;AAClC,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,QAAA,CAAuB,QAAA,CAAS,IAAA,EAAM,YAAY,CAAA;AAAA,aACvD,CAAA,EAAG;AACV,MAAA,mBAAA;AAAA,QACE,SAAA;AAAA,QACA,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,MAAM,CAAW;AAAA,OAChD;AAAA;AACF,GACF,MAAA,IAAW,cAAA,CAAe,QAAQ,CAAA,EAAG;AACnC,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM;AAAA,MACJ,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,SAAA;AACJ,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,IAAQ,UAAA,EAAY;AACpC,MAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA;AAGpC,IAAA,aAAA,CAAc,SAAA,EAAW,EAAE,UAAA,EAAY,aAAA,EAAe,aAAa,CAAA;AAEnE,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO,EAAE,GAAG,SAAA,EAAW,GAAG,IAAA,EAAM,GAAI,IAAA,EAAsB;AAAA;AAE5D,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAI;AAAA,KACN;AAAA;AAGF,EAAA,OAAO,IAAA;AACT;AAkDA,eAAsB,IAAA,CAKpB,SAAA,EACA,SAAA,EACA,YAAA,EAC0B;AAC1B,EAAA,IACE,UAAU,KAAA,CAAM,cAAA,KAAmB,eAAe,QAAA,IAClD,CAAC,cAAc,gBAAA,EACf;AACA,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA;AAGxE,EAAA,MAAM,QAAA,GACJ,YAAA,EAAc,iBAAA,KAAsB,WAAA,GAChC,WAAA,CAAY,SAAA;AAAA,IACV,YAAA,CAAa,QAAA;AAAA,IACb,YAAA,CAAa;AAAA,MAEf,YAAA,EAAc,QAAA;AAEpB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAM,QAAA,EAAS,EACpC,IAAA,CAIC,SAAA,EAAW,QAAA,EAAU,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,OAAA,EAAS,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,OAAA,EAAS,GAAG,SAAA,CAAU,WAAA,CAAY,OAAA,EAAQ,EAAG,CAAA,CAC5I,KAAA,CAAM,CAAC,CAAA,KAAe;AACrB,IAAA,mBAAA;AAAA,MACE,SAAA;AAAA,MACA,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,MAAM,CAAW;AAAA,KAChD;AAAA,GACD,CAAA;AAEH,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,MAAA,GAAS,cAAA,CAAyB,SAAA,EAAW,QAAA,EAAU,YAAY,CAAA;AACzE,IAAA,OAAO,MAAA;AAAA;AAET,EAAA,OAAO,IAAA;AACT;AA8CA,eAAsB,GAAA,CAKpB,SAAA,EACA,SAAA,EACA,YAAA,EAC0B;AAC1B,EAAA,IAAI,SAAA,CAAU,KAAA,CAAM,cAAA,KAAmB,cAAA,CAAe,QAAA,EAAU;AAC9D,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA;AAGxE,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAM,QAAA,EAAS,EACpC,GAAA,CAIC,SAAA,EAAW,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,OAAA,EAAS,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,OAAA,EAAS,GAAG,SAAA,CAAU,WAAA,CAAY,OAAA,EAAQ,EAAG,CAAA,CAClI,KAAA,CAAM,CAAC,CAAA,KAAe;AACrB,IAAA,mBAAA;AAAA,MACE,SAAA;AAAA,MACA,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,MAAM,CAAW;AAAA,KAChD;AAAA,GACD,CAAA;AACH,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAyB,SAAA,EAAW,QAAQ,CAAA;AACjE,IAAA,OAAO,MAAA;AAAA;AAET,EAAA,OAAO,IAAA;AACT;AA6BO,SAAS,WAAA,CAAY,WAAsB,KAAA,EAA0B;AAC1E,EAAA,IAAI,kBAAqD,EAAC;AAE1D,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM;AAAA,MACJ,OAAA;AAAA,MACA,WAAA,EAAAC,YAAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,qBAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,GAAG;AAAA,KACL,GAAI,KAAA;AACJ,IAAA,eAAA,GAAkB,EAAE,GAAG,IAAA,EAAK;AAAA;AAG9B,EAAA,MAAM,cAAc,WAAA,CAAY,SAAA;AAAA,IAC9B,eAAA;AAAA,IACA,OAAO,gBAAA,IAAoB;AAAA,MACzB,WAAA,EAAa,QAAA;AAAA,MACb,gBAAA,EAAkB;AAAA;AACpB,GACF;AAEA,EAAA,IAAI,aAAA,GAAgB,KAAA,EAAO,OAAA,IAAW,SAAA,CAAU,SAAS,CAAA,CAAE,gBAAA;AAC3D,EAAA,IAAI,cAAc,OAAA,CAAQ,GAAG,CAAA,KAAM,aAAA,CAAc,SAAS,CAAA,EAAG;AAC3D,IAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA;AAEjE,EAAA,IAAI,CAAC,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,EAAG;AAClC,IAAA,aAAA,GAAgB,IAAI,aAAa,CAAA,CAAA;AAAA;AAGnC,EAAA,MAAM,QAAQ,SAAA,CAAU,SAAS,CAAA,EAAG,cAAA,EAAgB,MAAM,eAAe,CAAA;AACzE,EAAA,MAAM,cAAA,GAAA,CAAkB,KAAA,IAAS,EAAC,EAAG,CAAC,CAAA;AAEtC,EAAA,IAAI,KAAA,GAAA,CACF,KAAA,EAAO,KAAA,GACH,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,SAAA,EAAY,cAAc,CAAA,CAAA,GAC/C,SAAA,CAAU,SAAS,CAAA,CAAE,cAAA,EACzB,MAAM,CAAC,CAAA;AACT,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,KAAA,GAAQ,EAAA;AAAA;AAGV,EAAA,IAAI,EAAE,OAAA,EAAQ,GAAI,SAAA,CAAU,SAAS,CAAA;AACrC,EAAA,IAAI,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,OAAA,IAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA;AAGhD,EAAA,IAAI,SAAA,GAAY,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,CAAA;AACvC,EAAA,IACG,KAAA,EAAO,WAAA,IAAe,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,YAAY,CAAA,IAC9D,WAAA,EAAa,QAAA,CAAS,YAAY,CAAA,EAClC;AACA,IAAA,SAAA,GAAY,EAAA;AAAA;AAGd,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,eAAA,EAAiB,IAAI,CAAA;AACzD,EAAA,aAAA,GAAgB,aAAA,CAAc,KAAA;AAAA,IAC5B,IAAI,MAAA,CAAO,CAAA,SAAA,EAAY,WAAW,CAAA,UAAA,CAAY;AAAA,MAC5C,CAAC,CAAA;AAEL,EAAA,OAAO,CAAA,EACL,WAAA,GAAc,GAAA,GAAM,EACtB,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,EAAI,SAAS,CAAA,EAC1C,CAAC,OAAO,qBAAA,GAAwB,aAAA,GAAgB,EAClD,CAAA,EAAG,KAAA,EAAO,WAAA,GAAc,CAAA,EAAG,KAAA,CAAM,WAAW,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,EAClD,WAAA,GAAc,CAAA,EAAG,WAAW,CAAA,CAAA,CAAA,GAAM,EACpC,GAAG,KAAK,CAAA,CAAA;AACV;;;;;;;;AC3dO,MAAM,YAAA,CAAiC;AAAA,EAAvC,WAAA,GAAA;AACL,IAAAF,eAAA,CAAA,IAAA,EAAU,WAAA,EAAsD;AAAA,MAC9D,IAAI,EAAC;AAAA,MACL,MAAM;AAAC,KACT,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAU,SAAA,EAAU,IAAA,CAAA;AAEpB,IAAAA,eAAA,CAAA,IAAA,EAAU,WAAA,EAAY,KAAA,CAAA;AAAA;AAAA,EACtB,KAAA,CAAM,SAAS,IAAA,EAAM;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA,CAA6B,OAAU,IAAA,EAAiB;AACtD,IAAA,IAAA,CAAK,SAAA,CAAU,GAAG,KAAK,CAAA,EAAG,QAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AAE5D,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,KAAK,CAAA,EAAG,QAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AAC9D,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,GAAI,EAAC;AAAA;AAChC;AAAA;AAAA;AAAA,EAKA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA;AACd,EAEA,GAAA,CAA4B,OAAU,EAAA,EAA+B;AACnE,IAAA,IAAA,CAAK,SAAA,CAAU,GAAG,KAAK,CAAA,GAAI,KAAK,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA,EAAG,MAAA;AAAA,MACnD,CAAC,MAAM,CAAA,KAAM;AAAA,KACf;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,KAAK,CAAA,GAAI,KAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,EAAG,MAAA;AAAA,MACvD,CAAC,MAAM,CAAA,KAAM;AAAA,KACf;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,EAAA,CAA2B,OAAU,EAAA,EAAuC;AAC1E,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA,GAAI,EAAC;AAC3D,IAAA,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AAEhC,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,SAAA,CAAU,GAAG,KAAK,CAAA,GAAI,KAAK,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA,CAAE,MAAA;AAAA,QAClD,CAAC,MAAM,CAAA,KAAM;AAAA,OACf;AAAA,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAA,CACE,OACA,EAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,GAAI,EAAC;AAC/D,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,CAAE,KAAK,EAAE,CAAA;AAElC,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,KAAK,CAAA,GAAI,KAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA;AAAA,QACtD,CAAC,MAAM,CAAA,KAAM;AAAA,OACf;AAAA,KACF;AAAA;AAEJ;;;;;;;;ACtFO,SAAS,SAAY,IAAA,EAA4C;AACtE,EAAA,OAAO,OAAO,IAAA,KAAS,UAAA;AACzB;AAmBO,MAAM,wBAA4C,YAAA,CAAqB;AAAA,EAG5E,YAAY,YAAA,EAAgC;AAC1C,IAAA,KAAA,EAAM;AAHR,IAAAA,eAAA,CAAA,IAAA,EAAU,SAAQ,EAAC,CAAA;AAKjB,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,YAAY,CAAA;AAAA;AAC7C,EAEA,IAAA,CAA6B,OAAU,IAAA,EAAuB;AAC5D,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AACxB,EAEA,EAAA,CAA2B,OAAU,EAAA,EAAuC;AAC1E,IAAA,IAAI,IAAA,CAAK,MAAM,KAAK,CAAA;AAAG,MAAA,EAAA,CAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAE3C,IAAA,OAAO,KAAA,CAAM,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA;AAAA;AAC3B,EAEA,IAAA,CACE,OACA,EAAA,EACc;AACd,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AACrB,MAAA,EAAA,CAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAKpB,MAAA,OAAO,MAAM;AAAA,OAAC;AAAA;AAGhB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,EAAE,CAAA;AAAA;AAC7B;AAAA;AAAA;AAAA,EAKA,SAAiC,KAAA,EAAqB;AACpD,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA;AACzB;AAAA;AAAA;AAAA,EAKA,QAAA,CACE,OACA,IAAA,EACM;AACN,IAAA,MAAM,UAAA,GAAa,SAAS,IAAI,CAAA,GAAI,KAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,GAAI,IAAA;AAEjE,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,UAAU,CAAA;AAAA;AAE/B;;;;;;;;ACxEA,MAAM,UAAA,GAAa,OAAO,YAAY,CAAA;AAwB/B,MAAM,wBAEH,eAAA,CAAwB;AAAA,EAF3B,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAGL,IAAAA,eAAA,CAAA,IAAA,EAAU,oBAAmB,EAAC,CAAA;AAE9B,IAAAA,eAAA,CAAA,IAAA,EAAU,eAAA,EAAgB,GAAA,CAAA;AAkC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAA,CAAA,IAAA,EAAU,gBAAe,EAAC,CAAA;AAC1B,IAAAA,eAAA,CAAA,IAAA,EAAU,yBAAwB,EAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAxBnC,QAAA,CACE,KAAA,EACA,IAAA,EACA,aAAA,EACA;AACA,IAAA,YAAA,CAAa,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAC,CAAA;AACzC,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA,GAAI,UAAA,CAAW,MAAM;AAC9C,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,KACvB,EAAG,aAAA,EAAe,MAAA,IAAU,IAAA,CAAK,aAAa,CAAA;AAAA;AAChD,EAgBA,QAAA,CACE,KAAA,EACA,IAAA,EACA,aAAA,EACA;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA,IAAK,eAAe,WAAA,EAAa;AACpE,MAAA,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA,GAAI,IAAA;AACpC,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA,GAAI,KAAA;AAAA,OACtC,EAAG,aAAA,EAAe,MAAA,IAAU,IAAA,CAAK,aAAa,CAAA;AAC9C,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,KACvB,MAAA,IAAW,CAAC,aAAA,EAAe,WAAA,EAAa;AACtC,MAAA,IACE,IAAA,CAAK,aAAa,KAAK,CAAA,KAAM,cAC7B,EAAE,KAAA,IAAS,KAAK,YAAA,CAAA,EAChB;AACA,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,KAAK,CAAc,CAAA;AACtD,UAAA,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,GAAI,UAAA;AAAA,SAC7B,EAAG,aAAA,EAAe,MAAA,IAAU,IAAA,CAAK,aAAa,CAAA;AAAA;AAEhD,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,GAAI,IAAA;AAAA;AAC7B;AACF;AAAA;AAAA;AAAA,EAKA,iBAAA,CACE,KAAA,EACA,IAAA,EACA,aAAA,EACM;AACN,IAAA,MAAM,UAAA,GAAa,SAAS,IAAI,CAAA,GAAI,KAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,GAAI,IAAA;AAEjE,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,UAAA,EAAY,aAAa,CAAA;AAAA;AAChD;AAAA;AAAA;AAAA,EAKA,iBAAA,CACE,KAAA,EACA,IAAA,EACA,aAAA,EACM;AACN,IAAA,MAAM,UAAA,GAAa,SAAS,IAAI,CAAA,GAAI,KAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,GAAI,IAAA;AAEjE,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,UAAA,EAAY,aAAa,CAAA;AAAA;AAElD;;ACxHO,SAAS,QAAA,CACd,SAAA,EACA,KAAA,EACA,SAAA,EAIA;AACA,EAAA,MAAM,QAAA,GAAY,SAAA,CAAU,SAAS,CAAA,CAAU,OAAO,KAAK,CAAA;AAK3D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,oBAAoB,KAAK,CAAA,CAAA;AAAA,MAC/B,OAAA,EAAS,oBAAoB,KAAK,CAAA;AAAA,KACpC;AAAA;AAGF,EAAA,MAAM,WAAA,GAAc,EAAE,GAAG,QAAA,EAAS;AAElC,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,IAAI,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACvD,MAAA,WAAA,CAAY,OAAO,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA,CAAA,EAAI,GAAG,KAAK,KAAK,CAAA;AAAA,KACjE,CAAA;AAAA;AAEH,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC1D,MAAA,WAAA,CAAY,UAAU,WAAA,CAAY,OAAA,CAAQ,WAAW,CAAA,CAAA,EAAI,GAAG,KAAK,KAAK,CAAA;AAAA,KACvE,CAAA;AAAA;AAGH,EAAA,OAAO,WAAA;AACT;AAEO,MAAM,MAAA,GAAS;AAAA,EACpB,yBAAyB,MAAM,oBAAA;AAAA,EAC/B,wBAAwB,MAAM,0CAAA;AAAA,EAC9B,mBAAmB,MAAM,wBAAA;AAAA,EACzB,oBAAoB,CAAC,SAAA,KACnB,QAAA,CAAS,SAAA,EAAW,aAAa,CAAA,CAAE,IAAA;AAAA,EACrC,sBAAA,EAAwB,CAAC,SAAA,EAAsB,IAAA,KAC7C,SAAS,SAAA,EAAW,YAAA,EAAc,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,EAAK,EAAG,CAAA,CAAE,IAAA;AAAA,EAC9D,gBAAgB,MACd,kEAAA;AAAA,EACF,cAAc,CAAC,SAAA,EAAsB,SAAA,KAClC,MAAA,CAAe,cACZ,oEAAA,GACA,QAAA,CAAS,SAAA,EAAW,iBAAA,EAAmB,EAAE,IAAA,EAAM,EAAE,MAAM,SAAA,EAAU,EAAG,CAAA,CACjE;AACX,CAAA;;ACrDO,MAAM,YAAA,GAAe,CAAC,GAAA,KAAgC;AAC3D,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,wBAAA,CAAyB,KAAK,GAAG,CAAA;AAAG,MAAA,OAAO,IAAA;AAC/C,IAAA,IAAI,8BAAA,CAA+B,KAAK,GAAG,CAAA;AAAG,MAAA,OAAO,KAAA;AAAA;AAEvD,EAAA,OAAO,KAAA;AACT,CAAA;;ACHA,MAAM,YAAA,GAIuC;AAAA,EAC3C,CAAC,GAAA,EAAK,KAAA,EAAO,IAAA,KAAS;AACpB,IAAA,IAAI,SAAA,CAAU,QAAQ,GAAG,CAAA,KAAM,MAAM,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA,EAAI;AACjE,MAAA,OAAO,IAAA,EAAK;AAAA,KACd,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,MAAA,OAAO,IAAA,EAAK;AAAA,KACd,MAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,GAAG,MAAM,EAAA,EAAI;AACxC,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,YAAA,CAAa,KAAe,CAAA,EAAE;AAAA,KACrD,MAAA,IAAW,QAAA,CAAS,OAAA,CAAQ,GAAG,MAAM,EAAA,EAAI;AACvC,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,SAAU,KAAA,IAAoB,EAAA,EAAI,EAAE,CAAA,EAAE;AAAA;AAE7D,IAAA,IAAA,EAAK;AAAA;AAET,CAAA;AAEO,SAASG,gBACd,GAAA,EACG;AACH,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA;AAAA;AAGT,EAAA,MAAM,MAAM,IAAI,QAAA,CAAS,CAAA,aAAA,EAAgB,GAAG,gBAAgB,CAAA,EAAE;AAE9D,EAAA,MAAM,MAAS,EAAC;AAEhB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,MAAA,IAAI,IAAA,GAAO,KAAA;AACX,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,GAAA,EAAK,KAAA,EAAO,MAAM;AAC5B,QAAA,IAAA,GAAO,IAAA;AAAA,OACR,CAAA;AACD,MAAA,IAAI,CAAC,QAAQ,CAAA,EAAG;AACd,QAAC,GAAA,CAAY,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA,CAAE,KAAA;AAAA,OAC1B,MAAO;AACL,QAAC,GAAA,CAAY,GAAG,CAAA,GAAI,KAAA;AAAA;AACtB;AACF;AAGF,EAAA,OAAO,GAAA;AACT;;;;;;;;ACjDO,MAAM,cAAA,CAAkD;AAAA,EAI7D,YAAY,YAAA,EAAsB;AAHlC,IAAAH,eAAA,CAAA,IAAA,EAAA,YAAA,EAAoB,EAAC,CAAA;AACrB,IAAAA,eAAA,CAAA,IAAA,EAAQ,YAAA,EAA0B,IAAA,CAAA;AAGhC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,UAAA,GAAa,YAAA;AAAA;AAEpB,IAAA,cAAA,CAAe,MAAM,EAAE,UAAA,EAAY,UAAA,EAAY,WAAA,EAAa,QAAQ,CAAA;AAAA;AACtE,EAEA,aAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA;AACd,EAEA,YAAmC,QAAA,EAAuB;AACxD,IAAA,OAAO,IAAA,CAAK,WAAW,QAAQ,CAAA;AAAA;AACjC,EACA,WAAA,CACE,UACA,SAAA,EACA;AACA,IAAA,MAAM,KAAA,GACJ,qBAAqB,QAAA,GACjB,SAAA,CAAU,KAAK,UAAA,CAAW,QAAQ,CAAC,CAAA,GACnC,SAAA;AAEN,IAAA,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,GAAI,KAAA;AAE5B,IAAA,IAAI,aAAa,kBAAA,EAAoB;AACnC,MAAA,IAAA,CAAK,YAAY,0BAAA,EAA2B;AAAA;AAC9C;AACF,EAEA,cAAc,IAAA,EAAY;AACxB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,OAAO,IAAA;AAAA;AAEX;;ACxCO,SAAS,YAAY,SAAA,EAAsB;AAChD,EAAA,OAAO,UAAU,WAAA,CAAY,QAAA;AAC/B;;ACAO,SAAS,qBAAqB,SAAA,EAAsB;AACzD,EAAA,MAAM,QAAA,GAAY,SAAA,CAAU,SAAS,CAAA,CAAE,cAAA,EAAwB,QAAA;AAK/D,EAAA,IAAI,QAAA;AACF,IAAA,OAAO,CAAA,EAAG,QAAA,CACP,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,KAAA,CAAM,MAAA,GAAS,CAAA,CAAE,EAAA,GAAK,EAAG,CAAA,CACvC,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA,KAAM,QAAA,CAAS,CAAA,CACtC,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,SAAS,CAAA,CAAE,gBAAA,EAAkB,aAAa,CAAC,CAAA,CAAA;AAC3E;;ACXO,MAAM,OAAA,GAAU;AAAA,EACrB,KAAA,EAAO,+BAGT,CAAA;;ACRO,MAAM,UAAA,GAAa;AAAA,EACxB,kBAAA,EAAoB,CAetB,CAAA;;ACbA,MAAMI,WAAA,GAAY;AAAA,EAChB,GAAG,UAAA;AAAA,EACH,GAAG;AACL,CAAA;;ACIO,MAAM,mBAAA,GAAsB,OACjC,SAAA,EACA,QAAA,KACG;AACH,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA;AACxC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAE,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,CAAC,SAAA,EAAW,EAAE,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,WAAA,CAAY,EAAA,EAAI,SAAgB,CAAA;AAE3D,IAAA,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvC,MAAA,QAAA,EACI,0BAA0B,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA,EACvD,aAAA,CAAc,EAAE,aAAA,EAAe,EAAE,OAAO,CAAA,CAAE,KAAA,IAAS,CAAA;AAAA,KACxD,CAAA;AAGD,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AACzD,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAAC,KAAG,KAAM;AAC/B,MAAC,QAAA,EAAU,YAAA,CAAaA,GAAE,CAAA,EAAY,OAAA,EAAQ;AAAA,KAC/C,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,QACtB,IAAI,mBAAA,CAAoB;AAAA,UACtB,OAAA,EAAS,gBAAgB,MAAM,CAAA,UAAA;AAAA,SAChC;AAAA,OACH;AAEA,MAAA;AAAA;AAIF,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,CAAM,CAAC,EAAE,KAAK,CAAA;AAC9C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA,EAAG;AAE7C,MAAA,MAAM,WAAW,QAAA,EAAU,YAAA,CAAa,UAAA,CAAW,CAAC,EAAE,CAAC,CAAA;AACvD,MAAA,IAAI,QAAA,EAAU;AAEZ,QAAA,IAAI,UAAA,CAAW,CAAC,CAAA,CAAE,cAAA,KAAmB,MAAA,EAAW;AAC9C,UAAA,MAAM,mBAAA,GAAsB,YAAA;AAAA,YAC1B,UAAA,CAAW,CAAC,CAAA,CAAE;AAAA,WAChB;AACA,UAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,mBAAA,CAAoB,CAAC,GAAG,IAAI,CAAA;AACvD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IACE,CAAC,UAAA,EAAY,OAAA,EAAS,QAAQ,CAAA,CAAE,QAAA;AAAA,cAC9B,SAAS,UAAA,CAAW;AAAA,aACtB,EACA;AACA,cAAC,QAAA,CAAoB,WAAA;AAAA,gBACnB,eAAA;AAAA,gBACA,KAAA,CAAM,GAAA,CAAI,CAAC,OAAA,KAAY;AACrB,kBAAA,MAAM,IAAI,OAAA,CAAQ,CAAA;AAClB,kBAAA,MAAM,IAAI,OAAA,CAAQ,IAAA;AAClB,kBAAA,MAAM,QAAQ,OAAO,CAAA,KAAM,SAAA,GAAY,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AACnD,kBAAA,MAAM,QAAQ,OAAO,CAAA,KAAM,SAAA,GAAY,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AACnD,kBAAA,OAAO;AAAA,oBACL,KAAA;AAAA,oBACA;AAAA,mBACF;AAAA,iBACD;AAAA,eACH;AAAA;AACF;AACF;AAEF,QAAA,IACE,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,IAC/C,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,EACd;AACA,UAAA,MAAM,gBACJ,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAAO,cAAe,EAAC;AAExC,UAAA,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1C,YAAA,IAAI,KAAA,GAAQ,cAAc,GAAgC,CAAA;AAE1D,YAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,cAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,cAAA,IAAI,UAAA,KAAe,GAAA,IAAO,UAAA,KAAe,MAAA,EAAQ;AAC/C,gBAAA,KAAA,GAAQ,IAAA;AAAA,eACV,MAAA,IAAW,UAAA,KAAe,GAAA,IAAO,UAAA,KAAe,OAAA,EAAS;AACvD,gBAAA,KAAA,GAAQ,KAAA;AAAA;AACV;AAGF,YAAA,QAAA,CAAS,WAAA,CAAY,KAAK,KAAK,CAAA;AAAA,WAChC,CAAA;AACD,UAAA,MAAM,cAAA,GAAiB,YAAA;AAAA,YACrB,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAAO;AAAA,WACxB;AACA,UAAA,QAAA,CAAS,WAAA,CAAY,iBAAiB,cAAc,CAAA;AAAA;AAEtD,QAAA,IACE,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,IAC/C,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,EACd;AACA,UAAA,MAAM,SAAA,GAAY,QAAA;AAElB,UAAA,IAAI,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAAO,QAAA,EAAU;AAClC,YAAA,SAAA,CAAU,kBAAA;AAAA,cACR,UAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAAO;AAAA,aACxB;AAAA;AACF;AACF;AAGF,MAAA,IAAI,UAAA,CAAW,CAAC,CAAA,CAAE,CAAA,KAAM,MAAA,EAAW;AACjC,QAAA,MAAM,EAAE,CAAA,EAAE,GAAI,UAAA,CAAW,CAAC,CAAA;AAE1B,QAAA,IAAI,KAAA,GAAa,MAAA;AACjB,QAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAa,CAAA,CAAU,MAAM,GAAA,EAAK;AAEjD,UAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,YAAA,KAAA,GAAQ,CAAA;AAAA,WACV,MAAO;AAIL,YAAA,MAAM,WAAA,GAAc,YAAA,CAAa,CAAA,EAAG,SAAS,CAAA;AAC7C,YAAA,KAAA,GAAQ,WAAA,CAAY,MAAA,CAAO,CAAC,OAAA,EAAS,OAAA,KAAY;AAC/C,cAAA,OAAO,UAAU,OAAA,CAAQ,CAAA;AAAA,eACxB,EAAE,CAAA;AAAA;AACP;AAOF,QAAA,IAAK,QAAA,CAAiB,SAAA,IAAa,KAAA,KAAU,MAAA,EAAW;AACtD,UAAC,QAAA,CAAiB,SAAS,KAAA,EAAO;AAAA,YAChC,KAAA,EAAO,IAAA;AAAA,YACP,WAAA,EAAa;AAAA,WACd,CAAA;AAAA;AACH;AAGF,MAAA,IAAI,UAAA,CAAW,CAAC,CAAA,CAAE,CAAA,KAAM,MAAA,EAAW;AACjC,QAAA,MAAM,SAAA,GAAY,YAAA,CAAa,UAAA,CAAW,CAAC,EAAE,CAAC,CAAA;AAC9C,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,UAAA,IAAI,SAAA,CAAU,CAAC,CAAA,EAAG,CAAA,EAAG;AACnB,YAAA,MAAM,IAAA,GAAO,YAAA,CAAa,SAAA,CAAU,CAAC,GAAG,CAAC,CAAA;AACzC,YAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,cAAA,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAG;AACd,gBAAA,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,EAAG;AACd,kBAAA,IAAI,KAAK,CAAC,CAAA,EAAG,CAAA,CAAE,WAAA,OAAkB,GAAA,EAAK;AACpC,oBAAA,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,KAAK,CAAA;AAAA,6BAC7B,IAAA,CAAK,CAAC,GAAG,CAAA,CAAE,WAAA,OAAkB,GAAA,EAAK;AAC3C,oBAAA,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,mBACvC,MAAO;AACL,oBAAA,QAAA,CAAS,WAAA,CAAY,KAAK,CAAC,CAAA,EAAG,GAAG,IAAA,CAAK,CAAC,GAAG,CAAC,CAAA;AAAA;AAC7C;AACF;AACF;AACF;AACF;AACF;AACF;AAIF,IAAA,IACE,IAAA,CAAK,CAAA,KAAM,GAAA,IACX,MAAA,CAAO,QAAA,CAAS,WAAWD,WAAA,CAAU,oBAAoB,CAAC,CAAA,KAAM,MAAA,EAChE;AACA,MAAA,QAAA,CAAS,WAAA,CAAYA,WAAA,CAAU,oBAAA,EAAsB,IAAI,CAAA;AAAA,KAC3D,MAAA,IACE,IAAA,CAAK,CAAA,KAAM,GAAA,IACX,MAAA,CAAO,QAAA,CAAS,WAAA,CAAYA,WAAA,CAAU,oBAAoB,CAAC,CAAA,KAAM,MAAA,EACjE;AACA,MAAA,QAAA,CAAS,WAAA,CAAYA,WAAA,CAAU,oBAAA,EAAsB,KAAK,CAAA;AAAA;AAI5D,IAAA,IACE,IAAA,CAAK,CAAA,KAAM,GAAA,IACX,MAAA,CAAO,QAAA,CAAS,YAAYA,WAAA,CAAU,oBAAoB,CAAC,CAAA,KAAM,MAAA,EACjE;AACA,MAAA,QAAA,CAAS,SAAA,EAAU;AAAA,KACrB,MAAA,IACE,IAAA,CAAK,CAAA,KAAM,GAAA,IACX,MAAA,CAAO,QAAA,CAAS,WAAA,CAAYA,WAAA,CAAU,oBAAoB,CAAC,CAAA,KAAM,MAAA,EACjE;AACA,MAAA,QAAA,CAAS,QAAA,EAAS;AAAA;AACpB;AAGF,EAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AACxB,IAAA,SAAA,CAAU,UAAA,EAAW,EAAG,WAAA,CAAY,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA;AAGzD,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,aAAA,CAAc,SAAA,EAAW,SAAS,IAAI,CAAA;AAAA;AAE1C,CAAA;;AC7LA,IAAI,OAAA,GAAkC,IAAA;AAE/B,MAAM,mBAAA,GAA4C,OACvD,SAAA,EACA,GAAA,KACG;AACH,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAA,GAAA,CAAW,MAAM,+DAA0B,EAAG,cAAA;AAAA;AAGhD,EAAA,OAAO,OAAA,CAAQ,WAAW,GAAG,CAAA;AAC/B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA,IAAAE,YAAA;AAgCA,IAAI,EAAA,GAA2B,IAAA;AAE/B,eAAsB,iBAAiB,SAAA,EAAsB;AAC3D,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,MAAM,+DAA2C,CAAE,IAAA;AAAA,MACjD,CAAC,EAAE,aAAA,OAAqB,EAAA,GAAK,IAAI,cAAc,SAAS;AAAA,KAC1D;AAAA;AAEF,EAAA,OAAO,EAAA;AACT;AAEO,MAAe,cASZ,cAAA,CAA2B;AAAA,EAYnC,WAAA,CAAY,EAAE,UAAA,EAAY,GAAG,YAAW,EAAoB;AAC1D,IAAA,KAAA,EAAM;AAZR,IAAAN,eAAA,CAAA,IAAA,EAAU,QAAa,EAAC,CAAA;AAExB,IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAEI;AAAA,MACF,YAAY,EAAE,KAAA,EAAO,OAAO,YAAA,EAAc,EAAA,EAAI,eAAe,KAAA;AAAM,KACrE,CAAA;AAyQA,IAAAO,cAAA,CAAA,IAAA,EAAAD,YAAA,EAAa,KAAA,CAAA;AAlQX,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAElB,IAAA,cAAA,CAAe,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,YAAY,CAAA;AAAA;AACpE,EAEA,MAAgB,qBACd,SAAA,EACoB;AACpB,IAAA,MAAM,iBAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AAC7B,QAAA,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,OACxC,MAAA,IAAW,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AACjE,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA;AAC/B,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,cAAA,CAAe,IAAA;AAAA,YAAA,CACZ,MAAM,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EACxC,OAAA;AAAA,cACC,IAAA,CAAK,KAAK,UAAA,CAAW,QAAA;AAAA,cACrB,IAAA,CAAK,KAAK,UAAA,CAAW;AAAA,aACvB,CACC,SAAS,SAAS;AAAA,WACvB;AAAA;AACF;AACF;AAEF,IAAA,OAAO,cAAA;AAAA;AACT,EAEU,oBAAA,CACR,OACA,gBAAA,EACkB;AAClB,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,kBAAA,EAAoB;AACrD,MAAA,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,WAAA;AAAA,KACvC,MAAO;AACL,MAAA,GAAA,GAAM,IAAA,CAAK,YAAY,KAAA,IAAS,CAAA;AAAA;AAElC,IAAA,OAAO;AAAA,MACL,SAAS,OAAA,CAAQ,KAAA;AAAA,MACjB,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA,EAAS;AAAA,MAC1C,MAAA,EAAQ,gBAAA;AAAA,MACR,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,SAAA;AAAA,MAChC,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,MAC5B,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,MACvB,KAAA,EAAO,GAAA;AAAA,MACP,KAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,qBAAA,EAAuB,IAAA;AAAA,MACvB,GAAG;AAAA,KACL;AAAA;AACF,EAEA,MAAgB,gBAAgB,SAAA,EAAqC;AACnE,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,UAAA,CAAW,YAAA,IAAgB,EAAC,EAAG,MAAA;AAAA,MAClD,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY;AAAA,KACvB;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AAEb,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI;AACF,UAAA,MAAM,EAAA,GAAM,MAAA,CAAe,KAAA,CAAM,OAAO,CAAA;AAKxC,UAAA,IAAI,OAAO,MAAA,EAAW;AACpB,YAAA,IAAI,mBAAA,CAAoB;AAAA,cACtB,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,WAAW,gBAAA,EAAkB;AAAA,gBACvD,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA;AAAU,eACzB,CAAA,CAAE,IAAA;AAAA,cACH,IAAA,EAAM;AAAA,aACP,CAAA;AACD,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,gBAAA,EAAkB;AAAA,gBAC9C,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA;AAAU,eACzB,CAAA,CAAE;AAAA,aACL;AAAA;AAGF,UAAA,MAAM,SAAU,MAAM,mBAAA;AAAA,YACpB,KAAK,IAAA,CAAK,SAAA;AAAA,YACV;AAAA,WACF;AAEA,UAAA,IAAK,OAAe,QAAA,EAAU;AAC5B,YAAC,MAAA,CAAe,QAAA,GAAW,CAAC,KAAA,KACzB,MAAA,CAAe,UAAU,KAAA,EAAO,EAAE,UAAA,EAAY,KAAA,EAAO,CAAA;AAAA;AAG1D,UAAA,MAAA,GAAS,MAAM,EAAA;AAAA,YACb,MAAA;AAAA,YACA,GAAI,MAAM,IAAA,CAAK,oBAAA,CAAqB,MAAM,SAAS;AAAA,WACrD;AAEA,UAAA,IAAI,WAAW,KAAA,EAAO;AACpB,YAAA;AAAA;AACF,iBACO,CAAA,EAAG;AACV,UAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACf,UAAA,IAAA,CAAK,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA;AAAA,YAChC,IAAI,mBAAA,CAAoB;AAAA,cACtB,OAAA,EACE,OAAO,YAAA,CAAa,IAAA,CAAK,KAAK,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA,GACtD,IAAA,GACA,CAAA;AAAA,cACF,IAAA,EAAM;AAAA,aACP;AAAA,WACH;AACA,UAAA,OAAO,KAAA;AAAA;AACT;AACF;AAEF,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,MAAgB,mBAAA,CACd,KAAA,EACA,MAAA,EACkB;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA;AAAA,QACrB,KAAK,IAAA,CAAK,SAAA;AAAA,QACV,MAAM,WAAA;AAAA,UACJ,KAAK,IAAA,CAAK,SAAA;AAAA,UACV,IAAA,CAAK,oBAAA,CAAqB,KAAA,CAAM,KAAA,EAAO;AAAA,YACrC,MAAA,EAAQ;AAAA,WACT;AAAA,SACH;AAAA,QACA;AAAA,UACE,QAAA,EAAU,MAAA;AAAA,UACV,iBAAA,EAAmB,WAAA;AAAA,UACnB,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA;AAAS;AAC5C,OACF;AAEA,MAAA,IAAI,QAAA,EAAU,MAAM,OAAA,EAAS;AAC3B,QAAA,MAAM,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,SAAS,IAAI,CAAA;AAC5D,QAAA,OAAO,IAAA;AAAA;AACT,aACO,aAAA,EAAe;AACtB,MAAA,OAAA,CAAQ,MAAM,aAAa,CAAA;AAC3B,MAAA,IAAA,CAAK,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA;AAAA,QAChC,IAAI,mBAAA,CAAoB;AAAA,UACtB,OAAA,EAAS,OAAO,aAAa;AAAA,SAC9B;AAAA,OACH;AAAA;AAEF,IAAA,OAAO,KAAA;AAAA;AACT,EAEA,MAAgB,qBAAA,CACd,KAAA,EACA,MAAA,EACkB;AAClB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,oBAAA,CAAqB,KAAA,CAAM,OAAO,MAAM,CAAA;AACvD,IAAA,IACG,UAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,CAAe,UAC5C,oBAAA,EACH;AACA,MAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA;AAAA,QACtC,MAAM,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,UACrC,GAAG,CAAA;AAAA,UACH,UAAA,EAAY,oBAAA,CAAqB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,UACpD,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA;AAAS,SAC3C;AAAA,OACH;AAAA,KACF,MAAO;AACL,MAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA;AAAA,QACtC,MAAM,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,UACrC,GAAG,CAAA;AAAA,UACH,UAAA,EAAY,oBAAA,CAAqB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,UACpD,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA;AAAS,SAC3C;AAAA,OACH;AAAA;AAGF,IAAA,OAAO,KAAA;AAAA;AACT,EACA,MAAgB,eAAA,CACd,SAAA,EACA,MAAA,EACkB;AAClB,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,IAAA;AAAA,MACxC,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY;AAAA,KACvB;AACA,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,UAAA;AACnC,IAAA,IAAI,CAAC,SAAS,UAAA,EAAY;AACxB,MAAA,KAAA,GAAQ;AAAA,QACN,OAAO,UAAA,CAAW,kBAAA;AAAA,QAClB,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAAA;AAGF,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,MAAM,CAAA;AAAA,OAC/C,MAAO;AACL,QAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAAO,MAAM,CAAA;AAAA;AACjD;AAGF,IAAA,OAAO,IAAA;AAAA;AACT,EACA,MAAM,SAAA,CACJ,SAAA,EACA,MAAA,EACkB;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK;AAExC,IAAA,IAAI;AACF,MAAA,IAAI,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,mBAAA,EAAoB;AAAA,iBACvC,CAAA,EAAG;AACV,UAAA,OAAA,CAAQ,IAAA,CAAK,2CAA2C,CAAC,CAAA;AAAA;AAG3D,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,MAAM,CAAA;AAAA;AAGvD,MAAA,OAAO,MAAA;AAAA,KACT,SAAE;AACA,MAAA,MAAA,EAAO;AAAA;AACT;AACF,EAEA,OAAA,GAAU;AACR,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA;AACd,EAEU,gBAAgB,SAAA,EAAmB;AAC3C,IAAA,OACE,KAAK,UAAA,CAAW,YAAA,EAAc,KAAK,CAAC,CAAA,KAAM,EAAE,OAAA,KAAY,SAAS,CAAA,IACjE,IAAA,CAAK,WAAW,YAAA,EAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,SAAS,CAAA;AAAA;AAErE,EAEU,0BAA0B,SAAA,EAAmB;AACrD,IAAA,OAAO,IAAA,CAAK,WAAW,YAAA,EAAc,IAAA;AAAA,MACnC,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,aAAa,CAAA,CAAE;AAAA,KACtC;AAAA;AACF,EAEU,4BAA4B,SAAA,EAAmB;AACvD,IAAA,OAAO,IAAA,CAAK,WAAW,YAAA,EAAc,IAAA;AAAA,MACnC,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,SAAA,IAAa,CAAC,CAAA,CAAE;AAAA,KACvC;AAAA;AACF,EAGA,MAAM,KAAK,IAAA,EAAY;AACrB,IAAA,IAAIE,cAAA,CAAA,IAAA,EAAKF,YAAA,CAAA;AAAY,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAC9D,IAAAG,cAAA,CAAA,IAAA,EAAKH,YAAA,EAAa,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA;AACd,EACA,MAAa,QAAA,GAAqC;AAChD,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,cAAA,GAAiB;AACf,IAAA,IAAA,CAAK,SAAQ,CAAE,mBAAA;AAAA,MACb,KAAK,UAAA,CAAW,EAAA;AAAA,MAChB,KAAK,UAAA,CAAW;AAAA,KAClB;AAAA;AAEJ;AAhBEA,YAAA,GAAA,IAAA,OAAA,EAAA;;AChUK,MAAM,eAAe,KAAA,CAA6B;AAAA,EACvD,UAAU,SAAA,EAA2C;AACnD,IAAA,OAAO,KAAA,CAAM,UAAU,SAAS,CAAA;AAAA;AAEpC;;;;;;;;ACAO,MAAM,QAAA,GAAN,MAAM,QAAA,SAAgB,KAAA,CAQ3B;AAAA,EAaA,YAAY,UAAA,EAAoC;AAC9C,IAAA,KAAA,CAAM,UAAoC,CAAA;AAR5C,IAAAN,eAAA,CAAA,IAAA,EAAQ,IAAA,EAAa,EAAA,CAAA;AASnB,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAA;AACnB,IAAA,IAAA,CAAK,WAAW,IAAA,GAAO,aAAA;AAEvB,IAAA,QAAA,CAAQ,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,MAAM;AAClC,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,KACrB,CAAA;AAAA;AACH,EAnBA,OAAc,MAAA,GAAS;AACrB,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AAAA;AACnC,EAKA,OAAc,gBAAA,GAAmB;AAC/B,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA;AACd,EAYA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,IAAA,CAAK,EAAA,GAAK,KAAK,YAAA,EAAa;AAC5B,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA;AACtB,EAEQ,YAAA,GAAe;AACrB,IAAA,OAAO,GAAG,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,WAAW,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,CAAA,CAAA;AAAA;AAC7G,EACO,MAAA,GAAS;AACd,IAAA,OAAO,KAAK,KAAA,CAAM,GAAA;AAAA;AACpB,EAEO,cAAA,GAAiB;AACtB,IAAA,IAAA,CAAK,MAAM,GAAA,GAAM,CAAA,EAAG,UAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,OAAO,CAAA,wBAAA,EAA2B,IAAA,CAAK,OAAO,CAAA,GAAA,EAAA,qBAAU,IAAA,EAAK,EAAE,SAAS,CAAA,CAAA;AAAA;AAC7H,EAEO,gBAAA,GAAmB;AACxB,IAAA,OAAO,CAAA,EAAG,UAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,OAAO,CAAA,0BAAA,EAA6B,IAAA,CAAK,KAAA,EAAO,uBAAM,IAAI,IAAA,EAAK,EAAE,OAAA,EAAS,CAAA,UAAA,EAAa,UAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,SAAS,CAAA,CAAA;AAAA;AAC1K,EAEO,KAAA,GAAQ;AACb,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA;AACd,EAEO,SAAS,KAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,KAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,EAAA;AACrC,IAAA,QAAA,CAAQ,gBAAgB,EAAE,CAAC,IAAA,CAAK,EAAE,GAAG,KAAA,EAAM;AAAA;AAC7C,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IAAA,CAAK,EAAA,GAAK,KAAK,YAAA,EAAa;AAC5B,IAAA,IAAI,IAAA,CAAK,MAAM,KAAA,KAAU,EAAA,IAAM,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAA,EAAU;AAClE,MAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,kBAAA;AAAA,QAC1C,KAAK,IAAA,CAAK;AAAA,OACZ;AACA,MAAA,OAAO,KAAA;AAAA,KACT,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,EAAA;AACrC,MAAA,OAAO,IAAA;AAAA;AACT;AAEJ,CAAA;AAlEEA,eAAA,CATW,QAAA,EASI,SAAA,EAAU,IAAIU,cAAA,EAAgC,CAAA;AAO7DV,eAAA,CAhBW,QAAA,EAgBI,iBAAwC,EAAC,CAAA;AAhBnD,IAAM,OAAA,GAAN;;ACJA,MAAM,gCAAgC,KAAA,CAAM;AAAC;AAEpD,SAAS,QAAQ,EAAA,EAAY;AAC3B,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,GACvB,CAAA;AACH;AAQA,eAAsB,UAAA,CACpB,EAAA,EACA,YAAA,EACA,aAAA,GAAoC;AAAA,EAClC,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA,EACqB;AACrB,EAAA,OAAO,IAAI,OAAA,CAAoB,CAAC,OAAA,EAAS,MAAA,KAAW;AAClD,IAAA,CAAC,YAAY;AACX,MAAA,MAAM,QAAQ,YAAY;AACxB,QAAA,MAAM,GAAA,GAAM,MAAM,EAAA,EAAG;AACrB,QAAA,OAAO,YAAA,CAAa,GAAG,CAAA,GAAI,GAAA,GAAM,IAAA;AAAA,OACnC;AAEA,MAAA,WAAA,MAAiB,CAAA,IAAK,IAAI,KAAA,CAAM,aAAA,CAAc,OAAO,CAAA,EAAG;AACtD,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,EAAM;AACxB,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,OAAA,CAAQ,GAAG,CAAA;AACX,UAAA;AAAA;AAEF,QAAA,MAAM,OAAA,CAAQ,cAAc,OAAO,CAAA;AAAA;AAGrC,MAAA,MAAA,CAAO,IAAI,yBAAyB,CAAA;AAAA,KACtC,GAAG;AAAA,GACJ,CAAA;AACH;;AC5CO,MAAM,YAAA,GAAgC,CAAC,CAAA,EAAQ,CAAA,KAAW;AAC/D,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA;AAAG,IAAA,OAAO,IAAA;AAE5B,EAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG;AAC7C,IAAA,OAAO,KAAA;AAAA;AAGT,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,MAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,EAAE,MAAA,EAAQ;AAC9C,QAAA,OAAO,KAAA;AAAA;AAET,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,QAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;AAC1B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,OAAO,IAAA;AAAA,KACT,MAAA,IAAW,KAAK,CAAA,EAAG;AACjB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,OAAO,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC7B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5C,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,OAAO,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC7B,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,OAAO,IAAA;AAAA,eACG,CAAA,IAAK,CAAC,CAAA,IAAO,CAAC,KAAK,CAAA,EAAI;AACjC,MAAA,OAAO,KAAA;AAAA;AACT;AAGF,EAAA,OAAO,CAAA,KAAM,CAAA;AACf;;ACnCO,SAAS,kBACd,CAAA,EACS;AACT,EAAA,OACE,MAAA,CAAO,EAAE,UAAA,CAAW,QAAQ,KAC5B,MAAA,CAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAQ,KACtC,MAAA,CAAO,CAAA,CAAE,SAAQ,CAAE,UAAA,CAAW,QAAQ,CAAA,IACtC,MAAA,CAAO,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA,IAAA,kBAAA;AAyBO,MAAM,SAAA,CAAU;AAAA,EACrB,WAAA,CACkB,EAAA,EACA,IAAA,EACA,KAAA,EACA,SAAA,EAChB;AAJgB,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA;AAEpB;AAEO,MAAe,2BAMZ,KAAA,CAIR;AAAA,EAMA,WAAA,CAAY;AAAA,IACV,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,GACL,EAAiD;AAC/C,IAAA,KAAA,CAAM,UAA6B,CAAA;AAbrC,IAAAO,cAAA,CAAA,IAAA,EAAA,kBAAA,EAAuC,IAAA,CAAA;AACvC,IAAAP,eAAA,CAAA,IAAA,EAAU,0BAAA,EAA6C,IAAA,CAAA;AAEvD,IAAAA,eAAA,CAAA,IAAA,EAAgB,WAAA,CAAA;AAYd,IAAA,IAAA,CAAK,YAAY,IAAI,SAAA,CAAU,KAAA,EAAO,OAAA,EAAS,UAAU,SAAS,CAAA;AAElE,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,KAAA;AAEnB,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa;AAAA,MACtB,KAAA,EAAO,KAAA;AAAA,MACP,YAAA,EAAc,IAAA;AAAA,MACd,aAAA,EAAe;AAAA,KACjB;AAEA,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA;AACH,EAEA,MAAM,SAAA,CACJ,SAAA,EACA,OAAA,EACkB;AAClB,IAAA,IAAI,IAAA,CAAK,kBAAA,EAAmB,CAAE,KAAA,EAAO;AACnC,MAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA;AAG9B,IAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,MAAA,IAAI,KAAK,QAAA,EAAS,KAAMQ,qBAAK,kBAAA,CAAA,IAAsB,CAAC,SAAS,KAAA,EAAO;AAClE,QAAA,OAAO,IAAA;AAAA,OACT,MAAO;AACL,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA;AAC3C,QAAA,IAAI,GAAA,EAAK;AACP,UAAAC,cAAA,CAAA,IAAA,EAAK,kBAAA,EAAqB,KAAK,QAAA,EAAS,CAAA;AACxC,UAAA,OAAO,IAAA;AAAA,SACT,MAAO;AACL,UAAA,OAAO,KAAA;AAAA;AACT;AACF;AAGF,IAAA,OAAO,KAAA,CAAM,UAAU,SAAS,CAAA;AAAA;AAClC,EACA,MAAgB,eAAA,CAAgB;AAAA,IAC9B;AAAA,GACF,EAAqE;AACnE,IAAA,OAAO,KAAA;AAAA;AACT,EACO,kBAAA,GAAqB;AAC1B,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA;AACpB,EACO,QAAA,GAAW;AAChB,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EACU,YAAY,QAAA,EAA8B;AAClD,IAAA,OAAO,kBAAkB,IAAI,CAAA,IAAK,aAAa,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAAA;AAC1E,EACO,QAAA,CAAS,UAAqB,OAAA,EAA2B;AAC9D,IAAA,IACE,CAAC,OAAA,EAAS,KAAA,KACT,iBAAA,CAAkB,IAAI,KAAK,YAAA,CAAa,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA,CAAA;AAElE,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAE7B,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,QAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,IAAA;AAErC,IAAA,IAAI,OAAA,EAAS,gBAAgB,KAAA,EAAO;AAClC,MAAA,IAAA,CAAK,wBAAA,GAA2B,QAAA;AAChC,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA;AAG7B,IAAA,OAAO,KAAK,WAAA,CAAY,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC9C,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,OAAA,EAAS,gBAAgB,KAAA,EAAO;AAClC,UAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,kBAAA,GAAqB,IAAA;AAAA;AAEjD,QAAA,IAAI,OAAA,EAAS,eAAe,KAAA,EAAO;AACjC,UAAA,OAAO,KAAK,SAAA,CAAU,UAAA,EAAY,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AAAA;AAE7D,QAAA,OAAO,IAAA;AAAA;AAET,MAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,KAC7B,CAAA;AAAA;AACH,EAEU,gCACR,KAAA,EACyB;AACzB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR;AAAA,OACF;AAAA,MACA,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf,KACF;AAAA;AACF,EACU,kBAAkB,MAAA,EAAkC;AAC5D,IAAA,OAAO,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,MACtC,SAAS,OAAA,CAAQ,KAAA;AAAA,MACjB,MAAA,EAAQ,oBAAA;AAAA,MACR,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,MAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,SAAA;AAAA,MAChC,KAAA,EAAO,KAAK,SAAA,CAAU,EAAA;AAAA,MACtB,OAAO,IAAA,CAAK,UAAA,CAAW,OAAA,IAAW,IAAA,CAAK,WAAW,KAAA,IAAS,CAAA;AAAA,MAC3D,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,MAAA,EAAQ,IAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA;AACH,EACU,wBAAwB,CAAA,EAAY;AAC5C,IAAA,IAAI,aAAa,uBAAA,EAAyB;AACxC,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,KAAA,GAAQ,IAAA;AAAA,KAChC,MAAO;AACL,MAAA,MAAM,CAAA;AAAA;AACR;AACF,EACA,MAAgB,YAAY,QAAA,EAAqB;AAC/C,IAAA,IAAI,aAAa,IAAA,CAAK,wBAAA;AAA0B,MAAA,OAAO,IAAA;AAEvD,IAAA,MAAM,eAAe,YAAY;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,+BAAA,CAAgC,QAAQ,CAAA;AAC9D,QAAA,MAAM,WAAW,MAAM,UAAA;AAAA,UACrB,YAAY;AACV,YAAA,IAAI;AACF,cAAA,MAAM,MAAM,MAAM,IAAA;AAAA,gBAChB,KAAK,IAAA,CAAK,SAAA;AAAA,gBACV,MAAM,KAAK,iBAAA,EAAkB;AAAA,gBAC7B;AAAA,eACF;AACA,cAAA,OAAO,GAAA;AAAA,qBACA,CAAA,EAAG;AACV,cAAA,IAAA,CAAK,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA;AAAA,gBAChC,IAAI,mBAAA,CAAoB,EAAE,SAAS,MAAA,CAAO,CAAC,GAAG;AAAA,eAChD;AACA,cAAA,OAAO,IAAA;AAAA;AACT,WACF;AAAA,UACA,CAACE,OAAAA,KAAW;AACV,YAAA,MAAM,OAAA,GAAU,CAAC,CAACA,OAAAA,EAAQ,IAAA,EAAM,OAAA;AAChC,YAAA,OAAO,OAAA;AAAA,WACT;AAAA,UACA,EAAE,OAAA,EAAS,EAAA,EAAI,OAAA,EAAS,GAAA;AAAI,SAC9B;AAEA,QAAA,MAAM,MAAA,GAAS,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW,KAAA;AAE1C,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAA,CAAK,wBAAA,GAA2B,QAAA;AAChC,UAAA,IAAA,CAAK,KAAA,CAAM,WAAW,KAAA,GAAQ,KAAA;AAC9B,UAAA,OAAO,IAAA;AAAA;AACT,eACO,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,CAAC,CAAA;AACrC,QAAA,IAAA,CAAK,wBAAwB,CAAC,CAAA;AAAA;AAGhC,MAAA,OAAO,KAAA;AAAA,KACT,GAAG;AAEH,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,WAAW,CAAA;AAAA,KACnD,CAAA,MAAQ;AAAA;AAKR,IAAA,OAAO,MAAM,WAAA;AAAA;AACf,EAEU,QAAA,GAAW;AACnB,IAAA,OAAO,IAAA,CAAK,UAAS,KAAM,EAAA;AAAA;AAC7B,EAEU,YAAA,GAAe;AACvB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,EAAS;AAAA;AACzB,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAA,EAAO;AAC/B,MAAA,IAAI,CAAE,MAAM,IAAA,CAAK,YAAY,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAI;AAC/C,QAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,iBAAA,EAAkB;AAC9D,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,MAAM,OAAA,GACJ,iBAAA,CAAkB,IAAI,CAAA,IACtB,KAAK,YAAA,EAAa,IAClB,CAAC,IAAA,CAAK,WAAW,QAAA,IACjB,IAAA,CAAK,UAAA,CAAW,gBAAA,IAChB,KAAK,UAAA,CAAW,QAAA;AAElB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,OAAA,GACjC,OACA,MAAA,CAAO,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAEjD,IAAA,OAAO,CAAC,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA;AAAA;AAChC,EAEO,SAAS,GAAA,EAAa;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,GAAA;AAAA;AACvC,EAEU,oBAAA,CACR,OACA,gBAAA,EACkB;AAClB,IAAA,OAAO;AAAA,MACL,GAAG,KAAA,CAAM,oBAAA,CAAqB,KAAA,EAAO,gBAAgB,CAAA;AAAA,MACrD,KAAA,EAAO,KAAK,SAAA,CAAU;AAAA,KACxB;AAAA;AACF,EAEA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,eAAA,CAAgB;AAAA,MAC9C,GAAG,IAAA,CAAK,UAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,KAAA,EAAO,KAAK,SAAA,CAAU,EAAA;AAAA,MACtB,OAAA,EAAS,KAAK,SAAA,CAAU,IAAA;AAAA,MACxB,QAAA,EAAU,KAAK,SAAA,CAAU,KAAA;AAAA,MACzB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,MAC1B,KAAA,EAAO,KAAK,KAAA,CAAM;AAAA,KACnB,CAAA;AAED,IAAA,IAAA,CAAK,KAAA,CAAM,QAAQ,YAAA,IAAiB,EAAA;AAAA;AAExC;AAnPE,kBAAA,GAAA,IAAA,OAAA,EAAA;;ACnCK,MAAM,iBAAiB,kBAAA,CAG5B;AAAA,EACA,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEU,eAAA,CAAgB;AAAA,IACxB;AAAA,GACF,EAAgF;AAC9E,IAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,MAAA,EAAW;AACvC,MAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA;AAG9B,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA;AAE3C;;;;;;;;ACzBO,MAAM,WAAA,CAAY;AAAA,EAGvB,WAAA,CACS,WACP,KAAA,EACA;AAFO,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAHT,IAAAX,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAME,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,GAAG,KAAA;AAAA,MACH,UAAA,EAAY,KAAA;AAAA,MACZ,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,SAAA,EAAW;AAAA,KACb;AACA,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA;AAC5C,EAEA,iBAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AACb,EAEA,MAAM,iBAAiB,GAAA,EAAa;AAClC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,KAAgB,MAAA,EAAW;AACxC,MAAA,MAAM,SAAS,MAAM,IAAA;AAAA,QACnB,IAAA,CAAK,SAAA;AAAA,QACL,GAAA;AAAA,QACA,EAAE,cAAA,EAAgB,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,OAC7C;AAEA,MAAA,MAAM,QAAA,GAAW,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,KAAA;AACvC,MAAA,IAAA,CAAK,KAAA,CAAM,YACT,QAAA,KAAa,MAAA,GAAU,QAAQ,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAA,GAAM,EAAA;AAC9D,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,SAAA;AAAA;AACtC;AACF,EAEA,KAAA,GAAQ;AACN,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAClB,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,EAAA;AACvB,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AAAA;AAC1B,EAEA,iBAAA,GAAoB;AAClB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAClB,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,EAAA;AACvB,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AACxB,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAAA;AAC5B,EAEA,aAAa,GAAA,EAAa;AACxB,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,GAAA;AACvB,IAAA,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,GAAA,KAAQ,IAAA,CAAK,KAAA,CAAM,WAAA;AAAA;AAC7C,EAEA,iBAAA,CAAkB,OAAe,GAAA,EAAa;AAC5C,IAAA,IAAI,IAAA,CAAK,MAAM,UAAA,EAAY;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,WAAW,GAAA,EAAK;AAAA,QACxB,QAAA,EAAU,EAAE,KAAA,EAAM;AAAA,QAClB,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA,EAAS;AAAA,QAC1C,iBAAA,EAAmB;AAAA,OACpB,CAAA;AAAA;AAGH,IAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,IAAA,CAAK,KAAA,KAAU,EAAA;AACzC,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AACb,EAEA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,KAAA,CAAM,EAAA;AAAA;AACpB,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,KAAA,CAAM,SAAA;AAAA;AAEtB;;AC9EO,SAAS,cAAc,QAAA,EAAkB;AAC9C,EAAA,OAAO,CAAC,GAAG,QAAA,CAAS,QAAA,CAAS,qBAAqB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,MAAO;AAAA,IACtE,EAAA,EAAI,CAAA;AAAA,IACJ,KAAA,EAAO;AAAA,GACT,CAAE,CAAA;AACJ;;;;;;;;ACWO,MAAe,0BAMZ,kBAAA,CAA2D;AAAA,EAMnE,YAAY,KAAA,EAAqD;AAC/D,IAAA,KAAA,CAAM,KAAK,CAAA;AANb,IAAAA,eAAA,CAAA,IAAA,EAAA,cAAA,sBAAmB,GAAA,EAAyB,CAAA;AAC5C,IAAAA,eAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,IAAA,CAAK,YAAA,EAAa,CAAE,CAAC,CAAA,EAAG,EAAA,CAAA;AAC7C,IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,KAAA,CAAA;AAChB,IAAAA,eAAA,CAAA,IAAA,EAAA,sBAAA,EAAuC,EAAC,CAAA;AAItC,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,YAAA,EAAc,UAAA;AAAA,MACd,kBAAA,EAAoB,UAAA;AAAA,MACpB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA;AACH,EAEQ,WAAA,GAAc;AACpB,IAAA,MAAM,UAA0B,EAAC;AACjC,IAAA,MAAM,KAAA,GAAQ,2BAAA;AACd,IAAA,IAAI,KAAA;AAEJ,IAAA,OAAA,CAAQ,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,WAAW,IAAA,IAAQ,IAAI,OAAO,IAAA,EAAM;AAClE,MAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA;AAC3B,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA;AAGjB,IAAA,IAAA,CAAK,oBAAA,GAAuB,OAAA;AAAA;AAC9B,EAEQ,YAAA,GAAe;AACrB,IAAA,OAAO,YAAA,CAAa,cAAc,IAAA,CAAK,OAAA,GAAU,UAAA,EAAY,KAAA,IAAS,EAAE,CAAC,CAAA;AAAA;AAC3E,EAEA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AACrB,IAAA,IAAI,IAAA,CAAK,YAAA,EAAa,CAAE,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,WAAA,EAAY;AACjB,MAAA,IAAA,CAAK,YAAA,EAAa,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACpC,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,IAAK,KAAA;AAC3D,QAAA,IAAA,CAAK,YAAA,CAAa,GAAA;AAAA,UAChB,IAAA,CAAK,EAAA;AAAA,UACL,IAAI,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,YACnC,IAAI,IAAA,CAAK,EAAA;AAAA,YACT,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ;AAAA,WACD;AAAA,SACH;AAAA,OACD,CAAA;AAED,MAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA,CAAK,YAAA,EAAa,CAAE,CAAC,CAAA,CAAE,EAAA;AAAA;AACnD;AACF,EAEO,kBAAA,GAAqB;AAC1B,IAAA,IAAA,CAAK,eAAA,EAAgB,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACpC,MAAA,CAAA,CAAE,KAAA,EAAM;AAAA,KACT,CAAA;AAAA;AACH,EAEO,kBAAA,GAAqB;AAC1B,IAAA,IAAA,CAAK,eAAA,EAAgB,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACpC,MAAA,CAAA,CAAE,iBAAA,EAAkB;AAAA,KACrB,CAAA;AAAA;AACH,EAEA,MAAa,eAAe,MAAA,EAAgB;AAC1C,IAAA,IAAA,CAAK,kBAAA,GAAqB,MAAA;AAC1B,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA;AACvB,EAEO,eAAe,EAAA,EAAY;AAChC,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAAA;AACjC,EAEO,qBAAA,GAAwB;AAC7B,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,kBAAkB,CAAA;AAAA;AACtD,EAEO,eAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA;AACd,EAEO,kBAAA,GAAqB;AAC1B,IAAA,CAAC,GAAG,IAAA,CAAK,eAAA,EAAgB,CAAE,MAAA,EAAQ,CAAA,CAChC,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,UAAU,CAAA,CAChC,OAAA,CAAQ,CAAC,CAAA,KAAM;AACd,MAAA,CAAA,CAAE,iBAAA;AAAA,QACA,CAAA,CAAE,KAAA;AAAA,QACF,KAAK,iBAAA,CAAkB;AAAA,UACrB,KAAA,EAAO,IAAA;AAAA,UACP,qBAAA,EAAuB,IAAA;AAAA,UACvB,QAAQ,CAAA,CAAE;AAAA,SACX;AAAA,OACH;AAAA,KACD,CAAA;AACH,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,IAAA;AAAA;AACvC,EAEA,MAAa,eAAA,GAAkB;AAC7B,IAAA,MAAM,SAAS,IAAA,CAAK,kBAAA;AACpB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAErB,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAAG,gBAAA;AAAA,MACjC,MAAM,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QACrC,OAAA,EAAS,gCAAA;AAAA,QACT,MAAA,EAAQ,sBAAA;AAAA,QACR,KAAA,EAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,EAAA;AAAA,QACjC,SAAA,EAAW,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,SAAA;AAAA,QACrC,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,QACvB,KAAA,EAAO,KAAK,SAAA,CAAU,EAAA;AAAA,QACtB,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA;AACvB,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,QAAA,EAAS;AAC1C,IAAA,IAAI,OAAA,GAAU,YAAA;AACd,IAAA,MAAM,cACJ,YAAA,IACA,IAAA,CAAK,WAAW,OAAA,IAChB,IAAA,CAAK,UAAS,KACb,CAAC,IAAA,CAAK,UAAA,CAAW,eAChB,CAAC,IAAA,CAAK,WAAW,gBAAA,IACjB,CAAC,KAAK,UAAA,CAAW,QAAA,CAAA;AAErB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,eAAe,CAAC,GAAG,KAAK,eAAA,EAAgB,CAAE,QAAQ,CAAA;AAExD,MAAA,MAAM,gBAAA,GAAmB,aAAa,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA,CAAE,MAAM,YAAY,CAAA;AAEvE,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,sBAAA;AAAA,UAC1C,KAAK,IAAA,CAAK,SAAA;AAAA,UACV,iBAAiB,KAAA,CAAM;AAAA,SACzB;AACA,QAAA,OAAA,GAAU,KAAA;AAAA,OACZ,MAAO;AACL,QAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,IAAA;AAAA;AACvC;AAEF,IAAA,OAAO,OAAA;AAAA;AACT,EACO,QAAA,CACL,UACA,OAAA,EAQkB;AAClB,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA;AAE1B,IAAA,OAAO,KAAA,CAAM,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA;AAE3C;;ACjLO,MAAM,eAAe,iBAAA,CAAiD;AAAA,EAC3E,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEU,YAAA,GAAwB;AAChC,IAAA,OAAO,CAAC,CAAC,IAAI,SAAA,EAAU,CAAE,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAS,EAAG,WAAW,CAAA,CAClE,eAAA,CAAgB,WAAA;AAAA;AACrB,EACU,gCACR,KAAA,EACyB;AACzB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,+BAAA,CAAgC,KAAK,CAAA;AACxD,IAAA,IAAA,CAAK,SAAU,WAAA,GAAc,MAAA;AAC7B,IAAA,OAAO,IAAA;AAAA;AAEX;;;;;;;;ACXA,SAAS,iBAAiB,QAAA,EAA0B;AAClD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,GAAA,EAAI,CAAG,aAAY,GAAI,EAAA;AACzD;AAEA,MAAM,eAAA,GAE8B,CAAC,SAAA,KACnC,MAAA,CAAO,MAAA,CAAO;AAAA,EACZ,QAAA,EAAU;AAAA,IACR,eAAe,EAAC;AAAA,IAChB,mBAAmB,EAAC;AAAA,IACpB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,iBAAA,EAAmB,IAAA;AAAA,EACnB,SAAA,EAAW,MAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,MAAA;AAAA,EACZ,WAAA,EAAa,EAAA;AAAA,EACb,UAAA,EAAY,KAAA;AAAA,EACZ,WAAA,EAAa;AAAA,IACX,OAAO,EAAC;AAAA,IACR,KAAA,EAAO,SAAA,CAAU,SAAS,CAAA,CAAE,yBAAA,GACxB;AAAA,MACE;AAAA,QACE,SAAA,EAAW,IAAA;AAAA,QACX,MAAA,EAAQ,SAAA,CAAU,SAAS,CAAA,CAAE,kBAAA;AAAA,QAC7B,SAAA,EAAW,SAAA,CAAU,SAAS,CAAA,CAAE;AAAA;AAClC,QAEF,EAAC;AAAA,IACL,cAAgB,SAAA,CAAU,SAAS,CAAA,CAChC,4BAAA,KAAoD,QACnD,GAAA,GACA;AAAA,GACN;AAAA,EACA,YAAA,EAAc;AAChB,CAAC,CAAA;AAEI,MAAM,uBAAA,CAAwB;AAAA,EAGnC,WAAA,CACS,GAAA,EACA,WAAA,EACA,IAAA,EAKP;AAPO,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AALT,IAAAA,eAAA,CAAA,IAAA,EAAO,OAAA,CAAA;AAWL,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,IAAA,CAAK,KAAA,GAAQ,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAA;AAAA;AAC5C,EAEA,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO;AAAA,MACL,GAAG,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,aAAA;AAAA,MACvB,GAAG,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS;AAAA,KACzB;AAAA;AACF,EAEA,IAAW,YAAA,GAAe;AACxB,IAAA,OAAO,IAAA,CAAK,MAAM,WAAA,CAAY,YAAA;AAAA;AAChC,EAEA,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA;AACpB,EAEA,IAAW,SAAA,GAAY;AACrB,IAAA,OAAO,KAAK,KAAA,CAAM,SAAA;AAAA;AACpB,EAEA,IAAW,UAAA,GAAa;AACtB,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA;AACpB,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,IAAA,CAAK,IAAI,WAAA,EAAY;AAAA;AAC9B,EAEA,IAAW,YAAA,GAAe;AACxB,IAAA,OAAO,IAAA,CAAK,MAAM,QAAA,CAAS,iBAAA;AAAA;AAC7B,EAEA,IAAW,YAAA,GAAe;AACxB,IAAA,OAAO,IAAA,CAAK,IAAI,gBAAA,EAAiB;AAAA;AACnC,EAEA,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,IAAA,CAAK,IAAI,kBAAA,EAAmB;AAAA;AACrC,EAEA,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO,IAAA,CAAK,IAAI,cAAA,EAAe;AAAA;AACjC,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,IAAA,CAAK,IAAI,WAAA,EAAY;AAAA;AAC9B,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,IAAA,CAAK,MAAM,QAAA,CAAS,aAAA;AAAA;AAC7B,EAEA,IAAW,iBAAA,GAAoB;AAC7B,IAAA,OAAO,IAAA,CAAK,IAAI,mBAAA,EAAoB;AAAA;AACtC,EAEA,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,IAAA,CAAK,IAAI,iBAAA,EAAkB;AAAA;AACpC,EAEO,WAAA,GAAc;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,iBAAA,CAAkB,IAAA,CAAK;AAAA,MACzC,IAAA,EAAM,GAAA;AAAA,MACN,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,MACxB,IAAA,EAAM,EAAA;AAAA,MACN,QAAA,EAAU,GAAA;AAAA,MACV,KAAA,EAAO,EAAA;AAAA,MACP,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,EAAA;AAAA,MACP,YAAA,EAAc,EAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAAA;AACH,EAEO,SAAS,KAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAC1B,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAAA;AAC5C,EAEO,iBAAiB,IAAA,EAA+B;AACrD,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAC1B,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,eAAA,GAAkB,EAAC;AAClC,IAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,IAAA;AAAA;AACjC,EACA,MAAa,cAAc,SAAA,EAAmB;AAC5C,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,GAAA,CAAI,oBAAoB,SAAS,CAAA;AACtC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,cAAA,CAAe,EAAE,SAAA,EAAW,CAAA;AAAA;AACvC,EAEO,kBAAA,GAAqB;AAC1B,IAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,IAAA;AAC/B,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AAAA;AAC1B,EAEO,UAAU,IAAA,EAAc;AAC7B,IAAA,IAAA,CAAK,GAAA,CAAI,UAAU,IAAI,CAAA;AAAA;AACzB,EAEO,UAAA,GAAa;AAClB,IAAA,IAAA,CAAK,IAAI,UAAA,EAAW;AAAA;AACtB,EAEO,UAAA,GAAa;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAI,UAAA,EAAW;AAAA;AACtB,EAEO,iBAAA,GAAoB;AACzB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,eAAA,CAAgB,WAAW,CAAA,EAAG;AAC/C,MAAA,IAAA,CAAK,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA;AACjD;AACF,EAEO,YAAA,GAAe;AACpB,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA;AAClB,EAEA,MAAa,OAAA,GAAU;AACrB,IAAA,IAAI,OAAA,GAAU,KAAK,QAAA,EAAS;AAC5B,IAAA,IAAI,OAAA;AAAS,MAAA,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAChE,IAAA,OAAO,OAAA;AAAA;AACT,EAEO,eAAe,OAAA,EAAmB;AACvC,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,OAAO,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,aAAA,CAAc,MAAA;AAEjD,IAAA,IAAA,CAAK,MAAM,QAAA,CAAS,iBAAA,GAClB,IAAA,CAAK,KAAA,CAAM,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC,CAAC,CAAA,EAAG,UAAA;AAAA;AAAA,QAEF,CAAC,SAAA,CAAU,GAAA,CAAI,UAAA,GAAa,MAAM;AAAA;AAAA,KACtC;AAAA;AACJ,EAEO,iBAAiB,IAAA,EAA6C;AACnE,IAAA,IAAI,IAAA,IAAQ,YAAY,IAAA,EAAM;AAC5B,MAAA,IAAA,CAAK,MAAM,WAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,KAAA,CAAM,MAAA;AAAA,QAC1D,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,IAAA,CAAK;AAAA,OAC3B;AAAA,KACF,MAAO;AACL,MAAA,IAAA,CAAK,MAAM,WAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,KAAA,CAAM,MAAA;AAAA,QAC1D,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,IAAA,CAAK;AAAA,OAC3B;AAAA;AACF;AACF,EAEU,iBAAA,GAA0B;AAClC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,iBAAA,IAAqB,OAAA,IAAW,EAAA;AAC5D,IAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,IAAA,MAAM,oBAAoB,UAAA,CACvB,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACvB,MAAA,CAAO,CAAC,GAAA,KAAQ,QAAQ,EAAE,CAAA;AAE7B,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA,MAAM,WAAW,CAAC,GAAG,KAAK,eAAA,EAAiB,GAAG,KAAK,WAAW,CAAA;AAC9D,MAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,QACzB,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAe,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,EAAE,MAAA;AAAO,OAClE;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,MAAM,eAAA,GAAkB,YAAA;AACjC,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,WAAA,GAAc,EAAC;AAC9B,MAAA;AAAA;AAGF,IAAA,MAAM,oBAA4B,EAAC;AACnC,IAAA,MAAM,SAAiB,EAAC;AACxB,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,CAAC,IAAA,KAAe;AAC3C,MAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACtC,MAAA,IAAI,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AACnC,QAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAAA,OAC7B,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAChB,QAAA,aAAA,IAAiB,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA;AAChC,KACD,CAAA;AAED,IAAA,MAAM,gBAAwB,EAAC;AAC/B,IAAA,MAAM,cAAsB,EAAC;AAC7B,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAe;AACjD,MAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACtC,MAAA,IAAI,iBAAA,CAAkB,QAAA,CAAS,GAAG,CAAA,EAAG;AACnC,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,OACzB,MAAO;AACL,QAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA;AACvB,KACD,CAAA;AAED,IAAA,MAAM,kBAAA,GAAqB,CAAC,GAAG,iBAAA,EAAmB,GAAG,aAAa,CAAA;AAClE,IAAA,MAAM,oBAAoB,KAAA,CAAM,IAAA;AAAA,MAC9B,IAAI,GAAA;AAAA,QACF,kBAAA,CAAmB,IAAI,CAAC,IAAA,KAAe,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC;AAAA,QACxD,MAAA;AAAO,KACX;AACA,IAAA,MAAM,cAAA,GAAiB,CAAC,GAAG,MAAA,EAAQ,GAAG,WAAW,CAAA;AACjD,IAAA,MAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,MAC1B,IAAI,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,CAAC,IAAA,KAAe,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,EAAE,MAAA;AAAO,KACxE;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,MAAM,eAAA,GAAkB,iBAAA;AACjC,IAAA,IAAA,CAAK,GAAA,CAAI,MAAM,WAAA,GAAc,aAAA;AAC7B,IAAA,IAAI,aAAA;AACF,MAAA,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,QACd,OAAO,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,gBAAgB,CAAA,CAAE,IAAA;AAAA,QACtD,OAAA,EAAS,aAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACP,CAAA;AAAA;AACL,EAEA,MAAa,SAAA,GAAY;AACvB,IAAA,MAAM,CAAA,GAAI,mBAAA;AACV,IAAA;AAAA;AAAA,MAEE,qBAAqB,CAAC,CAAA;AAAA,KAAA,CACtB,IAAA,CAAK,CAAC,CAAA,KAAM;AACZ,MAAC,CAAA,CAAsC,QAAQ,IAAI,CAAA;AAAA,KACpD,CAAA;AAAA;AACH,EAEO,eAAe,IAAA,EAAc;AAClC,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,IAAA;AAAA;AAC3B,EAEA,MAAgB,aAAA,GAAgB;AAC9B,IAAA,IAAA,CAAK,MAAM,QAAA,GAAW;AAAA,MACpB,mBAAmB,EAAC;AAAA,MACpB,eAAe,EAAC;AAAA,MAChB,cAAA,EAAgB;AAAA,KAClB;AAAA;AACF,EAEO,QAAA,GAAoB;AACzB,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAC1B,IAAA,IACE,IAAA,CAAK,IAAI,kBAAA,EAAmB,CAAE,WAAW,CAAA,IACzC,CAAC,IAAA,CAAK,KAAA,CAAM,iBAAA,EACZ;AACA,MAAA,IAAA,CAAK,MAAM,YAAA,GAAe,IAAA;AAC1B,MAAA,OAAA,GAAU,KAAA;AAAA;AAGZ,IAAA,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,MAAA,IAAI,CAAA,CAAE,aAAa,GAAA,EAAK;AACtB,QAAA,IAAI,EAAE,IAAA,CAAK,IAAA,OAAW,EAAA,IAAM,CAAA,CAAE,SAAS,GAAA,EAAK;AAC1C,UAAA,CAAA,CAAE,iBAAA,GAAoB,QAAA;AAAA,YACpB,KAAK,GAAA,CAAI,SAAA;AAAA,YACT;AAAA,WACF,CAAE,IAAA;AACF,UAAA,OAAA,GAAU,KAAA;AAAA;AAEZ,QAAA,IAAI,CAAA,CAAE,KAAA,CAAM,IAAA,EAAK,KAAM,EAAA,EAAI;AACzB,UAAA,IAAI,CAAC,CAAA,CAAE,YAAA;AACL,YAAA,CAAA,CAAE,eAAe,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,aAAa,CAAA,CAAE,IAAA;AAC/D,UAAA,OAAA,GAAU,KAAA;AAAA;AACZ;AACF,KACD,CAAA;AAED,IAAA,OAAO,OAAA;AAAA;AAEX;;;;;;;;ACrSO,SAAS,qBACd,iBAAA,EACyB;AACzB,EAAA,OAAO,iBAAA;AACT;AAEO,SAAS,uBAAA,CACd,WACA,kBAAA,EACA;AACA,EAAA,OACE,CAAC,UAAU,SAAS,CAAA,CAAE,wBACrB,SAAA,CAAU,SAAS,CAAA,CAAE,mBAAA,IAAuB,kBAAA,IAAsB,KAAA,CAAA;AAEvE;AAEO,MAAM,mBAAA,GAAsB,CACjC,SAAA,EACA,cAAA,EACA,cAAA,KACsB;AACtB,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,WAAA,EAAa,GAAG,MAAK,GACrD,cAAA;AAEF,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,QAAA,EACE,aAAa,MAAA,IACb,QAAA,KAAa,QACb,SAAA,CAAU,IAAI,CAAA,IACd,IAAA,CAAK,MAAA,KAAW,IAAA;AAAA,IAClB,YAAA,EAAA,CACG,QAAA,IAAY,WAAA,MAAiB,SAAA,CAAU,SAAS,CAAA,CAAE,kBAAA;AAAA,IACrD,gBAAgB,IAAA,CAAK,YAAA,IAAgB,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,IAAK,cAAA;AAAA,IAC7D,SAAA,EAAW,KAAK,UAAA,IAAc,KAAA;AAAA,IAC9B,aAAa,QAAA,IAAY;AAAA,GAC3B;AACF;AAGO,MAAM,oBAAoBU,cAAA,CAAqC;AAAA,EAuBpE,WAAA,CACS,SAAA,EACA,EAAA,EACA,IAAA,EACA,WAAA,EACP;AACA,IAAA,KAAA,EAAM;AALC,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AA1BT,IAAAV,eAAA,CAAA,IAAA,EAAA,UAAA,EAAW,QAAA,CAAA;AACX,IAAAA,eAAA,CAAA,IAAA,EAAA,iBAAA,EAAkD,IAAA,CAAA;AAClD,IAAAA,eAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,KAAA,CAAA;AACpB,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,sBAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,uBAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAuB;AAAA,MACrB,QAAA,EAAU,CAAA;AAAA,MACV,cAAc,EAAC;AAAA,MACf,iBAAA,EAAmB,GAAA;AAAA,MACnB,cAAA,EAAgB,IAAA;AAAA,MAChB,iBAAiB,EAAC;AAAA,MAClB,OAAO,EAAC;AAAA,MACR,eAAe,EAAC;AAAA,MAChB,aAAa,EAAC;AAAA,MACd,eAAA,sBAAqB,GAAA,EAAI;AAAA,MACzB,cAAA,EAAgB;AAAA,KAClB,CAAA;AAkxCA,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,mCAAA,EAAoC,oBAAA,CAAA;AAE9C,IAAAA,eAAA,CAAA,IAAA,EAAU,8BAAA,EAA+B,oBAAA,CAAA;AAEzC,IAAAA,eAAA,CAAA,IAAA,EAAU,+BAAA,EAAgC,oBAAA,CAAA;AAE1C,IAAAA,eAAA,CAAA,IAAA,EAAU,gCAAA,EAAiC,oBAAA,CAAA;AAE3C,IAAAA,eAAA,CAAA,IAAA,EAAU,8BAAA,EAA+B,oBAAA,CAAA;AAEzC,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,qCAAoC,CAAC;AAAA,MAC7C;AAAA,KACF,KAEM;AACJ,MAAA,OACE,QAAA,EACI,MAAA,GAAS,CAAC,OAAA,KAAY,CAAC,CAAC,OAAA,CAAQ,KAAK,CAAA,CACtC,GAAA,CAAI,CAAC,OAAA,KAAY,CAAA,EAAG,QAAQ,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA,CACjE,IAAA,CAAK,GAAG,CAAA,IAAK,EAAC;AAAA,KAErB,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,wCAAuC,CAAC;AAAA,MAChD,gBAAA;AAAA,MACA;AAAA,KACF,KAGM;AACJ,MAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,MAAA,gBAAA,CAAiB,OAAA;AAAA,QACf,CAAC,OAAA,KACE,YAAA,GAAe,CAAA,EAAG,YAAY,GAC7B,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAClC,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA,aAAA,EACzB,OAAA,CAAQ,QACV,CAAA,YAAA,EAAe,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,OAC9D;AAEA,MAAA,gBAAA,CAAiB,OAAA;AAAA,QACf,CAAC,OAAA,KACE,YAAA,GAAe,CAAA,EAAG,YAAY,GAC7B,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAClC,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA,aAAA,EACzB,OAAA,CAAQ,SACV,CAAA,YAAA,EAAe,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,OAC9D;AAEA,MAAA,OAAO,YAAA;AAAA,KACT,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,6CAAA,EAA8C,CACtD,kBAAA,KACG;AACH,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,kBAAkB,CAAA,CACpC,MAAA,CAAO,CAAC,OAAA,KAAY,CAAC,CAAC,OAAA,EAAS,KAAK,CAAA,CACpC,IAAI,CAAC,OAAA,KAAY,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,KAAK,CAAA,CAAE,CAAA,CACnD,IAAA,CAAK,GAAG,CAAA;AAAA,KACb,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,2BAAA,EAA4B,oBAAA,CAAA;AAEtC,IAAAA,eAAA,CAAA,IAAA,EAAU,wCAAA,EAAyC,oBAAA,CAAA;AAEnD,IAAAA,eAAA,CAAA,IAAA,EAAU,2BAAA,EAA4B,oBAAA,CAAA;AAEtC,IAAAA,eAAA,CAAA,IAAA,EAAU,2BAAA,EAA4B,oBAAA,CAAA;AAEtC,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,kCAAA,EAAmC,oBAAA,CAAA;AAE7C,IAAAA,eAAA,CAAA,IAAA,EAAU,gCAAA,EAAiC,oBAAA,CAAA;AAE3C,IAAAA,eAAA,CAAA,IAAA,EAAU,6BAAA,EAA8B,oBAAA,CAAA;AAExC,IAAAA,eAAA,CAAA,IAAA,EAAU,+BAAA,EAAgC,oBAAA,CAAA;AAuN1C,IAAAA,eAAA,CAAA,IAAA,EAAO,qBAAA,EAAsB,CAAC,IAAA,KAA2C;AACvE,MAAA,OAAO;AAAA,QACL,GAAG,mBAAA,CAAoB,IAAA,CAAK,SAAA,EAAW,MAAM,KAAK,CAAA;AAAA,QAClD,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,QAAA;AAAA,QAC9B,SAAS,IAAA,CAAK;AAAA,OAChB;AAAA,KACF,CAAA;AAzjDE,IAAA,IAAI,CAAE,SAAA,CAAU,IAAA,CAAK,SAAS,EAAU,OAAA,EAAS;AAC/C,MAAC,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAU,UAAU,EAAC;AAAA;AAEhD,IAAC,UAAU,IAAA,CAAK,SAAS,EAAU,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,GAAI,IAAA;AAEtD,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,IAAA,CAAK,iBAAA,GACH,SAAS,GAAA,IAAO,CAAC,CAAC,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,SAAA;AAC9C,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,SAAA;AACvC,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,qBAAA,GACH,IAAA,KAAS,GAAA,GACL,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,eAAA,GAC1B,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,eAAA;AAAA,aACzB,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAChB;AACF,EA9BA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA;AACvC,EA8BA,MAAM,IAAA,GAAO;AACX,IAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,IAAA,MAAM,KAAK,cAAA,CAAe;AAAA,MACxB,SAAA,EAAW,KAAK,KAAA,CAAM;AAAA,KACvB,CAAA;AACD,IAAA,MAAM,KAAK,oBAAA,EAAqB;AAAA;AAClC,EAEA,MAAM,cAAc,KAAA,EAAgB;AAClC,IAAA,IAAI,IAAA,CAAK,YAAY,cAAA,EAAgB;AACnC,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,IAAS,EAAE,CAAA;AAAA,KACzC,MAAO;AACL,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,IAAS,EAAE,CAAA;AACtD,QAAA,IAAI,CAAC,MAAA;AAAQ,UAAA;AAAA;AAEf,MAAA,IAAA,CAAK,kBAAkB,IAAI,uBAAA;AAAA,QACzB,IAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AACA,MAAA,IAAA,CAAK,gBAAgB,SAAA,EAAU;AAAA;AACjC;AACF,EAEA,MAAM,iBAAA,CACJ,IAAA,EAIA,KAAA,EACA;AACA,IAAA,IAAI,IAAA,CAAK,YAAY,cAAA,EAAgB;AACnC,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,IAAS,IAAI,IAAI,CAAA;AAAA,KAC/C,MAAO;AACL,MAAA,MAAM,KAAK,IAAA,EAAK;AAEhB,MAAA,IAAI,QAAA,GAAW,IAAA;AAEf,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,iBAAiB,KAAA,IAAS,IAAI,IAAI,CAAA;AACzD,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,QAAA,GAAW,KAAA;AAAA;AACb;AAGF,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,kBAAkB,IAAI,uBAAA;AAAA,UACzB,IAAA;AAAA,UACA,IAAA,CAAK,WAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA,IAAA,CAAK,gBAAgB,SAAA,EAAU;AAAA;AACjC;AACF;AACF,EAEA,MAAM,gBACJ,IAAA,EACA,IAAA,GAII,EAAE,QAAA,EAAU,IAAG,EACnB;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA;AACzB,EAEA,MAAM,QAAA,GAA6B;AACjC,IAAA,OAAO,IAAI,OAAA,CAAiB,CAAC,OAAA,KAAY;AACvC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACd,CAAA;AAAA;AACH,EAEO,OAAO,YAAA,EAAsC;AAClD,IAAA,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA,CAAI,IAAI,mBAAA,CAAoB,YAAY,CAAC,CAAA;AAAA;AACxE,EAEU,UAAA,GAAqB;AAC7B,IAAA,OAAO,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,gBAAA;AAAA;AACnC,EAEO,WAAA,GAAc;AACnB,IAAA,OAAO,KAAK,KAAA,CAAM,YAAA;AAAA;AACpB,EAEO,mBAAA,GAAsB;AAC3B,IAAA,OAAO,KAAK,KAAA,CAAM,iBAAA;AAAA;AACpB,EAEO,iBAAA,GAAoB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAM,YAAA,CAAa,IAAA;AAAA,MAC7B,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAK,KAAA,CAAM;AAAA,KAC7B;AAAA;AACF,EAEO,kBAAA,GAAqB;AAC1B,IAAA,OAAO,KAAK,KAAA,CAAM,eAAA;AAAA;AACpB,EAEO,cAAA,GAAiB;AACtB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA;AACpB,EAEO,gBAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EAEO,WAAA,GAAc;AACnB,IAAA,OAAO,KAAK,KAAA,CAAM,QAAA;AAAA;AACpB,EAEO,iBAAA,GAAoB;AACzB,IAAA,OAAO,KAAK,KAAA,CAAM,cAAA;AAAA;AACpB,EAEA,MAAM,eAAA,CACJ;AAAA,IACE,KAAA,EAAO,KAAA;AAAA,IACP,aAAA,EAAe;AAAA,KAEjB,OAAA,EACA;AACA,IAAA,MAAM,KAAK,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,KAAK,EAAG,KAAA,GAAQ,KAAA;AACpD,IAAA,MAAM,SAAS,MAAM,IAAA;AAAA,MACnB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,yBAAA,CAA0B;AAAA,UAC7B,MAAA,EAAQ,iBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,KAAA,EAAO,EAAA;AAAA,UACP,OAAA;AAAA,UACA,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,OAAA,EAAS,KAAK,UAAA;AAAW,SAC1B;AAAA;AACH,KACF;AAEA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA;AAGhB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,KAAA,EAAe;AACzB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3B,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,KAC/B,MAAO;AACL,MAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,QAAO,EAAG;AACrD,QAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,MAAA,EAAO,EAAG;AAC/B,UAAA,IAAI,IAAA,CAAK,UAAU,KAAA,EAAO;AACxB,YAAA,OAAO,IAAA;AAAA;AACT;AACF;AACF;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EAEU,cAAA,CAAe,OAAe,QAAA,EAA6B;AACnE,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA,EAAG,GAAG,QAAA,EAAS;AAAA,KACtE,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC/C,QAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAA,EAAK,OAAA,KAAY;AACjC,UAAA,IAAI,GAAA,CAAI,UAAU,KAAA,EAAO;AACvB,YAAA,QAAA,CAAS,IAAI,OAAA,EAAS,EAAE,GAAG,GAAA,EAAK,GAAG,UAAU,CAAA;AAAA;AAC/C,SACD,CAAA;AAAA,OACF,CAAA;AAAA;AACH;AACF,EAEU,eAAe,KAAA,EAAe;AACtC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3B,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,KAC/B,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC/C,QAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAA,EAAK,OAAA,KAAY;AACjC,UAAA,IAAI,GAAA,CAAI,UAAU,KAAA,EAAO;AACvB,YAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA;AACzB,SACD,CAAA;AAAA,OACF,CAAA;AAAA;AACH;AACF,EAEO,UAAU,IAAA,EAAc;AAC7B,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,UAAA,GAAa,KAAA;AAAA;AAG1C,IAAA,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,MAAA;AAAA,MACtD,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS;AAAA,KACpB;AAAA;AACF,EAEO,UAAA,GAAa;AAClB,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,UAAA,GAAa,KAAA;AAAA;AAG1C,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,EAAC;AAC9B,IAAA,IAAA,CAAK,MAAM,cAAA,GAAiB,IAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,CAAM,cAAc,EAAC;AAAA;AAC5B,EAEO,UAAA,GAAa;AAClB,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,UAAA,GAAa,KAAA;AAAA;AAG1C,IAAA,IAAA,CAAK,KAAA,CAAM,iBAAA,GAAoB,IAAA,CAAK,WAAA,EAAY,CAAE,IAAA;AAAA,MAChD,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM;AAAA,QAEtB,GAAA,GACA,IAAA,CAAK,WAAA,EAAY,CAAE,CAAC,CAAA,EAAG,EAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,EAAC;AAC9B,IAAA,IAAA,CAAK,MAAM,cAAA,GAAiB,IAAA;AAAA;AAC9B,EAEA,MAAM,iBAAA,CAAkB,EAAA,EAAY,oBAAA,GAAuB,IAAA,EAAM;AAC/D,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAChC,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GAAI,CAAA;AAAG,MAAA,OAAO,IAAA;AAEnC,IAAA,MAAM,SAAS,MAAM,IAAA;AAAA,MAInB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,8BAAA,CAA+B;AAAA,UAClC,MAAA,EAAQ,mBAAA;AAAA,UACR,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,UACzB,QAAQ,IAAA,CAAK;AAAA,SACd;AAAA;AACH,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,EAAQ,IAAA,EAAM,OAAA,KAAY,IAAA;AAC3C,IAAA,IACE,CAAC,QAAA,IACD,MAAA,EAAQ,IAAA,EAAM,GAAA,IACd,MAAA,CAAO,IAAA,CAAK,GAAA,KAAQ,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,kBAAA,EAC9C;AACA,MAAA,IAAA,CAAK,MAAA,CAAO;AAAA,QACV,OAAA,EAAS,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,qBAAA,CAAsB,KAAA,CAAM,GAAG,EAAE,CAAC,CAAC,CAAA,EAAA,EACvE,MAAA,CAAO,KAAK,GACd,CAAA,CAAA,CAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAO,OAAO,IAAA,CAAK,GAAA;AAAA;AAErB,IAAA,IAAI,CAAC,QAAA,IAAY,oBAAA,IAAwB,CAAE,MAAM,KAAK,QAAA,EAAS;AAC7D,MAAA,IAAA,CAAK,MAAA,CAAO;AAAA,QACV,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,sBAAA;AAAA,QACnC,IAAA,EAAM;AAAA,OACP,CAAA;AAEH,IAAA,OAAO,QAAA;AAAA;AACT,EAEO,oBAAoB,SAAA,EAAmB;AAC5C,IAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,SAAA;AAAA;AACjC,EAEA,MAAa,eAAA,CAAgB,QAAA,GAAmB,EAAC,EAAG;AAClD,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA;AAAA;AAEF,IAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,CAAM,cAAA;AAClC,IAAA,MAAM,MAAM,MAAM,IAAA;AAAA,MAChB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,4BAAA,CAA6B;AAAA,UAChC,MAAA,EAAQ,iBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,OAAO,cAAA,EAAgB,KAAA;AAAA,UACvB,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,WACE,QAAA,CAAS,MAAA,KAAW,CAAA,GAAI,cAAA,EAAgB,aAAa,GAAA,GAAM,GAAA;AAAA,UAC7D,QAAQ,CAAC,cAAA;AAAA,UACT,mBAAA,EAAqB,IAAA;AAAA,UACrB,yBAAyB,IAAA,CAAK,IAAA;AAAA,UAC9B,uBAAuB,IAAA,CAAK,qBAAA;AAAA,UAC5B,OAAA,EAAS,KAAK,UAAA;AAAW,SAC1B;AAAA;AACH,KACF;AACA,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,WAAW,YAAA,CAAa,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU,UAAU,OAAO,CAAA;AACpE,MAAA,MAAM,UAAA,GAAa,CAAC,CAAC,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM,GAAG,CAAA;AAE9D,MAAA,IAAA,CAAK,MAAM,YAAA,GAAe,QAAA;AAC1B,MAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,UAAA,GAAa,GAAA,GAAM,QAAA,CAAS,CAAC,CAAA,CAAE,EAAA;AAE9D,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,MAAM,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA;AAEtC,MAAA,OAAO,GAAA,EAAK,IAAA,EAAM,QAAA,CAAS,IAAA,KAAS,+BAChC,IAAA,GACA,KAAA;AAAA,KACN,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAAA;AACjC;AACF,EAEA,MAAa,cAAA,CACX,KAAA,EACA,eAAA,EACA;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA;AAAiB,MAAA;AAC3B,IAAA,MAAM,MAAM,MAAM,IAAA;AAAA,MAGhB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,2BAAA,CAA4B;AAAA,UAC/B,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,UACzB,MAAA,EAAQ,gBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,OAAO,KAAA,EAAO,KAAA;AAAA,UACd,WAAW,KAAA,EAAO,SAAA;AAAA,UAClB,QAAA,EAAU,KAAK,iCAAA,CAAkC;AAAA,YAC/C,QAAA,EAAU,KAAK,eAAA,EAAiB;AAAA,WACjC,CAAA;AAAA,UACD,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,GAAG;AAAA,SACJ;AAAA;AACH,KACF;AAEA,IAAA,IAAI,GAAA,EAAK,IAAA,IAAQ,KAAA,EAAO,SAAA,EAAW;AACjC,MAAA,MAAM,cAAA,GACJ,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA;AAAA,QACtB,CAAC,OAAA,KAAY,OAAA,CAAQ,EAAA,KAAO,KAAA,CAAM;AAAA,SACjC,IAAA,IAAQ,KAAA;AAEb,MAAA,IAAA,CAAK,eAAA,CAAiB,KAAA,CAAM,QAAA,CAAS,aAAA,GAAgB,YAAA;AAAA,QACnD,IAAI,IAAA,CAAK;AAAA,OACX;AACA,MAAA,IAAA,CAAK,eAAA,CAAiB,KAAA,CAAM,QAAA,CAAS,cAAA,GAAiB,cAAA;AAAA;AACxD;AACF,EAEA,MAAa,gBAAA,CACX,gBAAA,EACA,IAAA,EACkB;AAClB,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,YAAY,gBAAA,GAAmB,KAAA;AAAA,MAC/B;AAAA,KACF,GAAI,QAAQ,EAAC;AACb,IAAA,MAAM,YAAA,GACJ,gBAAA,IACA,CAAC,CAAC,IAAA,CAAK,KAAA,CAAM,cAAA,IACb,CAAC,CAAC,IAAA,CAAK,eAAA,EAAiB,KAAA,CAAM,iBAAA;AAEhC,IAAA,MAAM,OAAA,GAAU,KAAK,mBAAA,EAAoB;AAEzC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,OAAA,EAAS;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO;AAAA,QACV,SAAS,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,SAAS,EAAE,qBAAqB,CAAA,EAAA,EAAK,gBAAA,CAC7D,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAA,CAC7B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAO,KAAA;AAAA;AAET,IAAA,MAAM,eAAe,IAAA,CAAK,0BAAA;AAAA,MACxB,IAAA,CAAK,wBAAA;AAAA,QACH,IAAA,CAAK,mBAAA;AAAA,UACH,IAAA,CAAK,mBAAA;AAAA,YACH,IAAA,CAAK,qBAAA,CAAsB,gBAAA,EAAkB,IAAI,CAAA;AAAA,YACjD;AAAA,WACF;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,YAAA,CAAa,OAAA;AAAA,QAAQ,CAAC,IAAA,KACpB,QAAA,CAAS,OAAO,gBAAA,EAAkB,IAAA,EAAM,KAAK,IAAI;AAAA,OACnD;AAEA,MAAA,MAAM,IAAA;AAAA,QACJ,IAAA,CAAK,SAAA;AAAA,QACL,WAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL,KAAK,6BAAA,CAA8B;AAAA,YACjC,MAAA,EAAQ,kBAAA;AAAA,YACR,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,KAAA;AAAA,YAClC,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,YACzB,UAAU,IAAA,CAAK,IAAA;AAAA,YACf,MAAA,EAAQ,CAAA,qBAAA,EAAwB,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,YACzC,MAAA,EAAQ,CAAC,IAAA,CAAK,eAAA;AAAA,YACd,SAAA,EAAW,KAAK,KAAA,CAAM,iBAAA;AAAA,YACtB;AAAA,WACD;AAAA,SACH;AAAA,QACA;AAAA,UACE,QAAA,EAAU,QAAA;AAAA,UACV,WAAA,EAAa;AAAA,YACX,gBAAA,EAAkB,CAAC,EAAA,KAChB,IAAA,CAAK,KAAA,CAAM,QAAA,GACT,EAAA,CAAG,MAAA,GAAS,GAAA,IAAA,CAAS,EAAA,CAAG,KAAA,IAAS,EAAA,CAAG,MAAA,IAAU,CAAA;AAAA;AACrD;AACF,OACF;AACA,MAAA,MAAM,8BAAA,GACJ,KAAK,iCAAA,CAAkC;AAAA,QACrC,MAAA,EAAQ,sBAAA;AAAA,QACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ,IAAA;AAAA,QACR,QAAQ,IAAA,CAAK;AAAA,OACd,CAAA;AAEH,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,MAAM,oBAAoB,YAAY;AAEpC,QAAA,OAAO,IAAI,OAAA,CAAQ,OAAO,OAAA,KAAY;AACpC,UAAA,KAAA,IAAS,CAAA;AACT,UAAA,IAAI,UAAU,EAAA,EAAI;AAChB,YAAA,IAAA,CAAK,MAAA,CAAO;AAAA,cACV,OAAA,EACE,2DAAA;AAAA,cACF,IAAA,EAAM;AAAA,aACP,CAAA;AACD,YAAA,OAAA,CAAQ,KAAK,CAAA;AACb,YAAA;AAAA;AAEF,UAAA,MAAM,WAAW,MAAM,IAAA;AAAA,YACrB,IAAA,CAAK,SAAA;AAAA,YACL,WAAA,CAAY,IAAA,CAAK,SAAA,EAAW,8BAA8B;AAAA,WAC5D;AACA,UAAA,IAAI,QAAA,IAAY,SAAS,IAAA,EAAM;AAC7B,YAAA,MAAM,WAAA,GACJ,YAAA;AAAA,cACE,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,OAAA,IAC1B,SAAS,IAAA,EAAM,aAAA,EAAe,SAAA,IAC9B,QAAA,CAAS,MAAM,UAAA,EAAY,SAAA,IAC3B,QAAA,CAAS,IAAA,CAAK,SAAS,QAAA,EAAU;AAAA,cACnC,MAAA,GAAS,CAAA,IAAK,CAAC,CAAC,QAAA,CAAS,KAAK,QAAA,CAAS,eAAA;AAE3C,YAAA,MAAM,aAAA,GAAgB,YAAA;AAAA,cACpB,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU;AAAA,cACjC,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,SAAS,CAAA;AAC9C,YAAA,IAAI,aAAA;AACF,cAAA,IAAA,CAAK,OAAO,EAAE,OAAA,EAAS,cAAc,KAAA,EAAO,IAAA,EAAM,WAAW,CAAA;AAE/D,YAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAA;AACvC,YAAA,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AACtB,YAAA,IAAI,WAAA,EAAa;AACf,cAAA,OAAA,CAAQ,KAAK,CAAA;AACb,cAAA;AAAA;AAGF,YAAA,IAAI,WAAW,8BAAA,EAAgC;AAC7C,cAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,cAAA;AAAA;AAEF,YAAA,IAAI,UAAU,EAAA,EAAI;AAChB,cAAA,OAAA,CAAQ,WAAW,8BAA8B,CAAA;AAAA;AAEnD,YAAA,UAAA,CAAW,MAAM;AACf,cAAA,iBAAA,EAAkB,CACf,KAAK,OAAO,CAAA,CACZ,MAAM,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,eAC5B,GAAG,CAAA;AAAA,WACR,MAAO;AACL,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACf,SACD,CAAA;AAAA,OACH;AACA,MAAA,MAAM,oBAAA,GAAuB,MAAM,iBAAA,EAAkB;AAErD,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAEtB,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,KAAA,CAAM,eAAA,IAAmB,EAAC,EAAG,GAAA;AAAA,UAC/C,CAAC,SAAS,IAAA,CAAK;AAAA,SACjB;AACA,QAAA,MAAM,WAAW,WAAA,CAAY,SAAA;AAAA,UAC3B,KAAK,8BAAA,CAA+B;AAAA,YAClC,mBAAA,EAAqB,IAAA;AAAA,YACrB,qBAAA,EAAuB,IAAA,CAAK,qBAAA,EAAuB,QAAA,EAAS;AAAA,YAC5D,yBAAyB,IAAA,CAAK,IAAA;AAAA,YAC9B,OAAA,EAAS,aAAa,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,YAC3D;AAAA,WACD,CAAA;AAAA,UACD,EAAE,aAAa,QAAA;AAAS,SAC1B;AAEA,QAAA,MAAM,eAAe,MAAM,IAAA;AAAA,UACzB,IAAA,CAAK,SAAA;AAAA,UACL,WAAA;AAAA,YACE,IAAA,CAAK,SAAA;AAAA,YACL,KAAK,gCAAA,CAAiC;AAAA,cACpC,MAAA,EAAQ,qBAAA;AAAA,cACR,UAAU,IAAA,CAAK,IAAA;AAAA,cACf,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,KAAA;AAAA,cAClC,MAAA,EAAQ,CAAC,IAAA,CAAK,eAAA;AAAA,cACd,OAAA,EAAS,KAAK,UAAA;AAAW,aAC1B;AAAA,WACH;AAAA,UACA;AAAA,YACE,QAAA,EAAU,SAAS,QAAA;AAAS;AAC9B,SACF;AAEA,QAAA,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAEtB,QAAA,IAAI,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS;AACpD,UAAA,MAAM,qBAAA,GAAwB,YAAA;AAAA,YAC5B,YAAA,CAAa,IAAA,CAAK,QAAA,EAAU,SAAA,EAAW;AAAA,WACzC;AAEA,UAAA,IAAA,CAAK,MAAM,eAAA,GAAkB;AAAA,YAC3B,GAAI,IAAA,CAAK,KAAA,CAAM,eAAA,IAAmB,EAAC;AAAA,YACnC,GAAG,qBAAA,CACA,GAAA;AAAA,cAAI,CAAC,YACJ,CAAC,GAAG,KAAK,KAAA,CAAM,eAAA,EAAiB,GAAG,gBAAgB,CAAA,CAAE,IAAA;AAAA,gBACnD,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,OAAA,CAAQ;AAAA;AACtC,cAED,MAAA,CAAO,CAAC,OAAA,KAA6B,CAAC,CAAC,OAAO;AAAA,WACnD;AACA,UAAA,IAAA,CAAK,MAAM,QAAA,GAAW,GAAA;AAEtB,UAAA,IAAI,IAAA,CAAK,eAAA;AACP,YAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,iBAAA,GAAoB,IAAA;AAEjD,UAAA,IAAA,CAAK,MAAA,CAAO;AAAA,YACV,IAAA,EAAM,SAAA;AAAA,YACN,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,WACpC,CAAA;AACD,UAAA,IACE,uBAAA;AAAA,YACE,IAAA,CAAK,SAAA;AAAA,YACL,KAAK,WAAA,CAAY;AAAA,WACnB,EACA;AACA,YAAA,IAAI,MAAA,IAAU,eAAA;AACZ,cAAA,KAAK,IAAA,CAAK,gBAAA,CAAiB,EAAE,MAAA,EAAQ,iBAAiB,CAAA;AAAA;AACnD,cAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA;AAClC;AACF;AAEF,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,GAAA;AACtB,MAAA,OAAO,IAAA;AAAA,KACT,MAAO;AACL,MAAA,OAAO,KAAA;AAAA;AACT;AACF,EAEA,MAAM,gBAAgB,KAAA,EAAe;AACnC,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,MAAM,kBAAkB,YAAY;AAClC,QAAA,MAAM,WAAW,MAAM,IAAA;AAAA,UACrB,IAAA,CAAK,SAAA;AAAA,UACL,WAAA;AAAA,YACE,IAAA,CAAK,SAAA;AAAA,YACL,KAAK,4BAAA,CAA6B;AAAA,cAChC,MAAA,EAAQ,wBAAA;AAAA,cACR,KAAA;AAAA,cACA,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,aACpC;AAAA;AACH,SACF;AACA,QAAA,IACE,UAAU,IAAA,EAAM,MAAA,KAAW,QAC3B,QAAA,EAAU,IAAA,EAAM,WAAW,MAAA,EAC3B;AACA,UAAA,IAAI,EAAE,QAAQ,CAAA,EAAG;AACf,YAAA,UAAA,CAAW,MAAM,KAAK,eAAA,EAAgB,EAAG,GAAI,CAAA;AAAA,WAC/C,MAAO;AACL,YAAA,IAAA,CAAK,MAAA,CAAO;AAAA,cACV,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,aACpC,CAAA;AACD,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACf,SACF,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AACd,OACF;AACA,MAAA,KAAK,eAAA,EAAgB;AAAA,KACtB,CAAA;AAAA;AACH,EAEA,MAAM,eAAe,IAAA,EAAyB;AAC5C,IAAA,IAAI,GAAA,GAAM,IAAA;AACV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,CAAA;AACxB,MAAA,GAAA,GAAM,MAAM,GAAA;AAAA,QACV,IAAA,CAAK,SAAA;AAAA,QACL,WAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL,KAAK,2BAAA,CAA4B;AAAA,YAC/B,MAAA,EAAQ,cAAA;AAAA,YACR,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,IAAA,EAAM,KAAA;AAAA,YACN,MAAA,EAAQ,IAAA;AAAA,YACR,QAAQ,IAAA,CAAK,IAAA;AAAA,YACb,KAAA,EAAO;AAAA,WACR;AAAA;AACH,OACF;AACF,IAAA,OAAO,GAAA;AAAA;AACT,EAEA,MAAM,aAAa,EAAA,EAAY;AAC7B,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA;AAAA;AAGF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAChC,IAAA,IAAK,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,KAAK,MAAO,IAAA,EAAM;AACvD,MAAA,MAAM,SAAS,MAAM,IAAA;AAAA,QACnB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL,KAAK,yBAAA,CAA0B;AAAA,YAC7B,MAAA,EAAQ,sBAAA;AAAA,YACR,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,QAAQ,IAAA,CAAK,IAAA;AAAA,YACb,MAAA,EAAQ;AAAA,WACT;AAAA;AACH,OACF;AACA,MAAA,IAAI,MAAA,EAAQ,MAAM,QAAA,EAAU;AAC1B,QAAA,MAAM,eAAe,CAAA,EAAG,SAAA,CAAU,KAAK,SAAS,CAAA,CAAE,aAAa,CAAA,EAC7D,MAAA,EAAQ,MAAM,QAChB,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,EAAI,KAAK,IAAA,IAAQ,IAAA,CAAK,WAAW,EAAE,CAAA,CAAA;AAEjD,QAAA,MAAM,yBAAyB,MAAM;AACnC,UAAA,IAAA,CAAK,MAAA,CAAO;AAAA,YACV,IAAA,EAAM,SAAA;AAAA,YACN,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,wBAAA;AAAA,YACnC,KAAA,EAAO,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,WAClC,CAAA;AAAA,SACH;AAEA,QAAC,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,eAAA,GAA0B,IAAA;AACrD,QACE,SAAA,CAAU,KAAK,SAAS,CAAA,CAAE,MAC1B,MAAA,CAAO,MAAA,CAAO,aAAa,iBAAA,GAAoB,GAAA;AAEjD,QAAA,MACE,UAAU,IAAA,CAAK,SAAS,EAAE,KAAA,CAC1B,MAAA,CAAO,OAAO,UAAA,CAAW,uBAAA;AAAA,UACzB,YAAA;AAAA,UACA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,aAAA;AAAA,UAC1B,sBAAA;AAAA,UACA,IAAA;AAAA,UACA,SAAA;AAAA,UACA,kBAAA;AAAA;AAAA,UACA,EAAA;AAAA;AAAA,UACA;AAAA,SACF;AAAA;AACF;AACF;AACF,EAEA,MAAM,eAAA,CAAgB,MAAA,EAAgB,OAAA,EAAiC;AACrE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA;AAEX,IAAA,IACE,SAAA,CAAU,KAAK,SAAS,CAAA,CAAE,cACzB,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAEtC,MAAA,MAAM,WAAA;AAAA,QACJ,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,kBAAA;AAAA,UACR,OAAO,IAAA,CAAK,aAAA;AAAA,UACZ;AAAA,SACD;AAAA,OACH;AAAA;AACJ,EAEA,MAAM,gBAAA,CAAiB,EAAA,EAAY,OAAA,EAAkB;AACnD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAChC,IAAA,IACE,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,IACzB,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,EACtC;AACA,MAAA,MAAM,WAAA;AAAA,QACJ,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,kBAAA;AAAA,UACR,QAAQ,IAAA,CAAK,IAAA;AAAA,UACb,OAAO,IAAA,CAAK,aAAA;AAAA,UACZ,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,UACzB;AAAA,SACD;AAAA,OACH;AAAA;AACF;AACF,EAEA,MAAM,kBAAA,CAAmB,EAAA,EAAY,MAAA,EAAiB;AACpD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAK,KAAK,CAAA;AACxD,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAM,SAAS,MAAM,IAAA;AAAA,QACnB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL,KAAK,2BAAA,CAA4B;AAAA,YAC/B,MAAA,EAAQ,oBAAA;AAAA,YACR,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,MAAA,EAAQ,IAAA;AAAA,YACR,QAAQ,IAAA,CAAK,IAAA;AAAA,YACb,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,YACzB;AAAA,WACD;AAAA;AACH,OACF;AAEA,MAAA,IAAI,IAAA,CAAK,4BAAA,CAA6B,MAAA,EAAQ,IAAI,CAAA;AAChD,QAAA,IAAA,CAAK,eAAe,EAAE,CAAA;AAAA;AAC1B;AACF,EAEA,MAAM,QACJ,IAAA,EACA,IAAA,GAII,EAAE,QAAA,EAAU,IAAG,EACnB;AACA,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,OAAO,IAAI,CAAA;AAC/D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,KAAK,KAAK,CAAA;AAGtD,IAAA,IAAI,EAAE,cAAc,IAAA,IAAQ,QAAA,CAAA;AAAW,MAAA;AAGvC,IAAA,IAAA,CAAK,MAAM,cAAA,GAAiB,IAAA;AAE5B,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,cAAA,EAAgB;AACpC,QAAA,IAAA,CAAK,kBAAkB,IAAI,uBAAA;AAAA,UACzB,IAAA;AAAA,UACA,IAAA,CAAK,WAAA;AAAA,UACL;AAAA,YACE,WAAA,EAAa;AAAA;AACf,SACF;AACA,QAAA,IAAA,CAAK,gBAAgB,SAAA,EAAU;AAAA;AACjC,KACF;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChD,MAAA,gBAAA,EAAiB;AAAA;AAGnB,IAAA,MAAM,KAAK,eAAA,EAAgB;AAE3B,IAAA,IAAI,IAAA,CAAK,SAAA;AAAW,MAAA,IAAA,CAAK,KAAA,CAAM,oBAAoB,IAAA,CAAK,SAAA;AAExD,IAAA,MAAM,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAE/B,IAAA,MAAM,cAAc,CAAC,EAAE,KAAK,QAAA,IAAY,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA,CAAA;AAE/D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAK,QAAA,EAAW;AAAA,QACtD,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,iBAAiB,IAAA,CAAK,eAAA;AAAA,QACtB,WAAA,EAAa,KAAA;AAAA,QACb,UAAA,EAAY;AAAA,OACb,CAAA;AAGD,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,gBAAA,EAAiB;AAAA;AACnB,KACF,MAAO;AACL,MAAA,MAAM,KAAK,cAAA,CAAe;AAAA,QACxB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,WAAW,IAAA,CAAK;AAAA,OACjB,CAAA;AAAA;AACH;AACF,EAEA,MAAM,gBAAgB,IAAA,EAAyB;AAC7C,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AACrE,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,MAAM;AAAA,QACJ,IAAA,EAAM,EAAE,OAAA,EAAQ;AAAA,QAChB;AAAA,UACE,YAAA,CAAa,QAAA;AAEjB,MAAA,MAAM,cAAA,GACJ,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,EAAA,KAAO,IAAA,CAAK,SAAS,CAAA,EACnE,IAAA,IAAQ,KAAA;AACd,MAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,gBAAiB,KAAA,GAAQ;AAAA,UAC5B,aAAa,OAAA,CAAQ,OAAA;AAAA,UACrB,WACE,OAAA,CAAQ,SAAA,KAAc,KAAK,MAAA,GAAY,MAAA,CAAO,QAAQ,SAAS,CAAA;AAAA,UACjE,SAAS,OAAA,CAAQ,aAAA;AAAA,UACjB,WAAA,EAAa;AAAA,YACX,cAAc,OAAA,CAAQ,cAAA;AAAA,YACtB,KAAA,EAAO,YAAA;AAAA,cACL,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa;AAAA,aAC1C,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY;AACjB,cAAA,MAAM,YAAA,GAAkC;AAAA,gBACtC,SAAA,EAAW,QAAQ,QAAA,KAAa,GAAA;AAAA,gBAChC,QAAQ,OAAA,CAAQ,EAAA;AAAA,gBAChB,WAAW,OAAA,CAAQ;AAAA,eACrB;AACA,cAAA,OAAO,YAAA;AAAA,aACR,CAAA;AAAA,YACD,KAAA,EAAO,YAAA;AAAA,cACL,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa;AAAA,aAC1C,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY;AACjB,cAAA,MAAM,YAAA,GAAkC;AAAA,gBACtC,SAAA,EAAW,QAAQ,QAAA,KAAa,GAAA;AAAA,gBAChC,QAAQ,OAAA,CAAQ,EAAA;AAAA,gBAChB,UAAU,OAAA,CAAQ;AAAA,eACpB;AACA,cAAA,OAAO,YAAA;AAAA,aACR;AAAA,WACH;AAAA,UACA,YAAY,OAAA,CAAQ,UAAA;AAAA,UACpB,YAAA,EAAc,KAAA;AAAA,UACd,iBAAA,EAAmB,IAAA;AAAA,UACnB,QAAA,EAAU;AAAA,YACR,aAAA,EAAe,YAAA,CAAa,SAAA,EAAW,QAAQ,CAAA;AAAA,YAC/C,mBAAmB,EAAC;AAAA,YACpB;AAAA;AACF,SACF;AAAA;AACF;AACF;AACF,EAEA,MAAa,aAAa,EAAA,EAAY;AACpC,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,eAAA;AAAA,MAC9B,EAAE,eAAe,EAAA,EAAG;AAAA,MACpB;AAAA,KACF;AACA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,OAAA;AAC5C,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,YAAA,CAAa,QAAA,CAAS,IAAA;AAE9C,MAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,SAAS,CAAA;AAC3C,QAAA,IAAA,CAAK,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AAC9C,QAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,WAAA,GAAc,QAAA,CAAS,OAAA;AAClD,QAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,UAAA,GAAa,QAAA,CAAS,UAAA;AACjD,QAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,WAAA,GAAc;AAAA,UACvC,OAAO,YAAA,CAAa,WAAA,EAAa,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAChD,YAAA,OAAO;AAAA,cACL,QAAQ,CAAA,CAAE,EAAA;AAAA,cACV,UAAU,CAAA,CAAE,IAAA;AAAA,cACZ,SAAA,EAAW,EAAE,QAAA,KAAa;AAAA,aAC5B;AAAA,WACD,CAAA;AAAA,UACD,KAAA,EAAO;AAAA,YACL,GAAG,YAAA,CAAa,WAAA,EAAa,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5C,cAAA,OAAO;AAAA,gBACL,QAAQ,CAAA,CAAE,EAAA;AAAA,gBACV,WAAW,CAAA,CAAE,IAAA;AAAA,gBACb,SAAA,EAAW,EAAE,QAAA,KAAa;AAAA,eAC5B;AAAA,aACD;AAAA,WACH;AAAA,UACA,cAAc,QAAA,CAAS;AAAA,SACzB;AACA,QAAA,IAAA,CAAK,eAAA,CAAgB,aAAA,CAAc,QAAA,CAAS,SAAS,CAAA;AACrD,QAAA,IAAA,CAAK,gBAAgB,KAAA,CAAM,UAAA,GACzB,CAAC,YAAA,CAAa,SAAS,cAAA,CAAe,YAAA;AAAA;AAG1C,MAAA,KAAK,IAAA,CAAK,cAAA;AAAA,QACR,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAO,SAAA,EAAW,SAAS,SAAA,EAAU;AAAA,QACvD;AAAA,UACE,QAAA,EAAU;AAAA;AACZ,OACF;AAAA;AACF;AACF,EAEA,MAAM,cAAA,CAAe,EAAA,EAAY,MAAA,EAAiB;AAChD,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA;AAAA;AAGF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAEhC,IAAA,IAAK,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,KAAK,MAAO,IAAA,EAAM;AACvD,MAAA,MAAM,SAAS,MAAM,IAAA;AAAA,QACnB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL,KAAK,2BAAA,CAA4B;AAAA,YAC/B,MAAA,EAAQ,eAAA;AAAA,YACR,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,MAAA,EAAQ,IAAA;AAAA,YACR,QAAQ,IAAA,CAAK,IAAA;AAAA,YACb,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,YACzB;AAAA,WACD;AAAA;AACH,OACF;AAEA,MAAA,IAAI,MAAA,EAAQ,IAAA,EAAM,YAAA,KAAiB,MAAA,EAAW;AAC5C,QAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,EAAG;AACxB,UAAA,IAAA,CAAK,MAAM,KAAA,CAAM,EAAE,CAAA,CAAE,YAAA,GAAe,OAAO,IAAA,CAAK,YAAA;AAAA,SAClD,MAAO;AACL,UAAA,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC/C,YAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAA,EAAK,OAAA,KAAY;AACjC,cAAA,IAAI,GAAA,CAAI,UAAU,EAAA,EAAI;AACpB,gBAAA,QAAA,CAAS,IAAI,OAAA,EAAS;AAAA,kBACpB,GAAG,GAAA;AAAA,kBACH,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,YAAA,IAAgB;AAAA,iBAC7C,CAAA;AAAA;AACH,aACD,CAAA;AAAA,WACF,CAAA;AAAA;AACH;AACF;AACF;AACF;AAAA;AAAA;AAAA;AAAA,EAMA,yBAAA,GAA4B;AAC1B,IAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA;AAAG,MAAA;AACxB,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,aAAA;AAE1B,IAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA;AAAA,MAAO,CAAC,YAClC,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,KAAW,QAAQ,KAAK;AAAA,KAClD;AACA,IAAA,MAAM,GAAA,GAAA,CAAO,aAAA,CAAc,MAAA,GAAS,CAAA,GAAI,aAAA,GAAgB,KAAA,EACrD,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,CAAA,CACtC,KAAK,GAAG,CAAA;AAEX,IAAA,KAAK,WAAA;AAAA,MACH,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,sCAAA,CAAuC;AAAA,UAC1C,MAAA,EAAQ,kBAAA;AAAA,UACR,KAAA,EAAO,GAAA;AAAA,UACP,QAAQ,IAAA,CAAK;AAAA,SACd;AAAA,OACH;AAAA,MACA;AAAA,KACF;AAAA;AACF,EAEA,MAAM,iBAAiB,IAAA,EAGpB;AACD,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAgB,GAAI,QAAQ,EAAC;AAE7C,IAAA,MAAM,UAAA,GAAa,KAAK,KAAA,CAAM,iBAAA;AAC9B,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,eAAA,EAAiB,KAAA,CAAM,iBAAA;AACtD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,EAAiB,WAAA,IAAe,EAAA;AACrD,IAAA,MAAM,kBAAkB,IAAA,CAAK,WAAA,CAAY,iBACrC,GAAA,GACC,IAAA,CAAK,iBAAiB,YAAA,IAAgB,EAAA;AAC3C,IAAA,MAAM,SAAA,GAAY,KAAK,eAAA,EAAiB,SAAA;AACxC,IAAA,MAAM,UAAA,GAAa,KAAK,eAAA,EAAiB,UAAA;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,EAAiB,QAAA,IAAY,EAAC;AACpD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,EAAiB,YAAA,IAAgB,EAAC;AAE5D,IAAA,MAAM,mBACJ,IAAA,CAAK,eAAA,EAAiB,KAAA,CAAM,WAAA,CAAY,SAAS,EAAC;AAEpD,IAAA,MAAM,mBACJ,IAAA,CAAK,eAAA,EAAiB,KAAA,CAAM,WAAA,CAAY,SAAS,EAAC;AAEpD,IAAA,IAAI,WAAW,WAAA,CAAY,SAAA;AAAA,MACzB,KAAK,2BAAA,CAA4B;AAAA,QAC/B,UAAA;AAAA,QACA,OAAA;AAAA,QACA,eAAA;AAAA,QACA,EAAA,EAAI,IAAA,CAAK,qBAAA,EAAuB,QAAA,EAAS;AAAA,QACzC,OAAA,EAAS,KAAK,KAAA,CAAM,eAAA,CAAgB,IAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA;AAAA,QAC3D,SAAA,EAAW,MAAA;AAAA,QACX,cAAc,eAAA,EAAiB,YAAA;AAAA,QAC/B;AAAA,OACD,CAAA;AAAA,MACD,EAAE,aAAa,QAAA;AAAS,KAC1B;AAEA,IAAA,QAAA,GAAW,CAAA,EAAG,QAAQ,CAAA,EACpB,QAAA,CAAS,MAAA,GAAS,IAAI,GAAA,GAAM,EAC9B,CAAA,EAAG,IAAA,CAAK,oCAAA,CAAqC;AAAA,MAC3C,gBAAA;AAAA,MACA;AAAA,KACD,CAAC,CAAA,iBAAA,EAAoB,IAAA,CAAK,2CAAA;AAAA,MACzB;AAAA,KACD,CAAA,aAAA,EAAgB,IAAA,CAAK,iCAAA,CAAkC;AAAA,MACtD,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,QAAA,IAAY,EAAE;AAAA,KACvC,CAAC,CAAA,YAAA,EAAe,UAAA,IAAc,EAAE,CAAA,CAAA;AAEjC,IAAA,MAAM,SAAS,MAAM,IAAA;AAAA,MACnB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,6BAAA,CAA8B;AAAA,UACjC,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,UACzB,OAAO,iBAAA,GACH,iBAAA,CAAkB,KAAA,GAClB,IAAA,CAAK,MAAM,cAAA,EAAgB,KAAA;AAAA,UAC/B,MAAA,EAAQ,oBACJ,uBAAA,GACA,kBAAA;AAAA,UACJ,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,QAAA,EAAU,IAAA;AAAA,UACV,GAAI,iBAAA,GACA;AAAA,YACE,OAAO,iBAAA,CAAkB,KAAA;AAAA,YACzB,SAAA,EAAW,IAAA;AAAA,YACX,cAAA,EAAgB;AAAA,WAClB,GACA;AAAA,SACL;AAAA,OACH;AAAA,MACA;AAAA,QACE,QAAA,EAAU,SAAS,QAAA;AAAS;AAC9B,KACF;AAEA,IAAA,IAAI,MAAA,EAAQ,MAAM,QAAA,EAAU;AAC1B,MAAA,MAAM,YAAA,GAAe,EAAE,GAAG,IAAA,CAAK,MAAM,KAAA,EAAM;AAC3C,MAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,CAAM,cAAA;AAElC,MAAA,IAAI,cAAA,IAAkB,eAAe,IAAA,EAAM;AACzC,QAAA,OAAO,YAAA,CAAa,eAAe,IAAI,CAAA;AAAA;AAEzC,MAAA,MAAM,QAAA,GAA8C,YAAA;AAAA,QAClD,MAAA,CAAO,KAAK,QAAA,CAAS;AAAA,OACvB,CACG,GAAA;AAAA,QAAI,CAAC,OAAA,KACJ,IAAA,CAAK,mBAAA,CAAoB;AAAA,UACvB,GAAG,OAAA;AAAA,UACH,QAAA,EAAU,IAAA;AAAA,UACV,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACV;AAAA,OACH,CACC,MAAA,CAAO,CAAC,OAAA,KAAY,CAAC,aAAa,OAAA,CAAQ,KAAK,CAAC,CAAA,CAChD,MAAA,CAAO,CAAC,KAAK,OAAA,MAAa,EAAE,GAAG,GAAA,EAAK,CAAC,OAAA,CAAQ,KAAK,GAAG,OAAA,EAAQ,CAAA,EAAI,EAAE,CAAA;AAEtE,MAAA,IAAI,UAAU,eAAA,EAAiB;AAC7B,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,OAClE,MAAO;AACL,QAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAE,GAAG,YAAA,EAAc,GAAG,QAAA,EAAS;AAAA;AAEpD,MAAA,IAAA,CAAK,UAAA,EAAW;AAChB,MAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAE9B,MAAA,OAAO,IAAA;AAAA;AAET,IAAA,OAAO,KAAA;AAAA;AACT,EAEA,MAAM,oBAAA,GAAuB;AAC3B,IAAA,MAAM,SAAS,MAAM,IAAA;AAAA,MAGnB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,QAC1B,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,MAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAQ,IAAA;AAAA,QACR,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,WAAA;AAAA,QACpC,SAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,IAAA;AAAA,QACX,aAAA,EAAe,IAAA;AAAA,QACf,QAAQ,IAAA,CAAK;AAAA,OACd,CAAA;AAAA,MACD;AAAC,KACH;AAEA,IAAA,IAAI,MAAA,IAAU,OAAO,IAAA,EAAM;AACzB,MAAA,MAAM,uBACJ,YAAA,CAAa,MAAA,CAAO,KAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA;AAAA,QAClD,CAAC,IAAA,EAAM,EAAE,IAAA,EAAM,OAAM,MAAO,EAAE,GAAG,IAAA,EAAM,CAAC,IAAI,GAAG,OAAA,CAAQ,KAAK,CAAA,EAAE,CAAA;AAAA,QAC9D;AAAC,OACH;AAEF,MAAA,MAAM,YAAA,GAAoC,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,OAAA,GAC3D,aAAa,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,CAAE,GAAA;AAAA,QACzC,IAAA,CAAK;AAAA,UAEP,EAAC;AAEL,MAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAC5B,MAAA,MAAM,sBAA2C,EAAC;AAClD,MAAA,MAAM,mBAAwC,EAAC;AAC/C,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,OAAA,KAAY;AAChC,QAAA,IAAI,QAAQ,OAAA,KAAY,MAAA;AAAW,UAAA,mBAAA,CAAoB,KAAK,OAAO,CAAA;AAAA;AAC9D,UAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,OACnC,CAAA;AAED,MAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjC,QAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,CAAE,KAAK,CAAA,GAAI,CAAA;AAAA,OAC7B,CAAA;AACD,MAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,OAAA,KAAY;AACpC,QAAA,MAAM,eAAe,mBAAA,CAAoB,IAAA;AAAA,UACvC,CAAC,MAAA,KAAW,MAAA,CAAO,YAAA,KAAiB,OAAA,CAAQ;AAAA,SAC9C;AACA,QAAA,IAAI,YAAA,IAAgB,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAW;AACjD,UAAA,IAAA,CAAK,kBAAA;AAAA,YACH,OAAA;AAAA,YACA,YAAA,CAAa,KAAA;AAAA,YACb,MAAA,CAAO,QAAQ,OAAO;AAAA,WACxB;AAAA,SACF;AACE,UAAA,OAAA,CAAQ,IAAA;AAAA,YACN,CAAA,wDAAA,CAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA,WACF;AAAA,OACH,CAAA;AAAA;AACH;AACF,EAEA,MAAM,aAAa,EAAA,EAAY;AAC7B,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,UAAA,EAAY;AACxC,MAAA;AAAA;AAGF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAChC,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO;AAAA,QACV,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,0BAAA;AAAA,QACnC,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,CAAC,KAAK,YAAA,EAAc;AACxC,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,OAAO,KAAK,CAAA;AAC/D,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,EAAA;AAAA,QACA,OAAO,QAAA,KAAa,QAAA,GAChB,IAAA,CAAK,mBAAA,CAAoB;AAAA,UACvB,GAAG,IAAA;AAAA,UACH,WAAA,EAAa,QAAA;AAAA,UACb,IAAA,EAAM,IAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,QAAA,EAAU;AAAA,SACX,CAAA,GACD,EAAE,GAAG,MAAM,QAAA;AAAS,OAC1B;AAAA;AAGF,IAAA,MAAM,SAAS,MAAM,IAAA;AAAA,MAenB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA;AAAA,QACE,IAAA,CAAK,SAAA;AAAA,QACL,KAAK,yBAAA,CAA0B;AAAA,UAC7B,MAAA,EAAQ,cAAA;AAAA,UACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,UACzB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,IAAA,EAAM,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,MAAA;AAAA,UAC5B,MAAA,EAAQ,IAAA;AAAA,UACR,QAAQ,IAAA,CAAK;AAAA,SACd;AAAA;AACH,KACF;AAEA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,OAAA;AAC/C,MAAA,IAAI,UAAA;AACF,QAAA,IAAA,CAAK,cAAA;AAAA,UACH,UAAA,CAAW,KAAA;AAAA,UACX,KAAK,mBAAA,CAAoB;AAAA,YACvB,GAAG,IAAA;AAAA,YACH,GAAG,UAAA;AAAA,YACH,UAAU,UAAA,CAAW;AAAA,WACtB;AAAA,SACH;AAAA;AACJ;AACF,EAEU,6BAA6B,MAAA,EAAiB;AACtD,IAAA,OAEI,MAAA,EAaC,UAAU,IAAA,KAAS,mBAAA;AAAA;AAE1B,EAEO,kBAAA,CACL,IAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,EAAG;AAC1C,MAAA,IAAA,CAAK,MAAM,eAAA,CAAgB,GAAA,CAAI,KAAA,kBAAO,IAAI,KAAK,CAAA;AAAA;AAEjD,IAAA,IAAA,CAAK,MAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,EAAG,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA;AACzD,EA0FU,0BAAA,CACR,OACA,IAAA,EACQ;AACR,IAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,CAAM,cAAA;AAClC,IAAA,IAAI,cAAA;AAAgB,MAAA,OAAO,KAAA;AAE3B,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA;AAAA,MACpD,CAAC,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GAAI;AAAA,KACjC;AACA,IAAA,MAAM,gBAAwB,EAAC;AAC/B,IAAA,MAAM,mBAA2B,EAAC;AAClC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,EAAiB,KAAA,IAAS,QAAA;AAC7C,MAAA,MAAM,kBAAkB,IAAA,CAAK,KAAA,CAAM,gBAAgB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,MAAA,MAAM,oCAAoC,eAAA,GACtC,KAAA,CAAM,KAAK,eAAA,CAAgB,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,QACnC,CAAC,aAAa,OAAA,CAAQ,OAAA,IAAW,QAAQ,IAAA,MAAU,KAAA,CAAM,CAAC,CAAA,EAAG;AAAA,OAC/D,GACA,MAAA;AACJ,MAAA,IAAI,iCAAA;AAAmC,QAAA,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,KACpE;AACE,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,aAAA,CAAc,KAAK,CAAC,MAAA,KAAW,OAAO,OAAA,KAAY,IAAA,CAAK,IAAI,CAAA,EAAG;AAChE,UAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,SACzB;AAAO,UAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAAA,OAClC,CAAA;AACH,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,KAAK,KAAK,MAAA,CAAO;AAAA,QACf,SAAS,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,SAAS,EAAE,sBAAsB,CAAA,EAAA,EAAK,aAAA,CAC9D,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAA,CAC7B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,OAAO,gBAAA;AAAA;AAET,IAAA,OAAO,KAAA;AAAA;AACT,EAEU,yBAAyB,KAAA,EAAuB;AACxD,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACX,CAAA;AAAA,MACA,WAAA,CAAY,KAAK,QAAA,IAAY,IAAA,CAAK,MAAM,eAAA,EAAiB,MAAA,IAAU,IAAI,CAAC;AAAA,KAC1E;AAAA;AACF,EAEU,mBAAA,CACR,KAAA,EACA,YAAA,GAAe,IAAA,EACf,SAAA,EACQ;AACR,IAAA,MAAM,QAAA,GACJ,cAAc,MAAA,GACV,IAAA,CAAK,MAAM,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM;AACpC,MAAA,OAAO,OAAO,cAAc,QAAA,GACxB,CAAA,CAAE,OAAO,SAAA,GACT,CAAA,CAAE,OAAO,SAAA,CAAU,EAAA;AAAA,KACxB,CAAA,GACD,IAAA,CAAK,KAAA,CAAM,YAAA;AAEjB,IAAA,IAAI,CAAC,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,EAAE,CAAA,EAAG;AAC3C,MAAA,MAAM,oCAA4C,EAAC;AACnD,MAAA,MAAM,+BAAuC,EAAC;AAC9C,MAAA,IAAI,OAAA,GAAU,QAAA;AACd,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,MAAA,CAAO,CAAC,WAAA,KAAgB;AACjD,QAAA,MAAM,SAAA,GAAA,CAAa,YAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,IAAK,IAAI,CAAC,CAAA;AAE9D,QAAA,IAAI,SAAA,GAAY,IAAA;AAChB,QAAA,IACE,CAAC,QAAA,CAAS,IAAA,CAAK,CAAC,cAAA,KAAmB;AACjC,UAAA,IACE,CAAC,cAAA,CAAe,OAAA,CACb,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,CAAA,CACtC,SAAS,SAAA,CAAU,WAAA,EAAa,CAAA,EACnC;AACA,YAAA,OAAO,KAAA;AAAA;AAET,UAAA,OAAO,IAAA;AAAA,SACR,CAAA,EACD;AACA,UAAA,SAAA,GAAY,KAAA;AACZ,UAAA,iCAAA,CAAkC,KAAK,WAAW,CAAA;AAAA;AAEpD,QAAA,IACE,SAAA,IACA,CAAC,QAAA,CAAS,IAAA,CAAK,CAAC,cAAA,KAAwB;AACtC,UAAA,IAAI,MAAA,CAAO,cAAA,CAAe,OAAO,CAAA,GAAI,YAAY,IAAA,EAAM;AACrD,YAAA,OAAA,GAAU,MAAA,CAAO,eAAe,OAAO,CAAA;AACvC,YAAA,OAAO,KAAA;AAAA;AAET,UAAA,OAAO,IAAA;AAAA,SACR,CAAA,EACD;AACA,UAAA,4BAAA,CAA6B,KAAK,WAAW,CAAA;AAC7C,UAAA,SAAA,GAAY,KAAA;AAAA;AAGd,QAAA,IAAI,CAAC,SAAA;AAAW,UAAA,OAAO,KAAA;AAEvB,QAAA,OAAO,IAAA;AAAA,OACR,CAAA;AAED,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,QAAA,IAAI,iCAAA,CAAkC,SAAS,CAAA,EAAG;AAChD,UAAA,MAAM,aAAa,iCAAA,CAAkC,MAAA;AAAA,YACnD,CAAC,aAAa,OAAA,KAAY;AACxB,cAAA,IAAI,YAAY,MAAA,KAAW,CAAA;AAAG,gBAAA,OAAO,OAAA,CAAQ,IAAA;AAC7C,cAAA,OAAO,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,aACxC;AAAA,YACA;AAAA,WACF;AAEA,UAAA,YAAA,GAAe,WAAW,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,eAAe,kBAAkB,UAAU,CAAA,CAAA;AAAA;AAGjG,QAAA,IAAI,4BAAA,CAA6B,SAAS,CAAA,EAAG;AAC3C,UAAA,MAAM,aAAa,4BAAA,CAA6B,MAAA;AAAA,YAC9C,CAAC,aAAa,OAAA,KAAY;AACxB,cAAA,IAAI,YAAY,MAAA,KAAW,CAAA;AAAG,gBAAA,OAAO,OAAA,CAAQ,IAAA;AAC7C,cAAA,OAAO,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,aACxC;AAAA,YACA;AAAA,WACF;AAEA,UAAA,IAAI,aAAa,MAAA,GAAS,CAAA;AACxB,YAAA,YAAA,GAAe,GAAG,YAAY,CAAA,aAAA,CAAA;AAChC,UAAA,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,EAAG,aAAA;AAAA,YAC/B,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,aAAA;AAAA,YAC1B;AAAA,cACE,IAAA,EAAM,SAAS,UAAU,CAAA,CAAA;AAAA,cACzB,IAAA,EAAM,CAAA,EAAG,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA;AAC/B,WACD,CAAA,CAAA;AAAA;AAGH,QAAA,IAAI,aAAa,MAAA,GAAS,CAAA;AACxB,UAAA,IAAA,CAAK,MAAA,CAAO;AAAA,YACV,OAAA,EAAS,YAAA;AAAA,YACT,IAAA,EAAM;AAAA,WACP,CAAA;AAAA;AAGL,MAAA,OAAO,YAAA;AAAA;AAET,IAAA,OAAO,KAAA;AAAA;AACT,EAEU,mBAAA,CACR,OACA,IAAA,EACQ;AACR,IAAA,IAAI,IAAA,EAAM,MAAA;AAAQ,MAAA,OAAO,KAAA;AAEzB,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,eAAA;AAChC,IAAA,MAAM,uBAAuB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA;AAAA,MAC3D,CAAC,OAAA,KAAY,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,GAAI;AAAA,KACvC;AACA,IAAA,IAAI,wBAAA,GAA2B,EAAA;AAC/B,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,CAAC,OAAA,KAAY;AAC9C,MAAA,MAAM,UAAA,GACJ,YAAA,CAAa,SAAA,CAAU,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,OAAA,CAAQ,IAAI,CAAA,KAC7D,EAAA,IACF,oBAAA,CAAqB,SAAA;AAAA,QACnB,CAAC,MAAA,KAAW,MAAA,CAAO,OAAA,KAAY,OAAA,CAAQ;AAAA,OACzC,KAAM,EAAA;AAER,MAAA,IAAI,UAAA;AACF,QAAA,wBAAA,GAA2B,CAAA,EAAG,wBAAwB,CAAA,EACpD,wBAAA,CAAyB,MAAA,GAAS,IAAI,IAAA,GAAO,EAC/C,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA;AAEjB,MAAA,OAAO,CAAC,UAAA;AAAA,KACT,CAAA;AACD,IAAA,IAAI,yBAAyB,MAAA,GAAS,CAAA;AACpC,MAAA,IAAA,CAAK,MAAA,CAAO;AAAA,QACV,OAAA,EAAS,GAAG,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,sBAAsB,KAAK,wBAAwB,CAAA,CAAA;AAAA,QACzF,IAAA,EAAM;AAAA,OACP,CAAA;AACH,IAAA,OAAO,aAAA;AAAA;AACT,EAEU,qBAAA,CACR,OACA,IAAA,EAMQ;AAER,IAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,CAAM,cAAA;AAClC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,WAAW,KAAA,CAAM,MAAA;AAAA,QACrB,CAAC,YACC,OAAA,CAAQ,IAAA,KAAS,eAAe,OAAA,IAChC,OAAA,CAAQ,SAAS,cAAA,CAAe;AAAA,OACpC;AACA,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,MAAA,CAAO;AAAA,UACV,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,SACpC,CAAA;AAAA;AAEH,MAAA,OAAO,QAAA;AAAA;AAGT,IAAA,OAAO,KAAA;AAAA;AACT,EAUO,8BAAA,GAA0D;AAC/D,IAAA,OAAO;AAAA,MACL,mBAAA,EAAqB,IAAA;AAAA,MACrB,uBAAuB,IAAA,CAAK,qBAAA;AAAA,MAC5B,yBAAyB,IAAA,CAAK;AAAA,KAChC;AAAA;AACF,EAEO,+BAAA,GAA2D;AAChE,IAAA,OAAO;AAAA,MACL,mBAAA,EAAqB,IAAA;AAAA,MACrB,uBAAuB,IAAA,CAAK,qBAAA;AAAA,MAC5B,yBAAyB,IAAA,CAAK;AAAA,KAChC;AAAA;AAEJ;;;;;;;;AC9qDO,MAAM,sBAAsB,WAAA,CAAY;AAAA,EAC7C,WAAA,CACS,SAAA,EACA,IAAA,EACA,WAAA,EACA,KAAA,EACP;AACA,IAAA,KAAA;AAAA,MACE,SAAA;AAAA,MACA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,SAAA,CAAU,EAAE,CAAA,CAAA,EAAI,KAAA,CAAM,UAAA,CAAW,KAAA,IAAS,EAAE,CAAA,CAAA;AAAA,MAC7D,IAAA;AAAA,MACA;AAAA,KACF;AAVO,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAYT,IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AAwDA,IAAAA,eAAA,CAAA,IAAA,EAAA,mCAAA,EAAoC,CAClC,iBAAA,KAC4B;AAC5B,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,cAAA,EAAgB,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA;AAAA,QAEtC,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,8BAAA,EAA+B,CAAC;AAAA,MAC9B,mBAAA;AAAA,MACA,uBAAA;AAAA,MACA,qBAAA;AAAA,MACA,GAAG;AAAA,KACL,KAAwD;AACtD,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,cAAA,EAAgB,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA;AAAA,QACtC,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,gCAAA,EAAiC,CAAC;AAAA,MAChC,MAAA;AAAA,MACA,GAAG;AAAA,KACL,KAA+B;AAC7B,MAAA,OAAO;AAAA,QACL,GAAG,UAAA;AAAA,QACH,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAAC,UAAA,KAAwC;AACrE,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAI,KAAK,iBAAA,EAAkB;AACpD,MAAA,OAAO;AAAA,QACL,GAAG,UAAA;AAAA,QACH,KAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAAC;AAAA,MAC7B,QAAA;AAAA,MACA,GAAG;AAAA,KACL,KAA+B;AAC7B,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,OAAO,KAAA,EAAM,GAAI,KAAK,iBAAA,EAAkB;AAClE,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,SAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,+BAAA,EAAgC,CAC9B,iBAAA,KAC4B;AAC5B,MAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,iBAAA,EAAkB;AAC7C,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,QAAA,EAAU,SAAA;AAAA,QACV,cAAA,EAAgB,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA;AAAA,QACtC,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAAC;AAAA,MAC7B,EAAA;AAAA,MACA,GAAG;AAAA,KACL,KAAwD;AACtD,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,IAAA,CAAK,iBAAA,EAAkB;AAC/C,MAAA,OAAO;AAAA,QACL,GAAG,UAAA;AAAA,QACH;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAAC;AAAA,MAC7B,MAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAG;AAAA,KACL,KAA+B;AAC7B,MAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AACxD,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,2BAAA,EAA4B,CAAC,UAAA,KAAwC;AACnE,MAAA,OAAO;AAAA,QACL,GAAG,UAAA;AAAA,QACH,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE;AAAA,OACrC;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,2BAAA,EAA4B,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAM,KAA+B;AAC1E,MAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AAChE,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,GAAG,IAAA;AAAA,QACH,KAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACX;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,iCAAA,EAAiE,MAAM;AACrE,MAAA,OAAO;AAAA,QACL,qBACE,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA,KAAW,IAAI,IAAA,GAAO,MAAA;AAAA,QAChD,eAAA,EACE,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA,KAAW,CAAA,GAC/B,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,CAAC,CAAA,CAAE,EAAA,GAC3B,MAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QACZ,WAAA,EAAa;AAAA,OACf;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,gCAAA,EAAiC,OAAO;AAAA,MACtC,mBAAA,EAAqB,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA,KAAW,CAAA;AAAA,MACxD,iBAAiB,IAAA,CAAK;AAAA,KACxB,CAAA,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,2BAAA,EAA4B,CAAC;AAAA,MAC3B,MAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAG;AAAA,KACL,KAA+B;AAC7B,MAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AACxD,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAAC;AAAA,MAC7B,KAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAG;AAAA,KACL,KAA+B;AAC7B,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,MAAA,EAAQ,MAAA;AAAA,QAER,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,EAAA;AAAA,QAC7B,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,kCAAA,EAAmC,CACjC,iBAAA,KAC4B;AAC5B,MAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AACnD,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,QAAA,EAAU,KAAK,MAAA,EAAO;AAAA,QACtB,YAAA,EAAc,IAAA;AAAA,QACd,GAAG;AAAA,OACL;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,gCAAA,EAAiC,CAAC;AAAA,MAChC,mBAAA;AAAA,MACA,qBAAA;AAAA,MACA,uBAAA;AAAA,MACA,GAAG;AAAA,KACL,KAAwD;AACtD,MAAA,OAAO,EAAE,GAAG,UAAA,EAAY,aAAa,IAAA,CAAK,iBAAA,GAAoB,WAAA,EAAY;AAAA,KAC5E,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,6BAAA,EAA8B,CAC5B,iBAAA,KAC4B;AAC5B,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,GAAI,UAAU,IAAA,CAAK,SAAS,EAAE,YAAA,GAC1B,EAAE,WAAA,EAAa,IAAA,EAAK,GACpB,IAAA;AAAA,QACJ,GAAG,KAAK,iBAAA;AAAkB,OAC5B;AAAA,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAA,+BAAA,EAAgC,CAC9B,iBAAA,KAC4B;AAC5B,MAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO;AAC3B,MAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AACnD,MAAA,OAAO;AAAA,QACL,GAAG,iBAAA;AAAA,QACH,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU,MAAA;AAAA,QACV,MAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,KACF,CAAA;AA2CA,IAAAA,eAAA,CAAA,IAAA,EAAO,qBAAA,EAAsB,CAAC,IAAA,KAA2C;AACvE,MAAA,OAAO;AAAA,QACL,GAAG,mBAAA;AAAA,UACD,IAAA,CAAK,SAAA;AAAA,UACL,IAAA;AAAA,UACA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA,IAAW;AAAA,SACnC;AAAA,QACA,YAAA,EAAc,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,WAAW,IAAA,CAAK,YAAA;AAAA,QACpD,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,QACzB,OAAA,EAAS,KAAK,OAAA,IAAW;AAAA,OAC3B;AAAA,KACF,CAAA;AAxTE,IAAA,IAAA,CAAK,gBAAgB,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,qBAC3C,IAAA,GACA,MAAA;AAAA;AACN,EAEA,KAAA,GAAQ;AACN,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA,CAAW,WAAW,IAAA,CAAK,KAAA,CAAM,WAAW,KAAA,IAAS,CAAA;AAAA;AACzE,EACA,MAAA,GAAS;AACP,IAAA,OAAO,CAAA,WAAA,EAAc,IAAA,CAAK,KAAA,CAAM,OAAA,EAAQ,CAAE,UAAA,CAAW,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,OAAA,EAAQ,CAAE,WAAW,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,EAAO,CAAA,EAC9I,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,kBAAA,GAAqB,cAAc,EAC/D,CAAA,CAAA;AAAA;AACF,EAEU,yBAAyB,KAAA,EAAuB;AACxD,IAAA,MAAM,eAAA,GAAkB,KAAK,KAAA,CAAM,eAAA;AACnC,IAAA,IAAI,eAAA,CAAgB,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,MAAA;AACxC,MAAA,IAAI,gBAAgB,CAAC,CAAA,CAAE,SAAS,KAAA,CAAM,CAAC,EAAE,IAAA,EAAM;AAC7C,QAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,EAAC;AAAA,OAChC;AAAO,QAAA,OAAO,EAAC;AACjB,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA;AACzB,EAEU,iBAAA,GAAoB;AAC5B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,UAAA,CAAW,EAAA;AAAA,MACvC,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,UAAA,CAAW,SAAA;AAAA,MAC3C,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,EAAA;AAAA,MAC5B,KAAA,EAAO,KAAK,KAAA,EAAM;AAAA,MAClB,aAAa,IAAA,CAAK,aAAA;AAAA,MAClB,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,UAAA,CAAW;AAAA,KAC1C;AAAA;AACF,EAEA,6BACE,MAAA,EACS;AACT,IAAA,OAAO,CAAC,CAAC,MAAA,EAAQ,OAAA;AAAA;AACnB,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,gCAAA;AAAA;AACT,EAEA,mBAAA,GAAsB;AACpB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA;AAAA,QACjC,WAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,KAAK,MAAA,EAAO;AAAA,QACtB,YAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAA;AAAA,QACjC,MAAA,EAAQ,IAAA;AAAA,QACR,GAAG,KAAK,iBAAA;AAAkB;AAC5B,KACF;AAAA;AACF,EA0MA,MAAM,eAAA,CAAgB,MAAA,EAAgB,OAAA,EAAiC;AACrE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA;AAEX,IAAA,IACE,SAAA,CAAU,KAAK,SAAS,CAAA,CAAE,cACzB,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAEtC,MAAA,MAAM,WAAA;AAAA,QACJ,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,kBAAA;AAAA,UACR,OAAO,IAAA,CAAK,aAAA;AAAA,UACZ;AAAA,SACD;AAAA,OACH;AAAA;AACJ,EAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgB,OAAA,EAAiC;AACtE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACpC,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAK,GAAI,KAAK,iBAAA,EAAkB;AACnD,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA;AAEX,IAAA,IACE,SAAA,CAAU,KAAK,SAAS,CAAA,CAAE,cACzB,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAEtC,MAAA,MAAM,WAAA;AAAA,QACJ,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,UAAA;AAAA,UACR,OAAO,IAAA,CAAK,aAAA;AAAA,UACZ,OAAA,EAAS,kCAAA;AAAA,UACT,OAAA;AAAA,UACA,GAAG;AAAA,SACJ;AAAA,OACH;AAAA;AACJ,EAEA,oBAAA,GAAsC;AACpC,IAAA,OAAO,IAAA;AAAA;AACT,EAeA,MAAM,gBAAA,CACJ,gBAAA,EACA,IAAA,EACkB;AAClB,IAAA,OAAO,MAAM,KAAA,CAAM,gBAAA,CAAiB,gBAAA,EAAkB,IAAI,CAAA;AAAA;AAE9D;;;;;;;;AC9UO,MAAM,aAAa,kBAAA,CAAwC;AAAA,EAA3D,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAA0B,EAAC,CAAA;AAAA;AAAA,EAE3B,MAAM,KAAK,IAAA,EAAY;AACrB,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,IAAA,CAAK,WAAW,IAAI,aAAA;AAAA,MAClB,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,SAAA;AAAA,MAC1B;AAAA,QACE,qBAAA,EAAuB,CAAC,IAAA,CAAK,UAAA,CAAW,iBAAA;AAAA,QACxC,wBAAA,EACE,IAAA,CAAK,UAAA,CAAW,kBAAA,KAAuB,MAAA;AAAA,QACzC,mBAAA,EAAqB,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,mBAAA;AAAA,QACvC,gBAAA,EAAkB,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,oBAAA;AAAA,QACpC,mBAAA,EAAqB,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,sBAAA;AAAA,QACvC,gBAAA,EAAkB,KAAK,UAAA,CAAW,aAAA;AAAA,QAClC,SAAA,EAAW,KAAK,UAAA,CAAW,kBAAA;AAAA,QAC3B,cAAA,EAAgB,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,cAAA;AAAA,QAClC,UAAA,EAAY,KAAK,UAAA,CAAW,cAAA;AAAA,QAC5B,wBAAA,EAA0B,IAAA,CAAK,UAAA,CAAW,kBAAA,KAAuB,KAAA;AAAA,QACjE,WAAA,EAAa,IAAA,CAAK,UAAA,CAAW,WAAA,KAAgB,IAAA;AAAA,QAC7C,YAAA,EAAc,CAAC,IAAA,CAAK,UAAA,CAAW,eAAA;AAAA,QAC/B,eAAA,EAAiB,CAAC,IAAA,CAAK,UAAA,CAAW;AAAA,OACpC;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,cAAA,EAAgB,MAAM;AACrC,MAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,KACjB,CAAA;AAED,IAAA,IAAA,CAAK,SAAS,IAAA,EAAK;AACnB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,KAAA,GAAQG,eAAA,CAAc,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAIpD,MAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,QAAA,CAAS,MAAM,KAAA,GAAQ;AAAA,UAC1B,CAAC,SAAS,KAAK,GAAG,EAAE,GAAG,QAAA,EAAU,OAAA,EAAS,QAAA,CAAS,IAAA;AAAK,SAC1D;AACA,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,KAAM,CAAA,KAAM,GAAG,CAAA;AACpE,QAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,UAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,KAAM;AAClC,YAAA,IAAA,CAAK,QAAA,CAAS,kBAAA;AAAA,cACZ,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,KAAK,IAAA,EAAK;AAAA,cAC9B,QAAA,CAAS,KAAA;AAAA,cACT,OAAO,CAAC;AAAA,aACV;AAAA,WACD,CAAA;AAAA;AACH;AACF;AACF;AACF,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IACE,IAAA,CAAK,WAAW,QAAA,IAChB,IAAA,CAAK,WAAW,QAAA,IAChB,IAAA,CAAK,WAAW,gBAAA,EAChB;AACA,MAAA,OAAO,IAAA;AAAA,KACT,MAAA,IACE,IAAA,CAAK,UAAA,CAAW,QAAA,IAChB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,IAAU,CAAA,EACnD;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,kBAAA;AAAA,QAC1C,KAAK,IAAA,CAAK;AAAA,OACZ;AACA,MAAA,OAAO,KAAA;AAAA,eACE,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,cAAc,GAAA,EAAK;AACtD,MAAA,MAAM,cAAkC,MAAA,CAAO,OAAA;AAAA,QAC7CA,eAAA,CAAc,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,SAAS,IAAI;AAAA,OAIlD,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AAE5C,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAA,CAAK,QAAA,CAAS,MAAM,eAAA,CAAgB,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA;AAEpE,MAAA,MAAM,mBACJ,CAAC,IAAA,CAAK,UAAA,CAAW,QAAA,IACjB,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,SAC3B,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,MAAA,EAAQ,SAAS,CAAA,KAAM;AACzC,QAAA,MAAM,cAAA,GAAiB,QAAA,EAAU,GAAA,CAAI,MAAM,CAAA;AAC3C,QAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,UAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,sBAAA;AAAA,YAC1C,KAAK,IAAA,CAAK,SAAA;AAAA,YACV;AAAA,WACF;AAAA;AAEF,QAAA,OAAO,cAAA;AAAA,OACR,CAAA;AACH,MAAA,OAAO,gBAAA;AAAA;AAET,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAa,QAAA,CACX,SAAA,EACA,QAAA,EAGkB;AAClB,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,mBAAmB,GAAA,EAAa;AACrC,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,YAAA,GAAeA,eAAA,CAAc,GAAA,IAAO,EAAE,EAAE,CAAC,CAAA;AAE/C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAA,CAAK,QAAA,CAAS,MAAM,KAAA,GAAQ;AAAA,UAC1B,CAAC,YAAA,CAAa,KAAK,GAAG;AAAA,YACpB,GAAG,YAAA;AAAA,YACH,SAAS,YAAA,CAAa;AAAA;AACxB,SACF;AAAA,OACF,MAAO;AACL,QAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,EAAC;AAAA;AAC/B;AACF;AACF,EAEA,MAAa,gBAAA,GAAkC;AAC7C,IAAA,MAAM,KAAK,QAAA,CAAS,gBAAA;AAAA,MAClB,MAAA,CAAO,OAAO,IAAA,CAAK,QAAA,CAAS,MAAM,KAAK,CAAA,CAAE,CAAC,CAAA,CAAE;AAAA,KAC9C;AAAA;AAEJ;;AC/IO,SAAS,KAAA,CAAM,MAAA,EAAiB,aAAA,GAAgB,CAAA,EAAG;AACxD,EAAA,MAAM,YAAA,GAAe,OAAO,MAAM,CAAA;AAClC,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAG,IAAA,OAAO,aAAA;AAC1D,EAAA,OAAO,YAAA;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA,IAAA,uBAAA;AAQO,MAAM,iBAAA,CAAkB;AAAA,EAM7B,YAAoB,IAAA,EAAY;AAAZ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AALpB,IAAAH,eAAA,CAAA,IAAA,EAAA,OAAA,EAAgC;AAAA,MAC9B,gBAAA,EAAkB,IAAA;AAAA,MAClB,kBAAA,EAAoB;AAAA,KACtB,CAAA;AAOA,IAAAO,cAAA,CAAA,IAAA,EAAA,uBAAA,EAA0B,MAAM;AAAA,KAAC,CAAA;AAJ/B,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA;AACZ,EAGQ,IAAA,GAAO;AACb,IAAAC,cAAA,CAAA,IAAA,EAAK,uBAAA,CAAA,CAAL,IAAA,CAAA,IAAA,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,IAAA,CAAK,UAAA;AAE7B,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,EAAA,CAAG,iBAAA,EAAmB,CAAC,SAAA,KAAc;AACzD,MAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAM,GAAI,KAAK,IAAA,CAAK,UAAA;AAChD,MAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,MAAA,CAAO,WAAW,MAAM,GAAA,GAAM,KAAA;AAC1D,MAAA,MAAM,aAAa,KAAA,GAAQ,MAAA,CAAO,WAAW,CAAA,KAAM,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AAEnE,MAAA,WAAA,CAAY,MAAM;AAChB,QAAA,IAAA,CAAK,KAAA,CAAM,gBAAA,GACT,SAAA,CAAU,MAAA,KAAW,CAAA,IACrB,CAAC,EAAE,KAAA,GACC,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,YAAA,EAAa,EAAG,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAA,IAC5D,WAAA,GACA,UAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,YAAA,EAAa,EAAG,WAAA,CAAY,CAAC,MAAM,CAAC,CAAA,CAAA;AAClE,QAAA,IAAA,CAAK,KAAA,CAAM,qBACT,SAAA,CAAU,MAAA,KAAW,KACrB,CAAC,EAAE,QACC,SAAA,CAAU,IAAA;AAAA,UACR,CAAC,CAAA,KACC,CAAA,CAAE,YAAA,EAAa,EAAG,WAAA,CAAY,CAAC,CAAA,KAC/B,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS;AAAA,SAClC,IAAK,aACL,SAAA,CAAU,IAAA;AAAA,UACR,CAAC,CAAA,KACC,CAAA,CAAE,YAAA,EAAa,EAAG,WAAA,CAAY,CAAC,CAAA,KAC/B,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS;AAAA,SAClC,CAAA;AAAA,OACP,CAAA;AAAA,KACF,CAAA;AACD,IAAAC,cAAA,CAAA,IAAA,EAAK,yBAA0B,MAAM;AACnC,MAAA,EAAA,EAAG;AAAA,KACL,CAAA;AAAA;AACF,EAEA,IAAI,aAAA,GAAgB;AAClB,IAAA,MAAM,EAAE,SAAA,EAAW,eAAA,EAAiB,eAAe,iBAAA,EAAkB,GACnE,KAAK,IAAA,CAAK,UAAA;AACZ,IAAA,OACE,CAAC,SAAA,IAAa,CAAC,eAAA,IAAmB,CAAC,iBAAiB,CAAC,iBAAA;AAAA;AAEzD,EACA,IAAI,aAAA,GAAgB;AAClB,IAAA,MAAM,EAAE,SAAA,EAAW,eAAA,EAAiB,eAAe,iBAAA,EAAkB,GACnE,KAAK,IAAA,CAAK,UAAA;AACZ,IAAA,OACE,CAAC,SAAA,IAAa,CAAC,eAAA,IAAmB,CAAC,iBAAiB,CAAC,iBAAA;AAAA;AAEzD,EACA,IAAI,eAAA,GAAkB;AACpB,IAAA,MAAM,EAAE,SAAA,EAAW,eAAA,EAAiB,eAAA,EAAgB,GAClD,KAAK,IAAA,CAAK,UAAA;AACZ,IAAA,OAAO,CAAC,SAAA,IAAa,CAAC,eAAA,IAAmB,CAAC,eAAA;AAAA;AAC5C,EACA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,gBAAA,IAAoB,IAAA,CAAK,KAAK,KAAA,CAAM,SAAA;AAAA;AACxD,EACA,IAAI,kBAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,kBAAA,IAAsB,IAAA,CAAK,KAAK,KAAA,CAAM,SAAA;AAAA;AAC1D,EACA,IAAI,aAAA,GAAgB;AAClB,IAAA,OAAO,IAAA,CAAK,KAAK,KAAA,CAAM,SAAA;AAAA;AACzB,EACA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OACE,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,WAAW,EAAE,IAAA,KAAS,CAAA,IACpD,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAA;AAAA;AAEpB,EAEA,MAAM,MAAA,GAAS;AACb,IAAA,IAAA,CAAK,KAAK,MAAA,EAAO;AAAA;AACnB,EAEA,MAAM,QAAA,GAAW;AACf,IAAA,IAAA,CAAK,KAAK,QAAA,EAAS;AAAA;AACrB,EAEA,MAAM,MAAA,GAAS;AACb,IAAA,MAAM,IAAA,CAAK,KAAK,MAAA,EAAO;AAAA;AACzB,EAEA,MAAM,kBAAA,GAAqB;AACzB,IAAA,IAAA,CAAK,KAAK,UAAA,EAAW;AAAA;AAEzB;AAxFE,uBAAA,GAAA,IAAA,OAAA,EAAA;;AChBK,MAAM,iBAAiB,IAAA,CAAK;AAAA,EACjC,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AAAA;AAExC;;ACHO,MAAM,uBAAuB,IAAA,CAAK;AAAA,EACvC,WAAA,CACS,IAAA,EACA,QAAA,EACA,MAAA,EACA,gBAAA,EACP;AACA,IAAA,KAAA,CAAM,EAAE,OAAA,EAAS,YAAA,EAAc,CAAA;AALxB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAAA;AAGT,EAEA,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,KAAK,gBAAA,KAAqB,MAAA;AAAA;AAErC;;ACXO,MAAM,mBAAmB,IAAA,CAAsB;AAAA,EACpD,WAAA,CACS,MACP,KAAA,EACA;AACA,IAAA,KAAA,CAAM,KAAK,CAAA;AAHJ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA;AAIT,EAEA,IAAA,GAAO;AACL,IAAA,IAAA,CAAK,IAAA,CAAK,UAAU,UAAU,CAAA;AAAA;AAChC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AAAA;AAExC;;;;;;;;ACfO,MAAM,WAAA,CAAY;AAAA,EAAlB,WAAA,GAAA;AACL,IAAAT,eAAA,CAAA,IAAA,EAAQ,UAA8D,EAAC,CAAA;AAAA;AAAA,EAE/D,SAAS,KAAA,EAAe;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAG,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,EAAC;AAC/C,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA;AAC1B,EAEA,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,SAAS,EAAC;AAAA;AACjB,EAEA,WAAW,KAAA,EAAe;AACxB,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA;AAC1B,EAEA,GAAA,CAAI,OAAe,EAAA,EAAqB;AACtC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,CAAE,EAAE,CAAA;AAAA;AAChC,EAEA,GAAA,CAAI,KAAA,EAAe,EAAA,EAAqB,KAAA,EAAmB;AACzD,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,CAAE,EAAE,CAAA,GAAI,KAAA;AAAA;AAC7B,EAEA,IAAA,CAAK,QAAgB,MAAA,EAAgB;AACnC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACjC,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA,CAAK,SAAS,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AAAA;AACxB,EAEA,SAAS,KAAA,EAAe;AACtB,IAAA,MAAA,CAAO,KAAK,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACtC,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,KAAA,EAAO;AAC/B,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA;AACvC,KACD,CAAA;AAAA;AAEL;;;;;;;;ACzBO,MAAM,mBAAmB,kBAAA,CAG9B;AAAA,EAGA,WAAA,CAAY,EAAE,KAAA,EAAO,GAAG,YAAW,EAA8B;AAC/D,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,UAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,GAAG,UAAA,CAAW;AAAA,OAChB;AAAA,MACA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,SAAA,EAAW,WAAW,cAAA;AAAe,KAClE,CAAA;AATH,IAAAA,eAAA,CAAA,IAAA,EAAA,WAAA,EAAY,KAAA,CAAA;AAWV,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,SAAA,EAAW,UAAA,EAAY,CAAA;AAAA;AAChD,EAEA,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEU,QAAA,GAAoB;AAC5B,IAAA,OACE,IAAA,CAAK,UAAS,CAAE,SAAA,KAAc,MAAM,IAAA,CAAK,QAAA,GAAW,UAAA,KAAe,EAAA;AAAA;AAEvE,EAEA,MAAa,uBAAuB,KAAA,EAAe;AACjD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAI;AACF,MAAA,IACE,iBAAA,CAAkB,IAAI,CAAA,IACtBY,cAAA,CAAa,KAAA,EAAO,KAAK,QAAA,EAAS,CAAE,SAAS,CAAA,IAC7C,KAAA,KAAU,EAAA;AAEV,QAAA;AACF,MAAA,IAAI,KAAA,KAAU,IAAA,CAAK,QAAA,EAAS,CAAE,SAAA,EAAW;AACvC,QAAA,MAAM,SAAS,MAAM,IAAA;AAAA,UAGnB,KAAK,IAAA,CAAK,SAAA;AAAA,UACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,YAC/B,MAAA,EAAQ,iBAAA;AAAA,YACR,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACD;AAAA,YACE,QAAA,EAAU;AAAA,cACR,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,cAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,SAAA;AAAA,cAChC,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,cACvB,KAAA,EAAO,KAAK,SAAA,CAAU,EAAA;AAAA,cACtB,KAAA,EAAO,KAAK,UAAA,CAAW,KAAA;AAAA,cACvB,KAAA,EAAO,KAAK,UAAA,CAAW,KAAA;AAAA,cACvB;AAAA,aACF;AAAA,YACA,iBAAA,EAAmB;AAAA;AACrB,SACF;AAEA,QAAA,IAAI,MAAA,EAAQ,MAAM,SAAA,EAAW;AAC3B,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,QAAA,CAAS;AAAA,YACzC,UAAA,EAAY,MAAA,EAAQ,IAAA,EAAM,SAAA,CAAU,KAAA;AAAA,YACpC,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,SAAA,CAAU;AAAA,WACpC,CAAA;AACD,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAA,IAAA,CAAK,UAAU,UAAU,CAAA;AAAA;AAE3B,UAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,SAClB,MAAO;AACL,UAAA,IAAA,CAAK,SAAS,EAAE,SAAA,EAAW,EAAA,EAAI,UAAA,EAAY,IAAI,CAAA;AAC/C,UAAA,IAAA,CAAK,SAAS,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,iBAAiB,CAAA;AAAA;AAChE;AACF,KACF,SAAE;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA;AACnB;AACF,EAEA,MAAa,2BAA2B,KAAA,EAAe;AACrD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,IAAA;AAAA,QACnB,KAAK,IAAA,CAAK,SAAA;AAAA,QACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,UAC/B,OAAA,EAAS,6BAAA;AAAA,UACT,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,QACD,EAAE,QAAA,EAAU,EAAE,IAAI,KAAA,EAAM,EAAG,mBAAmB,WAAA;AAAY,OAC5D;AAEA,MAAA,IAAI,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,QAAA,CAAS;AAAA,UACzC,UAAA,EAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,UAClC,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC;AAAA,SAClC,CAAA;AACD,QAAA,IAAA,CAAK,KAAK,SAAA,CAAU,kBAAA,CAAmB,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AAE3D,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,IAAA,CAAK,UAAU,eAAe,CAAA;AAC9B,UAAA,IAAA,CAAK,UAAU,UAAU,CAAA;AAAA;AAC3B;AACF,KACF,SAAE;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA;AACnB;AACF,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IAAI,IAAA,CAAK,MAAM,UAAA,CAAW,YAAA;AAAc,MAAA,OAAO,KAAA;AAE/C,IAAA,MAAM,UACJ,CAAC,CAAC,KAAK,QAAA,EAAS,CAAE,cAClB,CAAC,IAAA,CAAK,UAAA,CAAW,QAAA,IACjB,KAAK,UAAA,CAAW,WAAA,IAChB,KAAK,UAAA,CAAW,gBAAA,IAChB,KAAK,UAAA,CAAW,QAAA;AAElB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,kBAAA;AAAA,QAC1C,KAAK,IAAA,CAAK;AAAA,OACZ;AACA,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,OAAO,IAAA;AAAA;AACT,EACO,QAAA,CAAS,UAAe,OAAA,EAA2B;AACxD,IAAA,IACE,CAAC,OAAA,EAAS,KAAA,KACT,iBAAA,CAAkB,IAAI,KAAKA,cAAA,CAAa,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA,CAAA;AAElE,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAE7B,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,QAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,IAAA;AAErC,IAAA,IAAI,OAAA,EAAS,gBAAgB,KAAA,EAAO;AAClC,MAAA,IAAA,CAAK,wBAAA,GAA2B,QAAA;AAChC,MAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA;AAG7B,IAAA,OAAO,KAAK,WAAA,CAAY,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC9C,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,OAAA,EAAS,gBAAgB,KAAA,EAAO;AAClC,UAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,kBAAA,GAAqB,IAAA;AAAA;AAEjD,QAAA,OAAO,IAAA;AAAA;AAET,MAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,KAC7B,CAAA;AAAA;AACH,EAEU,gCACR,KAAA,EACyB;AACzB,IAAA,MAAM,YAAA,GAAe,KAAK,UAAA,CAAW,iBAAA;AAErC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA,CAAM,+BAAA,CAAgC,KAAK,CAAA;AAAA,MAC9C,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,YAAA,GACH,CAAC,IAAA,CAAK,UAAS,CAAE,UAAA,EAAa,IAAA,CAAK,QAAA,EAAS,CAAE,SAAS,CAAA,GACvD,IAAA,CAAK,UAAS,CAAE;AAAA;AACtB,KACF;AAAA;AAEJ;;AC1LO,MAAM,eAAe,kBAAA,CAA0C;AAAC;;;;;;;;AC2CvE,eAAe,YAAA,CAAgB,IAAa,EAAA,EAAwB;AAClE,EAAA,OAAO,EAAA,EAAG;AACZ;AAEA,eAAe,aAAA,CAAc,IAAmB,EAAA,EAA2B;AACzE,EAAA,UAAA,CAAW,IAAI,EAAE,CAAA;AAEjB,EAAA,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAC7B;AAEO,MAAM,aAAa,KAAA,CAA4C;AAAA,EA0FpE,YAAY,EAAE,UAAA,EAAY,KAAA,EAAO,GAAG,YAAW,EAAwB;AACrE,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,UAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,WAAA,EAAa,KAAA,CAAM,UAAA,CAAW,OAAA,EAAS,CAAC,CAAA;AAAA,QACxC,OAAA,EAAS,WAAW,UAAA,IAAc,QAAA;AAAA,QAClC,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO,KAAA,CAAM,UAAA,CAAW,KAAA,EAAO,CAAC,CAAA;AAAA,QAChC,QAAA,EAAU,KAAA;AAAA,UACR,UAAA,CAAW,aAAA;AAAA,UACX,UAAA,CAAW,QAAQ,CAAA,GAAI;AAAA,SACzB;AAAA,QAEA,kBAAA,sBAAwB,GAAA,EAAI;AAAA,QAC5B,mBAAA,sBAAyB,GAAA,EAAI;AAAA,QAC7B,GAAG,UAAA;AAAA,QACH,iBAAA,EAAmB,MAAA,CAAO,UAAA,CAAW,iBAAiB,CAAA,KAAM;AAAA;AAC9D,KACD,CAAA;AA3GH,IAAAZ,eAAA,CAAA,IAAA,EAAQ,OAAA,EAAQ,CAAA,CAAA;AAEhB,IAAAA,eAAA,CAAA,IAAA,EAAU,OAAA,EAAQ,IAAI,WAAA,EAAY,CAAA;AAClC,IAAAA,eAAA,CAAA,IAAA,EAAU,OAAA,EAAQ,IAAI,KAAA,EAAM,CAAA;AAC5B,IAAAA,eAAA,CAAA,IAAA,EAAU,gBAA+B,EAAC,CAAA;AAC1C,IAAAA,eAAA,CAAA,IAAA,EAAU,eAAA,CAAA;AACV,IAAAA,eAAA,CAAA,IAAA,EAAU,mBAAA,CAAA;AAEV,IAAAA,eAAA,CAAA,IAAA,EAAmB,eAAA,sBAAoB,GAAA,EAAqB,CAAA;AAC5D,IAAAA,eAAA,CAAA,IAAA,EAAmB,iBAAA,sBAAsB,GAAA,EAAY,CAAA;AACrD,IAAAA,eAAA,CAAA,IAAA,EAAmB,iBAAA,sBAAsB,GAAA,EAAqB,CAAA;AAC9D,IAAAA,eAAA,CAAA,IAAA,EAAmB,oBAAA,sBAAyB,GAAA,EAAY,CAAA;AAExD,IAAAA,eAAA,CAAA,IAAA,EAAU,sBAAA,EAAgD,IAAA,CAAA;AAC1D,IAAAA,eAAA,CAAA,IAAA,EAAmB,mBAAA,CAAA;AACnB,IAAAA,eAAA,CAAA,IAAA,EAAmB,iBAAA,EAAmC,IAAI,eAAA,CAAgB;AAAA,MACxE,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB,IAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,KACtB,CAAA,CAAA;AA0FC,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,iBAAA,CAAkB,IAAI,CAAA;AAEnD,IAAA,MAAM,WAAA,GAAc,aAAa,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,gBAAgB,WAAA,CAClB,GAAA;AAAA,MAAI,CAAC,OAAA,KACJ,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,GAAA,GAC1B,YAAA,CAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,GAAG,CAAA,GAC9C;AAAA,KACN,CACC,OAAO,OAAO,CAAA;AACjB,IAAA,IAAA,CAAK,oBAAoB,WAAA,CAAY,GAAA;AAAA,MACnC,CAAC,EAAE,UAAA,EAAY,YAAAa,WAAAA,EAAY,GAAG,SAAQ,KAAM;AAC1C,QAAA,OAAO,EAAE,GAAG,OAAA,EAAS,UAAA,EAAYV,eAAA,CAAcU,WAAU,CAAA,EAAE;AAAA;AAC7D,KACF;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,SAAS,YAAA,CAAa,UAAA,CAAW,WAAW,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtE,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,OAAO,CAAA,CAAE,QAAA;AAAA,MACT,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,KAAA,EAAO,CAAA,CAAE,QAAA,IAAY,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,QAAA,EAAU,KAAA;AAAA,MACV,SAAS,CAAA,CAAE;AAAA,KACb,CAAE,CAAA;AACF,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,KAAA;AACvB,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,KAAA;AAEzB,IAAA,IAAA,CAAK,UAAA,CAAW,EAAA,CAAG,aAAA,EAAe,CAAC,GAAA,KAAQ;AACzC,MAAA,IAAA,CAAK,WAAY,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,CAAG,IAAmB,KAAK,CAAA;AAAA,KACtE,CAAA;AAAA;AACH,EAvHA,IAAW,UAAA,GAAa;AACtB,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA;AACd,EAEA,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO,KAAK,UAAA,CAAW,WAAA;AAAA;AACzB,EAEA,IAAW,mBAAA,GAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA;AACd;AAAA;AAAA;AAAA,EAKA,IAAW,UAAA,GAAa;AACtB,IAAA,OAAA,CACE,KAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAClB,EAAA,CAAG,EAAE,CAAA,EACJ,KAAA,CAAM,IAAA,CAAK,CAAC,MAAM,CAAA,YAAa,QAAQ,CAAA,EAC3C,QAAA,GAAW,UAAA,CAAW,KAAA;AAAA;AAC1B,EAEA,IAAW,gBAAA,GAAmB;AAC5B,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA;AACd,EAEA,IAAW,MAAA,GAAS;AAClB,IAAA,OAAO,KAAK,KAAA,CAAM,MAAA;AAAA;AACpB,EAEA,IAAW,OAAA,GAAU;AACnB,IAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA;AACzB,EAEA,IAAW,MAAA,GAAS;AAClB,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,MAAA;AAAA;AACxC,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,GAAA,CAC1C,IAAA,CAAK,UAAA,CAAW,WAAA,GAAc,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,QAAA,GACpD,CAAA;AAAA;AACN,EAEA,IAAW,SAAA,GAAY;AACrB,IAAA,OAAO,KAAK,UAAA,CAAW,KAAA;AAAA;AACzB,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,KAAK,UAAA,CAAW,QAAA;AAAA;AACzB,EAEA,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,SAAS,WAAW,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA;AAAA,MAAI,CAAC,CAAA,KACnE,CAAA,CAAE,QAAA;AAAS,KACb;AAAA;AACF,EAEA,IAAW,aAAA,GAAgB;AACzB,IAAA,OAAO,IAAA,CAAK,gBAAgB,GAAA,CAAI,CAAC,YAAY,IAAA,CAAK,MAAA,CAAO,OAAO,CAAE,CAAA;AAAA;AACpE,EAEA,IAAW,UAAA,GAAa;AACtB,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,QAAA;AACjC,IAAA,OAAO,OAAO,IAAA,CAAK,UAAA,CAAW,WAAA,GAAc,CAAA,IAAK,UAAU,CAAC,CAAA;AAAA;AAC9D,EAuDQ,mBAAmB,CAAA,EAAwB;AACjD,IAAA,IACE,CAAA,CAAE,OAAA,KAAY,GAAA,IACb,CAAA,CAAE,OAAA,KAAY,GAAA,IAAO,CAAA,CAAE,QAAA,KAAa,GAAA,IACpC,CAAA,CAAE,OAAA,KAAY,GAAA,IAAO,EAAE,QAAA,EACxB;AACA,MAAA,OAAO,OAAA;AAAA;AAGT,IAAA,OAAO,OAAA;AAAA;AACT,EAEU,2BAA2B,SAAA,EAAuB;AAC1D,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,SAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT,KAAK,kBAAA;AACH,QAAA,OAAO,MAAA;AAAA,MACT,KAAK,YAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,UAAA;AACH,QAAA,OAAO,MAAA;AAAA;AACX;AACF,EAEU,eAAA,CACR,WACA,MAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,gBAAgB,SAAA,EAAW;AAAA,MACtC,UAAA,EAAY,IAAA,CAAK,0BAAA,CAA2B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA,KACJ,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,MAAa,MAAA,GAA2B;AACtC,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA,EAAG;AACzC,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,SAAS,CAAA,EAAG;AAI/C,UAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,EAAE,CAAA;AAAA,SAC1C,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAA8B;AAAA,YAC7C,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,KAAA;AAAA,cACZ,YAAA,EAAc,CAAA;AAAA,cACd,UAAA,EAAY,IAAA,CAAK,yBAAA,CAA0B,SAAS;AAAA;AACtD,WACD,CAAA;AAKD,UAAA,MAAM,WAAW,MAAM,GAAA;AACvB,UAAA,IAAI,QAAA,EAAU,MAAM,OAAA,EAAS;AAK3B,YAAA,MAAM,GAAA,GAAM,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAE1C,YAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAC1C,YAAA,IAAA,CAAK,eAAe,WAAA,CACjB,GAAA;AAAA,cAAI,CAAC,OAAA,KACJ,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,GAAA,GAC1B,YAAA,CAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,GAAG,CAAA,GAC9C;AAAA,aACN,CACC,OAAO,OAAO,CAAA;AAAA,WACnB,MAAO;AAKL,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAC,SAAA,CAAU,IAAA,CAAK,KAAK,SAAS,CAAA,CAAE,cAC5B,6CAAA,GACA;AAAA,aACN;AAAA;AAGF,UAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,qBAAA;AAAA,YAC1B,IAAA;AAAA,YACA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,cACpC,GAAG,CAAA;AAAA,cACH,GAAG,IAAA,CAAK,YAAA,CAAa,CAAC,EAAE,CAAC;AAAA,aAC3B,CAAE;AAAA,WACJ;AASA,UAAA,OAAO,OACL,IAAA,CAAK,yBAAA,CAA0B,SAAS,CAAA,GACpC,YAAA,GACA,eACJ,YAAY;AACZ,YAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,cAAA,IAAI,GAAA,EAAK;AACP,gBAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAQ,CAAA;AAAA;AAG/D,cAAA,IAAI,CAAA,CAAE,MAAM,GAAA,GAAM,IAAA,EAAM,OAAA,EAAS;AAC/B,gBAAA,CAAC,MAAM,UAAU,MAAA,EAAO;AACxB,gBAAA,OAAO,KAAA;AAAA,eACT,MAAO;AACL,gBAAA,OAAO,IAAA;AAAA;AACT,aACF,EAAG,CAAC,IAAA,CAAK,yBAAA,CAA0B,SAAS,CAAC,CAAA;AAAA,aAC5C,CAAC,CAAA;AAAA;AACN;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEO,iBAAA,GAAoB;AACzB,IAAA,IAAA,CAAK,sBAAsB,KAAA,EAAM;AACjC,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA;AACf,EAEA,MAAa,aAAA,GAAgB;AAC3B,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAEjB,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAA8B;AAAA,QAC7C,QAAA,EAAU;AAAA,UACR,UAAA,EAAY,QAAA;AAAA,UACZ,UAAA,EAAY,IAAA,CAAK,yBAAA,CAA0B,YAAY;AAAA;AACzD,OACD,CAAA;AAMD,MAAA,MAAM,cAAc,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,KAAK,IAAI,CAAA;AACtD,MAAA,MAAM,mBAAmB,IAAI,GAAA;AAAA,QAC3B,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,WAAW;AAAA,OAC3C;AAEA,MAAA,IAAA,CAAK,UAAA,CAAW,KAAK,KAAA,EAAM;AAC3B,MAAA,IAAA,CAAK,gBAAgB,cAAA,EAAe;AAEpC,MAAA,IACE,IAAA,CAAK,gBAAgB,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,IAC1C,IAAA,CAAK,WAAA,CAAY,iBAAiB,CAAA,EAClC;AAOA,QAAA,MAAM,GAAA;AACN,QAAA,MAAM,KAAK,mBAAA,EAAoB;AAAA;AAWjC,MAAA,CACE,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA,IACzC,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,CAAA,GAAI,CAAC,CAAA,GAC5C,gBAAgB,IAAI,CAAA;AACvB,MAAA,CACE,KAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,CAAC,CAAA,IACzC,KAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,CAAA,GAAI,CAAC,KAC7C,IAAA,CAAK,eAAA,CAAgB,KAAK,aAAA,CAAc,CAAC,GACzC,cAAA,EAAe;AAUjB,MAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,MAAA,IAAI,GAAA,EAAK;AAIP,QAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAQ,CAAA;AAAA;AAG/D,MAAA,IAAI,CAAA,CAAE,MAAM,GAAA,GAAM,IAAA,EAAM,OAAA,EAAS;AAI/B,QAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA;AACtD,QAAA,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,WAAA,EAAa,gBAAgB,CAAA;AAC3D,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,OAAO,IAAA;AAAA,KACR,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,MAAa,WAAW,KAAA,EAA6C;AACnE,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,YAAY,CAAA,EAAG;AAK5C,QAAA,IAAI,WAAc,KAAA,EAAO;AACvB,UAAA,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5D,YAAA,OAAO,EAAE,QAAA,EAAS;AAAA,WACnB,CAAA;AAAA,SACH,MAAO;AACL,UAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA;AAGlD,QAAA,MAAM,eAAA,GAAkB,aAAa,KAAK,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAEhE,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,YAAY,CAAA,EAAG;AAIlD,UAAA,MAAM,IAAA,CAAK,gBAAgB,YAAA,EAAc;AAAA,YACvC,UAAA,EAAY,QAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,IAAI,QAAA,GAAW,QAAA;AAMf,UAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC7B,YAAA,IAAI,IAAI,QAAA,EAAU;AAChB,cAAA,QAAA,GAAW,CAAA;AAAA;AACb,WACD,CAAA;AAED,UAAA,IAAA,CAAK,KAAA,CAAM,SAAS,QAAQ,CAAA;AAE5B,UAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAA8B;AAAA,YAC7C,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,QAAA;AAAA,cACZ,KAAA,EAAO,eAAA;AAAA,cACP,UAAA,EAAY,IAAA,CAAK,yBAAA,CAA0B,YAAY;AAAA;AACzD,WACD,CAAA;AAMD,UAAA,MAAM,cAAc,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,KAAK,IAAI,CAAA;AACtD,UAAA,MAAM,mBAAmB,IAAI,GAAA;AAAA,YAC3B,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,WAAW;AAAA,WAC3C;AAEA,UAAA,eAAA,CAAgB,OAAA;AAAA,YAAQ,CAAC,MACvB,IAAA,CAAK,UAAA,CAAW,KAAK,aAAA,CAAc,CAAC,EAAE,MAAA;AAAO,WAC/C;AACA,UAAA,KAAA,IAAS,CAAA,GAAI,UAAU,CAAA,GAAI,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAChE,YAAA,IAAA,CAAK,UAAA,CAAW,KAAK,aAAA,CAAc,CAAC,EAAE,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM;AACzD,cAAA,IAAI,aAAa,QAAA,EAAU;AACzB,gBAAA,CAAA,CAAE,QAAA,EAAS,CAAE,UAAA,CAAW,KAAA,GAAQ,CAAA;AAAA;AAClC,aACD,CAAA;AAAA;AAEH,UAAA,IAAA,CAAK,gBAAgB,cAAA,EAAe;AAEpC,UAAA,IACE,IAAA,CAAK,gBAAgB,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,IAC1C,IAAA,CAAK,WAAA,CAAY,iBAAiB,CAAA,EAClC;AAOA,YAAA,MAAM,GAAA;AACN,YAAA,MAAM,KAAK,mBAAA,EAAoB;AAAA;AAWjC,UAAA,CACE,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA,IAChD,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,CAAc,QAAA,GAAW,CAAC,CAAA,GACnD,gBAAgB,IAAI,CAAA;AACvB,UAAA,CACE,KAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,QAAQ,CAAA,IAChD,KAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,QAAA,GAAW,CAAC,KACpD,IAAA,CAAK,eAAA,CAAgB,KAAK,aAAA,CAAc,CAAC,GACzC,cAAA,EAAe;AASjB,UAAA,OAAO,OACL,IAAA,CAAK,yBAAA,CAA0B,YAAY,CAAA,GACvC,YAAA,GACA,eACJ,YAAY;AACZ,YAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,cAAA,IAAI,GAAA,EAAK;AAIP,gBAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAQ,CAAA;AAAA;AAG/D,cAAA,IAAI,CAAA,CAAE,MAAM,GAAA,GAAM,IAAA,EAAM,OAAA,EAAS;AAI/B,gBAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA;AACtD,gBAAA,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,WAAA,EAAa,gBAAgB,CAAA;AAC3D,gBAAA,OAAO,KAAA;AAAA;AAGT,cAAA,OAAO,IAAA;AAAA,aACT,EAAG,CAAC,IAAA,CAAK,yBAAA,CAA0B,YAAY,CAAC,CAAA;AAAA,aAC/C,CAAC,CAAA;AAAA;AACN;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAa,gBAAgB,SAAA,EAAyC;AACpE,IAAA,OAAO,KAAA,CAAM,gBAAgB,SAAS,CAAA;AAAA;AACxC,EAEA,MAAa,SAAA,CACX,SAAA,EACA,MAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,MAAM,CAAA;AAAA,KAC1C,EAAG,QAAQ,KAAK,CAAA;AAAA;AAClB,EAEO,aAAA,GAAgB;AACrB,IAAA,OAAO,CAAC,GAAG,MAAA,CAAO,OAAO,IAAA,CAAK,iBAAiB,CAAC,CAAA,CAAE,GAAA;AAAA,MAAI,CAAC,CAAA,KACrD,IAAA,CAAK,eAAA,CAAgB,KAAK,IAAA,CAAK,GAAA;AAAA,QAAI,CAAC,CAAA,KACjC,CAAA,CAAE,oBAAoB,CAAA,CAAE,EAAE,EAAe,QAAA;AAAS;AACrD,KACF;AAAA;AACF;AAAA;AAAA;AAAA,EAKO,UAAU,KAAA,EAAe;AAC9B,IAAA,OAAO,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AAC5B,EAEO,cAAA,GAAiB;AACtB,IAAA,OAAO,CAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAKO,QAAA,CAAS,OAAe,KAAA,EAA6C;AAC1E,IAAA,OACE,IAAA,CAAK,eAAe,KAAA,EAAO,KAAK,KAChC,IAAA,CAAK,uBAAA,CAAwB,OAAO,KAAK,CAAA;AAAA;AAE7C,EAEO,qBAAA,CACL,OACA,KAAA,EAC6B;AAC7B,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AACjC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA,EAAG,IAAA;AAAA,UACrC,CAAC,CAAA,KAAO,CAAA,CAAyB,SAAA,CAAU,EAAA,KAAO;AAAA,SACpD;AAAA,OACF,MAAO;AACL,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,UACpC,CAAC,OAAA,KACC,OAAA,CAAQ,KAAA,CACL,IAAA;AAAA,YACC,CAAC,MACE,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA,EACvB,UAAU,EAAA,KAAO;AAAA,WACzB,EACE,QAAA,CAAS,YAAY,CAAA,CAAG;AAAA,SAChC;AAAA;AACF;AACF;AACF,EAEO,uBAAA,CACL,SACA,KAAA,EAC6B;AAC7B,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA,EAAG,IAAA;AAAA,UACrC,CAAC,CAAA,KAAO,CAAA,CAAyB,SAAA,CAAU,IAAA,KAAS;AAAA,SACtD;AAAA,OACF,MAAO;AACL,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,UACpC,CAAC,OAAA,KACC,OAAA,CAAQ,KAAA,CACL,IAAA;AAAA,YACC,CAAC,MACE,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA,EACvB,UAAU,IAAA,KAAS;AAAA,WAC3B,EACE,QAAA,CAAS,YAAY,CAAA,CAAG;AAAA,SAChC;AAAA;AACF;AACF;AACF,EAEO,YAAA,CACL,IACA,KAAA,EAC6B;AAC7B,IAAA,IAAI,KAAK,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA,EAAG;AACxC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,MAAM,QACJ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA,IACxB,IAAA,CAAK,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,OAAO,EAAE,CAAA;AAExD,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAA,EAAI,KAAK,CAAA;AAE/B,QAAA,OAAO,KAAA;AAAA,OACT,MAAO;AACL,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,UACpC,CAAC,OAAA,KACC,OAAA,CAAQ,KAAA,CACL,IAAA;AAAA,YACC,CAAC,MACE,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA,EAAiB,WAAW,EAAA,KACvD;AAAA,WACJ,EACE,QAAA,CAAS,YAAY,CAAA,CAAG;AAAA,SAChC;AAAA;AACF;AACF;AACF,EAEO,cAAA,CACL,MACA,KAAA,EAC6B;AAC7B,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA,EAAG;AACrC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,IAAA,KAAS,IAAI,CAAA;AAAA,OACnE,MAAO;AACL,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,UACpC,CAAC,OAAA,KACC,OAAA,CAAQ,KAAA,CACL,IAAA;AAAA,YACC,CAAC,MACE,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA,EAAiB,WACzC,IAAA,KAAS;AAAA,WAChB,EACE,QAAA,CAAS,YAAY,CAAA,CAAG;AAAA,SAChC;AAAA;AACF;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EAEO,mBAAmB,KAAA,EAAe;AACvC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MACzC,CAAC,CAAA,KAEG,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,YAAmB,QAAQ,CAAA,EACpD,QAAA,EAAS,CAAE,WAAW,KAAA,KAAU;AAAA,KACvC;AACA,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,OAAO,GAAA,EAAK,KAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,YAAa,QAAQ,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAe,UAAU,CAAA;AAAA;AAG1C,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,eAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,eAAA,CACT,eAAA,EAAgB,CAChB,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,MAAA,CAAO,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAAA;AACzC,EAEA,0BAAA,GAA6B;AAC3B,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,IAAA,KAAA,IACM,CAAA,GAAI,CAAA,EACR,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,IAAU,CAAA,EACvD,CAAA,EAAA,EACA;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM;AAChD,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAExB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AAC3C,QAAA,IACE,EACE,KAAA,KACC,KAAA,CAAM,UAAA,CAAW,gBAAA,IAAoB,iBAAiB,MAAA,CAAA,CAAA,EAEzD;AACA,UAAA,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AACzC,UAAA;AAAA;AACF;AACF;AAGF,IAAA,KAAA,MAAW,UAAU,IAAI,GAAA;AAAA,MACvB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAC;AAAA,KAC1E,EAAG;AACD,MAAA,IAAA,CAAK,eAAA,CAAgB,sBAAA;AAAA,QACnB,MAAA;AAAA,QACA,YAAA,CAAa,IAAI,MAAM;AAAA,OACzB;AAAA;AACF;AACF,EAEA,MAAa,KAAK,IAAA,EAA2B;AAC3C,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,QAAQ,CAAA;AAClC,IAAA,IACE,IAAA,CAAK,UAAA,CAAW,QAAA,IACf,CAAC,IAAA,CAAK,WAAW,aAAA,IAChB,CAAC,IAAA,CAAK,UAAA,CAAW,QAAA,IACjB,CAAC,KAAK,UAAA,CAAW,WAAA,IACjB,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAA,IAC3B,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAA;AAE7B,MAAA,SAAA,CAAU,OAAA;AAAA,QACR,IAAI,cAAA;AAAA,UACF,IAAA;AAAA,UACA,MAAM,EAAA;AAAA,UACN,MAAM;AAAA;AAAC;AACT,OACF;AAEF,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AAEtC,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM;AACzB,MAAA,aAAA,CAAc,GAAA,CAAI,EAAE,KAAK,CAAA;AAAA,KAC1B,CAAA;AAED,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,iBAAA,EAAmB;AACxC,MAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,gBAAA,IAAoB,GAAA,CAAI,cAAc,QAAA,EAAU;AAClE,QAAA,aAAA,CAAc,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA;AAC7B;AAGF,IAAA,KAAA,IAAS,KAAA,GAAQ,GAAG,KAAA,GAAQ,IAAA,CAAK,cAAc,CAAC,CAAA,EAAG,MAAA,IAAU,CAAA,EAAG,KAAA,EAAA,EAAS;AACvE,MAAA,MAAM,IAAA,CAAK,qBAAA;AAAA,QACT,KAAA;AAAA,QACA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACnC,UAAA,OAAO;AAAA,YACL,GAAG,CAAA;AAAA,YACH,GAAG,IAAA,CAAK,aAAA,CAAc,CAAC,EAAE,KAAK;AAAA,WAChC;AAAA,SACD;AAAA,OACH;AAAA;AAGF,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC9B,MAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,GAAG,CAAA;AACnC,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,QAAA,KAAA,GAAQ,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA;AAKlB,MAAA,SAAA,CAAU,OAAA;AAAA,QACR,IAAI,WAAW,IAAA,EAAM;AAAA,UACnB,OAAA,EAAS,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,CAAC,CAAA;AAAA,UAC9B,SAAS,GAAA,CAAI,KAAA;AAAA,UACb,aAAA,EAAe;AAAA,YACb,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM;AAAA,YAChC,OAAO,GAAA,CAAI;AAAA,WACb;AAAA,UACA,UAAA,EAAY,EAAE,GAAA,EAAI;AAAA,UAClB,QAAA,EAAU,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,KAAK;AAAA,SACtC;AAAA,OACH;AAAA,KACD,CAAA;AAED,IAAA,KAAA,MAAW,UAAU,aAAA,EAAe;AAClC,MAAA,IAAA,CAAK,eAAA,CAAgB,sBAAA,CAAuB,MAAA,EAAQ,KAAK,CAAA;AAAA;AAE3D,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAErC,IAAA,WAAA,CAAY,KAAK,IAAA,CAAK,SAAS,EAAE,gBAAA,GAAmB,SAAA,EAAW,CAAC,EAAA,KAAO;AACrE,MAAA,IAAI,EAAA,CAAG,SAAS,QAAA,EAAU;AACxB,QAAA,IAAA,CAAK,MAAM,WAAA,GAAc,KAAA;AAAA;AAC3B,KACD,CAAA;AAAA;AACH,EAEO,iBAAiB,OAAA,EAA2B;AACjD,IAAA,IAAA,CAAK,oBAAA,GAAuB,OAAA;AAC5B,IAAA,OAAA,CAAQ,IAAA,EAAK;AAAA;AACf,EAEA,MAAa,OAAA,GAAU;AACrB,IAAA,OAAO,KAAK,WAAA,CAAY,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAC7D,EAEA,MAAa,WAAW,KAAA,EAAe;AACrC,IAAA,MAAM,IAAA,CAAK,UAAU,kBAAA,EAAoB;AAAA,MACvC,WAAA,EAAa,KAAA;AAAA,MACb,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAa,SAAS,KAAA,EAA6C;AACjE,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC1C,QAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,IAAS,IAAA,CAAK,eAAe,CAAA,CAAE,IAAA;AAAA,UAC1D,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI;AAAA,SAChB;AAEA,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA,EAAG;AAChD,UAAA,MAAM,IAAA,CAAK,gBAAgB,UAAA,EAAY;AAAA,YACrC,UAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,MAAM,cAAc,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,KAAK,IAAI,CAAA;AACtD,UAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAA8B;AAAA,YAC7C,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,MAAA;AAAA,cACZ,KAAA,EAAO,OAAA;AAAA,cACP,UAAA,EAAY,IAAA,CAAK,yBAAA,CAA0B,UAAU;AAAA;AACvD,WACD,CAAA;AAED,UAAA,IAAA,CAAK,QAAA,CAAS,SAAS,MAAM,CAAA;AAS7B,UAAA,OAAO,OACL,IAAA,CAAK,yBAAA,CAA0B,UAAU,CAAA,GACrC,YAAA,GACA,eACJ,MAAM;AACN,YAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,cAAA,IAAI,GAAA,EAAK;AAIP,gBAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAQ,CAAA;AAAA;AAG/D,cAAA,IACE,CAAA,CAAE,MAAM,GAAA,GAAM,IAAA,EAAM,WACpB,CAAE,MAAM,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EACnD;AACA,gBAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA;AACtD,gBAAA,OAAO,KAAA;AAAA;AAGT,cAAA,OAAO,IAAA;AAAA,aACT,EAAG,CAAC,IAAA,CAAK,yBAAA,CAA0B,UAAU,CAAC,CAAA;AAAA,aAC7C,CAAC,CAAA;AAAA;AACN;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAa,OAAO,KAAA,EAA6C;AAC/D,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC1C,QAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,IAAS,IAAA,CAAK,eAAe,CAAA,CAAE,IAAA;AAAA,UAC1D,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI;AAAA,SAChB;AAEA,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA,EAAG;AAChD,UAAA,MAAM,IAAA,CAAK,gBAAgB,UAAA,EAAY;AAAA,YACrC,UAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,MAAM,cAAc,CAAC,GAAG,IAAA,CAAK,eAAA,CAAgB,KAAK,IAAI,CAAA;AACtD,UAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAA8B;AAAA,YAC7C,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,IAAA;AAAA,cACZ,KAAA,EAAO,OAAA;AAAA,cACP,UAAA,EAAY,IAAA,CAAK,yBAAA,CAA0B,UAAU;AAAA;AACvD,WACD,CAAA;AAED,UAAA,IAAA,CAAK,QAAA,CAAS,SAAS,IAAI,CAAA;AAS3B,UAAA,OAAO,OACL,IAAA,CAAK,yBAAA,CAA0B,UAAU,CAAA,GACrC,YAAA,GACA,eACJ,MAAM;AACN,YAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,cAAA,IAAI,GAAA,EAAK;AAIP,gBAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAQ,CAAA;AAAA;AAG/D,cAAA,IACE,CAAA,CAAE,MAAM,GAAA,GAAM,IAAA,EAAM,WACpB,CAAE,MAAM,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EACnD;AACA,gBAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA;AACtD,gBAAA,OAAO,KAAA;AAAA;AAGT,cAAA,OAAO,IAAA;AAAA,aACT,EAAG,CAAC,IAAA,CAAK,yBAAA,CAA0B,UAAU,CAAC,CAAA;AAAA,aAC7C,CAAC,CAAA;AAAA;AACN;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEO,sBAAA,CAAuB,WAAmB,OAAA,EAAmB;AAClE,IAAA,IAAA,CAAK,UAAA,CAAW,sBAAA,CAAuB,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3D,EAEO,kBAAA,CAAmB,UAAkB,OAAA,EAAmB;AAC7D,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,kBAAA,CAAmB,IAAI,QAAQ,CAAA;AACpE,IAAA,IAAA,CAAK,WAAW,kBAAA,CAAmB,GAAA,CAAI,QAAA,EAAU,OAAA,IAAW,CAAC,YAAY,CAAA;AACzE,IAAA,IAAA,CAAK,iCAAA,EAAkC;AAAA;AACzC,EAEO,oBAAA,CAAqB,UAAkB,OAAA,EAAmB;AAC/D,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AACrE,IAAA,IAAA,CAAK,WAAW,mBAAA,CAAoB,GAAA,CAAI,QAAA,EAAU,OAAA,IAAW,CAAC,YAAY,CAAA;AAC1E,IAAA,IAAA,CAAK,iCAAA,EAAkC;AAAA;AACzC,EAEA,MAAa,QAAA,GAAkC;AAC7C,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,IAAI,YAAA,GAA6B,IAAA;AAEjC,IAAA,WAAA,MAAiB,GAAA,IAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM;AACtD,MAAA,WAAA,MAAiB,IAAA,IAAQ,IAAI,KAAA,EAAO;AAClC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AAC3C,QAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,UAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,QAAA,EAAS;AACpC,UAAA,IAAI,CAAC,MAAA,IAAU,OAAA,IAAW,CAAC,YAAA,EAAc;AACvC,YAAA,OAAA,GAAU,KAAA;AACV,YAAA,YAAA,GAAe,KAAA;AAAA;AACjB;AACF;AACF;AAGF,IAAA,OAAO,OAAA,IAAW,YAAA;AAAA;AACpB,EAEA,MAAgB,mBAAA,GAAsB;AACpC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,MACnD,QAAA,EAAU;AAAA,QACR,UAAA,EAAY;AAAA;AACd,KACD,CAAA;AAED,IAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AAAA,KACzC,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAGlE,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAgB,qBAAA,CACd,MAAA,EACA,WAAA,EACA;AACA,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,QAAA;AACjC,IAAA,MAAM,MAAA,GAAS,OAAO,QAAA,CAAS,QAAQ,KAClC,IAAA,CAAK,UAAA,CAAW,WAAA,GAAc,CAAA,IAAK,QAAA,GACpC,CAAA;AACJ,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,KAAK,MAAA,GAAS,MAAA;AAEtD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,WAAA,GAAc,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,CAAC,SAAS,WAAA,KAAgB;AACjE,QAAA,IAAA,CAAK,OAAA,EAAQ,CAAE,gBAAA,CAAiB,OAAA,CAAQ,IAAI,KAAK,CAAA;AAEjD,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,GAAG,IAAA,CAAK,aAAA,CAAc,WAAW,EAAE,CAAC;AAAA,SACtC;AAAA,OACD,CAAA;AAAA;AAKH,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAC3C,IAAA,IACE,IAAA,CAAK,UAAA,CAAW,QAAA,IACf,CAAC,IAAA,CAAK,WAAW,aAAA,IAChB,CAAC,IAAA,CAAK,UAAA,CAAW,QAAA,IACjB,CAAC,KAAK,UAAA,CAAW,WAAA,IACjB,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAA,IAC3B,CAAC,IAAA,CAAK,OAAA,EAAQ,CAAE,UAAA,CAAW,QAAA;AAE7B,MAAA,MAAA,CAAO,OAAA;AAAA,QACL,IAAI,cAAA;AAAA,UACF,IAAA;AAAA,UACA,MAAM,OAAO,QAAA,EAAS;AAAA,UACtB,MAAM;AACJ,YAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,WACnC;AAAA,UACA,IAAA,CAAK,UAAA,CAAW,QAAA,GACZ,CAAC,OAAA,KAAY;AACX,YAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,WAC/B,GACA;AAAA;AACN,OACF;AACF,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAEvC,IAAA,WAAA,MAAiB,SAAS,WAAA,EAAa;AAIrC,MAAA,MAAM,UAAA,GAAaV,eAAA;AAAA,QACjB,KAAA,CAAM;AAAA,OACR;AACA,MAAA,KAAA,CAAM,UAAA,GAAa,UAAA;AAEnB,MAAA,MAAM,gBAAA,GACJ,KAAK,IAAA,CAAK,SAAA,CAAU,cAAc,KAAA,CAAM,SAAS,EAAE,KAAK,CAAA;AAE1D,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB;AAAA,UACpC,GAAG,KAAA;AAAA,UACH,GAAI,KAAA,CAAc,UAAA;AAAA,UAClB;AAAA,SACD,CAAA;AACD,QAAA,MAAM,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,CAAA;AAClC,QAAA,QAAA,CAAS,cAAc,IAAI,CAAA;AAE3B,QAAA,IAAI,oBAAoB,kBAAA,EAAoB;AAC1C,UAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,EAAE,CAAA;AAC5C,UAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,IAAI,CAAA;AAAA;AAElD,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAC/C,QAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA;AAEpD,QAAA,IAAI,EAAE,oBAAoB,MAAA,CAAA,EAAS;AACjC,UAAA,IAAA,CAAK,MAAM,GAAA,CAAI,KAAA,EAAO,QAAA,CAAS,UAAA,CAAW,IAAI,QAAQ,CAAA;AAEtD,UAAA,IAAI,KAAA,GAAQ,MAAA;AAAA,YACV,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,KAAA,KAAU,KAAA,CAAM,EAAE,CAAA,EAAG,KAAA,IAAS;AAAA,WAC1D;AACA,UAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,YAAA,KAAA,GAAQ,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA;AAGlB,UAAA,MAAA,CAAO,OAAA;AAAA,YACL,IAAI,QAAA,CAAS;AAAA,cACX,OAAA,EAAS,SAAS,UAAA,CAAW,EAAA;AAAA,cAC7B,UAAA,EAAY,EAAE,KAAA,EAAO,QAAA;AAAS,aAC/B;AAAA,WACH;AAAA;AACF,OACF,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,2BAAA,EAA8B,MAAM,SAAS,CAAA,oCAAA;AAAA,SAC/C;AAAA;AACF;AAGF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,gBAAgB,cAAA,EAAe;AACpC,MAAA,IAAA,CAAK,eAAA,CAAgB,kBAAA,CAAmB,MAAA,EAAQ,IAAI,CAAA;AAAA;AAGtD,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,MAAgB,WAAA,CACd,EAAA,EACA,KAAA,GAAQ,IAAA,EACI;AACZ,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,IAAA,CAAK,MAAM,OAAA,EAAQ;AAAA;AAE3B,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAM,SAAA,GAAY,IAAA;AACvB,MAAA,MAAM,GAAA,GAAM,MAAM,EAAA,EAAG;AACrB,MAAA,OAAO,GAAA;AAAA,KACT,SAAE;AACA,MAAA,IAAA,CAAK,MAAM,SAAA,GAAY,KAAA;AACvB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,MAAM,OAAA,EAAQ;AAAA;AACrB;AACF;AACF,EAEU,iCAAA,GAAoC;AAC5C,IAAA,MAAM,EAAE,aAAA,EAAe,kBAAA,EAAoB,mBAAA,EAAqB,QAAA,KAC9D,IAAA,CAAK,UAAA;AACP,IAAA,MAAM,wBAAA,GACH,CAAC,aAAA,IACA,CAAC,GAAG,kBAAA,CAAmB,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,KAAK,CAAA,IACzD,CAAC,CAAC,QAAA,IACD,CAAC,GAAG,mBAAA,CAAoB,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,KAAK,CAAA;AAE7D,IAAA,IAAA,CAAK,UAAA,CAAW,sBAAA;AAAA,MACd,YAAA;AAAA,MACA;AAAA,KACF;AAAA;AACF,EAEU,OAAO,KAAA,EAAe;AAC9B,IAAA,OAAO,KAAK,eAAA,CAAgB,IAAA,CACzB,cAAc,KAAK,CAAA,EAClB,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,YAAa,QAAQ,CAAA,CAC1C,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAe,UAAU,CAAA;AAAA;AAC1C,EAEA,MAAgB,YACd,SAAA,EACe;AACf,IAAA,MAAM,MACJ,OAAO,SAAA,KAAc,QAAA,GAChB,QAAA,CAAS,SAAS,CAAA,GAClB,SAAA;AAEP,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAC1C,IAAA,MAAM,cAGE,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,KAAA,KACvB,YAAA,CAAc,KAAA,CAAM,UAAA,IAAc,MAAM,GAAK;AAAA,KAC/C;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,KAAA,GAAQ,GAAA,CAAI,KAAA,IAAS,KAAK,UAAA,CAAW,KAAA;AACrD,IAAA,IAAA,CAAK,UAAA,CAAW,WAAA,GAAc,GAAA,CAAI,OAAA,IAAW,KAAK,UAAA,CAAW,WAAA;AAC7D,IAAA,IAAA,CAAK,WAAW,gBAAA,GACd,GAAA,CAAI,UAAA,CAAW,gBAAA,IAAoB,KAAK,UAAA,CAAW,gBAAA;AAErD,IAAA,IAAI,WAAA,CAAY,CAAC,CAAA,CAAE,MAAA,GAAS,KAAK,UAAA,CAAW,IAAA,CAAK,KAAK,MAAA,EAAQ;AAC5D,MAAA,KAAA,IACM,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,EAClC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,CAAE,MAAA,EACnB,CAAA,EAAA,EACA;AACA,QAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,GAAA,CAAI,CAAC,OAAO,WAAA,KAAgB;AAChE,UAAA,IAAI,KAAA,CAAM,SAAA,KAAc,OAAA,IAAW,KAAA,CAAM,cAAc,QAAA,EAAU;AAC/D,YAAA,MAAM,WAAA,GAAc;AAAA,cAClB,GAAG,KAAA;AAAA,cACH,GAAG,YAAA,CAAa,KAAA,CAAM,GAAG,EAAE,CAAC;AAAA,aAC9B;AACA,YAAA,OAAO,WAAA;AAAA;AAET,UAAA,OAAO;AAAA,YACL,GAAG,KAAA;AAAA,YACH,KAAA,EAAO,CAAA;AAAA,YACP,UAAA,EAAY;AAAA,cACV,UAAA,EAAY,WAAA,CAAY,WAAW,CAAA,CAAE,CAAC,CAAA,EAAG,UAAA;AAAA,cACzC,KAAA,EAAO,WAAA,CAAY,WAAW,CAAA,CAAE,CAAC,CAAA,EAAG;AAAA;AACtC,WACF;AAAA,SACD,CAAA;AAED,QAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAAO,iBAAiB,CAAA;AAAA;AAC3D,KACF,MAAA,IAAW,YAAY,CAAC,CAAA,CAAE,SAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ;AACnE,MAAA,MAAM,gBAAgB,IAAI,KAAA;AAAA,QACxB,KAAK,UAAA,CAAW,IAAA,CAAK,KAAK,MAAA,GAAS,WAAA,CAAY,CAAC,CAAA,CAAE;AAAA,OACpD,CACG,IAAA,CAAK,CAAC,CAAA,CACN,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,CAAE,MAAM,CAAA;AAE1C,MAAA,aAAA,CACG,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA,CACpB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACd,QAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,aAAA,CAAc,CAAC,GAAG,MAAA,EAAO;AAAA,OAC/C,CAAA;AAAA;AAGL,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,WAAA,EAAa,UAAA,KAAe;AAC/C,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,EAAO,QAAA,KAAa;AACvC,QAAA,MAAM,eAAA,GAAkB,YAAY,UAAU,CAAA;AAC9C,QAAA,MAAM,KAAK,eAAA,CAAgB,EAAA;AAE3B,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI,QAAQ,CAAA;AAE5C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,iBAAkB,KAAA,EACpB,aAAA;AACJ,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAC,KAAA,CAAiB,WAAA;AAAA,cAChB,eAAA;AAAA,cACA,aAAa,cAAc;AAAA,aAC7B;AAAA;AAGF,UAAA,MAAA,CAAO,MAAA;AAAA,YACL,KAAA,CAAM,UAAA;AAAA,YACNA,eAAA,CAAc,MAAM,UAAiB;AAAA,WACvC;AACA,UAAA,KAAA,CAAM,UAAA,CAAW,KAAA,GAAQ,IAAA,CAAK,UAAA,GAAa,QAAA;AAC3C,UAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,YAAA,KAAA,CAAM,kBAAA,CAAoB,MAAc,QAAQ,CAAA;AAAA,WAClD,MAAA,IAAW,iBAAiB,UAAA,EAAY;AACtC,YAAC,KAAA,CAAqB,QAAA;AAAA,cACpB;AAAA,gBACE,SAAA,EACG,MAAwC,cAAA,IAAkB,EAAA;AAAA,gBAC7D,UAAA,EAAY,MAAM,KAAA,IAAS;AAAA,eAC7B;AAAA,cACA,EAAE,OAAO,IAAA;AAAK,aAChB;AAAA,WACF,MAAA,IAAW,iBAAiB,kBAAA,EAAoB;AAC9C,YAAA,KAAA,CAAM,QAAA,CAAS,MAAM,KAAA,EAAO,EAAE,aAAa,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAAA;AACjE;AACF,OACD,CAAA;AAAA,KACF,CAAA;AAED,IAAA,IAAA,CAAK,0BAAA,EAA2B;AAAA;AAClC,EAEA,MAAgB,UACd,QAAA,EACA;AACA,IAAA,OAAO,IAAA;AAAA,MACL,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,MAAM,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QACrC,MAAA,EAAQ,YAAA;AAAA,QACR,SAAS,OAAA,CAAQ,KAAA;AAAA,QACjB,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,QACvB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,QAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW;AAAA,OACjC,CAAA;AAAA,MACD;AAAA,QACE,iBAAA,EAAmB,WAAA;AAAA,QACnB,gBAAA,EAAkB,EAAE,WAAA,EAAa,QAAA,EAAS;AAAA,QAC1C,GAAG;AAAA;AACL,KACF;AAAA;AACF,EAEQ,QAAA,CAAS,MAAgB,SAAA,EAA0B;AACzD,IAAA,IAAI,GAAA,GAAM,QAAA;AAEV,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAErB,MAAA,MAAM,SAAA,GAAY,SAAA,KAAc,IAAA,GAAO,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAEnD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,CAAC,CAAA;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,SAAS,CAAA;AAG9D,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC5B,UAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,CAAA,CAAE,UAAA,CAAW,KAAM,CAAA;AACzC,UAAA,IAAA,CAAK,KAAA,CAAM,WAAW,SAAS,CAAA;AAC/B,UAAA,CAAA,CAAE,WAAW,KAAA,GAAQ,SAAA;AAAA,SACtB,CAAA;AACD,QAAA,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAO,CAAA,CAAE,UAAA,CAAW,KAAA,GAAQ,CAAE,CAAA;AAE9D,QAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAG7C,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,WAAW,CAAA;AAC3D,QAAA,SAAA,CAAU,QAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA;AAClD;AAGF,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,IAAA,CAAK,eAAA,CACF,eAAA,CAAgB,qBAAqB,CAAA,EACpC,cAAA;AAAA,QACA,KAAK,eAAA,CAAgB,IAAA,CAAK,cAAc,GAAG,CAAA,CAAG,SAAS,IAAI;AAAA,OAC7D;AAAA;AACJ;AACF,EAEO,cAAA,GAAiB;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,CAAC,IAAA,CAAK,KAAA,CAAM,WAAA;AAAA;AAEzC;;ACzzCO,MAAM,sBAAsB,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA,EAItC,IAAW,UAAA,GAAa;AACtB,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,CAAW,QAAA;AACjC,IAAA,OAAOW,OAAA;AAAA,MAAA,CACJ,IAAA,CAAK,WAAW,WAAA,GAAc,CAAA,IAAK,WAClC,CAAA,GACA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,MAAA;AAAA,MAC5B;AAAA,KACF;AAAA;AACF,EAEO,MAAA,GAA2B;AAChC,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA,EAAG;AACzC,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,SAAS,CAAA,EAAG;AAI/C,UAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,EAAE,CAAA;AAAA,SAC1C,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,YACnD,QAAA,EAAU;AAAA,cACR,UAAA,EAAY;AAAA;AACd,WACD,CAAA;AAED,UAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA;AAG9D,UAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,YAAA,MAAM,IAAA,CAAK,WAAA,CAAY,GAAA,CAAK,IAAA,CAAM,OAAQ,CAAA;AAC1C,YAAA,IAAA,CAAK,WAAW,cAAA,EAAe;AAC/B,YAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,CAAA,EAAG,gBAAgB,IAAI,CAAA;AACtD,YAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,EAAE,GAAG,cAAA,EAAe;AAAA;AAGnD,UAAA,OAAO,IAAA;AAAA;AACT;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEU,iBAAiB,KAAA,EAGxB;AACD,IAAA,IAAI,QAAQ,KAAA,CAAM,KAAA;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,QAAA;AAE/B,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,YAAY,CAAA,EAAG;AAK5C,QAAA,IAAI,WAAc,KAAA,EAAO;AACvB,UAAA,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5D,YAAA,OAAO,EAAE,QAAA,EAAS;AAAA,WACnB,CAAA;AAAA,SACH,MAAO;AACL,UAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA;AAGlD,QAAA,MAAM,kBAAkB,YAAA,CAAa,KAAK,CAAA,CACvC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,EACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,GAAI,KAAK,UAAU,CAAA;AAEjC,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,YAAY,CAAA,EAAG;AAIlD,UAAA,MAAM,IAAA,CAAK,gBAAgB,YAAA,EAAc;AAAA,YACvC,UAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,YACnD,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,MAAA;AAAA,cACZ,KAAA,EAAO;AAAA;AACT,WACD,CAAA;AAED,UAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA;AAG9D,UAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,YAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,YAAA,CAAa,KAAK,CAAC,CAAA;AAChD,YAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,YAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAK,IAAA,CAAM,OAAQ,CAAA;AACpC,YAAA,IAAA,CAAK,WAAW,cAAA,EAAe;AAE/B,YAAA,IAAI,cAAA;AAEJ,YAAA,IAAI,WAAA,KAAgB,KAAK,WAAA,EAAa;AACpC,cAAA,cAAA,GACE,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,IAClC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,QAAA,GAAW,CAAC,CAAA;AAAA,aAC1C,MAAO;AACL,cAAA,cAAA,GAAiB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,CAAA;AAAA;AAGlD,YAAA,cAAA,EAAgB,gBAAgB,IAAI,CAAA;AACpC,YAAA,cAAA,EAAgB,cAAA,EAAe;AAAA;AAGjC,UAAA,OAAO,IAAA;AAAA;AACT;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAa,aAAA,GAAgB;AAC3B,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,EAAE,MAAA,EAAQ,iBAAiB,CAAA;AAAA;AAC1D,EAEA,MAAa,WAAW,KAAA,EAA6C;AACnE,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,EAAE,KAAA,EAAO,CAAA;AAAA;AACxC,EAEA,MAAa,SAAS,IAAA,EAAgC;AACpD,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,QACnD,QAAA,EAAU;AAAA,UACR,UAAA,EAAY,UAAA;AAAA,UACZ,MAAM,IAAA,GAAO;AAAA;AACf,OACD,CAAA;AAED,MAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA;AAG9D,MAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,QAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAK,IAAA,CAAM,OAAQ,CAAA;AACpC,QAAA,IAAA,CAAK,WAAW,cAAA,EAAe;AAC/B,QAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,CAAA,EAAG,gBAAgB,IAAI,CAAA;AAAA;AAGxD,MAAA,OAAO,IAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAa,SAAS,KAAA,EAA6C;AACjE,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC1C,QAAA,MAAM,UAAU,YAAA,CAAa,KAAA,IAAS,KAAK,eAAe,CAAA,CACvD,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,GAAI,KAAK,UAAU,CAAA;AAEjC,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA,EAAG;AAChD,UAAA,MAAM,IAAA,CAAK,gBAAgB,UAAA,EAAY;AAAA,YACrC,UAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,YACnD,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,MAAA;AAAA,cACZ,KAAA,EAAO;AAAA;AACT,WACD,CAAA;AAED,UAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA;AAG9D,UAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,YAAA,MAAM,uBAAA,GAA0B,IAAA,CAAK,UAAA,CAClC,eAAA,EAAgB,CAChB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,CAAA;AAC1B,YAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,YAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAK,IAAA,CAAM,OAAQ,CAAA;AAEpC,YAAA,IAAA,CAAK,WAAW,cAAA,EAAe;AAC/B,YAAA,IAAI,WAAA,KAAgB,KAAK,WAAA,EAAa;AACpC,cAAA,IAAA,CAAK,UAAA,CAAW,YAAA;AAAA,gBACd,uBAAA,CAAwB,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAC;AAAA,eAC1C;AACA,cAAA,IAAA,CAAK,UAAA,CAAW,eAAA,EAAgB,CAAE,CAAC,GAAG,cAAA,EAAe;AAAA,aACvD,MAAO;AACL,cAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,CAAC,GAAG,cAAA,EAAe;AAC7C,cAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,gBAAgB,IAAI,CAAA;AAAA;AACpD;AAGF,UAAA,OAAO,IAAA;AAAA;AACT;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAa,OAAO,KAAA,EAA6C;AAC/D,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY;AAClC,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC1C,QAAA,MAAM,UAAU,YAAA,CAAa,KAAA,IAAS,KAAK,eAAe,CAAA,CACvD,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,GAAI,KAAK,UAAU,CAAA;AAEjC,QAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,UAAU,CAAA,EAAG;AAChD,UAAA,MAAM,IAAA,CAAK,gBAAgB,UAAA,EAAY;AAAA,YACrC,UAAA,EAAY,IAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,SACH,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAA8B;AAAA,YACnD,QAAA,EAAU;AAAA,cACR,UAAA,EAAY,IAAA;AAAA,cACZ,KAAA,EAAO;AAAA;AACT,WACD,CAAA;AAED,UAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,GAAM,IAAA,EAAM,SAAA;AAC/B,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA;AAG9D,UAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,YAAA,MAAM,uBAAA,GAA0B,IAAA,CAAK,UAAA,CAClC,eAAA,EAAgB,CAChB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,CAAA;AAE1B,YAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,YAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAK,IAAA,CAAM,OAAQ,CAAA;AAEpC,YAAA,IAAA,CAAK,WAAW,cAAA,EAAe;AAC/B,YAAA,IAAI,WAAA,KAAgB,KAAK,WAAA,EAAa;AACpC,cAAA,IAAA,CAAK,UAAA,CAAW,YAAA;AAAA,gBACd,uBAAA,CAAwB,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAC;AAAA,eAC1C;AACA,cAAA,IAAA,CAAK,UAAA,CAAW,eAAA,EAAgB,CAAE,CAAC,GAAG,cAAA,EAAe;AAAA,aACvD,MAAO;AACL,cAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,CAAA,EAAG,gBAAgB,IAAI,CAAA;AACtD,cAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,EAAE,GAAG,cAAA,EAAe;AAAA;AACnD;AAGF,UAAA,OAAO,IAAA;AAAA;AACT;AAGF,MAAA,OAAO,KAAA;AAAA,KACR,CAAA;AAAA;AAEL;;ACzQO,MAAM,cAAc,KAAA,CAA4B;AAAC;;;;;;;;ACQxD,KAAA,CAAM,OAAO,iBAAiB,CAAA;AAIvB,MAAM,cAAc,iBAAA,CAIzB;AAAA,EAJK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAKL,IAAAd,eAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,IAAA,CAAA;AAAA;AAAA,EAEpB,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEA,MAAa,QAAA,CACX,QAAA,EACA,OAAA,EACkB;AAClB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,GAAA,EAAK;AACpC,MAAA,IAAI,CAAC,KAAK,UAAA,CAAW,MAAA,IAAU,KAAK,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AACnE,QAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,KAAM,EAAA;AAAI,UAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,IAAA;AAElE,QAAA,OAAO,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,QAAQ,GAAG,OAAO,CAAA;AAAA;AACjD,KACF,MAAA,IAAW,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,GAAA,EAAK;AAC3C,MAAA,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,CAAA;AAAA,KAC1C,MAAA,IAAW,IAAA,CAAK,SAAA,CAAU,SAAA,KAAc,GAAA,EAAK;AAC3C,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,OAAA,EAAS,MAAM,CAAA;AAC3C,MAAA,MAAM,SAAS,aAAA,EAAc;AAE7B,MAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,QAAA,MAAM,IAAI,KAAA,CAAM,QAAA,CAAS,IAAA,EAAK,EAAG,OAAO,IAAI,CAAA;AAC5C,QAAA,IAAI,CAAC,CAAA,CAAE,OAAA,MAAa,QAAA,CAAS,IAAA,OAAW,EAAA,EAAI;AAC1C,UAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,QAAA;AAAA,YACnC,IAAA,CAAK,SAAQ,CAAE,SAAA;AAAA,YACf;AAAA,WACF,CAAE,IAAA;AACF,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA;AAEnB,QAAA,OAAO,KAAA,CAAM,QAAA,CAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,EAAE,MAAA,CAAO,MAAM,CAAA,GAAI,EAAA,EAAI,OAAO,CAAA;AAAA;AAGpE,MAAA,IAAI,oBAAoB,IAAA,EAAM;AAC5B,QAAA,MAAM,CAAA,GAAI,MAAM,QAAQ,CAAA;AACxB,QAAA,IAAI,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG;AAChB,UAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,QAAA;AAAA,YACnC,IAAA,CAAK,SAAQ,CAAE,SAAA;AAAA,YACf;AAAA,WACF,CAAE,IAAA;AACF,UAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA;AAEnB,QAAA,OAAO,KAAA,CAAM,QAAA,CAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,EAAE,MAAA,CAAO,MAAM,CAAA,GAAI,EAAA,EAAI,OAAO,CAAA;AAAA;AACpE;AAGF,IAAA,OAAO,KAAA;AAAA;AACT,EAEQ,cAAc,KAAA,EAAwB;AAC5C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,EAAA;AACrC,MAAA,OAAO,IAAA;AAAA;AAGT,IAAA,MAAM,QAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,UAAU,EAAE,CAAA;AAErD,IAAA,IAAI,CAAC,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,IAAK,UAAU,EAAA,EAAI;AAC9C,MAAA,IAAA,CAAK,MAAM,UAAA,CAAW,YAAA,GACpB,KAAK,UAAA,CAAW,aAAA,IAAiB,OAAO,sBAAA,EAAuB;AACjE,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,IAAgB,CAAC,IAAA,CAAK,SAAA;AAAW,MAAA,OAAO,KAAA;AAElE,IAAA,OAAO,MAAM,QAAA,EAAS;AAAA;AACxB,EAEU,YAAA,GAAwB;AAChC,IAAA,OAAO,CAAC,CAAC,MAAA,CAAO,KAAK,QAAA,EAAU,EAAE,IAAA,EAAK;AAAA;AAE1C;;AChGO,MAAM,cAAc,KAAA,CAAkD;AAAC;;ACDvE,MAAM,aAAa,KAAA,CAA2B;AAAC;;ACI/C,MAAM,iBAAiB,kBAAA,CAG5B;AAAA,EACA,WAAA,CAAY;AAAA,IACV,aAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,GACL,EAA4B;AAC1B,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG;AAAA,QACD,GAAG,UAAA;AAAA,QACH,KAAA,EAAO,YAAA,CAAa,aAAa,CAAA,CAC9B,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAK;AAAA,OACvB;AAAA,MACA,UAAA,EAAY;AAAA,QACV,GAAG,UAAA,CAAW,UAAA;AAAA,QACd,aAAA,EAAe,aAAa,aAAa;AAAA;AAC3C,KACD,CAAA;AAAA;AACH,EAEU,QAAA,GAAW;AACnB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAAA;AACnC,EAEO,QAAA,CACL,UACA,OAAA,EAQkB;AAClB,IAAA,OAAO,KAAA,CAAM,QAAA,CAAS,YAAA,CAAa,QAAQ,GAAG,OAAO,CAAA;AAAA;AACvD,EAEA,MAAa,QAAA,GAA6B;AACxC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAA,EAAO;AAC/B,MAAA,IAAI,CAAE,MAAM,IAAA,CAAK,YAAY,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAI;AAC/C,QAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA,GAAe,MAAA,CAAO,iBAAA,EAAkB;AAC9D,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,MAAM,UACJ,CAAC,CAAC,KAAK,QAAA,EAAS,CAAE,CAAC,CAAA,IACnB,CAAC,KAAK,UAAA,CAAW,QAAA,IACjB,KAAK,UAAA,CAAW,WAAA,IAChB,KAAK,UAAA,CAAW,gBAAA,IAChB,KAAK,UAAA,CAAW,QAAA;AAElB,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,YAAA,GAAe,OAAA,GACjC,OACA,MAAA,CAAO,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAEjD,IAAA,OAAO,CAAC,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,YAAA;AAAA;AAElC;;AClEO,MAAM,iBAAiB,kBAAA,CAG5B;AAAA,EACU,YAAA,GAAwB;AAChC,IAAA,OAAO,CAAC,CAAC,MAAA,CAAO,KAAK,QAAA,EAAU,EAAE,IAAA,EAAK;AAAA;AAE1C;;ACCO,MAAM,cAAc,kBAAA,CAIzB;AAAA,EACA,WAAA,CAAY,EAAE,aAAA,EAAe,GAAG,YAAW,EAA+B;AACxE,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,UAAA;AAAA,MACH,UAAA,EAAY,EAAE,GAAG,UAAA,CAAW,YAAY,aAAA;AAAc,KACvD,CAAA;AAAA;AACH,EAEA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,MAAM,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA;AACnC,EAEA,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEO,aAAa,KAAA,EAAY;AAC9B,IAAA,OAAO,KAAK,UAAA,CAAW,aAAA,GACnB,aAAa,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA,CAAE,IAAA;AAAA,MAC1C,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,OAClB,KAAA,GACH,KAAA;AAAA;AAER;;ACpCO,MAAM,eAAe,kBAAA,CAI1B;AAAA,EACA,WAAA,CAAY,EAAE,aAAA,EAAe,GAAG,YAAW,EAA0B;AACnE,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,UAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,GAAG,UAAA,CAAW,UAAA;AAAA,QACd,aAAA,EAAe,aAAa,aAAa;AAAA;AAC3C,KACD,CAAA;AAAA;AACH,EAEU,eAAA,CAAgB;AAAA,IACxB,UAAA,EAAY,EAAE,aAAA;AAAc,GAC9B,EAA6E;AAC3E,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,MACb,MAAA;AAAA,QACE,KAAK,KAAA,CAAM,KAAA,KAAU,KACjB,IAAA,CAAK,KAAA,CAAM,QACV,aAAA,EAAe,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA,EAAG,UACtC,aAAA,GAAgB,CAAC,GAAG,KAAA,IAAS,EAAA;AAAA;AACtC,KACF;AAAA;AACF,EAEU,gCACR,KAAA,EACyB;AACzB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,+BAAA,CAAgC,MAAA,CAAO,KAAK,CAAC,CAAA;AAChE,IAAA,OAAO,IAAA;AAAA;AACT,EAEO,aAAa,KAAA,EAAY;AAC9B,IAAA,OAAO,KAAK,UAAA,CAAW,aAAA,GACnB,aAAa,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA,CAAE,IAAA;AAAA,MAC1C,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,OAClB,KAAA,GACH,KAAA;AAAA;AAER;;AC7CO,MAAM,iBAAiB,iBAAA,CAG5B;AAAA,EACU,YAAA,GAAwB;AAChC,IAAA,OAAO,CAAC,CAAC,MAAA,CAAO,KAAK,QAAA,EAAU,EAAE,IAAA,EAAK;AAAA;AACxC,EAEU,gCACR,KAAA,EACyB;AACzB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,+BAAA,CAAgC,KAAK,CAAA;AACxD,IAAA,IAAA,CAAK,SAAU,WAAA,GAAc,MAAA;AAC7B,IAAA,OAAO,IAAA;AAAA;AAEX;;AChBO,MAAM,cAAc,KAAA,CAA4B;AAAC;;;;;;;;ACgBxD,SAAS,eAAe,IAAA,EAAgC;AACtD,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AAChC,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,GAAA,CAAI,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA;AAErB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,GAAA,CAAI,KAAK,GAAG,cAAA,CAAe,aAAa,IAAA,CAAK,aAAa,CAAC,CAAC,CAAA;AAAA;AAE9D,IAAA,OAAO,GAAA;AAAA,GACT,EAAG,EAAkB,CAAA;AACvB;AAEO,MAAM,aAAa,kBAAA,CAIxB;AAAA,EAiCA,WAAA,CAAY,EAAE,aAAA,EAAe,GAAG,OAAM,EAAwB;AAC5D,IAAA,KAAA,CAAM,KAAK,CAAA;AAjCb,IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAAuB,EAAC,CAAA;AAkCtB,IAAA,IAAA,CAAK,UAAA,CAAW,aAAA,GAAgB,YAAA,CAAa,aAAa,CAAA;AAAA;AAC5D,EAjCQ,eAAA,CACN,QACA,EAAA,EACA;AACA,IAAA,YAAA,CAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC9B,MAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO;AAAA,QACzB,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,QAClB,YAAA,EAAc;AAAA,UACZ,OAAO,CAAA,CAAE,IAAA;AAAA,UACT,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,KAAM,MAAA;AAAA,UAC5D,YAAA,EACE,aAAa,CAAA,CAAE,aAAa,EAAE,MAAA,KAAW,CAAA,IACzC,KAAK,UAAA,CAAW,SAAA;AAAA,UAClB,UAAA,EAAY,IAAA;AAAA,UACZ,MAAM,MAAM;AACV,YAAA,IACG,IAAA,CAAK,UAAA,CAAW,UAAA,IAAc,CAAA,CAAE,aAAA,IAChC,KAAK,UAAA,CAAW,QAAA,IAAY,CAAC,CAAA,CAAE,aAAA,EAChC;AACA,cAAA,OAAO,IAAA;AAAA;AAET,YAAA,OAAO,IAAA;AAAA;AACT;AACF,OACD,CAAA;AAED,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAA,CAAE,aAAa,CAAA;AAAA,KAC3C,CAAA;AAAA;AACH,EAOU,gCACR,KAAA,EACyB;AACzB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,+BAAA,CAAgC,KAAK,CAAA;AACxD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,IAAA,CAAK,QAAA;AAAA,QACR,WAAA,EAAa;AAAA;AACf,KACF;AAAA;AACF,EAEA,SAAA,CACE,WACA,OAAA,EACkB;AAClB,IAAA,OAAO,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA;AAAA;AAC3C,EAEU,QAAA,GAAoB;AAC5B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAAA;AACnC,EAEA,WAAA,CACE,UACA,SAAA,EACA;AACA,IAAA,IAAI,aAAa,eAAA,EAAiB;AAChC,MAAA,IAAA,CAAK,WAAW,iBAAA,EAAkB;AAClC,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,cAAA;AAAA,QACjB,aAAa,SAAgB;AAAA,OAC/B;AACA,MAAA,IAAA,CAAK,eAAA;AAAA,QACH,IAAA,CAAK,UAAA;AAAA,QACL;AAAA,OACF;AAAA;AAEF,IAAA,KAAA,CAAM,WAAA,CAAY,UAAU,SAAS,CAAA;AAAA;AACvC,EAEA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AAErB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,CAAK,WAAW,aAAa,CAAA;AAE/D,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,QAAA,CAAS;AAAA,MAC7B,QAAA,EAAU,CAAC,EAAA,KAAO;AAChB,QAAA,IACE,kBAAkB,IAAI,CAAA,IACtB,IAAA,CAAK,UAAA,CAAW,YAChB,IAAA,CAAK,UAAA,CAAW,QAAA,IAChB,IAAA,CAAK,WAAW,QAAA,IAChB,IAAA,CAAK,aAAA,EAAc,EAAG,WAAW,QAAA,EACjC;AACA,UAAA,OAAO,KAAA;AAAA,SACT,MAAO;AACL,UAAA,MAAM,SAAA,GAAY,CAAC,GAAG,EAAA,CAAG,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAClD,UAAA,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,EAAE,WAAA,EAAa,OAAO,CAAA;AAC/C,UAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,YAAA,IAAA,CAAK,SAAS,EAAC,EAAG,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA;AAE1C,UAAA,OAAO,IAAA;AAAA;AACT,OACF;AAAA,MACA,UAAA,EAAY,KAAK,UAAA,CAAW,WAAA;AAAA,MAC5B,uBAAA,EAAyB,CAAC,IAAA,CAAK,UAAA,CAAW;AAAA,KAC3C,CAAA;AAED,IAAA,IAAA,CAAK,WAAA;AAAA,MACH,eAAA;AAAA,MACA,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,aAAa;AAAA,KAC5C;AAAA;AACF,EAEU,YAAA,GAAe;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAAA;AACnC,EAEA,MAAa,QAAA,CACX,QAAA,EACA,OAAA,EAQkB;AAClB,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,QAAA,CAAS,UAAU,OAAO,CAAA;AAElD,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA;AAG1E,IAAA,OAAO,GAAA;AAAA;AAEX;;;;;;;;AC/JO,MAAM,uBAAuB,KAAA,CAAgC;AAAA,EAElE,YAAY,UAAA,EAAgE;AAC1E,IAAA,KAAA,CAAM,UAAU,CAAA;AAFlB,IAAAA,eAAA,CAAA,IAAA,EAAQ,kBAAA,CAAA;AAAA;AAGR,EAEA,MAAM,UAAA,GAAa;AACjB,IAAA,MAAM,MAAM,MAAM,GAAA;AAAA,MAChB,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QAC/B,OAAA,EAAS,sCAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACT;AAAA,KACH;AAEA,IAAA,IAAI,GAAA,EAAK,MAAM,OAAA,EAAS;AACtB,MAAA,OAAO,IAAA;AAAA;AAET,IAAA,OAAO,KAAA;AAAA;AACT,EAEA,IAAI,uBAAA,GAA0B;AAC5B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAC1C,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,GAAQ,KAAA,EAAO,QAAQ,eAAe,CAAA;AACtC,IAAA,KAAA,IAAS,EAAA;AAET,IAAA,GAAA,GAAM,KAAA,EAAO,QAAQ,SAAS,CAAA;AAC9B,IAAA,GAAA,IAAO,CAAA;AAEP,IAAA,MAAM,QAAA,GAAW,KAAA,EACb,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,CACjB,UAAA,CAAW,CAAA,CAAA,CAAA,EAAK,CAAA,CAAE,CAAA,CAClB,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAEnC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,MACjB,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,MACjB,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,MACpB,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,MACjB,iBAAA,EAAmB,SAAS,CAAC,CAAA;AAAA,MAC7B,cAAA,EAAgB,SAAS,CAAC;AAAA,KAC5B;AAAA;AACF,EAEA,MAAM,KAAK,IAAA,EAA2B;AACpC,IAAA,MAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AACrB,IAAA,IAAA,CAAK,mBAAmB,IAAI,SAAA;AAAA,MAC1B,IAAA,CAAK,uBAAA;AAAA,MACL;AAAA,QACE,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAAA,QACjC,UAAA,EAAY,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAAA,QACrC,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,QAC/B,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI;AAAA,OACnC;AAAA,MACA,WAAA;AAAA,MACA,SAAA,CAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,SAAS;AAAA,KACpC;AACA,IAAA,IAAI,IAAA,CAAK,gBAAA;AAAkB,MAAA,IAAA,CAAK,iBAAiB,QAAA,EAAS;AAAA;AAC5D,EAEA,MAAM,QAAA,CACJ,OAAA,EACA,KAAA,EACA,KAAA,EACA,UACA,KAAA,EACA;AACA,IAAA,MAAM,MAAM,MAAM,GAAA;AAAA,MAChB,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QAC/B,OAAA,EAAS,sCAAA;AAAA,QACT,MAAA,EAAQ,2BAAA;AAAA,QACR,OAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAO,KAAK,IAAA,IAAQ,IAAA;AAAA;AACtB,EAEA,MAAM,QAAA,CACJ,KAAA,EACA,OAAA,EACA,WACA,IAAA,EACA;AACA,IAAA,MAAM,MAAM,MAAM,IAAA;AAAA,MAChB,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QAC/B,OAAA,EAAS,sCAAA;AAAA,QACT,MAAA,EAAQ,8BAAA;AAAA,QACR,KAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAO,GAAA,EAAK,IAAA,EAAM,aAAA,EAAe,YAAA,IAAgB,EAAC;AAAA;AACpD,EAEA,MAAM,OAAA,CAAQ,OAAA,EAAiB,IAAA,EAAc,SAAA,EAAmB;AAC9D,IAAA,MAAM,GAAA;AAAA,MACJ,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AAAA,QAC/B,OAAA,EAAS,sCAAA;AAAA,QACT,MAAA,EAAQ,kCAAA;AAAA,QACR,OAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA;AACF,EAEA,IAAI,eAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA;AAEhB;;ACrIA,MAAM,cAAA,GAAiB,OAAO,MAAA,CAAO;AAAA;AAAA,EAEnC,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,aAAA,EAAe,UAAA;AAAA,EACf,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,UAAA;AAAA,EACf,SAAA,EAAW,MAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,WAAA,EAAa,QAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA;AAAA,EAGd,aAAA,EAAe,MAAA;AAAA,EACf,aAAA,EAAe,MAAA;AAAA,EACf,iBAAA,EAAmB,UAAA;AAAA,EACnB,iBAAA,EAAmB,UAAA;AAAA,EACnB,uBAAA,EAAyB,eAAA;AAAA,EACzB,mBAAA,EAAqB,WAAA;AAAA,EACrB,cAAA,EAAgB,OAAA;AAAA,EAChB,iBAAA,EAAmB,UAAA;AAAA,EACnB,gBAAA,EAAkB,SAAA;AAAA,EAClB,gBAAA,EAAkB,SAAA;AAAA,EAClB,cAAA,EAAgB,OAAA;AAAA,EAChB,aAAA,EAAe,UAAA;AAAA,EACf,aAAA,EAAe,MAAA;AAAA,EACf,mBAAA,EAAqB,YAAA;AAAA,EACrB,kBAAA,EAAoB,WAAA;AAAA,EACpB,cAAA,EAAgB,UAAA;AAAA,EAChB,kBAAA,EAAoB,UAAA;AAAA,EACpB,oBAAA,EAAsB,YAAA;AAAA,EACtB,sBAAA,EAAwB,iBAAA;AAAA,EACxB,0BAAA,EAA4B,kBAAA;AAAA,EAC5B,kBAAA,EAAoB,WAAA;AAAA,EACpB,mBAAA,EAAqB,WAAA;AAAA,EACrB,kBAAA,EAAoB,UAAA;AAAA,EACpB,gBAAA,EAAkB,SAAA;AAAA,EAClB,oBAAA,EAAsB,YAAA;AAAA,EACtB,sBAAA,EAAwB,aAAA;AAAA,EACxB,oBAAA,EAAsB,YAAA;AAAA,EACtB,iBAAA,EAAmB,SAAA;AAAA,EACnB,gBAAA,EAAkB,QAAA;AAAA,EAClB,mBAAA,EAAqB,WAAA;AAAA,EACrB,kBAAA,EAAoB,UAAA;AAAA,EACpB,sBAAA,EAAwB,cAAA;AAAA,EACxB,wBAAA,EAA0B,iBAAA;AAAA,EAC1B,YAAA,EAAc,KAAA;AAAA,EACd,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,8BAAA,EAAgC,mBAAA;AAAA,EAChC,uBAAA,EAAyB,eAAA;AAAA,EACzB,mBAAA,EAAqB,OAAA;AAAA,EACrB,wBAAA,EAA0B,eAAA;AAAA,EAC1B,gCAAA,EAAkC,mBAAA;AAAA,EAClC,8BAAA,EAAgC,iBAAA;AAAA,EAChC,iCAAA,EAAmC,mBAAA;AAAA,EACnC,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,qBAAA,EAAuB,YAAA;AAAA,EACvB,mBAAA,EAAqB,cAAA;AAAA,EACrB,mBAAA,EAAqB,WAAA;AAAA,EACrB,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,8BAAA,EAAgC,qBAAA;AAAA,EAChC,0BAAA,EAA4B,eAAA;AAAA,EAC5B,0BAAA,EAA4B,eAAA;AAAA,EAC5B,wBAAA,EAA0B,eAAA;AAAA,EAC1B,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,uBAAA,EAAyB,cAAA;AAAA,EACzB,sBAAA,EAAwB,aAAA;AAAA,EACxB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,sBAAA,EAAwB,iBAAA;AAAA,EACxB,qBAAA,EAAuB,aAAA;AAAA,EACvB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,gBAAA,EAAkB,SAAA;AAAA,EAClB,qBAAA,EAAuB,aAAA;AAAA,EACvB,kBAAA,EAAoB,SAAA;AAAA;AAAA,EAEpB,sBAAA,EAAwB,WAAA;AAAA,EACxB,eAAA,EAAiB,QAAA;AAAA,EACjB,oBAAA,EAAsB,aAAA;AAAA,EACtB,mBAAA,EAAqB,WAAA;AAAA,EACrB,oBAAA,EAAsB,YAAA;AAAA,EACtB,kBAAA,EAAoB,UAAA;AAAA,EACpB,kBAAA,EAAoB,UAAA;AAAA,EACpB,iBAAA,EAAmB,SAAA;AAAA;AAAA,EAEnB,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,6BAAA,EAA+B,SAAA;AAAA,EAC/B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,6BAAA,EAA+B,aAAA;AAAA,EAC/B,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,oCAAA,EAAsC,oBAAA;AAAA,EACtC,oCAAA,EAAsC,oBAAA;AAAA,EACtC,oCAAA,EAAsC,eAAA;AAAA,EACtC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,2BAAA,EAA6B,cAAA;AAAA,EAC7B,gCAAA,EAAkC,eAAA;AAAA,EAClC,6BAAA,EAA+B,gBAAA;AAAA,EAC/B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,iCAAA,EAAmC,mBAAA;AAAA,EACnC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,+BAAA,EAAiC,sBAAA;AAAA,EACjC,kCAAA,EAAoC,qBAAA;AAAA;AAAA,EAGpC,oBAAA,EACE,mFAAA;AAAA;AAAA,EAGF,eAAA,EAAiB,OAAA;AAAA,EACjB,cAAA,EAAgB,MAAA;AAAA,EAEhB,yBAAA,EAA2B,iBAAA;AAAA,EAC3B,mBAAA,EAAqB,WAAA;AAAA,EACrB,YAAA,EAAc,KAAA;AAAA,EACd,sBAAA,EAAwB,cAAA;AAAA,EACxB,mBAAA,EAAqB,WAAA;AAAA,EACrB,mBAAA,EAAqB,WAAA;AAAA,EACrB,qBAAA,EAAuB,aAAA;AAAA,EACvB,cAAA,EAAgB;AAClB,CAAC,CAAA;;AChID,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO;AAAA,EAClC,oBAAA,EAAsB,WAAA;AAAA,EACtB,uBAAA,EAAyB,cAAA;AAAA,EACzB,oBAAA,EAAsB,cAAA;AAAA,EACtB,iBAAA,EAAmB,QAAA;AAAA,EACnB,uBAAA,EAAyB,aAAA;AAAA,EACzB,sBAAA,EAAwB;AAC1B,CAAC,CAAA;;ACJM,MAAM,SAAA,GAAY;AAAA,EACvB,GAAG,cAAA;AAAA,EACH,GAAG;AACL;;;;;;;;ACJO,MAAM,kBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EA8BrB,WAAA,GAAc;AAItB,IAAAA,eAAA,CAAA,IAAA,EAAQ,SAAA,sBAAc,GAAA,EAAsD,CAAA;AAH1E,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA;AACzB,EARA,WAAkB,QAAA,GAA8B;AAC9C,IAAA,IAAI,CAAC,mBAAkB,SAAA,EAAW;AAChC,MAAA,kBAAA,CAAkB,SAAA,GAAY,IAAI,kBAAA,EAAkB;AAAA;AAEtD,IAAA,OAAO,kBAAA,CAAkB,SAAA;AAAA;AAC3B,EAOQ,IAAI,EAAA,EAAY;AACtB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AAAA;AAEzB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA;AAC5B,EAEO,QAAQ,EAAA,EAAY;AACzB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,GAAW,IAAA;AAAA;AAC1B,EACO,OAAO,EAAA,EAAY;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,GAAW,KAAA;AAAA;AAC1B,EACO,KAAK,EAAA,EAAY;AACtB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,MAAA,GAAS,IAAA;AAAA;AACxB,EACO,WAAW,EAAA,EAAY;AAC5B,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA;AAAA;AACxB,EACO,SAAS,EAAA,EAAY;AAC1B,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,MAAA;AAAA;AACxB,EACO,KAAK,EAAA,EAAY;AACtB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,CAAE,MAAA,GAAS,KAAA;AAAA;AAE1B,CAAA;AA5DEA,eAAA,CADW,oBACJ,SAAA,EAAU,CAAA,CAAA;AACjBA,eAAA,CAFW,oBAEJ,MAAA,EAAO,CAAA,CAAA;AACdA,eAAA,CAHW,oBAGJ,UAAA,EAAW,CAAA,CAAA;AAClBA,eAAA,CAJW,oBAIJ,MAAA,EAAO,CAAA,CAAA;AACdA,eAAA,CALW,oBAKJ,MAAA,EAAO,CAAA,CAAA;AACdA,eAAA,CANW,oBAMJ,SAAA,EAAU,CAAA,CAAA;AACjBA,eAAA,CAPW,oBAOJ,UAAA,EAAW,CAAA,CAAA;AAClBA,eAAA,CARW,oBAQJ,OAAA,EAAQ,CAAA,CAAA;AACfA,eAAA,CATW,oBASJ,OAAA,EAAQ,CAAA,CAAA;AACfA,eAAA,CAVW,oBAUJ,WAAA,EAAY,CAAA,CAAA;AACnBA,eAAA,CAXW,oBAWJ,OAAA,EAAQ,EAAA,CAAA;AACfA,eAAA,CAZW,oBAYJ,cAAA,EAAe,EAAA,CAAA;AAEtBA,eAAA,CAdW,kBAAA,EAcJ,eAAc,kBAAA,CAAkB,OAAA,CAAA;AACvCA,eAAA,CAfW,kBAAA,EAeJ,gBAAe,kBAAA,CAAkB,QAAA,CAAA;AACxCA,eAAA,CAhBW,kBAAA,EAgBJ,YAAW,kBAAA,CAAkB,IAAA,CAAA;AACpCA,eAAA,CAjBW,kBAAA,EAiBJ,YAAW,kBAAA,CAAkB,QAAA,CAAA;AACpCA,eAAA,CAlBW,kBAAA,EAkBJ,eAAc,kBAAA,CAAkB,OAAA,CAAA;AACvCA,eAAA,CAnBW,kBAAA,EAmBJ,YAAW,kBAAA,CAAkB,IAAA,CAAA;AACpCA,eAAA,CApBW,kBAAA,EAoBJ,aAAY,kBAAA,CAAkB,KAAA,CAAA;AACrCA,eAAA,CArBW,kBAAA,EAqBJ,YAAW,kBAAA,CAAkB,IAAA,CAAA;AAEpCA,eAAA,CAvBW,kBAAA,EAuBI,WAAA,CAAA;AAvBV,IAAM,iBAAA,GAAN;;;;;;;;;;;;;;;;;;;;ACFP,IAAAe,YAAA,EAAAC,QAAA;AAMO,MAAe,SAAA,CAGtB;AAAA,EAIE,WAAA,CAAY,WAAsB,KAAA,EAAmB;AAHrD,IAAAT,cAAA,CAAA,IAAA,EAAAQ,YAAA,EAAA,MAAA,CAAA;AACA,IAAAR,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKM,YAAA,EAAa,SAAA,CAAA;AAClB,IAAAN,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,UAAA,CAAW,SAAA;AAAA;AAChC,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,UAAA,CAAW,EAAA;AAAA;AAChC,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,IAAI,QAAA,CAASR,cAAA,CAAA,IAAA,EAAKO,eAAYP,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,CAAA;AAAA;AAC5D,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,KAAA,IAAS,CAAA;AAAA;AACzC,EAEA,WAAA,CAAmC,MAAgB,KAAA,EAAgB;AACjE,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAA,CAAY,IAAA,EAAa,KAAK,CAAA;AAAA;AAC5C,EAEA,YAAmC,IAAA,EAAyB;AAC1D,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAA,CAAY,IAAW,CAAA;AAAA;AAC5C,EAEA,QAAA,GAA8B;AAC5B,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA;AAC5C,EACA,QAAA,GAAoB;AAClB,IAAA,OAAO,CAAC,CAACR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,MAAA;AAAA;AAEpC;AAtCED,YAAA,GAAA,IAAA,OAAA,EAAA;AACAC,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACXF,IAAAA,QAAA;AAcA,MAAqB,oBAAoB,SAAA,CAAkC;AAAA,EAGzE,WAAA,CAAY,WAAsB,KAAA,EAAe;AAC/C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAHxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAIE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAU,SAAS,CAAA;AAAA;AACjC;AACF,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,KAAA,IAAS,EAAA;AAAA;AAEzC,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,UAAA,GAAmB;AACjB,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,KAAA,GAAQ,EAAA;AAAA;AACjC,EAEA,SAAS,KAAA,EAAqB;AAC5B,IAAA,IAAA,CAAK,WAAA,CAAY,SAAS,KAAK,CAAA;AAAA;AAEnC;AA3BEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACfF,IAAA,UAAA,EAAAA,QAAA;AASO,MAAM,aAAA,CAAc;AAAA,EAEzB,YAAY,SAAA,EAAsB;AADlC,IAAAT,cAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAEE,IAAAE,cAAA,CAAA,IAAA,EAAK,UAAA,EAAa,SAAA,CAAA;AAAA;AACpB,EAEA,IAAI,QAAA,GAAW;AACb,IAAA,OAAOD,qBAAK,UAAA,CAAA,CAAW,KAAA;AAAA;AACzB,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,OAAOA,qBAAK,UAAA,CAAA,CAAW,IAAA;AAAA;AACzB,EACA,IAAI,EAAA,GAAK;AACP,IAAA,OAAOA,qBAAK,UAAA,CAAA,CAAW,EAAA;AAAA;AACzB,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAOA,qBAAK,UAAA,CAAA,CAAW,SAAA;AAAA;AAE3B;AAlBE,UAAA,GAAA,IAAA,OAAA,EAAA;AAoBK,MAAM,+BAAqD,SAAA,CAAU;AAAA,EAG1E,WAAA,CAAY,WAAsB,KAAA,EAA2B;AAC3D,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAHxB,IAAAD,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAIE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,IAAI,aAAA,CAAcR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,CAAA;AAAA;AAChD,EAEA,UAAA,GAAa;AACX,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,EAAE,CAAA;AAAA;AACzB,EAEA,QAAA,GAAW;AACT,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,QAAA,EAAS;AAAA;AAC9B,EAEA,SAAS,CAAA,EAAM;AACb,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,CAAC,CAAA;AAAA;AACxB,EACU,SAAA,CAAU,GAAM,OAAA,EAA0B;AAClD,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,CAAS,CAAA,EAAG,OAAO,CAAA;AAAA;AACjC,EAEA,QAAA,GAAiC;AAC/B,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,SAAA,CAAU,KAAA;AAAA;AAC/B,EAEA,YACE,IAAA,EACS;AACT,IAAA,OAAO,KAAA,CAAM,YAAY,IAAW,CAAA;AAAA;AAExC;AAnCEA,QAAA,GAAA,IAAA,OAAA,EAAA;;AC7BF,MAAqB,oBAAoB,sBAAA,CAAuB;AAAC;;;;;;;;;;;;;;;;;;;;ACFjE,IAAAA,QAAA;AAUA,MAAqB,oBAAoB,sBAAA,CAEvC;AAAA,EAEA,WAAA,CAAY,WAAsB,KAAA,EAAe;AAC/C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB;AAAA,EAGA,WAAW,QAAA,EAAyD;AAClE,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,OAAA,GAAU,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AACjE,MAAA,MAAM,GAAA,uBAAU,GAAA,EAA2B;AAC3C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAC,CAAA;AAClD,QAAA,OAAO,GAAA;AAAA;AAGT,MAAA,OAAO,OAAA;AAAA;AAGT,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,SAAA,CACE,WAAA,EACA,SAAA,EACA,kBAAA,EACM;AACN,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,KAAO,IAAA,EAAM;AACtC,MAAA,IACE,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,IAAA;AAAA,QACjD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,WAErB,kBAAA,EACA;AACA,QAAA,eAAA,GAAkB,IAAA;AAAA,OACpB,MAAO;AACL,QAAA,eAAA,GAAkB,KAAA;AAAA;AAGpB,MAAA,IAAI,kBAAA,IAAuB,CAAC,eAAA,IAAmB,CAAC,kBAAA;AAC9C,QAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,EAAE,IAAA,CAAK;AAAA,UACtD,KAAA,EAAO,WAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACR,CAAA;AAAA;AACL;AACF;AAAA,EAGA,WAAW,YAAA,EAAqC;AAC9C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAA,GAAgB,YAAA,CAAa,YAAY,CAAA;AAAA;AAClE;AACF,EAEA,aAAa,WAAA,EAAoC;AAC/C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,MAAA;AAAA,QACjD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,OACrB;AAAA;AACF;AACF;AAAA,EAGA,kBAAkB,QAAA,EAAyD;AACzE,IAAA,MAAM,GAAA,GAAM,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AAC7D,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,GAAA,GAAM,IAAA;AACV,QAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjB,UAAA,IAAI,EAAE,QAAA,EAAU;AACd,YAAA,GAAA,GAAM,CAAA;AAAA;AACR,SACD,CAAA;AACD,QAAA,OAAO,GAAA;AAAA,OACT,MAAO;AACL,QAAA,OAAO,aAAa,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA;AACjD;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,eAAA,GAAiC;AAC/B,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,OACE,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,IAAA;AAAA,QACjD,CAAC,MAAM,CAAA,CAAE;AAAA,SACR,KAAA,IAAS,qBAAA;AAAA;AAGhB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,YAAA,GAAqB;AACnB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,OAAA;AAAA,QACjD,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,GAAW;AAAA,OACvB;AAAA;AACF;AAEJ;AAtGEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACbF,IAAAA,QAAA;AAIA,MAAqB,mBAAmB,sBAAA,CAAuB;AAAA,EAE7D,WAAA,CAAY,WAAsB,KAAA,EAAc;AAC9C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,cAAA,GAAmD;AACjD,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,QAAA,EAAS;AAAA;AAC9B,EAEA,SAAS,CAAA,EAAiB;AACxB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAA,CAAU,SAAA,KAAc,GAAA,EAAK;AAC3C,MAAAR,cAAA,CAAA,IAAA,EAAKQ,UAAO,QAAA,CAAS,CAAA,EAAG,EAAE,MAAA,EAAQ,SAAS,CAAA;AAAA,KAC7C,MAAO;AACL,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,CAAC,CAAA;AAAA;AACxB;AAEJ;AAjBEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACLF,IAAAA,QAAA;AAKA,MAAqB,kBAAkB,sBAAA,CAErC;AAAA,EAEA,WAAA,CAAY,WAAsB,KAAA,EAAa;AAC7C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,SAAS,CAAA,EAAgD;AACvD,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,CAAS,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA;AAExC;AATEA,QAAA,GAAA,IAAA,OAAA,EAAA;;ACLF,MAAqB,mBAAmB,sBAAA,CAAuB;AAAA,EAC7D,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACrB,EAEA,SAAS,KAAA,EAAwC;AAE/C,IAAA,IAAI,GAAA;AACJ,IAAA,MAAM,MAAA,GAAS,OAAO,KAA0B,CAAA;AAChD,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,KAAA,EAAO;AACvC,MAAA,GAAA,GAAM,MAAA;AAAA,KACR,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA;AAEF,IAAA,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA;AAEtB;;;;;;;;;;;;;;;;;;;;ACrBA,IAAAA,QAAA;AAQA,MAAqB,mBAAmB,sBAAA,CAAuB;AAAA,EAE7D,WAAA,CAAY,WAAsB,KAAA,EAAc;AAC9C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,WAAW,QAAA,EAAyD;AAClE,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,WAAA,GAAc,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AAErE,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,QAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAC,CAAA;AAE1D,QAAA,OAAO,OAAA;AAAA;AAGT,MAAA,OAAO,WAAA;AAAA;AAET,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,YAAA,GAA4B;AAC1B,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAA,GAAgB,EAAC;AAAA;AAC1C;AACF,EAEA,SAAA,CACE,UAAA,EACA,SAAA,EACA,kBAAA,EACM;AACN,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,WAAA,GAAc,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AACrE,MAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM;AAChD,QAAA,OAAO,CAAA,CAAE,KAAA,KAAU,UAAA,CAAW,QAAA,EAAS;AAAA,OACxC,CAAA;AAED,MAAA,IAAI,kBAAA,IAAsB,CAAC,iBAAA,EAAmB;AAC5C,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,KAAA,EAAO,WAAW,QAAA,EAAS;AAAA,UAC3B,KAAA,EAAO;AAAA,SACR,CAAA;AAAA;AACH;AACF;AACF,EAEA,WAAW,OAAA,EAAgC;AACzC,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAA,GAAgB,OAAA;AAAA;AACzC;AACF,EAEA,aAAa,UAAA,EAAmC;AAC9C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,MAAA;AAAA,QACjD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,OACrB;AAAA;AACF;AACF,EAEA,kBAAkB,QAAA,EAAuD;AACvE,IAAA,MAAM,WAAA,GAAc,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AAErE,IAAA,MAAM,WAAW,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACnD,IAAA,IAAI,CAAC,QAAA;AAAU,MAAA,OAAO,IAAA;AACtB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU,KAAK,GAAG,QAAQ,CAAA;AAC7C,MAAA,OAAO,OAAA;AAAA,KACT,MAAO;AACL,MAAA,OAAO,QAAA;AAAA;AACT;AACF,EAEA,eAAA,GAA6C;AAC3C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,aAAA,GAAgB,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AACvE,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAO,cAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,EAAG,KAAA;AAAA;AAChD;AAEF,IAAA,OAAO,IAAA;AAAA;AAEX;AArFEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACTF,IAAAA,QAAA;AAQA,MAAqB,sBAAsB,sBAAA,CAAiC;AAAA,EAE1E,WAAA,CAAY,WAAsB,KAAA,EAAiB;AACjD,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,SAAA,CACE,WAAA,EACA,SAAA,EACA,kBAAA,EACM;AACN,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,KAAO,IAAA,EAAM;AACtC,MAAA,IACE,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,IAAA;AAAA,QACjD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,WAErB,kBAAA,EACA;AACA,QAAA,eAAA,GAAkB,IAAA;AAAA,OACpB,MAAO;AACL,QAAA,eAAA,GAAkB,KAAA;AAAA;AAGpB,MAAA,IAAI,kBAAA,IAAuB,CAAC,eAAA,IAAmB,CAAC,kBAAA;AAC9C,QAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,EAAE,IAAA,CAAK;AAAA,UACtD,KAAA,EAAO,WAAA;AAAA,UACP,KAAA,EAAO;AAAA,SACR,CAAA;AAAA;AACL;AACF,EACA,SAAS,KAAA,EAAuB;AAC9B,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAS,KAAK,CAAA;AAAA;AAC5B;AACF,EACA,YAAA,GAAqB;AACnB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,OAAA;AAAA,QACjD,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,GAAW;AAAA,OACvB;AAAA;AACF;AACF,EACA,kBAAkB,QAAA,EAAyD;AACzE,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,QAAA,GAAW,YAAA;AAAA,QACfR,cAAA,CAAA,IAAA,EAAKQ,UAAO,UAAA,CAAW;AAAA,OACzB,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAE1B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,UAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAC,CAAA;AACvD,UAAA,OAAO,OAAA;AAAA;AAGT,QAAA,OAAO,QAAA;AAAA;AACT;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EACA,WAAW,QAAA,EAAyD;AAClE,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,OAAA,GAAU,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,aAAa,CAAA;AACjE,MAAA,MAAM,GAAA,uBAAU,GAAA,EAA2B;AAC3C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA,CAAE,KAAK,CAAA,EAAG,CAAC,CAAC,CAAA;AAClD,QAAA,OAAO,GAAA;AAAA;AAGT,MAAA,OAAO,OAAA;AAAA;AAET,IAAA,OAAO,IAAA;AAAA;AACT,EACA,WAAW,YAAA,EAAqC;AAC9C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAA,GAAgB,YAAA,CAAa,YAAY,CAAA;AAAA;AAClE;AACF,EACA,aAAa,WAAA,EAAoC;AAC/C,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,YAAA,CAAaR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,aAAa,CAAA,CAAE,MAAA;AAAA,QACjD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU;AAAA,OACrB;AAAA;AACF;AAEJ;AAtFEA,QAAA,GAAA,IAAA,OAAA,EAAA;;ACPF,MAAqB,oBAAoB,SAAA,CAAU;AAAC;;ACApD,MAAqB,kBAAkB,sBAAA,CAAuB;AAAC;;;;;;;;;;;;;;;;;;;;ACF/D,IAAAA,QAAA;AAYA,MAAqB,mBAAmB,SAAA,CAAiC;AAAA,EAEvE,WAAA,CAAY,WAAsB,KAAA,EAAc;AAC9C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,+BAAA;AAAA,OACjE;AAAA;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,QAAA,GAAiB;AACf,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,qBAAA;AAAA,KACjE;AAAA;AACF,EAEA,QAAA,GAAiB;AACf,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,+BAAA;AAAA,OACjE;AAAA;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,QAAA,GAAiB;AACf,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,+BAAA;AAAA,OACjE;AAAA;AAEF,IAAA,OAAO,IAAA;AAAA;AAEX;AAtCEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACbF,IAAAA,QAAA;AASA,MAAqB,kBAAkB,SAAA,CAAgC;AAAA,EAErE,WAAA,CAAY,WAAsB,KAAA,EAAa;AAC7C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,QAAA,GAAiB;AACf,IAAA,IAAIR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAA,EAAW;AACpC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,qBAAA;AAAA,OACjE;AAAA;AACF;AAEJ;AAbEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACVF,IAAAA,QAAA;AASA,MAAqB,kBAAkB,SAAA,CAAgC;AAAA,EAErE,WAAA,CAAY,WAAsB,KAAA,EAAc;AAC9C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,QAAA,GAAiB;AACf,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,qBAAA;AAAA,KACjE;AAAA;AACF,EACA,SAAS,KAAA,EAAqB;AAC5B,IAAA,IAAA,CAAK,WAAA,CAAY,SAAS,KAAK,CAAA;AAAA;AAEnC;AAdEA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACVF,IAAAA,QAAA;AAGO,MAAM,oBAAA,CAAqB;AAAA,EAEhC,YAAY,KAAA,EAAwB;AADpC,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAEE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,UAAU,IAAA,EAAc;AACtB,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAU,IAAI,CAAA;AAAA;AAC5B,EACA,YAAY,IAAA,EAAmB;AAC7B,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA;AACrC,EACA,QAAA,GAAiB;AACf,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,QAAA,GAAoB;AAClB,IAAA,OAAO,KAAA;AAAA;AACT,EACA,eAAe,OAAA,EAAiB;AAC9B,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,cAAA,CAAe,OAAO,CAAA;AAAA;AAC3C,EACA,QAAA,CAAS,OAAA,EAAiB,KAAA,GAAQ,CAAA,EAAG;AACnC,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AAAA;AAC5C,EACA,WAAA,CACE,MACA,KAAA,EACM;AACN,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAAA;AACrC,EACA,cAAA,CAAe,SAAiB,KAAA,EAAe;AAC7C,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA;AAAA;AAClD,EACA,QAAA,CAAS,OAAA,EAAiB,KAAA,EAAY,KAAA,GAAQ,CAAA,EAAG;AAC/C,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,CAAS,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA;AAErD;AAnCEA,QAAA,GAAA,IAAA,OAAA,EAAA;;AC4CK,MAAM,cAAA,GAAkC,CAC7C,SAAA,EACA,KAAA,KACG;AACH,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,IAAA,OAAO,IAAI,qBAAqB,KAAK,CAAA;AAAA,GACvC,MAAO;AACL,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,KAAA,CAAM,UAAA;AAC5B,IAAA,IAAI,QAAA,GAAmC,IAAA;AAEvC,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,OAAO,IAAI,eAAA,CAAgB,SAAA,EAAW,KAAmB,CAAA;AAAA;AAG3D,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,UAAA,CAAW,SAAA,EAAW,KAAc,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,aAAA;AAClB,QAAA,QAAA,GAAW,IAAI,aAAA,CAAc,SAAA,EAAW,KAAiB,CAAA;AACzD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,WAAA;AAClB,QAAA,QAAA,GAAW,IAAI,WAAA,CAAY,SAAA,EAAW,KAAe,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,UAAA,CAAW,SAAA,EAAW,KAAc,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,UAAA,CAAW,SAAA,EAAW,KAAiB,CAAA;AACtD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,WAAA;AAClB,QAAA,QAAA,GAAW,IAAI,WAAA,CAAY,SAAA,EAAW,KAAe,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,aAAA;AAClB,QAAA,QAAA,GAAW,IAAI,aAAA,CAAc,SAAA,EAAW,KAAiB,CAAA;AACzD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,WAAA;AAClB,QAAA,QAAA,GAAW,IAAI,WAAA,CAAY,SAAA,EAAW,KAAe,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,QAAA,GAAW,IAAIC,SAAA,CAAc,SAAA,EAAW,KAAiB,CAAA;AACzD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,QAAA,GAAW,IAAI,SAAA,CAAU,SAAA,EAAW,KAAa,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,UAAA,CAAW,SAAA,EAAW,KAAc,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,QAAA,GAAW,IAAI,SAAA,CAAU,SAAA,EAAW,KAAa,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,SAAA,CAAU,SAAA,EAAW,KAAc,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,UAAA;AAClB,QAAA,QAAA,GAAW,IAAI,SAAA,CAAU,SAAA,EAAW,KAAc,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,QAAA,GAAW,IAAI,iBAAA,CAAkB,SAAA,EAAW,KAAa,CAAA;AACzD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,YAAA;AAClB,QAAA,QAAA,GAAW,IAAI,YAAA,CAAa,SAAA,EAAW,KAAgB,CAAA;AACvD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,SAAA;AAClB,QAAA,QAAA,GAAW,IAAI,SAAA,CAAU,SAAA,EAAW,KAAa,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,cAAA,CAAe,WAAA;AAClB,QAAA,QAAA,GAAW,IAAI,WAAA,CAAY,SAAA,EAAW,KAAe,CAAA;AACrD,QAAA;AAEA;AAGJ,IAAA,OAAO,QAAA;AAAA;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;AC3HA,IAAAF,YAAA,EAAAC,QAAA,EAAA,MAAA;AASA,MAAqB,kBAAkB,SAAA,CAAU;AAAA,EAI/C,WAAA,CAAY,WAAsB,KAAA,EAAa;AAC7C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAJxB,IAAAT,cAAA,CAAA,IAAA,EAAAQ,YAAA,EAAA,MAAA,CAAA;AACA,IAAAR,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAQA,IAAAT,cAAA,CAAA,IAAA,EAAA,MAAA,EAAS,IAAI,KAAA,EAAM,CAAA;AAJjB,IAAAE,cAAA,CAAA,IAAA,EAAKM,YAAA,EAAa,SAAA,CAAA;AAClB,IAAAN,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAIA,MAAM,MAAA,GAAgC;AACpC,IAAA,IAAI;AACF,MAAA,MAAMR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAMA,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,MAAA,EAAO;AAExC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,IAAA,CAAK,MAAA,CAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAU,CAAA;AAAA;AAG3C,MAAA,OAAO,EAAC;AAAA,KACV,SAAE;AACA,MAAAR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAAA;AACtB;AACF,EAEA,SAAA,GAAY;AACV,IAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA;AACrC,EAEA,SAAA,GAAY;AACV,IAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA;AACrC,EAEA,MAAM,SAAS,KAAA,EAAe;AAC5B,IAAA,IAAI;AACF,MAAA,MAAMA,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAE1B,MAAA,MAAM,GAAA,GAAMA,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,kBAAA,CAAmB,KAAK,CAAA;AAEhD,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA;AAG1C,MAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjB,QAAA,IAAI,CAAA,YAAa,kBAAA;AAAoB,UAAA,CAAA,CAAE,MAAM,KAAA,GAAQ,EAAA;AAAA,OACtD,CAAA;AAAA,KACH,SAAE;AACA,MAAAR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAAA;AACtB;AACF,EAEA,SAAA,GAAuB;AACrB,IAAAA,cAAA,CAAA,IAAA,EAAKQ,UAAO,iBAAA,EAAkB;AAC9B,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAM,aAAA,GAAgB;AACpB,IAAA,IAAI;AACF,MAAA,MAAMR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAC1B,MAAA,MAAMA,cAAA,CAAA,IAAA,EAAKQ,UAAO,aAAA,EAAc;AAAA,KAClC,SAAE;AACA,MAAAR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAAA;AACtB;AACF,EAEA,MAAM,UAAA,GAAa;AACjB,IAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA;AACrC,EAEA,UAAA,GAAa;AACX,IAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA;AACrC,EAEA,MAAM,UAAU,KAAA,EAAe;AAC7B,IAAA,IAAI;AACF,MAAA,MAAMA,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAC1B,MAAAA,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,KAAK,CAAA;AAAA,KAC9B,SAAE;AACA,MAAAR,cAAA,CAAA,IAAA,EAAK,QAAO,OAAA,EAAQ;AAAA;AACtB;AACF,EAEA,QAAQ,KAAA,EAAe;AACrB,IAAA,SAAA,CAAUA,cAAA,CAAA,IAAA,EAAKO,aAAU,CAAA,CAAE,aAAA;AAAA,MACzB,IAAI,YAAY,iBAAA,EAAmB;AAAA,QACjC,MAAA,EAAQ,EAAE,KAAA,EAAO,IAAA,EAAMP,qBAAKQ,QAAA,CAAA;AAAO,OACpC;AAAA,KACH;AAAA;AACF,EAEA,mBAAmB,gBAAA,EAA4B;AAC7C,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAChB,eAAA,EAAgB,CAChB,GAAA;AAAA,MACC,CAAC,GAAA,KACC,GAAA,CAAI,QAAA,EAAS,IACZ,gBAAA,GAAmB,CAACF,OAAA,CAAMN,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAU,CAAA,GAAI,CAAA;AAAA,KACzD;AAAA;AACJ,EAEA,aAAA,GAAgB;AACd,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CACT,aAAA,EAAc,CACd,GAAA;AAAA,MAAI,CAAC,CAAA,KACJ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,cAAA,CAAeR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,OAAA,EAAQ,CAAE,SAAA,EAAW,CAAC,CAAC;AAAA,KACjE;AAAA;AACJ,EAEA,UAAU,SAAA,EAAmB;AAC3B,IAAA,MAAM,MAAA,GAASR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAA,CAAU,SAAS,CAAA;AAC9C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,YAAA,CAAa,MAAM,CAAA,CAAE,GAAA;AAAA,QAAI,CAAC,MAC/B,cAAA,CAAeR,cAAA,CAAA,IAAA,EAAKQ,UAAO,OAAA,EAAQ,CAAE,WAAW,CAAE;AAAA,OACpD;AAAA;AAEF,IAAA,OAAO,EAAC;AAAA;AACV,EAEA,cAAA,GAAiB;AACf,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,cAAA,EAAe;AAAA;AACpC,EAEA,QAAA,CAAS,WAAmB,UAAA,EAAqB;AAC/C,IAAA,MAAM,MAAA,GAASR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,CAAS,WAAW,UAAU,CAAA;AAEzD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,eAAe,MAAA,GAClB,cAAA;AAAA,QACER,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,OAAA,EAAQ,CAAE,SAAA;AAAA,QACtB,YAAA,CAAa,MAAM,CAAA,CAAE,CAAC;AAAA,OACxB,GACA,aAAa,MAAM,CAAA,CAChB,IAAI,CAAC,CAAA,KAAM,eAAeR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,SAAQ,CAAE,SAAA,EAAW,CAAC,CAAC,CAAA,CAC7D,OAAO,CAAC,CAAA,KAAuB,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA;AAGlD,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,YAAA,GAAe;AACb,IAAA,OAAOR,qBAAKQ,QAAA,CAAA,CAAO,SAAA;AAAA;AACrB,EAEA,WAAA,GAAc;AACZ,IAAA,OAAOR,qBAAKQ,QAAA,CAAA,CAAO,QAAA;AAAA;AACrB,EAEA,OAAO,KAAA,EAAe;AACpB,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CACT,kBAAA,CAAmB,KAAK,GACvB,GAAA,CAAI,CAAC,CAAA,KAAM,cAAA,CAAeR,qBAAKQ,QAAA,CAAA,CAAO,OAAA,EAAQ,CAAE,SAAA,EAAW,CAAC,CAAE,CAAA;AAAA;AACpE,EAEA,YAAA,GAA+B;AAC7B,IAAA,MAAM,QAAA,GAAWR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,eAAA,EAAgB;AAC7C,IAAA,MAAM,YAA4B,EAAC;AACnC,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,KAAM;AACtB,MAAA,MAAM,MAAoB,EAAC;AAC3B,MAAA,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,MAAM,cAAA,CAAeR,cAAA,CAAA,IAAA,EAAKQ,UAAO,OAAA,EAAQ,CAAE,WAAW,CAAC,CAAA;AAC7D,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA;AACd,OACD,CAAA;AACD,MAAA,SAAA,CAAU,KAAK,GAAG,CAAA;AAAA,KACnB,CAAA;AACD,IAAA,OAAO,SAAA;AAAA;AACT,EAEA,IAAI,EAAA,GAAK;AACP,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,UAAA,CAAW,EAAA;AAAA;AAChC,EAEA,OAAA,GAAU;AACR,IAAA,OAAOR,cAAA,CAAA,IAAA,EAAKQ,UAAO,UAAA,CAAW,KAAA;AAAA;AAChC,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAOR,qBAAKQ,QAAA,CAAA,CAAO,MAAA;AAAA;AACrB,EAEA,sBAAA,CAAuB,WAAmB,OAAA,EAAmB;AAC3D,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,sBAAA,CAAuB,SAAA,EAAW,OAAO,CAAA;AAAA;AACvD,EAEA,kBAAA,CAAmB,OAAe,OAAA,EAAmB;AACnD,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,kBAAA,CAAmB,KAAA,EAAO,OAAO,CAAA;AAAA;AAC/C,EAEA,oBAAA,CAAqB,UAAkB,OAAA,EAAmB;AACxD,IAAAR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,oBAAA,CAAqB,QAAA,EAAU,OAAO,CAAA;AAAA;AAEtD;AAjMED,YAAA,GAAA,IAAA,OAAA,EAAA;AACAC,QAAA,GAAA,IAAA,OAAA,EAAA;AAQA,MAAA,GAAA,IAAA,OAAA,EAAA;;ACdF,MAAqB,qBAAqB,SAAA,CAAmC;AAAC;;;;;;;;;;;;;;;;;;;;ACL9E,IAAAA,QAAA;AAKA,MAAqB,0BAA0B,sBAAA,CAAuB;AAAA,EAEpE,WAAA,CAAY,WAAsB,KAAA,EAAa;AAC7C,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAAS,QAAA,EAAA,MAAA,CAAA;AAGE,IAAAP,cAAA,CAAA,IAAA,EAAKO,QAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,SAAS,EAAA,EAAoC;AAC3C,IAAA,QAAA;AAAA,MACE,MAAM;AACJ,QAAAR,cAAA,CAAA,IAAA,EAAKQ,UAAO,QAAA,EAAS;AAAA,OACvB;AAAA,MACA,MAAM;AACJ,QAAA,EAAA,CAAGR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,QAAA,EAAU,CAAA;AAAA,OAC3B;AAAA,MACA,EAAE,iBAAiB,KAAA;AAAM,KAC3B;AAAA;AACF,EAEA,QAAA,GAAiB;AACf,IAAA,IAAIR,qBAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,MAAMR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,WAAW,SAAA,EAAW;AACjE,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4BAAA,EAA+BR,cAAA,CAAA,IAAA,EAAKQ,QAAA,CAAA,CAAO,UAAA,CAAW,SAAS,CAAA,+BAAA;AAAA,OACjE;AAAA;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAM,gBAAA,GAAkC;AACtC,IAAA,MAAMR,cAAA,CAAA,IAAA,EAAKQ,UAAO,gBAAA,EAAiB;AAAA;AAEvC;AA9BEA,QAAA,GAAA,IAAA,OAAA,EAAA;;ACJF,MAAqB,sBAAsB,SAAA,CAAU;AAAC;;;;;;;;;;;;;;;;;;;;ACFtD,IAAA,MAAA;AAIA,MAAqB,wBAAwB,sBAAA,CAAuB;AAAA,EAElE,WAAA,CAAY,WAAsB,KAAA,EAAmB;AACnD,IAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AAFxB,IAAAT,cAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAGE,IAAAE,cAAA,CAAA,IAAA,EAAK,MAAA,EAAS,KAAA,CAAA;AAAA;AAChB,EAEA,cAAA,GAA6B;AAC3B,IAAA,OAAOD,cAAA,CAAA,IAAA,EAAK,QAAO,QAAA,EAAS;AAAA;AAC9B,EAEA,SAAS,CAAA,EAAc;AACrB,IAAAA,cAAA,CAAA,IAAA,EAAK,MAAA,CAAA,CAAO,SAAS,CAAC,CAAA;AAAA;AACxB,EACA,MAAa,uBAAuB,KAAA,EAAe;AACjD,IAAA,MAAMA,cAAA,CAAA,IAAA,EAAK,MAAA,CAAA,CAAO,sBAAA,CAAuB,KAAK,CAAA;AAAA;AAElD;AAhBE,MAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACLF,IAAA,KAAA,EAAAO,YAAA;AAWO,MAAM,QAAA,CAA8B;AAAA,EAGzC,WAAA,CAAY,WAAsB,IAAA,EAAY;AAF9C,IAAAR,cAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAAQ,YAAA,EAAA,MAAA,CAAA;AAEE,IAAAN,cAAA,CAAA,IAAA,EAAK,KAAA,EAAQ,IAAA,CAAA;AACb,IAAAA,cAAA,CAAA,IAAA,EAAKM,YAAA,EAAa,SAAA,CAAA;AAAA;AACpB,EAEA,YAAA,GAAuB;AACrB,IAAA,OAAOP,cAAA,CAAA,IAAA,EAAK,OAAM,UAAA,CAAW,SAAA;AAAA;AAC/B,EAEA,QAAA,GAA0B;AACxB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,OAAM,UAAA,CAAW,EAAA;AAAA;AAC/B,EAEA,WAAA,GAAsB;AACpB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,OAAM,UAAA,CAAW,QAAA;AAAA;AAC/B,EACA,YAAA,GAAuB;AACrB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,OAAM,UAAA,CAAW,SAAA;AAAA;AAC/B,EACA,QAAA,GAAiB;AACf,IAAAA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,WAAA,CAAY,cAAA,EAAgB,KAAK,CAAA;AAAA;AAC9C,EACA,SAAA,GAAkB;AAChB,IAAAA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,WAAA,CAAY,cAAA,EAAgB,IAAI,CAAA;AAAA;AAC7C,EACA,YACE,IAAA,EACS;AACT,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,WAAA,CAAY,IAAW,CAAA;AAAA;AAC3C,EACA,WAAA,CACE,MACA,KAAA,EACM;AACN,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAE5D,IAAAA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,WAAA,CAAY,IAAA,EAAM,KAAY,CAAA;AAAA;AAC3C,EACA,mBAAmB,OAAA,EAAiB;AAClC,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,2BAAA,CAA4B,OAAO,CAAA;AAAA;AACvD,EACA,QAAA,CAAS,KAAsB,KAAA,EAAwC;AACrE,IAAA,MAAM,KAAA,GAAQA,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,QAAA,CAAS,KAAe,KAAK,CAAA;AAEtD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,cAAA,CAAeA,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,EAAY,KAA2B,CAAA;AAAA;AAGpE,IAAA,OAAO,MAAA;AAAA;AACT,EACA,aAAa,KAAA,EAAe;AAC1B,IAAA,MAAM,KAAA,GAAQP,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,CAAM,YAAA,CAAa,KAAK,CAAA;AAE3C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,cAAA,CAAeA,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,EAAY,KAAc,CAAA;AAAA;AAGvD,IAAA,OAAO,MAAA;AAAA;AACT,EACA,eAAe,IAAA,EAA4B;AACzC,IAAA,OAAO,YAAA,CAAaP,qBAAK,KAAA,CAAA,CAAM,cAAA,CAAe,IAAI,CAAC,CAAA,CAChD,IAAI,CAAC,CAAA,KAAM,eAAeA,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,EAAY,CAAC,CAAC,CAAA,CAC7C,OAAO,CAAC,CAAA,KAAuB,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA;AAC9C,EACA,YAAA,GAA6B;AAC3B,IAAA,OAAOP,qBAAK,KAAA,CAAA,CAAM,SAAA,CACf,GAAA,CAAI,CAAC,MAAM,cAAA,CAAeA,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,EAAY,CAAC,CAAC,CAAA,CAC7C,MAAA,CAAO,CAAC,CAAA,KAAuB,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA;AAC9C,EACA,SAAA,CAAU,qBAA8B,eAAA,EAAgC;AACtE,IAAA,IAAA,CAAK,YAAA,EAAa,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjC,MAAA,IAAI,eAAA,IAAmB,aAAa,SAAA,EAAW;AAC7C,QAAA,CAAA,CAAE,SAAA,EAAU;AAAA;AAGd,MAAA,IAAI,aAAa,sBAAA,EAAwB;AACvC,QAAA,IAAI,CAAC,CAAA,CAAE,WAAA,CAAY,UAAU,KAAK,mBAAA,EAAqB;AACrD,UAAA,CAAA,CAAE,SAAS,EAAE,CAAA;AAAA;AACf;AACF,KACD,CAAA;AAAA;AACH,EAEA,SAAA,GAAY;AACV,IAAAP,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,CAAW,IAAA,CAAK,eAAA,EAAiBP,cAAA,CAAA,IAAA,EAAK,KAAA,CAAK,CAAA;AAAA;AAClD,EAEA,YAAY,IAAA,EAAmB;AAC7B,IAAAA,cAAA,CAAA,IAAA,EAAKO,YAAA,CAAA,CAAW,KAAK,iBAAA,EAAmB,EAAE,MAAMP,cAAA,CAAA,IAAA,EAAK,KAAA,CAAA,EAAO,MAAM,CAAA;AAAA;AAEtE;AA7FE,KAAA,GAAA,IAAA,OAAA,EAAA;AACAO,YAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;ACbF,IAAA,UAAA;AAcO,MAAM,aAAA,CAAwC;AAAA,EAGnD,YAAY,SAAA,EAAsB;AAFlC,IAAAR,cAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAGE,IAAAE,cAAA,CAAA,IAAA,EAAK,UAAA,EAAa,SAAA,CAAA;AAAA;AACpB,EAEA,WAAW,MAAA,EAAiC;AAC1C,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AACrD,EACA,aAAa,MAAA,EAAiC;AAC5C,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AACrD,EACA,OAAA,CAAQ,QAAgB,IAAA,EAAoB;AAC1C,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AACrD,EACA,YAAY,KAAA,EAAqB;AAC/B,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AACrD,EACA,WAAA,CACE,KAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA;AACrD,EAEA,aAAA,CAAc,SAAiB,OAAA,EAAuC;AACpE,IAAA,MAAM,IAAA,GAAOD,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,aAAA,CAAc,SAAS,OAAO,CAAA;AAC3D,IAAA,IAAI,IAAA;AAAM,MAAA,OAAO,IAAI,QAAA,CAASA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,EAAY,IAAI,CAAA;AACnD,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,SAAA,CACE,OAAA,EACA,MAAA,EACA,UAAA,EACA,OACA,MAAA,EACA;AAKA;AACF,EAEA,aAAA,GAAgB;AAAA;AAAC,EAEjB,kBAAkB,MAAA,EAAgB;AAChC,IAAA,MAAM,EAAA,GAAK,OAAO,MAAM,CAAA;AAExB,IAAA,QAAQ,EAAA;AAAI,MACV,KAAK,iBAAA,CAAkB,OAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,OAAA,EAAQ;AAC7B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,IAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,IAAA,EAAK;AAC1B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,QAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,IAAA,EAAK;AAC1B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,IAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,IAAA,EAAK;AAC1B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,OAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,OAAA,EAAQ;AAC7B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,QAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,QAAA,EAAS;AAC9B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,KAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,KAAA,EAAM;AAC3B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,SAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,QAAA,EAAS;AAC9B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,KAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,KAAA,EAAM;AAC3B,QAAA;AAAA,MACF,KAAK,iBAAA,CAAkB,YAAA;AACrB,QAAAA,cAAA,CAAA,IAAA,EAAK,YAAW,aAAA,EAAc;AAC9B,QAAA;AAAA;AACJ;AACF,EAEA,oBAAoB,EAAA,EAAkB;AACpC,IAAA,iBAAA,CAAkB,QAAA,CAAS,QAAQ,EAAE,CAAA;AAAA;AACvC,EAEA,mBAAmB,EAAA,EAAkB;AACnC,IAAA,iBAAA,CAAkB,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA;AACtC,EAEA,WAAA,GAA2B;AACzB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CACT,WAAA,EAAY,CACZ,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,QAAA,CAASA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,EAAY,CAAC,CAAC,CAAA;AAAA;AAChD,EACA,kBAAkB,IAAA,EAA8B;AAC9C,IAAA,OAAOA,qBAAK,UAAA,CAAA,CAAW,WAAA,GAAc,MAAA,CAAmB,CAAC,KAAK,CAAA,KAAM;AAClE,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,SAAA,KAAc,IAAA,EAAM;AACnC,QAAA,GAAA,CAAI,KAAK,IAAI,QAAA,CAASA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,EAAY,CAAC,CAAC,CAAA;AAAA;AAE3C,MAAA,OAAO,GAAA;AAAA,KACT,EAAG,EAAE,CAAA;AAAA;AACP,EAEA,WAAA,CACE,SACA,KAAA,EACuC;AACvC,IAAA,MAAM,SAAuB,EAAC;AAC9B,IAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA,CAAE,OAAA;AAAA,MAAQ,CAAC,CAAA,KACvC,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,KAAK,CAAe;AAAA,KAC7C;AACA,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,sBAAA,GAAwC;AACtC,IAAA,OAAO,SAAA,CAAUA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAU,CAAA,CAAE,SAAA;AAAA;AACpC,EAEA,qBAAA,GAAuC;AACrC,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,WAAA,CAAY,UAAA,EAAY,WAAA,IAAe,EAAA;AAAA;AAChE,EACA,cAAA,GAAgC;AAC9B,IAAA,OAAOA,qBAAK,UAAA,CAAA,CAAW,WAAA;AAAA;AACzB,EAEA,kBAAA,GAAoC;AAClC,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,WAAA,CAAY,UAAA,EAAY,QAAA,IAAY,EAAA;AAAA;AAC7D,EAEA,cAAc,OAAA,EAAmC;AAC/C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA;AACrC,IAAA,IAAI,GAAA;AAAK,MAAA,OAAO,GAAA;AAChB,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,OAAA,CAAQ,SAAiB,OAAA,EAAoC;AAC3D,IAAA,IAAI,OAAA,KAAY,GAAA;AAAK,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,OAAO,CAAA;AAC/D,IAAA,IAAI,OAAA,KAAY,GAAA;AAAK,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,OAAO,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,GAAG,CAAA;AAC5C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO,IAAA;AAAA;AAET,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,GAAG,CAAA;AAC7C,IAAA,OAAO,KAAA;AAAA;AACT,EAEA,kBAAA,GAAqB;AACnB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,YAAW,kBAAA,EAAmB;AAAA;AAC5C,EAEA,cAAA,GAAiB;AACf,IAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA;AACjC,EAEA,mBAAA,GAAsB;AACpB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,kBAAA,EAAmB,EAAG,MAAM,CAAC,CAAA;AAAA;AACtD,EAEA,iBAAA,GAAoB;AAClB,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,kBAAA,EAAmB,CAAE,CAAC,CAAA;AAAA;AAC/C,EAEA,aAAA,GAAgB;AACd,IAAA,OAAOA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,kBAAA,EAAmB,CAAE,CAAC,CAAA;AAAA;AAC/C,EAEA,eAAe,OAAA,EAAmC;AAChD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA;AACrC,IAAA,IAAI,GAAA;AAAK,MAAA,OAAO,GAAA;AAChB,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,WAAA,GAA6B;AAC3B,IAAA,IAAI;AACF,MAAA,OAAO,SAAA,CAAUA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAU,CAAA,CAAE,iBAAA;AAAA,aAC3B,CAAA,EAAY;AACnB,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA;AAChD;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,iBAAiB,EAAA,EAAkB;AACjC,IAAA,iBAAA,CAAkB,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA;AACpC,EAEA,uBAAuB,EAAA,EAAY;AACjC,IAAA,OAAO,iBAAA,CAAkB,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAAA;AACjD,EACA,qBAAqB,EAAA,EAAY;AAC/B,IAAA,OAAO,iBAAA,CAAkB,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AAAA;AAC/C,EAEA,QAAA,GAAW;AACT,IAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,KAAK,IAAA,EAAK;AAAA;AAC5B,EAEA,mBAAmB,KAAA,EAAiB;AAClC,IAAA,SAAA,CAAUA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAU,CAAA,CAAE,eAAA,GAAkB,KAAA;AAAA;AAC/C,EAEA,YAAA,CAAa,YAAoB,SAAA,EAAyB;AACxD,IAAAA,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA,CAAW,YAAA,CAAa,UAAA,EAAY,SAAS,CAAA;AAAA;AACpD,EAEA,iBAAiB,EAAA,EAAkB;AACjC,IAAA,iBAAA,CAAkB,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA;AACpC,EAEA,aAAA,CAAc,SAAiB,MAAA,EAAiB;AAC9C,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,MAAM,CAAA;AAAA;AAChC,EACA,UAAU,KAAA,EAAuB;AAC/B,IAAA,IAAI,MAAA,CAAO,cAAA;AACT,MAAC,OAAO,cAAA,CAAuB,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAU,CAAA,KAAc;AACvE,QAAA,IAAI,YAAA,CAAa,KAAK,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA;AAAG,UAAA,GAAA,CAAI,IAAA,EAAK;AAAA,OAC/C,CAAA;AAAA;AAEP;AA/NE,UAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfF,IAAA,UAAA;AAuCO,MAAM,eAAA,CAAgB;AAAA,EAW3B,WAAA,CACS,WACS,UAAA,EAChB;AAFO,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACS,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAZlB,IAAAD,cAAA,CAAA,IAAA,EAAA,UAAA,EAAa,KAAA,CAAA;AACb,IAAAP,eAAA,CAAA,IAAA,EAAQ,QAAa,EAAC,CAAA;AACtB,IAAAA,eAAA,CAAA,IAAA,EAAQ,QAAA,EAAgC;AAAA,MACtC,SAAA,EAAW,KAAA;AAAA,MACX,YAAY,EAAC;AAAA,MACb,YAAY,EAAC;AAAA,MACb,YAAY,EAAC;AAAA,MACb,SAAA,EAAW;AAAA,KACb,CAAA;AAME,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,UAAA,CAAW,IAAI,CAAA,EAAA,EAAK,WAAW,sBAAsB,CAAA;AAAA,OAC7F;AAAA;AAGF,IAAA,cAAA,CAA0C,IAAA,EAAM;AAAA,MAC9C,MAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,IAAA,CAAK,gBAAA,CAAiB,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA;AAAA;AAC9C,EAEA,IAAW,KAAA,GAA6C;AACtD,IAAA,OAAO,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA;AACzB,EAEO,aAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA;AACpB,EAEO,cAAA,GAAiB;AACtB,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,EAAY,KAAK,IAAI,CAAA;AAAA;AAChD,EAEA,MAAM,KAAK,IAAA,EAAY;AACrB,IAAA,IAAIQ,cAAA,CAAA,IAAA,EAAK,UAAA,CAAA;AAAY,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAC9D,IAAAC,cAAA,CAAA,IAAA,EAAK,UAAA,EAAa,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA;AACd,EAEQ,iBAAiB,CAAA,EAAwB;AAC/C,IAAA,IAAI,EAAE,UAAA,EAAY;AAChB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,MAAA,CAAO,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,EAAE,UAAU,CAAA;AAAA,eACzC,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA;AACjB;AAGF,IAAA,YAAA,CAAa,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvC,MAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAA,CAAE,IAAI,CAAA,GAAI,YAAA;AAAA,QAC/B,IAAA,CAAK,KAAA,CAAMS,oBAAA,CAAmB,CAAA,CAAE,MAAM,CAAC;AAAA,OACzC;AAAA,KACD,CAAA;AACD,IAAA,YAAA,CAAa,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,KAAA;AAAA,KACpC,CAAA;AAAA;AACH,EAEA,MAAa,cAEX,GAAA,EAA8C;AAC9C,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,MAAM,QAAA,GAAW,KAAK,aAAA,EAAe,KAAA;AAErC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,MAAW,SAAA,IAAa,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA,EAAG;AACxD,QAAA,IAAI,SAAA,CAAU,SAAS,QAAA,EAAU;AAC/B,UAAA,OAAA,GAAU,KAAA;AACV,UAAA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA;AAAA,YACjC,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,cAC1B,SAAS,OAAA,CAAQ,KAAA;AAAA,cACjB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,IAAA;AAAA,cAEP,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,cACvB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,cAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW;AAAA,aACjC;AAAA,WACH;AAAA,SACF,MAAA,IAAW,SAAA,CAAU,IAAA,KAAS,MAAA,EAAQ;AACpC,UAAA,eAAA,CAAgB,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA;AACxC;AACF;AAGF,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,IAAK,WAAA,EAAa;AACpB,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAK,WAAW,CAAA;AAExC,QAAA,mBAAA;AAAA,UACE,IAAA,CAAK,SAAA;AAAA,UACL;AAAA,SACF;AAAA;AAGF,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA;AAGhC,MAAA,WAAA,MAAiB,SAAS,eAAA,EAAiB;AACzC,QAAA,MAAM,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA;AAG5B,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAExB,MAAA,OAAO,GAAA,CAAK,eAAe,KAAA,EAAO,MAAA;AAAA;AACpC;AACF,EAEU,qBAAqB,SAAA,EAAoC;AACjE,IAAA,MAAM,iBAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AAC7B,QAAA,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,OACxC,MAAA,IAAW,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AACjE,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA;AAC/B,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,cAAA,CAAe,IAAA;AAAA,YACb,IAAI,aAAA,CAAc,IAAA,CAAK,SAAS,CAAA,CAC7B,OAAA;AAAA,cACC,IAAA,CAAK,KAAK,UAAA,CAAW,QAAA;AAAA,cACrB,IAAA,CAAK,KAAK,UAAA,CAAW;AAAA,aACvB,CACC,SAAS,SAAS;AAAA,WACvB;AAAA;AACF;AACF;AAEF,IAAA,OAAO,cAAA;AAAA;AACT,EACA,MAAgB,iBAAiB,KAAA,EAAyC;AACxE,IAAA,IAAI,MAAA,GAAS,IAAA;AAEb,IAAA,WAAA,MAAiB,MAAA,IAAU,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA,EAAG;AACrD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAQlC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAM,MAAA,CAAe,GAAA,CAAI,OAAO,CAAA;AAItC,QAAA,MAAA,GACE,UACC,MAAM,EAAA;AAAA,UACL,IAAA;AAAA,UACA,GAAG,IAAA,CAAK,oBAAA,CAAqB,YAAA,CAAa,GAAA,CAAI,SAAS,CAAC;AAAA,SAC1D;AAAA,eACK,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACf,QAAA,IAAA,CAAK,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA;AAAA,UAChC,IAAI,mBAAA,CAAoB;AAAA,YACtB,SAAS,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,SAAA,EAAW,IAAI,OAAO,CAAA;AAAA,YACxD,IAAA,EAAM;AAAA,WACP;AAAA,SACH;AACA,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,MAAM,UAAU,OAAA,EAAiB;AAC/B,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,CAAE,IAAA;AAAA,QAChD,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS;AAAA,OACpB;AACA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,KAAA,CAAM,gBAAA,GAAmB,OAAO,CAAA;AAAA;AAG5C,MAAA,MAAM,gBACJ,CAAC,KAAA,CAAM,UAAW,MAAM,IAAA,CAAK,iBAAiB,KAAK,CAAA;AAErD,MAAA,IAAI,aAAA,IAAiB,MAAM,YAAA,EAAc;AACvC,QAAA,OAAA,CAEI,MAAM,IAAA,CAAK,aAAA;AAAA,UAAA,CACR,MAAM,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,OAAO,CAAA,GAAI;AAAA,YAEjD,OAAA,IAAW,KAAA;AAAA;AAIlB,MAAA,OAAO,aAAA,IAAiB,CAAC,KAAA,CAAM,YAAA;AAAA,KACjC,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,YAAY,OAAA,EAAiB;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA;AACvC,EAEA,MAAc,WAAA,CAAY,MAAA,EAAgB,IAAA,EAAW;AACnD,IAAA,OAAO,IAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,QAC1B,SAAS,OAAA,CAAQ,KAAA;AAAA,QACjB,MAAA,EAAQ,eAAA;AAAA,QACR,MAAA;AAAA,QAEA,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,QACvB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,QAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW;AAAA,OACjC,CAAA;AAAA,MACD;AAAA,QACE,QAAA,EACE,OAAO,IAAA,KAAS,QAAA,GACZ;AAAA,UACE,OAAA,EAAS,sBAAsB,IAAI;AAAA,SACrC,GACA,IAAA;AAAA,QACN,iBAAA,EAAmB;AAAA;AACrB,KACF;AAAA;AACF,EAEA,MAAM,cAAA,CAAe,OAAA,EAAiB,KAAA,EAAe;AACnD,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,OAAA,CAEI,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CAEP,MAAM,IAAA,CAAK,WAAA;AAAA,UACT,UAAA;AAAA,UACA,KAAK,SAAA,CAAU;AAAA,YACb,OAAA;AAAA,YACA,KAAA,EAAO,IAAA;AAAA,YACP;AAAA,WACD;AAAA,SACH,GACC;AAAA,UAEJ,OAAA,IAAW,KAAA;AAAA,KAElB,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,eAAe,OAAA,EAAiB;AAC9B,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA,EAAG,KAAK,EAAE,CAAA;AAAA;AACjD,EAEA,QAAA,CAAS,OAAA,EAAiB,KAAA,GAAgB,CAAA,EAAG;AAC3C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,OAAO,IAAI,KAAK,CAAA;AAAA;AAChD,EAEA,UAAU,OAAA,EAAiB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA;AACvC,EAEA,MAAM,WAAA,CAAY,OAAA,EAAiB,KAAA,EAAe;AAChD,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,OAAA,CAEI,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CAEP,MAAM,IAAA;AAAA,UACJ,IAAA,CAAK,SAAA;AAAA,UACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,YAC1B,SAAS,OAAA,CAAQ,KAAA;AAAA,YACjB,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ,aAAA;AAAA,YAER,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,YACvB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,YAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW;AAAA,WACjC,CAAA;AAAA,UACD;AAAA,YACE,QAAA,EAAU;AAAA,cACR,OAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,iBAAA,EAAmB;AAAA;AACrB,SACF,GACC;AAAA,UAEJ,OAAA,IAAW,KAAA;AAAA,KAElB,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,MAAM,QAAA,CAAS,OAAA,EAAiB,KAAA,EAAY,KAAA,EAAe;AACzD,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,OAAA,CAEI,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CAEP,MAAM,IAAA,CAAK,WAAA;AAAA,UACT,UAAA;AAAA,UACA,KAAK,SAAA,CAAU;AAAA,YACb,KAAA;AAAA,YACA,OAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH,GACC;AAAA,UAEJ,OAAA,IAAW,KAAA;AAAA,KAElB,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,MAAM,WAAA,CAAY,OAAA,EAAiB,KAAA,EAAY;AAC7C,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,OAAA,CAEI,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CAEP,MAAM,IAAA,CAAK,WAAA;AAAA,UACT,aAAA;AAAA,UACA,KAAK,SAAA,CAAU;AAAA,YACb,OAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH,GACC;AAAA,UAEJ,OAAA,IAAW,KAAA;AAAA,KAElB,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,MAAM,YAEJ,OAAA,EAAc;AACd,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CAEd,MAAM,IAAA,CAAK,WAAA;AAAA,UACT,SAAA;AAAA,UACA,OAAO,OAAA,KAAY,QAAA,IAAY,UAC3B,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,GACtB;AAAA,SACN,GACC;AAAA,OACL;AAAA,KACF,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,MAAM,QAAA,CAAS,OAAA,EAAiB,KAAA,EAAe;AAC7C,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA;AAAA,QAAA,CACrB,MAAM,KAAK,WAAA,CAAY,UAAA,EAAY,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,GAAI;AAAA,OAC5D;AAEA,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAAA;AAChC,KACF,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEA,MAAM,MAAA,CACJ,OAAA,EACA,IAAA,EACA,OAAA,EAIA;AACA,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAE5B,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAS,MAAA,IAAU,EAAE,CAAA,CAAE,OAAA;AAAA,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,MACxD,QAAA,CAAS,MAAA,CAAO,KAAK,KAAK;AAAA,OAC5B;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA;AAAA,QAC3B,MAAM,WAAA,CAAY,IAAA,CAAK,SAAA,EAAW;AAAA,UAChC,SAAS,OAAA,CAAQ,KAAA;AAAA,UACjB,MAAA,EAAQ,eAAA;AAAA,UACR,MAAA,EAAQ,QAAA;AAAA,UAER,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,UACvB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,EAAA;AAAA,UAC5B,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,SAAA;AAAA,UAChC,OAAA;AAAA,UACA,cAAc,IAAA,CAAK;AAAA,SACpB,CAAA;AAAA,QACD,QAAA;AAAA,QACA;AAAA,UACE,QAAQ,OAAA,EAAS,MAAA;AAAA,UACjB,gBAAA,CAAiB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAG;AACpC,YAAA,MAAM,OAAA,GACJ,KAAK,KAAA,CAAA,CAAQ,QAAA,IAAY,MAAM,KAAA,IAAS,CAAA,CAAA,GAAM,GAAA,GAAM,GAAG,CAAA,GAAI,GAAA;AAC7D,YAAA,OAAA,EAAS,mBAAmB,OAAO,CAAA;AAAA;AACrC;AACF,OACF;AAEA,MAAA,MAAM,SACJ,MAAM,uBAAA;AAAA,QACJ,IAAA,CAAK,SAAA;AAAA,QACL;AAAA,OACF;AAEF,MAAA,OAAO,MAAM,IAAA,CAAK,aAAA;AAAA,QAChB;AAAA,OACF;AAAA,KACF,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,SAAA,GAAY,KAAA;AAAA;AAC1B;AACF,EAEO,QAAA,CACL,MACA,KAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA;AAExB;AAtcE,UAAA,GAAA,IAAA,OAAA,EAAA;;ACtCK,MAAM,2BAA2B,YAAA,CAEtC;AAAA,EACA,YACkB,KAAA,EAChB;AACA,IAAA,KAAA,CAAM,KAAK,CAAA;AAFK,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA;AAIpB;;;;;;;;ACCO,MAAM,aAAA,CAAc;AAAA,EAOzB,YAAmB,SAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AANnB,IAAAlB,eAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,IAAI,YAAA,EAInB,CAAA;AAUH,IAAAA,eAAA,CAAA,IAAA,EAAU,iBAAgC,EAAC,CAAA;AA+B3C,IAAAA,eAAA,CAAA,IAAA,EAAA,IAAA,EAAK,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,IAAA,CAAK,KAAK,OAAO,CAAA,CAAA;AAtCpC,IAAA,cAAA,CAA+C,IAAA,EAAM;AAAA,MACnD,aAAA,EAAe,UAAA;AAAA,MACf,GAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA;AACH,EAIA,IAAI,YAAA,EAA4B;AAC9B,IAAA,IAAA,CAAK,aAAA,CAAc,KAAK,YAAY,CAAA;AACpC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,YAAY,CAAA;AAAA;AAChD,EAEA,QAAA,GAAW;AACT,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAY,IAAI,CAAA;AAAA;AACpC,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA;AACd,EAEA,QAAQ,EAAA,EAAqB;AAC3B,IAAA,OAAO,KAAK,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA;AACnD,EAEA,IAAA,GAAO;AACL,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA;AAChC,EAEA,OAAO,YAAA,EAA8C;AACnD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM;AACpD,MAAA,IAAI,OAAO,YAAA,KAAiB,QAAA,IAAY,OAAO,YAAA,KAAiB,QAAA;AAC9D,QAAA,OAAO,EAAE,EAAA,KAAO,YAAA;AAClB,MAAA,OAAO,CAAA,KAAM,YAAA;AAAA,KACd,CAAA;AAAA;AAIL;;;;;;;;AChCO,MAAM,aAAa,cAAA,CAAoC;AAAA,EAiD5D,WAAA,CACS,WACP,UAAA,EACA;AACA,IAAA,MAAM,KAAA,GAAQG,eAAA,CAAmC,UAAA,CAAW,UAAU,CAAA;AACtE,IAAA,KAAA,CAAM,KAAK,CAAA;AAJJ,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAjDT,IAAAH,eAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAQ,EAAE,gBAAgB,KAAA,EAAM,CAAA;AAChC,IAAAA,eAAA,CAAA,IAAA,EAAU,mBAAA,sBAAsD,GAAA,EAAI,CAAA;AACpE,IAAAA,eAAA,CAAA,IAAA,EAAU,YAAA,sBAAiB,GAAA,EAYzB,CAAA;AACF,IAAAA,eAAA,CAAA,IAAA,EAAU,cAAA,sBAAmB,GAAA,EAY3B,CAAA;AACF,IAAAA,eAAA,CAAA,IAAA,EAAU,qBAAA,sBAA0B,GAAA,EAOlC,CAAA;AACF,IAAAA,eAAA,CAAA,IAAA,EAAU,uBAAA,sBAA4B,GAAA,EAOpC,CAAA;AACF,IAAAA,eAAA,CAAA,IAAA,EAAU,cAAA,sBAAmB,GAAA,EAAkB,CAAA;AAC/C,IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAAwB,EAAC,CAAA;AA8JzB,IAAAA,eAAA,CAAA,IAAA,EAAQ,eAAA,sBAAoB,GAAA,EAA6B,CAAA;AACzD,IAAAA,eAAA,CAAA,IAAA,EAAQ,eAAA,sBAAoB,GAAA,EAA6B,CAAA;AACzD,IAAAA,eAAA,CAAA,IAAA,EAAQ,iBAAA,sBAAsB,GAAA,EAA6B,CAAA;AAC3D,IAAAA,eAAA,CAAA,IAAA,EAAQ,oBAA6B,EAAC,CAAA;AAzJpC,IAAA,cAAA,CAA8B,IAAA,EAAM;AAAA,MAClC,KAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAW,QAAA;AAAA,MACX,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAED,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAElB,IAAA,IAAA,CAAK,MAAA,GAAS,aAAa,UAAA,CAAW,KAAK,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC1D,MAAA,IAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAG,QAAA,OAAO,EAAA;AACtB,MAAA,IAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAG,QAAA,OAAO,CAAA;AAEtB,MAAA,IAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAG,QAAA,OAAO,EAAA;AACtB,MAAA,IAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAG,QAAA,OAAO,CAAA;AAEtB,MAAA,OAAO,CAAA;AAAA,KACR,CAAA;AAED,IAAA,IAAA,CAAK,KAAA,CAAM,cAAA,GAAiB,IAAA,CAAK,UAAA,CAAW,YAAA;AAAA;AAC9C,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA;AACrC,EAEA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA;AACd,EAEA,SAAA,GAAY;AACV,IAAA,IAAA,CAAK,WAAW,YAAA,GAAe,IAAA;AAAA;AACjC,EACA,QAAA,GAAW;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,GAAe,KAAA;AAAA;AACjC,EAEA,QAAA,CAAS,OAAe,KAAA,EAAgB;AACtC,IAAA,MAAM,QACJ,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA,IAC9B,KAAK,cAAA,CAAe,KAAA,EAAO,KAAK,CAAA,IAChC,IAAA,CAAK,sBAAsB,KAAA,EAAO,KAAK,KACvC,IAAA,CAAK,uBAAA,CAAwB,OAAO,KAAK,CAAA;AAE3C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA;AACvC,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAO,GAAA;AAAA;AACT;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EACA,qBAAA,CAAsB,OAAwB,KAAA,EAAgB;AAC5D,IAAA,MAAM,QAAQ,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AACxD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,qBAAA,CAAsB,KAAA,EAAO,KAAK,CAAA;AACpD,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAO,GAAA;AAAA;AACT;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EACA,uBAAA,CAAwB,SAAiB,KAAA,EAAgB;AACvD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,OAAO,CAAA;AACpD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,uBAAA,CAAwB,OAAA,EAAS,KAAK,CAAA;AACxD,MAAA,OAAO,GAAA;AAAA;AAGT,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,YAAA,CAAa,IAAqB,KAAA,EAAgB;AAChD,IAAA,MAAM,QAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC5C,IAAA,IAAI,KAAA;AAAO,MAAA,OAAO,KAAA;AAElB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,YAAA,CAAa,EAAA,EAAI,KAAK,CAAA;AACxC,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAO,GAAA;AAAA;AACT;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,cAAA,CAAe,MAAc,KAAA,EAA6C;AACxE,IAAA,MAAM,QAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA;AAChD,IAAA,IAAI,KAAA;AAAO,MAAA,OAAO,KAAA;AAElB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC5C,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAO,GAAA;AAAA;AACT;AAGF,IAAA,OAAO,MAAA;AAAA;AACT,EAEU,eAAA,GAAkB;AAC1B,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,CAAY,kBAAkB,CAAC,CAAA;AAAA;AACvE,EACA,MAAM,cAAA,GAAiB;AACrB,IAAA,KAAK,IAAA;AAAA,MACH,IAAA,CAAK,SAAA;AAAA,MACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,QAC1B,OAAA,EAAS,gCAAA;AAAA,QACT,MAAA,EAAQ,gBAAA;AAAA,QACR,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,QACvB,SAAA,EAAW,KAAK,UAAA,CAAW,SAAA;AAAA,QAC3B,IAAA,EAAM,CAAC,IAAA,CAAK,KAAA,CAAM,cAAA;AAAA,QAClB,KAAA,EAAO;AAAA,OACR;AAAA,KACH,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ;AACd,MAAA,IAAI,GAAA,EAAK,IAAA,IAAQ,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS;AACjC,QAAA,IAAA,CAAK,KAAA,CAAM,cAAA,GAAiB,CAAC,IAAA,CAAK,KAAA,CAAM,cAAA;AAAA;AAC1C,KACD,CAAA;AAAA;AACH,EAEA,MAAM,SAAA,GAAkD;AACtD,IAAA,MAAM,MAAM,MAAM,GAAA;AAAA,MAChB,IAAA,CAAK,SAAA;AAAA,MACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,QAC1B,OAAA,EAAS,gCAAA;AAAA,QACT,MAAA,EAAQ,WAAA;AAAA,QACR,KAAA,EAAO,KAAK,UAAA,CAAW,EAAA;AAAA,QACvB,SAAA,EAAW,KAAK,UAAA,CAAW,SAAA;AAAA,QAC3B,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AACA,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,OAAO,GAAA,CAAI,IAAA;AAAA;AACb;AACF,EAOA,0BAA0B,KAAA,EAAe;AACvC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA;AACrC,EAEA,0BAA0B,KAAA,EAAe;AACvC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA;AACrC,EAEA,4BAA4B,OAAA,EAAiB;AAC3C,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAAA;AACzC,EAEO,gBAAA,CAAiB,KAAA,EAAe,QAAA,GAAmB,CAAA,EAAG;AAC3D,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,KAAA,GAAQ,GAAA,GAAM,QAAQ,CAAA;AAAA;AACnD,EAEO,mBAAA,CAAoB,KAAA,EAAe,QAAA,GAAmB,CAAA,EAAG;AAC9D,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAK,gBAAA,CAAiB,MAAA;AAAA,MAC5C,CAAC,CAAA,KAAM,CAAA,KAAM,KAAA,GAAQ,GAAA,GAAM;AAAA,KAC7B;AACA,IAAA,IAAI,KAAK,gBAAA,CAAiB,MAAA,GAAS,KAAK,eAAA,EAAgB,CAAE,WAAW,CAAA,EAAG;AACtE,MAAA,IAAA,CAAK,SAAA,CAAU,kBAAA;AAAA,QACb,KAAK,UAAA,CAAW,SAAA;AAAA,QAChB,KAAK,UAAA,CAAW;AAAA,OAClB;AAAA;AACF;AACF,EAEA,MAAM,IAAA,GAAO;AACX,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA;AAE1D,IAAA,WAAA,MAAiB,KAAA,IAAS,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,EAAG;AACnD,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,IAAO,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AAAA;AAEhE,IAAA,WAAA,MAAiB,mBAAmB,SAAA,EAAW;AAC7C,MAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,eAAA,CAAgB,EAAA,GAAK,IAAO,CAAA;AAAA;AAEzD,IAAA,WAAA,MAAiB,mBAAmB,SAAA,EAAW;AAC7C,MAAA,MAAM,EAAA,GAAK,IAAI,eAAA,CAAgB,IAAA,CAAK,WAAW,eAAe,CAAA;AAC9D,MAAA,MAAM,EAAA,CAAG,KAAK,IAAI,CAAA;AAClB,MAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,eAAA,CAAgB,EAAA,EAAI,EAAE,CAAA;AACjD,MAAA,YAAA,CAAa,gBAAgB,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjE,QAAA,IAAA,CAAK,aAAA,CAAc,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,EAAE,CAAA;AAC3D,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,OAAA,EAAS,EAAE,CAAA;AACtC,QAAA,IAAA,CAAK,aAAA,CAAc,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,eAAA,CAAgB,EAAE,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,OACvE,CAAA;AAAA;AAGH,IAAA,WAAA,MAAiB,KAAA,IAAS,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,EAAG;AAInD,MAAA,KAAA,CAAM,UAAA,GAAaG,eAAA,CAAc,KAAA,CAAM,UAAiB,CAAA;AAExD,MAAA,MAAM,mBACJ,IAAA,CAAK,SAAA,CAAU,cAAc,KAAA,CAAM,SAAS,EAAE,KAAK,CAAA;AAErD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,KAAK,CAAA;AAC3C,QAAA,MAAM,QAAA,CAAS,KAAK,IAAI,CAAA;AAExB,QAAA,IAAA,CAAK,UAAA,CAAW,GAAA;AAAA,UACd,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAAA,UAC7B;AAAA,SACF;AACA,QAAA,IAAI,QAAA,CAAS,YAAY,IAAA,EAAM;AAC7B,UAAA,IAAA,CAAK,YAAA,CAAa,GAAA;AAAA,YAChB,MAAA,CAAO,QAAA,CAAS,UAAA,EAAY,IAAI,CAAA;AAAA,YAChC;AAAA,WACF;AAAA;AAEF,QAAA,IAAK,MAAgD,OAAA,EAAS;AAC5D,UAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA;AAAA,YACvB,MAAA,CAAQ,MAAgD,KAAK,CAAA;AAAA,YAC7D;AAAA,WACF;AACA,UAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA;AAAA,YACxB,KAAA,CAAgD,OAAA;AAAA,YACjD;AAAA,WACF;AAAA;AAGF,QAAA,IAAI,oBAAoB,IAAA,EAAM;AAC5B,UAAA,IAAA,CAAK,aAAa,GAAA,CAAI,MAAA,CAAO,SAAS,UAAA,CAAW,EAAE,GAAG,QAAQ,CAAA;AAAA;AAChE,OACF,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,2BAAA,EAA8B,MAAM,SAAS,CAAA,oCAAA;AAAA,SAC/C;AAAA;AACF;AACF;AACF,EAEA,MAAgB,qBACd,SAAA,EACoB;AACpB,IAAA,MAAM,iBAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAI,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AAC7B,QAAA,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,OACxC,MAAA,IAAW,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,KAAS,GAAA,EAAK;AACjE,QAAA,MAAM,SAAA,GAAY,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA;AAC/B,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,cAAA,CAAe,IAAA;AAAA,YAAA,CACZ,MAAM,gBAAA,CAAiB,IAAA,CAAK,SAAS,GACnC,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,CAC3D,SAAS,SAAS;AAAA,WACvB;AAAA;AACF;AACF;AAEF,IAAA,OAAO,cAAA;AAAA;AACT,EAEA,MAAa,gBAAgB,SAAA,EAA6C;AACxE,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,MAAM,QAAA,GAAW,UAAU,IAAA,CAAK,SAAS,EACvC,CAAA,gBAAA,EAAmB,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,CAC9C,CAAA;AACA,MAAA,MAAM,cAAc,QAAA,GAChB,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,GACjC,MAAA;AACJ,MAAA,MAAM,iBACJ,QAAA,KACC,CAAC,WAAA,IAAe,WAAA,KAAgB,SAAS,QAAA,GAAW,UAAA,CAAA;AACvD,MAAA,SAAA,GACE,mBACC,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,YAAY,UAAA,GAAa,QAAA,CAAA;AAAA;AAGxD,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,UAAA,CAAW,YAAA,IAAgB,EAAC,EAAG,MAAA;AAAA,MAClD,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY;AAAA,KACvB;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK;AAEnC,MAAA,IAAI;AACF,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI;AACF,YAAA,MAAM,KAAM,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAU,MAAM,OAAO,CAAA;AAI3D,YAAA,MAAM,SAAS,MAAM,EAAA;AAAA,cACnB,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AAAA,cACjC,GAAI,MAAM,IAAA,CAAK,oBAAA,CAAqB,MAAM,SAAS;AAAA,aACrD;AACA,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAA,OAAO,KAAA;AAAA;AACT,mBACO,CAAA,EAAG;AACV,YAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACf,YAAA,IAAA,CAAK,UAAU,aAAA,CAAc,GAAA;AAAA,cAC3B,IAAI,mBAAA,CAAoB;AAAA,gBACtB,SAAS,MAAA,CAAO,YAAA,CAAa,KAAK,SAAA,EAAW,KAAA,CAAM,OAAO,CAAA,GAAI,CAAA;AAAA,gBAC9D,IAAA,EAAM;AAAA,eACP;AAAA,aACH;AACA,YAAA,OAAO,KAAA;AAAA;AACT;AACF,OACF,SAAE;AACA,QAAA,MAAA,EAAO;AAAA;AACT;AAEF,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAM,QAAA,GAAkC;AACtC,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,IAAI,YAAA,GAA6B,IAAA;AAEjC,IAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,MAAA,OAAO,IAAA;AAAA;AAGT,IAAA,WAAA,MAAiB,KAAA,IAAS,KAAK,SAAA,EAAW;AACxC,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,SAAA,KAAc,MAAA,EAAQ;AACzC,QAAA,MAAM,MAAA,GAAS,MAAO,KAAA,CAAe,QAAA,EAAS;AAC9C,QAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,CAAC,YAAA,EAAc;AACpC,UAAA,YAAA,GAAe,MAAA;AACf,UAAA,OAAA,GAAU,KAAA;AAAA,SACZ,MAAO;AACL,UAAA,OAAA,GAAU,WAAW,MAAA,KAAW,IAAA;AAAA;AAClC,OACF,MAAA,IAAW,iBAAiB,KAAA,EAAO;AACjC,QAAA,OAAA,GAAW,MAAM,KAAA,CAAM,QAAA,EAAS,IAAM,OAAA;AACtC,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc;AAC7B,UAAA,YAAA,GAAe,KAAA;AAAA;AACjB;AACF;AAGF,IAAA,OAAO,OAAA,IAAW,YAAA;AAAA;AACpB,EAEA,YACE,QAAA,EACwB;AACxB,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,QAAA;AAAA;AAErD,IAAA,OAAO,KAAA,CAAM,YAAY,QAAQ,CAAA;AAAA;AAErC;;ACnbA,SAAS,mBAAmB,YAAA,EAAsB;AAChD,EAAA,MAAM,YAAA,GAAe,KAAK,YAAY,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,IAAA,CAAK,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA;AACxE,EAAA,OAAO,IAAI,WAAA,CAAY,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAC9C;AAEA,eAAe,oBACb,OAAA,EAC2B;AAC3B,EAAA,IAAI,OAAA,CAAQ,QAAQ,GAAA,EAAK;AACvB,IAAA,MAAM,WAAY,MAAM,QAAA;AAAA,MACtB,kBAAA,CAAmB,OAAA,CAAQ,OAAA,CAAQ,GAAG;AAAA,KACxC;AACA,IAAA,OAAO,QAAA;AAAA;AAET,EAAA,OAAO,IAAA;AACT;AAEA,eAAsB,oBAAoB,SAAA,EAAsB;AAC9D,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAG,WAAA,CAAY,SAAS,CAAA,CAAE,iBAAiB,gBAAgB;AAAA,GAC7D;AACA,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAA,WAAA,MAAiB,QAAQ,QAAA,EAAU;AACjC,IAAA,MAAM,GAAA,GAAM,MAAM,mBAAA,CAAoB,IAAmB,CAAA;AACzD,IAAA,IAAI,GAAA;AAAK,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA;AAGzB,EAAA,OAAO,KAAA;AACT;;AChCO,MAAM,WAAA,CAAY;AAAA,EACvB,OAAc,mBAAmB,SAAA,EAAsB;AACrD,IAAA,OAAO,oBAAoB,SAAS,CAAA;AAAA;AAExC;;ACoCO,MAAM,gBAAA,GAAkC,OAAO,MAAA,CAAO;AAAA,EAC3D,MAAM,MAAM,QAAA;AAAA,EACZ,QAAQ,MAAM,MAAA;AAAA,EACd,SAAS,MAAM,OAAA;AAAA,EACf,OAAO,MAAM,QAAA;AAAA,EACb,QAAQ,MAAM,MAAA;AAAA,EACd,MAAM,MAAM,IAAA;AAAA,EACZ,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,IAAA,MAAM,UAAA,GAAa,GAAA;AAEnB,IAAA,IAAI,UAAA,EAAY,YAAY,KAAA,EAAO;AACjC,MAAA,OAAO,aAAA;AAAA;AAGT,IAAA,OAAO,IAAA;AAAA,GACT;AAAA,EACA,QAAQ,MAAM,MAAA;AAAA,EACd,MAAM,MAAM,IAAA;AAAA,EACZ,OAAO,MAAM,KAAA;AAAA,EACb,KAAA,EAAO,CAAC,GAAA,KAAQ;AACd,IAAA,MAAM,UAAA,GAAa,GAAA;AAEnB,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,OAAO,UAAA;AAAA;AAGT,IAAA,OAAO,KAAA;AAAA,GACT;AAAA,EACA,KAAA,EAAO,CAAC,GAAA,KAAQ;AACd,IAAA,MAAM,UAAA,GACJ,GAAA;AACF,IAAA,MAAM,KAAA,GAAQ,WAAW,UAAA,EAAY,KAAA;AACrC,IAAA,IAAI,SAAS,MAAA,CAAO,KAAK,EAAE,OAAA,CAAQ,gBAAgB,MAAM,EAAA,EAAI;AAC3D,MAAA,OAAO,cAAA;AAAA;AAGT,IAAA,OAAO,KAAA;AAAA,GACT;AAAA,EACA,UAAU,MAAM,QAAA;AAAA,EAChB,UAAU,MAAM,QAAA;AAAA,EAChB,OAAO,MAAM,KAAA;AAAA,EACb,QAAQ,MAAM,MAAA;AAAA,EACd,OAAO,MAAM,KAAA;AAAA,EACb,MAAM,MACJ;AACJ,CAAC,CAAA;;;;;;;;AChFM,MAAM,OAAA,CAAQ;AAAA,EAKnB,YAAmB,SAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAJnB,IAAAH,eAAA,CAAA,IAAA,EAAA,OAAA,EAAyB,IAAA,CAAA;AAEzB,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AAsBA,IAAAA,eAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,KAAA,CAAA;AAnBlB,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO,UAAA;AAAA,MACP,WAAA,EAAa,MAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,IAAA,CAAK,WAAW,IAAI,WAAA;AAAA,MAClB,IAAA,CAAK,SAAA;AAAA,MACL,iBAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CACrB;AAAA,KACL;AAAA;AACF,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,IAAI,IAAA,CAAK,KAAA;AAAO,MAAA,OAAO,IAAA,CAAK,MAAM,UAAA,CAAW,KAAA;AAAA;AAC/C,EAIA,MAAM,IAAA,GAAO;AACX,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAChB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,gBAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACT;AAAA,OACH;AACA,MAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,WAAA,EAAa;AAC3B,QAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA;AAGpD,MAAA,IAAA,CAAK,SAAS,IAAA,EAAK;AACnB,MAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,cAAA,EAAgB,MAAM;AACrC,QAAA,IAAA,CAAK,SAAA,CAAU,MAAM,kBAAA,GAAqB,IAAA;AAAA,OAC3C,CAAA;AAED,MAAA,MAAM,UAAA,GAAuB,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,MAAM,WAAW,CAAA;AAC9D,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,UAAA,CAAW,QAAA,EAAU,OAAO,CAAA,CAAE,IAAA;AAAA,QAC1D,CAAC,MAAM,CAAA,CAAE;AAAA,OACX,EAAG,KAAA;AACH,MAAA,MAAM,gBACJ,YAAA,CAAa,UAAA,CAAW,SAAS,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA,EAC5D,SAAS,YAAA,CAAa,UAAA,EAAY,UAAU,OAAO,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA;AAE/D,MAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AACb,MAAA,IAAI,QAAA;AAAU,QAAA,IAAA,CAAK,KAAA,CAAM,SAAS,KAAA,GAAQ,QAAA;AAC1C,MAAA,IAAI,aAAA;AAAe,QAAA,IAAA,CAAK,KAAA,CAAM,SAAS,KAAA,GAAQ,aAAA;AAAA;AACjD;AACF,EAEA,gBAAA,GAAmB;AACjB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,KAAA;AAAA,MACjC,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU;AAAA,KAChC;AAAA;AACF,EAEA,YAAY,WAAA,EAAqB;AAC/B,IAAA,IAAI,KAAK,KAAA,EAAO,QAAA;AAAU,MAAA,IAAA,CAAK,KAAA,CAAM,SAAS,KAAA,GAAQ,WAAA;AAAA;AAE1D;;;;;;;;;;;;;;;;;;;;AC9EA,IAAA,KAAA;AAAO,MAAM,IAAA,CAAK;AAAA,EAEhB,YAAY,IAAA,EAAW;AADvB,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AAEE,IAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,IAAA,CAAK,IAAA,CAAA;AAAA;AACpB,EACA,YAAY,WAAA,EAAqB;AAC/B;AACF,EACA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,YAAA,CAAA,IAAA,EAAK,KAAA,CAAA;AAAA;AAEhB;AAVE,KAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;ACcK,MAAM,MAAA,CAAO;AAAA,EAUlB,YAAmB,SAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AATnB,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAwB,IAAA,CAAA;AAExB,IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AACA,IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAA8B,IAAI,eAAA,CAAgB;AAAA,MAChD,YAAA,EAAc,IAAA;AAAA,MACd,WAAA,EAAa,IAAA;AAAA,MACb,cAAA,EAAgB;AAAA,KACjB,CAAA,CAAA;AAqBD,IAAAA,eAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,KAAA,CAAA;AAyGpB,IAAAA,eAAA,CAAA,IAAA,EAAU,kBAAiB,YAAY;AACrC,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAChB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,gBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW;AAAA,SACZ;AAAA,OACH;AACA,MAAA,IAAI,IAAA,CAAK,KAAA;AACP,QAAA,IAAI,GAAA,EAAK,MAAM,QAAA,EAAU;AACvB,UAAA,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,SACxD,MAAO;AACL,UAAA,IAAA,CAAK,KAAA,CAAM,aAAa,EAAC;AAAA;AAC3B,KACJ,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,aAAY,YAAY;AAChC,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAChB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW;AAAA,SACZ;AAAA,OACH;AACA,MAAA,IAAI,IAAA,CAAK,OAAO,YAAA,EAAc;AAC5B,QAAA,IAAI,GAAA,EAAK,MAAM,IAAA,EAAM;AACnB,UAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,YAAA,CAAa,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,SACtD,MAAO;AACL,UAAA,IAAA,CAAK,KAAA,CAAM,eAAe,EAAC;AAAA;AAC7B;AACF,KACF,CAAA;AAEA,IAAAA,eAAA,CAAA,IAAA,EAAU,oBAAmB,YAAY;AACvC,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAChB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,iBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW;AAAA,SACZ;AAAA,OACH;AACA,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,YAAA,CAAa,GAAA,EAAK,MAAM,UAAU,CAAA;AAC5D,QAAA,MAAM,OAAO,IAAA,CAAK,SAAA,CAAU,aAAa,GAAA,EAAK,IAAA,EAAM,UAAU,CAAC,CAAA;AAC/D,QAAA,MAAM,SAAA,GAAY;AAAA,UAChB,OAAA,EAAS;AAAA,YACP;AAAA,cACE,OAAA,EAAS,MAAA;AAAA,cACT,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA,CAAE,IAAA;AAAA,cACnD,SAAA,EAAW;AAAA,aACb;AAAA,YACA;AAAA,cACE,OAAA,EAAS,SAAA;AAAA,cACT,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAW,uBAAuB,CAAA,CAAE,IAAA;AAAA,cAC3D,SAAA,EAAW;AAAA;AACb,WACF;AAAA,UACA,IAAA;AAAA,UACA,SAAS;AAAC,SACZ;AACA,QAAA,IAAA,CAAK,UAAA,CAAW,MAAM,SAAS,CAAA;AAAA;AACjC,KACF,CAAA;AA5LE,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO,UAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,IAAA,CAAK,WAAW,IAAI,WAAA;AAAA,MAClB,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CACrB;AAAA,KACL;AAAA;AACF,EAEA,IAAI,IAAA,GAAO;AACT,IAAA,IAAI,IAAA,CAAK,KAAA;AAAO,MAAA,OAAO,IAAA,CAAK,MAAM,UAAA,CAAW,KAAA;AAAA;AAC/C,EAIA,MAAM,IAAA,GAAO;AACX,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAChB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,eAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACT;AAAA,OACH;AACA,MAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,UAAA,EAAY;AAC1B,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA;AAEnD,MAAA,IAAA,CAAK,SAAS,IAAA,EAAK;AACnB,MAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,cAAA,EAAgB,MAAM;AACrC,QAAA,IAAA,CAAK,SAAA,CAAU,MAAM,kBAAA,GAAqB,IAAA;AAAA,OAC3C,CAAA;AAED,MAAA,MAAM,UAAA,GAAsB,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,MAAM,UAAU,CAAA;AAC5D,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA;AAAA,QAC1D,CAAC,MAAM,CAAA,CAAE;AAAA,OACX,EAAG,KAAA;AACH,MAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AACb,MAAA,IAAA,CAAK,KAAA,CAAM,eAAe,EAAC;AAC3B,MAAA,IAAA,CAAK,KAAA,CAAM,aAAa,EAAC;AACzB,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,IAAA,GAAO,IAAA;AAExB,MAAA,IAAI,WAAA,IAAe,KAAK,KAAA,CAAM,MAAA;AAC5B,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAA,GAAQ,WAAA;AAE5B,MAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,oBAAA,EAAsB;AAClD,QAAA,MAAM,KAAK,cAAA,EAAe;AAAA;AAE5B,MAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,sBAAA,EAAwB;AACpD,QAAA,MAAM,KAAK,SAAA,EAAU;AAAA;AAEvB,MAAA,IAAI,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,CAAE,yBAAA,EAA2B;AACvD,QAAA,MAAM,KAAK,gBAAA,EAAiB;AAAA;AAC9B;AACF;AACF,EAEO,cAAA,GAAiB;AACtB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,EAAU,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,CAAO,aAAa,IAAA,CAAK;AAAA,MAC5B,MAAA,EAAQ,EAAA;AAAA,MACR,QAAA,EAAU,EAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,EAAE,CAAA;AACtB,IAAA,GAAA,CAAI,KAAA,CAAM;AAAA,MACR,EAAA,EAAI,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,MACrB,KAAA,EAAO,CAAC,EAAE,OAAA,EAAS,QAAO,EAAG,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,MACnD,UAAA,EAAY;AAAA,KACb,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAC/B,IAAA,IAAA,CAAK,WAAW,YAAA,CAAa;AAAA,MAC3B,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE;AAAA,KACvC,CAAA;AAAA;AACH,EAEO,gBAAA,GAAmB;AACxB,IAAA,MAAM,MAAA,GAAc;AAAA,MAClB,SAAA,EAAW,IAAA,CAAK,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS;AAAA,KACzC;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,KAAA,EAAO;AACvC,MAAA,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,KAAA,EAAO,UAAA,CAAW,KAAK,KAAA,IAAS,EAAA;AAAA;AAG1D,IAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,MAAA,MAAA,CAAO,KAAA,GAAQ,KAAK,KAAA,EAAO,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAErD,MAAA,IAAA,CAAK,KAAA,EAAO,UAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA,CACvB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACd,QAAA,MAAA,CAAO,CAAA,OAAA,EAAU,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA,GAAI,IAAA;AAAA,OAC5B,CAAA;AAEH,MAAA,MAAA,CAAO,2BAA2B,CAAA,GAAI,MAAA;AAAA;AAGxC,IAAA,IAAI,IAAA,CAAK,OAAO,YAAA,EAAc;AAC5B,MAAA,MAAA,CAAO,6BAA6B,CAAA,GAAI,MAAA;AACxC,MAAA,MAAA,CAAO,MAAA,GAAS,KAAK,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAE5D,MAAA,IAAA,CAAK,KAAA,EAAO,YAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA,CACzB,OAAA,CAAQ,CAAC,CAAA,KAAM;AACd,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA,GAAI,IAAA;AAAA,OACzC,CAAA;AAAA;AAGL,IAAA,IAAI,IAAA,CAAK,OAAO,YAAA,EAAc;AAC5B,MAAA,MAAA,CAAO,2BAA2B,CAAA,GAAI,MAAA;AACtC,MAAA,MAAA,CAAO,MAAA,GAAS,KAAK,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAC5D,MAAA,MAAA,CAAO,QAAA,GAAW,KAAK,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAChE,MAAA,MAAA,CAAO,WAAA,GAAc,KAAK,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAAA;AAGxE,IAAA,OAAO,MAAA;AAAA;AACT,EAqEQ,UAAU,GAAA,EAAoB;AACpC,IAAA,OAAO,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,MAAA,MAAM,MAAA,GAAoB;AAAA,QACxB,IAAI,CAAA,CAAE,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL;AAAA,YACE,OAAA,EAAS,MAAA;AAAA,YACT,SAAS,CAAA,CAAE;AAAA,WACb;AAAA,UACA;AAAA,YACE,OAAA,EAAS,SAAA;AAAA,YACT,SAAS,CAAA,CAAE;AAAA;AACb;AACF,OACF;AACA,MAAA,OAAO,MAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEO,iBAAA,GAAoB;AACzB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA;AACzD,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA,CAAE,GAAA,IAAO,QAAA,EAAS;AAEzD,IAAA,CAAC,GAAG,YAAA,CAAa,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1C,MAAA,IAAA,CAAK,KAAA,CAAO,YAAA,GACV,IAAA,CAAK,KAAA,EAAO,aAAa,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ,GAAA,CAAI,QAAA,EAAS,KAAM,GAAG,KAClE,EAAC;AACH,MAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAAA,KACnC,CAAA;AACD,IAAA,IAAI,OAAA;AAAS,MAAA,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,CAAC,OAAA,GAAU,CAAC,CAAC,CAAA;AAAA;AACzD,EAEO,iBAAiB,EAAA,EAAY;AAClC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA;AAAA,QAChD,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW;AAAA,OACtB;AAAA;AACF;AACF,EAEO,oBAAA,GAAuB;AAC5B,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,YAAA,CAAa,MAAA,KAAW,CAAA;AAAG,MAAA,OAAO,IAAA;AAClD,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA;AAAA,QAClD,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,QAAA,IAAY,CAAC,CAAA,CAAE;AAAA,OAC3B;AACA,MAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,QAAA,mBAAA,CAAoB,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtC,UAAA,CAAA,CAAE,mBAAA,GAAsB,EAAA;AACxB,UAAA,CAAA,CAAE,gBAAA,GAAmB,EAAA;AACrB,UAAA,CAAA,CAAE,WAAA,GAAc,MAAA;AAEhB,UAAA,IAAI,GAAA,KAAQ,CAAA;AAAG,YAAA,CAAA,CAAE,WAAA,GAAc,IAAA;AAE/B,UAAA,IAAI,EAAE,QAAA,KAAa,EAAA;AACjB,YAAA,CAAA,CAAE,gBAAA,GAAmB,MAAA,CAAO,kBAAA,CAAmB,IAAA,CAAK,SAAS,CAAA;AAE/D,UAAA,IAAI,EAAE,WAAA,KAAgB,EAAA;AACpB,YAAA,CAAA,CAAE,mBAAA,GAAsB,MAAA,CAAO,kBAAA,CAAmB,IAAA,CAAK,SAAS,CAAA;AAAA,SACnE,CAAA;AACD,QAAA,OAAO,KAAA;AAAA;AACT;AAEF,IAAA,OAAO,IAAA;AAAA;AAEX;;;;;;;;ACnRO,MAAM,YAAA,CAAa;AAAA,EAUxB,YAAmB,SAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AATnB,IAAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAuB;AAAA,MACrB,cAAA,EAAgB;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,WAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAgB,KAAA;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,cAAc;AAAC,KACjB,CAAA;AAQA,IAAAA,eAAA,CAAA,IAAA,EAAQ,WAAA,EAAY,KAAA,CAAA;AANlB,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO,UAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACd,CAAA;AAAA;AACH,EAIA,MAAM,IAAA,GAAO;AACX,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,QACX,cAAA,EAAgB;AAAA,UACd,YAAA,EAAc,EAAA;AAAA,UACd,WAAA,EAAa,KAAA;AAAA,UACb,cAAA,EAAgB,KAAA;AAAA,UAChB,WAAA,EAAa;AAAA,SACf;AAAA,QACA,cAAc;AAAC,OACjB;AAEA,MAAA,MAAM,MAAM,MAAM,IAAA;AAAA,QAGhB,IAAA,CAAK,SAAA;AAAA,QACL,WAAA,CAAY,KAAK,SAAA,EAAW;AAAA,UAC1B,MAAA,EAAQ,qBAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ,CAAC,MAAA,CAAO,SAAA,GAAY,IAAA,GAAO;AAAA,SACpC;AAAA,OACH;AACA,MAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ;AACtB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA;AAGnD,MAAA,MAAM,UAAA,GAGF,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,MAAM,MAAM,CAAA;AAEhC,MAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,YAAA,CAAa,UAAA,CAAW,YAAY,CAAA;AAE9D,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,YAAA,EAAc,WAAW,cAAA,EAAgB,OAAA;AAAA,QACzC,WAAA,EAAa,WAAW,cAAA,EAAgB,SAAA;AAAA,QACxC,cAAA,EAAgB,KAAA;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AACA,MAAA,IAAA,CAAK,MAAM,cAAA,GAAiB,cAAA;AAC5B,MAAA,IAAA,CAAK,sBAAA,EAAuB;AAAA;AAC9B;AACF,EAEA,gBAAA,GAAmB;AACjB,IAAA,MAAM,MAAA,GAAkC;AAAA,MACtC,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,YAAA;AAAA,MACvC,aACE,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,WAAA,KAAgB,OAAO,IAAA,GAAO,MAAA;AAAA,MAC3D,gBACE,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,cAAA,KAAmB,OAAO,IAAA,GAAO,MAAA;AAAA,MAC9D,aACE,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,WAAA,KAAgB,OAAO,IAAA,GAAO;AAAA,KAC7D;AAEA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,YAAA,IAAgB,EAAC;AACxC,IAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,MAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,IAAA;AAAM,QAAA;AACnB,MAAA,MAAA,CAAO,EAAE,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,KAAY,OAAO,IAAA,GAAO,MAAA;AAAA;AAG/C,IAAA,OAAO,MAAA;AAAA;AACT,EAEA,YAAY,WAAA,EAAqB;AAC/B;AACF,EAEO,sBAAA,GAAyB;AAC9B,IAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,YAAA,EAAc,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,IAAI,CAAA;AACzE,IAAA,OAAO,SAAA;AAAA;AAEX;;kBC/EO,MAAe,SAAA,CAA6C;AAEnE;;AClBO,MAAM,0BAA0BmB,WAAA,CAGpC;AAAA,EACD,WAAA,CACS,aACA,OAAA,EAIP;AACA,IAAA,KAAA,EAAM;AANC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAOX;;;;;;;;ACZA,MAAM,YAAA,GAAe;AAAA,EACnB,iBAAiB,EAAC;AAAA,EAClB,iBAAA,EAAmB;AACrB,CAAA;AAEO,MAAM,0BAA0BA,WAAA,CAGpC;AAAA,EAMD,WAAA,CACS,aACA,OAAA,EAIP;AACA,IAAA,KAAA,EAAM;AANC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAPT,IAAAnB,eAAA,CAAA,IAAA,EAAO,OAAA,CAAA;AAaL,IAAA,cAAA,CAA2C,IAAA,EAAM,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AACtE,IAAA,IAAA,CAAK,KAAA,GAAQ,YAAA;AAAA;AACf,EACA,kBAAkB,QAAA,EAAwB;AACxC,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAA,CAAK,kBAAA;AAAA,MAChC,QAAA;AAAA,MACA,KAAK,KAAA,CAAM;AAAA,KACb;AAAA;AACF,EACA,UAAA,GAAa;AACX,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,EAAC;AAAA;AAChC,EACA,oBAAoB,wBAAA,EAAqD;AACvE,IAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,wBAAA;AAAA;AACjC,EACA,kBAAA,CACE,SACA,OAAA,EACgB;AAChB,IAAA,IAAI,cAAc,EAAC;AACnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,WAAA,GAAc,OAAA,CAAQ,MAAA;AAAA,QACpB,CAAC,EAAA,KACC,EAAA,CAAG,EAAA,KAAO,OAAA,CAAQ,EAAA,IAAM,EAAA,CAAG,IAAA,KAAS,OAAA,CAAQ,IAAA,IAAQ,EAAA,CAAG,IAAA,KAAS;AAAA,OACpE;AAAA;AAEF,IAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACzB,MAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA;AAE1B,IAAA,OAAO,eAAe,EAAC;AAAA;AAE3B;;0BCvDO,MAAM,0BAA0BmB,WAAA,CAGpC;AAAA,EACD,WAAA,CACS,aACA,OAAA,EAIP;AACA,IAAA,KAAA,EAAM;AANC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAOX;;ACbO,MAAM,2BAA2BA,WAAA,CAErC;AAAA,EACD,WAAA,CACS,aACA,OAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAIX;;iBCTO,MAAM,iBAAiBA,WAAA,CAE3B;AAAA,EACD,WAAA,CACS,aACA,OAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAIX;;ACsBA,SAAS,kBAAA,CACP,SAAA,EACA,MAAA,EACA,QAAA,EACA;AACA,EAAA,OAAO,IAAI,iBAAA,CAAkB,QAAA,EAAU,OAAO,MAAA,KAAW;AACvD,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,MAAM,iBAAA,GAAoB,MAAM,KAAA,CAAM,IAAA;AAAA,QAQpC,YAAY,SAAA,EAAW;AAAA,UACrB,MAAA,EAAQ,aAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,WAAA,EAAa;AAAA,SACd,CAAA;AAAA,QACD,MAAA,CAAO;AAAA,OACT;AACA,MAAA,MAAM,SAAA,GAAY,uBAAA;AAAA,QAChB;AAAA,OACF;AACA,MAAA,IACE,SAAA,EAAW,SAAS,MAAA,EAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,kBAAA,IACzC,SAAA,EAAW,OAAA,KAAY,kBAAA,EACvB;AACA,QAAA,IAAI,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS;AAClC,UAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,YACtB,IAAI,mBAAA,CAAoB;AAAA,cACtB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,OAAA;AAAA,cAChC,IAAA,EAAM;AAAA,aACP;AAAA,WACH;AAAA;AAEF,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAe;AAAA,OAC3C,MAAO;AACL,QAAA,MAAM,MAAM,wBAAwB,CAAA;AAAA;AACtC;AAEF,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,IAAA,EAAK;AAAA,GAC9D,CAAA;AACH;AAEA,SAAS,kBAAA,CACP,SAAA,EACA,MAAA,EACA,IAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAkB,IAAA,EAAM,eAAgB,MAAA,EAAQ;AAChE,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,MAAM,mBAAA,GAAsB,MAAM,KAAA,CAAM,IAAA;AAAA,QACtC,YAAY,SAAA,EAAW;AAAA,UACrB,MAAA,EAAQ,aAAA;AAAA,UACR,MAAA,EAAQ,IAAA;AAAA,UACR,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,QACD,MAAA,CAAO;AAAA,OACT;AACA,MAAA,MAAM,SAAA,GAAY,uBAAA;AAAA,QAChB;AAAA,OACF;AACA,MAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,QAAA,OAAO,kBAAA,CAAmB,SAAA,EAAW,MAAA,EAAQ,SAAA,CAAU,KAAM,IAAK,CAAA;AAAA,OACpE,MAAA,IAAW,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,SAAS,mBAAA,EAAqB;AACnE,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAe;AAAA,OAC3C,MAAA,IAAW,SAAA,CAAU,WAAA,EAAa,OAAA,EAAS,IAAA,EAAM;AAC/C,QAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,UACtB,IAAI,mBAAA,CAAoB;AAAA,YACtB,OAAA,EAAS,SAAA,CAAU,WAAA,CAAY,OAAA,CAAQ,IAAA;AAAA,YACvC,IAAA,EAAM;AAAA,WACP;AAAA,SACH;AACA,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,IAAA,EAAK;AAAA,OAC/D,MAAA,IAAW,SAAA,CAAU,IAAA,EAAM,QAAA,EAAU;AACnC,QAAA,SAAA,CAAU,KAAA,CAAM,iBAAiB,cAAA,CAAe,QAAA;AAChD,QAAA,OAAO,oBAAoB,MAAA,EAAQ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,WAAW,EAAE,CAAA;AAAA;AAExE,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,IAAA,EAAK;AAAA,KAC/D,MAAO;AACL,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,IAAA,EAAK;AAAA;AAC/D,GACD,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAEA,eAAeC,WAAA,CACb,WACA,MAAA,EACqC;AACrC,EAAA,MAAM,6BAA6B,MAAM,IAAA;AAAA,IAIvC,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAa,EAAA;AAAA,MACb,qBAAA,EAAuB;AAAA,KACxB,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,4BAA4B,IAAA,EAAM,IAAA;AAE5D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,IAAIC,mBAAA;AAAA,MACT,0BAAA,EAA4B,IAAA;AAAA,MAC5B,OAAO,MAAA,KAAW;AAChB,QAAA,IAAI,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,MAAA,EAAQ;AACrC,UAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO;AAAA,SACnC,MAAA,IAAW,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,MAAA,EAAQ;AAC7C,UAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAEtC,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,KAAA,EAAM;AAAA;AAChE,KACF;AAAA,GACF,MAAO;AACL,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAExC;AACA,eAAeC,MAAA,CACb,WACA,MAAA,EACqC;AACrC,EAAA,MAAM,eAAe,MAAM,IAAA;AAAA,IAOzB,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ;AAAA;AAAA,KAET,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAEA,EAAA,MAAM,iBAAA,GACJ,cAAc,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,iBAAA;AAErD,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,IAAIC,UAAA,CAAS,YAAA,EAAc,IAAA,EAAM,OAAO,MAAA,KAAW;AACxD,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAEtC,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,KAAA,EAAM;AAAA,KAC/D,CAAA;AAAA,GACH,MAAO;AACL,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAExC;AAEA,eAAeC,WAAA,CACb,WACA,MAAA,EACiB;AACjB,EAAA,MAAM,qBAAqB,MAAM,IAAA;AAAA,IAO/B,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,2BAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AACA,EAAA,IACE,oBAAoB,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,CAAM,CAAC,MAClD,2BAAA,EACA;AACA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA;AAGF,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AAEA,eAAeC,gBAAA,CACb,WACA,MAAA,EACkC;AAClC,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAG,SAAA,CAAU,SAAA,EAAU,CAAE,gBAAA,EAAiB;AAAA,IAC1C,GAAG,SAAA,CAAU,UAAA,EAAW,CAAE,gBAAA,EAAiB;AAAA,IAC3C,GAAG,SAAA,CAAU,eAAA,EAAgB,CAAE,gBAAA,EAAiB;AAAA,IAChD,GAAG,QAAQ,gBAAA;AAAiB,GAC9B;AACA,EAAA,MAAM,kBAAkB,MAAM,IAAA;AAAA,IAC5B,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO,IAAA;AAAA,MACP,WAAA,EAAa,SAAA,CAAU,SAAS,CAAA,CAAE;AAAA,KACnC,CAAA;AAAA,IACD;AAAA,MACE,QAAA,EAAU,gBAAA;AAAA,MACV,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAA,EAAW,CAAC,GAAA,KAAQ;AAElB,QAAA,MAAM,6BAAA,GAAgC,CACpC,KAAA,EACA,GAAA,KAMwB;AACxB,UAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AAChD,YAAA,OAAO,KAAA;AAAA;AAET,UAAA,OAAO,gBAAA,CAAiB,OAAc,GAAG,CAAA;AAAA,SAC3C;AAGA,QAAA,MAAM,cAAc,0BAAA,EAA2B;AAG/C,QAAA,WAAA,CAAY,mBAAA,GAAsB;AAAA,UAChC,sBAAA;AAAA,UACA,6BAAA;AAAA,UACA;AAAA,SACF;AAGA,QAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA;AAG5C,QAAA,OAAO,0BAAA,EAA6C;AAAA,UAClD,GAAA;AAAA,UACA;AAAA,SACF;AAAA;AACF;AACF,GACF;AACA,EAAA,IACE,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,OAAA,IACpC,eAAA,EAAiB,IAAA,EAAM,aAAA,EAAe,SAAA,IACtC,eAAA,EAAiB,IAAA,EAAM,UAAA,EAAY,SAAA,EACnC;AACA,IAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,iBAAA,EAAmB;AAAA,KACrB;AAAA;AAEF,EAAA,IAAI,eAAA,EAAiB,IAAA,EAAM,OAAA,KAAY,kBAAA,EAAoB;AACzD,IAAA,SAAA,CAAU,KAAA,CAAM,iBAAiB,cAAA,CAAe,QAAA;AAChD,IAAA,OAAO,mBAAA;AAAA,MACL,MAAA;AAAA,MACA,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAA,IAAS;AAAA,KAC5C;AAAA;AAEF,EAAA,MAAM,qBAAqB,MAAM,IAAA;AAAA,IAG/B,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,OAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAQ,uBAAA;AAAA,MACR,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACb;AAAA,GACH;AACA,EAAA,MAAM,sBAAsB,MAAM,IAAA;AAAA,IAGhC,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,OAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAQ,uBAAA;AAAA,MACR,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACb;AAAA,GACH;AACA,EAAA,aAAA,CAAc,SAAA,EAAA,CAAY,kBAAA,EAAoB,IAAA,EAAa,IAAI,CAAA;AAC/D,EAAA,aAAA,CAAc,SAAA,EAAA,CAAY,mBAAA,EAAqB,IAAA,EAAa,IAAI,CAAA;AAEhE,EAAA,IAAI,kBAAA,EAAoB,MAAM,IAAA,EAAM;AAClC,IAAA,mBAAA,CAAoB,SAAA,EAAW,kBAAA,CAAmB,IAAA,EAAM,IAAI,CAAA;AAAA;AAE9D,EAAA,IAAI,mBAAA,EAAqB,MAAM,IAAA,EAAM;AACnC,IAAA,mBAAA,CAAoB,SAAA,EAAW,mBAAA,CAAoB,IAAA,EAAM,IAAI,CAAA;AAAA;AAE/D,EAAA,IAAI,eAAA,EAAiB,MAAM,aAAA,EAAe;AACxC,IAAA,OAAO,kBAAA;AAAA,MACL,SAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA,CAAgB,KAAK,IAAA,CAAM;AAAA,KAC7B;AAAA;AAGF,EAAA,IAAI,eAAA,EAAiB,IAAA,EAAM,cAAA,KAAmB,IAAA,EAAM;AAClD,IAAA,OAAO,kBAAA;AAAA,MACL,SAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA,CAAgB,KAAK,IAAA,CAAM;AAAA,KAC7B;AAAA;AAGF,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AACA,eAAe,mBAAA,CACb,QACA,OAAA,EACkC;AAClC,EAAA,OAAO,IAAI,kBAAA,CAAmB,OAAA,EAAS,OAAO,MAAA,KAAW;AACvD,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAe;AAAA;AAE3C,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,IAAA,EAAK;AAAA,GAC9D,CAAA;AACH;AACA,eAAe,WAAA,CACb,WACA,MAAA,EACiB;AACjB,EAAA,MAAM,sBAAsB,MAAM,IAAA;AAAA,IAChC,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACD;AAAA,MACE,UAAU,EAAC;AAAA,MACX,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,gBAAA,EAAkB;AAAA;AACpB,GACF;AAEA,EAAA,IAAI,mBAAA,EAAqB,MAAM,GAAA,EAAK;AAClC,IAAA,SAAA,CAAU,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,mBAAA,EAAqB,MAAM,GAAG,CAAA;AAEnE,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,iBAAA,EAAmB;AAAA,KACrB;AAAA,GACF,MAAO;AACL,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,SAAA,CAAU,SAAS,CAAA,CAAE,MAAA;AAC1C,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,CAAE,SAAA,KAAc,GAAA,EAAK;AAC1C,MAAA,SAAA,CAAU,SAAS,CAAA,CAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM;AAAA,KAC7C,MAAA,IAAW,SAAA,CAAU,SAAS,CAAA,CAAE,cAAc,GAAA,EAAK;AACjD,MAAA,QAAA,CAAS,MAAA,EAAO;AAAA,KAClB,MAAA,IACG,SAAA,CAAU,SAAS,CAAA,CAAE,cAAoC,GAAA,CAAI,KAAA;AAAA,MAC5D;AAAA,KACF,EACA;AACA,MAAC,SAAA,CAAU,SAAS,CAAA,CAAE,YAAA,CAAmC,MACvD,SAAA,CAAU,SAAS,EAAE,YAAA,CACrB,GAAA;AAAA,KACJ,MAAA,IAAW,SAAA,CAAU,SAAS,CAAA,CAAE,cAAc,GAAA,EAAK;AACjD,MAAA,SAAA,CAAU,SAAS,CAAA,CAAE,QAAA,CAAS,OAAO,SAAA,CAAU,SAAS,EAAE,aAAa,CAAA;AAAA,KACzE,MAAO;AACL,MAAA,IAAI,eACF,SAAA,CAAU,SAAS,EAAE,MAAA,CAAO,QAAA,CAAS,eAAe,cAAc,CAAA;AACpE,MAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,QAAA,YAAA,GACE,UAAU,SAAS,CAAA,CAAE,GAAA,CAAK,QAAA,CAAS,eAAe,cAAc,CAAA;AAAA;AAGpE,MAAA,SAAA,CAAU,KAAA,CAAM,iBAAiB,cAAA,CAAe,QAAA;AAEhD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAC,aAAqB,eAAA,EAAgB;AAAA,OACxC,MAAO;AACL,QAAA,SAAA,CAAU,cAAc,QAAA,EAAS;AAAA;AACnC;AAGF,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,iBAAA,EAAmB;AAAA,KACrB;AAAA;AAEJ;AAEA,MAAMC,UAAA,GAAgD;AAAA,EACpD,UAAA,EAAYF,WAAA;AAAA,EACZ,UAAA,EAAYJ,WAAA;AAAA,EACZ,YAAA,EAAc,WAAA;AAAA,EACd,OAAA,EAASK,gBAAA;AAAA,EACT,IAAA,EAAMH;AACR,CAAA;AAEA,eAAsB,OAAA,CACpB,WACA,MAAA,EACmC;AACnC,EAAA,IAAI,MAAA,GAAiB,MAAA;AAErB,EAAA,OAAO,OAAO,IAAA,EAAM;AAClB,IAAA,MAAM,OAAA,GAAUI,UAAA,CAAS,MAAA,CAAO,IAAI,CAAA;AAEpC,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AACrD,IAAA,IAAI,yBAAyBP,WAAA,EAAW;AACtC,MAAA,OAAO,aAAA;AAAA;AAGT,IAAA,MAAA,GAAS,aAAA;AAET,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,QACtB,IAAI,oBAAoB,EAAE,OAAA,EAAS,OAAO,KAAA,EAAO,IAAA,EAAM,SAAS;AAAA,OAClE;AAAA;AAGF,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,iBAAA,EAAmB;AAC5C,MAAA,OAAO,KAAA;AAAA;AACT;AAGF,EAAA,OAAO,IAAA;AACT;;AC5dO,MAAe,SAAA,CAA6C;AAEnE;;ACdO,MAAM,0BAA0B,SAAA,CAGpC;AAAA,EACD,WAAA,CACS,aACA,OAAA,EAIP;AACA,IAAA,KAAA,EAAM;AANC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAOX;;ACbO,MAAM,iBAAiB,SAAA,CAE3B;AAAA,EACD,WAAA,CACS,aACA,OAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAIX;;ACEA,eAAe,SAAA,CACb,WACA,MAAA,EACqC;AACrC,EAAA,MAAM,6BAA6B,MAAM,IAAA;AAAA,IAIvC,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAa,EAAA;AAAA,MACb,qBAAA,EAAuB;AAAA,KACxB,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,4BAA4B,IAAA,EAAM,IAAA;AAE5D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,IAAI,iBAAA;AAAA,MACT,0BAAA,EAA4B,IAAA;AAAA,MAC5B,OAAO,MAAA,KAAW;AAChB,QAAA,IAAI,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,MAAA,EAAQ;AACrC,UAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAO;AAAA,SACnC,MAAA,IAAW,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,MAAA,EAAQ;AAC7C,UAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAEtC,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,KAAA,EAAM;AAAA;AAChE,KACF;AAAA,GACF,MAAO;AACL,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAExC;AACA,eAAe,IAAA,CACb,WACA,MAAA,EACqC;AACrC,EAAA,MAAM,eAAe,MAAM,IAAA;AAAA,IAOzB,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ;AAAA;AAAA,KAET,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AAEA,EAAA,MAAM,iBAAA,GACJ,YAAA,EAAc,IAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,KAAS,iBAAA;AAE1D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO,IAAI,QAAA,CAAS,YAAA,EAAc,IAAA,EAAM,OAAO,MAAA,KAAW;AACxD,MAAA,IAAI,OAAO,SAAA,EAAW;AACpB,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAEtC,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,mBAAmB,KAAA,EAAM;AAAA,KAC/D,CAAA;AAAA,GACH,MAAO;AACL,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA;AAExC;AAEA,eAAe,SAAA,CACb,WACA,MAAA,EACiB;AACjB,EAAA,MAAM,qBAAqB,MAAM,IAAA;AAAA,IAO/B,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,2BAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACD;AAAA,MACE,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AACA,EAAA,IACE,oBAAoB,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,CAAM,CAAC,MAClD,2BAAA,EACA;AACA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA;AAGF,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AAEA,eAAe,cAAA,CACb,WACA,MAAA,EACkC;AAClC,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAG,SAAA,CAAU,SAAA,EAAU,CAAE,gBAAA,EAAiB;AAAA,IAC1C,GAAG,SAAA,CAAU,eAAA,EAAgB,CAAE,gBAAA,EAAiB;AAAA,IAChD,GAAG,QAAQ,gBAAA;AAAiB,GAC9B;AACA,EAAA,MAAM,kBAAkB,MAAM,IAAA;AAAA,IAC5B,SAAA;AAAA,IACA,YAAY,SAAA,EAAW;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO,IAAA;AAAA,MACP,WAAA,EAAa,SAAA,CAAU,SAAS,CAAA,CAAE;AAAA,KACnC,CAAA;AAAA,IACD;AAAA,MACE,QAAA,EAAU,gBAAA;AAAA,MACV,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB;AAAA,QAChB,WAAA,EAAa;AAAA;AACf;AACF,GACF;AACA,EAAA,IAAI,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS;AAC/C,IAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,KACR;AAAA;AAEF,EAAA,IAAI,eAAA,EAAiB,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO;AAC5C,IAAA,MAAM,qBAAqB,MAAM,IAAA;AAAA,MAG/B,SAAA;AAAA,MACA,YAAY,SAAA,EAAW;AAAA,QACrB,OAAA,EAAS,gCAAA;AAAA,QACT,MAAA,EAAQ,uBAAA;AAAA,QACR,SAAA,EAAW,GAAA;AAAA,QACX,UAAA,EAAY;AAAA,OACb;AAAA,KACH;AACA,IAAA,IAAI,kBAAA,EAAoB,MAAM,IAAA,EAAM;AAClC,MAAA,mBAAA,CAAoB,SAAA,EAAW,kBAAA,CAAmB,IAAA,EAAM,IAAI,CAAA;AAAA;AAG9D,IAAA,MAAM,GAAA,GAAM,aAAa,eAAA,CAAgB,IAAA,CAAK,SAAS,MAAA,CAAO,KAAK,EAAE,CAAC,CAAA;AAEtE,IAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,MAAA,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG,GAAA,EAAK,UAAiB,IAAA,CAAK,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,KACzE,MAAO;AACL,MAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,GAAG,CAAA;AAErB,MAAA,SAAA,CAAU,SAAS,EAAE,QAAA,CAAS,MAAA;AAAA,QAC5B,YAAY,SAAA,EAAW;AAAA,UACrB,SAAS,CAAA,CAAE,IAAA;AAAA,UACX,MAAA,EAAQ,CAAA,CAAE,YAAA,CAAa,QAAQ;AAAA,SAChC;AAAA,OACH;AACA,MAAA,CAAC,UAAU,SAAS,CAAA,EAAG,GAAA,EAAK,QAAA,EAAiB,cAAc,MAAA,CAAO;AAAA,QAChE,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAA;AAAA,QAC5C,IAAA,EAAM;AAAA,OACP,CAAA;AAAA;AACH;AAGF,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AAEA,MAAM,QAAA,GAAgD;AAAA,EACpD,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,eAAsB,aAAA,CACpB,WACA,MAAA,EACmC;AACnC,EAAA,IAAI,MAAA,GAAiB,MAAA;AAErB,EAAA,OAAO,OAAO,IAAA,EAAM;AAClB,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA;AAEpC,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AACrD,IAAA,IAAI,yBAAyB,SAAA,EAAW;AACtC,MAAA,OAAO,aAAA;AAAA;AAGT,IAAA,MAAA,GAAS,aAAA;AAET,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,SAAA,CAAU,aAAA,CAAc,GAAA;AAAA,QACtB,IAAI,oBAAoB,EAAE,OAAA,EAAS,OAAO,KAAA,EAAO,IAAA,EAAM,SAAS;AAAA,OAClE;AAAA;AAGF,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,iBAAA,EAAmB;AAC5C,MAAA,OAAO,KAAA;AAAA;AACT;AAGF,EAAA,OAAO,IAAA;AACT;;;;;;;;AC1KO,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAwB;AACrD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AACvC,IAAA,OAAO,IACJ,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,WAAW,GAAG,CAAA,CACtB,QAAQ,OAAA,EAAS,GAAG,EACpB,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA,CACpB,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA;AAE1B,EAAA,OAAO,EAAA;AACT,CAAA;AAaO,MAAM,kBAAkBT,cAAA,CAc5B;AAAA,EAkBD,YAAmB,WAAA,EAAoC;AACrD,IAAA,KAAA,EAAM;AADW,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAjBnB,IAAA,aAAA,CAAA,IAAA,EAAO,eAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,EAAS,IAAI,MAAA,CAAO,IAAI,CAAA,CAAA;AAChC,IAAA,aAAA,CAAA,IAAA,EAAQ,SAAA,EAAU,IAAI,OAAA,CAAQ,IAAI,CAAA,CAAA;AAClC,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAe,IAAI,YAAA,CAAa,IAAI,CAAA,CAAA;AAC5C,IAAA,aAAA,CAAA,IAAA,EAAQ,sBAAA,EAAuB,KAAA,CAAA;AAC/B,IAAA,aAAA,CAAA,IAAA,EAAO,iBAAA,EAA2C,IAAA,CAAA;AAClD,IAAA,aAAA,CAAA,IAAA,EAAQ,UAIF,EAAC,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAA,EAAuB,CAAA,CAAA;AAC/B,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAA,EAAqB,CAAA,CAAA;AAC7B,IAAA,aAAA,CAAA,IAAA,EAAgB,eAAA,CAAA;AAChB,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAA4B,EAAC,CAAA;AACrC,IAAA,aAAA,CAAA,IAAA,EAAQ,kBAAA,sBAAuB,GAAA,EAAsB,CAAA;AAYrD,IAAA,aAAA,CAAA,IAAA,EAAU,WAAA,EAAY;AAAA,MACpB,CAAA,sBAAO,GAAA,EAAkB;AAAA,MACzB,CAAA,sBAAO,GAAA;AAAkB,KAC3B,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAU,OAAA,EAAQ;AAAA,MAChB,CAAA,sBAAO,GAAA,EAAkB;AAAA,MACzB,CAAA,sBAAO,GAAA;AAAkB,KAC3B,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,EAII;AAAA,MACF,gBAAgB,cAAA,CAAe,OAAA;AAAA,MAC/B,MAAA,EAAQ,CAAA;AAAA,MACR,kBAAA,EAAoB;AAAA,KACtB,CAAA;AAaA,IAAA,aAAA,CAAA,IAAA,EAAQ,2BAAuD,EAAC,CAAA;AAsDhE,IAAA,aAAA,CAAA,IAAA,EAAQ,mBAA4B,EAAC,CAAA;AA0JrC,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,EAAO;AAAA,MACL,MAAM,MAAM;AACV,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,OAC9B;AAAA,MACA,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,OAC7B;AAAA,MACA,MAAM,MAAM;AACV,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,OAC1B;AAAA,MACA,UAAU,MAAM;AACd,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,OAC9B;AAAA,MACA,MAAM,MAAM;AACV,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,OAC1B;AAAA,MACA,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,OAC7B;AAAA,MACA,UAAU,MAAM;AACd,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,OAC9B;AAAA,MACA,OAAO,MAAM;AACX,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,OAC3B;AAAA,MACA,UAAU,MAAM;AACd,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,OAC9B;AAAA,MACA,OAAO,MAAM;AACX,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA;AAC3B,KACF,CAAA;AApRE,IAAA,IAAA,CAAK,gBAAgB,EAAE,GAAG,gBAAA,EAAkB,GAAG,YAAY,aAAA,EAAc;AAEzE,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CAAc,IAAI,CAAA;AAE3C,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA;AAC5C,EAqBA,kBAAkB,OAAA,EAA2B;AAC3C,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,OAAO,CAAA;AACjC,IAAA,OAAA,CAAQ,QAAQ,MAAM;AACpB,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,KACrC,CAAA;AAAA;AACH,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,MAAA,EAAO,EAAG,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA;AAAA;AAC5D,EAOA,mBAAA,CAAoB,WAAuB,EAAA,EAAmB;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,uBAAA,CAAwB,SAAS,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,uBAAA,CAAwB,SAAS,CAAA,GAAI,IAAA;AAC1C,MAAA,EAAA,EAAG;AAAA;AACL;AACF,EAEA,eAAe,IAAA,EAAkB;AAC/B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,IAAI,CAAA,CAAE,QAAQ,CAAA;AAAA;AACtC,EACA,aAAA,CAAc,UAAkB,SAAA,EAAwB;AACtD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,CAAE,IAAI,QAAQ,CAAA;AAAA,KAC3C,MAAO;AACL,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,GAAA,CAAI,QAAQ,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAAA;AAChE;AACF,EACA,WAAA,CAAY,QAAyB,SAAA,EAAwB;AAC3D,IAAA,IAAI,SAAA;AAAW,MAAA,OAAO,KAAK,SAAA,CAAU,SAAS,EAAE,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAClE,IAAA,OACE,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,GAAA,CAAI,OAAO,MAAM,CAAC,CAAA,IACnC,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA;AAEvC,EACA,IAAI,WAAA,GAAc;AAChB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA;AACd,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA;AACd,EACO,SAAA,GAAY;AACjB,IAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AAEjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA;AACd,EACO,UAAA,GAAa;AAClB,IAAA,IAAA,CAAK,QAAQ,IAAA,EAAK;AAElB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA;AACd,EACO,eAAA,GAAkB;AACvB,IAAA,IAAA,CAAK,aAAa,IAAA,EAAK;AAEvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA;AACd,EACO,cAAA,GAAiB;AACtB,IAAA,OAAO,IAAI,KAAK,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,IAAU,CAAA;AAAA;AAC5C,EAIA,IAAW,MAAA,GAAS;AAClB,IAAA,OAAO,IAAA,CAAK,MAAM,MAAA,GAAS,CAAA;AAAA;AAC7B,EAEO,IAAA,GAAO;AACZ,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAA;AACX,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAA;AAAA;AACb,KACF;AAAA;AACF,EAEA,MAAa,IAAI,eAAA,EAAmC;AAClD,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AACzB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAA,GAAaI,OAAA,CAAM,SAAA,CAAU,IAAI,EAAE,QAAQ,CAAA;AAChD,MAAA,IAAA,CAAK,YAAA,GAAeA,OAAA,CAAM,SAAA,CAAU,IAAI,EAAE,YAAY,CAAA;AACtD,MAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,MAAA,IAAA,CAAK,YAAY,UAAA,GAAa;AAAA,QAC5B,QAAA,EAAU,SAAA,CAAU,IAAI,CAAA,CAAE,iBAAA,IAAqB,EAAA;AAAA,QAC/C,WAAA,EAAa,SAAA,CAAU,IAAI,CAAA,CAAE,oBAAA,IAAwB;AAAA,OACvD;AAEA,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,SAAA,CAAU,IAAI,EAAE,WAAW,CAAA;AAEzD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,GAAA,GAAwB,SAAS,MAAM,CAAA;AAC7C,QAAA,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,OAAO,CAAA,CAAE,OAAA;AAAA,UAAQ,CAAC,CAAA,KAC9C,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,YACjB,IAAI,mBAAA,CAAoB;AAAA,cACtB,SAAS,CAAA,CAAE,IAAA;AAAA,cACX,IAAA,EAAM;AAAA,aACP;AAAA;AACH,SACF;AACA,QAAA;AAAA,UACE,GAAG,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,SAAS,CAAA;AAAA,UACzC,GAAG,YAAA,CAAa,GAAA,CAAI,aAAA,EAAe,SAAS;AAAA,SAC9C,CAAE,OAAA;AAAA,UAAQ,CAAC,CAAA,KACT,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,YACjB,IAAI,mBAAA,CAAoB;AAAA,cACtB,SAAS,CAAA,CAAE,IAAA;AAAA,cACX,IAAA,EAAM,OAAA;AAAA,cACN,YAAY,CAAA,CAAE;AAAA,aACf;AAAA;AACH,SACF;AAAA;AAGF,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC7D,QAAA,IAAI,CAAA,GAAI,KAAK,YAAA,EAAc;AACzB,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,YACf,KAAA,EAAO,GAAG,QAAA,CAAS,IAAA,EAAM,YAAY,CAAA,CAAE,IAAI,IAAI,CAAC,CAAA,CAAA;AAAA,YAChD,UAAA,EAAY,CAAA;AAAA,YACZ,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA;AAEH,QAAA,IAAI,CAAA,GAAI,IAAA,CAAK,YAAA,IAAgB,CAAA,IAAK,KAAK,UAAA,EAAY;AACjD,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,YACf,KAAA,EAAO,GAAG,QAAA,CAAS,IAAA,EAAM,YAAY,CAAA,CAAE,IAAI,IAAI,CAAC,CAAA,CAAA;AAAA,YAChD,UAAA,EAAY,CAAA;AAAA,YACZ,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA;AAEH,QAAA,IAAI,CAAA,KAAM,KAAK,YAAA,EAAc;AAC3B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,YACf,KAAA,EAAO,GAAG,QAAA,CAAS,IAAA,EAAM,YAAY,CAAA,CAAE,IAAI,IAAI,CAAC,CAAA,CAAA;AAAA,YAChD,UAAA,EAAY,CAAA;AAAA,YACZ,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA;AACH;AAEF,MAAA,MAAM,GAAA,GAAM,MAAM,WAAA,CAAY,kBAAA,CAAmB,IAAI,CAAA;AAErD,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,kBAAkB,GAAA,EAAK;AACtC,UAAA,MAAM,KAAA,GAAQX,eAAA,CAAc,cAAA,CAAe,UAAU,CAAA;AACrD,UAAA,IACE,CAAC,MAAM,MAAA,IACP,CAAC,MAAM,SAAA,IACP,YAAA,CAAa,cAAA,CAAe,KAAK,CAAA,CAAE,KAAA;AAAA,YACjC,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,EAAY;AAAA,WACxB,KACC,YAAA,CAAa,cAAA,CAAe,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,IAC3C,YAAA,CAAa,cAAA,CAAe,WAAW,CAAA,CAAE,MAAA,GAAS,CAAA,CAAA,EACpD;AACA,YAAA,IAAA,CAAK,eAAA,CAAgB,IAAA;AAAA,cACnB,cAAA,CAAe,SAAA,GAAY,GAAA,GAAM,cAAA,CAAe;AAAA,aAClD;AAAA;AACF;AAEF,QAAA,WAAA,MAAiB,kBAAkB,GAAA,EAAK;AACtC,UAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAA,EAAM,cAAc,CAAA;AAC7C,UAAA,MAAM,QAAQ,IAAA,EAAK;AAEnB,UAAA,IAAI,cAAA,CAAe,cAAc,GAAA,EAAK;AACpC,YAAA,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,GAAA,CAAI,cAAA,CAAe,UAAU,OAAO,CAAA;AACjD,YAAA,IAAA,CAAK,UAAU,CAAA,CAAE,GAAA,CAAI,OAAO,cAAA,CAAe,EAAE,GAAG,OAAO,CAAA;AAAA,WACzD,MAAO;AACL,YAAA,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,GAAA,CAAI,cAAA,CAAe,UAAU,OAAO,CAAA;AACjD,YAAA,IAAA,CAAK,UAAU,CAAA,CAAE,GAAA,CAAI,OAAO,cAAA,CAAe,EAAE,GAAG,OAAO,CAAA;AAAA;AACzD;AAGF,QAAA,IAAA,CAAK,KAAA,CAAM,iBACT,IAAA,CAAK,eAAA,CAAgB,WAAW,CAAA,GAC5B,cAAA,CAAe,UACf,cAAA,CAAe,SAAA;AAErB,QAAA,MAAM,IAAA,CAAK,WAAW,QAAQ,CAAA;AAC9B,QAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAC5B,QAAA,IACE,IAAA,CAAK,gBAAgB,MAAA,KAAW,CAAA,IAChC,KAAK,KAAA,CAAM,cAAA,KAAmB,eAAe,SAAA,EAC7C;AACA,UAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,cAAA,CAAe,OAAA;AAAA;AAC7C,eACO,CAAA,EAAG;AACV,QAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,cAAA,CAAe,mBAAA;AAC3C,QAAA,MAAM,CAAA;AAAA;AACR,KACF,SAAE;AACA,MAAA,MAAA,EAAO;AAAA;AACT;AACF,EAEU,cAAA,GAAiB;AACzB,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS;AACtD,MAAA,OAAO,KAAK,UAAA,CAAW,SAAA;AAAA,KACxB,CAAA;AACD,IAAA,OAAO,WAAA;AAAA;AACT,EAEO,kBAAA,CAAmB,WAAmB,OAAA,EAAiB;AAC5D,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,eAAA,CAAgB,MAAA;AAAA,MAC1C,CAAC,CAAA,KAAM,CAAA,KAAM,SAAA,GAAY,GAAA,GAAM;AAAA,KACjC;AACA,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,IAAK,KAAK,oBAAA,EAAsB;AAClE,MAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,cAAA,CAAe,OAAA;AAAA;AAC7C;AACF,EAEA,MAAa,QAAA,GAAW;AACtB,IAAA,OAAA,CAAQ,KAAK,8BAA8B,CAAA;AAAA;AAC7C,EACA,MAAa,WAAA,GAAc;AACzB,IAAA,OAAA,CAAQ,KAAK,iCAAiC,CAAA;AAAA;AAChD,EAmCA,aAAA,GAAgB;AACd,IAAA,IAAA,CAAK,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA;AACjC,EAEA,MAAa,MAAA,GAAS;AACpB,IAAA,MAAM,SAAA,GAAY,KAAK,eAAA,EAAiB,SAAA;AACxC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,YAAY,IAAA,EAAM;AAAA,UAChC,MAAA,EAAQ,cAAA;AAAA,UACR,KAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,qBAAqB,IAAI,CAAA;AAAA,UACrC,SAAA,EAAW;AAAA,SACZ,CAAA;AAED,QAAA,MAAM,YAAA,GAAe;AAAA,UACnB,GAAG,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAiB;AAAA,UACjC,GAAG,IAAA,CAAK,YAAA,CAAa,gBAAA;AAAiB,SACxC;AACA,QAAA,cAAA,CAAe,SAAS,YAAY,CAAA;AAAA,eAC7B,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,QAAA,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,UACjB,IAAI,mBAAA,CAAoB;AAAA,YACtB,IAAA,EAAM,OAAA;AAAA,YACN,OAAA,EAAS,OAAO,uBAAA;AAAwB,WACzC;AAAA,SACH;AACA,QAAA,OAAO,KAAA;AAAA;AACT;AACF;AACF,EAEA,MAAa,UACX,MAAA,EAC2C;AAC3C,IAAA,IAAI,UAAU,CAAC,MAAA,EAAQ,IAAA,IAAQ,CAAC,QAAQ,iBAAA,EAAmB;AACzD,MAAA,OAAO,KAAA;AAAA,KACT,MAAO;AACL,MAAA,MAAM,gBAAA,GAAmB,MAAA,KAAW,MAAA,IAAc,MAAM,KAAK,QAAA,EAAS;AACtE,MAAA,IAAI,qBAAqB,IAAA,EAAM;AAC7B,QAAA,OAAO,gBAAA;AAAA;AAGT,MAAA,IACE,KAAK,eAAA,EAAiB,QAAA,IACtB,CAAC,IAAA,CAAK,MAAA,CAAO,sBAAqB,EAClC;AACA,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,MAAM,UACJ,MAAA,KAAW,MAAA,IAAc,MAAM,IAAA,CAAK,WAAW,UAAU,CAAA;AAC3D,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,eAAA,EAAiB,UAAA,IAAc,OAAA,KAAY,IAAA;AAEnE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AACzB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAA,CACb,IAAA,CAAK,eAAA,EAAiB,WAAW,aAAA,GAAgB,OAAA;AAAA,YAEjD,IAAA;AAAA,YACC,MAAA,IAAU;AAAA,cACT,IAAA,EAAM;AAAA;AACR,WACF;AAEA,UAAA,IAAI,kBAAkBgB,WAAA,EAAW;AAC/B,YAAA,OAAO,MAAA;AAAA;AAGT,UAAA,OAAO,MAAA;AAAA,iBACA,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,UAAA,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,YACjB,IAAI,mBAAA,CAAoB;AAAA,cACtB,IAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAS,OAAO,uBAAA;AAAwB,aACzC;AAAA,WACH;AACA,UAAA,OAAO,KAAA;AAAA,SACT,SAAE;AACA,UAAA,MAAA,EAAO;AAAA;AACT,OACF,MAAO;AACL,QAAA,OAAO,OAAA;AAAA;AACT;AACF;AACF,EAEA,MAAa,MAAA,GAAS;AACpB,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAiB;AAAA,MAChC,GAAG,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAiB;AAAA,MACjC,GAAG,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAiB;AAAA,MACtC,GAAG,QAAQ,gBAAA;AAAiB,KAC9B;AACA,IAAA,MAAM,OAAO,MAAM,IAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAY,IAAA,EAAM;AAAA,QAChB,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY,qBAAqB,IAAI;AAAA,OACtC,CAAA;AAAA,MACD;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,iBAAA,EAAmB,WAAA;AAAA,QACnB,gBAAA,EAAkB;AAAA,UAChB,WAAA,EAAa;AAAA;AACf;AACF,KACF;AAEA,IAAA,IAAI,IAAA,EAAM,MAAM,IAAA,EAAM;AACpB,MAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,cAAA,CAAe,QAAA;AAAA;AAG7C,IAAA,OAAO,IAAA;AAAA;AACT,EAEA,MAAa,OAAO,MAAA,EAAkD;AACpE,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,EAAS;AACpC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,CAAE,MAAM,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAI;AACxC,QAAA,OAAO,KAAA;AAAA;AACT;AAEF,IAAA,IAAI,OAAA,KAAY,IAAA;AAAM,MAAA,OAAO,OAAA;AAE7B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,EAAiB,YAAA,IAAgB,OAAA,KAAY,IAAA;AAEpE,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,gBAAgB,MAAM,IAAA;AAAA,UAC1B,IAAA;AAAA,UACA,YAAY,IAAA,EAAM;AAAA,YAChB,MAAA,EAAQ,2BAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,UACD;AAAA,YACE,iBAAA,EAAmB,WAAA;AAAA,YACnB,gBAAA,EAAkB;AAAA,cAChB,WAAA,EAAa;AAAA;AACf;AACF,SACF;AACA,QAAA,IACE,eAAe,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,CAAM,CAAC,MAC7C,2BAAA,EACA;AACA,UAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA;AAI1D,QAAA,MAAM,wBAAwB,MAAM,IAAA;AAAA,UAIlC,IAAA;AAAA,UACA,YAAY,IAAA,EAAM;AAAA,YAChB,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ,IAAA;AAAA,YACR,WAAA,EAAa,SAAA,CAAU,IAAI,CAAA,CAAE;AAAA,WAC9B,CAAA;AAAA,UACD;AAAA,YACE,iBAAA,EAAmB,WAAA;AAAA,YACnB,gBAAA,EAAkB;AAAA,cAChB,WAAA,EAAa;AAAA;AACf;AACF,SACF;AACA,QAAA,IAAI,qBAAA,EAAuB,WAAW,GAAA,EAAK;AACzC,UAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA;AAEhD,QAAA,MAAM,iBAAA,GAAoB,uBAAuB,IAAA,EAAM,IAAA;AAEvD,QAAA,IAAI,iBAAA,IAAqB,CAAC,MAAA,EAAQ,MAAA,EAAQ;AACxC,UAAA,OAAO,IAAIE,mBAAA;AAAA,YACT,qBAAA,EAAuB,IAAA;AAAA,YACvB,YAAY;AACV,cAAA,OAAO,EAAA;AAAA;AACT,WACF;AAAA;AAGF,QAAA,IAAI,iBAAA,KAAsB,CAAC,MAAA,EAAQ,SAAA,IAAa,CAAC,MAAA,EAAQ,MAAA,CAAA;AACvD,UAAA;AAEF,QAAA,MAAM,OAAA,GAAU,YAAY,IAAA,EAAM;AAAA,UAChC,MAAA,EAAQ,cAAA;AAAA,UACR,KAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,qBAAqB,IAAI,CAAA;AAAA,UACrC,SAAA,EAAW;AAAA,SACZ,CAAA;AAED,QAAA,MAAM,YAAA,GAAe;AAAA,UACnB,GAAG,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAiB;AAAA,UAChC,GAAG,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAiB;AAAA,UACjC,GAAG,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAiB;AAAA,UACtC,GAAG,QAAQ,gBAAA;AAAiB,SAC9B;AACA,QAAA,cAAA,CAAe,SAAS,YAAY,CAAA;AACpC,QAAA,OAAO,IAAA;AAAA,eACA,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,QAAA,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,UACjB,IAAI,mBAAA,CAAoB;AAAA,YACtB,IAAA,EAAM,OAAA;AAAA,YACN,OAAA,EAAS,OAAO,uBAAA;AAAwB,WACzC;AAAA,SACH;AACA,QAAA,OAAO,KAAA;AAAA,OACT,SAAE;AACA,QAAA,MAAA,EAAO;AAAA;AACT;AACF;AACF,EAEA,MAAa,OAAA,GAAU;AACrB,IAAA,SAAA,CAAU,IAAI,EAAE,KAAA,EAAM;AAAA;AACxB,EAEA,MAAa,MAAA,GAAS;AACpB,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA;AAAA,QACrB,IAAA;AAAA,QACA,YAAY,IAAA,EAAM;AAAA,UAChB,MAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAO,IAAA;AAAA,UACP,KAAA,EAAO,IAAA;AAAA,UACP,UAAA,EAAY,qBAAqB,IAAI;AAAA,SACtC,CAAA;AAAA,QACD;AAAA,UACE,QAAA,EAAU;AAAA,YACR,GAAG,IAAA,CAAK,YAAA,CAAa,gBAAA,EAAiB;AAAA,YACtC,GAAG,IAAA,CAAK,OAAA,CAAQ,gBAAA;AAAiB,WACnC;AAAA,UACA,iBAAA,EAAmB,WAAA;AAAA,UACnB,gBAAA,EAAkB;AAAA,YAChB,WAAA,EAAa;AAAA;AACf;AACF,OACF;AAEA,MAAA,MAAM,QAAA,GAAW,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,QAAA;AACvC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAO,QAAA;AAAA;AACT,KACF,SAAE;AACA,MAAA,MAAA,EAAO;AAAA;AAGT,IAAA,OAAO,KAAA;AAAA;AACT,EAEO,aAAa,IAAA,EAAc;AAChC,IAAA,IAAI,IAAA,CAAK,MAAA;AAAQ,MAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AAC1C;AAAA;AAAA;AAAA,EAKO,IAAA,GAAO;AACZ,IAAE,cAAsB,iBAAA,IAA4B;AACpD,IAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,cAAA,CAAe,QAAA;AAC3C,IAAA,IAAA,CAAK,cAAc,IAAA,EAAK;AAAA;AAC1B,EAEA,MAAa,QAAA,GAAW;AACtB,IAAA,MAAM,GAAA,GAAM,GACV,SAAA,CAAU,IAAI,EAAE,OAClB,CAAA,sDAAA,EACE,SAAA,CAAU,IAAI,CAAA,CAAE,kBAAA,IAAsB,OACxC,CAAA,eAAA,EAAkB,SAAA,CAAU,IAAI,CAAA,CAAE,eAAA,IAAmB,OAAO,CAAA,YAAA,EAC1D,SAAA,CAAU,IAAI,CAAA,CAAE,cAClB,CAAA,WAAA,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAElC,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,IAAA,KAAS,IAAA,EAAM;AAClC,MAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,MAAA,OAAO,IAAA;AAAA;AACT;AACF,EAEO,YAAA,CAAa,YAAoB,SAAA,EAAmB;AACzD,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,aAAa,CAAC,CAAA;AAC3C,MAAA,IAAA,CAAK,MAAA,CAAO,UAAA,GAAa,CAAC,CAAA,CAAE,KAAA,GAAQ,SAAA;AAAA;AACxC,EAEA,MAAa,QAAA,GAAkC;AAC7C,IAAA,IAAI,YAAA,GAA6B,IAAA;AAEjC,IAAA,WAAA,MAAiB,GAAG,CAAC,CAAA,IAAK,IAAA,CAAK,MAAM,CAAA,EAAG;AACtC,MAAA,MAAM,MAAA,GAAS,MAAM,CAAA,CAAE,QAAA,EAAS;AAChC,MAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,CAAC,YAAA,EAAc;AACpC,QAAA,YAAA,GAAe,MAAA;AAAA;AACjB;AAEF,IAAA,WAAA,MAAiB,GAAG,CAAC,CAAA,IAAK,IAAA,CAAK,MAAM,CAAA,EAAG;AACtC,MAAA,MAAM,MAAA,GAAS,MAAM,CAAA,CAAE,QAAA,EAAS;AAChC,MAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,CAAC,YAAA,EAAc;AACpC,QAAA,YAAA,GAAe,MAAA;AAAA;AACjB;AAGF,IAAA,OAAO,YAAA,IAAgB,IAAA;AAAA;AACzB,EAEO,mBAAmB,KAAA,EAAiB;AACzC,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AAAA;AACzB,EAEO,kBAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA;AACd,EAEA,MAAc,WAAW,GAAA,EAAqB;AAC5C,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AAEb,IAAA,IAAI;AACF,MAAA,WAAA,MAAiB,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAC3C,QAAA,MAAA,GAAS,MAAA,IAAW,MAAM,CAAA,CAAE,eAAA,CAAgB,GAAG,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,OAAO,KAAA;AAAA;AACT;AAEF,MAAA,WAAA,MAAiB,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAC3C,QAAA,MAAA,GAAS,MAAA,IAAW,MAAM,CAAA,CAAE,eAAA,CAAgB,GAAG,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,OAAO,KAAA;AAAA;AACT;AAGF,MAAA,OAAO,IAAA;AAAA,KACT,SAAE;AACA,MAAA,MAAA,EAAO;AAAA;AACT;AACF,EACA,MAAa,mBAAA,GAAqC;AAChD,IAAA,IAAI,IAAA,CAAK,iBAAiB,IAAA,KAAS,CAAA;AAAG,MAAA;AAEtC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA;AAEhD,IAAA,MAAM,OAAA,CAAQ,WAAW,OAAO,CAAA;AAAA;AAEpC;;;;"}
|